diff options
111 files changed, 5179 insertions, 2876 deletions
diff --git a/sql/updates/world/2014_05_01_00_world_creature_template.sql b/sql/updates/world/2014_05_01_00_world_creature_template.sql new file mode 100644 index 00000000000..6bdc3f2f4a7 --- /dev/null +++ b/sql/updates/world/2014_05_01_00_world_creature_template.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `flags_extra`=0 WHERE `entry`=28882; diff --git a/sql/updates/world/2014_05_02_00_world_gossip_menu_option.sql b/sql/updates/world/2014_05_02_00_world_gossip_menu_option.sql new file mode 100644 index 00000000000..bbc3f93c124 --- /dev/null +++ b/sql/updates/world/2014_05_02_00_world_gossip_menu_option.sql @@ -0,0 +1,9 @@ +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE (`menu_id` IN (1971,2306,2422,1802,1801,1142,942,940,3624,4461,5262,5268,6186,6187,6211,7849,7859,8725,8891,8917,9200) AND `id`=0) OR (`menu_id` IN (942,5221,5262,5263,5268,6213,8391) AND `id`=1); +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id` IN (5262,5268) AND `id` IN (2,3,4,5,6); +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id` IN (6185,6210) AND `id` IN (0,1,2); +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id`=6185 AND `id`=3; +UPDATE `gossip_menu_option` SET `option_id`=4,`npc_option_npcflag`=8192 WHERE `menu_id`=7149 AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=5,`npc_option_npcflag`=16 WHERE `menu_id` IN (646,1022,4149,4152,4166,4210,4354,4554,4822,4844,5221,5263,7429,7430) AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=16,`npc_option_npcflag`=16 WHERE `menu_id`=4554 AND `id`=1; +UPDATE `gossip_menu_option` SET `option_id`=3,`npc_option_npcflag`=128 WHERE (`menu_id` IN (1802,3626) AND `id`=1) OR (`menu_id`=2890 AND `id`=5) OR (`menu_id` IN (2952,4746,7428) AND `id`=0) OR (`menu_id` IN (344,1293) AND `id`=3); +UPDATE `gossip_menu_option` SET `option_id`=8,`npc_option_npcflag`=65536 WHERE `menu_id`=2890 AND `id`=1; diff --git a/sql/updates/world/2014_05_02_00_world_locales_item_335.sql b/sql/updates/world/2014_05_02_00_world_locales_item_335.sql new file mode 100644 index 00000000000..e91e026249e --- /dev/null +++ b/sql/updates/world/2014_05_02_00_world_locales_item_335.sql @@ -0,0 +1,1067 @@ +SET NAMES 'utf8'; + +-- class:0, subclass:6,8 (item enhancement, other consumables) +UPDATE `locales_item` SET `name_loc2` = 'Pierre de soins mineure', `name_loc3` = 'Schwacher Gesundheitsstein', `name_loc6` = 'Piedra de salud', `name_loc8` = 'Крошечный камень здоровья' WHERE `entry` = 5512; +UPDATE `locales_item` SET `name_loc2` = 'Feu d\'artifice « rose jaune »', `name_loc3` = 'Feuerwerk mit gelben Rosen', `name_loc6` = 'Fuego de artificio amarillo y rosa', `name_loc8` = 'Фейерверк \"Желтая роза\"' WHERE `entry` = 9315; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de soins mineure', `name_loc3` = 'Schwacher Gesundheitsstein', `name_loc6` = 'Piedra de salud', `name_loc8` = 'Крошечный камень здоровья' WHERE `entry` = 19004; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de soins mineure', `name_loc3` = 'Schwacher Gesundheitsstein', `name_loc6` = 'Piedra de salud', `name_loc8` = 'Крошечный камень здоровья' WHERE `entry` = 19005; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Dextérité)', `name_loc3` = 'Rolle der Stiefelverzauberung - Gewandtheit', `name_loc6` = 'Pergamino de Encantar botas: maña', `name_loc8` = 'Свиток чар для обуви - стремительность' WHERE `entry` = 37603; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Santé mineure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Geringe Gesundheit', `name_loc6` = 'Pergamino de Encantar brazales: salud menor', `name_loc8` = 'Свиток чар для наручей - здоровье' WHERE `entry` = 38679; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé mineure)', `name_loc3` = 'Rolle der Brustverzauberung - Schwache Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud menor', `name_loc8` = 'Свиток чар для нагрудника - здоровье I' WHERE `entry` = 38766; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Absorption mineure)', `name_loc3` = 'Rolle der Brustverzauberung - Schwache Absorption', `name_loc6` = 'Pergamino de Encantar pechera: amortiguación menor', `name_loc8` = 'Свиток чар для нагрудника - поглощение I' WHERE `entry` = 38767; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Déviation mineure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Schwache Abwehr', `name_loc6` = 'Pergamino de Encantar brazales: Desvío menor', `name_loc8` = 'Свиток чар для наручей - отражение I' WHERE `entry` = 38768; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Mana mineur)', `name_loc3` = 'Rolle der Brustverzauberung - Schwaches Mana', `name_loc6` = 'Pergamino de Encantar pechera: maná menor', `name_loc8` = 'Свиток чар для нагрудника - мана I' WHERE `entry` = 38769; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance mineure)', `name_loc3` = 'Rolle der Umhangverzauberung - Schwacher Widerstand', `name_loc6` = 'Pergamino de Encantar capa: resistencia menor', `name_loc8` = 'Свиток чар для плаща - сопротивление I' WHERE `entry` = 38770; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Endurance mineure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Schwache Ausdauer', `name_loc6` = 'Pergamino de Encantar brazales: aguante menor', `name_loc8` = 'Свиток чар для наручей - выносливость I' WHERE `entry` = 38771; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Impact mineur)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Schwacher Einschlag', `name_loc6` = 'Pergamino de Encantar arma 2M: impacto menor', `name_loc8` = 'Свиток чар для двуручного оружия - импульс I' WHERE `entry` = 38772; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé inférieure)', `name_loc3` = 'Rolle der Brustverzauberung - Geringe Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud inferior', `name_loc8` = 'Свиток чар для нагрудника - здоровье II' WHERE `entry` = 38773; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Esprit mineur)', `name_loc3` = 'Rolle der Armschienenverzauberung - Schwache Willenskraft', `name_loc6` = 'Pergamino de Encantar brazales: espíritu menor', `name_loc8` = 'Свиток чар для наручей - дух I' WHERE `entry` = 38774; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Protection mineure)', `name_loc3` = 'Rolle der Umhangverzauberung - Schwacher Schutz', `name_loc6` = 'Pergamino de Encantar capa: protección menor', `name_loc8` = 'Свиток чар для плаща - броня I' WHERE `entry` = 38775; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Mana inférieur)', `name_loc3` = 'Rolle der Brustverzauberung - Geringes Mana', `name_loc6` = 'Pergamino de Encantar pechera: maná inferior', `name_loc8` = 'Свиток чар для нагрудника - мана II' WHERE `entry` = 38776; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Agilité mineure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Schwache Beweglichkeit', `name_loc6` = 'Pergamino de Encantar brazales: agilidad menor', `name_loc8` = 'Свиток чар для наручей - ловкость I' WHERE `entry` = 38777; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Force mineure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Schwache Stärke', `name_loc6` = 'Pergamino de Encantar brazales: fuerza menor', `name_loc8` = 'Свиток чар для наручей - сила I' WHERE `entry` = 38778; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Tueur de bête mineur)', `name_loc3` = 'Rolle der Waffenverzauberung - Schwacher Wildtiertöter', `name_loc6` = 'Pergamino de Encantar arma: Destripadora de bestias menor', `name_loc8` = 'Свиток чар для оружия - зверобой I' WHERE `entry` = 38779; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Frappe mineure)', `name_loc3` = 'Rolle der Waffenverzauberung - Schwaches Schlagen', `name_loc6` = 'Pergamino de Encantar arma: golpear menor', `name_loc8` = 'Свиток чар для оружия - удар I' WHERE `entry` = 38780; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Intelligence inférieure)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Geringe intelligenz', `name_loc6` = 'Pergamino de Encantar arma 2M: intelecto inferior', `name_loc8` = 'Свиток чар для двуручного оружия - интеллект I' WHERE `entry` = 38781; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé)', `name_loc3` = 'Rolle der Brustverzauberung - Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud', `name_loc8` = 'Свиток чар для нагрудника - здоровье III' WHERE `entry` = 38782; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Esprit inférieur)', `name_loc3` = 'Rolle der Armschienenverzauberung - Geringe Willenskraft', `name_loc6` = 'Pergamino de Encantar brazales: espíritu inferior', `name_loc8` = 'Свиток чар для наручей - дух II' WHERE `entry` = 38783; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance au Feu inférieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Geringer Feuerwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia al Fuego inferior', `name_loc8` = 'Свиток чар для плаща: сопротивление огню II' WHERE `entry` = 38784; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Endurance mineure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Schwache Ausdauer', `name_loc6` = 'Pergamino de Encantar botas: aguante menor', `name_loc8` = 'Свиток чар для обуви - выносливость I' WHERE `entry` = 38785; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Agilité mineure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Schwache Beweglichkeit', `name_loc6` = 'Pergamino de Encantar botas: agilidad menor', `name_loc8` = 'Свиток чар для обуви - ловкость I' WHERE `entry` = 38786; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Endurance mineure)', `name_loc3` = 'Rolle der Schildverzauberung - Schwache Ausdauer', `name_loc6` = 'Pergamino de Encantar escudo: aguante menor', `name_loc8` = 'Свиток чар для щита - выносливость I' WHERE `entry` = 38787; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Esprit inférieur)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Geringe Willenskraft', `name_loc6` = 'Pergamino de Encantar arma 2M: espíritu inferior', `name_loc8` = 'Свиток чар для двуручного оружия - дух I' WHERE `entry` = 38788; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Agilité mineure)', `name_loc3` = 'Rolle der Umhangverzauberung - Schwache Beweglichkeit', `name_loc6` = 'Pergamino de Encantar capa: agilidad menor', `name_loc8` = 'Свиток чар для плаща - ловкость I' WHERE `entry` = 38789; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Protection inférieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Geringer Schutz', `name_loc6` = 'Pergamino de Encantar capa: protección inferior', `name_loc8` = 'Свиток чар для плаща - броня II' WHERE `entry` = 38790; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Protection inférieure)', `name_loc3` = 'Rolle der Schildverzauberung - Geringer Schutz', `name_loc6` = 'Pergamino de Encantar escudo: protección inferior', `name_loc8` = 'Свиток чар для щита - броня' WHERE `entry` = 38791; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Esprit inférieur)', `name_loc3` = 'Rolle der Schildverzauberung - Geringe Willenskraft', `name_loc6` = 'Pergamino de Encantar escudo: espíritu inferior', `name_loc8` = 'Свиток чар для щита - дух I' WHERE `entry` = 38792; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Endurance inférieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Geringe Ausdauer', `name_loc6` = 'Pergamino de Encantar brazales: aguante inferior', `name_loc8` = 'Свиток чар для наручей - выносливость II' WHERE `entry` = 38793; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Frappe inférieure)', `name_loc3` = 'Rolle der Waffenverzauberung - Geringes Schlagen', `name_loc6` = 'Pergamino de Encantar arma: golpear inferior', `name_loc8` = 'Свиток чар для оружия - удар II' WHERE `entry` = 38794; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance à l\'Ombre inférieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Geringer Schattenwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia a las Sombras inferior', `name_loc8` = 'Свиток чар для плаща - сопротивление темной магии I' WHERE `entry` = 38795; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Impact inférieur)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Geringer Einschlag', `name_loc6` = 'Pergamino de Encantar arma 2M: impacto inferior', `name_loc8` = 'Свиток чар для двуручного оружия - импульс II' WHERE `entry` = 38796; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Force inférieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Geringe Stärke', `name_loc6` = 'Pergamino de Encantar brazales: fuerza inferior', `name_loc8` = 'Свиток чар для наручей - сила II' WHERE `entry` = 38797; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Absorption inférieure)', `name_loc3` = 'Rolle der Brustverzauberung - Geringe Absorption', `name_loc6` = 'Pergamino de Encantar pechera: amortiguación inferior', `name_loc8` = 'Свиток чар для нагрудника - поглощение II' WHERE `entry` = 38798; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Mana)', `name_loc3` = 'Rolle der Brustverzauberung - Mana', `name_loc6` = 'Pergamino de Encantar pechera: maná', `name_loc8` = 'Свиток чар для нагрудника - мана III' WHERE `entry` = 38799; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Minage)', `name_loc3` = 'Rolle der Handschuhverzauberung - Bergbau', `name_loc6` = 'Pergamino de Encantar guantes: minería', `name_loc8` = 'Свиток чар для перчаток - горное дело I' WHERE `entry` = 38800; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Herboristerie)', `name_loc3` = 'Rolle der Handschuhverzauberung - Kräuterkunde', `name_loc6` = 'Pergamino de Encantar guantes: herboristería', `name_loc8` = 'Свиток чар для перчаток - травничество I' WHERE `entry` = 38801; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Pêche)', `name_loc3` = 'Rolle der Handschuhverzauberung - Angeln', `name_loc6` = 'Pergamino de Encantar guantes: pesca', `name_loc8` = 'Свиток чар для перчаток - рыбная ловля' WHERE `entry` = 38802; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Intelligence inférieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Geringe Intelligenz', `name_loc6` = 'Pergamino de Encantar brazales: intelecto inferior', `name_loc8` = 'Свиток чар для наручей - интеллект I' WHERE `entry` = 38803; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Caractéristiques mineures)', `name_loc3` = 'Rolle der Brustverzauberung - Schwache Werte', `name_loc6` = 'Pergamino de Encantar pechera: estadísticas menores', `name_loc8` = 'Свиток чар для нагрудника - все характеристики I' WHERE `entry` = 38804; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Endurance inférieure)', `name_loc3` = 'Rolle der Schildverzauberung - Geringe Ausdauer', `name_loc6` = 'Pergamino de Encantar escudo: aguante inferior', `name_loc8` = 'Свиток чар для щита - выносливость II' WHERE `entry` = 38805; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Défense)', `name_loc3` = 'Rolle der Umhangverzauberung - Verteidigung', `name_loc6` = 'Pergamino de Encantar capa: defensa', `name_loc8` = 'Свиток чар для плаща - защита I' WHERE `entry` = 38806; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Agilité inférieure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Geringe Beweglichkeit', `name_loc6` = 'Pergamino de Encantar botas: agilidad inferior', `name_loc8` = 'Свиток чар для обуви - ловкость II' WHERE `entry` = 38807; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé supérieure)', `name_loc3` = 'Rolle der Brustverzauberung - Große Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud superior', `name_loc8` = 'Свиток чар для нагрудника - здоровье IV' WHERE `entry` = 38808; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Esprit)', `name_loc3` = 'Rolle der Armschienenverzauberung - Willenskraft', `name_loc6` = 'Pergamino de Encantar brazales: espíritu', `name_loc8` = 'Свиток чар для наручей - дух III' WHERE `entry` = 38809; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Endurance inférieure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Geringe Ausdauer', `name_loc6` = 'Pergamino de Encantar botas: aguante inferior', `name_loc8` = 'Свиток чар для обуви - выносливость II' WHERE `entry` = 38810; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Déviation inférieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Geringe Abwehr', `name_loc6` = 'Pergamino de Encantar brazales: desvío inferior', `name_loc8` = 'Свиток чар для наручей - отражение II' WHERE `entry` = 38811; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Endurance)', `name_loc3` = 'Rolle der Armschienenverzauberung - Ausdauer', `name_loc6` = 'Pergamino de Encantar brazales: aguante', `name_loc8` = 'Свиток чар для наручей - выносливость III' WHERE `entry` = 38812; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Tueur de bête inférieur)', `name_loc3` = 'Rolle der Waffenverzauberung - Geringer Wildtiertöter', `name_loc6` = 'Pergamino de Encantar arma: Destripadora de bestias inferior', `name_loc8` = 'Свиток чар для оружия - истребитель зверей II' WHERE `entry` = 38813; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Tueur d\'élémentaire inférieur)', `name_loc3` = 'Rolle der Waffenverzauberung - Geringer Elementartöter', `name_loc6` = 'Pergamino de Encantar arma: mataelementales inferior', `name_loc8` = 'Свиток чар для оружия - истребитель элементалей' WHERE `entry` = 38814; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance au Feu)', `name_loc3` = 'Rolle der Umhangverzauberung - Feuerwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia al Fuego', `name_loc8` = 'Свиток чар для плаща - сопротивление огню' WHERE `entry` = 38815; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Esprit)', `name_loc3` = 'Rolle der Schildverzauberung - Willenskraft', `name_loc6` = 'Pergamino de Encantar escudo: espíritu', `name_loc8` = 'Свиток чар для щита - дух II' WHERE `entry` = 38816; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Force)', `name_loc3` = 'Rolle der Armschienenverzauberung - Stärke', `name_loc6` = 'Pergamino de Encantar brazales: fuerza', `name_loc8` = 'Свиток чар для наручей - сила III' WHERE `entry` = 38817; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Mana supérieur)', `name_loc3` = 'Rolle der Brustverzauberung - Großes Mana', `name_loc6` = 'Pergamino de Encantar pechera: maná superior', `name_loc8` = 'Свиток чар для нагрудника - мана IV' WHERE `entry` = 38818; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Esprit inférieur)', `name_loc3` = 'Rolle der Stiefelverzauberung - Geringe Willenskraft', `name_loc6` = 'Pergamino de Encantar botas: espíritu inferior', `name_loc8` = 'Свиток чар для обуви - дух I' WHERE `entry` = 38819; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Blocage inférieur)', `name_loc3` = 'Rolle der Schildverzauberung - Geringes Blocken', `name_loc6` = 'Pergamino de Encantar escudo: bloqueo inferior', `name_loc8` = 'Свиток чар для щита - блок I' WHERE `entry` = 38820; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Frappe)', `name_loc3` = 'Rolle der Waffenverzauberung - Schlagen', `name_loc6` = 'Pergamino de Encantar arma: golpear', `name_loc8` = 'Свиток чар для оружия - удар III' WHERE `entry` = 38821; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Impact)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Einschlag', `name_loc6` = 'Pergamino de Encantar arma 2M: impacto', `name_loc8` = 'Свиток чар для двуручного оружия - импульс III' WHERE `entry` = 38822; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Dépeçage)', `name_loc3` = 'Rolle der Handschuhverzauberung - Kürschnerei', `name_loc6` = 'Pergamino de Encantar guantes: desuello', `name_loc8` = 'Свиток чар для перчаток - снятие шкур' WHERE `entry` = 38823; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Caractéristiques inférieures)', `name_loc3` = 'Rolle der Brustverzauberung - Geringe Werte', `name_loc6` = 'Pergamino de Encantar pechera: estadísticas inferiores', `name_loc8` = 'Свиток чар для нагрудника - все характеристики II' WHERE `entry` = 38824; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Défense supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Große Verteidigung', `name_loc6` = 'Pergamino de Encantar capa: defensa superior', `name_loc8` = 'Свиток чар для плаща - защита II' WHERE `entry` = 38825; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance)', `name_loc3` = 'Rolle der Umhangverzauberung - Widerstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia', `name_loc8` = 'Свиток чар для плаща - сопротивление II' WHERE `entry` = 38826; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Agilité)', `name_loc3` = 'Rolle der Handschuhverzauberung - Beweglichkeit', `name_loc6` = 'Pergamino de Encantar guantes: Agilidad', `name_loc8` = 'Свиток чар для перчаток - ловкость I' WHERE `entry` = 38827; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Endurance)', `name_loc3` = 'Rolle der Schildverzauberung - Ausdauer', `name_loc6` = 'Pergamino de Encantar escudo: aguante', `name_loc8` = 'Свиток чар для щита - выносливость III' WHERE `entry` = 38828; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Intelligence)', `name_loc3` = 'Rolle der Armschienenverzauberung - Intelligenz', `name_loc6` = 'Pergamino de Encantar brazales: intelecto', `name_loc8` = 'Свиток чар для наручей - интеллект II' WHERE `entry` = 38829; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Endurance)', `name_loc3` = 'Rolle der Stiefelverzauberung - Ausdauer', `name_loc6` = 'Pergamino de Encantar botas: aguante', `name_loc8` = 'Свиток чар для обуви - выносливость III' WHERE `entry` = 38830; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Minage avancé)', `name_loc3` = 'Rolle der Handschuhverzauberung - Hochentwickelter Bergbau', `name_loc6` = 'Pergamino de Encantar guantes: minería avanzada', `name_loc8` = 'Свиток чар для перчаток - горное дело II' WHERE `entry` = 38831; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Esprit supérieur)', `name_loc3` = 'Rolle der Armschienenverzauberung - Große Willenskraft', `name_loc6` = 'Pergamino de Encantar brazales: espíritu superior', `name_loc8` = 'Свиток чар для наручей - дух IV' WHERE `entry` = 38832; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé excellente)', `name_loc3` = 'Rolle der Brustverzauberung - Überragende Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud excelente', `name_loc8` = 'Свиток чар для нагрудника - здоровье V' WHERE `entry` = 38833; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Herboristerie avancée)', `name_loc3` = 'Rolle der Handschuhverzauberung - Hochentwickelte Kräuterkunde', `name_loc6` = 'Pergamino de Encantar guantes: herboristería avanzada', `name_loc8` = 'Свиток чар для перчаток - травничество II' WHERE `entry` = 38834; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Agilité inférieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Geringe Beweglichkeit', `name_loc6` = 'Pergamino de Encantar capa: agilidad inferior', `name_loc8` = 'Свиток чар для плаща - ловкость II' WHERE `entry` = 38835; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Force)', `name_loc3` = 'Rolle der Handschuhverzauberung - Stärke', `name_loc6` = 'Pergamino de Encantar guantes: fuerza', `name_loc8` = 'Свиток чар для перчаток - сила I' WHERE `entry` = 38836; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Vitesse mineure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Schwaches Tempo', `name_loc6` = 'Pergamino de Encantar botas: Velocidad menor', `name_loc8` = 'Свиток чар для обуви - скорость' WHERE `entry` = 38837; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Arme flamboyante)', `name_loc3` = 'Rolle der Waffenverzauberung - Feurige Waffe', `name_loc6` = 'Pergamino de Encantar arma: arma ígnea', `name_loc8` = 'Свиток чар для оружия - огненное оружие' WHERE `entry` = 38838; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Esprit supérieur)', `name_loc3` = 'Rolle der Schildverzauberung - Große Willenskraft', `name_loc6` = 'Pergamino de Encantar escudo: espíritu superior', `name_loc8` = 'Свиток чар для щита - дух III' WHERE `entry` = 38839; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Tueur de démon)', `name_loc3` = 'Rolle der Waffenverzauberung - Dämonentöten', `name_loc6` = 'Pergamino de Encantar arma: matanza de demonios', `name_loc8` = 'Свиток чар для оружия - истребитель демонов' WHERE `entry` = 38840; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Mana supérieur)', `name_loc3` = 'Rolle der Brustverzauberung - Überragendes Mana', `name_loc6` = 'Pergamino de Encantar pechera: maná excelente', `name_loc8` = 'Свиток чар для нагрудника - мана V' WHERE `entry` = 38841; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Déviation)', `name_loc3` = 'Rolle der Armschienenverzauberung - Abwehr', `name_loc6` = 'Pergamino de Encantar brazales: Desvío', `name_loc8` = 'Свиток чар для наручей - отражение III' WHERE `entry` = 38842; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Résistance au Givre)', `name_loc3` = 'Rolle der Schildverzauberung - Frostwiderstand', `name_loc6` = 'Pergamino de Encantar escudo: Resistencia a la Escarcha', `name_loc8` = 'Свиток чар для щита - сопротивление льду' WHERE `entry` = 38843; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Agilité)', `name_loc3` = 'Rolle der Stiefelverzauberung - Beweglichkeit', `name_loc6` = 'Pergamino de Encantar botas: Agilidad', `name_loc8` = 'Свиток чар для обуви - ловкость III' WHERE `entry` = 38844; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Impact supérieur)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Großer Einschlag', `name_loc6` = 'Pergamino de Encantar arma 2M: impacto superior', `name_loc8` = 'Свиток чар для двуручного оружия - импульс IV' WHERE `entry` = 38845; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Force supérieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Große Stärke', `name_loc6` = 'Pergamino de Encantar brazales: fuerza superior', `name_loc8` = 'Свиток чар для наручей - сила IV' WHERE `entry` = 38846; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Caractéristiques)', `name_loc3` = 'Rolle der Brustverzauberung - Werte', `name_loc6` = 'Pergamino de Encantar pechera: estadísticas', `name_loc8` = 'Свиток чар для нагрудника - все характеристики III' WHERE `entry` = 38847; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Frappe supérieure)', `name_loc3` = 'Rolle der Waffenverzauberung - Großes Schlagen', `name_loc6` = 'Pergamino de Encantar arma: golpear superior', `name_loc8` = 'Свиток чар для оружия: удар IV' WHERE `entry` = 38848; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Endurance supérieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Große Ausdauer', `name_loc6` = 'Pergamino de Encantar brazales: aguante superior', `name_loc8` = 'Свиток чар для наручей - выносливость IV' WHERE `entry` = 38849; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Equitation)', `name_loc3` = 'Rolle der Handschuhverzauberung - Reitfertigkeit', `name_loc6` = 'Pergamino de Encantar guantes: equitación', `name_loc8` = 'Свиток чар для перчаток - навык верховой езды' WHERE `entry` = 38850; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Hâte mineure)', `name_loc3` = 'Rolle der Handschuhverzauberung - Schwache Hast', `name_loc6` = 'Pergamino de Encantar guantes: celeridad menor', `name_loc8` = 'Свиток чар для перчаток - слабое ускорение' WHERE `entry` = 38851; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Intelligence supérieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Große Intelligenz', `name_loc6` = 'Pergamino de Encantar brazales: Intelecto superior', `name_loc8` = 'Свиток чар для наручей - интеллект III' WHERE `entry` = 38852; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Esprit excellent)', `name_loc3` = 'Rolle der Armschienenverzauberung - Überragende Willenskraft', `name_loc6` = 'Pergamino de Encantar brazales: espíritu excelente', `name_loc8` = 'Свиток чар для наручей - дух V' WHERE `entry` = 38853; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Force excellente)', `name_loc3` = 'Rolle der Armschienenverzauberung - Überragende Stärke', `name_loc6` = 'Pergamino de Encantar brazales: fuerza excelente', `name_loc8` = 'Свиток чар для наручей - сила V' WHERE `entry` = 38854; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Endurance excellente)', `name_loc3` = 'Rolle der Armschienenverzauberung - Überragende Ausdauer', `name_loc6` = 'Pergamino de Encantar brazales: aguante excelente', `name_loc8` = 'Свиток чар для наручей - выносливость V' WHERE `entry` = 38855; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Agilité supérieure)', `name_loc3` = 'Rolle der Handschuhverzauberung - Große Beweglichkeit', `name_loc6` = 'Pergamino de Encantar guantes: agilidad superior', `name_loc8` = 'Свиток чар для перчаток - ловкость II' WHERE `entry` = 38856; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Force supérieure)', `name_loc3` = 'Rolle der Handschuhverzauberung - Große Stärke', `name_loc6` = 'Pergamino de Encantar guantes: fuerza superior', `name_loc8` = 'Свиток чар для перчаток - сила II' WHERE `entry` = 38857; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Großer Widerstand', `name_loc6` = 'Pergamino de Encantar capa: resistencia superior', `name_loc8` = 'Свиток чар для плаща - сопротивление III' WHERE `entry` = 38858; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Défense excellente)', `name_loc3` = 'Rolle der Umhangverzauberung - Überragende Verteidigung', `name_loc6` = 'Pergamino de Encantar capa: defensa excelente', `name_loc8` = 'Свиток чар для плаща - защита III' WHERE `entry` = 38859; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Vitalité)', `name_loc3` = 'Rolle der Schildverzauberung - Vitalität', `name_loc6` = 'Pergamino de Encantar escudo: Vitalidad', `name_loc8` = 'Свиток чар для щита - Живучесть' WHERE `entry` = 38860; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Endurance supérieure)', `name_loc3` = 'Rolle der Schildverzauberung - Große Ausdauer', `name_loc6` = 'Pergamino de Encantar escudo: aguante superior', `name_loc8` = 'Свиток чар для щита - выносливость IV' WHERE `entry` = 38861; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Endurance supérieure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Große Ausdauer', `name_loc6` = 'Pergamino de Encantar botas: aguante superior', `name_loc8` = 'Свиток чар для обуви - выносливость IV' WHERE `entry` = 38862; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Agilité supérieure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Große Beweglichkeit', `name_loc6` = 'Pergamino de Encantar botas: agilidad superior', `name_loc8` = 'Свиток чар для обуви - ловкость IV' WHERE `entry` = 38863; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Esprit)', `name_loc3` = 'Rolle der Stiefelverzauberung - Willenskraft', `name_loc6` = 'Pergamino de Encantar botas: espíritu', `name_loc8` = 'Свиток чар для обуви - дух II' WHERE `entry` = 38864; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Caractéristiques supérieures)', `name_loc3` = 'Rolle der Brustverzauberung - Große Werte', `name_loc6` = 'Pergamino de Encantar pechera: estadísticas superiores', `name_loc8` = 'Свиток чар для нагрудника - все характеристики IV' WHERE `entry` = 38865; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé majeure)', `name_loc3` = 'Rolle der Brustverzauberung - Erhebliche Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud sublime', `name_loc8` = 'Свиток чар для нагрудника - здоровье VI' WHERE `entry` = 38866; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Mana majeur)', `name_loc3` = 'Rolle der Brustverzauberung - Erhebliches Mana', `name_loc6` = 'Pergamino de Encantar pechera: maná sublime', `name_loc8` = 'Свиток чар для нагрудника - мана VI' WHERE `entry` = 38867; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Frisson glacial)', `name_loc3` = 'Rolle der Waffenverzauberung - Eisiger Hauch', `name_loc6` = 'Pergamino de Encantar arma: escalofrío gélido', `name_loc8` = 'Свиток чар для оружия - леденящая стужа' WHERE `entry` = 38868; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Impact excellent)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Überragender Einschlag', `name_loc6` = 'Pergamino de Encantar arma 2M: impacto excelente', `name_loc8` = 'Свиток чар для двуручного оружия - импульс V' WHERE `entry` = 38869; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Frappe excellente)', `name_loc3` = 'Rolle der Waffenverzauberung - Überragendes Schlagen', `name_loc6` = 'Pergamino de Encantar arma: golpes excelentes', `name_loc8` = 'Свиток чар для оружия - удар V' WHERE `entry` = 38870; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Vol de vie)', `name_loc3` = 'Rolle der Waffenverzauberung - Lebensdiebstahl', `name_loc6` = 'Pergamino de Encantar arma: robo de vida', `name_loc8` = 'Свиток чар для оружия - похищение жизни' WHERE `entry` = 38871; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Arme impie)', `name_loc3` = 'Rolle der Waffenverzauberung - Unheilige Waffe', `name_loc6` = 'Pergamino de Encantar arma: arma profana', `name_loc8` = 'Свиток чар для оружия - нечестивое оружие' WHERE `entry` = 38872; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Croisé)', `name_loc3` = 'Rolle der Waffenverzauberung - Kreuzfahrer', `name_loc6` = 'Pergamino de Encantar arma: cruzado', `name_loc8` = 'Свиток чар для оружия - рыцарь' WHERE `entry` = 38873; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Esprit majeur)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Erhebliche Willenskraft', `name_loc6` = 'Pergamino de Encantar arma 2M: espíritu sublime', `name_loc8` = 'Свиток чар для двуручного оружия - дух II' WHERE `entry` = 38874; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Intelligence majeure)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Erhebliche Intelligenz', `name_loc6` = 'Pergamino de Encantar arma 2M: intelecto sublime', `name_loc8` = 'Свиток чар для двуручного оружия - интеллект II' WHERE `entry` = 38875; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Puissance de l\'hiver)', `name_loc3` = 'Rolle der Waffenverzauberung - Wintermacht', `name_loc6` = 'Pergamino de Encantar arma: poderío del invierno', `name_loc8` = 'Свиток чар для оружия - могущество зимы' WHERE `entry` = 38876; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Puissance des sorts)', `name_loc3` = 'Rolle der Waffenverzauberung - Zaubermacht', `name_loc6` = 'Pergamino de Encantar arma: poder con hechizos', `name_loc8` = 'Свиток чар для оружия - сила заклинаний I' WHERE `entry` = 38877; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Pouvoir de guérison)', `name_loc3` = 'Rolle der Waffenverzauberung - Heilkraft', `name_loc6` = 'Pergamino de Encantar arma: poder de sanación', `name_loc8` = 'Свиток чар для оружия - целительная сила' WHERE `entry` = 38878; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Force)', `name_loc3` = 'Rolle der Waffenverzauberung - Stärke', `name_loc6` = 'Pergamino de Encantar arma: fuerza', `name_loc8` = 'Свиток чар для оружия - сила' WHERE `entry` = 38879; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Agilité)', `name_loc3` = 'Rolle der Waffenverzauberung - Beweglichkeit', `name_loc6` = 'Pergamino de Encantar arma: Agilidad', `name_loc8` = 'Свиток чар для оружия - ловкость I' WHERE `entry` = 38880; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Régénération de mana)', `name_loc3` = 'Rolle der Armschienenverzauberung - Manaregeneration', `name_loc6` = 'Pergamino de Encantar brazales: regeneración de maná', `name_loc8` = 'Свиток чар для наручей - восполнение маны' WHERE `entry` = 38881; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Pouvoir de guérison)', `name_loc3` = 'Rolle der Armschienenverzauberung - Heilkraft', `name_loc6` = 'Pergamino de Encantar brazales: poder de sanación', `name_loc8` = 'Свиток чар для наручей - целительная сила' WHERE `entry` = 38882; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Esprit puissant)', `name_loc3` = 'Rolle der Waffenverzauberung - Mächtige Willenskraft', `name_loc6` = 'Pergamino de Encantar arma: espíritu poderoso', `name_loc8` = 'Свиток чар для оружия - могучий дух' WHERE `entry` = 38883; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Intelligence puissante)', `name_loc3` = 'Rolle der Waffenverzauberung - Mächtige Intelligenz', `name_loc6` = 'Pergamino de Encantar arma: intelecto poderoso', `name_loc8` = 'Свиток чар для оружия - могучий интеллект' WHERE `entry` = 38884; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Menace)', `name_loc3` = 'Rolle der Handschuhverzauberung - Bedrohung', `name_loc6` = 'Pergamino de Encantar guantes: amenaza', `name_loc8` = 'Свиток чар для перчаток - угроза' WHERE `entry` = 38885; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Puissance de l\'Ombre)', `name_loc3` = 'Rolle der Handschuhverzauberung - Schattenmacht', `name_loc6` = 'Pergamino de Encantar guantes: Poder de las Sombras', `name_loc8` = 'Свиток чар для перчаток - энергия Тьмы' WHERE `entry` = 38886; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Puissance du givre)', `name_loc3` = 'Rolle der Handschuhverzauberung - Frostmacht', `name_loc6` = 'Pergamino de Encantar guantes: Poder de Escarcha', `name_loc8` = 'Свиток чар для перчаток - сила льда' WHERE `entry` = 38887; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Puissance du feu)', `name_loc3` = 'Rolle der Handschuhverzauberung - Feuermacht', `name_loc6` = 'Pergamino de Encantar guantes: Poder de Fuego', `name_loc8` = 'Свиток чар для перчаток - сила огня' WHERE `entry` = 38888; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Pouvoir de guérison)', `name_loc3` = 'Rolle der Handschuhverzauberung - Heilkraft', `name_loc6` = 'Pergamino de Encantar guantes: poder de sanación', `name_loc8` = 'Свиток чар для перчаток - целительная сила' WHERE `entry` = 38889; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Agilité excellente)', `name_loc3` = 'Rolle der Handschuhverzauberung - Überragende Beweglichkeit', `name_loc6` = 'Pergamino de Encantar guantes: agilidad excelente', `name_loc8` = 'Свиток чар для перчаток - ловкость III' WHERE `entry` = 38890; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance au Feu supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Großer Feuerwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia al Fuego superior', `name_loc8` = 'Свиток чар для плаща: сопротивление огню III' WHERE `entry` = 38891; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance à la Nature supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Großer Naturwiderstand', `name_loc6` = 'Pergamino de Encantar capa: resistencia a la Naturaleza superior', `name_loc8` = 'Свиток чар для плаща - сопротивление силам природы I' WHERE `entry` = 38892; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Camouflage)', `name_loc3` = 'Rolle der Umhangverzauberung - Verstohlenheit', `name_loc6` = 'Pergamino de Encantar capa: sigilo', `name_loc8` = 'Свиток чар для плаща - незаметность' WHERE `entry` = 38893; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Discrétion)', `name_loc3` = 'Rolle der Umhangverzauberung - Feingefühl', `name_loc6` = 'Pergamino de Encantar capa: sutileza', `name_loc8` = 'Свиток чар для плаща - скрытность' WHERE `entry` = 38894; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Esquive)', `name_loc3` = 'Rolle der Umhangverzauberung - Ausweichen', `name_loc6` = 'Pergamino de Encantar capa: esquivar', `name_loc8` = 'Свиток чар для плаща - уклонение' WHERE `entry` = 38895; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Agilité)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Beweglichkeit', `name_loc6` = 'Pergamino de Encantar arma 2M: Agilidad', `name_loc8` = 'Свиток чар для двуручного оружия - ловкость I' WHERE `entry` = 38896; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Masse musculaire)', `name_loc3` = 'Rolle der Armschienenverzauberung - Muskelkraft', `name_loc6` = 'Pergamino de Encantar brazales: lozanía', `name_loc8` = 'Свиток чар для наручей - грубая сила' WHERE `entry` = 38897; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Caractéristiques)', `name_loc3` = 'Rolle der Armschienenverzauberung - Werte', `name_loc6` = 'Pergamino de Encantar brazales: estadísticas', `name_loc8` = 'Свиток чар для наручей - все характеристики' WHERE `entry` = 38898; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Défense majeure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Erhebliche Verteidigung', `name_loc6` = 'Pergamino de Encantar brazales: defensa sublime', `name_loc8` = 'Свиток чар для наручей - защита' WHERE `entry` = 38899; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Soins excellents)', `name_loc3` = 'Rolle der Armschienenverzauberung - Überragende Heilung', `name_loc6` = 'Pergamino de Encantar brazales: sanación excelente', `name_loc8` = 'Свиток чар для наручей - лечение II' WHERE `entry` = 38900; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Rest. du mana premier)', `name_loc3` = 'Rolle der Armschienenverzauberung - Mana wiederherstellen', `name_loc6` = 'Pergamino de Encantar brazales: restaurar maná de primera', `name_loc8` = 'Свиток чар для наручей - быстрое восполнение маны' WHERE `entry` = 38901; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Robustesse)', `name_loc3` = 'Rolle der Armschienenverzauberung - Seelenstärke', `name_loc6` = 'Pergamino de Encantar brazales: entereza', `name_loc8` = 'Свиток чар для наручей - стойкость' WHERE `entry` = 38902; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Puissance des sorts)', `name_loc3` = 'Rolle der Armschienenverzauberung - Zaubermacht', `name_loc6` = 'Pergamino de Encantar brazales: poder con hechizos', `name_loc8` = 'Свиток чар для наручей - сила заклинаний I' WHERE `entry` = 38903; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Inébranlable)', `name_loc3` = 'Rolle der Schildverzauberung - Harter Schild', `name_loc6` = 'Pergamino de Encantar escudo: escudo consistente', `name_loc8` = 'Свиток чар для щита - прочный щит' WHERE `entry` = 38904; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Intelligence)', `name_loc3` = 'Rolle der Schildverzauberung - Intelligenz', `name_loc6` = 'Pergamino de Encantar escudo: intelecto', `name_loc8` = 'Свиток чар для щита - интеллект I' WHERE `entry` = 38905; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Maîtrise du blocage)', `name_loc3` = 'Rolle der Schildverzauberung - Schildblock', `name_loc6` = 'Pergamino de Encantar escudo: bloquear con escudo', `name_loc8` = 'Свиток чар для щита: блок II' WHERE `entry` = 38906; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Résistance)', `name_loc3` = 'Rolle der Schildverzauberung - Widerstand', `name_loc6` = 'Pergamino de Encantar escudo: Resistencia', `name_loc8` = 'Свиток чар для щита - сопротивление' WHERE `entry` = 38907; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Vitalité)', `name_loc3` = 'Rolle der Stiefelverzauberung - Vitalität', `name_loc6` = 'Pergamino de Encantar botas: vitalidad', `name_loc8` = 'Свиток чар для обуви - живучесть I' WHERE `entry` = 38908; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Robustesse)', `name_loc3` = 'Rolle der Stiefelverzauberung - Seelenstärke', `name_loc6` = 'Pergamino de Encantar botas: entereza', `name_loc8` = 'Свиток чар для обуви - стойкость I' WHERE `entry` = 38909; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Pied sûr)', `name_loc3` = 'Rolle der Stiefelverzauberung - Sicherer Stand', `name_loc6` = 'Pergamino de Encantar botas: Pies de plomo', `name_loc8` = 'Свиток чар для обуви - верный шаг' WHERE `entry` = 38910; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé exceptionnelle)', `name_loc3` = 'Rolle der Brustverzauberung - Außergewöhnliche Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud excepcional', `name_loc8` = 'Свиток чар для нагрудника - здоровье VII' WHERE `entry` = 38911; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Mana exceptionnel)', `name_loc3` = 'Rolle der Brustverzauberung - Außergewöhnliches Mana', `name_loc6` = 'Pergamino de Encantar pechera: maná excepcional', `name_loc8` = 'Свиток чар для нагрудника - мана VII' WHERE `entry` = 38912; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Caractéristiques exceptionnelles)', `name_loc3` = 'Rolle der Brustverzauberung - Außergewöhnliche Werte', `name_loc6` = 'Pergamino de Encantar pechera: estadísticas excepcionales', `name_loc8` = 'Свиток чар для нагрудника - все характеристики V' WHERE `entry` = 38913; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Armure majeure)', `name_loc3` = 'Rolle der Umhangverzauberung - Erhebliche Rüstung', `name_loc6` = 'Pergamino de Encantar capa: armadura sublime', `name_loc8` = 'Свиток чар для плаща - броня III' WHERE `entry` = 38914; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance majeure)', `name_loc3` = 'Rolle der Umhangverzauberung - Erheblicher Widerstand', `name_loc6` = 'Pergamino de Encantar capa: resistencia sublime', `name_loc8` = 'Свиток чар для плаща - сопротивление IV' WHERE `entry` = 38915; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Frappe majeure)', `name_loc3` = 'Rolle der Waffenverzauberung - Erhebliches Schlagen', `name_loc6` = 'Pergamino de Encantar arma: golpear sublime', `name_loc8` = 'Свиток чар для оружия - удар VI' WHERE `entry` = 38917; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Intelligence majeure)', `name_loc3` = 'Rolle der Waffenverzauberung - Erhebliche Intelligenz', `name_loc6` = 'Pergamino de Encantar arma: intelecto sublime', `name_loc8` = 'Свиток чар для оружия - интеллект I' WHERE `entry` = 38918; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Sauvagerie)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Wildheit', `name_loc6` = 'Pergamino de Encantar arma 2M: Salvajismo', `name_loc8` = 'Свиток чар для двуручного оружия - свирепость' WHERE `entry` = 38919; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Toute-puissance)', `name_loc3` = 'Rolle der Waffenverzauberung - Potenz', `name_loc6` = 'Pergamino de Encantar arma: potencia', `name_loc8` = 'Свиток чар для оружия - могущество I' WHERE `entry` = 38920; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Puissance des sorts majeure)', `name_loc3` = 'Rolle der Waffenverzauberung - Erhebliche Zaubermacht', `name_loc6` = 'Pergamino de Encantar arma: poder con hechizos sublime', `name_loc8` = 'Свиток чар для оружия - сила заклинаний I' WHERE `entry` = 38921; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Agilité majeure)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Erhebliche Beweglichkeit', `name_loc6` = 'Pergamino de Encantar arma 2M: agilidad sublime', `name_loc8` = 'Свиток чар для двуручного оружия - ловкость II' WHERE `entry` = 38922; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Feu solaire)', `name_loc3` = 'Rolle der Waffenverzauberung - Sonnenfeuer', `name_loc6` = 'Pergamino de Encantar arma: Fuego Solar', `name_loc8` = 'Свиток чар для оружия - солнечный огонь' WHERE `entry` = 38923; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Âme de givre)', `name_loc3` = 'Rolle der Waffenverzauberung - Seelenfrost', `name_loc6` = 'Pergamino de Encantar arma: escarcha de alma', `name_loc8` = 'Свиток чар для оружия - ледяная душа' WHERE `entry` = 38924; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Mangouste)', `name_loc3` = 'Rolle der Waffenverzauberung - Mungo', `name_loc6` = 'Pergamino de Encantar arma: mangosta', `name_loc8` = 'Свиток чар для оружия - мангуст' WHERE `entry` = 38925; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Eruption de sort)', `name_loc3` = 'Rolle der Waffenverzauberung - Zaubersog', `name_loc6` = 'Pergamino de Encantar arma: oleada de hechizos', `name_loc8` = 'Свиток чар для оружия - всплеск чар' WHERE `entry` = 38926; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Maître de guerre)', `name_loc3` = 'Rolle der Waffenverzauberung - Meister des Kampfes', `name_loc6` = 'Pergamino de Encantar arma: maestro de batalla', `name_loc8` = 'Свиток чар для оружия - военачальник' WHERE `entry` = 38927; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Esprit majeur)', `name_loc3` = 'Rolle der Brustverzauberung - Erhebliche Willenskraft', `name_loc6` = 'Pergamino de Encantar pechera: espíritu sublime', `name_loc8` = 'Свиток чар для нагрудника - дух' WHERE `entry` = 38928; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Restauration du mana premier)', `name_loc3` = 'Rolle der Brustverzauberung - Mana wiederherstellen', `name_loc6` = 'Pergamino de Encantar pechera: restaurar maná de primera', `name_loc8` = 'Свиток чар для нагрудника - быстрое восполнение маны' WHERE `entry` = 38929; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Résilience majeure)', `name_loc3` = 'Rolle der Brustverzauberung - Erhebliche Abhärtung', `name_loc6` = 'Pergamino de Encantar pechera: temple sublime', `name_loc8` = 'Свиток чар для нагрудника - устойчивость I' WHERE `entry` = 38930; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Explosion)', `name_loc3` = 'Rolle der Handschuhverzauberung - Zauberwucht', `name_loc6` = 'Pergamino de Encantar guantes: Detonación', `name_loc8` = 'Свиток чар для перчаток - взрыв I' WHERE `entry` = 38931; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Frappes précises)', `name_loc3` = 'Rolle der Handschuhverzauberung - Präzise Schläge', `name_loc6` = 'Pergamino de Encantar guantes: Golpes precisos', `name_loc8` = 'Свиток чар для перчаток - точные удары' WHERE `entry` = 38932; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Force majeure)', `name_loc3` = 'Rolle der Handschuhverzauberung - Erhebliche Stärke', `name_loc6` = 'Pergamino de Encantar guantes: fuerza sublime', `name_loc8` = 'Свиток чар для перчаток - сила III' WHERE `entry` = 38933; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Assaut)', `name_loc3` = 'Rolle der Handschuhverzauberung - Sturmangriff', `name_loc6` = 'Pergamino de Encantar guantes: Asalto', `name_loc8` = 'Свиток чар для перчаток - штурм I' WHERE `entry` = 38934; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Puissance des sorts majeurs)', `name_loc3` = 'Rolle der Handschuhverzauberung - Erhebliche Zaubermacht', `name_loc6` = 'Pergamino de Encantar guantes: poder con hechizos sublime', `name_loc8` = 'Свиток чар для перчаток - сила заклинаний I' WHERE `entry` = 38935; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Soins majeurs)', `name_loc3` = 'Rolle der Handschuhverzauberung - Erhebliche Heilung', `name_loc6` = 'Pergamino de Encantar guantes: sanación sublime', `name_loc8` = 'Свиток чар для перчаток - лечение I' WHERE `entry` = 38936; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Intelligence majeure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Erhebliche Intelligenz', `name_loc6` = 'Pergamino de Encantar brazales: intelecto sublime', `name_loc8` = 'Свиток чар для наручей - интеллект IV' WHERE `entry` = 38937; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Assaut)', `name_loc3` = 'Rolle der Armschienenverzauberung - Sturmangriff', `name_loc6` = 'Pergamino de Encantar brazales: Asalto', `name_loc8` = 'Свиток чар для наручей - штурм I' WHERE `entry` = 38938; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Pénétration des sorts)', `name_loc3` = 'Rolle der Umhangverzauberung - Zauberdurchschlag', `name_loc6` = 'Pergamino de Encantar capa: penetración de hechizos', `name_loc8` = 'Свиток чар для плаща - проникающая способность заклинаний' WHERE `entry` = 38939; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Agilité supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Große Beweglichkeit', `name_loc6` = 'Pergamino de Encantar capa: agilidad superior', `name_loc8` = 'Свиток чар для плаща - ловкость III' WHERE `entry` = 38940; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance aux Arcanes supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Großer Arkanwiderstand', `name_loc6` = 'Pergamino de Encantar capa: resistencia a lo Arcano superior', `name_loc8` = 'Свиток чар для плаща - сопротивление тайной магии I' WHERE `entry` = 38941; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance à l\'Ombre supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Großer Schattenwiderstand', `name_loc6` = 'Pergamino de Encantar capa: resistencia a las Sombras superior', `name_loc8` = 'Свиток чар для плаща: сопротивление темной магии II' WHERE `entry` = 38942; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Rapidité du félin)', `name_loc3` = 'Rolle der Stiefelverzauberung - Schnelligkeit der Katze', `name_loc6` = 'Pergamino de Encantar botas: presteza felina', `name_loc8` = 'Свиток чар для обуви - проворство кошки' WHERE `entry` = 38943; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Vitesse du sanglier)', `name_loc3` = 'Rolle der Stiefelverzauberung - Flinkheit des Ebers', `name_loc6` = 'Pergamino de Encantar botas: velocidad de jabalí', `name_loc8` = 'Свиток чар для обуви - быстрота вепря' WHERE `entry` = 38944; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Endurance majeure)', `name_loc3` = 'Rolle der Schildverzauberung - Erhebliche Ausdauer', `name_loc6` = 'Pergamino de Encantar escudo: aguante sublime', `name_loc8` = 'Свиток чар для щита - выносливость V' WHERE `entry` = 38945; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Soins majeurs)', `name_loc3` = 'Rolle der Waffenverzauberung - Erhebliche Heilung', `name_loc6` = 'Pergamino de Encantar arma: sanación sublime', `name_loc8` = 'Свиток чар для оружия - лечение I' WHERE `entry` = 38946; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Agilité supérieure)', `name_loc3` = 'Rolle der Waffenverzauberung - Große Beweglichkeit', `name_loc6` = 'Pergamino de Encantar arma: agilidad superior', `name_loc8` = 'Свиток чар для оружия - ловкость II' WHERE `entry` = 38947; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Exécutrice)', `name_loc3` = 'Rolle der Waffenverzauberung - Scharfrichter', `name_loc6` = 'Pergamino de Encantar arma: verdugo', `name_loc8` = 'Свиток чар для оружия - палач' WHERE `entry` = 38948; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Résilience)', `name_loc3` = 'Rolle der Schildverzauberung - Abhärtung', `name_loc6` = 'Pergamino de Encantar escudo: temple', `name_loc8` = 'Свиток чар для щита - устойчивость' WHERE `entry` = 38949; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance au Givre excellente)', `name_loc3` = 'Rolle der Umhangverzauberung - Überragender Frostwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia a la Escarcha excelente', `name_loc8` = 'Свиток чар для плаща - сопротивление магии льда' WHERE `entry` = 38950; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Expertise)', `name_loc3` = 'Rolle der Handschuhverzauberung - Waffenkunde', `name_loc6` = 'Pergamino de Encantar guantes: Pericia', `name_loc8` = 'Свиток чар для перчаток - мастерство' WHERE `entry` = 38951; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Précision)', `name_loc3` = 'Rolle der Handschuhverzauberung - Präzision', `name_loc6` = 'Pergamino de Encantar guantes: Precisión', `name_loc8` = 'Свиток чар для перчаток - Точность' WHERE `entry` = 38953; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Défense)', `name_loc3` = 'Rolle der Schildverzauberung - Verteidigung', `name_loc6` = 'Pergamino de Encantar escudo: esquivar', `name_loc8` = 'Свиток чар для щита - защита' WHERE `entry` = 38954; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Santé puissante)', `name_loc3` = 'Rolle der Brustverzauberung - Mächtige Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: salud poderosa', `name_loc8` = 'Свиток чар для нагрудника - здоровье VIII' WHERE `entry` = 38955; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance à la Nature excellente)', `name_loc3` = 'Rolle der Umhangverzauberung - Überragender Naturwiderstand', `name_loc6` = 'Pergamino de Encantar capa: resistencia a la Naturaleza excelente', `name_loc8` = 'Свиток чар для плаща - сопротивление силам природы II' WHERE `entry` = 38956; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Agilité supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Überragende Beweglichkeit', `name_loc6` = 'Pergamino de Encantar capa: agilidad excelente', `name_loc8` = 'Свиток чар для плаща - ловкость IV' WHERE `entry` = 38959; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Récolteur)', `name_loc3` = 'Rolle der Handschuhverzauberung - Sammler', `name_loc6` = 'Pergamino de Encantar guantes: recolector', `name_loc8` = 'Свиток чар для перчаток - собиратель' WHERE `entry` = 38960; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Esprit supérieur)', `name_loc3` = 'Rolle der Stiefelverzauberung - Große Willenskraft', `name_loc6` = 'Pergamino de Encantar botas: espíritu superior', `name_loc8` = 'Свиток чар для обуви - дух III' WHERE `entry` = 38961; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Restauration du mana supérieure)', `name_loc3` = 'Rolle der Brustverzauberung - Große Manawiederherstellung', `name_loc6` = 'Pergamino de Encantar pechera: restaurar maná superior', `name_loc8` = 'Свиток чар для нагрудника - восстановление маны' WHERE `entry` = 38962; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Esprit exceptionnel)', `name_loc3` = 'Rolle der Waffenverzauberung - Außergewöhnliche Willenskraft', `name_loc6` = 'Pergamino de Encantar arma: espíritu excepcional', `name_loc8` = 'Свиток чар для оружия - дух II' WHERE `entry` = 38963; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Assaut supérieur)', `name_loc3` = 'Rolle der Handschuhverzauberung - Großer Sturmangriff', `name_loc6` = 'Pergamino de Encantar guantes: asalto superior', `name_loc8` = 'Свиток чар для перчаток - штурм II' WHERE `entry` = 38964; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Brise-glace)', `name_loc3` = 'Rolle der Waffenverzauberung - Eisbrecher', `name_loc6` = 'Pergamino de Encantar arma: Rompehielo', `name_loc8` = 'Свиток чар для оружия - ледорез' WHERE `entry` = 38965; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Robustesse supérieure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Große Seelenstärke', `name_loc6` = 'Pergamino de Encantar botas: entereza superior', `name_loc8` = 'Свиток чар для обуви - стойкость II' WHERE `entry` = 38966; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Agilité majeure)', `name_loc3` = 'Rolle der Handschuhverzauberung - Erhebliche Beweglichkeit', `name_loc6` = 'Pergamino de Encantar guantes: agilidad sublime', `name_loc8` = 'Свиток чар для перчаток - ловкость IV' WHERE `entry` = 38967; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Intelligence exceptionnelle)', `name_loc3` = 'Rolle der Armschienenverzauberung - Außergewöhnliche Intelligenz', `name_loc6` = 'Pergamino de Encantar brazales: intelecto excepcional', `name_loc8` = 'Свиток чар для наручей - интеллект V' WHERE `entry` = 38968; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance au Feu excellente)', `name_loc3` = 'Rolle der Umhangverzauberung - Überragender Feuerwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia al Fuego excelente', `name_loc8` = 'Свиток чар для плаща - сопротивление огню IV' WHERE `entry` = 38969; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Frappe)', `name_loc3` = 'Rolle der Armschienenverzauberung - Schlagen', `name_loc6` = 'Pergamino de Encantar brazales: golpear', `name_loc8` = 'Свиток чар для наручей - удар III' WHERE `entry` = 38971; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Gardevie)', `name_loc3` = 'Rolle der Waffenverzauberung - Lebensschutz', `name_loc6` = 'Pergamino de Encantar arma: Resguardo de vida', `name_loc8` = 'Свиток чар для оружия - оберег' WHERE `entry` = 38972; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Sorts transperçants)', `name_loc3` = 'Rolle der Umhangverzauberung - Zauberstoß', `name_loc6` = 'Pergamino de Encantar capa: Perforar con hechizos', `name_loc8` = 'Свиток чар для плаща - пронзающие заклинания I' WHERE `entry` = 38973; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Vitalité supérieure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Große Vitalität', `name_loc6` = 'Pergamino de Encantar botas: vitalidad superior', `name_loc8` = 'Свиток чар для обуви - живучесть II' WHERE `entry` = 38974; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Résilience exceptionnelle)', `name_loc3` = 'Rolle der Brustverzauberung - Außergewöhnliche Abhärtung', `name_loc6` = 'Pergamino de Encantar pechera: temple excepcional', `name_loc8` = 'Свиток чар для нагрудника - устойчивость II' WHERE `entry` = 38975; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Agilité excellente)', `name_loc3` = 'Rolle der Stiefelverzauberung - Überragende Beweglichkeit', `name_loc6` = 'Pergamino de Encantar botas: agilidad excelente', `name_loc8` = 'Свиток чар для обуви - ловкость V' WHERE `entry` = 38976; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance à l\'Ombre excellente)', `name_loc3` = 'Rolle der Umhangverzauberung - Überragender Schattenwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia a las Sombras excelente', `name_loc8` = 'Свиток чар для плаща - сопротивление темной магии III' WHERE `entry` = 38977; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Tisse-titan)', `name_loc3` = 'Rolle der Umhangverzauberung - Titangewebe', `name_loc6` = 'Pergamino de Encantar capa: tejido de titán', `name_loc8` = 'Свиток чар для плаща - ткань титанов' WHERE `entry` = 38978; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Puissance des sorts exceptionnelle)', `name_loc3` = 'Rolle der Handschuhverzauberung - Außergewöhnliche Zaubermacht', `name_loc6` = 'Pergamino de Encantar guantes: poder con hechizos excepcional', `name_loc8` = 'Свиток чар для перчаток - сила заклинаний II' WHERE `entry` = 38979; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Esprit majeur)', `name_loc3` = 'Rolle der Armschienenverzauberung - Erhebliche Willenskraft', `name_loc6` = 'Pergamino de Encantar brazales: espíritu sublime', `name_loc8` = 'Свиток чар для наручей - дух VI' WHERE `entry` = 38980; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Plaie-du-Fléau)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Geißelbann', `name_loc6` = 'Pergamino de Encantar arma 2M: Finiquiplaga', `name_loc8` = 'Свиток чар для двуручного оружия - проклятие Плети' WHERE `entry` = 38981; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Résistance aux Arcanes excellente)', `name_loc3` = 'Rolle der Umhangverzauberung - Überragender Arkanwiderstand', `name_loc6` = 'Pergamino de Encantar capa: Resistencia a lo Arcano excelente', `name_loc8` = 'Свиток чар для плаща - сопротивление тайной магии II' WHERE `entry` = 38982; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Expertise)', `name_loc3` = 'Rolle der Armschienenverzauberung - Waffenkunde', `name_loc6` = 'Pergamino de Encantar brazales: Pericia', `name_loc8` = 'Свиток чар для наручей - мастерство' WHERE `entry` = 38984; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Explosion supérieure)', `name_loc3` = 'Rolle der Handschuhverzauberung - Große Zauberwucht', `name_loc6` = 'Pergamino de Encantar guantes: detonación superior', `name_loc8` = 'Свиток чар для перчаток: взрыв II' WHERE `entry` = 38985; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Marcheglace)', `name_loc3` = 'Rolle der Stiefelverzauberung - Eiswandler', `name_loc6` = 'Pergamino de Encantar botas: caminante del hielo', `name_loc8` = 'Свиток чар для обуви - ледопроходец' WHERE `entry` = 38986; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards Caractéristiques supérieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Große Werte', `name_loc6` = 'Pergamino de Encantar brazales: estadísticas superiores', `name_loc8` = 'Свиток чар для наручей - все характеристики II' WHERE `entry` = 38987; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Tueur de géant)', `name_loc3` = 'Rolle der Waffenverzauberung - Riesentöter', `name_loc6` = 'Pergamino de Encantar arma: matagigantes', `name_loc8` = 'Свиток чар для оружия - истребитель великанов' WHERE `entry` = 38988; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Super caractéristiques)', `name_loc3` = 'Rolle der Brustverzauberung - Erstklassige Werte', `name_loc6` = 'Pergamino de Encantar pechera: estadísticas excelentes', `name_loc8` = 'Свиток чар для нагрудника - все характеристики VI' WHERE `entry` = 38989; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Homme d\'armes)', `name_loc3` = 'Rolle der Handschuhverzauberung - Waffenmeister', `name_loc6` = 'Pergamino de Encantar guantes: armero', `name_loc8` = 'Свиток чар для перчаток - оружейник' WHERE `entry` = 38990; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Puissance des sorts exceptionnelle)', `name_loc3` = 'Rolle der Waffenverzauberung - Außergewöhnliche Zaubermacht', `name_loc6` = 'Pergamino de Encantar arma: poder con hechizos excepcional', `name_loc8` = 'Свиток чар для оружия - сила заклинаний II' WHERE `entry` = 38991; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Sauvagerie supérieure)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Große Unbändigkeit', `name_loc6` = 'Pergamino de Encantar arma 2M: Salvajismo superior', `name_loc8` = 'Свиток чар для двуручного оружия - свирепость II' WHERE `entry` = 38992; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Armure de l\'Ombre)', `name_loc3` = 'Rolle der Umhangverzauberung - Schattenrüstung', `name_loc6` = 'Pergamino de Encantar capa: armadura de las Sombras', `name_loc8` = 'Свиток чар для плаща - теневая броня' WHERE `entry` = 38993; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Agilité exceptionnelle)', `name_loc3` = 'Rolle der Waffenverzauberung - Außergewöhnliche Beweglichkeit', `name_loc6` = 'Pergamino de Encantar arma: agilidad excepcional', `name_loc8` = 'Свиток чар для оружия - ловкость III' WHERE `entry` = 38995; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Puissance des sorts supérieure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Große Zaubermacht', `name_loc6` = 'Pergamino de Encantar brazales: poder con hechizos superior', `name_loc8` = 'Свиток чар для наручей - сила заклинаний II' WHERE `entry` = 38997; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Givre mortel)', `name_loc3` = 'Rolle der Waffenverzauberung - Todesfrost', `name_loc6` = 'Pergamino de Encantar arma: escarcha letal', `name_loc8` = 'Свиток чар для оружия - смертельный мороз' WHERE `entry` = 38998; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Défense)', `name_loc3` = 'Rolle der Brustverzauberung - Verteidigung', `name_loc6` = 'Pergamino de Encantar pechera: esquivar', `name_loc8` = 'Свиток чар для нагрудника - защита I' WHERE `entry` = 38999; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Tisse-acier)', `name_loc3` = 'Rolle der Umhangverzauberung - Stahlgewebe', `name_loc6` = 'Pergamino de Encantar capa: tejido de acero', `name_loc8` = 'Свиток чар для плаща - стальная ткань' WHERE `entry` = 39000; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Armure puissante)', `name_loc3` = 'Rolle der Umhangverzauberung - Mächtige Rüstung', `name_loc6` = 'Pergamino de Encantar capa: Armadura poderosa', `name_loc8` = 'Свиток чар для плаща - могучая броня' WHERE `entry` = 39001; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Défense supérieure)', `name_loc3` = 'Rolle der Brustverzauberung - Große Verteidigung', `name_loc6` = 'Pergamino de Encantar pechera: defensa superior', `name_loc8` = 'Свиток чар для нагрудника - защита II' WHERE `entry` = 39002; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Vitesse supérieure)', `name_loc3` = 'Rolle der Umhangverzauberung - Großes Tempo', `name_loc6` = 'Pergamino de Encantar capa: velocidad superior', `name_loc8` = 'Свиток чар для плаща - скорость II' WHERE `entry` = 39003; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Sagesse)', `name_loc3` = 'Rolle der Umhangverzauberung - Weisheit', `name_loc6` = 'Pergamino de Encantar capa: sabiduría', `name_loc8` = 'Свиток чар для плаща - мудрость' WHERE `entry` = 39004; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Super santé)', `name_loc3` = 'Rolle der Brustverzauberung - Erstklassige Gesundheit', `name_loc6` = 'Pergamino de Encantar pechera: súper salud', `name_loc8` = 'Свиток чар для нагрудника - здоровье IX' WHERE `entry` = 39005; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Vitalité rohart)', `name_loc3` = 'Rolle der Stiefelverzauberung - Vitalität der Tuskarr', `name_loc6` = 'Pergamino de Encantar botas: vitalidad colmillarr', `name_loc8` = 'Свиток чар для обуви - живучесть клыкарра' WHERE `entry` = 39006; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de feu inférieure', `name_loc3` = 'Geringer Feuerstein', `name_loc6` = 'Piedra de fuego', `name_loc8` = 'Малый камень огня' WHERE `entry` = 41170; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Magie noire)', `name_loc3` = 'Rolle der Waffenverzauberung - Schwarze Magie', `name_loc6` = 'Pergamino de Encantar arma: magia negra', `name_loc8` = 'Свиток чар для оружия - черная магия' WHERE `entry` = 43987; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Assaut)', `name_loc3` = 'Rolle der Stiefelverzauberung - Sturmangriff', `name_loc6` = 'Pergamino de Encantar botas: Asalto', `name_loc8` = 'Свиток чар для обуви - штурм I' WHERE `entry` = 44449; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Toute-puissance supérieure)', `name_loc3` = 'Rolle der Waffenverzauberung - Große Potenz', `name_loc6` = 'Pergamino de Encantar arma: potencia superior', `name_loc8` = 'Свиток чар для оружия - могущество II' WHERE `entry` = 44453; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bouclier (Intelligence supérieure)', `name_loc3` = 'Rolle der Schildverzauberung - Große Intelligenz', `name_loc6` = 'Encantar escudo: intelecto III', `name_loc8` = 'Свиток чар для щита - интеллект II' WHERE `entry` = 44455; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Vitesse)', `name_loc3` = 'Rolle der Umhangverzauberung - Tempo', `name_loc6` = 'Pergamino de Encantar capa: Velocidad', `name_loc8` = 'Свиток чар для плаща - скорость I' WHERE `entry` = 44456; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de cape (Agilité majeure)', `name_loc3` = 'Rolle der Umhangverzauberung - Erhebliche Beweglichkeit', `name_loc6` = 'Pergamino de Encantar capa: agilidad sublime', `name_loc8` = 'Свиток чар для плаща - ловкость V' WHERE `entry` = 44457; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de gants (Ecraseur)', `name_loc3` = 'Rolle der Handschuhverzauberung - Zermalmer', `name_loc6` = 'Pergamino de Encantar guantes: triturador', `name_loc8` = 'Свиток чар для перчаток - крушитель' WHERE `entry` = 44458; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme 2M (Massacre)', `name_loc3` = 'Rolle der Zweihandwaffenverzauberung - Massaker', `name_loc6` = 'Pergamino de Encantar arma 2M: masacre', `name_loc8` = 'Свиток чар для двуручного оружия - резня' WHERE `entry` = 44463; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de plastron (Caractéristiques puissantes)', `name_loc3` = 'Rolle der Brustverzauberung - Gewaltige Werte', `name_loc6` = 'Pergamino de Encantar pechera: estadísticas potentes', `name_loc8` = 'Свиток чар для нагрудника - все характеристики VII' WHERE `entry` = 44465; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Toute-puissance excellente)', `name_loc3` = 'Rolle der Waffenverzauberung - Überragende Potenz', `name_loc6` = 'Pergamino de Encantar arma: potencia excelente', `name_loc8` = 'Свиток чар для оружия - могущество III' WHERE `entry` = 44466; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Puissance des sorts puissante)', `name_loc3` = 'Rolle der Waffenverzauberung - Mächtige Zaubermacht', `name_loc6` = 'Pergamino de Encantar arma: poder con hechizos poderoso', `name_loc8` = 'Свиток чар для оружия - сила заклинаний III' WHERE `entry` = 44467; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Assaut supérieur)', `name_loc3` = 'Rolle der Stiefelverzauberung - Großer Sturmangriff', `name_loc6` = 'Pergamino de Encantar botas: asalto superior', `name_loc8` = 'Свиток чар для обуви - штурм II' WHERE `entry` = 44469; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Puissance des sorts excellente)', `name_loc3` = 'Rolle der Armschienenverzauberung - Überragende Zaubermacht', `name_loc6` = 'Pergamino de Encantar brazales: poder con hechizos excelente', `name_loc8` = 'Свиток чар для наручей - сила заклинаний III' WHERE `entry` = 44470; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Berserker)', `name_loc3` = 'Rolle der Waffenverzauberung - Berserker', `name_loc6` = 'Pergamino de Encantar arma: Rabiar', `name_loc8` = 'Свиток чар для оружия - берсерк' WHERE `entry` = 44493; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Précision)', `name_loc3` = 'Rolle der Waffenverzauberung - Präzision', `name_loc6` = 'Pergamino de Encantar arma: Precisión', `name_loc8` = 'Свиток чар для оружия - точность' WHERE `entry` = 44497; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Assaut supérieur)', `name_loc3` = 'Rolle der Armschienenverzauberung - Großer Sturmangriff', `name_loc6` = 'Pergamino de Encantar brazales: asalto superior', `name_loc8` = 'Свиток чар для наручей - штурм II' WHERE `entry` = 44815; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de brassards (Endurance majeure)', `name_loc3` = 'Rolle der Armschienenverzauberung - Erhebliche Ausdauer', `name_loc6` = 'Pergamino de Encantar brazales: aguante sublime', `name_loc8` = 'Свиток чар для наручей - выносливость VI' WHERE `entry` = 44947; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bâton (Puissance des sorts supérieure)', `name_loc3` = 'Rolle der Stabverzauberung - Große Zaubermacht', `name_loc6` = 'Pergamino de Encantar bastón: poder con hechizos superior', `name_loc8` = 'Свиток чар для посоха - сила заклинаний II' WHERE `entry` = 45056; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bâton (Puissance des sorts)', `name_loc3` = 'Rolle der Stabverzauberung - Zaubermacht', `name_loc6` = 'Pergamino de Encantar bastón: poder con hechizos', `name_loc8` = 'Свиток чар для посоха - сила заклинаний I' WHERE `entry` = 45060; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement de bottes (Précision inférieure)', `name_loc3` = 'Rolle der Stiefelverzauberung - Geringe Präzision', `name_loc6` = 'Pergamino de Encantar botas: Precisión inferior', `name_loc8` = 'Свиток чар для обуви - меткость I' WHERE `entry` = 45628; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Garde lame)', `name_loc3` = 'Rolle der Waffenverzauberung - Klingenbarrikade', `name_loc6` = 'Pergamino de Encantar arma: amparo de hojas', `name_loc8` = 'Свиток чар для оружия - отведение удара' WHERE `entry` = 46026; +UPDATE `locales_item` SET `name_loc2` = 'Parchemin d\'enchantement d\'arme (Drain de sang)', `name_loc3` = 'Rolle der Waffenverzauberung - Blutsauger', `name_loc6` = 'Pergamino de Encantar arma: drenador de sangre', `name_loc8` = 'Свиток чар для оружия - вытягивание крови' WHERE `entry` = 46098; +UPDATE `locales_item` SET `name_loc3` = 'Rolle der Handschuhverzauberung - Angler', `name_loc6` = 'Pergamino de Encantar guantes: pescador', `name_loc8` = 'Свиток чар для перчаток - рыболов' WHERE `entry` = 50816; +UPDATE `locales_item` SET `name_loc6` = 'Pergamino de Encantar arma: protección de titanio', `name_loc8` = 'Свиток чар для оружия - титановый страж' WHERE `entry` = 44946; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme 2M (Agilité majeure)', `name_loc6` = 'Encantar arma 2M: agilidad sublime', `name_loc8` = 'Зачаровать двуручное оружие - Крупная Ловкость' WHERE `entry` = 35396; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme 2M (Sauvagerie)', `name_loc6` = 'Encantar arma 2M: salvajismo', `name_loc8` = 'Зачаровать двуручное оружие - Жестокость' WHERE `entry` = 35397; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bottes (Vitesse du sanglier)', `name_loc6` = 'Encantar botas: velocidad de jabalí', `name_loc8` = 'Зачаровать ботинки - Скорость кабана' WHERE `entry` = 35398; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bottes (Rapidité du félin)', `name_loc6` = 'Encantar botas: presteza felina', `name_loc8` = 'Зачаровать ботинки - Стремительность кошки' WHERE `entry` = 35399; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bottes (Dextérité)', `name_loc6` = 'Encantar botas: maña', `name_loc8` = 'Зачаровать ботинки - Проворство' WHERE `entry` = 35400; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bottes (Robustesse)', `name_loc6` = 'Encantar botas: entereza', `name_loc8` = 'Зачаровать ботинки - Стойкость' WHERE `entry` = 35417; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bottes (Pied sûr)', `name_loc6` = 'Encantar botas: Pies de plomo', `name_loc8` = 'Зачаровать ботинки - Быстроногий' WHERE `entry` = 35418; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bottes (Vitalité)', `name_loc6` = 'Encantar botas: vitalidad', `name_loc8` = 'Зачаровать ботинки - Живучесть' WHERE `entry` = 35419; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Masse musculaire)', `name_loc6` = 'Encantar brazales: lozanía', `name_loc8` = 'Зачаровать наручи - Мускулы' WHERE `entry` = 35420; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Robustesse)', `name_loc6` = 'Encantar brazales: entereza', `name_loc8` = 'Зачаровать наручи - Стойкость' WHERE `entry` = 35421; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Défense majeure)', `name_loc6` = 'Encantar brazales: defensa sublime', `name_loc8` = 'Зачаровать наручи - Основы обороны' WHERE `entry` = 35422; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Intelligence majeure)', `name_loc6` = 'Encantar brazales: intelecto sublime', `name_loc8` = 'Зачаровать наручи - Большой интелект' WHERE `entry` = 35423; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Rest. du mana premier)', `name_loc6` = 'Encantar brazales: restaurar maná de primera', `name_loc8` = 'Зачаровать наручи - Восстановление маны' WHERE `entry` = 35424; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Puissance des sorts)', `name_loc6` = 'Encantar brazales: poder con hechizos', `name_loc8` = 'Зачаровать наручи - Сила заклинаний' WHERE `entry` = 35425; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Caractéristiques)', `name_loc6` = 'Encantar brazales: estadísticas', `name_loc8` = 'Зачаровать наручи - Характеристики' WHERE `entry` = 35426; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de brassards (Soins excellents)', `name_loc6` = 'Encantar brazales: sanación excelente', `name_loc8` = 'Зачаровать наручи - Превосходное исцеление' WHERE `entry` = 35427; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de plastron (Santé exceptionnelle)', `name_loc6` = 'Encantar pechera: salud excepcional', `name_loc8` = 'Зачаровать доспех - Необыкновенное здоровье' WHERE `entry` = 35428; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de plastron (Carac. exceptionnelles)', `name_loc6` = 'Encantar pechera: estadísticas excepcionales', `name_loc8` = 'Зачаровать доспех - Необыкновенные характеристики' WHERE `entry` = 35429; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de plastron (Résilience majeure)', `name_loc6` = 'Encantar pechera: temple sublime', `name_loc8` = 'Зачаровать доспех - Крупная устойчивость' WHERE `entry` = 35430; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de plastron (Esprit majeur)', `name_loc6` = 'Encantar pechera: espíritu sublime', `name_loc8` = 'Зачаровать доспех - Сильный дух' WHERE `entry` = 35431; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de cape (Agilité supérieure)', `name_loc6` = 'Encantar capa: agilidad superior', `name_loc8` = 'Зачаровать плащ - Крупная ловкость' WHERE `entry` = 35432; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de cape (Résistance aux Arcanes supérieure)', `name_loc6` = 'Encantar capa: resistencia a lo Arcano superior', `name_loc8` = 'Зачаровать плащ - Большая защита от тайной магии' WHERE `entry` = 35433; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de cape (Résistance à l\'Ombre supérieure)', `name_loc6` = 'Encantar capa: resistencia a las Sombras superior', `name_loc8` = 'Зачаровать плащ - Большая защита от темной магии' WHERE `entry` = 35434; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de cape (Résistance majeure)', `name_loc6` = 'Encantar capa: resistencia sublime', `name_loc8` = 'Зачаровать плащ - Крупное сопротивление' WHERE `entry` = 35435; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de cape (Pénétration des sorts)', `name_loc6` = 'Encantar capa: penetración de hechizos', `name_loc8` = 'Зачаровать плащ - Сильное проникновение' WHERE `entry` = 35436; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de cape (Armure majeure)', `name_loc6` = 'Encantar capa: armadura sublime', `name_loc8` = 'Зачаровать плащ - Большая защита' WHERE `entry` = 35437; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de gants (Assaut)', `name_loc6` = 'Encantar guantes: asalto', `name_loc8` = 'Зачаровать перчатки - Атака' WHERE `entry` = 35438; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de gants (Explosion)', `name_loc6` = 'Encantar guantes: detonación', `name_loc8` = 'Зачаровать перчатки - Порча' WHERE `entry` = 35439; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de gants (Soins majeurs)', `name_loc6` = 'Encantar guantes: sanación sublime', `name_loc8` = 'Зачаровать перчатки - Сильное исцеление' WHERE `entry` = 35440; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de gants (Puissance des sorts majeure)', `name_loc6` = 'Encantar guantes: poder con hechizos sublime', `name_loc8` = 'Зачаровать перчатки - Большая Сила заклинаний' WHERE `entry` = 35441; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de gants (Force majeure)', `name_loc6` = 'Encantar guantes: fuerza sublime', `name_loc8` = 'Зачаровать перчатки - Большая сила' WHERE `entry` = 35442; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de gants (Frappe-sort)', `name_loc6` = 'Encantar guantes: golpe con hechizos', `name_loc8` = 'Зачаровать перчатки - Поражение заклинанием' WHERE `entry` = 35443; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'anneau (Pouvoir de guérison)', `name_loc6` = 'Encantar anillo: poder de sanación', `name_loc8` = 'Зачаровать кольцо - Сила исцеления' WHERE `entry` = 35444; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'anneau (Puissance des sorts)', `name_loc6` = 'Encantar anillo: poder con hechizos', `name_loc8` = 'Зачаровать кольцо - Сила заклинаний' WHERE `entry` = 35445; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'anneau (Caractéristiques)', `name_loc6` = 'Encantar anillo: estadísticas', `name_loc8` = 'Зачаровать кольцо - Характеристики' WHERE `entry` = 35446; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'anneau (Frappe)', `name_loc6` = 'Encantar anillo: golpear', `name_loc8` = 'Зачаровать кольцо - Поражение' WHERE `entry` = 35447; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bouclier (Intelligence)', `name_loc6` = 'Encantar escudo: intelecto', `name_loc8` = 'Зачаровать щит - Интелект' WHERE `entry` = 35448; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bouclier (Endurance majeure)', `name_loc6` = 'Encantar escudo: aguante sublime', `name_loc8` = 'Зачаровать щит - Крупная выносливость' WHERE `entry` = 35449; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bouclier (Résistance)', `name_loc6` = 'Encantar escudo: resistencia', `name_loc8` = 'Зачаровать щит - Сопротивление' WHERE `entry` = 35450; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement de bouclier (Maîtrise du blocage)', `name_loc6` = 'Encantar escudo: bloquear con escudo', `name_loc8` = 'Зачаровать щит - Блок щитом' WHERE `entry` = 35451; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Maître de guerre)', `name_loc6` = 'Encantar arma: maestro de batalla', `name_loc8` = 'Зачаровать оружие - Мастер битв' WHERE `entry` = 35452; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Agilité supérieure)', `name_loc6` = 'Encantar arma: agilidad superior', `name_loc8` = 'Зачаровать оружме - Великая ловкость' WHERE `entry` = 35453; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Soins majeurs)', `name_loc6` = 'Encantar arma: sanación sublime', `name_loc8` = 'Зачаровать оружие - Крупное исцеление' WHERE `entry` = 35454; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Intelligence majeure)', `name_loc6` = 'Encantar arma: intelecto sublime', `name_loc8` = 'Зачаровать оружие - Большой интелект' WHERE `entry` = 35455; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Puissance des sorts majeure)', `name_loc6` = 'Encantar arma: poder con hechizos sublime', `name_loc8` = 'Зачаровать оружие - Крупная сила заклинаний' WHERE `entry` = 35456; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Frappe majeure)', `name_loc6` = 'Encantar arma: golpear sublime', `name_loc8` = 'Зачаровать оружие - Крупное поражение' WHERE `entry` = 35457; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Mangouste)', `name_loc6` = 'Encantar arma: mangosta', `name_loc8` = 'Зачаровать оружие - Мангуст' WHERE `entry` = 35458; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Toute-puissance)', `name_loc6` = 'Encantar arma: potencia', `name_loc8` = 'Зачаровать оружие - Могущество' WHERE `entry` = 35459; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Âme de givre)', `name_loc6` = 'Encantar arma: escarcha de alma', `name_loc8` = 'Зачаровать оружие - Ледяная душа' WHERE `entry` = 35460; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Eruption de sort)', `name_loc6` = 'Encantar arma: oleada de hechizos', `name_loc8` = 'Зачаровать оружие - Всплеск сил' WHERE `entry` = 35461; +UPDATE `locales_item` SET `name_loc2` = 'Enchantement d\'arme (Feu solaire)', `name_loc6` = 'Encantar arma: Fuego Solar', `name_loc8` = 'Зачаровать оружие - Огонь солнца' WHERE `entry` = 35462; +UPDATE `locales_item` SET `name_loc6` = 'Pergamino de Encantar arma: intelecto excepcional', `name_loc8` = 'Свиток чар для оружия: Исключительный Интелект' WHERE `entry` = 38958; +UPDATE `locales_item` SET `name_loc6` = 'Pergamino de Encantar escudo: aguante poderoso', `name_loc8` = 'Свиток чар для щита: исключительная выносливость' WHERE `entry` = 38983; +UPDATE `locales_item` SET `name_loc6` = 'Pergamino de Encantar arma: sanación excepcional', `name_loc8` = 'Свиток чар для оружия: исключительное исцеление' WHERE `entry` = 38994; + +-- class:3 (gems) +UPDATE `locales_item` SET `name_loc2` = 'Larme de grenat sanguin', `name_loc3` = 'Tränenförmiger Blutgranat', `name_loc6` = 'Granate de sangre luminoso', `name_loc8` = 'Каплевидный кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 23094; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin runique', `name_loc3` = 'Runenverzierter Blutgranat', `name_loc6` = 'Granate de sangre luminoso', `name_loc8` = 'Рунический кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 23096; +UPDATE `locales_item` SET `name_loc2` = 'Spessarite de flamme lumineuse', `name_loc3` = 'Glänzender Flammenspessarit', `name_loc6` = 'Espesartita de llamas temeraria', `name_loc8` = 'Светоносный пламенный спессарит', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen gelben oder roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o rojo.', `description_loc8` = 'Для желтого или красного гнезда.' WHERE `entry` = 23099; +UPDATE `locales_item` SET `name_loc2` = 'Spessarite de flamme luisante', `name_loc3` = 'Glitzernder Flammenspessarit', `name_loc6` = 'Draenita de Sombras destellante', `name_loc8` = 'Блистающий пламенный спессарит', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen gelben oder roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o rojo.', `description_loc8` = 'Для желтого или красного гнезда.' WHERE `entry` = 23100; +UPDATE `locales_item` SET `name_loc2` = 'Olivine durcie', `name_loc3` = 'Robuster Tiefenperidot', `name_loc6` = 'Peridoto intenso regio', `name_loc8` = 'Отверделый хризолит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 23105; +UPDATE `locales_item` SET `name_loc2` = 'Olivine éblouissante', `name_loc3` = 'Schillernder Tiefenperidot', `name_loc6` = 'Draenita de Sombras purificada', `name_loc8` = 'Ослепительный хризолит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 23106; +UPDATE `locales_item` SET `name_loc2` = 'Draénite ombreuse luminescente', `name_loc3` = 'Leuchtender Schattendraenit', `name_loc6` = 'Draenita de Sombras intemporal', `name_loc8` = 'Светящийся сумрачный дренит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 23108; +UPDATE `locales_item` SET `name_loc2` = 'Draénite ombreuse royale', `name_loc3` = 'Königlicher Schattendraenit', `name_loc6` = 'Draenita de Sombras purificada', `name_loc8` = 'Королевский сумрачный дренит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 23109; +UPDATE `locales_item` SET `name_loc2` = 'Draénite dorée brillante', `name_loc3` = 'Glänzender Golddraenit', `name_loc6` = 'Granate de sangre luminoso', `name_loc8` = 'Сверкающий золотой дренит', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 23113; +UPDATE `locales_item` SET `name_loc2` = 'Draénite dorée resplendissante', `name_loc3` = 'Schimmernder Golddraenit', `name_loc6` = 'Draenita dorada lisa', `name_loc8` = 'Искристый золотой дренит', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 23114; +UPDATE `locales_item` SET `name_loc2` = 'Draénite dorée bombée', `name_loc3` = 'Kompakter Golddraenit', `name_loc6` = 'Draenita dorada sutil', `name_loc8` = 'Матовый золотой дренит', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 23115; +UPDATE `locales_item` SET `name_loc2` = 'Draénite dorée rigide', `name_loc3` = 'Massiver Golddraenit', `name_loc6` = 'Piedra lunar azur rígida', `name_loc8` = 'Прочный золотой дренит', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 23116; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de lune azur satinée', `name_loc3` = 'Irisierender Azurmondstein', `name_loc6` = 'Piedra lunar azur chispeante', `name_loc8` = 'Блестящий лазурный лунный камень', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 23121; +UPDATE `locales_item` SET `name_loc2` = 'Larme de rubis vivant', `name_loc3` = 'Tränenförmiger lebendiger Rubin', `name_loc6` = 'Rubí vivo luminoso', `name_loc8` = 'Каплевидный животворный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 24029; +UPDATE `locales_item` SET `name_loc2` = 'Rubis vivant runique', `name_loc3` = 'Runenverzierter lebendiger Rubin', `name_loc6` = 'Rubí vivo luminoso', `name_loc8` = 'Рунический животворный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 24030; +UPDATE `locales_item` SET `name_loc2` = 'Rubis vivant éclatant', `name_loc3` = 'Heller lebendiger Rubin', `name_loc6` = 'Rubí vivo delicado', `name_loc8` = 'Яркий животворный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 24031; +UPDATE `locales_item` SET `name_loc2` = 'Rubis vivant subtil', `name_loc3` = 'Fragiler lebendiger Rubin', `name_loc6` = 'Piedra del alba sutil', `name_loc8` = 'Изящный животворный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 24032; +UPDATE `locales_item` SET `name_loc2` = 'Etoile d\'Elune satinée', `name_loc3` = 'Irisierender Stern der Elune', `name_loc6` = 'Estrella de Elune chispeante', `name_loc8` = 'Блестящая Звезда Элуны', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 24037; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'aube brillante', `name_loc3` = 'Glänzender Dämmerstein', `name_loc6` = 'Rubí vivo luminoso', `name_loc8` = 'Сверкающий зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 24047; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'aube resplendissante', `name_loc3` = 'Schimmernder Dämmerstein', `name_loc6` = 'Piedra del alba lisa', `name_loc8` = 'Искристый зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 24050; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'aube rigide', `name_loc3` = 'Massiver Dämmerstein', `name_loc6` = 'Estrella de Elune rígida', `name_loc8` = 'Прочный зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 24051; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'aube bombée', `name_loc3` = 'Kompakter Dämmerstein', `name_loc6` = 'Piedra del alba sutil', `name_loc8` = 'Матовый зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 24052; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de nuit luminescent', `name_loc3` = 'Leuchtendes Nachtauge', `name_loc6` = 'Ojo de noche intemporal', `name_loc8` = 'Светящееся око ночи', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 24056; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de nuit royal', `name_loc3` = 'Königliches Nachtauge', `name_loc6` = 'Ojo de noche purificado', `name_loc8` = 'Королевское око ночи', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 24057; +UPDATE `locales_item` SET `name_loc2` = 'Topaze noble lumineuse', `name_loc3` = 'Glänzender Edeltopas', `name_loc6` = 'Topacio noble temerario', `name_loc8` = 'Светоносный благородный топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 24060; +UPDATE `locales_item` SET `name_loc2` = 'Topaze noble luisante', `name_loc3` = 'Glitzernder Edeltopas', `name_loc6` = 'Ojo de noche destellante', `name_loc8` = 'Блистающий благородный топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 24061; +UPDATE `locales_item` SET `name_loc2` = 'Talasite durcie', `name_loc3` = 'Robuster Talasit', `name_loc6` = 'Talasita regia', `name_loc8` = 'Отверделый талассит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 24062; +UPDATE `locales_item` SET `name_loc2` = 'Talasite éblouissante', `name_loc3` = 'Schillernder Talasit', `name_loc6` = 'Ojo de noche purificado', `name_loc8` = 'Ослепительный талассит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 24065; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'aube mystique sublime', `name_loc3` = 'Mystischer Edeldämmerstein', `name_loc6` = 'Piedra del alba mística', `name_loc8` = 'Возвышенный мистический зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 27679; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin sobre', `name_loc3` = 'Reiner Blutgranat', `name_loc6` = 'Granate de sangre luminoso', `name_loc8` = 'Застывший кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 27777; +UPDATE `locales_item` SET `name_loc2` = 'Olivine entaillée', `name_loc3` = 'Gekerbter Tiefenperidot', `name_loc6` = 'Peridoto intenso dentado', `name_loc8` = 'Зубчатый хризолит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 27785; +UPDATE `locales_item` SET `name_loc2` = 'Olivine barbelée', `name_loc3` = 'Scharfkantiger Tiefenperidot', `name_loc6` = 'Peridoto intenso dentado', `name_loc8` = 'Шершавый хризолит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 27786; +UPDATE `locales_item` SET `name_loc2` = 'Olivine barbelée', `name_loc3` = 'Scharfkantiger Tiefenperidot', `name_loc6` = 'Peridoto intenso dentado', `name_loc8` = 'Шершавый хризолит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 27809; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin sobre', `name_loc3` = 'Reiner Blutgranat', `name_loc6` = 'Granate de sangre luminoso', `name_loc8` = 'Застывший кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 27812; +UPDATE `locales_item` SET `name_loc2` = 'Olivine entaillée', `name_loc3` = 'Gekerbter Tiefenperidot', `name_loc6` = 'Peridoto intenso dentado', `name_loc8` = 'Зубчатый хризолит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 27820; +UPDATE `locales_item` SET `name_loc2` = 'Rubis orné runique', `name_loc3` = 'Runenverzierter Schmuckrubin', `name_loc6` = 'Rubí ornamentado luminoso', `name_loc8` = 'Рунический изысканный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28118; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'aube ornée resplendissante', `name_loc3` = 'Schimmernder Schmuckdämmerstein', `name_loc6` = 'Piedra del alba ornamentada lisa', `name_loc8` = 'Искристый изысканный зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 28120; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin puissant', `name_loc3` = 'Mächtiger Blutgranat', `name_loc6` = 'Granate de sangre delicado', `name_loc8` = 'Могущественный кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28360; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin puissant', `name_loc3` = 'Mächtiger Blutgranat', `name_loc6` = 'Granate de sangre delicado', `name_loc8` = 'Могущественный кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28361; +UPDATE `locales_item` SET `name_loc2` = 'Rubis orné soutenu', `name_loc3` = 'Klobiger Schmuckrubin', `name_loc6` = 'Rubí ornamentado delicado', `name_loc8` = 'Рельефный изысканный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28362; +UPDATE `locales_item` SET `name_loc2` = 'Topaze ornée intaillée', `name_loc3` = 'Gravierter Schmucktopas', `name_loc6` = 'Topacio ornamentado mortal', `name_loc8` = 'Покрытый письменами изысканный топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 28363; +UPDATE `locales_item` SET `name_loc2` = 'Larme de tourmaline', `name_loc3` = 'Tränenförmiger Turmalin', `name_loc6` = 'Turmalina luminosa', `name_loc8` = 'Каплевидный турмалин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28460; +UPDATE `locales_item` SET `name_loc2` = 'Tourmaline runique', `name_loc3` = 'Runenverzierter Turmalin', `name_loc6` = 'Turmalina luminosa', `name_loc8` = 'Рунический турмалин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28461; +UPDATE `locales_item` SET `name_loc2` = 'Tourmaline éclatante', `name_loc3` = 'Heller Turmalin', `name_loc6` = 'Turmalina delicada', `name_loc8` = 'Яркий турмалин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28462; +UPDATE `locales_item` SET `name_loc2` = 'Zircon satiné', `name_loc3` = 'Irisierender Zirkon', `name_loc6` = 'Circón chispeante', `name_loc8` = 'Блестящий циркон', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 28465; +UPDATE `locales_item` SET `name_loc2` = 'Ambre brillant', `name_loc3` = 'Glänzender Bernstein', `name_loc6` = 'Turmalina luminosa', `name_loc8` = 'Сверкающий янтарь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 28466; +UPDATE `locales_item` SET `name_loc2` = 'Ambre rigide', `name_loc3` = 'Massiver Bernstein', `name_loc6` = 'Circón rígido', `name_loc8` = 'Прочный янтарь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 28468; +UPDATE `locales_item` SET `name_loc2` = 'Ambre resplendissant', `name_loc3` = 'Schimmernder Bernstein', `name_loc6` = 'Ámbar liso', `name_loc8` = 'Искристый янтарь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 28469; +UPDATE `locales_item` SET `name_loc2` = 'Ambre bombé', `name_loc3` = 'Kompakter Bernstein', `name_loc6` = 'Ámbar sutil', `name_loc8` = 'Матовый янтарь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 28470; +UPDATE `locales_item` SET `name_loc2` = 'Diamant brûlétoile de rapidité', `name_loc3` = 'Flüchtiger Sternenfeuerdiamant', `name_loc6` = 'Diamante Fuego Estelar raudo', `name_loc8` = 'Стремительный алмаз Звездного огня', `description_loc2` = 'Ne peut être serti que dans une châsse de méta-gemme.', `description_loc3` = 'Passt nur in einen Sockel der Kategorie Meta.', `description_loc6` = 'Solo encaja en una ranura de gema meta.', `description_loc8` = 'Подходит только в гнездо для особого самоцвета.' WHERE `entry` = 28557; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin éclatant', `name_loc3` = 'Heller Blutgranat', `name_loc6` = 'Granate de sangre delicado', `name_loc8` = 'Яркий кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28595; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu lumineuse', `name_loc3` = 'Glänzender Feueropal', `name_loc6` = 'Ópalo de fuego temerario', `name_loc8` = 'Светоносный огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30547; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase polie', `name_loc3` = 'Polierter Chrysopras', `name_loc6` = 'Crisoprasa dentada', `name_loc8` = 'Полированный хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30548; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase scindée', `name_loc3` = 'Unreiner Chrysopras', `name_loc6` = 'Crisoprasa brumosa', `name_loc8` = 'Расколотый хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30550; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu infusée', `name_loc3` = 'Energieerfüllter Feueropal', `name_loc6` = 'Ópalo de fuego temerario', `name_loc8` = 'Заряженный огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30551; +UPDATE `locales_item` SET `name_loc2` = 'Tanzanite bénie', `name_loc3` = 'Gesegneter Tansanit', `name_loc6` = 'Tanzanita intemporal', `name_loc8` = 'Благословенный танзанит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 30552; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu en parfait état', `name_loc3` = 'Makelloser Feueropal', `name_loc6` = 'Tanzanita destellante', `name_loc8` = 'Нетронутый огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30553; +UPDATE `locales_item` SET `name_loc2` = 'Tanzanite luminescente', `name_loc3` = 'Leuchtender Tansanit', `name_loc6` = 'Tanzanita intemporal', `name_loc8` = 'Светящийся танзанит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 30555; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu luisante', `name_loc3` = 'Glitzernder Feueropal', `name_loc6` = 'Tanzanita destellante', `name_loc8` = 'Блистающий огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30556; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu rougeoyante', `name_loc3` = 'Gleißender Feueropal', `name_loc6` = 'Ópalo de fuego de adepto', `name_loc8` = 'Мерцающий огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30558; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu gravée', `name_loc3` = 'Geätzter Feueropal', `name_loc6` = 'Tanzanita con grabados', `name_loc8` = 'Гравированный огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30559; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase couverte de runes', `name_loc3` = 'Runenbesetzter Chrysopras', `name_loc6` = 'Crisoprasa brumosa', `name_loc8` = 'Покрытый рунами хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30560; +UPDATE `locales_item` SET `name_loc2` = 'Tanzanite régalienne', `name_loc3` = 'Majestätischer Tansanit', `name_loc6` = 'Crisoprasa regia', `name_loc8` = 'Монарший танзанит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 30563; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu rayonnante', `name_loc3` = 'Bestechender Feueropal', `name_loc6` = 'Tanzanita velada', `name_loc8` = 'Сияющий огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30564; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu d\'assassin', `name_loc3` = 'Feueropal des Assassinen', `name_loc6` = 'Crisoprasa dentada', `name_loc8` = 'Огненный опал убийцы', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30565; +UPDATE `locales_item` SET `name_loc2` = 'Tanzanite impériale', `name_loc3` = 'Kaiserlicher Tansanit', `name_loc6` = 'Tanzanita purificada', `name_loc8` = 'Имперский танзанит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 30572; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu mystérieuse', `name_loc3` = 'Geheimnisvoller Feueropal', `name_loc6` = 'Tanzanita misteriosa', `name_loc8` = 'Таинственный огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30573; +UPDATE `locales_item` SET `name_loc2` = 'Tanzanite brutale', `name_loc3` = 'Grober Tansanit', `name_loc6` = 'Tanzanita cambiante', `name_loc8` = 'Грубый танзанит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 30574; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu agile', `name_loc3` = 'Wuchtiger Feueropal', `name_loc6` = 'Crisoprasa liviana', `name_loc8` = 'Живой огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30575; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu durable', `name_loc3` = 'Solider Feueropal', `name_loc6` = 'Ópalo de fuego empecinado', `name_loc8` = 'Надежный огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30581; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase intemporelle', `name_loc3` = 'Zeitloser Chrysopras', `name_loc6` = 'Tanzanita intemporal', `name_loc8` = 'Вневременной хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30583; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu scintillante', `name_loc3` = 'Flammender Feueropal', `name_loc6` = 'Ópalo de fuego pulido', `name_loc8` = 'Переливчатый огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30585; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase de voyant', `name_loc3` = 'Chrysopras des Sehers', `name_loc6` = 'Tanzanita purificada', `name_loc8` = 'Хризопраз Провидца', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30586; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase éblouissante', `name_loc3` = 'Schillernder Chrysopras', `name_loc6` = 'Tanzanita purificada', `name_loc8` = 'Ослепительный хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30589; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase durcie', `name_loc3` = 'Robuster Chrysopras', `name_loc6` = 'Crisoprasa regia', `name_loc8` = 'Отверделый хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30590; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu investie', `name_loc3` = 'Machterfüllter Feueropal', `name_loc6` = 'Ópalo de fuego luciente', `name_loc8` = 'Наделенный силой огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30591; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu iridescente', `name_loc3` = 'Regenbogenfarbener Feueropal', `name_loc6` = 'Ópalo de fuego pujante', `name_loc8` = 'Радужный огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30593; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase nitescente', `name_loc3` = 'Prächtiger Chrysopras', `name_loc6` = 'Crisoprasa regia', `name_loc8` = 'Лучезарный хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30594; +UPDATE `locales_item` SET `name_loc2` = 'Tanzanite fluorescente', `name_loc3` = 'Fluoreszierender Tansanit', `name_loc6` = 'Tanzanita purificada', `name_loc8` = 'Флюоресцирующий танзанит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 30600; +UPDATE `locales_item` SET `name_loc2` = 'Opale de feu flambante', `name_loc3` = 'Blitzender Feueropal', `name_loc6` = 'Crisoprasa resistente', `name_loc8` = 'Лучащийся огненный опал', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 30601; +UPDATE `locales_item` SET `name_loc2` = 'Tanzanite royale', `name_loc3` = 'Königlicher Tansanit', `name_loc6` = 'Tanzanita purificada', `name_loc8` = 'Королевский танзанит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 30603; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase vive', `name_loc3` = 'Klarer Chrysopras', `name_loc6` = 'Crisoprasa liviana', `name_loc8` = 'Насыщенный хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30605; +UPDATE `locales_item` SET `name_loc2` = 'Chrysoprase diaprée', `name_loc3` = 'Flackernder Chrysopras', `name_loc6` = 'Crisoprasa de relámpagos', `name_loc8` = 'Лучистый хризопраз', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 30606; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste infusée', `name_loc3` = 'Energieerfüllter Amethyst', `name_loc6` = 'Amatista intemporal', `name_loc8` = 'Заряженный аметист', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 31116; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste apaisante', `name_loc3` = 'Beruhigender Amethyst', `name_loc6` = 'Amatista calmante incansable', `name_loc8` = 'Успокаивающий аметист', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 31117; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste vibrante', `name_loc3` = 'Pulsierender Amethyst', `name_loc6` = 'Amatista soberana', `name_loc8` = 'Пульсирующий аметист', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 31118; +UPDATE `locales_item` SET `name_loc2` = 'Grande draénite dorée', `name_loc3` = 'Großer Golddraenit', `name_loc6` = 'Piedra lunar azur rígida', `name_loc8` = 'Великий золотой дренит', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 31860; +UPDATE `locales_item` SET `name_loc2` = 'Grande pierre d\'aube', `name_loc3` = 'Großer Dämmerstein', `name_loc6` = 'Estrella de Elune rígida', `name_loc8` = 'Великий зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 31861; +UPDATE `locales_item` SET `name_loc2` = 'Draénite ombreuse équilibrée', `name_loc3` = 'Ausbalancierter Schattendraenit', `name_loc6` = 'Draenita de Sombras cambiante', `name_loc8` = 'Сбалансированный сумрачный дренит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 31862; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de nuit équilibré', `name_loc3` = 'Ausbalanciertes Nachtauge', `name_loc6` = 'Ojo de noche cambiante', `name_loc8` = 'Сбалансированное око ночи', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 31863; +UPDATE `locales_item` SET `name_loc2` = 'Draénite ombreuse infusée', `name_loc3` = 'Energieerfüllter Schattendraenit', `name_loc6` = 'Draenita de Sombras cambiante', `name_loc8` = 'Заряженный сумрачный дренит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 31864; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de nuit infusé', `name_loc3` = 'Energieerfülltes Nachtauge', `name_loc6` = 'Ojo de noche destellante', `name_loc8` = 'Заряженное око ночи', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 31865; +UPDATE `locales_item` SET `name_loc2` = 'Topaze noble voilée', `name_loc3` = 'Verschleierter Edeltopas', `name_loc6` = 'Ojo de noche velado', `name_loc8` = 'Сокрытый благородный топаз', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 31867; +UPDATE `locales_item` SET `name_loc2` = 'Topaze noble pernicieuse', `name_loc3` = 'Tückischer Edeltopas', `name_loc6` = 'Topacio noble mortal', `name_loc8` = 'Гибельный благородный топаз', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 31868; +UPDATE `locales_item` SET `name_loc2` = 'Larme de spinelle cramoisi', `name_loc3` = 'Tränenförmiger Purpurspinell', `name_loc6` = 'Espinela carmesí luminosa', `name_loc8` = 'Каплевидная пунцовая шпинель', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 32195; +UPDATE `locales_item` SET `name_loc2` = 'Spinelle cramoisi runique', `name_loc3` = 'Runenverzierter Purpurspinell', `name_loc6` = 'Espinela carmesí luminosa', `name_loc8` = 'Руническая пунцовая шпинель', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 32196; +UPDATE `locales_item` SET `name_loc2` = 'Spinelle cramoisi éclatant', `name_loc3` = 'Heller Purpurspinell', `name_loc6` = 'Espinela carmesí delicada', `name_loc8` = 'Яркая пунцовая шпинель', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 32197; +UPDATE `locales_item` SET `name_loc2` = 'Spinelle cramoisi subtil', `name_loc3` = 'Fragiler Purpurspinell', `name_loc6` = 'Ojo de león sutil', `name_loc8` = 'Изящная пунцовая шпинель', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 32198; +UPDATE `locales_item` SET `name_loc2` = 'Saphir empyréen satiné', `name_loc3` = 'Irisierender Engelssaphir', `name_loc6` = 'Zafiro empíreo chispeante', `name_loc8` = 'Блестящий неземной сапфир', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 32202; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de lion brillant', `name_loc3` = 'Glänzendes Löwenauge', `name_loc6` = 'Espinela carmesí luminosa', `name_loc8` = 'Сверкающий львиный глаз', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 32204; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de lion rigide', `name_loc3` = 'Massives Löwenauge', `name_loc6` = 'Zafiro empíreo rígido', `name_loc8` = 'Прочный львиный глаз', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 32206; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de lion resplendissant', `name_loc3` = 'Schimmerndes Löwenauge', `name_loc6` = 'Ojo de león liso', `name_loc8` = 'Искристый львиный глаз', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 32207; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de lion bombé', `name_loc3` = 'Kompaktes Löwenauge', `name_loc6` = 'Ojo de león sutil', `name_loc8` = 'Матовый львиный глаз', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 32208; +UPDATE `locales_item` SET `name_loc2` = 'Grand oeil de lion', `name_loc3` = 'Großes Löwenauge', `name_loc6` = 'Zafiro empíreo rígido', `name_loc8` = 'Великий львиный глаз', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 32210; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste chantelombre équilibrée', `name_loc3` = 'Ausbalancierter Schattensangamethyst', `name_loc6` = 'Amatista Cantosombrío cambiante', `name_loc8` = 'Сбалансированный аметист Песни Теней', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 32213; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste chantelombre infusée', `name_loc3` = 'Energieerfüllter Schattensangamethyst', `name_loc6` = 'Amatista Cantosombrío destellante', `name_loc8` = 'Заряженный аметист Песни Теней', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 32214; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste chantelombre luminescente', `name_loc3` = 'Leuchtender Schattensangamethyst', `name_loc6` = 'Amatista Cantosombrío intemporal', `name_loc8` = 'Светящийся аметист Песни Теней', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 32215; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste chantelombre royale', `name_loc3` = 'Königlicher Schattensangamethyst', `name_loc6` = 'Amatista Cantosombrío purificada', `name_loc8` = 'Королевский аметист Песни Теней', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 32216; +UPDATE `locales_item` SET `name_loc2` = 'Pyrolithe lumineuse', `name_loc3` = 'Glänzender Pyrostein', `name_loc6` = 'Piropiedra temeraria', `name_loc8` = 'Светоносный огнекамень', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 32219; +UPDATE `locales_item` SET `name_loc2` = 'Pyrolithe luisante', `name_loc3` = 'Glitzernder Pyrostein', `name_loc6` = 'Amatista Cantosombrío destellante', `name_loc8` = 'Блистающий огнекамень', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 32220; +UPDATE `locales_item` SET `name_loc2` = 'Pyrolithe pernicieuse', `name_loc3` = 'Tückischer Pyrostein', `name_loc6` = 'Piropiedra mortal', `name_loc8` = 'Гибельный огнекамень', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 32222; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude d\'écume durcie', `name_loc3` = 'Robuster Gischtsmaragd', `name_loc6` = 'Esmeralda de espuma marina regia', `name_loc8` = 'Отверделый морской изумруд', `description_loc2` = 'Correspond à une châsse bleue ou jaune.', `description_loc3` = 'Am besten für einen blauen oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul o amarillo.', `description_loc8` = 'Для синего или желтого гнезда.' WHERE `entry` = 32223; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude d\'écume éblouissante', `name_loc3` = 'Schillernder Gischtsmaragd', `name_loc6` = 'Amatista Cantosombrío purificada', `name_loc8` = 'Ослепительный морской изумруд', `description_loc2` = 'Correspond à une châsse bleue ou jaune.', `description_loc3` = 'Am besten für einen blauen oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для синего или желтого гнезда.' WHERE `entry` = 32225; +UPDATE `locales_item` SET `name_loc2` = 'Améthyste instable', `name_loc3` = 'Instabiler Amethyst', `name_loc6` = 'Amatista cambiante', `name_loc8` = 'Неуравновешенный аметист', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 32634; +UPDATE `locales_item` SET `name_loc2` = 'Olivine instable', `name_loc3` = 'Instabiler Peridot', `name_loc6` = 'Amatista intemporal', `name_loc8` = 'Неуравновешенный хризолит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 32635; +UPDATE `locales_item` SET `name_loc2` = 'Saphir instable', `name_loc3` = 'Instabiler Saphir', `name_loc6` = 'Amatista purificada', `name_loc8` = 'Неуравновешенный сапфир', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 32636; +UPDATE `locales_item` SET `name_loc2` = 'Citrine instable', `name_loc3` = 'Instabiler Citrin', `name_loc6` = 'Citrino mortal', `name_loc8` = 'Неуравновешенный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 32637; +UPDATE `locales_item` SET `name_loc2` = 'Topaze instable', `name_loc3` = 'Instabiler Topas', `name_loc6` = 'Citrino temerario', `name_loc8` = 'Неуравновешенный топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 32638; +UPDATE `locales_item` SET `name_loc2` = 'Talasite instable', `name_loc3` = 'Instabiler Talasit', `name_loc6` = 'Musgorita dentada', `name_loc8` = 'Неуравновешенный талассит', `description_loc2` = 'Correspond à une châsse bleue ou jaune.', `description_loc3` = 'Am besten für einen blauen oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul o amarillo.', `description_loc8` = 'Для синего или желтого гнезда.' WHERE `entry` = 32639; +UPDATE `locales_item` SET `name_loc2` = 'Diamant instable tout-puissant', `name_loc3` = 'Mächtiger instabiler Diamant', `name_loc6` = 'Diamante inestable tenso', `name_loc8` = 'Могущественный неуравновешенный алмаз', `description_loc2` = 'Ne peut être serti que dans une châsse de méta-gemme.', `description_loc3` = 'Passt nur in einen Sockel der Kategorie Meta.', `description_loc6` = 'Solo encaja en una ranura de gema meta.', `description_loc8` = 'Подходит только в гнездо для особого самоцвета.' WHERE `entry` = 32640; +UPDATE `locales_item` SET `name_loc2` = 'Spencerite radieuse', `name_loc3` = 'Strahlender Spencerit', `name_loc6` = 'Espencerita delicada', `name_loc8` = 'Светозарный огненный камень', `description_loc2` = 'Correspond à une châsse bleue ou jaune.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 32735; +UPDATE `locales_item` SET `name_loc2` = 'Pyrolithe voilée', `name_loc3` = 'Verschleierter Pyrostein', `name_loc6` = 'Amatista Cantosombrío velada', `name_loc8` = 'Сокрытый огнекамень', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 32221; +UPDATE `locales_item` SET `name_loc2` = 'Grande pierrelame', `name_loc3` = 'Großer Klingenstein', `name_loc6` = 'Piedra tajadera rígida', `name_loc8` = 'Великий Каменный клинок', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 33141; +UPDATE `locales_item` SET `name_loc2` = 'Spessarite de flamme voilée', `name_loc3` = 'Verschleierter Flammenspessarit', `name_loc6` = 'Draenita de Sombras velada', `name_loc8` = 'Сокрытый пламенный спессарит', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen gelben oder roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul o rojo.', `description_loc8` = 'Для желтого или красного гнезда.' WHERE `entry` = 31866; +UPDATE `locales_item` SET `name_loc2` = 'Spessarite de flamme pernicieuse', `name_loc3` = 'Tückischer Flammenspessarit', `name_loc6` = 'Espesartita de llamas mortal', `name_loc8` = 'Гибельный пламенный спессарит', `description_loc2` = 'Correspond à une châsse jaune ou rouge.', `description_loc3` = 'Am besten für einen gelben oder roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o rojo.', `description_loc8` = 'Для желтого или красного гнезда.' WHERE `entry` = 31869; +UPDATE `locales_item` SET `name_loc2` = 'Pierrelame brillante', `name_loc3` = 'Brillantierter Klingenstein', `name_loc6` = 'Piedra tajadera luminosa', `name_loc8` = 'Сверкающий клинок-камень', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 33139; +UPDATE `locales_item` SET `name_loc2` = 'Spinelle cramoisi éclatant', `name_loc3` = 'Heller Purpurspinell', `name_loc6` = 'Espinela carmesí delicada', `name_loc8` = 'Яркая пунцовая шпинель', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 35487; +UPDATE `locales_item` SET `name_loc2` = 'Spinelle cramoisi runique', `name_loc3` = 'Runenverzierter Purpurspinell', `name_loc6` = 'Espinela carmesí luminosa', `name_loc8` = 'Руническая пунцовая шпинель', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 35488; +UPDATE `locales_item` SET `name_loc2` = 'Larme de spinelle cramoisi', `name_loc3` = 'Tränenförmiger Purpurspinell', `name_loc6` = 'Espinela carmesí luminosa', `name_loc8` = 'Каплевидная пунцовая шпинель', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 35489; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de nuit régalien', `name_loc3` = 'Majestätisches Nachtauge', `name_loc6` = 'Talasita regia', `name_loc8` = 'Монаршее око ночи', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 35707; +UPDATE `locales_item` SET `name_loc2` = 'Rubis orné soutenu', `name_loc3` = 'Klobiger Schmuckrubin', `name_loc6` = 'Rubí ornamentado delicado', `name_loc8` = 'Рельефный изысканный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 38545; +UPDATE `locales_item` SET `name_loc2` = 'Topaze ornée intaillée', `name_loc3` = 'Gravierter Schmucktopas', `name_loc6` = 'Topacio ornamentado mortal', `name_loc8` = 'Покрытый письменами изысканный топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 38547; +UPDATE `locales_item` SET `name_loc2` = 'Rubis orné runique', `name_loc3` = 'Runenverzierter Schmuckrubin', `name_loc6` = 'Rubí ornamentado luminoso', `name_loc8` = 'Рунический изысканный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 38549; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'aube ornée resplendissante', `name_loc3` = 'Schimmernder Schmuckdämmerstein', `name_loc6` = 'Piedra del alba ornamentada lisa', `name_loc8` = 'Искристый изысканный зоревик', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 38546; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de dragon éclatant', `name_loc3` = 'Helles Drachenauge', `name_loc6` = 'Ojo de dragón delicado', `name_loc8` = 'Яркое Око дракона', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 36766; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang éclatante', `name_loc3` = 'Heller Blutstein', `name_loc6` = 'Sangrita delicada', `name_loc8` = 'Яркий кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 39906; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang subtile', `name_loc3` = 'Fragiler Blutstein', `name_loc6` = 'Cristal de sol sutil', `name_loc8` = 'Изящный кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 39907; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang cassée', `name_loc3` = 'Frakturierter Blutstein', `name_loc6` = 'Cristal de sol liso', `name_loc8` = 'Растрескавшийся кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 39909; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang runique', `name_loc3` = 'Runenbeschriebener Blutstein', `name_loc6` = 'Sangrita luminosa', `name_loc8` = 'Рунический кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 39911; +UPDATE `locales_item` SET `name_loc2` = 'Cristal soleil brillant', `name_loc3` = 'Glänzender Sonnenkristall', `name_loc6` = 'Sangrita luminosa', `name_loc8` = 'Сверкающий солнечный хрусталь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 39912; +UPDATE `locales_item` SET `name_loc2` = 'Cristal soleil rigide', `name_loc3` = 'Massiver Sonnenkristall', `name_loc6` = 'Calcedonia rígida', `name_loc8` = 'Прочный солнечный хрусталь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 39915; +UPDATE `locales_item` SET `name_loc2` = 'Cristal soleil bombé', `name_loc3` = 'Kompakter Sonnenkristall', `name_loc6` = 'Cristal de sol sutil', `name_loc8` = 'Матовый солнечный хрусталь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 39916; +UPDATE `locales_item` SET `name_loc2` = 'Calcédoine satinée', `name_loc3` = 'Irisierender Chalzedon', `name_loc6` = 'Calcedonia chispeante', `name_loc8` = 'Блестящий кальцедоний', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 39927; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux surpuissant', `name_loc3` = 'Imposanter Schattenkristall', `name_loc6` = 'Jade oscuro dentado', `name_loc8` = 'Всевластный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 39933; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux luminescent', `name_loc3` = 'Leuchtender Schattenkristall', `name_loc6` = 'Cristal de Sombras intemporal', `name_loc8` = 'Светящийся сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 39936; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux équilibré', `name_loc3` = 'Ausbalancierter Schattenkristall', `name_loc6` = 'Cristal de Sombras cambiante', `name_loc8` = 'Сбалансированный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 39937; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux régalien', `name_loc3` = 'Majestätischer Schattenkristall', `name_loc6` = 'Jade oscuro regio', `name_loc8` = 'Монарший сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 39938; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux ténu', `name_loc3` = 'Zarter Schattenkristall', `name_loc6` = 'Cristal de Sombras destellante', `name_loc8` = 'Непрочный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 39942; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux royal', `name_loc3` = 'Königlicher Schattenkristall', `name_loc6` = 'Cristal de Sombras purificado', `name_loc8` = 'Королевский сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 39943; +UPDATE `locales_item` SET `name_loc2` = 'Cristal sombre infusé', `name_loc3` = 'Energieerfüllter Schattenkristall', `name_loc6` = 'Cristal de Sombras destellante', `name_loc8` = 'Заряженный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 39944; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine lumineuse', `name_loc3` = 'Glänzender Riesencitrin', `name_loc6` = 'Citrino enorme temerario', `name_loc8` = 'Светоносный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39946; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine gravée', `name_loc3` = 'Geätzter Riesencitrin', `name_loc6` = 'Cristal de Sombras con grabados', `name_loc8` = 'Гравированный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39948; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine luisante', `name_loc3` = 'Glitzernder Riesencitrin', `name_loc6` = 'Cristal de Sombras destellante', `name_loc8` = 'Блистающий огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39953; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine voilée', `name_loc3` = 'Verschleierter Riesencitrin', `name_loc6` = 'Cristal de Sombras velado', `name_loc8` = 'Сокрытый огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39957; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine durable', `name_loc3` = 'Solider Riesencitrin', `name_loc6` = 'Citrino enorme empecinado', `name_loc8` = 'Надежный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39958; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine pernicieuse', `name_loc3` = 'Tückischer Riesencitrin', `name_loc6` = 'Citrino enorme mortal', `name_loc8` = 'Гибельный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39960; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine en parfait état', `name_loc3` = 'Makelloser Riesencitrin', `name_loc6` = 'Cristal de Sombras destellante', `name_loc8` = 'Нетронутый огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39961; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine investie', `name_loc3` = 'Machterfüllter Riesencitrin', `name_loc6` = 'Citrino enorme luciente', `name_loc8` = 'Наделенный силой огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39962; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine sobre', `name_loc3` = 'Reiner Riesencitrin', `name_loc6` = 'Citrino enorme diestro', `name_loc8` = 'Застывший огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39963; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine rougeoyante', `name_loc3` = 'Gleißender Riesencitrin', `name_loc6` = 'Citrino enorme de adepto', `name_loc8` = 'Мерцающий огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39965; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine de précision', `name_loc3` = 'Akkurater Riesencitrin', `name_loc6` = 'Cristal de Sombras de precisión', `name_loc8` = 'Идеально ограненный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 39966; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre intemporel', `name_loc3` = 'Zeitloser Nephrit', `name_loc6` = 'Cristal de Sombras intemporal', `name_loc8` = 'Вневременной темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39968; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre vif', `name_loc3` = 'Klarer Nephrit', `name_loc6` = 'Jade oscuro liviano', `name_loc8` = 'Насыщенный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39975; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre endurci', `name_loc3` = 'Robuster Nephrit', `name_loc6` = 'Jade oscuro regio', `name_loc8` = 'Отверделый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39976; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre de voyant', `name_loc3` = 'Nephrit des Sehers', `name_loc6` = 'Cristal de Sombras purificado', `name_loc8` = 'Темный нефрит провидца', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39979; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre rayonnant', `name_loc3` = 'Feuriger Nephrit', `name_loc6` = 'Jade oscuro de relámpagos', `name_loc8` = 'Сияющий темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39981; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre complexe', `name_loc3` = 'Aufwendiger Nephrit', `name_loc6` = 'Jade oscuro energizado', `name_loc8` = 'Замысловатый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39983; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre éblouissant', `name_loc3` = 'Schillernder Nephrit', `name_loc6` = 'Cristal de Sombras purificado', `name_loc8` = 'Ослепительный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39984; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre scindé', `name_loc3` = 'Gesplitterter Nephrit', `name_loc6` = 'Jade oscuro brumoso', `name_loc8` = 'Расколотый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39985; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre diapré', `name_loc3` = 'Flackernder Nephrit', `name_loc6` = 'Jade oscuro de relámpagos', `name_loc8` = 'Лучистый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39986; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre opaque', `name_loc3` = 'Opaker Nephrit', `name_loc6` = 'Jade oscuro turbio', `name_loc8` = 'Непрозрачный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39988; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre contracté', `name_loc3` = 'Spröder Nephrit', `name_loc6` = 'Jade oscuro radiante', `name_loc8` = 'Плотный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 39991; +UPDATE `locales_item` SET `name_loc2` = 'Rubis écarlate runique', `name_loc3` = 'Runenbeschriebener Scharlachrubin', `name_loc6` = 'Rubí escarlata luminoso', `name_loc8` = 'Рунический алый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 39998; +UPDATE `locales_item` SET `name_loc2` = 'Rubis écarlate éclatant', `name_loc3` = 'Heller Scharlachrubin', `name_loc6` = 'Rubí escarlata delicado', `name_loc8` = 'Яркий алый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 39999; +UPDATE `locales_item` SET `name_loc2` = 'Rubis écarlate subtil', `name_loc3` = 'Fragiler Scharlachrubin', `name_loc6` = 'Brillo del otoño sutil', `name_loc8` = 'Изящный алый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 40000; +UPDATE `locales_item` SET `name_loc2` = 'Rubis écarlate cassé', `name_loc3` = 'Frakturierter Scharlachrubin', `name_loc6` = 'Brillo del otoño pulido', `name_loc8` = 'Растрескавшийся алый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 40002; +UPDATE `locales_item` SET `name_loc2` = 'Saphir céleste satiné', `name_loc3` = 'Irisierender Himmelssaphir', `name_loc6` = 'Zafiro celestial chispeante', `name_loc8` = 'Блестящий небесный сапфир', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 40010; +UPDATE `locales_item` SET `name_loc2` = 'Halo de l\'automne brillant', `name_loc3` = 'Glänzender Herbstglimmer', `name_loc6` = 'Rubí escarlata luminoso', `name_loc8` = 'Сверкающее сияние осени', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 40012; +UPDATE `locales_item` SET `name_loc2` = 'Halo de l\'automne rigide', `name_loc3` = 'Massiver Herbstglimmer', `name_loc6` = 'Zafiro celestial rígido', `name_loc8` = 'Прочное сияние осени', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 40014; +UPDATE `locales_item` SET `name_loc2` = 'Halo de l\'automne bombé', `name_loc3` = 'Kompakter Herbstglimmer', `name_loc6` = 'Brillo del otoño sutil', `name_loc8` = 'Матовое сияние осени', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 40015; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule changeante', `name_loc3` = 'Unbeständiger Zwielichtopal', `name_loc6` = 'Ópalo crepuscular cambiante', `name_loc8` = 'Изменчивый сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40023; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule ténue', `name_loc3` = 'Zarter Zwielichtopal', `name_loc6` = 'Ópalo crepuscular destellante', `name_loc8` = 'Непрочный сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40024; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule luminescente', `name_loc3` = 'Leuchtender Zwielichtopal', `name_loc6` = 'Ópalo crepuscular intemporal', `name_loc8` = 'Светящийся сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40025; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule royale', `name_loc3` = 'Königlicher Zwielichtopal', `name_loc6` = 'Ópalo crepuscular purificado', `name_loc8` = 'Королевский сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40027; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule équilibrée', `name_loc3` = 'Ausbalancierter Zwielichtopal', `name_loc6` = 'Ópalo crepuscular cambiante', `name_loc8` = 'Сбалансированный сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40029; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule infusée', `name_loc3` = 'Energieerfüllter Zwielichtopal', `name_loc6` = 'Ópalo crepuscular destellante', `name_loc8` = 'Заряженный сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40030; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule régalienne', `name_loc3` = 'Majestätischer Zwielichtopal', `name_loc6` = 'Esmeralda del bosque regia', `name_loc8` = 'Монарший сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40031; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule de défenseur', `name_loc3` = 'Zwielichtopal des Verteidigers', `name_loc6` = 'Ópalo crepuscular de defensor', `name_loc8` = 'Сумеречный опал защитника', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40032; +UPDATE `locales_item` SET `name_loc2` = 'Opale du crépuscule surpuissante', `name_loc3` = 'Imposanter Zwielichtopal', `name_loc6` = 'Esmeralda del bosque dentada', `name_loc8` = 'Всевластный сумеречный опал', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40033; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique gravée', `name_loc3` = 'Geätzter Monarchentopas', `name_loc6` = 'Ópalo crepuscular con grabados', `name_loc8` = 'Гравированный императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40038; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique luisante', `name_loc3` = 'Glitzernder Monarchentopas', `name_loc6` = 'Ópalo crepuscular destellante', `name_loc8` = 'Блистающий императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40044; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique lumineuse', `name_loc3` = 'Glänzender Monarchentopas', `name_loc6` = 'Topacio monarca temerario', `name_loc8` = 'Светоносный императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40047; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique voilée', `name_loc3` = 'Verschleierter Monarchentopas', `name_loc6` = 'Ópalo crepuscular velado', `name_loc8` = 'Сокрытый императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40049; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique durable', `name_loc3` = 'Solider Monarchentopas', `name_loc6` = 'Topacio monarca empecinado', `name_loc8` = 'Надежный императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40050; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique pernicieuse', `name_loc3` = 'Tückischer Monarchentopas', `name_loc6` = 'Topacio monarca mortal', `name_loc8` = 'Гибельный императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40052; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique en parfait état', `name_loc3` = 'Makelloser Monarchentopas', `name_loc6` = 'Ópalo crepuscular destellante', `name_loc8` = 'Нетронутый императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40053; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique investie', `name_loc3` = 'Machterfüllter Monarchentopas', `name_loc6` = 'Topacio monarca luciente', `name_loc8` = 'Наделенный силой императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40054; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique sobre', `name_loc3` = 'Reiner Monarchentopas', `name_loc6` = 'Topacio monarca diestro', `name_loc8` = 'Застывший императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40055; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique rougeoyante', `name_loc3` = 'Gleißender Monarchentopas', `name_loc6` = 'Topacio monarca de adepto', `name_loc8` = 'Мерцающий императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40057; +UPDATE `locales_item` SET `name_loc2` = 'Topaze monarchique de précision', `name_loc3` = 'Akkurater Monarchentopas', `name_loc6` = 'Ópalo crepuscular de precisión', `name_loc8` = 'Идеально ограненный императорский топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40058; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière intemporelle', `name_loc3` = 'Zeitloser Waldsmaragd', `name_loc6` = 'Ópalo crepuscular intemporal', `name_loc8` = 'Вневременной лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40085; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière vive', `name_loc3` = 'Klarer Waldsmaragd', `name_loc6` = 'Esmeralda del bosque liviana', `name_loc8` = 'Насыщенный лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40088; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière durcie', `name_loc3` = 'Robuster Waldsmaragd', `name_loc6` = 'Esmeralda del bosque regia', `name_loc8` = 'Отверделый лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40089; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière de voyant', `name_loc3` = 'Waldsmaragd des Sehers', `name_loc6` = 'Ópalo crepuscular purificado', `name_loc8` = 'Лесной изумруд провидца', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40092; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière éblouissante', `name_loc3` = 'Schillernder Waldsmaragd', `name_loc6` = 'Ópalo crepuscular purificado', `name_loc8` = 'Ослепительный лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40094; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière scindée', `name_loc3` = 'Gesplitterter Waldsmaragd', `name_loc6` = 'Esmeralda del bosque brumosa', `name_loc8` = 'Расколотый лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40096; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière rayonnante', `name_loc3` = 'Feuriger Waldsmaragd', `name_loc6` = 'Esmeralda del bosque de relámpagos', `name_loc8` = 'Сияющий лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40099; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière diaprée', `name_loc3` = 'Flackernder Waldsmaragd', `name_loc6` = 'Esmeralda del bosque de relámpagos', `name_loc8` = 'Лучистый лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40100; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière contractée', `name_loc3` = 'Spröder Waldsmaragd', `name_loc6` = 'Esmeralda del bosque radiante', `name_loc8` = 'Плотный лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40101; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière opaque', `name_loc3` = 'Opaker Waldsmaragd', `name_loc6` = 'Esmeralda del bosque turbia', `name_loc8` = 'Непрозрачный лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40103; +UPDATE `locales_item` SET `name_loc2` = 'Emeraude forestière complexe', `name_loc3` = 'Aufwendiger Waldsmaragd', `name_loc6` = 'Esmeralda del bosque energizada', `name_loc8` = 'Замысловатый лесной изумруд', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40104; +UPDATE `locales_item` SET `name_loc2` = 'Rubis cardinal runique', `name_loc3` = 'Runenbeschriebener Kardinalsrubin', `name_loc6` = 'Rubí cárdeno luminoso', `name_loc8` = 'Рунический багровый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 40113; +UPDATE `locales_item` SET `name_loc2` = 'Rubis cardinal éclatant', `name_loc3` = 'Heller Kardinalsrubin', `name_loc6` = 'Rubí cárdeno delicado', `name_loc8` = 'Яркий багровый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 40114; +UPDATE `locales_item` SET `name_loc2` = 'Rubis cardinal subtil', `name_loc3` = 'Fragiler Kardinalsrubin', `name_loc6` = 'Ámbar del rey sutil', `name_loc8` = 'Изящный багровый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 40115; +UPDATE `locales_item` SET `name_loc2` = 'Rubis cardinal fracturé', `name_loc3` = 'Frakturierter Kardinalsrubin', `name_loc6` = 'Ámbar del rey liso', `name_loc8` = 'Растрескавшийся багровый рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 40117; +UPDATE `locales_item` SET `name_loc2` = 'Zircon majestueux satiné', `name_loc3` = 'Irisierender Fürstenzirkon', `name_loc6` = 'Circón majestuoso chispeante', `name_loc8` = 'Блестящий величественный циркон', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 40121; +UPDATE `locales_item` SET `name_loc2` = 'Ambre du roi brillant', `name_loc3` = 'Glänzender Königsbernstein', `name_loc6` = 'Rubí cárdeno luminoso', `name_loc8` = 'Сверкающий царский янтарь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 40123; +UPDATE `locales_item` SET `name_loc2` = 'Ambre du roi rigide', `name_loc3` = 'Massiver Königsbernstein', `name_loc6` = 'Circón majestuoso rígido', `name_loc8` = 'Прочный царский янтарь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 40125; +UPDATE `locales_item` SET `name_loc2` = 'Ambre du roi bombé', `name_loc3` = 'Kompakter Königsbernstein', `name_loc6` = 'Ámbar del rey sutil', `name_loc8` = 'Матовый царский янтарь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 40126; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'effroi ténue', `name_loc3` = 'Zarter Schreckensstein', `name_loc6` = 'Piedra de terror destellante', `name_loc8` = 'Непрочный страхолит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40131; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'effroi luminescente', `name_loc3` = 'Leuchtender Schreckensstein', `name_loc6` = 'Piedra de terror intemporal', `name_loc8` = 'Светящийся страхолит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40132; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'effroi royale', `name_loc3` = 'Königlicher Schreckensstein', `name_loc6` = 'Piedra de terror purificada', `name_loc8` = 'Королевский страхолит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40134; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'effroi équilibrée', `name_loc3` = 'Ausbalancierter Schreckensstein', `name_loc6` = 'Piedra de terror cambiante', `name_loc8` = 'Сбалансированный страхолит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40136; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'effroi infusée', `name_loc3` = 'Energieerfüllter Schreckensstein', `name_loc6` = 'Piedra de terror destellante', `name_loc8` = 'Заряженный страхолит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40137; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'effroi régalienne', `name_loc3` = 'Majestätischer Schreckensstein', `name_loc6` = 'Ojo de Zul regio', `name_loc8` = 'Монарший страхолит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40138; +UPDATE `locales_item` SET `name_loc2` = 'Pierre d\'effroi surpuissante', `name_loc3` = 'Imposanter Schreckensstein', `name_loc6` = 'Ojo de Zul dentado', `name_loc8` = 'Всевластный страхолит', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 40140; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine gravée', `name_loc3` = 'Geätzter Ametrin', `name_loc6` = 'Piedra de terror con grabados', `name_loc8` = 'Гравированный аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40143; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine luisante', `name_loc3` = 'Glitzernder Ametrin', `name_loc6` = 'Piedra de terror destellante', `name_loc8` = 'Блистающий аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40148; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine lumineuse', `name_loc3` = 'Glänzender Ametrin', `name_loc6` = 'Piedra de terror purificada', `name_loc8` = 'Светоносный аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40151; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine voilée', `name_loc3` = 'Verschleierter Ametrin', `name_loc6` = 'Piedra de terror velada', `name_loc8` = 'Сокрытый аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40153; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine durable', `name_loc3` = 'Solider Ametrin', `name_loc6` = 'Ametrino empecinado', `name_loc8` = 'Надежный аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40154; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine pernicieuse', `name_loc3` = 'Tückischer Ametrin', `name_loc6` = 'Ametrino mortal', `name_loc8` = 'Гибельный аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40156; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine en parfait état', `name_loc3` = 'Makelloser Ametrin', `name_loc6` = 'Piedra de terror destellante', `name_loc8` = 'Нетронутый аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40157; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine investie', `name_loc3` = 'Machterfüllter Ametrin', `name_loc6` = 'Ametrino luciente', `name_loc8` = 'Наделенный силой аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40158; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine sobre', `name_loc3` = 'Reiner Ametrin', `name_loc6` = 'Ametrino diestro', `name_loc8` = 'Застывший аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40159; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine rougeoyante', `name_loc3` = 'Gleißender Ametrin', `name_loc6` = 'Ametrino de adepto', `name_loc8` = 'Мерцающий аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40161; +UPDATE `locales_item` SET `name_loc2` = 'Amétrine de précision', `name_loc3` = 'Akkurater Ametrin', `name_loc6` = 'Piedra de terror de precisión', `name_loc8` = 'Идеально ограненный аметрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 40162; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul intemporel', `name_loc3` = 'Zeitloses Auge von Zul', `name_loc6` = 'Piedra de terror intemporal', `name_loc8` = 'Вневременное Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40164; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul vif', `name_loc3` = 'Klares Auge von Zul', `name_loc6` = 'Ojo de Zul liviano', `name_loc8` = 'Насыщенное Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40166; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul durci', `name_loc3` = 'Robustes Auge von Zul', `name_loc6` = 'Ojo de Zul regio', `name_loc8` = 'Отверделое Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40167; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul de voyant', `name_loc3` = 'Seherauge von Zul', `name_loc6` = 'Piedra de terror purificada', `name_loc8` = 'Око Зула провидца', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40170; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul rayonnant', `name_loc3` = 'Feuriges Auge von Zul', `name_loc6` = 'Ojo de Zul de relámpagos', `name_loc8` = 'Сияющее Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40172; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul complexe', `name_loc3` = 'Aufwendiges Auge von Zul', `name_loc6` = 'Ojo de Zul energizado', `name_loc8` = 'Замысловатое Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40174; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul éblouissant', `name_loc3` = 'Schillerndes Auge von Zul', `name_loc6` = 'Piedra de terror purificada', `name_loc8` = 'Ослепительное Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40175; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul scindé', `name_loc3` = 'Gesplittertes Auge von Zul', `name_loc6` = 'Ojo de Zul brumoso', `name_loc8` = 'Расколотое Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40176; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul diapré', `name_loc3` = 'Flackerndes Auge von Zul', `name_loc6` = 'Ojo de Zul de relámpagos', `name_loc8` = 'Лучистое Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40177; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul opaque', `name_loc3` = 'Opakes Auge von Zul', `name_loc6` = 'Ojo de Zul turbio', `name_loc8` = 'Непрозрачное Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40178; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de Zul contracté', `name_loc3` = 'Sprödes Auge von Zul', `name_loc6` = 'Ojo de Zul radiante', `name_loc8` = 'Плотное Око Зула', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 40181; +UPDATE `locales_item` SET `name_loc2` = 'Diamant flambeciel nitescent', `name_loc3` = 'Glühender Polarlichtdiamant', `name_loc6` = 'Diamante de llama celeste protegido', `name_loc8` = 'Лучезарный алмаз небесного сияния', `description_loc2` = 'Ne peut être serti que dans une châsse de méta-gemme.', `description_loc3` = 'Passt nur in einen Sockel der Kategorie Meta.', `description_loc6` = 'Solo encaja en una ranura de gema meta.', `description_loc8` = 'Подходит только в гнездо для особого самоцвета.' WHERE `entry` = 41377; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine pernicieuse parfaite', `name_loc3` = 'Perfekter tückischer Riesencitrin', `name_loc6` = 'Citrino enorme mortal perfecto', `name_loc8` = 'Совершенный гибельный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41429; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang éclatante parfaite', `name_loc3` = 'Perfekter heller Blutstein', `name_loc6` = 'Sangrita delicada perfecta', `name_loc8` = 'Совершенный яркий кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 41433; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang cassée parfaite', `name_loc3` = 'Perfekter frakturierter Blutstein', `name_loc6` = 'Cristal de sol liso perfecto', `name_loc8` = 'Совершенный растрескавшийся кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 41436; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang runique parfaite', `name_loc3` = 'Perfekter runenbeschriebener Blutstein', `name_loc6` = 'Sangrita luminosa perfecta', `name_loc8` = 'Совершенный рунический кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 41438; +UPDATE `locales_item` SET `name_loc2` = 'Pierre de sang subtile parfaite', `name_loc3` = 'Perfekter fragiler Blutstein', `name_loc6` = 'Cristal de sol sutil perfecto', `name_loc8` = 'Совершенный изящный кровавый камень', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 41439; +UPDATE `locales_item` SET `name_loc2` = 'Calcédoine satinée parfaite', `name_loc3` = 'Perfekter irisierender Chalzedon', `name_loc6` = 'Calcedonia chispeante perfecta', `name_loc8` = 'Совершенный блестящий кальцедоний', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 41440; +UPDATE `locales_item` SET `name_loc2` = 'Cristal soleil brillant parfait', `name_loc3` = 'Perfekter glänzender Sonnenkristall', `name_loc6` = 'Sangrita luminosa perfecta', `name_loc8` = 'Совершенный сверкающий солнечный хрусталь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 41444; +UPDATE `locales_item` SET `name_loc2` = 'Cristal soleil rigide parfait', `name_loc3` = 'Perfekter massiver Sonnenkristall', `name_loc6` = 'Calcedonia rígida perfecta', `name_loc8` = 'Совершенный прочный солнечный хрусталь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 41447; +UPDATE `locales_item` SET `name_loc2` = 'Cristal soleil bombé parfait', `name_loc3` = 'Perfekter kompakter Sonnenkristall', `name_loc6` = 'Cristal de sol sutil perfecto', `name_loc8` = 'Совершенный матовый солнечный хрусталь', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 41449; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux équilibré parfait', `name_loc3` = 'Perfekter ausbalancierter Schattenkristall', `name_loc6` = 'Cristal de Sombras cambiante perfecto', `name_loc8` = 'Совершенный сбалансированный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 41450; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux luminescent parfait', `name_loc3` = 'Perfekter leuchtender Schattenkristall', `name_loc6` = 'Cristal de Sombras intemporal perfecto', `name_loc8` = 'Совершенный светящийся сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 41452; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux infusé parfait', `name_loc3` = 'Perfekter energieerfüllter Schattenkristall', `name_loc6` = 'Cristal de Sombras destellante perfecto', `name_loc8` = 'Совершенный заряженный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 41454; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux surpuissant parfait', `name_loc3` = 'Perfekter imposanter Schattenkristall', `name_loc6` = 'Jade oscuro dentado perfecto', `name_loc8` = 'Совершенный всевластный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 41456; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux régalien parfait', `name_loc3` = 'Perfekter majestätischer Schattenkristall', `name_loc6` = 'Jade oscuro regio perfecto', `name_loc8` = 'Совершенный монарший сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 41458; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux royal parfait', `name_loc3` = 'Perfekter königlicher Schattenkristall', `name_loc6` = 'Cristal de Sombras purificado perfecto', `name_loc8` = 'Совершенный королевский сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 41459; +UPDATE `locales_item` SET `name_loc2` = 'Cristal ombreux ténu parfait', `name_loc3` = 'Perfekter zarter Schattenkristall', `name_loc6` = 'Cristal de Sombras destellante perfecto', `name_loc8` = 'Совершенный непрочный сумрачный кристалл', `description_loc2` = 'Correspond à une châsse rouge ou bleue.', `description_loc3` = 'Am besten für einen roten oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o azul.', `description_loc8` = 'Для красного или синего гнезда.' WHERE `entry` = 41462; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre éblouissant parfait', `name_loc3` = 'Perfekter schillernder Nephrit', `name_loc6` = 'Cristal de Sombras purificado perfecto', `name_loc8` = 'Совершенный ослепительный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41463; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre endurci parfait', `name_loc3` = 'Perfekter robuster Nephrit', `name_loc6` = 'Jade oscuro regio perfecto', `name_loc8` = 'Совершенный отверделый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41464; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre complexe parfait', `name_loc3` = 'Perfekter aufwendiger Nephrit', `name_loc6` = 'Jade oscuro energizado perfecto', `name_loc8` = 'Совершенный замысловатый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41467; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre diapré parfait', `name_loc3` = 'Perfekter flackernder Nephrit', `name_loc6` = 'Jade oscuro de relámpagos perfecto', `name_loc8` = 'Совершенный лучистый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41469; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre opaque parfait', `name_loc3` = 'Perfekter opaker Nephrit', `name_loc6` = 'Jade oscuro turbio perfecto', `name_loc8` = 'Совершенный непрозрачный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41471; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre de voyant parfait', `name_loc3` = 'Perfekter Nephrit des Sehers', `name_loc6` = 'Cristal de Sombras purificado perfecto', `name_loc8` = 'Совершенный темный нефрит провидца', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41473; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre rayonnant parfait', `name_loc3` = 'Perfekter feuriger Nephrit', `name_loc6` = 'Jade oscuro de relámpagos perfecto', `name_loc8` = 'Совершенный сияющий темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41475; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre scindé parfait', `name_loc3` = 'Perfekter gesplitterter Nephrit', `name_loc6` = 'Jade oscuro brumoso perfecto', `name_loc8` = 'Совершенный расколотый темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41477; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre contracté parfait', `name_loc3` = 'Perfekter spröder Nephrit', `name_loc6` = 'Jade oscuro radiante perfecto', `name_loc8` = 'Совершенный плотный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41478; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre intemporel parfait', `name_loc3` = 'Perfekter zeitloser Nephrit', `name_loc6` = 'Cristal de Sombras intemporal perfecto', `name_loc8` = 'Совершенный вневременной темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41479; +UPDATE `locales_item` SET `name_loc2` = 'Jade sombre vif parfait', `name_loc3` = 'Perfekter klarer Nephrit', `name_loc6` = 'Jade oscuro liviano perfecto', `name_loc8` = 'Безупречный насыщенный темный нефрит', `description_loc2` = 'Correspond à une châsse jaune ou bleue.', `description_loc3` = 'Am besten für einen gelben oder blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo o azul.', `description_loc8` = 'Для желтого или синего гнезда.' WHERE `entry` = 41481; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine de précision parfaite', `name_loc3` = 'Perfekter akkurater Riesencitrin', `name_loc6` = 'Cristal de Sombras de precisión perfecto', `name_loc8` = 'Совершенный идеально ограненный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41482; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine durable parfaite', `name_loc3` = 'Perfekter solider Riesencitrin', `name_loc6` = 'Citrino enorme empecinado perfecto', `name_loc8` = 'Совершенный надежный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41486; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine investie parfaite', `name_loc3` = 'Perfekter machterfüllter Riesencitrin', `name_loc6` = 'Citrino enorme luciente perfecto', `name_loc8` = 'Совершенный наделенный силой огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41487; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine gravée parfaite', `name_loc3` = 'Perfekter geätzter Riesencitrin', `name_loc6` = 'Cristal de Sombras con grabados perfecto', `name_loc8` = 'Совершенный гравированный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41488; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine rougeoyante parfaite', `name_loc3` = 'Perfekter gleißender Riesencitrin', `name_loc6` = 'Citrino enorme de adepto perfecto', `name_loc8` = 'Совершенный мерцающий огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41490; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine luisante parfaite', `name_loc3` = 'Perfekter glitzernder Riesencitrin', `name_loc6` = 'Cristal de Sombras destellante perfecto', `name_loc8` = 'Совершенный блистающий огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41491; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine lumineuse parfaite', `name_loc3` = 'Perfekter glänzender Riesencitrin', `name_loc6` = 'Cristal de Sombras purificado perfecto', `name_loc8` = 'Совершенный светоносный огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41494; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine en parfait état parfaite', `name_loc3` = 'Perfekter makelloser Riesencitrin', `name_loc6` = 'Cristal de Sombras destellante perfecto', `name_loc8` = 'Совершенный нетронутый огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41496; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine sobre parfaite', `name_loc3` = 'Perfekter reiner Riesencitrin', `name_loc6` = 'Citrino enorme diestro perfecto', `name_loc8` = 'Совершенный застывший огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41501; +UPDATE `locales_item` SET `name_loc2` = 'Enorme citrine voilée parfaite', `name_loc3` = 'Perfekter verschleierter Riesencitrin', `name_loc6` = 'Cristal de Sombras velado perfecto', `name_loc8` = 'Совершенный сокрытый огромный цитрин', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 41502; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de dragon runique', `name_loc3` = 'Runenbeschriebenes Drachenauge', `name_loc6` = 'Ojo de dragón luminoso', `name_loc8` = 'Руническое Око дракона', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 42144; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de dragon satiné', `name_loc3` = 'Irisierendes Drachenauge', `name_loc6` = 'Ojo de dragón chispeante', `name_loc8` = 'Блестящее Око дракона', `description_loc2` = 'Correspond à une châsse bleue.', `description_loc3` = 'Am besten für einen blauen Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color azul.', `description_loc8` = 'Для синего гнезда.' WHERE `entry` = 42146; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de dragon cassé', `name_loc3` = 'Frakturiertes Drachenauge', `name_loc6` = 'Ojo de dragón liso', `name_loc8` = 'Растрескавшееся Око дракона', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 42153; +UPDATE `locales_item` SET `name_loc2` = 'Oeil de dragon bombé', `name_loc3` = 'Kompaktes Drachenauge', `name_loc6` = 'Ojo de dragón sutil', `name_loc8` = 'Матовое Око дракона', `description_loc2` = 'Correspond à une châsse jaune.', `description_loc3` = 'Am besten für einen gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color amarillo.', `description_loc8` = 'Для желтого гнезда.' WHERE `entry` = 42157; +UPDATE `locales_item` SET `name_loc2` = 'Joyau-tempête runique', `name_loc3` = 'Runenverziertes Sturmjuwel', `name_loc6` = 'Joya de tormenta luminosa', `name_loc8` = 'Рунический самоцвет бури', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 45883; + +-- class:7 (trade goods) +UPDATE `locales_item` SET `name_loc2` = 'Fiole vide', `name_loc3` = 'Leere Phiole', `name_loc6` = 'Vial de cristal', `name_loc8` = 'Пустая колба' WHERE `entry` = 3371; +UPDATE `locales_item` SET `name_loc2` = 'Fiole plombée', `name_loc3` = 'Verbleite Phiole', `name_loc6` = 'Vial rajado', `name_loc8` = 'Освинцованная колба' WHERE `entry` = 3372; +UPDATE `locales_item` SET `name_loc2` = 'Hivernale', `name_loc3` = 'Winterbiss', `name_loc6` = 'Dientes de dragón', `name_loc8` = 'Морозник' WHERE `entry` = 3819; +UPDATE `locales_item` SET `name_loc2` = 'Tube en cuivre', `name_loc3` = 'Kupferrohr', `name_loc6` = 'Tubo de cobre', `name_loc8` = 'Медная труба' WHERE `entry` = 4361; +UPDATE `locales_item` SET `name_loc2` = 'Modulateur en cuivre', `name_loc3` = 'Kupfermodulator', `name_loc6` = 'Modulador de cobre', `name_loc8` = 'Медный регулятор' WHERE `entry` = 4363; +UPDATE `locales_item` SET `name_loc2` = 'Fiole de cristal', `name_loc3` = 'Kristallphiole', `name_loc6` = 'Vial corrupto', `name_loc8` = 'Хрустальная колба' WHERE `entry` = 8925; +UPDATE `locales_item` SET `name_loc2` = 'Fleur de peste', `name_loc3` = 'Pestblüte', `name_loc6` = 'Musgopena', `name_loc8` = 'Чумоцвет' WHERE `entry` = 13466; +UPDATE `locales_item` SET `name_loc2` = 'Barre d\'élémentium', `name_loc3` = 'Elementiumbarren', `name_loc6` = 'Barra de elementium encantado', `name_loc8` = 'Элементиевый слиток' WHERE `entry` = 17771; +UPDATE `locales_item` SET `name_loc2` = 'Fiole imprégnée', `name_loc3` = 'Magieerfüllte Phiole', `name_loc6` = 'Vial derretido', `name_loc8` = 'Укрепленная колба' WHERE `entry` = 18256; +UPDATE `locales_item` SET `name_loc2` = 'Minerai d\'élémentium', `name_loc3` = 'Elementiumerz', `name_loc6` = 'Lingote de elementium', `name_loc8` = 'Элементиевая руда' WHERE `entry` = 18562; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin puissant', `name_loc3` = 'Mächtiger Blutgranat', `name_loc6` = 'Granate de sangre poderoso', `name_loc8` = 'СТАРЫЙ Могущественный кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 27774; +UPDATE `locales_item` SET `name_loc2` = 'Grenat sanguin puissant', `name_loc3` = 'Mächtiger Blutgranat', `name_loc6` = 'Granate de sangre poderoso', `name_loc8` = 'СТАРЫЙ Могущественный кровавый гранат', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 27811; +UPDATE `locales_item` SET `name_loc2` = 'Rubis orné soutenu', `name_loc3` = 'Klobiger Schmuckrubin', `name_loc6` = 'Rubí ornamentado llamativo', `name_loc8` = 'СТАРЫЙ Рельефный изысканный рубин', `description_loc2` = 'Correspond à une châsse rouge.', `description_loc3` = 'Am besten für einen roten Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo.', `description_loc8` = 'Для красного гнезда.' WHERE `entry` = 28117; +UPDATE `locales_item` SET `name_loc2` = 'Topaze ornée gravée', `name_loc3` = 'Gravierter Schmucktopas', `name_loc6` = 'Topacio Ornamentado Inscrito', `name_loc8` = 'СТАРЫЙ Покрытый письменами изысканный топаз', `description_loc2` = 'Correspond à une châsse rouge ou jaune.', `description_loc3` = 'Am besten für einen roten oder gelben Sockel geeignet.', `description_loc6` = 'Encaja en una ranura de color rojo o amarillo.', `description_loc8` = 'Для красного или желтого гнезда.' WHERE `entry` = 28122; +UPDATE `locales_item` SET `name_loc2` = 'Vélin d\'armure II', `name_loc3` = 'Rüstungspergament II', `name_loc6` = 'Vitela estropeada', `name_loc8` = 'Материал для свитка брони II', `description_loc2` = 'Peut être ciblé par des enchantements d\'armure, pour conserver l\'enchantement pour un usage ultérieur. Ne peut absorber que des enchantements ayant une restriction de niveau de 35 ou moins.', `description_loc3` = 'Kann als Ziel für Rüstungsverzauberungen verwendet werden, um die Verzauberung für den späteren Gebrauch aufzubewahren. Kann nur Verzauberungen mit einer Stufenbeschränkung von 35 oder weniger absorbieren.', `description_loc6` = 'Los encantadores pueden utilizar la vitela en lugar de un arma o una armadura para almacenar un encantamiento y utilizarlo más tarde.', `description_loc8` = 'Служит материалом для создания свитка наложения чар на броню для последующего использования. Подходит только для чар, требующих предмет не ниже 35-го уровня.' WHERE `entry` = 37602; +UPDATE `locales_item` SET `name_loc2` = 'Vélin d\'armure', `name_loc3` = 'Rüstungspergament I', `name_loc6` = 'Vitela de encantamiento', `name_loc8` = 'Материал для свитка брони', `description_loc2` = 'Peut être ciblé par des enchantements d\'armure, pour conserver l\'enchantement pour un usage ultérieur. Ne peut absorber que des enchantements n\'ayant pas de restriction de niveau.', `description_loc3` = 'Kann als Ziel für Rüstungsverzauberungen verwendet werden, um die Verzauberung für den späteren Gebrauch aufzubewahren. Kann nur Verzauberungen ohne Stufenbeschränkung absorbieren.', `description_loc6` = 'Los encantadores pueden utilizar la vitela en lugar de un arma o una armadura para almacenar un encantamiento y utilizarlo más tarde.', `description_loc8` = 'Служит материалом для создания свитка наложения чар на броню для последующего использования. Подходит только для чар, не имеющих ограничения по уровню.' WHERE `entry` = 38682; +UPDATE `locales_item` SET `name_loc2` = 'Vélin d\'arme', `name_loc3` = 'Waffenpergament I', `name_loc6` = 'Vitela estropeada', `name_loc8` = 'Материал для свитка оружия', `description_loc2` = 'Peut être ciblé par des enchantements d\'arme, pour conserver l\'enchantement pour un usage ultérieur. Ne peut absorber que des enchantements n\'ayant pas de restriction de niveau.', `description_loc3` = 'Kann als Ziel für Waffenverzauberungen verwendet werden, um die Verzauberung für den späteren Gebrauch aufzubewahren. Kann nur Verzauberungen ohne Stufenbeschränkung absorbieren.', `description_loc6` = 'Puede ser objetivo de hechizos de armadura para almacenar el encanto para su uso posterior.', `description_loc8` = 'Служит материалом для создания свитка наложения чар на оружие для последующего использования. Подходит только для чар, не имеющих ограничения по уровню.' WHERE `entry` = 39349; +UPDATE `locales_item` SET `name_loc2` = 'Vélin d\'arme II', `name_loc3` = 'Waffenpergament II', `name_loc6` = 'Vitela estropeada', `name_loc8` = 'Материал для свитка оружия II', `description_loc2` = 'Peut être ciblé par des enchantements d\'arme, pour conserver l\'enchantement pour un usage ultérieur. Ne peut absorber que des enchantements ayant une restriction de niveau de 35 ou moins.', `description_loc3` = 'Kann als Ziel für Waffenverzauberungen verwendet werden, um die Verzauberung für den späteren Gebrauch aufzubewahren. Kann nur Verzauberungen mit einer Stufenbeschränkung von 35 oder weniger absorbieren.', `description_loc6` = 'Puede ser objetivo de hechizos de armadura para almacenar el encanto para su uso posterior.', `description_loc8` = 'Служит материалом для создания свитка наложения чар на оружие для последующего использования. Подходит только для чар, требующих предмет не ниже 35-го уровня.' WHERE `entry` = 39350; +UPDATE `locales_item` SET `name_loc2` = 'Fiole enchantée', `name_loc3` = 'Verzauberte Phiole', `name_loc6` = 'Vial destrozado', `name_loc8` = 'Зачарованная колба' WHERE `entry` = 40411; +UPDATE `locales_item` SET `name_loc2` = 'Vélin d\'armure III', `name_loc3` = 'Rüstungspergament III', `name_loc6` = 'Vitela estropeada', `name_loc8` = 'Материал для свитка брони III', `description_loc2` = 'Peut être ciblé par des enchantements d\'armure, pour conserver l\'enchantement pour un usage ultérieur. Ne peut absorber que des enchantements ayant une restriction de niveau de 60 ou moins.', `description_loc3` = 'Kann als Ziel für Rüstungsverzauberungen verwendet werden, um die Verzauberung für den späteren Gebrauch aufzubewahren. Kann nur Verzauberungen mit einer Stufenbeschränkung von 60 oder weniger absorbieren.', `description_loc6` = 'Los encantadores pueden utilizar la vitela en lugar de un arma o una armadura para almacenar un encantamiento y utilizarlo más tarde.', `description_loc8` = 'Служит материалом для создания свитка наложения чар на броню для последующего использования. Подходит только для чар, требующих предмет не ниже 60-го уровня.' WHERE `entry` = 43145; +UPDATE `locales_item` SET `name_loc2` = 'Vélin d\'arme III', `name_loc3` = 'Waffenpergament III', `name_loc6` = 'Vitela estropeada', `name_loc8` = 'Материал для свитка оружия III', `description_loc2` = 'Peut être ciblé par des enchantements d\'arme, pour conserver l\'enchantement pour un usage ultérieur. Ne peut absorber que des enchantements ayant une restriction de niveau de 60 ou moins.', `description_loc3` = 'Kann als Ziel für Waffenverzauberungen verwendet werden, um die Verzauberung für den späteren Gebrauch aufzubewahren. Kann nur Verzauberungen mit einer Stufenbeschränkung von 60 oder weniger absorbieren.', `description_loc6` = 'Restaura una vitela de encantamiento utilizable.', `description_loc8` = 'Служит материалом для создания свитка наложения чар на оружие для последующего использования. Подходит только для чар, требующих предмет не ниже 60-го уровня.' WHERE `entry` = 43146; + +-- class:9 (books) +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de brassards (Déviation inférieure)', `name_loc3` = 'Formel: Armschiene - Geringe Abwehr', `name_loc6` = 'Fórmula: encantar brazales: desvío inferior', `name_loc8` = 'Формула чар для наручей - отражение II', `description_loc2` = 'Vous apprend à enchanter de manière permanente des brassards pour augmenter votre score de défense de 3.', `description_loc3` = 'Lehrt Euch, Armschienen dauerhaft zu verzaubern, sodass sie die Verteidigungswertung um 3 erhöhen.', `description_loc6` = 'Te enseña a encantar de forma permanente unos brazales para aumentar el índice de esquivar 3 p.', `description_loc8` = 'Обучает наложению на наручи чар, повышающих рейтинг защиты на 3.' WHERE `entry` = 11163; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de bouclier (Blocage inférieur)', `name_loc3` = 'Formel: Schild - Geringes Blocken', `name_loc6` = 'Fórmula: encantar escudo: bloqueo inferior', `name_loc8` = 'Формула: зачаровывание щита - блок, I ступень', `description_loc2` = 'Vous apprend à enchanter de manière permanente un bouclier pour augmenter votre score de blocage de 10.', `description_loc3` = 'Lehrt Euch, Schilde dauerhaft zu verzaubern, sodass sie die Blockwertung um 10 erhöhen.', `description_loc6` = 'Te enseña a encantar de forma permanente un escudo para aumentar el índice de parada 10 p.', `description_loc8` = 'Обучение наложению на щит чар, повышающих рейтинг блокирования на 10 ед.' WHERE `entry` = 11168; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de brassards (Déviation)', `name_loc3` = 'Formel: Armschiene - Abwehr', `name_loc6` = 'Fórmula: encantar brazales: desvío', `name_loc8` = 'Формула чар для наручей - отражение III', `description_loc2` = 'Vous apprend à enchanter de manière permanente des brassards pour augmenter votre score de défense de 5.', `description_loc3` = 'Lehrt Euch, Armschienen dauerhaft zu verzaubern, sodass sie die Verteidigungswertung um 5 erhöhen.', `description_loc6` = 'Te enseña a encantar de forma permanente unos brazales para aumentar el índice de esquivar 5 p.', `description_loc8` = 'Обучает наложению на наручи чар, повышающих рейтинг защиты на 5.' WHERE `entry` = 11223; +UPDATE `locales_item` SET `name_loc2` = 'Schéma : Obus en thorium', `name_loc3` = 'Bauplan: Thoriumpatronen', `name_loc6` = 'Esquema estropeado: proyectiles de torio', `name_loc8` = 'Чертеж: ториевые патроны', `description_loc2` = 'Vous apprend à fabriquer des Obus en thorium.', `description_loc3` = 'Lehrt Euch die Herstellung von Thoriumpatronen.', `description_loc6` = 'Te enseña a hacer unos Proyectiles de Torio.', `description_loc8` = 'Обучение изготовлению ториевых патронов.' WHERE `entry` = 16051; +UPDATE `locales_item` SET `name_loc2` = 'Codex : Prière de Robustesse II', `name_loc3` = 'Kodex: Gebet der Seelenstärke II', `name_loc6` = 'Códice: Rezo de Entereza', `name_loc8` = 'Кодекс: Молитва стойкости II', `description_loc2` = 'Vous apprend Prière de robustesse (Rang 2).', `description_loc3` = 'Lehrt \'Gebet der Seelenstärke\' (Rang 2).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Молитва стойкости\" (Уровень 2).' WHERE `entry` = 17414; +UPDATE `locales_item` SET `name_loc2` = 'Livre : Don du fauve II', `name_loc3` = 'Buch: Gabe der Wildnis II', `name_loc6` = 'Libro: Don de lo Salvaje', `name_loc8` = 'Книга: Дар дикой природы II', `description_loc2` = 'Vous apprend Don du fauve (Rang 2).', `description_loc3` = 'Lehrt \'Gabe der Wildnis\' (Rang 2).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Дар дикой природы\" (уровень 2).' WHERE `entry` = 17683; +UPDATE `locales_item` SET `name_loc2` = 'Tome d\'Eclair de givre XI', `name_loc3` = 'Foliant des Frostblitzes XI', `name_loc6` = 'Escrito sobre Descarga de Escarcha', `name_loc8` = 'Фолиант Ледяной стрелы XI', `description_loc2` = 'Vous apprend Eclair de givre (Rang 11).', `description_loc3` = 'Lehrt \'Frostblitz\' (Rang 11).', `description_loc6` = 'Enseña Descarga de Escarcha (Rango 11).', `description_loc8` = 'Обучает заклинанию \"Ледяная стрела\" (уровень 11)' WHERE `entry` = 21214; +UPDATE `locales_item` SET `name_loc2` = 'Tome de Boule de feu XII', `name_loc3` = 'Foliant des Feuerballs XII', `name_loc6` = 'Escrito sobre Bola de Fuego', `name_loc8` = 'Фолиант Огненного шара XII', `description_loc2` = 'Vous apprend Boule de feu (Rang 12).', `description_loc3` = 'Lehrt \'Feuerball\' (Rang 12).', `description_loc6` = 'Enseña Bola de Fuego (Rango 12).', `description_loc8` = 'Обучает заклинанию \"Огненный шар\" (уровень 12).' WHERE `entry` = 21279; +UPDATE `locales_item` SET `name_loc2` = 'Tome de Projectiles des arcanes VIII', `name_loc3` = 'Foliant der arkanen Geschosse VIII', `name_loc6` = 'Escrito sobre Misiles Arcanos', `name_loc8` = 'Фолиант Чародейских стрел VIII', `description_loc2` = 'Vous apprend Projectiles des arcanes (Rang 8).', `description_loc3` = 'Lehrt \'Arkane Geschosse\' (Rang 8).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Чародейские стрелы\" (Уровень 8).' WHERE `entry` = 21280; +UPDATE `locales_item` SET `name_loc2` = 'Grimoire de Trait de l\'ombre X', `name_loc3` = 'Zauberfoliant des Schattenblitzes X', `name_loc6` = 'Grimorio Descarga de las Sombras', `name_loc8` = 'Гримуар стрелы Тьмы', `description_loc2` = 'Vous apprend Trait de l\'ombre (Rang 10).', `description_loc3` = 'Lehrt \'Schattenblitz\' (Rang 10).', `description_loc6` = 'Enseña Descarga de las Sombras (Rango 10).', `description_loc8` = 'Обучает заклинанию \"Стрела Тьмы\" (Уровень 10)' WHERE `entry` = 21281; +UPDATE `locales_item` SET `name_loc2` = 'Grimoire d\'immolation VIII', `name_loc3` = 'Zauberfoliant des Feuerbrandes VIII', `name_loc6` = 'Grimorio Inmolar', `name_loc8` = 'Гримуар жертвенного огня VIII', `description_loc2` = 'Vous apprend Immolation (Rang 8).', `description_loc3` = 'Lehrt \'Feuerbrand\' (Rang 8).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Жертвенного огня\" (Уровень 8).' WHERE `entry` = 21282; +UPDATE `locales_item` SET `name_loc2` = 'Grimoire de Corruption VII', `name_loc3` = 'Zauberfoliant der Verderbnis VII', `name_loc6` = 'Grimorio Corrupción', `name_loc8` = 'Гримуар Скверны VII', `description_loc2` = 'Vous apprend Corruption (Rang 7).', `description_loc3` = 'Lehrt \'Verderbnis\' (Rang 7).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Порча\" (Уровень 7).' WHERE `entry` = 21283; +UPDATE `locales_item` SET `name_loc2` = 'Codex de Soins supérieurs V', `name_loc3` = 'Kodex der großen Heilung V', `name_loc6` = 'Códice de Sanación superior', `name_loc8` = 'Кодекс Большего исцеления V', `description_loc2` = 'Vous apprend Soins supérieurs (Rang 5).', `description_loc3` = 'Lehrt \'Große Heilung\' (Rang 5).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Большее исцеление\" (уровень 5).' WHERE `entry` = 21284; +UPDATE `locales_item` SET `name_loc2` = 'Codex de Rénovation X', `name_loc3` = 'Kodex der Erneuerung X', `name_loc6` = 'Códice de Renovar', `name_loc8` = 'Кодекс Возрождения X', `description_loc2` = 'Vous apprend Rénovation (Rang 10).', `description_loc3` = 'Lehrt \'Erneuerung\' (Rang 10).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Обновление\" (уровень 10).' WHERE `entry` = 21285; +UPDATE `locales_item` SET `name_loc2` = 'Codex de Prière de soins V', `name_loc3` = 'Kodex des Gebets der Heilung V', `name_loc6` = 'Códice de Rezo de sanación', `name_loc8` = 'Кодекс Молитвы исцеления V', `description_loc2` = 'Vous apprend Prière de soins (Rang 5).', `description_loc3` = 'Lehrt \'Gebet der Heilung\' (Rang 5).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Молитва исцеления\" (уровень 5).' WHERE `entry` = 21287; +UPDATE `locales_item` SET `name_loc2` = 'Libram : Bénédiction de sagesse VI', `name_loc3` = 'Buchband: Segen der Weisheit VI', `name_loc6` = 'Tratado: Bendición de sabiduría', `name_loc8` = 'Манускрипт: Благословения мудрости VI', `description_loc2` = 'Vous apprend Bénédiction de sagesse (Rang 6).', `description_loc3` = 'Lehrt \'Segen der Weisheit\' (Rang 6).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Благословение мудрости\" (Уровень 6).' WHERE `entry` = 21288; +UPDATE `locales_item` SET `name_loc2` = 'Libram : Bénédiction de puissance VII', `name_loc3` = 'Buchband: Segen der Macht VII', `name_loc6` = 'Tratado: Bendición de poderío', `name_loc8` = 'Манускрипт: Благословение могущества VI', `description_loc2` = 'Vous apprend Bénédiction de puissance (Rang 7).', `description_loc3` = 'Lehrt \'Segen der Macht\' (Rang 7).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Благословение могущества\" (Уровень 7).' WHERE `entry` = 21289; +UPDATE `locales_item` SET `name_loc2` = 'Libram : Lumière sacrée IX', `name_loc3` = 'Buchband: Heiliges Licht IX', `name_loc6` = 'Tratado: Luz Sagrada', `name_loc8` = 'Манускрипт: Свет Небес IX', `description_loc2` = 'Vous apprend Lumière sacrée (Rang 9).', `description_loc3` = 'Lehrt \'Heiliges Licht\' (Rang 9).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Свет небес\" (уровень 9).' WHERE `entry` = 21290; +UPDATE `locales_item` SET `name_loc2` = 'Tablette de Vague de soins X', `name_loc3` = 'Schrifttafel der Welle der Heilung X', `name_loc6` = 'Tablilla de Ola de sanación', `name_loc8` = 'Табличка Волны исцеления X', `description_loc2` = 'Vous apprend Vague de soins (Rang 10).', `description_loc3` = 'Lehrt \'Welle der Heilung\' (Rang 10).', `description_loc6` = 'Enseña Ola de Sanación (Rango 10).', `description_loc8` = 'Обучает заклинанию \"Волна исцеления\" (уровень 10).' WHERE `entry` = 21291; +UPDATE `locales_item` SET `name_loc2` = 'Tablette de Totem de force de la terre V', `name_loc3` = 'Schrifttafel des Totems der Erdstärke V', `name_loc6` = 'Tablilla de Tótem Fuerza de la tierra', `name_loc8` = 'Табличка Тотема силы земли V', `description_loc2` = 'Vous apprend Totem de Force de la Terre (Rang 5).', `description_loc3` = 'Lehrt \'Totem der Erdstärke\' (Rang 5).', `description_loc6` = 'Enseña Tótem fuerza de la tierra (Rango 5).', `description_loc8` = 'Обучает созданию \"Тотема силы земли\" (уровень 5).' WHERE `entry` = 21292; +UPDATE `locales_item` SET `name_loc2` = 'Livre de Toucher guérisseur XI', `name_loc3` = 'Buch der heilenden Berührung XI', `name_loc6` = 'Libro sobre Toque de sanación', `name_loc8` = 'Книга Целительного Прикосновения XI', `description_loc2` = 'Vous apprend Toucher guérisseur (Rang 11).', `description_loc3` = 'Lehrt \'Heilende Berührung\' (Rang 11).', `description_loc6` = 'Enseña Toque de sanación (Rango 11).', `description_loc8` = 'Обучает заклинанию \"Целительное прикосновение\" (уровень 11)' WHERE `entry` = 21294; +UPDATE `locales_item` SET `name_loc2` = 'Livre de Feu stellaire VII', `name_loc3` = 'Buch des Sternenfeuers VII', `name_loc6` = 'Libro sobre Fuego estelar', `name_loc8` = 'Книга Звездного огня VII', `description_loc2` = 'Vous apprend Feu stellaire (Rang 7).', `description_loc3` = 'Lehrt \'Sternenfeuer\' (Rang 7).', `description_loc6` = 'Enseña Fuego Estelar (Rango 7).', `description_loc8` = 'Обучает заклинанию \"Звездный огонь\" (Уровень 7).' WHERE `entry` = 21295; +UPDATE `locales_item` SET `name_loc2` = 'Livre de Récupération XI', `name_loc3` = 'Buch der Verjüngung XI', `name_loc6` = 'Libro sobre Rejuvenecimiento', `name_loc8` = 'Книга Омоложения XI', `description_loc2` = 'Vous apprend Récupération (Rang 11).', `description_loc3` = 'Lehrt \'Verjüngung\' (Rang 11).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Омоложение\" (Уровень 11).' WHERE `entry` = 21296; +UPDATE `locales_item` SET `name_loc2` = 'Manuel de Frappe héroïque IX', `name_loc3` = 'Handbuch des heldenhaften Stoßes IX', `name_loc6` = 'Manual de Golpe Heroico', `name_loc8` = 'Учебник героя IX', `description_loc2` = 'Vous apprend Frappe héroïque (Rang 9).', `description_loc3` = 'Lehrt \'Heldenhafter Stoß\' (Rang 9).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Удар героя\" (Уровень 9).' WHERE `entry` = 21297; +UPDATE `locales_item` SET `name_loc2` = 'Manuel de Cri de guerre VII', `name_loc3` = 'Handbuch des Schlachtrufs VII', `name_loc6` = 'Manual de Grito de batalla', `name_loc8` = 'Учебник Боевого крика VII', `description_loc2` = 'Vous apprend Cri de guerre (Rang 7).', `description_loc3` = 'Lehrt \'Schlachtruf\' (Rang 7).', `description_loc6` = 'Enseña Grito de Batalla (Rango 7).', `description_loc8` = 'Обучает заклинанию \"Боевой крик\" (Уровень 7).' WHERE `entry` = 21298; +UPDATE `locales_item` SET `name_loc2` = 'Manuel de Vengeance VI', `name_loc3` = 'Handbuch der Rache VI', `name_loc6` = 'Manual de Revancha', `name_loc8` = 'Учебник Мести VI', `description_loc2` = 'Vous apprend Vengeance (Rang 6).', `description_loc3` = 'Lehrt \'Rache\' (Rang 6).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = '\"Обучает заклинанию \"Месть\" (Уровень 6)' WHERE `entry` = 21299; +UPDATE `locales_item` SET `name_loc2` = 'Recueil : Attaque sournoise IX', `name_loc3` = 'Leitfaden des Meuchelns IX', `name_loc6` = 'Vademécum de Puñalada', `name_loc8` = 'Книга Удара в спину IX', `description_loc2` = 'Vous apprend Attaque sournoise (Rang 9).', `description_loc3` = 'Lehrt \'Meucheln\' (Rang 9).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Удар в спину\" (Уровень 9).' WHERE `entry` = 21300; +UPDATE `locales_item` SET `name_loc2` = 'Recueil : Feinte V', `name_loc3` = 'Leitfaden der Finte V', `name_loc6` = 'Vademécum de Amago', `name_loc8` = 'Книга Ложного выпада V', `description_loc2` = 'Vous apprend Feinte (Rang 5).', `description_loc3` = 'Lehrt \'Finte\' (Rang 5).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Ложный выпад\" (уровень 5).' WHERE `entry` = 21303; +UPDATE `locales_item` SET `name_loc2` = 'Guide : Flèches multiples V', `name_loc3` = 'Lehrbuch: Mehrfachschuss V', `name_loc6` = 'Guía: Multidisparo', `name_loc8` = 'Руководство: Залп V', `description_loc2` = 'Vous apprend Flèches multiples (Rang 5).', `description_loc3` = 'Lehrt \'Mehrfachschuss\' (Rang 5).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает способности \"Залп\" (Уровень 5).' WHERE `entry` = 21304; +UPDATE `locales_item` SET `name_loc2` = 'Guide : Morsure de serpent IX', `name_loc3` = 'Lehrbuch: Schlangenbiss IX', `name_loc6` = 'Guía: Picadura de serpiente', `name_loc8` = 'Руководство: змеиный укус IX', `description_loc2` = 'Vous apprend Morsure de serpent (Rang 9).', `description_loc3` = 'Lehrt \'Schlangenbiss\' (Rang 9).', `description_loc6` = 'Enseña Picadura de Serpiente (Rango 9).', `description_loc8` = 'Обучает заклинанию \"Жало змеи\" (Уровень 9).' WHERE `entry` = 21306; +UPDATE `locales_item` SET `name_loc2` = 'Guide : Aspect du faucon VII', `name_loc3` = 'Lehrbuch: Aspekt des Falken VII', `name_loc6` = 'Guía: Aspecto del halcón', `name_loc8` = 'Руководство: дух ястреба VII', `description_loc2` = 'Vous apprend Aspect du faucon (Rang 7).', `description_loc3` = 'Lehrt Aspekt des Falken (Rang 7).', `description_loc6` = 'Enseña Aspecto del Halcón (Rango 7).', `description_loc8` = 'Обучает способности \"Дух ястреба\" (уровень 7).' WHERE `entry` = 21307; +UPDATE `locales_item` SET `name_loc2` = 'Livre : Don du fauve III', `name_loc3` = 'Buch: Gabe der Wildnis III', `name_loc6` = 'Libro: Don de lo Salvaje', `name_loc8` = 'Книга: Дар дикой природы III', `description_loc2` = 'Vous apprend Don du fauve (Rang 3).', `description_loc3` = 'Lehrt \'Gabe der Wildnis\' (Rang 3).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Дар дикой природы\" (уровень 3).' WHERE `entry` = 22146; +UPDATE `locales_item` SET `name_loc2` = 'Tome d\'Illumination des arcanes 2', `name_loc3` = 'Foliant der arkanen Brillanz 2', `name_loc6` = 'Escrito sobre Luminosidad Arcana', `name_loc8` = 'Фолиант чародейской гениальности II', `description_loc2` = 'Vous apprend Illumination des arcanes (Rang 2).', `description_loc3` = 'Lehrt Arkane Brillanz (Rang 2).', `description_loc6` = 'Enseña Luminosidad Arcana (Rango 2).', `description_loc8` = 'Обучает заклинанию \"Чародейская гениальность\" (Уровень 2).' WHERE `entry` = 22153; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de brassards (Défense majeure)', `name_loc3` = 'Formel: Armschiene - Erhebliche Verteidigung', `name_loc6` = 'Fórmula: encantar brazales: defensa sublime', `name_loc8` = 'Формула: зачаровывание браслетов - защита, IV ступень', `description_loc2` = 'Vous apprend à enchanter de manière permanente des brassards pour augmenter votre score de défense de 12. Nécessite un objet de niveau 35 ou supérieur.', `description_loc3` = 'Lehrt Euch, Armschienen dauerhaft zu verzaubern, sodass sie die Verteidigungswertung um 12 erhöhen. Erfordert einen Gegenstand der Stufe 35 oder höher.', `description_loc6` = 'Te enseña a encantar de forma permanente unos brazales para aumentar el índice de esquivar 12 p. Requiere un objeto de nivel 35 o superior.', `description_loc8` = 'Обучение наложению на браслеты чар, повышающих рейтинг защиты на 12 ед.' WHERE `entry` = 22530; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de bouclier (Maîtrise du blocage)', `name_loc3` = 'Formel: Schild - Schildblock', `name_loc6` = 'Fórmula: encantar escudo: bloquear con escudo', `name_loc8` = 'Формула чар для щита - блок II', `description_loc2` = 'Vous apprend à enchanter de manière permanente un bouclier pour augmenter votre score de blocage de 15. Nécessite un objet de niveau 35 ou supérieur.', `description_loc3` = 'Lehrt Euch, Schilde dauerhaft zu verzaubern, sodass sie die Blockwertung um 15 erhöhen. Erfordert einen Gegenstand der Stufe 35 oder höher.', `description_loc6` = 'Te enseña a encantar de forma permanente un escudo para aumentar el índice de parada 15 p. Requiere un objeto de nivel 35 o superior.', `description_loc8` = 'Обучает наложению на щит чар, повышающих рейтинг блокирования на 15. Требуется предмет для персонажей не ниже 35-го уровня.' WHERE `entry` = 22540; +UPDATE `locales_item` SET `name_loc2` = 'Tome de Gardien de givre V', `name_loc3` = 'Foliant des Frostzauberschutzes V', `name_loc6` = 'Escrito sobre Resguardo contra la Escarcha', `name_loc8` = 'Фолиант Защиты от магии льда V', `description_loc2` = 'Vous apprend Gardien de givre (Rang 5).', `description_loc3` = 'Lehrt \'Frostzauberschutz\' (Rang 5).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Защита от магии льда\" (уровень 5).' WHERE `entry` = 22890; +UPDATE `locales_item` SET `name_loc2` = 'Grimoire de Gardien de l\'ombre IV', `name_loc3` = 'Zauberfoliant des Schattenzauberschutzes IV', `name_loc6` = 'Grimorio Resguardo contra las Sombras', `name_loc8` = 'Гримуар защиты от темной магии IV', `description_loc2` = 'Vous apprend Gardien de l\'ombre (rang 4).', `description_loc3` = 'Lehrt \'Schattenzauberschutz\' (Rang 4).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Защита от темной магии\" (уровень 4).' WHERE `entry` = 22891; +UPDATE `locales_item` SET `name_loc2` = 'Tome d\'Invocation de nourriture VII', `name_loc3` = 'Foliant des Essenherbeizauberns VII', `name_loc6` = 'Escrito sobre Crear comida', `name_loc8` = 'Фолиант Сотворения яств VII', `description_loc2` = 'Vous apprend Invocation de nourriture (Rang 7).', `description_loc3` = 'Lehrt \'Essen herbeizaubern\' (Rang 7).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Сотворение яств\" (уровень 7).' WHERE `entry` = 22897; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Larme de grenat sanguin', `name_loc3` = 'Vorlage: Tränenförmiger Blutgranat', `name_loc6` = 'Boceto: granate de sangre luminoso', `name_loc8` = 'Эскиз: каплевидный кровавый гранат', `description_loc2` = 'Vous apprend à tailler une Larme de grenat sanguin.', `description_loc3` = 'Lehrt Euch das Schleifen eines tränenförmigen Blutgranates.', `description_loc6` = 'Te enseña a tallar un granate de sangre luminoso.', `description_loc8` = 'Обучение изготовлению каплевидного кровавого граната.' WHERE `entry` = 23130; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Grenat sanguin runique', `name_loc3` = 'Vorlage: Runenverzierter Blutgranat', `name_loc6` = 'Boceto: granate de sangre luminoso', `name_loc8` = 'Эскиз: рунический кровавый гранат', `description_loc2` = 'Vous apprend à tailler un Grenat sanguin runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenverzierten Blutgranates.', `description_loc6` = 'Te enseña a tallar un granate de sangre luminoso.', `description_loc8` = 'Обучает огранке рунического кровавого граната.' WHERE `entry` = 23133; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spessarite de flamme lumineuse', `name_loc3` = 'Vorlage: Glänzender Flammenspessarit', `name_loc6` = 'Boceto: espesartita de llamas temeraria', `name_loc8` = 'Эскиз: светоносный пламенный спессарит', `description_loc2` = 'Vous apprend à tailler une Spessarite de flamme lumineuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Flammenspessarits.', `description_loc6` = 'Te enseña a tallar una espesartita de llamas temeraria.', `description_loc8` = 'Обучает огранке светоносного пламенного спессарита.' WHERE `entry` = 23136; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spessarite de flamme luisante', `name_loc3` = 'Vorlage: Glitzernder Flammenspessarit', `name_loc6` = 'Boceto: draenita de Sombras destellante', `name_loc8` = 'Эскиз: блистающий пламенный спессарит', `description_loc2` = 'Vous apprend à tailler une Spessarite de flamme luisante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glitzernden Flammenspessarits.', `description_loc6` = 'Te enseña a tallar una draenita de Sombras destellante.', `description_loc8` = 'Обучает огранке блистающего пламенного спессарита.' WHERE `entry` = 23137; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Olivine durcie', `name_loc3` = 'Vorlage: Robuster Tiefenperidot', `name_loc6` = 'Boceto: peridoto intenso regio', `name_loc8` = 'Эскиз: отверделый хризолит', `description_loc2` = 'Vous apprend à tailler une Olivine durcie.', `description_loc3` = 'Lehrt Euch das Schleifen eines robusten Tiefenperidots.', `description_loc6` = 'Te enseña a tallar un peridoto intenso regio.', `description_loc8` = 'Обучает огранке отверделого хризолита.' WHERE `entry` = 23142; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Olivine éblouissante', `name_loc3` = 'Vorlage: Schillernder Tiefenperidot', `name_loc6` = 'Boceto: draenita de Sombras purificada', `name_loc8` = 'Эскиз: ослепительный хризолит', `description_loc2` = 'Vous apprend à tailler une Olivine éblouissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines schillernden Tiefenperidots.', `description_loc6` = 'Te enseña a tallar una draenita de Sombras purificada.', `description_loc8` = 'Обучает огранке ослепительного хризолита.' WHERE `entry` = 23143; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite ombreuse luminescente', `name_loc3` = 'Vorlage: Leuchtender Schattendraenit', `name_loc6` = 'Boceto: draenita de Sombras intemporal', `name_loc8` = 'Эскиз: светящийся сумеречный дренит', `description_loc2` = 'Vous apprend à tailler une Draénite ombreuse luminescente.', `description_loc3` = 'Lehrt Euch das Schleifen eines leuchtenden Schattendraenits.', `description_loc6` = 'Te enseña a tallar una draenita de Sombras intemporal.', `description_loc8` = 'Обучение изготовлению светящегося сумеречного дренита.' WHERE `entry` = 23144; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite ombreuse royale', `name_loc3` = 'Vorlage: Königlicher Schattendraenit', `name_loc6` = 'Boceto: draenita de Sombras purificada', `name_loc8` = 'Эскиз: королевский сумрачный дренит', `description_loc2` = 'Vous apprend à tailler une Draénite ombreuse royale.', `description_loc3` = 'Lehrt Euch das Schleifen eines königlichen Schattendraenits.', `description_loc6` = 'Te enseña a tallar una draenita de Sombras purificada.', `description_loc8` = 'Обучает огранке королевского сумрачного дренита.' WHERE `entry` = 23145; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite dorée brillante', `name_loc3` = 'Vorlage: Glänzender Golddraenit', `name_loc6` = 'Boceto: granate de sangre luminoso', `name_loc8` = 'Эскиз: сверкающий золотой дренит', `description_loc2` = 'Vous apprend à tailler une Draénite dorée brillante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Golddraenits.', `description_loc6` = 'Te enseña a tallar un granate de sangre luminoso.', `description_loc8` = 'Обучение изготовлению сверкающего золотого дренита.' WHERE `entry` = 23148; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite dorée resplendissante', `name_loc3` = 'Vorlage: Schimmernder Golddraenit', `name_loc6` = 'Boceto: draenita dorada lisa', `name_loc8` = 'Эскиз: искристый золотой дренит', `description_loc2` = 'Vous apprend à tailler une Draénite dorée resplendissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines schimmernden Golddraenits.', `description_loc6` = 'Te enseña a tallar una draenita dorada lisa.', `description_loc8` = 'Обучает огранке искристого золотого дренита.' WHERE `entry` = 23149; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite dorée bombée', `name_loc3` = 'Vorlage: Kompakter Golddraenit', `name_loc6` = 'Boceto: draenita dorada sutil', `name_loc8` = 'Эскиз: матовый золотой дренит', `description_loc2` = 'Vous apprend à tailler une Draénite dorée bombée.', `description_loc3` = 'Lehrt Euch das Schleifen eines kompakten Golddraenits.', `description_loc6` = 'Te enseña a tallar una draenita dorada sutil.', `description_loc8` = 'Обучает огранке матового золотого дренита.' WHERE `entry` = 23150; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite dorée rigide', `name_loc3` = 'Vorlage: Massiver Golddraenit', `name_loc6` = 'Boceto: piedra lunar azur rígida', `name_loc8` = 'Эскиз: твердый золотой дренит', `description_loc2` = 'Vous apprend à tailler une Draénite dorée rigide.', `description_loc3` = 'Lehrt Euch das Schleifen eines massiven Golddraenits.', `description_loc6` = 'Te enseña a tallar una piedra lunar azur rígida.', `description_loc8` = 'Обучает огранке твердого золотого дренита.' WHERE `entry` = 23151; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre de lune azur satinée', `name_loc3` = 'Vorlage: Irisierender Azurmondstein', `name_loc6` = 'Boceto: piedra lunar azur chispeante', `name_loc8` = 'Эскиз: блестящий лазурный лунный камень', `description_loc2` = 'Vous apprend à tailler une Pierre de lune azur satinée.', `description_loc3` = 'Lehrt Euch das Schleifen eines irisierenden Azurmondsteins.', `description_loc6` = 'Te enseña a tallar una piedra lunar azur chispeante.', `description_loc8` = 'Обучает огранке блестящего лазурного лунного камня.' WHERE `entry` = 23155; +UPDATE `locales_item` SET `name_loc2` = 'Tablette de Horion de flammes VI', `name_loc3` = 'Schrifttafel des Flammenschocks VI', `name_loc6` = 'Tablilla de Choque de llamas', `name_loc8` = 'Табличка Огненного шока VI', `description_loc2` = 'Vous apprend Horion de flammes (rang 6).', `description_loc3` = 'Lehrt Flammenschock (Rang 6).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Огненный шок\" (Уровень 6).' WHERE `entry` = 23320; +UPDATE `locales_item` SET `name_loc2` = 'Schéma : Presse à obus en adamantite', `name_loc3` = 'Bauplan: Maschine für Adamantitpatronen', `name_loc6` = 'Esquema estropeado', `name_loc8` = 'Схема: станок для адамантитовых патронов', `description_loc2` = 'Vous apprend à fabriquer une Presse à obus en adamantite.', `description_loc3` = 'Lehrt Euch die Herstellung einer Maschine für Adamantitpatronen.', `description_loc6` = 'Este esquema ha sido destruido por los elementos.', `description_loc8` = 'Обучает изготовлению станка для адамантитовых патронов.' WHERE `entry` = 23815; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Bague des arcanes en khorium', `name_loc3` = 'Vorlage: Arkanes Khoriumband', `name_loc6` = 'Boceto: sortija de korio Arcana', `name_loc8` = 'Эскиз: кориевое кольцо Чародейства', `description_loc2` = 'Vous apprend à façonner une Bague des arcanes en khorium.', `description_loc3` = 'Lehrt Euch die Herstellung eines arkanen Khoriumbands.', `description_loc6` = 'Te enseña a crear una sortija de korio Arcana.', `description_loc8` = 'Обучение изготовлению кориевого кольца Чародейства.' WHERE `entry` = 24162; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis vivant éclatant', `name_loc3` = 'Vorlage: Heller lebendiger Rubin', `name_loc6` = 'Boceto: rubí vivo delicado', `name_loc8` = 'Эскиз: яркий животворный рубин', `description_loc2` = 'Vous apprend à tailler un Rubis vivant éclatant.', `description_loc3` = 'Lehrt Euch das Schleifen eines hellen lebendigen Rubins.', `description_loc6` = 'Te enseña a tallar un rubí vivo delicado.', `description_loc8` = 'Обучает огранке яркого животворного рубина.' WHERE `entry` = 24192; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Larme de rubis vivant', `name_loc3` = 'Vorlage: Tränenförmiger lebendiger Rubin', `name_loc6` = 'Boceto: rubí vivo luminoso', `name_loc8` = 'Эскиз: каплевидный животворящий рубин', `description_loc2` = 'Vous apprend à tailler une Larme de rubis vivant.', `description_loc3` = 'Lehrt Euch das Schleifen eines tränenförmigen lebendigen Rubins.', `description_loc6` = 'Te enseña a tallar un rubí vivo luminoso.', `description_loc8` = 'Обучение изготовлению каплевидного животворящего рубина.' WHERE `entry` = 24195; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis vivant runique', `name_loc3` = 'Vorlage: Runenverzierter lebendiger Rubin', `name_loc6` = 'Boceto: rubí vivo luminoso', `name_loc8` = 'Эскиз: рунический животворный рубин', `description_loc2` = 'Vous apprend à tailler un Rubis vivant runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenverzierten lebendigen Rubins.', `description_loc6` = 'Te enseña a tallar un rubí vivo luminoso.', `description_loc8` = 'Обучает огранке рунического животворного рубина.' WHERE `entry` = 24196; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis vivant subtil', `name_loc3` = 'Vorlage: Fragiler lebendiger Rubin', `name_loc6` = 'Boceto: piedra del alba sutil', `name_loc8` = 'Эскиз: изящный животворный рубин', `description_loc2` = 'Vous apprend à tailler un Rubis vivant subtil.', `description_loc3` = 'Lehrt Euch das Schleifen eines fragilen lebendigen Rubins.', `description_loc6` = 'Te enseña a tallar una piedra del alba sutil.', `description_loc8` = 'Обучает огранке изящного животворного рубина.' WHERE `entry` = 24197; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Etoile d\'Elune satinée', `name_loc3` = 'Vorlage: Irisierender Stern der Elune', `name_loc6` = 'Boceto: estrella de Elune chispeante', `name_loc8` = 'Эскиз: блестящая Звезда Элуны', `description_loc2` = 'Vous apprend à tailler une Etoile d\'Elune satinée.', `description_loc3` = 'Lehrt Euch das Schleifen eines irisierenden Sterns der Elune.', `description_loc6` = 'Te enseña a tallar una estrella de Elune chispeante.', `description_loc8` = 'Обучение изготовлению блестящей Звезды Элуны.' WHERE `entry` = 24201; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'aube brillante', `name_loc3` = 'Vorlage: Glänzender Dämmerstein', `name_loc6` = 'Boceto: rubí vivo luminoso', `name_loc8` = 'Эскиз: сверкающий зоревик', `description_loc2` = 'Vous apprend à tailler une Pierre d\'aube brillante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Dämmersteins.', `description_loc6` = 'Te enseña a tallar un rubí vivo luminoso.', `description_loc8` = 'Обучает огранке сверкающего зоревика.' WHERE `entry` = 24203; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'aube rigide', `name_loc3` = 'Vorlage: Massiver Dämmerstein', `name_loc6` = 'Boceto: estrella de Elune rígida', `name_loc8` = 'Эскиз: прочный зоревик', `description_loc2` = 'Vous apprend à tailler une Pierre d\'aube rigide.', `description_loc3` = 'Lehrt Euch das Schleifen eines massiven Dämmersteins.', `description_loc6` = 'Te enseña a tallar una estrella de Elune rígida.', `description_loc8` = 'Обучает огранке прочного зоревика.' WHERE `entry` = 24205; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'aube resplendissante', `name_loc3` = 'Vorlage: Schimmernder Dämmerstein', `name_loc6` = 'Boceto: piedra del alba lisa', `name_loc8` = 'Эскиз: искристый зоревик', `description_loc2` = 'Vous apprend à tailler une Pierre d\'aube resplendissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines schimmernden Dämmersteins.', `description_loc6` = 'Te enseña a tallar una piedra del alba lisa.', `description_loc8` = 'Обучает огранке искристого зоревика.' WHERE `entry` = 24206; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'aube bombée', `name_loc3` = 'Vorlage: Kompakter Dämmerstein', `name_loc6` = 'Boceto: piedra del alba sutil', `name_loc8` = 'Эскиз: матовый зоревик', `description_loc2` = 'Vous apprend à tailler une Pierre d\'aube bombée.', `description_loc3` = 'Lehrt Euch das Schleifen eines kompakten Dämmersteins.', `description_loc6` = 'Te enseña a tallar una piedra del alba sutil.', `description_loc8` = 'Обучает огранке матового зоревика.' WHERE `entry` = 24207; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de nuit luminescent', `name_loc3` = 'Vorlage: Leuchtendes Nachtauge', `name_loc6` = 'Boceto: ojo de noche intemporal', `name_loc8` = 'Эскиз: светящееся око ночи', `description_loc2` = 'Vous apprend à façonner un Oeil de nuit luminescent.', `description_loc3` = 'Lehrt Euch das Schleifen eines leuchtenden Nachtauges.', `description_loc6` = 'Te enseña a tallar un ojo de noche intemporal.', `description_loc8` = 'Обучает огранке светящегося ока ночи.' WHERE `entry` = 24211; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de nuit royal', `name_loc3` = 'Vorlage: Königliches Nachtauge', `name_loc6` = 'Boceto: ojo de noche purificado', `name_loc8` = 'Эскиз: королевское око ночи', `description_loc2` = 'Vous apprend à tailler un Oeil de nuit royal.', `description_loc3` = 'Lehrt Euch das Schleifen eines königlichen Nachtauges.', `description_loc6` = 'Te enseña a tallar un ojo de noche purificado.', `description_loc8` = 'Обучает огранке королевского ока ночи.' WHERE `entry` = 24212; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze noble lumineuse', `name_loc3` = 'Vorlage: Glänzender Edeltopas', `name_loc6` = 'Boceto: topacio noble temerario', `name_loc8` = 'Эскиз: светоносный благородный топаз', `description_loc2` = 'Vous apprend à tailler une Topaze noble lumineuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Edeltopas.', `description_loc6` = 'Te enseña a tallar un topacio noble temerario.', `description_loc8` = 'Обучение изготовлению светоносного благородного топаза.' WHERE `entry` = 24215; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze noble luisante', `name_loc3` = 'Vorlage: Glitzernder Edeltopas', `name_loc6` = 'Boceto: ojo de noche destellante', `name_loc8` = 'Эскиз: блистающий благородный топаз', `description_loc2` = 'Vous apprend à tailler une Topaze noble luisante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glitzernden Edeltopas.', `description_loc6` = 'Te enseña a tallar un ojo de noche destellante.', `description_loc8` = 'Обучает огранке блистающего благородного топаза.' WHERE `entry` = 24216; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Talasite durcie', `name_loc3` = 'Vorlage: Robuster Talasit', `name_loc6` = 'Boceto: talasita regia', `name_loc8` = 'Эскиз: отверделый талассит', `description_loc2` = 'Vous apprend à tailler une Talasite durcie.', `description_loc3` = 'Lehrt Euch das Schleifen eines robusten Talasits.', `description_loc6` = 'Te enseña a tallar una talasita regia.', `description_loc8` = 'Обучает огранке отверделого талассита.' WHERE `entry` = 24217; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Talasite éblouissante', `name_loc3` = 'Vorlage: Schillernder Talasit', `name_loc6` = 'Boceto: ojo de noche purificado', `name_loc8` = 'Эскиз: ослепительный талассит', `description_loc2` = 'Vous apprend à tailler une Talasite éblouissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines schillernden Talasits.', `description_loc6` = 'Te enseña a tallar un ojo de noche purificado.', `description_loc8` = 'Обучение изготовлению ослепительного талассита.' WHERE `entry` = 24219; +UPDATE `locales_item` SET `name_loc2` = 'Recette : En-cas sporelin', `name_loc3` = 'Rezept: Sporlingschmaus', `name_loc6` = 'Receta: tentempié de esporino', `name_loc8` = 'Рецепт: закуска спорлингов', `description_loc2` = 'Vous apprend à préparer un En-cas sporelin.', `description_loc3` = 'Lehrt Euch die Zubereitung von Sporlingschmaus.', `description_loc6` = 'Te enseña a cocinar tentempié de esporino.', `description_loc8` = 'Обучает приготовлению закуски спорлингов.' WHERE `entry` = 27689; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de cape (Pénétration des sorts)', `name_loc3` = 'Formel: Umhang - Zauberdurchschlagskraft', `name_loc6` = 'Fórmula: encantar capa: penetración de hechizos', `name_loc8` = 'Формула чар для плаща - проникающая способность заклинаний', `description_loc2` = 'Vous apprend à enchanter de manière permanente une cape pour augmenter votre pénétration des sorts de 20. Nécessite un objet de niveau 35 ou supérieur.', `description_loc3` = 'Lehrt Euch, Umhänge dauerhaft zu verzaubern, sodass sie die Zauberdurchschlagskraft um 20 erhöhen. Erfordert einen Gegenstand der Stufe 35 oder höher.', `description_loc6` = 'Te enseña a encantar de forma permanente una capa para aumentar la penetración de hechizos 20 p. Requiere un objeto de nivel 35 o superior.', `description_loc8` = 'Обучает способности накладывать на плащ чары, повышающие проникающую способность заклинаний на 20. Требуется предмет для персонажей не ниже 35-го уровня.' WHERE `entry` = 28274; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Grenat sanguin éclatant', `name_loc3` = 'Vorlage: Heller Blutgranat', `name_loc6` = 'Boceto: granate de sangre delicado', `name_loc8` = 'Эскиз: яркий кровавый гранат', `description_loc2` = 'Vous apprend à tailler un Grenat sanguin éclatant.', `description_loc3` = 'Lehrt Euch das Schleifen eines hellen Blutgranats.', `description_loc6` = 'Te enseña a tallar un granate de sangre delicado.', `description_loc8` = 'Обучает огранке яркого кровавого граната.' WHERE `entry` = 28596; +UPDATE `locales_item` SET `name_loc2` = 'Codex : Prière de Robustesse III', `name_loc3` = 'Kodex: Gebet der Seelenstärke III', `name_loc6` = 'Códice: Rezo de Entereza', `name_loc8` = 'Кодекс: Молитва стойкости III', `description_loc2` = 'Vous apprend Prière de robustesse (Rang 3).', `description_loc3` = 'Lehrt \'Gebet der Seelenstärke\' (Rang 3).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Молитва стойкости\" (Уровень 3).' WHERE `entry` = 29549; +UPDATE `locales_item` SET `name_loc2` = 'Tome d\'Invocation d\'eau IX', `name_loc3` = 'Foliant des Wasserherbeizauberns IX', `name_loc6` = 'Escrito sobre Crear agua', `name_loc8` = 'Фолиант Сотворения воды IX', `description_loc2` = 'Vous apprend Invocation d\'eau (Rang 9).', `description_loc3` = 'Lehrt \'Wasser herbeizaubern\' (Rang 9).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Сотворение воды\" (уровень 9).' WHERE `entry` = 29550; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Olivine durcie', `name_loc3` = 'Vorlage: Robuster Tiefenperidot', `name_loc6` = 'Boceto: peridoto intenso regio', `name_loc8` = 'Эскиз: отверделый хризолит', `description_loc2` = 'Vous apprend à tailler une Olivine durcie.', `description_loc3` = 'Lehrt Euch das Schleifen eines robusten Tiefenperidots.', `description_loc6` = 'Te enseña a tallar un peridoto intenso regio.', `description_loc8` = 'Обучает огранке отверделого хризолита.' WHERE `entry` = 31359; +UPDATE `locales_item` SET `name_loc2` = 'Tome d\'Invocation de nourriture VIII', `name_loc3` = 'Foliant des Essenherbeizauberns VIII', `name_loc6` = 'Escrito sobre Crear comida', `name_loc8` = 'Фолиант Сотворения яств VIII', `description_loc2` = 'Vous apprend Invocation de nourriture (Rang 8).', `description_loc3` = 'Lehrt \'Essen herbeizaubern\' (Rang 8).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Сотворение яств\" (уровень 8).' WHERE `entry` = 31501; +UPDATE `locales_item` SET `name_loc2` = 'Codex : Prière de protection contre l\'Ombre II', `name_loc3` = 'Kodex: Gebet des Schattenschutzes II', `name_loc6` = 'Códice: Rezo de Protección contra las Sombras', `name_loc8` = 'Кодекс: молитва защиты от темной магии II', `description_loc2` = 'Vous apprend Prière de protection contre l\'Ombre (Rang 2).', `description_loc3` = 'Lehrt \'Gebet des Schattenschutzes\' (Rang 2).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Молитва Защиты от сил Тьмы\" (Уровень 2).' WHERE `entry` = 31837; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Grande pierre d\'aube', `name_loc3` = 'Vorlage: Großer Dämmerstein', `name_loc6` = 'Boceto: estrella de Elune rígida', `name_loc8` = 'Эскиз: большой зоревик', `description_loc2` = 'Vous apprend à tailler une Grande pierre d\'aube.', `description_loc3` = 'Lehrt Euch das Schleifen eines großen Dämmersteins.', `description_loc6` = 'Te enseña a tallar una estrella de Elune rígida.', `description_loc8` = 'Обучение изготовлению большого зоревика.' WHERE `entry` = 31875; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de nuit équilibré', `name_loc3` = 'Vorlage: Ausbalanciertes Nachtauge', `name_loc6` = 'Boceto: ojo de noche cambiante', `name_loc8` = 'Эскиз: сбалансированное око ночи', `description_loc2` = 'Vous apprend à tailler un Oeil de nuit équilibré.', `description_loc3` = 'Lehrt Euch das Schleifen eines ausbalancierten Nachtauges.', `description_loc6` = 'Te enseña a tallar un ojo de noche cambiante.', `description_loc8` = 'Обучает огранке сбалансированного ока ночи.' WHERE `entry` = 31876; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de nuit infusé', `name_loc3` = 'Vorlage: Energieerfülltes Nachtauge', `name_loc6` = 'Boceto: ojo de noche destellante', `name_loc8` = 'Эскиз: заряженное око ночи', `description_loc2` = 'Vous apprend à tailler un Oeil de nuit infusé.', `description_loc3` = 'Lehrt Euch das Schleifen eines energieerfüllten Nachtauges.', `description_loc6` = 'Te enseña a tallar un ojo de noche destellante.', `description_loc8` = 'Обучает огранке заряженного ока ночи.' WHERE `entry` = 31877; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze noble voilée', `name_loc3` = 'Vorlage: Verschleierter Edeltopas', `name_loc6` = 'Boceto: ojo de noche velado', `name_loc8` = 'Эскиз: сокрытый благородный топаз', `description_loc2` = 'Vous apprend à tailler une Topaze noble voilée.', `description_loc3` = 'Lehrt Euch das Schleifen eines verschleierten Edeltopas.', `description_loc6` = 'Te enseña a tallar un ojo de noche velado.', `description_loc8` = 'Обучает огранке сокрытого благородного топаза.' WHERE `entry` = 31878; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze noble pernicieuse', `name_loc3` = 'Vorlage: Tückischer Edeltopas', `name_loc6` = 'Boceto: topacio noble mortal', `name_loc8` = 'Эскиз: гибельный благородный топаз', `description_loc2` = 'Vous apprend à tailler une Topaze noble pernicieuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines tückischen Edeltopas.', `description_loc6` = 'Te enseña a tallar un topacio noble mortal.', `description_loc8` = 'Обучает огранке гибельного благородного топаза.' WHERE `entry` = 31879; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Larme de spinelle cramoisi', `name_loc3` = 'Vorlage: Tränenförmiger Purpurspinell', `name_loc6` = 'Boceto: espinela carmesí luminosa', `name_loc8` = 'Эскиз: каплевидная пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler une Larme de spinelle cramoisi.', `description_loc3` = 'Lehrt Euch das Schleifen eines tränenförmigen Purpurspinells.', `description_loc6` = 'Te enseña a tallar una espinela carmesí luminosa.', `description_loc8` = 'Обучает огранке каплевидной пунцовой шпинели.' WHERE `entry` = 32281; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spinelle cramoisi runique', `name_loc3` = 'Vorlage: Runenverzierter Purpurspinell', `name_loc6` = 'Boceto: espinela carmesí luminosa', `name_loc8` = 'Эскиз: руническая пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler un Spinelle cramoisi runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenverzierten Purpurspinells.', `description_loc6` = 'Te enseña a tallar una espinela carmesí luminosa.', `description_loc8` = 'Обучает огранке рунической пунцовой шпинели.' WHERE `entry` = 32282; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spinelle cramoisi éclatant', `name_loc3` = 'Vorlage: Heller Purpurspinell', `name_loc6` = 'Boceto: espinela carmesí delicada', `name_loc8` = 'Эскиз: яркая пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler un Spinelle cramoisi éclatant.', `description_loc3` = 'Lehrt Euch das Schleifen eines hellen Purpurspinells.', `description_loc6` = 'Te enseña a tallar una espinela carmesí delicada.', `description_loc8` = 'Обучает созданию яркой пунцовой шпинели.' WHERE `entry` = 32283; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spinelle cramoisi subtil', `name_loc3` = 'Vorlage: Fragiler Purpurspinell', `name_loc6` = 'Boceto: ojo de león sutil', `name_loc8` = 'Эскиз: изящная пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler un Spinelle cramoisi subtil.', `description_loc3` = 'Lehrt Euch das Schleifen eines fragilen Purpurspinells.', `description_loc6` = 'Te enseña a tallar un ojo de león sutil.', `description_loc8` = 'Обучает огранке изящной пунцовой шпинели.' WHERE `entry` = 32284; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Saphir empyréen satiné', `name_loc3` = 'Vorlage: Irisierender Engelssaphir', `name_loc6` = 'Boceto: zafiro empíreo chispeante', `name_loc8` = 'Эскиз: блестящий неземной сапфир', `description_loc2` = 'Vous apprend à tailler un Saphir empyréen satiné.', `description_loc3` = 'Lehrt Euch das Schleifen eines irisierenden Engelssaphirs.', `description_loc6` = 'Te enseña a tallar un zafiro empíreo chispeante.', `description_loc8` = 'Обучает огранке блестящего неземного сапфира.' WHERE `entry` = 32288; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion brillant', `name_loc3` = 'Vorlage: Glänzendes Löwenauge', `name_loc6` = 'Boceto: espinela carmesí luminosa', `name_loc8` = 'Эскиз: сверкающий львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion brillant.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Löwenauges.', `description_loc6` = 'Te enseña a tallar una espinela carmesí luminosa.', `description_loc8` = 'Обучает огранке сверкающего львиного глаза.' WHERE `entry` = 32290; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion resplendissant', `name_loc3` = 'Vorlage: Schimmerndes Löwenauge', `name_loc6` = 'Boceto: ojo de león liso', `name_loc8` = 'Эскиз: искристый львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion resplendissant.', `description_loc3` = 'Lehrt Euch das Schleifen eines schimmernden Löwenauges.', `description_loc6` = 'Te enseña a tallar un ojo de león liso.', `description_loc8` = 'Обучает огранке искристого львиного глаза.' WHERE `entry` = 32293; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion bombé', `name_loc3` = 'Vorlage: Kompaktes Löwenauge', `name_loc6` = 'Boceto: ojo de león sutil', `name_loc8` = 'Эскиз: матовый львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion bombé.', `description_loc3` = 'Lehrt Euch das Schleifen eines kompakten Löwenauges.', `description_loc6` = 'Te enseña a tallar un ojo de león sutil.', `description_loc8` = 'Обучает огранке матового львиного глаза.' WHERE `entry` = 32294; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Grand oeil de lion', `name_loc3` = 'Vorlage: Großes Löwenauge', `name_loc6` = 'Boceto: zafiro empíreo rígido', `name_loc8` = 'Эскиз: великий львиный глаз', `description_loc2` = 'Vous apprend à tailler un Grand oeil de lion.', `description_loc3` = 'Lehrt Euch das Schleifen eines großen Löwenauges.', `description_loc6` = 'Te enseña a tallar un zafiro empíreo rígido.', `description_loc8` = 'Обучает огранке великого львиного глаза.' WHERE `entry` = 32296; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre équilibrée', `name_loc3` = 'Vorlage: Ausbalancierter Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío cambiante', `name_loc8` = 'Эскиз: сбалансированный аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre équilibrée.', `description_loc3` = 'Lehrt Euch das Schleifen eines ausbalancierten Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío cambiante.', `description_loc8` = 'Обучает огранке сбалансированного аметиста Песни Теней.' WHERE `entry` = 32299; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre infusée', `name_loc3` = 'Vorlage: Energieerfüllter Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío destellante', `name_loc8` = 'Эскиз: заряженный аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre infusée.', `description_loc3` = 'Lehrt Euch das Schleifen eines energieerfüllten Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío destellante.', `description_loc8` = 'Обучает огранке заряженного аметиста Песни Теней.' WHERE `entry` = 32300; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre luminescente', `name_loc3` = 'Vorlage: Leuchtender Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío intemporal', `name_loc8` = 'Эскиз: светящийся аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre luminescente.', `description_loc3` = 'Lehrt Euch das Schleifen eines leuchtenden Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío intemporal.', `description_loc8` = 'Обучает огранке светящегося аметиста Песни Теней.' WHERE `entry` = 32301; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre royale', `name_loc3` = 'Vorlage: Königlicher Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío purificada', `name_loc8` = 'Эскиз: королевский аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre royale.', `description_loc3` = 'Lehrt Euch das Schleifen eines königlichen Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío purificada.', `description_loc8` = 'Обучает огранке королевского аметиста Песни Теней.' WHERE `entry` = 32302; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe lumineuse', `name_loc3` = 'Vorlage: Glänzender Pyrostein', `name_loc6` = 'Boceto: piropiedra temeraria', `name_loc8` = 'Эскиз: светоносный огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe lumineuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Pyrosteins.', `description_loc6` = 'Te enseña a tallar una piropiedra temeraria.', `description_loc8` = 'Обучает огранке светоносного огнекамня.' WHERE `entry` = 32305; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe luisante', `name_loc3` = 'Vorlage: Glitzernder Pyrostein', `name_loc6` = 'Boceto: amatista Cantosombrío destellante', `name_loc8` = 'Эскиз: блистающий огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe luisante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glitzernden Pyrosteins.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío destellante.', `description_loc8` = 'Обучает огранке блистающего огнекамня.' WHERE `entry` = 32306; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe pernicieuse', `name_loc3` = 'Vorlage: Tückischer Pyrostein', `name_loc6` = 'Boceto: piropiedra mortal', `name_loc8` = 'Эскиз: гибельный огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe pernicieuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines tückischen Pyrosteins.', `description_loc6` = 'Te enseña a tallar una piropiedra mortal.', `description_loc8` = 'Обучает огранке гибельного огнекамня.' WHERE `entry` = 32308; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude d\'écume durcie', `name_loc3` = 'Vorlage: Robuster Gischtsmaragd', `name_loc6` = 'Boceto: esmeralda de espuma marina regia', `name_loc8` = 'Эскиз: отверделый морской изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude d\'écume durcie.', `description_loc3` = 'Lehrt Euch das Schleifen eines robusten Gischtsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda de espuma marina regia.', `description_loc8` = 'Обучает огранке отверделого морского изумруда.' WHERE `entry` = 32309; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude d\'écume éblouissante', `name_loc3` = 'Vorlage: Schillernder Gischtsmaragd', `name_loc6` = 'Boceto: amatista Cantosombrío purificada', `name_loc8` = 'Эскиз: ослепительный морской изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude d\'écume éblouissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines schillernden Gischtsmaragds.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío purificada.', `description_loc8` = 'Обучает огранке ослепительного морского изумруда.' WHERE `entry` = 32311; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe voilée', `name_loc3` = 'Vorlage: Verschleierter Pyrostein', `name_loc6` = 'Boceto: amatista Cantosombrío velada', `name_loc8` = 'Эскиз: сокрытый огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe voilée.', `description_loc3` = 'Lehrt Euch das Schleifen eines verschleierten Pyrosteins.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío velada.', `description_loc8` = 'Обучает огранке сокрытого огнекамня.' WHERE `entry` = 32307; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Grande draénite dorée', `name_loc3` = 'Vorlage: Großer Golddraenit', `name_loc6` = 'Boceto: piedra lunar azur rígida', `name_loc8` = 'Эскиз: большой золотой дренит', `description_loc2` = 'Vous apprend à tailler une Grande draénite dorée.', `description_loc3` = 'Lehrt Euch das Schleifen eines großen Golddraenits.', `description_loc6` = 'Te enseña a tallar una piedra lunar azur rígida.', `description_loc8` = 'Обучение изготовлению большого золотого дренита.' WHERE `entry` = 31870; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite ombreuse équilibrée', `name_loc3` = 'Vorlage: Ausbalancierter Schattendraenit', `name_loc6` = 'Boceto: draenita de Sombras cambiante', `name_loc8` = 'Эскиз: сбалансированный сумрачный дренит', `description_loc2` = 'Vous apprend à tailler une Draénite ombreuse équilibrée.', `description_loc3` = 'Lehrt Euch das Schleifen eines ausbalancierten Schattendraenits.', `description_loc6` = 'Te enseña a tallar una draenita de Sombras cambiante.', `description_loc8` = 'Обучает огранке сбалансированного сумрачного дренита.' WHERE `entry` = 31871; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Draénite ombreuse infusée', `name_loc3` = 'Vorlage: Energieerfüllter Schattendraenit', `name_loc6` = 'Boceto: draenita de Sombras cambiante', `name_loc8` = 'Эскиз: заряженный сумеречный дренит', `description_loc2` = 'Vous apprend à tailler une Draénite ombreuse infusée.', `description_loc3` = 'Lehrt Euch das Schleifen eines energieerfüllten Schattendraenits.', `description_loc6` = 'Te enseña a tallar una draenita de Sombras cambiante.', `description_loc8` = 'Обучение изготовлению одаряющего сумеречного дренита.' WHERE `entry` = 31872; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spessarite de flamme voilée', `name_loc3` = 'Vorlage: Verschleierter Flammenspessarit', `name_loc6` = 'Boceto: draenita de Sombras velada', `name_loc8` = 'Эскиз: сокрытый пламенный спессарит', `description_loc2` = 'Vous apprend à tailler une Spessarite de flamme voilée.', `description_loc3` = 'Lehrt Euch das Schleifen eines verschleierten Flammenspessarits.', `description_loc6` = 'Te enseña a tallar una draenita de Sombras velada.', `description_loc8` = 'Обучает огранке сокрытого пламенного спессарита.' WHERE `entry` = 31873; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spessarite de flamme pernicieuse', `name_loc3` = 'Vorlage: Tückischer Flammenspessarit', `name_loc6` = 'Boceto: espesartita de llamas mortal', `name_loc8` = 'Эскиз: гибельный пламенный спессарит', `description_loc2` = 'Vous apprend à tailler une Spessarite de flamme pernicieuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines tückischen Flammenspessarits.', `description_loc6` = 'Te enseña a tallar una espesartita de llamas mortal.', `description_loc8` = 'Обучает огранке гибельного пламенного спессарита.' WHERE `entry` = 31874; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion rigide', `name_loc3` = 'Vorlage: Massives Löwenauge', `name_loc6` = 'Boceto: zafiro empíreo rígido', `name_loc8` = 'Эскиз: прочный львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion rigide.', `description_loc3` = 'Lehrt Euch das Schleifen eines massiven Löwenauges.', `description_loc6` = 'Te enseña a tallar un zafiro empíreo rígido.', `description_loc8` = 'Обучает огранке прочного львиного глаза.' WHERE `entry` = 32292; +UPDATE `locales_item` SET `name_loc2` = 'Patron : Carquois des mille plumes', `name_loc3` = 'Muster: Köcher der tausend Federn', `name_loc6` = 'Patrón estropeado', `name_loc8` = 'Выкройка: колчан тысячи оперений', `description_loc2` = 'Vous apprend à confectionner un Carquois des mille plumes.', `description_loc3` = 'Lehrt Euch die Herstellung eines Köchers der tausend Federn.', `description_loc6` = 'Este detallado patrón ha sido estropeado por los elementos.', `description_loc8` = 'Обучает изготовлению колчана тысячи оперений.' WHERE `entry` = 34200; +UPDATE `locales_item` SET `name_loc2` = 'Patron : Giberne en écailles du Néant', `name_loc3` = 'Muster: Munitionsbeutel aus Netherschuppen', `name_loc6` = 'Patrón estropeado', `name_loc8` = 'Выкройка: подсумок из чешуи дракона Пустоты', `description_loc2` = 'Vous apprend à confectionner une Giberne en écailles du Néant.', `description_loc3` = 'Lehrt Euch die Herstellung eines Munitionsbeutels aus Netherschuppen.', `description_loc6` = 'Te enseña a crear una Faltriquera de Munición de Escamas Abisales.', `description_loc8` = 'Обучает изготовлению подсумка из чешуи дракона Пустоты.' WHERE `entry` = 34218; +UPDATE `locales_item` SET `name_loc2` = 'Patron : Giberne en écailles du Néant', `name_loc3` = 'Muster: Munitionsbeutel aus Netherschuppen', `name_loc6` = 'Patrón estropeado', `name_loc8` = 'Выкройка: подсумок из чешуи дракона Пустоты', `description_loc2` = 'Vous apprend à confectionner une Giberne en écailles du Néant.', `description_loc3` = 'Lehrt Euch die Herstellung eines Munitionsbeutels aus Netherschuppen.', `description_loc6` = 'Este patrón desprende un hedor a lluvia y ceniza.', `description_loc8` = 'Обучает изготовлению подсумка из чешуи дракона Пустоты.' WHERE `entry` = 34201; +UPDATE `locales_item` SET `name_loc2` = 'Schéma : Tailleur de flèches en adamantite', `name_loc3` = 'Bauplan: Automat für Adamantitpfeile', `name_loc6` = 'Esquema estropeado', `name_loc8` = 'Чертеж: изготовитель адамантитовых стрел', `description_loc2` = 'Vous apprend à fabriquer un Tailleur de flèches en adamantite.', `description_loc3` = 'Lehrt Euch die Herstellung eines Automats für Adamantitpfeile.', `description_loc6` = 'Te enseña a hacer un Generador de Flechas de Adamantita.', `description_loc8` = 'Обучение изготовлению изготовителья адамантитовых стрел.' WHERE `entry` = 33804; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de plastron (Défense)', `name_loc3` = 'Formel: Brust - Verteidigung', `name_loc6` = 'Fórmula: encantar pechera: defensa', `name_loc8` = 'Формула чар для нагрудника - защита I', `description_loc2` = 'Vous apprend à enchanter de manière permanente une pièce d\'armure de torse pour augmenter votre score de défense de 16. Nécessite un objet de niveau 35 ou supérieur.', `description_loc3` = 'Lehrt Euch, Brustrüstungen dauerhaft zu verzaubern, sodass sie die Verteidigungswertung um 16 erhöhen. Erfordert einen Gegenstand der Stufe 35 oder höher.', `description_loc6` = 'Te enseña a encantar de forma permanente una pechera para aumentar el índice de esquivar 16 p. Requiere un objeto de nivel 35 o superior.', `description_loc8` = 'Обучает наложению на нагрудник чар, повышающих рейтинг защиты на 16. Требуется предмет для персонажей не ниже 35-го уровня.' WHERE `entry` = 35500; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de nuit régalien', `name_loc3` = 'Vorlage: Majestätisches Nachtauge', `name_loc6` = 'Boceto: talasita regia', `name_loc8` = 'Эскиз: монаршее око ночи', `description_loc2` = 'Vous apprend à tailler un Oeil de nuit régalien.', `description_loc3` = 'Lehrt Euch das Schleifen eines majestätischen Nachtauges.', `description_loc6` = 'Te enseña a tallar una talasita regia.', `description_loc8` = 'Обучает огранке монаршего ока ночи.' WHERE `entry` = 35708; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de cape (Tisse-acier)', `name_loc3` = 'Formel: Umhang - Stahlgewebe', `name_loc6` = 'Fórmula: encantar capa: tejido de acero', `name_loc8` = 'Формула чар для плаща - стальная ткань', `description_loc2` = 'Vous apprend à enchanter de manière permanente une cape pour augmenter votre score de défense de 12. Nécessite un objet de niveau 35 ou supérieur.', `description_loc3` = 'Lehrt Euch, Umhänge dauerhaft zu verzaubern, sodass sie die Verteidigungswertung um 12 erhöhen. Erfordert einen Gegenstand der Stufe 35 oder höher.', `description_loc6` = 'Te enseña a encantar de forma permanente una capa para aumentar el índice de esquivar 12 p. Requiere un objeto de nivel 35 o superior.' WHERE `entry` = 35756; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion brillant', `name_loc3` = 'Vorlage: Glänzendes Löwenauge', `name_loc6` = 'Boceto: espinela carmesí luminosa', `name_loc8` = 'Эскиз: сверкающий львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion brillant.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Löwenauges.', `description_loc6` = 'Te enseña a tallar una espinela carmesí luminosa.', `description_loc8` = 'Обучает огранке сверкающего львиного глаза.' WHERE `entry` = 35255; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion resplendissant', `name_loc3` = 'Vorlage: Schimmerndes Löwenauge', `name_loc6` = 'Boceto: ojo de león liso', `name_loc8` = 'Эскиз: искристый львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion resplendissant.', `description_loc3` = 'Lehrt Euch das Schleifen eines schimmernden Löwenauges.', `description_loc6` = 'Te enseña a tallar un ojo de león liso.', `description_loc8` = 'Обучает огранке искристого львиного глаза.' WHERE `entry` = 35256; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Saphir empyréen satiné', `name_loc3` = 'Vorlage: Irisierender Engelssaphir', `name_loc6` = 'Boceto: zafiro empíreo chispeante', `name_loc8` = 'Эскиз: блестящий неземной сапфир', `description_loc2` = 'Vous apprend à tailler un Saphir empyréen satiné.', `description_loc3` = 'Lehrt Euch das Schleifen eines irisierenden Engelssaphirs.', `description_loc6` = 'Te enseña a tallar un zafiro empíreo chispeante.', `description_loc8` = 'Обучает огранке блестящего неземного сапфира.' WHERE `entry` = 35262; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spinelle cramoisi subtil', `name_loc3` = 'Vorlage: Fragiler Purpurspinell', `name_loc6` = 'Boceto: ojo de león sutil', `name_loc8` = 'Эскиз: изящная пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler un Spinelle cramoisi subtil.', `description_loc3` = 'Lehrt Euch das Schleifen eines fragilen Purpurspinells.', `description_loc6` = 'Te enseña a tallar un ojo de león sutil.', `description_loc8` = 'Обучает огранке изящной пунцовой шпинели.' WHERE `entry` = 35249; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion bombé', `name_loc3` = 'Vorlage: Kompaktes Löwenauge', `name_loc6` = 'Boceto: ojo de león sutil', `name_loc8` = 'Эскиз: матовый львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion bombé.', `description_loc3` = 'Lehrt Euch das Schleifen eines kompakten Löwenauges.', `description_loc6` = 'Te enseña a tallar un ojo de león sutil.', `description_loc8` = 'Обучает огранке матового львиного глаза.' WHERE `entry` = 35261; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Larme de spinelle cramoisi', `name_loc3` = 'Vorlage: Tränenförmiger Purpurspinell', `name_loc6` = 'Boceto: espinela carmesí luminosa', `name_loc8` = 'Эскиз: каплевидная пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler une Larme de spinelle cramoisi.', `description_loc3` = 'Lehrt Euch das Schleifen eines tränenförmigen Purpurspinells.', `description_loc6` = 'Te enseña a tallar una espinela carmesí luminosa.', `description_loc8` = 'Обучает огранке каплевидной пунцовой шпинели.' WHERE `entry` = 35250; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spinelle cramoisi runique', `name_loc3` = 'Vorlage: Runenverzierter Purpurspinell', `name_loc6` = 'Boceto: espinela carmesí luminosa', `name_loc8` = 'Эскиз: руническая пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler un Spinelle cramoisi runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenverzierten Purpurspinells.', `description_loc6` = 'Te enseña a tallar una espinela carmesí luminosa.', `description_loc8` = 'Обучает огранке рунической пунцовой шпинели.' WHERE `entry` = 35248; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe lumineuse', `name_loc3` = 'Vorlage: Glänzender Pyrostein', `name_loc6` = 'Boceto: piropiedra temeraria', `name_loc8` = 'Эскиз: светоносный огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe lumineuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Pyrosteins.', `description_loc6` = 'Te enseña a tallar una piropiedra temeraria.', `description_loc8` = 'Обучает огранке светоносного огнекамня.' WHERE `entry` = 35268; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre infusée', `name_loc3` = 'Vorlage: Energieerfüllter Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío destellante', `name_loc8` = 'Эскиз: заряженный аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre infusée.', `description_loc3` = 'Lehrt Euch das Schleifen eines energieerfüllten Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío destellante.', `description_loc8` = 'Обучает огранке заряженного аметиста Песни Теней.' WHERE `entry` = 35240; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre luminescente', `name_loc3` = 'Vorlage: Leuchtender Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío intemporal', `name_loc8` = 'Эскиз: светящийся аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre luminescente.', `description_loc3` = 'Lehrt Euch das Schleifen eines leuchtenden Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío intemporal.', `description_loc8` = 'Обучает огранке светящегося аметиста Песни Теней.' WHERE `entry` = 35239; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe luisante', `name_loc3` = 'Vorlage: Glitzernder Pyrostein', `name_loc6` = 'Boceto: amatista Cantosombrío destellante', `name_loc8` = 'Эскиз: блистающий огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe luisante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glitzernden Pyrosteins.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío destellante.', `description_loc8` = 'Обучает огранке блистающего огнекамня.' WHERE `entry` = 35266; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude d\'écume éblouissante', `name_loc3` = 'Vorlage: Schillernder Gischtsmaragd', `name_loc6` = 'Boceto: amatista Cantosombrío purificada', `name_loc8` = 'Эскиз: ослепительный морской изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude d\'écume éblouissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines schillernden Gischtsmaragds.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío purificada.', `description_loc8` = 'Обучает огранке ослепительного морского изумруда.' WHERE `entry` = 35251; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre équilibrée', `name_loc3` = 'Vorlage: Ausbalancierter Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío cambiante', `name_loc8` = 'Эскиз: сбалансированный аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre équilibrée.', `description_loc3` = 'Lehrt Euch das Schleifen eines ausbalancierten Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío cambiante.', `description_loc8` = 'Обучает огранке сбалансированного аметиста Песни Теней.' WHERE `entry` = 35238; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe pernicieuse', `name_loc3` = 'Vorlage: Tückischer Pyrostein', `name_loc6` = 'Boceto: piropiedra mortal', `name_loc8` = 'Эскиз: гибельный огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe pernicieuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines tückischen Pyrosteins.', `description_loc6` = 'Te enseña a tallar una piropiedra mortal.', `description_loc8` = 'Обучает огранке гибельного огнекамня.' WHERE `entry` = 35271; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Améthyste chantelombre royale', `name_loc3` = 'Vorlage: Königlicher Schattensangamethyst', `name_loc6` = 'Boceto: amatista Cantosombrío purificada', `name_loc8` = 'Эскиз: королевский аметист Песни Теней', `description_loc2` = 'Vous apprend à tailler une Améthyste chantelombre royale.', `description_loc3` = 'Lehrt Euch das Schleifen eines königlichen Schattensangamethysts.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío purificada.', `description_loc8` = 'Обучает огранке королевского аметиста Песни Теней.' WHERE `entry` = 35241; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de lion rigide', `name_loc3` = 'Vorlage: Massives Löwenauge', `name_loc6` = 'Boceto: zafiro empíreo rígido', `name_loc8` = 'Эскиз: прочный львиный глаз', `description_loc2` = 'Vous apprend à tailler un Oeil de lion rigide.', `description_loc3` = 'Lehrt Euch das Schleifen eines massiven Löwenauges.', `description_loc6` = 'Te enseña a tallar un zafiro empíreo rígido.', `description_loc8` = 'Обучает огранке прочного львиного глаза.' WHERE `entry` = 35259; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude d\'écume durcie', `name_loc3` = 'Vorlage: Robuster Gischtsmaragd', `name_loc6` = 'Boceto: esmeralda de espuma marina regia', `name_loc8` = 'Эскиз: отверделый морской изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude d\'écume durcie.', `description_loc3` = 'Lehrt Euch das Schleifen eines robusten Gischtsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda de espuma marina regia.', `description_loc8` = 'Обучает огранке отверделого морского изумруда.' WHERE `entry` = 35252; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Grand oeil de lion', `name_loc3` = 'Vorlage: Großes Löwenauge', `name_loc6` = 'Boceto: zafiro empíreo rígido', `name_loc8` = 'Эскиз: великий львиный глаз', `description_loc2` = 'Vous apprend à tailler un Grand oeil de lion.', `description_loc3` = 'Lehrt Euch das Schleifen eines großen Löwenauges.', `description_loc6` = 'Te enseña a tallar un zafiro empíreo rígido.', `description_loc8` = 'Обучает огранке великого львиного глаза.' WHERE `entry` = 35257; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pyrolithe voilée', `name_loc3` = 'Vorlage: Verschleierter Pyrostein', `name_loc6` = 'Boceto: amatista Cantosombrío velada', `name_loc8` = 'Эскиз: сокрытый огнекамень', `description_loc2` = 'Vous apprend à tailler une Pyrolithe voilée.', `description_loc3` = 'Lehrt Euch das Schleifen eines verschleierten Pyrosteins.', `description_loc6` = 'Te enseña a tallar una amatista Cantosombrío velada.', `description_loc8` = 'Обучает огранке сокрытого огнекамня.' WHERE `entry` = 35270; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Etoile d\'Elune solide', `name_loc3` = 'Vorlage: Gediegener Stern der Elune', `name_loc6` = 'Boceto: estrella de Elune sólida', `name_loc8` = 'Эскиз: безупречная Звезда Элуны', `description_loc2` = 'Vous apprend à tailler une Etoile d\'Elune solide.', `description_loc3` = 'Lehrt Euch das Schleifen eines gediegenen Sterns der Elune.', `description_loc6` = 'Te enseña a tallar una estrella de Elune sólida.', `description_loc8` = 'Обучение изготовлению твердой Звезды Элуны.' WHERE `entry` = 35304; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'aube rigide', `name_loc3` = 'Vorlage: Massiver Dämmerstein', `name_loc6` = 'Boceto: estrella de Elune rígida', `name_loc8` = 'Эскиз: твердый зоревик', `description_loc2` = 'Vous apprend à tailler une Pierre d\'aube rigide.', `description_loc3` = 'Lehrt Euch das Schleifen eines massiven Dämmersteins.', `description_loc6` = 'Te enseña a tallar una estrella de Elune rígida.', `description_loc8` = 'Обучение изготовлению твердого эоревика.' WHERE `entry` = 35307; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis vivant runique', `name_loc3` = 'Vorlage: Runenverzierter lebendiger Rubin', `name_loc6` = 'Boceto: rubí vivo luminoso', `name_loc8` = 'Эскиз: рунический животворный рубин', `description_loc2` = 'Vous apprend à tailler un Rubis vivant runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenverzierten lebendigen Rubins.', `description_loc6` = 'Te enseña a tallar un rubí vivo luminoso.', `description_loc8` = 'Обучение изготовлению рунического животворного рубина.' WHERE `entry` = 35305; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis vivant éclatant', `name_loc3` = 'Vorlage: Heller lebendiger Rubin', `name_loc6` = 'Boceto: rubí vivo delicado', `name_loc8` = 'Эскиз: яркий животворный рубин', `description_loc2` = 'Vous apprend à tailler un Rubis vivant éclatant.', `description_loc3` = 'Lehrt Euch das Schleifen eines hellen lebendigen Rubins.', `description_loc6` = 'Te enseña a tallar un rubí vivo delicado.', `description_loc8` = 'Обучает огранке яркого животворного рубина.' WHERE `entry` = 35306; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Spinelle cramoisi éclatant', `name_loc3` = 'Vorlage: Heller Purpurspinell', `name_loc6` = 'Boceto: espinela carmesí delicada', `name_loc8` = 'Эскиз: яркая пунцовая шпинель', `description_loc2` = 'Vous apprend à tailler un Spinelle cramoisi éclatant.', `description_loc3` = 'Lehrt Euch das Schleifen eines hellen Purpurspinells.', `description_loc6` = 'Te enseña a tallar una espinela carmesí delicada.', `description_loc8` = 'Обучает созданию яркой пунцовой шпинели.' WHERE `entry` = 35245; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantement de cape (Tisse-titan)', `name_loc3` = 'Formel: Umhang - Titangewebe', `name_loc6` = 'Fórmula: encantar capa: tejido de titán', `name_loc8` = 'Формула чар для плаща - ткань титанов', `description_loc2` = 'Vous apprend à enchanter de manière permanente une cape pour augmenter votre score de défense de 16. Nécessite un objet de niveau 60 ou supérieur.', `description_loc3` = 'Lehrt Euch, Umhänge dauerhaft so zu verzaubern, dass sie die Verteidigungswertung um 16 erhöhen. Erfordert einen Gegenstand der Stufe 60 oder höher.', `description_loc6` = 'Te enseña a encantar de forma permanente una capa para aumentar el índice de esquivar 16 p. Requiere un objeto de nivel 60 o superior.', `description_loc8` = 'Обучает наложению на плащ чар, повышающих рейтинг защиты на 16. Требуется предмет для персонажей не ниже 60-го уровня.' WHERE `entry` = 37347; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Enorme citrine durable', `name_loc3` = 'Vorlage: Solider Riesencitrin', `name_loc6` = 'Boceto: citrino enorme empecinado', `name_loc8` = 'Эскиз: надежный огромный цитрин', `description_loc2` = 'Vous apprend à tailler une Enorme citrine durable.', `description_loc3` = 'Lehrt Euch das Schleifen eines soliden Riesencitrins.', `description_loc6` = 'Te enseña a tallar un citrino enorme empecinado.', `description_loc8` = 'Обучает огранке надежного огромного цитрина.' WHERE `entry` = 41563; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Enorme citrine investie', `name_loc3` = 'Vorlage: Machterfüllter Riesencitrin', `name_loc6` = 'Boceto: citrino enorme luciente', `name_loc8` = 'Эскиз: наделенный силой огромный цитрин', `description_loc2` = 'Vous apprend à façonner une Enorme citrine investie.', `description_loc3` = 'Lehrt Euch das Schleifen eines machterfüllten Riesencitrins.', `description_loc6` = 'Te enseña a tallar un citrino enorme luciente.', `description_loc8` = 'Обучает огранке наделенного силой огромного цитрина.' WHERE `entry` = 41564; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Jade sombre vif', `name_loc3` = 'Vorlage: Klarer Nephrit', `name_loc6` = 'Boceto: jade oscuro liviano', `name_loc8` = 'Эскиз: насыщенный темный нефрит', `description_loc2` = 'Vous apprend à tailler un Jade sombre vif.', `description_loc3` = 'Lehrt Euch das Schleifen eines klaren Nephrits.', `description_loc6` = 'Te enseña a tallar un jade oscuro liviano.', `description_loc8` = 'Обучает огранке насыщенного темного нефрита.' WHERE `entry` = 41567; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Jade sombre de voyant', `name_loc3` = 'Vorlage: Nephrit des Sehers', `name_loc6` = 'Boceto: cristal de Sombras purificado', `name_loc8` = 'Эскиз: темный нефрит провидца', `description_loc2` = 'Vous apprend à tailler un Jade sombre de voyant.', `description_loc3` = 'Lehrt Euch das Schleifen eines Nephrits des Sehers.', `description_loc6` = 'Te enseña a tallar un cristal de Sombras purificado.', `description_loc8` = 'Обучает огранке темного нефрита провидца.' WHERE `entry` = 41568; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Jade sombre contracté', `name_loc3` = 'Vorlage: Spröder Nephrit', `name_loc6` = 'Boceto: jade oscuro radiante', `name_loc8` = 'Эскиз: плотный темный нефрит', `description_loc2` = 'Vous apprend à tailler un Jade sombre contracté.', `description_loc3` = 'Lehrt Euch das Schleifen eines spröden Nephrits.', `description_loc6` = 'Te enseña a tallar un jade oscuro radiante.', `description_loc8` = 'Обучает огранке плотного темного нефрита.' WHERE `entry` = 41570; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Jade sombre opaque', `name_loc3` = 'Vorlage: Opaker Nephrit', `name_loc6` = 'Boceto: jade oscuro turbio', `name_loc8` = 'Эскиз: непрозрачный темный нефрит', `description_loc2` = 'Vous apprend à façonner un Jade sombre opaque.', `description_loc3` = 'Lehrt Euch das Schleifen eines opaken Nephrits.', `description_loc6` = 'Te enseña a tallar un jade oscuro turbio.', `description_loc8` = 'Обучает огранке непрозрачного темного нефрита.' WHERE `entry` = 41573; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Halo de l\'automne rigide', `name_loc3` = 'Vorlage: Massiver Herbstglimmer', `name_loc6` = 'Boceto: zafiro celestial rígido', `name_loc8` = 'Эскиз: прочное сияние осени', `description_loc2` = 'Vous apprend à tailler un Halo de l\'automne rigide.', `description_loc3` = 'Lehrt Euch das Schleifen eines massiven Herbstglimmers.', `description_loc6` = 'Te enseña a tallar un zafiro celestial rígido.', `description_loc8` = 'Обучает огранке прочного сияния осени.' WHERE `entry` = 41580; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Saphir céleste satiné', `name_loc3` = 'Vorlage: Irisierender Himmelssaphir', `name_loc6` = 'Boceto: zafiro celestial chispeante', `name_loc8` = 'Эскиз: блестящий небесный сапфир', `description_loc2` = 'Vous apprend à tailler un Saphir céleste satiné.', `description_loc3` = 'Lehrt Euch das Schleifen eines irisierenden Himmelssaphirs.', `description_loc6` = 'Te enseña a tallar un zafiro celestial chispeante.', `description_loc8` = 'Обучает огранке блестящего небесного сапфира.' WHERE `entry` = 41581; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique luisante', `name_loc3` = 'Vorlage: Glitzernder Monarchentopas', `name_loc6` = 'Boceto: ópalo crepuscular destellante', `name_loc8` = 'Эскиз: блистающий императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique luisante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glitzernden Monarchentopas.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular destellante.', `description_loc8` = 'Обучает огранке блистающего императорского топаза.' WHERE `entry` = 41582; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique sobre', `name_loc3` = 'Vorlage: Reiner Monarchentopas', `name_loc6` = 'Boceto: topacio monarca diestro', `name_loc8` = 'Эскиз: застывший императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique sobre.', `description_loc3` = 'Lehrt Euch das Schleifen eines reinen Monarchentopas.', `description_loc6` = 'Te enseña a tallar un topacio monarca diestro.', `description_loc8` = 'Обучает огранке застывшего императорского топаза.' WHERE `entry` = 41687; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique voilée', `name_loc3` = 'Vorlage: Verschleierter Monarchentopas', `name_loc6` = 'Boceto: ópalo crepuscular velado', `name_loc8` = 'Эскиз: сокрытый императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique voilée.', `description_loc3` = 'Lehrt Euch das Schleifen eines verschleierten Monarchentopas.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular velado.', `description_loc8` = 'Обучает огранке сокрытого императорского топаза.' WHERE `entry` = 41688; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique lumineuse', `name_loc3` = 'Vorlage: Glänzender Monarchentopas', `name_loc6` = 'Boceto: topacio monarca temerario', `name_loc8` = 'Эскиз: светоносный императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique lumineuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Monarchentopas.', `description_loc6` = 'Te enseña a tallar un topacio monarca temerario.', `description_loc8` = 'Обучает огранке светоносного императорского топаза' WHERE `entry` = 41689; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière complexe', `name_loc3` = 'Vorlage: Aufwendiger Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque energizada', `name_loc8` = 'Эскиз: замысловатый лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière complexe.', `description_loc3` = 'Lehrt Euch das Schleifen eines aufwendigen Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque energizada.', `description_loc8` = 'Обучает огранке замысловатого лесного изумруда.' WHERE `entry` = 41694; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière diaprée', `name_loc3` = 'Vorlage: Flackernder Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque de relámpagos', `name_loc8` = 'Эскиз: лучистый лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière diaprée.', `description_loc3` = 'Lehrt Euch das Schleifen eines flackernden Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque de relámpagos.', `description_loc8` = 'Обучает огранке лучистого лесного изумруда.' WHERE `entry` = 41696; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière durcie', `name_loc3` = 'Vorlage: Robuster Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque regia', `name_loc8` = 'Эскиз: отверделый лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière durcie', `description_loc3` = 'Lehrt Euch das Schleifen eines robusten Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque regia.', `description_loc8` = 'Обучает огранке отверделого лесного изумруда.' WHERE `entry` = 41697; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière vive', `name_loc3` = 'Vorlage: Klarer Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque liviana', `name_loc8` = 'Эскиз: насыщенный лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière vive.', `description_loc3` = 'Lehrt Euch das Schleifen eines klaren Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque liviana.', `description_loc8` = 'Обучает огранке насыщенного лесного изумруда.' WHERE `entry` = 41698; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière de voyant', `name_loc3` = 'Vorlage: Waldsmaragd des Sehers', `name_loc6` = 'Boceto: ópalo crepuscular purificado', `name_loc8` = 'Эскиз: лесной изумруд провидца', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière de voyant.', `description_loc3` = 'Lehrt Euch das Schleifen eines Waldsmaragd des Sehers.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular purificado.', `description_loc8` = 'Обучает огранке лесного изумруда провидца.' WHERE `entry` = 41699; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule royale', `name_loc3` = 'Vorlage: Königlicher Zwielichtopal', `name_loc6` = 'Boceto: ópalo crepuscular purificado', `name_loc8` = 'Эскиз: королевский сумеречный опал', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule royale.', `description_loc3` = 'Lehrt Euch das Schleifen eines königlichen Zwielichtopals.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular purificado.', `description_loc8` = 'Обучает огранке королевского сумеречного опала.' WHERE `entry` = 41701; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule surpuissante', `name_loc3` = 'Vorlage: Imposanter Zwielichtopal', `name_loc6` = 'Boceto: esmeralda del bosque dentada', `name_loc8` = 'Эскиз: всевластный сумеречный опал', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule surpuissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines imposanten Zwielichtopals.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque dentada.', `description_loc8` = 'Обучает огранке всевластного сумеречного опала.' WHERE `entry` = 41702; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule régalienne', `name_loc3` = 'Vorlage: Majestätischer Zwielichtopal', `name_loc6` = 'Boceto: esmeralda del bosque regia', `name_loc8` = 'Эскиз: монарший сумеречный опал', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule régalienne.', `description_loc3` = 'Lehrt Euch das Schleifen eines majestätischen Zwielichtopals.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque regia.', `description_loc8` = 'Обучает огранке монаршего сумеречного опала.' WHERE `entry` = 41703; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Diamant flambeciel nitescent', `name_loc3` = 'Vorlage: Glühender Polarlichtdiamant', `name_loc6` = 'Boceto: diamante de llama celeste protegido', `name_loc8` = 'Эскиз: лучезарный алмаз небесного сияния', `description_loc2` = 'Vous apprend à tailler un Diamant flambeciel nitescent.', `description_loc3` = 'Lehrt Euch das Schleifen eines glühenden Polarlichtdiamanten.', `description_loc6` = 'Te enseña a tallar un diamante de llama celeste protegido.', `description_loc8` = 'Обучает огранке лучезарного алмаза небесного сияния.' WHERE `entry` = 41705; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis écarlate runique', `name_loc3` = 'Vorlage: Runenbeschriebener Scharlachrubin', `name_loc6` = 'Boceto: rubí escarlata luminoso', `name_loc8` = 'Эскиз: рунический алый рубин', `description_loc2` = 'Vous apprend à tailler un Rubis écarlate runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenbeschriebenen Scharlachrubins.', `description_loc6` = 'Te enseña a tallar un rubí escarlata luminoso.', `description_loc8` = 'Обучает огранке рунического алого рубина.' WHERE `entry` = 41718; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique pernicieuse', `name_loc3` = 'Vorlage: Tückischer Monarchentopas', `name_loc6` = 'Boceto: topacio monarca mortal', `name_loc8` = 'Эскиз: гибельный императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique pernicieuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines tückischen Monarchentopas.', `description_loc6` = 'Te enseña a tallar un topacio monarca mortal.', `description_loc8` = 'Обучает огранке гибельного императорского топаза.' WHERE `entry` = 41721; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique rougeoyante', `name_loc3` = 'Vorlage: Gleißender Monarchentopas', `name_loc6` = 'Boceto: topacio monarca de adepto', `name_loc8` = 'Эскиз: мерцающий императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique rougeoyante.', `description_loc3` = 'Lehrt Euch das Schleifen eines gleißenden Monarchentopas.', `description_loc6` = 'Te enseña a tallar un topacio monarca de adepto.', `description_loc8` = 'Обучает огранке мерцающего императорского топаза.' WHERE `entry` = 41722; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière scindée', `name_loc3` = 'Vorlage: Gesplitterter Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque brumosa', `name_loc8` = 'Эскиз: расколотый лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière scindée.', `description_loc3` = 'Lehrt Euch das Schleifen eines gesplitterten Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque brumosa.', `description_loc8` = 'Обучает огранке расколотого лесного изумруда.' WHERE `entry` = 41724; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule luminescente.', `name_loc3` = 'Vorlage: Leuchtender Zwielichtopal', `name_loc6` = 'Boceto: ópalo crepuscular intemporal', `name_loc8` = 'Эскиз: светящийся сумеречный опал', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule luminescente.', `description_loc3` = 'Lehrt Euch das Schleifen eines leuchtenden Zwielichtopals.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular intemporal.', `description_loc8` = 'Обучает огранке светящегося сумеречного опала.' WHERE `entry` = 41725; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique durable', `name_loc3` = 'Vorlage: Solider Monarchentopas', `name_loc6` = 'Boceto: topacio monarca empecinado', `name_loc8` = 'Эскиз: надежный императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique durable.', `description_loc3` = 'Lehrt Euch das Schleifen eines soliden Monarchentopas.', `description_loc6` = 'Te enseña a tallar un topacio monarca empecinado.', `description_loc8` = 'Обучает огранке надежного императорского топаза.' WHERE `entry` = 41730; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique investie', `name_loc3` = 'Vorlage: Machterfüllter Monarchentopas', `name_loc6` = 'Boceto: topacio monarca luciente', `name_loc8` = 'Эскиз: наделенный силой императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique investie.', `description_loc3` = 'Lehrt Euch das Schleifen eines machterfüllten Monarchentopas.', `description_loc6` = 'Te enseña a tallar un topacio monarca luciente.', `description_loc8` = 'Обучает огранке наделенного силой императорского топаза.' WHERE `entry` = 41732; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière contractée', `name_loc3` = 'Vorlage: Spröder Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque radiante', `name_loc8` = 'Эскиз: плотный лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière contractée.', `description_loc3` = 'Lehrt Euch das Schleifen eines spröden Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque radiante.', `description_loc8` = 'Обучает огранке плотного лесного изумруда.' WHERE `entry` = 41736; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière opaque', `name_loc3` = 'Vorlage: Opaker Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque turbia', `name_loc8` = 'Эскиз: непрозрачный лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière opaque.', `description_loc3` = 'Lehrt Euch das Schleifen eines opaken Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque turbia.', `description_loc8` = 'Обучает огранке непрозрачного лесного изумруда.' WHERE `entry` = 41739; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Halo de l\'automne bombé', `name_loc3` = 'Vorlage: Kompakter Herbstglimmer', `name_loc6` = 'Boceto: brillo del otoño sutil', `name_loc8` = 'Эскиз: матовое сияние осени', `description_loc2` = 'Vous apprend à tailler un Halo de l\'automne bombé.', `description_loc3` = 'Lehrt Euch das Schleifen eines kompakten Herbstglimmers.', `description_loc6` = 'Te enseña a tallar un brillo del otoño sutil.', `description_loc8` = 'Обучает огранке матового сияния осени.' WHERE `entry` = 41791; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière intemporelle', `name_loc3` = 'Vorlage: Zeitloser Waldsmaragd', `name_loc6` = 'Boceto: ópalo crepuscular intemporal', `name_loc8` = 'Эскиз: вневременной лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière intemporelle.', `description_loc3` = 'Lehrt Euch das Schleifen eines zeitlosen Waldsmaragds.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular intemporal.', `description_loc8` = 'Обучает огранке вневременного лесного изумруда.' WHERE `entry` = 41795; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule infusée', `name_loc3` = 'Vorlage: Energieerfüllter Zwielichtopal', `name_loc6` = 'Boceto: ópalo crepuscular destellante', `name_loc8` = 'Эскиз: заряженный сумеречный опал', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule infusée.', `description_loc3` = 'Lehrt Euch das Schleifen eines energieerfüllten Zwielichtopals.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular destellante.', `description_loc8` = 'Обучает огранке заряженного сумеречного опала.' WHERE `entry` = 41796; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis écarlate cassé', `name_loc3` = 'Vorlage: Frakturierter Scharlachrubin', `name_loc6` = 'Boceto: brillo del otoño pulido', `name_loc8` = 'Эскиз: растрескавшийся алый рубин', `description_loc2` = 'Vous apprend à tailler un Rubis écarlate cassé.', `description_loc3` = 'Lehrt Euch das Schleifen eines frakturierten Scharlachrubins.', `description_loc6` = 'Te enseña a tallar un brillo del otoño pulido.', `description_loc8` = 'Обучает огранке растрескавшегося алого рубина.' WHERE `entry` = 41817; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique de précision', `name_loc3` = 'Vorlage: Akkurater Monarchentopas', `name_loc6` = 'Boceto: ópalo crepuscular de precisión', `name_loc8` = 'Эскиз: идеально ограненный императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique de précision.', `description_loc3` = 'Lehrt Euch das Schleifen eines akkuraten Monarchentopas.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular de precisión.', `description_loc8` = 'Обучает огранке идеально ограненного императорского топаза.' WHERE `entry` = 41818; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule de défenseur', `name_loc3` = 'Vorlage: Zwielichtopal des Verteidigers', `name_loc6` = 'Boceto: ópalo crepuscular de defensor', `name_loc8` = 'Эскиз: сумеречный опал защитника', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule de défenseur.', `description_loc3` = 'Lehrt Euch das Schleifen eines Zwielichtopals des Verteidigers.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular de defensor.', `description_loc8` = 'Обучает огранке сумеречного опала защитника.' WHERE `entry` = 41820; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de dragon éclatant', `name_loc3` = 'Vorlage: Helles Drachenauge', `name_loc6` = 'Boceto: ojo de dragón delicado', `name_loc8` = 'Эскиз: яркое Око дракона', `description_loc2` = 'Vous apprend à tailler un Oeil de dragon éclatant.', `description_loc3` = 'Lehrt Euch das Schleifen eines hellen Drachenauges.', `description_loc6` = 'Te enseña a tallar un ojo de dragón delicado.', `description_loc8` = 'Обучает огранке яркого Ока дракона.' WHERE `entry` = 42299; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de dragon cassé', `name_loc3` = 'Vorlage: Frakturiertes Drachenauge', `name_loc6` = 'Boceto: ojo de dragón liso', `name_loc8` = 'Эскиз: растрескавшееся Око дракона', `description_loc2` = 'Vous apprend à tailler un Oeil de dragon cassé.', `description_loc3` = 'Lehrt Euch das Schleifen eines frakturierten Drachenauges.', `description_loc6` = 'Te enseña a tallar un ojo de dragón liso.', `description_loc8` = 'Обучает огранке растрескавшегося Ока дракона.' WHERE `entry` = 42303; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de dragon satiné', `name_loc3` = 'Vorlage: Irisierendes Drachenauge', `name_loc6` = 'Boceto: ojo de dragón chispeante', `name_loc8` = 'Эскиз: блестящее Око дракона', `description_loc2` = 'Vous apprend à tailler un Oeil de dragon satiné.', `description_loc3` = 'Lehrt Euch das Schleifen eines irisierenden Drachenauges.', `description_loc6` = 'Te enseña a tallar un ojo de dragón chispeante.', `description_loc8` = 'Обучает огранке блестящего Ока дракона.' WHERE `entry` = 42304; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de dragon runique', `name_loc3` = 'Vorlage: Runenbeschriebenes Drachenauge', `name_loc6` = 'Boceto: ojo de dragón luminoso', `name_loc8` = 'Эскиз: руническое Око дракона', `description_loc2` = 'Vous apprend à tailler un Oeil de dragon runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenbeschriebenen Drachenauges.', `description_loc6` = 'Te enseña a tallar un ojo de dragón luminoso.', `description_loc8` = 'Обучает огранке рунического Ока дракона.' WHERE `entry` = 42309; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de dragon bombé', `name_loc3` = 'Vorlage: Kompaktes Drachenauge', `name_loc6` = 'Boceto: ojo de dragón sutil', `name_loc8` = 'Эскиз: матовое Око дракона', `description_loc2` = 'Vous apprend à tailler un Oeil de dragon bombé.', `description_loc3` = 'Lehrt Euch das Schleifen eines kompakten Drachenauges.', `description_loc6` = 'Te enseña a tallar un ojo de dragón sutil.', `description_loc8` = 'Обучает огранке матового Ока дракона.' WHERE `entry` = 42315; +UPDATE `locales_item` SET `name_loc2` = 'Patron : Giberne en écailles de dragon', `name_loc3` = 'Muster: Drachenschuppenmunitionsbeutel', `name_loc6` = 'Patrón estropeado', `name_loc8` = 'Выкройка: подсумок из драконьей чешуи', `description_loc2` = 'Vous apprend à confectionner une Giberne en écailles de dragon.', `description_loc3` = 'Lehrt Euch die Herstellung eines Drachenschuppenmunitionsbeutels.', `description_loc6` = 'Aunque hayas leído antes este patrón, los elementos lo estropearon así que lo has olvidado de todas formas.', `description_loc8` = 'Обучает изготовлению подсумка из драконьей чешуи.' WHERE `entry` = 44511; +UPDATE `locales_item` SET `name_loc2` = 'Patron : Carquois nérubien renforcé', `name_loc3` = 'Muster: Verstärkter nerubischer Köcher', `name_loc6` = 'Patrón estropeado', `name_loc8` = 'Выкройка: усиленный нерубский колчан', `description_loc2` = 'Vous apprend à confectionner un Carquois nérubien renforcé.', `description_loc3` = 'Lehrt Euch die Herstellung eines verstärkten nerubischen Köchers.', `description_loc6` = 'Este patrón que una vez fue útil, ha sido estropeado por los elementos.', `description_loc8` = 'Обучает изготовлению усиленного нерубского колчана.' WHERE `entry` = 44512; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Topaze monarchique gravée', `name_loc3` = 'Vorlage: Geätzter Monarchentopas', `name_loc6` = 'Boceto: ópalo crepuscular con grabados', `name_loc8` = 'Эскиз: гравированный императорский топаз', `description_loc2` = 'Vous apprend à tailler une Topaze monarchique gravée.', `description_loc3` = 'Lehrt Euch das Schleifen eines geätzten Monarchentopas.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular con grabados.', `description_loc8` = 'Обучает огранке гравированного императорского топаза.' WHERE `entry` = 41777; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Emeraude forestière rayonnante', `name_loc3` = 'Vorlage: Feuriger Waldsmaragd', `name_loc6` = 'Boceto: esmeralda del bosque de relámpagos', `name_loc8` = 'Эскиз: сияющий лесной изумруд', `description_loc2` = 'Vous apprend à tailler une Emeraude forestière rayonnante.', `description_loc3` = 'Lehrt Euch das Schleifen eines feurigen Waldsmaragds.', `description_loc6` = 'Te enseña a tallar una esmeralda del bosque de relámpagos.', `description_loc8` = 'Обучает огранке сияющего лесного изумруда.' WHERE `entry` = 41782; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule ténue', `name_loc3` = 'Vorlage: Zarter Zwielichtopal', `name_loc6` = 'Boceto: ópalo crepuscular destellante', `name_loc8` = 'Эскиз: непрочный сумеречный опал', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule ténue.', `description_loc3` = 'Lehrt Euch das Schleifen eines zarten Zwielichtopals.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular destellante.', `description_loc8` = 'Обучает огранке непрочного сумеречного опала.' WHERE `entry` = 41785; +UPDATE `locales_item` SET `name_loc2` = 'Tablette de Totem de grâce aérienne III', `name_loc3` = 'Schrifttafel des Totems der luftgleichen Anmut III', `name_loc6` = 'Tablilla de Tótem Gracia del Aire', `name_loc8` = 'Табличка Тотема легкости воздуха III', `description_loc2` = 'Vous apprend Totem de Grâce aérienne (Rang 3).', `description_loc3` = 'Lehrt \'Totem der luftgleichen Anmut\' (Rang 3).', `description_loc6` = 'Los elementos parecen haber deteriorado este objeto y ya no se puede leer.', `description_loc8` = 'Обучает заклинанию \"Тотем легкости воздуха\" (уровень 3).' WHERE `entry` = 21293; +UPDATE `locales_item` SET `name_loc2` = 'Recueil : Poison mortel V', `name_loc3` = 'Leitfaden des tödlichen Gifts V', `name_loc6` = 'Vademécum de Veneno mortal', `name_loc8` = 'Книга Смертельного яда V', `description_loc2` = 'Vous apprend Poison mortel (Rang 5).', `description_loc3` = 'Lehrt \'Tödliches Gift\' (Rang 5).', `description_loc6` = 'Enseña Veneno Mortal (Rango 5).', `description_loc8` = 'Обучает заклинанию \"Смертельный яд\" (Уровень 5).' WHERE `entry` = 21302; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis écarlate subtil', `name_loc3` = 'Vorlage: Fragiler Scharlachrubin', `name_loc6` = 'Boceto: brillo del otoño sutil', `name_loc8` = 'Эскиз: изящный алый рубин', `description_loc2` = 'Vous apprend à tailler un Rubis écarlate subtil.', `description_loc3` = 'Lehrt Euch das Schleifen eines fragilen Scharlachrubins.', `description_loc6` = 'Te enseña a tallar un brillo del otoño sutil.', `description_loc8` = 'Обучает огранке изящного алого рубина.' WHERE `entry` = 41719; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Opale du crépuscule changeante', `name_loc3` = 'Vorlage: Unbeständiger Zwielichtopal', `name_loc6` = 'Boceto: ópalo crepuscular cambiante', `name_loc8` = 'Эскиз: изменчивый сумеречный опал', `description_loc2` = 'Vous apprend à tailler une Opale du crépuscule changeante.', `description_loc3` = 'Lehrt Euch das Schleifen eines unbeständigen Zwielichtopals.', `description_loc6` = 'Te enseña a tallar un ópalo crepuscular cambiante.', `description_loc8` = 'Обучает огранке изменчивого сумеречного опала.' WHERE `entry` = 41747; +UPDATE `locales_item` SET `name_loc2` = 'Formule : Enchantements de brassards (Endurance majeure)', `name_loc3` = 'Formel: Armschiene - Erhebliche Ausdauer', `name_loc6` = 'Fórmula: encantar brazales: aguante sublime', `name_loc8` = 'Формула чар для наручей - выносливость V', `description_loc2` = 'Vous apprend à enchanter de manière permanente des brassards pour augmenter votre endurance de 40. Nécessite un objet de niveau 60 ou supérieur.', `description_loc3` = 'Lehrt Euch, Armschienen dauerhaft zu verzaubern, sodass sie die Ausdauer um 40 erhöhen. Erfordert einen Gegenstand der Stufe 60 oder höher.', `description_loc6` = 'Te enseña a encantar de forma permanente unos brazales para aumentar el aguante 40 p. Requiere un objeto de nivel 60 o superior.', `description_loc8` = 'Обучает наложению на наручи чар, повышающих выносливость на 40. Требуется предмет для персонажей не ниже 60-го уровня.' WHERE `entry` = 44944; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis cardinal éclatant', `name_loc3` = 'Vorlage: Heller Kardinalsrubin', `name_loc6` = 'Boceto: rubí cárdeno delicado', `name_loc8` = 'Эскиз: яркий багровый рубин', `description_loc2` = 'Vous apprend à tailler un Rubis cardinal éclatant.', `description_loc3` = 'Lehrt Euch das Schleifen eines hellen Kardinalsrubins.', `description_loc6` = 'Te enseña a tallar un rubí cárdeno delicado.', `description_loc8` = 'Обучает огранке яркого багрового рубина.' WHERE `entry` = 46919; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis cardinal cassé', `name_loc3` = 'Vorlage: Frakturierter Kardinalsrubin', `name_loc6` = 'Boceto: ámbar del rey liso', `name_loc8` = 'Эскиз: растрескавшийся багровый рубин', `description_loc2` = 'Vous apprend à tailler un Rubis cardinal cassé.', `description_loc3` = 'Lehrt Euch das Schleifen eines frakturierten Kardinalsrubins.', `description_loc6` = 'Te enseña a tallar un ámbar del rey liso.', `description_loc8` = 'Обучает огранке растрескавшегося багрового рубина.' WHERE `entry` = 46921; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis cardinal runique', `name_loc3` = 'Vorlage: Runenbeschriebener Kardinalsrubin', `name_loc6` = 'Boceto: rubí cárdeno luminoso', `name_loc8` = 'Эскиз: рунический багровый рубин', `description_loc2` = 'Vous apprend à tailler un Rubis cardinal runique.', `description_loc3` = 'Lehrt Euch das Schleifen eines runenbeschriebenen Kardinalsrubins.', `description_loc6` = 'Te enseña a tallar un rubí cárdeno luminoso.', `description_loc8` = 'Обучает огранке рунического багрового рубина.' WHERE `entry` = 46916; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Rubis cardinal subtil', `name_loc3` = 'Vorlage: Fragiler Kardinalsrubin', `name_loc6` = 'Boceto: ámbar del rey sutil', `name_loc8` = 'Эскиз: изящный багровый рубин', `description_loc2` = 'Vous apprend à tailler un Rubis cardinal subtil.', `description_loc3` = 'Lehrt Euch das Schleifen eines fragilen Kardinalsrubins.', `description_loc6` = 'Te enseña a tallar un ámbar del rey sutil.', `description_loc8` = 'Обучает огранке изящного багрового рубина.' WHERE `entry` = 46922; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Ambre du roi brillant', `name_loc3` = 'Vorlage: Glänzender Königsbernstein', `name_loc6` = 'Boceto: rubí cárdeno luminoso', `name_loc8` = 'Эскиз: сверкающий царский янтарь', `description_loc2` = 'Vous apprend à tailler de l\'Ambre du roi brillant.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Königsbernsteins.', `description_loc6` = 'Te enseña a tallar un rubí cárdeno luminoso.', `description_loc8` = 'Обучает огранке сверкающего царского янтаря.' WHERE `entry` = 46930; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Ambre du roi rigide', `name_loc3` = 'Vorlage: Massiver Königsbernstein', `name_loc6` = 'Boceto: circón majestuoso rígido', `name_loc8` = 'Эскиз: прочный царский янтарь', `description_loc2` = 'Vous apprend à tailler de l\'Ambre du roi rigide.', `description_loc3` = 'Lehrt Euch das Schleifen eines massiven Königsbernsteins.', `description_loc6` = 'Te enseña a tallar un circón majestuoso rígido.', `description_loc8` = 'Обучает огранке прочного царского янтаря.' WHERE `entry` = 46928; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Ambre du roi bombé', `name_loc3` = 'Vorlage: Kompakter Königsbernstein', `name_loc6` = 'Boceto: ámbar del rey sutil', `name_loc8` = 'Эскиз: матовый царский янтарь', `description_loc2` = 'Vous apprend à tailler de l\'Ambre du roi bombé.', `description_loc3` = 'Lehrt Euch das Schleifen eines kompakten Königsbernsteins.', `description_loc6` = 'Te enseña a tallar un ámbar del rey sutil.', `description_loc8` = 'Обучает огранке матового царского янтаря.' WHERE `entry` = 46931; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine de précision', `name_loc3` = 'Vorlage: Akkurater Ametrin', `name_loc6` = 'Boceto: piedra de terror de precisión', `name_loc8` = 'Эскиз: идеально ограненный аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine de précision.', `description_loc3` = 'Lehrt Euch das Schleifen eines akkuraten Ametrins.', `description_loc6` = 'Te enseña a tallar una piedra de terror de precisión.', `description_loc8` = 'Обучает огранке идеально ограненного аметрина.' WHERE `entry` = 47010; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine durable', `name_loc3` = 'Vorlage: Solider Ametrin', `name_loc6` = 'Boceto: ametrino empecinado', `name_loc8` = 'Эскиз: надежный аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine durable.', `description_loc3` = 'Lehrt Euch das Schleifen eines soliden Ametrins.', `description_loc6` = 'Te enseña a tallar un ametrino empecinado.', `description_loc8` = 'Обучает огранке надежного аметрина.' WHERE `entry` = 46952; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine investie', `name_loc3` = 'Vorlage: Machterfüllter Ametrin', `name_loc6` = 'Boceto: ametrino luciente', `name_loc8` = 'Эскиз: наделенный силой аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine investie.', `description_loc3` = 'Lehrt Euch das Schleifen eines machterfüllten Ametrins.', `description_loc6` = 'Te enseña a tallar un ametrino luciente.', `description_loc8` = 'Обучает огранке наделенного силой аметрина.' WHERE `entry` = 47016; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine gravée', `name_loc3` = 'Vorlage: Geätzter Ametrin', `name_loc6` = 'Boceto: piedra de terror con grabados', `name_loc8` = 'Эскиз: гравированный аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine gravée.', `description_loc3` = 'Lehrt Euch das Schleifen eines geätzten Ametrins.', `description_loc6` = 'Te enseña a tallar una piedra de terror con grabados.', `description_loc8` = 'Обучает огранке гравированного аметрина.' WHERE `entry` = 46953; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine rougeoyante', `name_loc3` = 'Vorlage: Gleißender Ametrin', `name_loc6` = 'Boceto: ametrino de adepto', `name_loc8` = 'Эскиз: мерцающий аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine rougeoyante.', `description_loc3` = 'Lehrt Euch das Schleifen eines gleißenden Ametrins.', `description_loc6` = 'Te enseña a tallar un ametrino de adepto.', `description_loc8` = 'Обучает огранке мерцающего аметрина.' WHERE `entry` = 47012; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine luisante', `name_loc3` = 'Vorlage: Glitzernder Ametrin', `name_loc6` = 'Boceto: piedra de terror destellante', `name_loc8` = 'Эскиз: блистающий аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine luisante.', `description_loc3` = 'Lehrt Euch das Schleifen eines glitzernden Ametrins.', `description_loc6` = 'Te enseña a tallar una piedra de terror destellante.', `description_loc8` = 'Обучает огранке блистающего аметрина.' WHERE `entry` = 47008; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine lumineuse', `name_loc3` = 'Vorlage: Glänzender Ametrin', `name_loc6` = 'Boceto: piedra de terror purificada', `name_loc8` = 'Эскиз: светоносный аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine lumineuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines glänzenden Ametrins.', `description_loc6` = 'Te enseña a tallar una piedra de terror purificada.', `description_loc8` = 'Обучает огранке светоносного аметрина.' WHERE `entry` = 46947; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine en parfait état', `name_loc3` = 'Vorlage: Makelloser Ametrin', `name_loc6` = 'Boceto: piedra de terror destellante', `name_loc8` = 'Эскиз: нетронутый аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine en parfait état.', `description_loc3` = 'Lehrt Euch das Schleifen eines makellosen Ametrins.', `description_loc6` = 'Te enseña a tallar una piedra de terror destellante.', `description_loc8` = 'Обучает огранке нетронутого аметрина.' WHERE `entry` = 46956; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine sobre', `name_loc3` = 'Vorlage: Reiner Ametrin', `name_loc6` = 'Boceto: ametrino diestro', `name_loc8` = 'Эскиз: застывший аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine sobre.', `description_loc3` = 'Lehrt Euch das Schleifen eines reinen Ametrins.', `description_loc6` = 'Te enseña a tallar un ametrino diestro.', `description_loc8` = 'Обучает огранке застывшего аметрина.' WHERE `entry` = 47023; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine voilée', `name_loc3` = 'Vorlage: Verschleierter Ametrin', `name_loc6` = 'Boceto: piedra de terror velada', `name_loc8` = 'Эскиз: сокрытый аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine voilée.', `description_loc3` = 'Lehrt Euch das Schleifen eines verschleierten Ametrins.', `description_loc6` = 'Te enseña a tallar una piedra de terror velada.', `description_loc8` = 'Обучает огранке сокрытого аметрина.' WHERE `entry` = 46951; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Amétrine pernicieuse', `name_loc3` = 'Vorlage: Tückischer Ametrin', `name_loc6` = 'Boceto: ametrino mortal', `name_loc8` = 'Эскиз: гибельный аметрин', `description_loc2` = 'Vous apprend à tailler une Amétrine pernicieuse.', `description_loc3` = 'Lehrt Euch das Schleifen eines tückischen Ametrins.', `description_loc6` = 'Te enseña a tallar un ametrino mortal.', `description_loc8` = 'Обучает огранке гибельного аметрина.' WHERE `entry` = 47011; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul éblouissant', `name_loc3` = 'Vorlage: Schillerndes Auge von Zul', `name_loc6` = 'Boceto: piedra de terror purificada', `name_loc8` = 'Эскиз: ослепительное Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul éblouissant.', `description_loc3` = 'Lehrt Euch das Schleifen eines schillernden Auges von Zul.', `description_loc6` = 'Te enseña a tallar una piedra de terror purificada.', `description_loc8` = 'Обучает огранке ослепительного Ока Зула.' WHERE `entry` = 46900; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul durci', `name_loc3` = 'Vorlage: Robustes Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul regio', `name_loc8` = 'Эскиз: отверделое Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul durci.', `description_loc3` = 'Lehrt Euch das Schleifen eines robusten Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul regio.', `description_loc8` = 'Обучает огранке отверделого Ока Зула.' WHERE `entry` = 46897; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul complexe', `name_loc3` = 'Vorlage: Aufwendiges Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul energizado', `name_loc8` = 'Эскиз: замысловатое Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul complexe.', `description_loc3` = 'Lehrt Euch das Schleifen eines aufwendigen Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul energizado.', `description_loc8` = 'Обучает огранке замысловатого Ока Зула.' WHERE `entry` = 46910; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul diapré', `name_loc3` = 'Vorlage: Flackerndes Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul de relámpagos', `name_loc8` = 'Эскиз: лучистое Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul diapré.', `description_loc3` = 'Lehrt Euch das Schleifen eines flackernden Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul de relámpagos.', `description_loc8` = 'Обучает огранке лучистого Ока Зула.' WHERE `entry` = 46909; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul opaque', `name_loc3` = 'Vorlage: Opakes Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul turbio', `name_loc8` = 'Эскиз: непрозрачное Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul opaque.', `description_loc3` = 'Lehrt Euch das Schleifen eines opaken Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul turbio.', `description_loc8` = 'Обучает огранке непрозрачного Ока Зула.' WHERE `entry` = 46914; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul de voyant', `name_loc3` = 'Vorlage: Seherauge von Zul', `name_loc6` = 'Boceto: piedra de terror purificada', `name_loc8` = 'Эскиз: Око Зула провидца', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul de voyant', `description_loc3` = 'Lehrt Euch das Schleifen eines Seherauges von Zul.', `description_loc6` = 'Te enseña a tallar una piedra de terror purificada.', `description_loc8` = 'Обучает огранке Ока Зула провидца.' WHERE `entry` = 46903; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul rayonnant', `name_loc3` = 'Vorlage: Feuriges Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul de relámpagos', `name_loc8` = 'Эскиз: сияющее Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul rayonnant.', `description_loc3` = 'Lehrt Euch das Schleifen eines feurigen Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul de relámpagos.', `description_loc8` = 'Обучает огранке сияющего Ока Зула.' WHERE `entry` = 46907; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul scindé', `name_loc3` = 'Vorlage: Gesplittertes Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul brumoso', `name_loc8` = 'Эскиз: расколотое Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul scindé.', `description_loc3` = 'Lehrt Euch das Schleifen eines gesplitterten Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul brumoso.', `description_loc8` = 'Обучает огранке расколотого Ока Зула.' WHERE `entry` = 46906; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul contracté', `name_loc3` = 'Vorlage: Sprödes Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul radiante', `name_loc8` = 'Эскиз: плотное Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul contracté.', `description_loc3` = 'Lehrt Euch das Schleifen eines spröden Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul radiante.', `description_loc8` = 'Обучает огранке плотного Ока Зула.' WHERE `entry` = 46908; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul intemporel', `name_loc3` = 'Vorlage: Zeitloses Auge von Zul', `name_loc6` = 'Boceto: piedra de terror intemporal', `name_loc8` = 'Эскиз: вневременное Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul intemporel.', `description_loc3` = 'Lehrt Euch das Schleifen eines zeitlosen Auges von Zul.', `description_loc6` = 'Te enseña a tallar una piedra de terror intemporal.', `description_loc8` = 'Обучает огранке вневременного Ока Зула.' WHERE `entry` = 46902; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Oeil de Zul vif', `name_loc3` = 'Vorlage: Klares Auge von Zul', `name_loc6` = 'Boceto: ojo de Zul liviano', `name_loc8` = 'Эскиз: насыщенное Око Зула', `description_loc2` = 'Vous apprend à tailler un Oeil de Zul vif.', `description_loc3` = 'Lehrt Euch das Schleifen eines klaren Auges von Zul.', `description_loc6` = 'Te enseña a tallar un ojo de Zul liviano.', `description_loc8` = 'Обучает огранке насыщенного Ока Зула.' WHERE `entry` = 46899; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'effroi équilibrée', `name_loc3` = 'Vorlage: Ausbalancierter Schreckensstein', `name_loc6` = 'Boceto: piedra de terror cambiante', `name_loc8` = 'Эскиз: сбалансированный страхолит', `description_loc2` = 'Vous apprend à tailler une Pierre d\'effroi équilibrée.', `description_loc3` = 'Lehrt Euch das Schleifen eines ausbalancierten Schreckenssteins.', `description_loc6` = 'Te enseña a tallar una piedra de terror cambiante.', `description_loc8` = 'Обучает огранке сбалансированного страхолита.' WHERE `entry` = 46934; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'effroi luminescente', `name_loc3` = 'Vorlage: Leuchtender Schreckensstein', `name_loc6` = 'Boceto: piedra de terror intemporal', `name_loc8` = 'Эскиз: светящийся страхолит', `description_loc2` = 'Vous apprend à tailler une Pierre d\'effroi luminescente.', `description_loc3` = 'Lehrt Euch das Schleifen eines leuchtenden Schreckenssteins.', `description_loc6` = 'Te enseña a tallar una piedra de terror intemporal.', `description_loc8` = 'Обучает огранке светящегося страхолита.' WHERE `entry` = 46936; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'effroi infusée', `name_loc3` = 'Vorlage: Energieerfüllter Schreckensstein', `name_loc6` = 'Boceto: piedra de terror destellante', `name_loc8` = 'Эскиз: заряженный страхолит', `description_loc2` = 'Vous apprend à tailler une Pierre d\'effroi infusée.', `description_loc3` = 'Lehrt Euch das Schleifen eines energieerfüllten Schreckenssteins.', `description_loc6` = 'Te enseña a tallar una piedra de terror destellante.', `description_loc8` = 'Обучает огранке заряженного страхолита.' WHERE `entry` = 46945; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'effroi surpuissante', `name_loc3` = 'Vorlage: Imposanter Schreckensstein', `name_loc6` = 'Boceto: ojo de Zul dentado', `name_loc8` = 'Эскиз: всевластный страхолит', `description_loc2` = 'Vous apprend à tailler une Pierre d\'effroi surpuissante.', `description_loc3` = 'Lehrt Euch das Schleifen eines imposanten Schreckenssteins.', `description_loc6` = 'Te enseña a tallar un ojo de Zul dentado.', `description_loc8` = 'Обучает огранке всевластного страхолита.' WHERE `entry` = 46944; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'effroi régalienne', `name_loc3` = 'Vorlage: Majestätischer Schreckensstein', `name_loc6` = 'Boceto: ojo de Zul regio', `name_loc8` = 'Эскиз: монарший страхолит', `description_loc2` = 'Vous apprend à tailler une Pierre d\'effroi régalienne.', `description_loc3` = 'Lehrt Euch das Schleifen eines majestätischen Schreckenssteins.', `description_loc6` = 'Te enseña a tallar un ojo de Zul regio.', `description_loc8` = 'Обучает огранке монаршего страхолита.' WHERE `entry` = 46940; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'effroi royale', `name_loc3` = 'Vorlage: Königlicher Schreckensstein', `name_loc6` = 'Boceto: piedra de terror purificada', `name_loc8` = 'Эскиз: королевский страхолит', `description_loc2` = 'Vous apprend à tailler une Pierre d\'effroi royale.', `description_loc3` = 'Lehrt Euch das Schleifen eines königlichen Schreckenssteins.', `description_loc6` = 'Te enseña a tallar una piedra de terror purificada.', `description_loc8` = 'Обучает огранке королевского страхолита.' WHERE `entry` = 46939; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Pierre d\'effroi ténue', `name_loc3` = 'Vorlage: Zarter Schreckensstein', `name_loc6` = 'Boceto: piedra de terror destellante', `name_loc8` = 'Эскиз: непрочный страхолит', `description_loc2` = 'Vous apprend à tailler une Pierre d\'effroi ténue.', `description_loc3` = 'Lehrt Euch das Schleifen eines zarten Schreckenssteins.', `description_loc6` = 'Te enseña a tallar una piedra de terror destellante.', `description_loc8` = 'Обучает огранке непрочного страхолита.' WHERE `entry` = 46946; +UPDATE `locales_item` SET `name_loc2` = 'Dessin : Zircon majestueux satiné', `name_loc3` = 'Vorlage: Irisierender Fürstenzirkon', `name_loc6` = 'Boceto: circón majestuoso chispeante', `name_loc8` = 'Эскиз: блестящий величественный циркон', `description_loc2` = 'Vous apprend à tailler un Zircon majestueux satiné.', `description_loc3` = 'Lehrt Euch das Schleifen eines irisierenden Fürstenzirkons.', `description_loc6` = 'Te enseña a tallar un circón majestuoso chispeante.', `description_loc8` = 'Обучает огранке блестящего величественного циркона.' WHERE `entry` = 46927; +UPDATE `locales_item` SET `name_loc3` = 'Pläne: Splittermunition', `name_loc6` = 'Esquema estropeado', `name_loc8` = 'Чертеж: осколочные патроны', `description_loc3` = 'Lehrt Euch die Herstellung von Splittermunition.', `description_loc6` = 'Te enseña a hacer balas destrozadoras.', `description_loc8` = 'Обучает изготовлению осколочных патронов.' WHERE `entry` = 52022; +UPDATE `locales_item` SET `name_loc3` = 'Pläne: Eisklingenpfeil', `name_loc6` = 'Esquema estropeado', `name_loc8` = 'Чертеж: стрела с ледяным наконечником', `description_loc3` = 'Lehrt Euch die Herstellung von Eisklingenpfeilen.', `description_loc6` = 'Te enseña a hacer flechas de hoja de hielo.', `description_loc8` = 'Обучает изготовлению стрелы с ледяным наконечником.' WHERE `entry` = 52023; +UPDATE `locales_item` SET `name_loc3` = 'Technik: Glyphe \'Ewiges Wasser\'', `name_loc6` = 'Técnica: Glifo de Escudo de maná', `name_loc8` = 'Технология: символ извечной воды', `description_loc3` = 'Lehrt Euch, wie man die Glyphe \'Ewiges Wasser\' schreibt.', `description_loc6` = 'Te enseña a inscribir un Glifo de Escudo de maná.', `description_loc8` = 'Обучает начертанию символа извечной воды.' WHERE `entry` = 50166; +UPDATE `locales_item` SET `name_loc3` = 'Technik: Glyphe \'Hastige Verjüngung\'', `name_loc6` = 'Papiro mohoso', `name_loc8` = 'Технология: символ стремительного омоложения', `description_loc3` = 'Lehrt Euch, wie man die Glyphe \'Hastige Verjüngung\' schreibt.', `description_loc6` = 'Te enseña a inscribir un Glifo de Rejuvenecimiento Rápido.', `description_loc8` = 'Обучает начертанию символа стремительного омоложения.' WHERE `entry` = 50167; +UPDATE `locales_item` SET `name_loc3` = 'Technik: Glyphe \'Schneller Verfall\'', `name_loc6` = 'Técnica: Glifo de Latigazo doloroso', `name_loc8` = 'Технология: символ быстрого разложения', `description_loc3` = 'Lehrt Euch, wie man die Glyphe \'Schneller Verfall\' schreibt.', `description_loc6` = 'Te enseña a inscribir un Glifo de Latigazo doloroso.', `description_loc8` = 'Обучает начертанию символа быстрого разложения.' WHERE `entry` = 50168; + +-- class:12 (quest) +UPDATE `locales_item` SET `name_loc2` = 'Masque rouge en lin', `name_loc3` = 'Rotes Leinenkopftuch', `name_loc6` = 'Restos de lino', `name_loc8` = 'Красная льняная бандана' WHERE `entry` = 1019; +UPDATE `locales_item` SET `name_loc2` = 'Une lettre qui n\'a pas été envoyée.', `name_loc3` = 'Ein nie abgeschickter Brief', `name_loc6` = 'Una carta sin enviar', `name_loc8` = 'Неотосланное письмо', `description_loc2` = 'Une lettre trouvée sur Edwin VanCleef.', `description_loc3` = 'Ein Brief, der bei Edwin van Cleef gefunden wurde.', `description_loc6` = 'Una carta que llevaba Edwin VanCleef encima.', `description_loc8` = 'Письмо найдено на теле Эдвина ван Клифа.' WHERE `entry` = 2874; +UPDATE `locales_item` SET `name_loc2` = 'Larme de crocilisque', `name_loc3` = 'Krokiliskenträne', `name_loc6` = 'Sangre frenética', `name_loc8` = 'Слеза кроколиска' WHERE `entry` = 2939; +UPDATE `locales_item` SET `name_loc2` = 'Les découvertes de Johaan', `name_loc3` = 'Johaans Funde', `name_loc6` = 'Conclusiones de Holland', `name_loc8` = 'Находки Юхана', `description_loc2` = 'Les découvertes de l\'apothicaire Johaan.', `description_loc3` = 'Die versiegelten Funde des Apothekers Johaan.', `description_loc6` = 'Las conclusiones selladas del boticario auxiliar Holland.', `description_loc8` = 'Секретные сведения от аптекаря Юхана' WHERE `entry` = 3238; +UPDATE `locales_item` SET `name_loc2` = 'Boisson spéciale de Johaan', `name_loc3` = 'Johaans Spezialgetränk', `name_loc6` = 'Bebida especial de Holland', `name_loc8` = 'Особый напиток Юхана' WHERE `entry` = 3460; +UPDATE `locales_item` SET `name_loc2` = 'Tête de Barak', `name_loc3` = 'Baraks Kopf', `name_loc6` = 'Cabeza de Aterrakodos', `name_loc8` = 'Голова Барака' WHERE `entry` = 5022; +UPDATE `locales_item` SET `name_loc2` = 'Tête du baron de Longrivage', `name_loc3` = 'Baron Küstenschippers Kopf', `name_loc6` = 'Cabeza del capitán Garvey', `name_loc8` = 'Голова Барона Дольноберега' WHERE `entry` = 5084; +UPDATE `locales_item` SET `name_loc2` = 'Défense de huran Dos-hirsute', `name_loc3` = 'Stacheleberhauer der Borstennacken', `name_loc6` = 'Colmillo de jabaespín', `name_loc8` = 'Клык свинобраза из племени Дыбогривов' WHERE `entry` = 5085; +UPDATE `locales_item` SET `name_loc2` = 'Griffe de rôdeur', `name_loc3` = 'Streunerklauen', `name_loc6` = 'Garras de cazadora', `name_loc8` = 'Когти хищника саванны' WHERE `entry` = 5096; +UPDATE `locales_item` SET `name_loc2` = 'Crâne de Dal Griffe-de-sang', `name_loc3` = 'Dal Blutklaues Schädel', `name_loc6` = 'Colección de Zarpasangrante', `name_loc8` = 'Череп Дала Жилотяга' WHERE `entry` = 5544; +UPDATE `locales_item` SET `name_loc2` = 'Pièces de chariot explosif', `name_loc3` = 'Raketenwagenteile', `name_loc6` = 'Piezas de coche cohete', `name_loc8` = 'Детали болида' WHERE `entry` = 5798; +UPDATE `locales_item` SET `name_loc2` = 'Programme d\'embarquement des Défias', `name_loc3` = 'Lieferzeitplan der Defias', `name_loc6` = 'Calendario de envíos', `name_loc8` = 'Расписание поставок Братства Справедливости' WHERE `entry` = 7675; +UPDATE `locales_item` SET `name_loc2` = 'Horaires des bateaux', `name_loc3` = 'Schiffzeitplan', `name_loc6` = 'Ruta de navegación deteriorada por el agua', `name_loc8` = 'Корабельное расписание' WHERE `entry` = 9250; +UPDATE `locales_item` SET `name_loc2` = 'Note de service contaminée', `name_loc3` = 'Besudeltes Memorandum', `name_loc6` = 'Runa corrupta', `name_loc8` = 'Гниющая записка' WHERE `entry` = 9577; +UPDATE `locales_item` SET `name_loc2` = 'Collier d\'Hilary', `name_loc3` = 'Hilarys Halskette', `name_loc6` = 'Collar de Nida', `name_loc8` = 'Ожерелье Хилари' WHERE `entry` = 10958; +UPDATE `locales_item` SET `name_loc2` = 'Supplique de Salomon au roi Wrynn', `name_loc3` = 'Solomons Hilfegesuch an Bolvar', `name_loc6` = 'Petición al rey Wrynn de Solomon', `name_loc8` = 'Обращение Соломона к Болвару' WHERE `entry` = 11367; +UPDATE `locales_item` SET `name_loc2` = 'Décret de Wrynn', `name_loc3` = 'Bolvars Erlass', `name_loc6` = 'Decreto de Wrynn', `name_loc8` = 'Указ Болвара', `description_loc2` = 'Porte le Sceau de Hurlevent', `description_loc3` = 'Trägt das Siegel von Sturmwind.', `description_loc6` = 'Lleva el sello de Ventormenta.', `description_loc8` = 'Запечатан печатью Штормового Оплота' WHERE `entry` = 11368; +UPDATE `locales_item` SET `name_loc2` = 'Gambit de l\'aube', `name_loc3` = 'Dämmerungstrickfalle', `name_loc6` = 'Gambito de Alexi', `name_loc8` = 'Рассветный гамбит' WHERE `entry` = 12368; +UPDATE `locales_item` SET `name_loc2` = 'Caisses de ravitaillement de la Croisée', `name_loc3` = 'Vorratskisten des Wegekreuzes', `name_loc6` = 'Cajón de suministros de El Cruce', `name_loc8` = 'Ящики с припасами для Перекрестка' WHERE `entry` = 12708; +UPDATE `locales_item` SET `name_loc2` = 'Ordre de Podrig', `name_loc3` = 'Podrigs Befehl', `name_loc6` = 'Pedido de Morris', `name_loc8` = 'Заказ Подрига' WHERE `entry` = 16209; +UPDATE `locales_item` SET `name_loc2` = 'Collection de Nessa', `name_loc3` = 'Nessas Sammlung', `name_loc6` = 'Libro de recetas de Dolanaar', `name_loc8` = 'Коллекция Нессы' WHERE `entry` = 16262; +UPDATE `locales_item` SET `name_loc2` = 'Réponse de Laird', `name_loc3` = 'Lairds Antwort', `name_loc6` = 'Nota de la hermana Aquinne', `name_loc8` = 'Ответ Лайрда' WHERE `entry` = 16263; +UPDATE `locales_item` SET `name_loc2` = 'Chair de Zargh', `name_loc3` = 'Fleischerei Zargh', `name_loc6` = 'Carnes de Zargh', `name_loc8` = 'Мясные продукты Зарга' WHERE `entry` = 16306; +UPDATE `locales_item` SET `name_loc2` = 'Liste de Brock', `name_loc3` = 'Brocks Liste', `name_loc6` = 'Lista de Gremlock', `name_loc8` = 'Список Брокка' WHERE `entry` = 16310; +UPDATE `locales_item` SET `name_loc2` = 'Bannière de Karang', `name_loc3` = 'Karangs Banner', `name_loc6` = 'Estandarte de Senani', `name_loc8` = 'Знамя Каранга' WHERE `entry` = 16972; +UPDATE `locales_item` SET `name_loc2` = 'Peau de yéti griffe féroce', `name_loc3` = 'Wutschrammyetibalg', `name_loc6` = 'Pellejo de yeti Cicatriz Feral', `name_loc8` = 'Шкура йети из пещеры Бешеного оврага' WHERE `entry` = 18947; +UPDATE `locales_item` SET `name_loc2` = 'Peau de démon écorché', `name_loc3` = 'Geschundene Dämonenhaut', `name_loc6` = 'Piel de Demonio Despellejada', `name_loc8` = 'Рваная демонская кожа' WHERE `entry` = 20310; +UPDATE `locales_item` SET `name_loc2` = 'Bordereau de chargement de l\'intendante Lymel', `name_loc3` = 'Rüstmeisterin Lymels Frachtbrief', `name_loc6` = 'Solicitud de Sathiel', `name_loc8` = 'Накладная интенданта Лаймель', `description_loc2` = 'Il ne reste pratiquement plus de place sur la feuille pour y écrire quoi que ce soit. Mais qui va porter tout ça ?', `description_loc3` = 'Das Geschriebene passt kaum auf die Seite. Wer soll bloß all das tragen?', `description_loc6` = 'La página está bien llenita. ¿Quién va a transportar todo esto?', `description_loc8` = 'Для всего перечисленного едва хватает страницы, И кто это все потащит?' WHERE `entry` = 22549; +UPDATE `locales_item` SET `name_loc2` = 'Cargaison de l\'intendante Lymel', `name_loc3` = 'Rüstmeisterin Lymels Waren', `name_loc6` = 'Bienes de Sathiel', `name_loc8` = 'Товары интенданта Лаймель', `description_loc2` = 'Vous n’en êtes pas certain, mais il semblerait que quelque chose soit cassé à l’intérieur.', `description_loc3` = 'Ihr seid Euch nicht sicher, aber es hörte sich an, als ob im Inneren etwas zerbrochen wäre.', `description_loc6` = 'No estás seguro, pero ha sonado como si dentro se hubiera roto algo.', `description_loc8` = 'Судя по звуку, внутри что-то сломалось.' WHERE `entry` = 22550; +UPDATE `locales_item` SET `name_loc2` = 'Rapport de la sentinelle Luciel', `name_loc3` = 'Schildwache Luciels Bericht', `name_loc6` = 'Informe de la centinela Melyria', `name_loc8` = 'Донесение Люсьели', `description_loc2` = 'Un rapport scellé écrit par la sentinelle Luciel Murmétoile, destiné à la sentinelle Chanteloin.', `description_loc3` = 'Ein versiegelter Bericht, verfasst von Schildwache Luciel Sternwisper und bestimmt für Schildwache Weltensang.', `description_loc6` = 'Un informe sellado de la centinela Melyria Sombrigélida para la centinela Cantolejano.', `description_loc8` = 'Запечатанное донесение, написанное часовым Люсьель Шепот Звезд, предназначенное часовому Дальней Песне.' WHERE `entry` = 23778; +UPDATE `locales_item` SET `name_loc2` = 'Liste de Topher', `name_loc3` = 'Tophers Liste', `name_loc6` = 'Lista de Chellan', `name_loc8` = 'Список Тофера', `description_loc2` = 'Une liste d\'objets dont l\'auberge du Guet du sang a besoin de toute urgence.', `description_loc3` = 'Eine Liste von Dingen, die dringend beim Gasthaus der Blutwacht benötigt werden.', `description_loc6` = 'Una lista de objetos que necesitan con urgencia en la taberna de la Avanzada Azur.', `description_loc8` = 'Список предметов, необходимых для таверны Кровавой заставы.' WHERE `entry` = 23902; +UPDATE `locales_item` SET `name_loc2` = 'Explosifs rudimentaires', `name_loc3` = 'Kunstloser Sprengstoff', `name_loc6` = 'Explosivos rudimentarios', `name_loc8` = 'Сырые Взрывчатые вещества', `description_loc2` = 'Ces explosifs sont un bon exemple des talents d\'ingénieurs des gangr\'orcs. Il y a de quoi faire rougir même le plus chevronné des ingénieurs gobelins.', `description_loc3` = 'Dieser Sprengstoff ist ein tolles Beispiel von Höllenorc \'Ingenieurskunst\' in Aktion. Sie könnten sogar die meist vollkommenen Gobliningenieurskunst nachahmen.', `description_loc6` = 'Estos explosivos son un magnífico ejemplo de la \"ingeniería\" de los orcos viles en acción. Provocaría sonrojo hasta en el más destacado de los ingenieros goblins.', `description_loc8` = 'Эти взрывчатые вещества - большой пример пример \'инженерии\' в действии. Они могли сделать даже корову.' WHERE `entry` = 28048; +UPDATE `locales_item` SET `name_loc2` = 'A Thrall, chef de guerre de la Horde', `name_loc3` = 'An Thrall, Kriegshäuptling der Horde', `name_loc6` = 'Al Jefe de Guerra de la Horda', `name_loc8` = 'Траллу, вождю Орды', `description_loc2` = 'Porte le sceau de Fordring', `description_loc3` = 'Trägt Fordrings Siegel.', `description_loc6` = 'Lleva el sello de Vadín', `description_loc8` = 'Здесь стоит печать Фордринга' WHERE `entry` = 43441; + +-- class:15 (glyphs) +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de grondement', `name_loc3` = 'Glyphe \'Knurren\'', `name_loc6` = 'Glifo de Bramido', `name_loc8` = 'Символ рыка' WHERE `entry` = 40899; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de lambeau', `name_loc3` = 'Glyphe \'Schreddern\'', `name_loc6` = 'Glifo de Triturar', `name_loc8` = 'Символ полосования' WHERE `entry` = 40901; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de griffure', `name_loc3` = 'Glyphe \'Krallenhieb\'', `name_loc6` = 'Glifo de Arañazo', `name_loc8` = 'Символ глубокой раны' WHERE `entry` = 40903; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'ouragan', `name_loc3` = 'Glyphe \'Hurrikan\'', `name_loc6` = 'Glifo de Huracán', `name_loc8` = 'Символ грозы' WHERE `entry` = 40920; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de sceau d\'autorité', `name_loc3` = 'Glyphe \'Siegel des Befehls\'', `name_loc6` = 'Glifo de Sello de Orden', `name_loc8` = 'Символ печати повиновения' WHERE `entry` = 41094; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'harmonisation spirituelle', `name_loc3` = 'Glyphe \'Einklang des Geistes\'', `name_loc6` = 'Glifo de Armonización Espiritual', `name_loc8` = 'Символ духовного созвучия' WHERE `entry` = 41096; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'inquisition', `name_loc3` = 'Glyphe \'Kreuzfahrerstoß\'', `name_loc6` = 'Glifo de Golpe de cruzado', `name_loc8` = 'Символ удара воина Света' WHERE `entry` = 41098; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de défense vertueuse', `name_loc3` = 'Glyphe \'Rechtschaffene Verteidigung\'', `name_loc6` = 'Glifo de Defensa Recta', `name_loc8` = 'Символ праведной защиты' WHERE `entry` = 41100; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe du bouclier du vengeur', `name_loc3` = 'Glyphe \'Schild des Rächers\'', `name_loc6` = 'Glifo de Escudo de Vengador', `name_loc8` = 'Символ щита мстителя' WHERE `entry` = 41101; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de purification', `name_loc3` = 'Glyphe \'Läuterung\'', `name_loc6` = 'Glifo de Limpiar', `name_loc8` = 'Символ очищения' WHERE `entry` = 41104; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'éclair lumineux', `name_loc3` = 'Glyphe \'Lichtblitz\'', `name_loc6` = 'Glifo de Destello de Luz', `name_loc8` = 'Символ вспышки Света' WHERE `entry` = 41105; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de lumière sacrée', `name_loc3` = 'Glyphe \'Heiliges Licht\'', `name_loc6` = 'Glifo de Luz Sagrada', `name_loc8` = 'Символ Света небес' WHERE `entry` = 41106; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de courroux vengeur', `name_loc3` = 'Glyphe \'Zornige Vergeltung\'', `name_loc6` = 'Glifo de Cólera Vengativa', `name_loc8` = 'Символ гнева карателя' WHERE `entry` = 41107; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de sceau de sagesse', `name_loc3` = 'Glyphe \'Siegel der Weisheit\'', `name_loc6` = 'Glifo de Sello de Sabiduría', `name_loc8` = 'Символ печати мудрости' WHERE `entry` = 41109; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de sceau de lumière', `name_loc3` = 'Glyphe \'Siegel des Lichts\'', `name_loc6` = 'Glifo de Sello de Luz', `name_loc8` = 'Символ печати Света' WHERE `entry` = 41110; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de lave', `name_loc3` = 'Glyphe \'Lava\'', `name_loc6` = 'Glifo de Lava', `name_loc8` = 'Символ лавы' WHERE `entry` = 41524; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de vague de soins inférieurs', `name_loc3` = 'Glyphe \'Geringe Welle der Heilung\'', `name_loc6` = 'Glifo de Ola de Sanación Inferior', `name_loc8` = 'Символ малой волны исцеления' WHERE `entry` = 41535; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de totem de vague de mana', `name_loc3` = 'Glyphe \'Totem der Manaflut\'', `name_loc6` = 'Glifo de Tótem Marea de Maná', `name_loc8` = 'Символ тотема прилива маны' WHERE `entry` = 41538; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de maîtrise de l\'eau', `name_loc3` = 'Glyphe \'Wasserbeherrschung\'', `name_loc6` = 'Glifo de Maestría en Agua', `name_loc8` = 'Символ хозяина вод' WHERE `entry` = 41541; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de dissipation de la magie', `name_loc3` = 'Glyphe \'Magie bannen\'', `name_loc6` = 'Glifo de Disipar magia', `name_loc8` = 'Символ рассеивания заклинаний' WHERE `entry` = 42397; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de puits de lumière', `name_loc3` = 'Glyphe \'Brunnen des Lichts\'', `name_loc6` = 'Glifo de Pozo de Luz', `name_loc8` = 'Символ колодца Света' WHERE `entry` = 42403; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de contrôle mental', `name_loc3` = 'Glyphe \'Gedankenkontrolle\'', `name_loc6` = 'Glifo de Control Mental', `name_loc8` = 'Символ контроля над разумом' WHERE `entry` = 42405; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'ombre', `name_loc3` = 'Glyphe \'Schatten\'', `name_loc6` = 'Glifo de Sombra', `name_loc8` = 'Символ Тьмы' WHERE `entry` = 42407; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de châtiment', `name_loc3` = 'Glyphe \'Göttliche Pein\'', `name_loc6` = 'Glifo de Punición', `name_loc8` = 'Символ кары' WHERE `entry` = 42416; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'esprit de rédemption', `name_loc3` = 'Glyphe \'Geist der Erlösung\'', `name_loc6` = 'Glifo de Espíritu Redentor', `name_loc8` = 'Символ духа воздаяния' WHERE `entry` = 42417; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de malédiction d\'agonie', `name_loc3` = 'Glyphe \'Fluch der Pein\'', `name_loc6` = 'Glifo de Maldición de Agonía', `name_loc8` = 'Символ проклятия агонии' WHERE `entry` = 42456; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe du diablotin', `name_loc3` = 'Glyphe \'Wichtel\'', `name_loc6` = 'Glifo de diablillo', `name_loc8` = 'Символ беса' WHERE `entry` = 42465; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de douleur brûlante', `name_loc3` = 'Glyphe \'Sengender Schmerz\'', `name_loc6` = 'Glifo de Dolor Abrasador', `name_loc8` = 'Символ жгучей боли' WHERE `entry` = 42466; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de siphon de vie', `name_loc3` = 'Glyphe \'Lebensentzug\'', `name_loc6` = 'Glifo de Succionar Vida', `name_loc8` = 'Символ вытягивания жизни' WHERE `entry` = 42469; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de succube', `name_loc3` = 'Glyphe \'Sukkubus\'', `name_loc6` = 'Glifo de Súcubo', `name_loc8` = 'Символ суккуба' WHERE `entry` = 42471; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'explosion des arcanes', `name_loc3` = 'Glyphe \'Arkane Explosion\'', `name_loc6` = 'Glifo de Deflagración Arcana', `name_loc8` = 'Символ чародейского взрыва' WHERE `entry` = 42734; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de trait de feu', `name_loc3` = 'Glyphe \'Feuerschlag\'', `name_loc6` = 'Glifo de Explosión de Fuego', `name_loc8` = 'Символ огненного взрыва' WHERE `entry` = 42740; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'armure de glace', `name_loc3` = 'Glyphe \'Eisrüstung\'', `name_loc6` = 'Glifo de Armadura de Hielo', `name_loc8` = 'Символ ледяного доспеха' WHERE `entry` = 42743; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de brûlure', `name_loc3` = 'Glyphe \'Versengen\'', `name_loc6` = 'Glifo de Agostar', `name_loc8` = 'Символ ожога' WHERE `entry` = 42747; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de gemme de mana', `name_loc3` = 'Glyphe \'Manaedelstein\'', `name_loc6` = 'Glifo de Gema de Maná', `name_loc8` = 'Символ самоцвета маны' WHERE `entry` = 42750; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de délivrance de la malédiction', `name_loc3` = 'Glyphe \'Fluch aufheben\'', `name_loc6` = 'Glifo de Eliminar Maldición', `name_loc8` = 'Символ снятия проклятия' WHERE `entry` = 42753; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'élémentaire d\'eau', `name_loc3` = 'Glyphe \'Wasserelementar\'', `name_loc6` = 'Glifo de Elemental de Agua', `name_loc8` = 'Символ элементаля воды' WHERE `entry` = 42754; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de la bête', `name_loc3` = 'Glyphe \'Wildtier\'', `name_loc6` = 'Glifo de la Bestia', `name_loc8` = 'Символ духа зверя' WHERE `entry` = 42899; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'aspect de la vipère', `name_loc3` = 'Glyphe \'Aspekt der Viper\'', `name_loc6` = 'Glifo de Aspecto de La Víbora', `name_loc8` = 'Символ духа гадюки' WHERE `entry` = 42901; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de piège de givre', `name_loc3` = 'Glyphe \'Frostfalle\'', `name_loc6` = 'Glifo de Trampa de Escarcha', `name_loc8` = 'Символ ледяной ловушки' WHERE `entry` = 42906; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de marque du chasseur', `name_loc3` = 'Glyphe \'Mal des Jägers\'', `name_loc6` = 'Glifo de Marca del Cazador', `name_loc8` = 'Символ метки охотника' WHERE `entry` = 42907; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe du faucon', `name_loc3` = 'Glyphe \'Falke\'', `name_loc6` = 'Glifo del Halcón', `name_loc8` = 'Символ ястреба' WHERE `entry` = 42909; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de flèches multiples', `name_loc3` = 'Glyphe \'Mehrfachschuss\'', `name_loc6` = 'Glifo de Multidisparo', `name_loc8` = 'Символ залпа' WHERE `entry` = 42910; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de morsure de serpent', `name_loc3` = 'Glyphe \'Schlangenbiss\'', `name_loc6` = 'Glifo de Picadura de serpiente', `name_loc8` = 'Символ укуса змеи' WHERE `entry` = 42912; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'aura de précision', `name_loc3` = 'Glyphe \'Aura des Volltreffers\'', `name_loc6` = 'Glifo de Aura de Disparo Certero', `name_loc8` = 'Символ ауры меткого выстрела' WHERE `entry` = 42915; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de salve', `name_loc3` = 'Glyphe \'Salve\'', `name_loc6` = 'Glifo de Salva', `name_loc8` = 'Символ града стрел' WHERE `entry` = 42916; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de piqûre de wyverne', `name_loc3` = 'Glyphe \'Stich des Flügeldrachen\'', `name_loc6` = 'Glifo de Picadura de dracoleón', `name_loc8` = 'Символ укуса виверны' WHERE `entry` = 42917; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de frappe fantomatique', `name_loc3` = 'Glyphe \'Geisterhafter Stoß\'', `name_loc6` = 'Glifo de Golpe Fantasmal', `name_loc8` = 'Символ призрачного удара' WHERE `entry` = 42965; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de vigueur', `name_loc3` = 'Glyphe \'Lebenskraft\'', `name_loc6` = 'Glifo de Vigor', `name_loc8` = 'Символ неутомимости' WHERE `entry` = 42971; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe du fauve', `name_loc3` = 'Glyphe \'Gabe der Wildnis\'', `name_loc6` = 'Glifo de lo Salvaje', `name_loc8` = 'Символ дикой природы' WHERE `entry` = 43335; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'intelligence des arcanes', `name_loc3` = 'Glyphe \'Arkane Intelligenz\'', `name_loc6` = 'Glifo de Intelecto Arcano', `name_loc8` = 'Символ чародейского интеллекта' WHERE `entry` = 43339; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de guérison du familier', `name_loc3` = 'Glyphe \'Tier heilen\'', `name_loc6` = 'Glifo de Aliviar Mascota', `name_loc8` = 'Символ лечения питомца' WHERE `entry` = 43350; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de la force de possédé', `name_loc3` = 'Glyphe \'Besessene Stärke\'', `name_loc6` = 'Glifo de Fuerza Poseída', `name_loc8` = 'Символ овладения силой' WHERE `entry` = 43354; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de la meute', `name_loc3` = 'Glyphe \'Aspekt des Rudels\'', `name_loc6` = 'Glifo de la Manada', `name_loc8` = 'Символ стаи' WHERE `entry` = 43355; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de gardien de feu', `name_loc3` = 'Glyphe \'Feuerzauberschutz\'', `name_loc6` = 'Glifo de Resguardo contra el Fuego', `name_loc8` = 'Символ защиты от огня' WHERE `entry` = 43357; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'armure de givre', `name_loc3` = 'Glyphe \'Frostrüstung\'', `name_loc6` = 'Glifo de Armadura de Escarcha', `name_loc8` = 'Символ морозного доспеха' WHERE `entry` = 43359; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de gardien de givre', `name_loc3` = 'Glyphe \'Frostzauberschutz\'', `name_loc6` = 'Glifo de Resguardo contra la Escarcha', `name_loc8` = 'Символ защиты от магии льда' WHERE `entry` = 43360; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de bénédiction de sagesse', `name_loc3` = 'Glyphe \'Segen der Weisheit\'', `name_loc6` = 'Glifo de Bendición de Sabiduría', `name_loc8` = 'Символ благословения мудрости' WHERE `entry` = 43366; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de détection des morts-vivants', `name_loc3` = 'Glyphe \'Untote spüren\'', `name_loc6` = 'Glifo de Captar No-muertos', `name_loc8` = 'Символ чутья на нежить' WHERE `entry` = 43368; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe des sages', `name_loc3` = 'Glyphe \'Der Weise\'', `name_loc6` = 'Glifo del Sabio', `name_loc8` = 'Символ мудрых' WHERE `entry` = 43369; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de disparition', `name_loc3` = 'Glyphe \'Verschwinden\'', `name_loc6` = 'Glifo de Esfumarse', `name_loc8` = 'Символ исчезновения' WHERE `entry` = 43380; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de bouclier d\'eau', `name_loc3` = 'Glyphe \'Wasserschild\'', `name_loc6` = 'Glifo de Escudo de Agua', `name_loc8` = 'Символ водного щита' WHERE `entry` = 43386; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de Kilrogg', `name_loc3` = 'Glyphe \'Auge von Kilrogg\'', `name_loc6` = 'Glifo de Kilrogg', `name_loc8` = 'Символ Килрогга' WHERE `entry` = 43391; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe des âmes', `name_loc3` = 'Glyphe \'Ritual der Seelen\'', `name_loc6` = 'Glifo de Almas', `name_loc8` = 'Символ душ' WHERE `entry` = 43394; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de rage sanguinaire', `name_loc3` = 'Glyphe \'Blutrausch\'', `name_loc6` = 'Glifo de Ira Sangrienta', `name_loc8` = 'Символ кровавой ярости' WHERE `entry` = 43396; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de charge', `name_loc3` = 'Glyphe \'Sturmangriff\'', `name_loc6` = 'Glifo de Cargar', `name_loc8` = 'Символ рывка' WHERE `entry` = 43397; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de coup railleur', `name_loc3` = 'Glyphe \'Spöttischer Schlag\'', `name_loc6` = 'Glifo de Falsa Arremetida', `name_loc8` = 'Символ дразнящего удара' WHERE `entry` = 43398; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de sanguinaire', `name_loc3` = 'Glyphe \'Blutdurst\'', `name_loc6` = 'Glifo de Sed de Sangre', `name_loc8` = 'Символ кровожадности' WHERE `entry` = 43412; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'enchaînement', `name_loc3` = 'Glyphe \'Spalten\'', `name_loc6` = 'Glifo de Rajar', `name_loc8` = 'Символ рассечения' WHERE `entry` = 43414; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'exécution', `name_loc3` = 'Glyphe \'Hinrichten\'', `name_loc6` = 'Glifo de Ejecutar', `name_loc8` = 'Символ казни' WHERE `entry` = 43416; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de brise-genou', `name_loc3` = 'Glyphe \'Kniesehne\'', `name_loc6` = 'Glifo de Seccionar', `name_loc8` = 'Символ подрезанного сухожилия' WHERE `entry` = 43417; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de frappe héroïque', `name_loc3` = 'Glyphe \'Heldenhafter Stoß\'', `name_loc6` = 'Glifo de Golpe Heroico', `name_loc8` = 'Символ удара героя' WHERE `entry` = 43418; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe des insultes barbares', `name_loc3` = 'Glyphe \'Barbarische Beleidigungen\'', `name_loc6` = 'Glifo de Insultos Barbáricos', `name_loc8` = 'Символ вульгарных оскорблений' WHERE `entry` = 43420; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de pourfendre', `name_loc3` = 'Glyphe \'Verwunden\'', `name_loc6` = 'Glifo de Desgarrar', `name_loc8` = 'Символ кровопускания' WHERE `entry` = 43423; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de vengeance', `name_loc3` = 'Glyphe \'Rache\'', `name_loc6` = 'Glifo de Revancha', `name_loc8` = 'Символ реванша' WHERE `entry` = 43424; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de blocage', `name_loc3` = 'Glyphe \'Blocken\'', `name_loc6` = 'Glifo de Bloqueo', `name_loc8` = 'Символ блокирования' WHERE `entry` = 43425; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de dernier rempart', `name_loc3` = 'Glyphe \'Letztes Gefecht\'', `name_loc6` = 'Glifo de Última Carga', `name_loc8` = 'Символ отчаянной защиты' WHERE `entry` = 43426; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'attaques circulaires', `name_loc3` = 'Glyphe \'Weitreichende Stöße\'', `name_loc6` = 'Glifo de Golpes de barrido', `name_loc8` = 'Символ размашистого удара' WHERE `entry` = 43428; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de provocation', `name_loc3` = 'Glyphe \'Spott\'', `name_loc6` = 'Glifo de Provocar', `name_loc8` = 'Символ провокации' WHERE `entry` = 43429; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de tourbillon', `name_loc3` = 'Glyphe \'Wirbelwind\'', `name_loc6` = 'Glifo de Torbellino', `name_loc8` = 'Символ вихря' WHERE `entry` = 43432; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de frappe au coeur', `name_loc3` = 'Glyphe \'Herzstoß\'', `name_loc6` = 'Glifo de Golpe en el corazón', `name_loc8` = 'Символ удара в сердце' WHERE `entry` = 43534; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de sombre ordre', `name_loc3` = 'Glyphe \'Dunkler Befehl\'', `name_loc6` = 'Glifo de Orden Oscura', `name_loc8` = 'Символ темной власти' WHERE `entry` = 43538; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de robustesse glaciale', `name_loc3` = 'Glyphe \'Eisige Gegenwehr\'', `name_loc6` = 'Glifo de Entereza Ligada al Hielo', `name_loc8` = 'Символ незыблемости льда' WHERE `entry` = 43545; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de frappe de peste', `name_loc3` = 'Glyphe \'Seuchenstoß\'', `name_loc6` = 'Glifo de Golpe de Peste', `name_loc8` = 'Символ удара чумы' WHERE `entry` = 43548; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de la goule', `name_loc3` = 'Glyphe \'Ghul\'', `name_loc6` = 'Glifo del Necrófago', `name_loc8` = 'Символ вурдалака' WHERE `entry` = 43549; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'armure incassable', `name_loc3` = 'Glyphe \'Undurchdringliche Rüstung\'', `name_loc6` = 'Glifo de Armadura Inquebrantable', `name_loc8` = 'Символ несокрушимой брони' WHERE `entry` = 43553; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'explosion morbide', `name_loc3` = 'Glyphe \'Leichenexplosion\'', `name_loc6` = 'Glifo de Deflagración de Cadáver', `name_loc8` = 'Символ взрыва трупа' WHERE `entry` = 43671; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de pestilence', `name_loc3` = 'Glyphe \'Pestilenz\'', `name_loc6` = 'Glifo de Pestilencia', `name_loc8` = 'Символ мора' WHERE `entry` = 43672; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de réanimation morbide', `name_loc3` = 'Glyphe \'Totenerweckung\'', `name_loc6` = 'Glifo de Levantar a Muerto', `name_loc8` = 'Символ воскрешения мертвых' WHERE `entry` = 43673; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de frappe de sang', `name_loc3` = 'Glyphe \'Blutstoß\'', `name_loc6` = 'Glifo de Golpe Sangriento', `name_loc8` = 'Символ кровавого удара' WHERE `entry` = 43826; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de colère divine', `name_loc3` = 'Glyphe \'Heiliger Zorn\'', `name_loc6` = 'Glifo de Cólera Sagrada', `name_loc8` = 'Символ священного гнева' WHERE `entry` = 43867; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de sceau de piété', `name_loc3` = 'Glyphe \'Siegel der Rechtschaffenheit\'', `name_loc6` = 'Glifo de Sello de Rectitud', `name_loc8` = 'Символ печати праведности' WHERE `entry` = 43868; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de sceau de vengeance', `name_loc3` = 'Glyphe \'Siegel der Vergeltung\'', `name_loc6` = 'Glifo de Sello de Venganza', `name_loc8` = 'Символ печати отмщения' WHERE `entry` = 43869; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de nourrir', `name_loc3` = 'Glyphe \'Pflege\'', `name_loc6` = 'Glifo de Nutrir', `name_loc8` = 'Символ покровительства природы' WHERE `entry` = 45603; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de piège explosif', `name_loc3` = 'Glyphe \'Sprengfalle\'', `name_loc6` = 'Glifo de Trampa Explosiva', `name_loc8` = 'Символ взрывной ловушки' WHERE `entry` = 45733; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de bombe vivante', `name_loc3` = 'Glyphe \'Lebende Bombe\'', `name_loc6` = 'Glifo de Bomba Viva', `name_loc8` = 'Символ живой бомбы' WHERE `entry` = 45737; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de tempête divine', `name_loc3` = 'Glyphe \'Göttlicher Sturm\'', `name_loc6` = 'Glifo de Tormenta Divina', `name_loc8` = 'Символ божественной бури' WHERE `entry` = 45743; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de bouclier de piété', `name_loc3` = 'Glyphe \'Schild der Rechtschaffenheit\'', `name_loc6` = 'Glifo de Escudo de Rectitud', `name_loc8` = 'Символ щита праведности' WHERE `entry` = 45744; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'incandescence mentale', `name_loc3` = 'Glyphe \'Gedankenexplosion\'', `name_loc6` = 'Glifo de Abrasamiento Mental', `name_loc8` = 'Символ иссушения разума' WHERE `entry` = 45757; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'hymne à l\'espoir', `name_loc3` = 'Glyphe \'Hymne der Hoffnung\'', `name_loc6` = 'Glifo de Himno de Esperanza', `name_loc8` = 'Символ гимна надежды' WHERE `entry` = 45758; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de suppression de la douleur', `name_loc3` = 'Glyphe \'Schmerzunterdrückung\'', `name_loc6` = 'Glifo de Supresión de Dolor', `name_loc8` = 'Символ подавления боли' WHERE `entry` = 45760; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de soif de sang', `name_loc3` = 'Glyphe \'Blutgier\'', `name_loc6` = 'Glifo de Hambre de Sangre', `name_loc8` = 'Символ жажды убийства' WHERE `entry` = 45761; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de totem de courroux', `name_loc3` = 'Glyphe \'Totem des Ingrimms\'', `name_loc6` = 'Glifo de Tótem de Cólera', `name_loc8` = 'Символ тотема гнева' WHERE `entry` = 45776; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de lien spirituel', `name_loc3` = 'Glyphe \'Seelenverbindung\'', `name_loc6` = 'Glifo de Enlace de alma', `name_loc8` = 'Символ связки души' WHERE `entry` = 45789; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de vigilance', `name_loc3` = 'Glyphe \'Wachsamkeit\'', `name_loc6` = 'Glifo de Vigilancia', `name_loc8` = 'Символ бдительности' WHERE `entry` = 45793; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de régénération enragée', `name_loc3` = 'Glyphe \'Wütende Regeneration\'', `name_loc6` = 'Glifo de Regeneración Iracunda', `name_loc8` = 'Символ безудержного восстановления' WHERE `entry` = 45794; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de chancre impie', `name_loc3` = 'Glyphe \'Unheilige Verseuchung\'', `name_loc6` = 'Glifo de Añublo Profano', `name_loc8` = 'Символ нечестивой порчи' WHERE `entry` = 45803; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de la mort sombre', `name_loc3` = 'Glyphe \'Dunkler Tod\'', `name_loc6` = 'Glifo de Muerte Oscura', `name_loc8` = 'Символ черной смерти' WHERE `entry` = 45804; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de maladie', `name_loc3` = 'Glyphe \'Krankheit\'', `name_loc6` = 'Glifo de Enfermedad', `name_loc8` = 'Символ болезни' WHERE `entry` = 45805; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe d\'instincts de survie', `name_loc3` = 'Glyphe \'Überlebensinstinkt\'', `name_loc6` = 'Glifo de Instintos de Supervivencia', `name_loc8` = 'Символ инстинкта выживания' WHERE `entry` = 46372; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de commandement', `name_loc3` = 'Glyphe \'Befehl\'', `name_loc6` = 'Glifo de Orden', `name_loc8` = 'Символ властности' WHERE `entry` = 49084; +UPDATE `locales_item` SET `name_loc2` = 'Glyphe de griffe', `name_loc3` = 'Glyphe \'Klaue\'', `name_loc6` = 'Glifo de Zarpa', `name_loc8` = 'Символ когтя' WHERE `entry` = 48720; +UPDATE `locales_item` SET `name_loc3` = 'Glyphe \'Ewiges Wasser\'', `name_loc6` = 'Glifo de Agua Eterna', `name_loc8` = 'Символ извечной воды' WHERE `entry` = 50045; +UPDATE `locales_item` SET `name_loc3` = 'Glyphe \'Hastige Verjüngung\'', `name_loc6` = 'Glifo de Rejuvenecimiento Rápido', `name_loc8` = 'Символ стремительного омоложения' WHERE `entry` = 50125; +UPDATE `locales_item` SET `name_loc3` = 'Glyphe \'Schneller Verfall\'', `name_loc6` = 'Glifo de Descomposición Presurosa', `name_loc8` = 'Символ быстрого разложения' WHERE `entry` = 50077; + +-- class:16 (misc) +UPDATE `locales_item` SET `name_loc2` = 'Poudre aveuglante sans valeur', `name_loc3` = 'Wertloses Blendungspulver', `name_loc6` = 'Partículas cegadoras', `name_loc8` = 'Бесполезный ослепляющий порошок', `description_loc2` = 'Autrefois appréciée des voleurs pour son pouvoir aveuglant, elle a été abandonnée au profit de matériaux plus faciles à se procurer… comme le sable.', `description_loc3` = 'Schurken verwendeten dieses Reagenz zum Blenden ihrer Gegner, bis man zu dem Schluss kam, dass eine Hand voll Dreck die gleiche Wirkung bei geringeren Kosten erzielt.', `description_loc6` = 'Los pícaros las consideraban excelentes como agente cegador, pero dejaron de usarlas para usar recursos más fáciles de conseguir... como la tierra.', `description_loc8` = 'Когда-то бывший в большом почете у разбойников, теперь он уступил место более доступным средствам ослепления, таким как грязь, например.' WHERE `entry` = 5530; +UPDATE `locales_item` SET `name_loc2` = 'Serrure d\'entraînement', `name_loc3` = 'Übungsschloss', `name_loc6` = 'Cerradura de prácticas', `name_loc8` = 'Учебный замок' WHERE `entry` = 6712; +UPDATE `locales_item` SET `name_loc2` = 'Racine flagellante', `name_loc3` = 'Wildschlagwurzel', `name_loc6` = 'Criminosa', `name_loc8` = 'Корень корнехлеста' WHERE `entry` = 18224; +UPDATE `locales_item` SET `name_loc2` = 'Bride de palefroi de guerre noir', `name_loc3` = 'Zaumzeug eines schwarzen Schlachtrosses', `name_loc6` = 'Brida de corcel de guerra negro', `name_loc8` = 'Вороной боевой скакун', `description_loc2` = 'Vous apprend à invoquer cette monture.', `description_loc3` = 'Lehrt Euch, wie man dieses Reittier beschwört.', `description_loc6` = 'Te enseña a invocar esta montura.', `description_loc8` = 'Обучает управлению этим верховым животным.' WHERE `entry` = 29468; +UPDATE `locales_item` SET `name_loc2` = 'Foie de basilic', `name_loc3` = 'Basiliskenleber', `name_loc6` = 'Tripas de basilisco', `name_loc8` = 'Печень василиска' WHERE `entry` = 29553; +UPDATE `locales_item` SET `name_loc2` = 'Queue de crocilisque', `name_loc3` = 'Krokiliskenschwanz', `name_loc6` = 'Cola de crocolisco incomible', `name_loc8` = 'Хвост кроколиска' WHERE `entry` = 30467; +UPDATE `locales_item` SET `name_loc2` = 'Commande de machine volante', `name_loc3` = 'Steuerung für eine Flugmaschine', `name_loc6` = 'Mando de máquina voladora', `name_loc8` = 'Управление ветролетом', `description_loc2` = 'Vous apprend à invoquer cette monture. Elle ne peut être utilisée qu\'en Outreterre et en Norfendre.', `description_loc3` = 'Lehrt Euch, wie man diese Flugmaschine beschwört. Kann nur in der Scherbenwelt oder in Nordend beschworen werden.Flugmaschine.', `description_loc6` = 'Te enseña a invocar esta montura. Solo se puede invocar en Terrallende o Rasganorte.', `description_loc8` = 'Обучает управлению этим верховым животным. Призвать его можно только в Нордсколе и Запределье.' WHERE `entry` = 34060; +UPDATE `locales_item` SET `name_loc2` = 'Commande de machine volante à turbo-injection', `name_loc3` = 'Steuerung für eine turbogetriebene Flugmaschine', `name_loc6` = 'Mando de máquina voladora turboalimentada', `name_loc8` = 'Управление турбоветролетом', `description_loc2` = 'Vous apprend à invoquer cette monture. Elle ne peut être invoquée qu\'en Outreterre et en Norfendre. C\'est une monture très rapide.', `description_loc3` = 'Lehrt Euch, wie man diese Flugmaschine beschwört. Kann nur in der Scherbenwelt oder in Nordend beschworen werden. Das ist eine sehr schnelle Flugmaschine.', `description_loc6` = 'Te enseña a invocar esta montura. Solo se puede invocar en Terrallende o Rasganorte. Es muy veloz.', `description_loc8` = 'Обучает управлению этим верховым животным. Призвать его можно только в Нордсколе и Запределье. Это очень быстрое верховое животное.' WHERE `entry` = 34061; +UPDATE `locales_item` SET `name_loc2` = 'Rênes de drake azur', `name_loc3` = 'Zügel des Azurdrachen', `name_loc6` = 'Riendas del draco azur', `name_loc8` = 'Поводья лазурного дракончика', `description_loc2` = 'Vous apprend à invoquer cette monture. Elle ne peut être invoquée qu\'en Outreterre et en Norfendre. C\'est une monture très rapide.', `description_loc3` = 'Lehrt Euch, wie man dieses Reittier beschwört. Kann nur in der Scherbenwelt oder in Nordend beschworen werden. Das ist ein sehr schnelles Reittier.', `description_loc6` = 'Te enseña a invocar esta montura. Sólo se puede invocar en Terrallende o Rasganorte. Es muy veloz.', `description_loc8` = 'Обучает управлению этим верховым животным. Призвать его можно только в Нордсколе и Запределье. Это очень быстрое верховое животное.' WHERE `entry` = 43952; +UPDATE `locales_item` SET `name_loc2` = 'Faucon-dragon de monte rouge', `name_loc3` = 'Rotes Drachenfalkenreittier', `name_loc6` = 'Dracohalcón rojo', `name_loc8` = 'Красный верховой дракондор', `description_loc2` = 'Vous apprend à invoquer cette monture. Elle ne peut être invoquée qu\'en Outreterre et en Norfendre. C\'est une monture très rapide.', `description_loc3` = 'Lehrt Euch, wie man dieses Reittier beschwört. Kann nur in der Scherbenwelt oder in Nordend beschworen werden. Das ist ein sehr schnelles Reittier.', `description_loc6` = 'Te enseña a invocar esta montura. Sólo se puede invocar en Terrallende o Rasganorte. Es muy veloz.', `description_loc8` = 'Обучает управлению этим верховым животным. Призвать его можно только в Нордсколе и Запределье. Это очень быстрое верховое животное.' WHERE `entry` = 44842; +UPDATE `locales_item` SET `name_loc3` = 'Zündschlüssel für den Kampfbot', `name_loc6` = 'Llave de ignición de guerra-bot', `name_loc8` = 'Ключ зажигания боевого робота', `description_loc3` = 'Lehrt Euch, wie man dieses Haustier beschwört.', `description_loc6` = 'Te enseña a invocar este compañero.' WHERE `entry` = 46767; +UPDATE `locales_item` SET `name_loc2` = 'Destrier d\'argent', `name_loc3` = 'Argentumstürmer', `name_loc6` = 'Destrero Argenta', `name_loc8` = 'Скакун Серебряного Авангарда', `description_loc2` = 'Vous apprend à invoquer cette monture. C\'est une monture très rapide.', `description_loc3` = 'Lehrt Euch, wie man dieses Reittier beschwört. Das ist ein sehr schnelles Reittier.', `description_loc6` = 'Te enseña a invocar esta montura. Es muy veloz.', `description_loc8` = 'Обучает управлению этим верховым животным. Это очень быстрое верховое животное.' WHERE `entry` = 47179; +UPDATE `locales_item` SET `name_loc2` = 'Faucon-dragon de monte bleu', `name_loc3` = 'Blaues Drachenfalkenreittier', `name_loc6` = 'Dracohalcón azul', `name_loc8` = 'Синий верховой дракондор', `description_loc2` = 'Vous apprend à invoquer cette monture. Elle ne peut être invoquée qu\'en Outreterre et en Norfendre. C\'est une monture très rapide.', `description_loc3` = 'Lehrt Euch, wie man dieses Reittier beschwört. Kann nur in der Scherbenwelt oder in Nordend beschworen werden. Das ist ein sehr schnelles Reittier.', `description_loc6` = 'Te enseña a invocar esta montura. Sólo se puede invocar en Terrallende o Rasganorte. Es muy veloz.', `description_loc8` = 'Обучает управлению этим верховым животным. Призвать его можно только в Нордсколе и Запределье. Это очень быстрое верховое животное.' WHERE `entry` = 44843; + +-- by id: rogue poisons +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel II', `name_loc3` = 'Tödliches Gift II', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд II' WHERE `entry` = 2893; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané II', `name_loc3` = 'Sofort wirkendes Gift II', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд II' WHERE `entry` = 6949; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané III', `name_loc3` = 'Sofort wirkendes Gift III', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд III' WHERE `entry` = 6950; +UPDATE `locales_item` SET `name_loc2` = 'Poison de distraction mentale II', `name_loc3` = 'Gedankenbenebelndes Gift II', `name_loc6` = 'Veneno de aturdimiento mental', `name_loc8` = 'Дурманящий яд II' WHERE `entry` = 6951; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané IV', `name_loc3` = 'Sofort wirkendes Gift IV', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд IV' WHERE `entry` = 8926; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané V', `name_loc3` = 'Sofort wirkendes Gift V', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд V' WHERE `entry` = 8927; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané VI', `name_loc3` = 'Sofort wirkendes Gift VI', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд VI' WHERE `entry` = 8928; +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel III', `name_loc3` = 'Tödliches Gift III', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд III' WHERE `entry` = 8984; +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel IV', `name_loc3` = 'Tödliches Gift IV', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд IV' WHERE `entry` = 8985; +UPDATE `locales_item` SET `name_loc2` = 'Poison douloureux II', `name_loc3` = 'Wundgift II', `name_loc6` = 'Veneno hiriente', `name_loc8` = 'Нейтрализующий яд II' WHERE `entry` = 10920; +UPDATE `locales_item` SET `name_loc2` = 'Poison douloureux III', `name_loc3` = 'Wundgift III', `name_loc6` = 'Veneno hiriente', `name_loc8` = 'Нейтрализующий яд III' WHERE `entry` = 10921; +UPDATE `locales_item` SET `name_loc2` = 'Poison douloureux IV', `name_loc3` = 'Wundgift IV', `name_loc6` = 'Veneno hiriente', `name_loc8` = 'Нейтрализующий яд IV' WHERE `entry` = 10922; +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel V', `name_loc3` = 'Tödliches Gift V', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд V' WHERE `entry` = 20844; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané VII', `name_loc3` = 'Sofort wirkendes Gift VII', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд VII' WHERE `entry` = 21927; +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel VI', `name_loc3` = 'Tödliches Gift VI', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд VI' WHERE `entry` = 22053; +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel VII', `name_loc3` = 'Tödliches Gift VII', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд VII' WHERE `entry` = 22054; +UPDATE `locales_item` SET `name_loc2` = 'Poison douloureux V', `name_loc3` = 'Wundgift V', `name_loc6` = 'Veneno hiriente', `name_loc8` = 'Нейтрализующий яд V' WHERE `entry` = 22055; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané VIII', `name_loc3` = 'Sofort wirkendes Gift VIII', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд VIII' WHERE `entry` = 43230; +UPDATE `locales_item` SET `name_loc2` = 'Poison instantané IX', `name_loc3` = 'Sofort wirkendes Gift IX', `name_loc6` = 'Veneno instantáneo', `name_loc8` = 'Быстродействующий яд IX' WHERE `entry` = 43231; +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel VIII', `name_loc3` = 'Tödliches Gift VIII', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд VIII' WHERE `entry` = 43232; +UPDATE `locales_item` SET `name_loc2` = 'Poison mortel IX', `name_loc3` = 'Tödliches Gift IX', `name_loc6` = 'Veneno mortal', `name_loc8` = 'Смертельный яд IX' WHERE `entry` = 43233; +UPDATE `locales_item` SET `name_loc2` = 'Poison douloureux VI', `name_loc3` = 'Wundgift VI', `name_loc6` = 'Veneno hiriente', `name_loc8` = 'Нейтрализующий яд VI' WHERE `entry` = 43234; +UPDATE `locales_item` SET `name_loc2` = 'Poison douloureux VII', `name_loc3` = 'Wundgift VII', `name_loc6` = 'Veneno hiriente', `name_loc8` = 'Нейтрализующий яд VII' WHERE `entry` = 43235; +UPDATE `locales_item` SET `name_loc2` = 'Poison anesthésiant II', `name_loc3` = 'Beruhigendes Gift II', `name_loc6` = 'Veneno anestésico', `name_loc8` = 'Анестезирующий яд II' WHERE `entry` = 43237; +UPDATE `locales_item` SET `name_loc2` = 'Poison affaiblissant II', `name_loc3` = 'Verkrüppelndes Gift II', `name_loc6` = 'Veneno entorpecedor', `name_loc8` = 'Калечащий яд II' WHERE `entry` = 3776; + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_05_02_01_world_creature_template.sql b/sql/updates/world/2014_05_02_01_world_creature_template.sql new file mode 100644 index 00000000000..59058ec67b3 --- /dev/null +++ b/sql/updates/world/2014_05_02_01_world_creature_template.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `flags_extra`=0 WHERE `entry`=26477; diff --git a/sql/updates/world/2014_05_03_00_world_creature_template.sql b/sql/updates/world/2014_05_03_00_world_creature_template.sql new file mode 100644 index 00000000000..c17c1cf07cd --- /dev/null +++ b/sql/updates/world/2014_05_03_00_world_creature_template.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `flags_extra`=0 WHERE `entry` IN (25342,25343); diff --git a/sql/updates/world/2014_05_03_01_world_gossip_menu_option.sql b/sql/updates/world/2014_05_03_01_world_gossip_menu_option.sql new file mode 100644 index 00000000000..2120623365e --- /dev/null +++ b/sql/updates/world/2014_05_03_01_world_gossip_menu_option.sql @@ -0,0 +1,11 @@ +UPDATE `gossip_menu_option` SET `option_id`=3,`npc_option_npcflag`=128 WHERE `menu_id`=11104 AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=4,`npc_option_npcflag`=8192 WHERE `menu_id`=9683 AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=5,`npc_option_npcflag`=16 WHERE `menu_id`=3626 AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=12,`npc_option_npcflag`=1048576 WHERE `menu_id`=10601 AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=15,`npc_option_npcflag`=4096 WHERE `menu_id`=9848 AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id` IN (10211,11398,11016,11014,10949,10948,10860,10614,9280,9297,9418,9492,9669,9928,10012,10200,10204,10206,10366,10477) AND `id`=0; +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id` IN (11016,10204,9297,10464,10465,10316,10949) AND `id`=1; +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id` IN (10614,11014,11016) AND `id`=3; +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id`=11014 AND `id`=4; +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id` IN (11014,11016) AND `id`=5; +UPDATE `gossip_menu_option` SET `option_id`=1,`npc_option_npcflag`=1 WHERE `menu_id`=10318 AND `id`=7; diff --git a/sql/updates/world/2014_05_04_00_world_creature_template.sql b/sql/updates/world/2014_05_04_00_world_creature_template.sql new file mode 100644 index 00000000000..c0bc62b8a0e --- /dev/null +++ b/sql/updates/world/2014_05_04_00_world_creature_template.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `flags_extra`=0 WHERE `entry`=26918; diff --git a/sql/updates/world/2014_05_04_01_world_sai.sql b/sql/updates/world/2014_05_04_01_world_sai.sql new file mode 100644 index 00000000000..65602cbbb6e --- /dev/null +++ b/sql/updates/world/2014_05_04_01_world_sai.sql @@ -0,0 +1,32 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=39712 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(39712,0,0,1,38,0,100,0,1,1,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,'High Tinker Mekkatorque - On Data Set 1 1 - Despawn In 1000 ms'), +(39712,0,1,0,61,0,100,0,0,0,0,0,11,74154,0,0,0,0,0,23,0,0,0,0,0,0,0,'High Tinker Mekkatorque - Link With Previous - Cast ''Speech Performed'''), +(39712,0,2,3,38,0,100,0,1,2,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,'High Tinker Mekkatorque - On Data Set 1 2 - Despawn In 1000 ms'), +(39712,0,3,0,61,0,100,0,0,0,0,0,11,74155,0,0,0,0,0,23,0,0,0,0,0,0,0,'High Tinker Mekkatorque - Link With Previous - Cast ''Speech Performed'''), +(39712,0,4,5,38,0,100,0,1,3,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,'High Tinker Mekkatorque - On Data Set 1 3 - Despawn In 1000 ms'), +(39712,0,5,0,61,0,100,0,0,0,0,0,11,74156,0,0,0,0,0,23,0,0,0,0,0,0,0,'High Tinker Mekkatorque - Link With Previous - Cast ''Speech Performed'''); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=1268 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1268,0,0,0,8,0,100,0,74222,0,0,0,1,2,2000,0,0,0,0,11,39712,10,0,0,0,0,0,'Ozzie Togglevolt - On Spellhit ''Perform Speech'' - Say Line 2'), +(1268,0,1,0,52,0,100,0,2,39712,0,0,1,3,4000,0,0,0,0,11,39712,10,0,0,0,0,0,'Ozzie Togglevolt - On Text 2 Over - Say Line 3'), +(1268,0,2,0,52,0,100,0,3,39712,0,0,1,4,4000,0,0,0,0,11,39712,10,0,0,0,0,0,'Ozzie Togglevolt - On Text 3 Over - Say Line 4'), +(1268,0,3,4,52,0,100,0,4,39712,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ozzie Togglevolt - On Text 4 Over - Say Line 0'), +(1268,0,4,0,61,0,100,0,0,0,0,0,45,1,1,0,0,0,0,11,39712,10,0,0,0,0,0,'Ozzie Togglevolt - On Text 4 Over - Set Data 1 1'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=6119 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(6119,0,0,0,8,0,100,0,74222,0,0,0,1,5,2000,0,0,0,0,11,39712,10,0,0,0,0,0,'Tog Rustsprocket - On Spellhit ''Perform Speech'' - Say Line 5'), +(6119,0,1,0,52,0,100,0,5,39712,0,0,1,6,4000,0,0,0,0,11,39712,10,0,0,0,0,0,'Tog Rustsprocket - On Text 5 Over - Say Line 6'), +(6119,0,2,0,52,0,100,0,6,39712,0,0,1,7,4000,0,0,0,0,11,39712,10,0,0,0,0,0,'Tog Rustsprocket - On Text 6 Over - Say Line 7'), +(6119,0,3,4,52,0,100,0,7,39712,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tog Rustsprocket - On Text 7 Over - Say Line 0'), +(6119,0,4,0,61,0,100,0,0,0,0,0,45,1,3,0,0,0,0,11,39712,10,0,0,0,0,0,'Tog Rustsprocket - On Text 7 Over - Set Data 1 3'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=7955 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(7955,0,0,0,8,0,100,0,74222,0,0,0,1,0,2000,0,0,0,0,11,39712,10,0,0,0,0,0,'Milli Featherwhistle - On Spellhit ''Perform Speech'' - Say Line 0 (Phase 1) (No Repeat)'), +(7955,0,1,0,52,0,100,0,0,39712,0,0,1,1,4000,0,0,0,0,11,39712,10,0,0,0,0,0,'Milli Featherwhistle - On Text 0 Over - Say Line 1 (Phase 1) (No Repeat)'), +(7955,0,2,3,52,0,100,0,1,39712,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Milli Featherwhistle - On Text 1 Over - Say Line 0'), +(7955,0,3,0,61,0,100,0,0,0,0,0,45,1,2,0,0,0,0,11,39712,10,0,0,0,0,0,'Milli Featherwhistle - On Text 1 Over - Set Data 1 2'); diff --git a/sql/updates/world/2014_05_04_02_world_creature_text.sql b/sql/updates/world/2014_05_04_02_world_creature_text.sql new file mode 100644 index 00000000000..d68bdc4ed1c --- /dev/null +++ b/sql/updates/world/2014_05_04_02_world_creature_text.sql @@ -0,0 +1,16 @@ +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=3977 AND `groupid`=1; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=11380 AND `groupid`=0; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=2; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=3; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=4; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=5; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=6; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=8; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=8; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=23863 AND `groupid`=9; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=29 AND `groupid`=1; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=22515 AND `groupid`=6; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=22515 AND `groupid`=7; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=22515 AND `groupid`=8; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=22515 AND `groupid`=9; +UPDATE `creature_text` SET `BroadcastTextId`=0 WHERE `entry`=22515 AND `groupid`=10; diff --git a/sql/updates/world/2014_05_04_03_world_creature_text.sql b/sql/updates/world/2014_05_04_03_world_creature_text.sql new file mode 100644 index 00000000000..3741afbb641 --- /dev/null +++ b/sql/updates/world/2014_05_04_03_world_creature_text.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_template` SET `flags_extra`=0 WHERE `entry`IN(28455,28299,28459,28300,28456,28457,28458,28462,28454,28460,26468,26469,26470,34735); +UPDATE `creature_template` SET `mechanic_immune_mask`=2048 WHERE `entry` IN (29307,29573); diff --git a/sql/updates/world/2014_05_04_04_world_creature.sql b/sql/updates/world/2014_05_04_04_world_creature.sql new file mode 100644 index 00000000000..778f1fdb7f2 --- /dev/null +++ b/sql/updates/world/2014_05_04_04_world_creature.sql @@ -0,0 +1,29 @@ +UPDATE `creature_template` SET `faction`=16 WHERE `entry` IN (28825,30965); + +SET @CGUID := 76278; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+20; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +-- Storming Vortex +(@CGUID+0, 28547, 602, 3, 1, 1175.453, -260.0605, 52.3494, 3.60509, 7200, 10, 1), +-- Cyclone +(@CGUID+1, 28825, 602, 3, 1, 1176.089, -249.2833, 52.35361, 4.021614, 7200, 0, 0), +(@CGUID+2, 28825, 602, 3, 1, 1166.917, -254.8407, 52.34347, 3.005888, 7200, 0, 0), +(@CGUID+3, 28825, 602, 3, 1, 1185.568, -258.9233, 52.35489, 1.944182, 7200, 0, 0), +(@CGUID+4, 28825, 602, 3, 1, 1166.591, -266.7376, 52.34578, 6.258945, 7200, 0, 0), +(@CGUID+5, 28825, 602, 3, 1, 1183.476, -274.8163, 52.35885, 5.94552, 7200, 0, 0), +(@CGUID+6, 28825, 602, 3, 1, 1173.505, -320.6456, 52.33779, 3.109934, 7200, 0, 0), +(@CGUID+7, 28825, 602, 3, 1, 1180.375, -313.61, 52.33779, 1.67872, 7200, 0, 0), +(@CGUID+8, 28825, 602, 3, 1, 1170.669, -317.3578, 52.33778, 6.266668, 7200, 0, 0), +(@CGUID+9, 28825, 602, 3, 1, 1124.124, -317.3333, 56.87379, 3.969684, 7200, 0, 0), +(@CGUID+10, 28825, 602, 3, 1, 1137.76, -318.5208, 56.99253, 3.95068, 7200, 0, 0), +(@CGUID+11, 28825, 602, 3, 1, 1116.752, -317.0807, 56.87379, 2.218908, 7200, 0, 0), +(@CGUID+12, 28825, 602, 3, 1, 1120.521, -325.4324, 56.8738, 4.654937, 7200, 0, 0), +(@CGUID+13, 28825, 602, 3, 1, 1123.408, -331.2204, 56.87381, 1.389227, 7200, 0, 0), +(@CGUID+14, 28825, 602, 3, 1, 1133.739, -324.2768, 56.8738, 2.719939, 7200, 0, 0), +(@CGUID+15, 28825, 602, 3, 1, 1178.836, -328.0336, 52.33779, 2.54861, 7200, 0, 0), +(@CGUID+16, 28825, 602, 3, 1, 1189.168, -323.8203, 52.33779, 3.040508, 7200, 0, 0), +(@CGUID+17, 28825, 602, 3, 1, 1166.612, -323.9933, 52.77784, 5.973127, 7200, 0, 0), +-- Stormfury Revenant +(@CGUID+18, 28826, 602, 3, 1, 1175.958, -253.4928, 52.35357, 4.728991, 7200, 10, 1), +(@CGUID+19, 28826, 602, 3, 1, 1183.695, -314.559, 52.33779, 2.208076, 7200, 10, 1), +(@CGUID+20, 28826, 602, 3, 1, 1120.32, -317.8011, 56.87379, 3.325409, 7200, 10, 1); diff --git a/sql/updates/world/2014_05_07_00_world_creature_template.sql b/sql/updates/world/2014_05_07_00_world_creature_template.sql new file mode 100644 index 00000000000..aa1a0511f18 --- /dev/null +++ b/sql/updates/world/2014_05_07_00_world_creature_template.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|256, `flags_extra`=0 WHERE `entry`=30413; diff --git a/sql/updates/world/2014_05_07_00_world_gossip_menu_option.sql b/sql/updates/world/2014_05_07_00_world_gossip_menu_option.sql new file mode 100644 index 00000000000..2939237dc7d --- /dev/null +++ b/sql/updates/world/2014_05_07_00_world_gossip_menu_option.sql @@ -0,0 +1 @@ +DELETE FROM `gossip_menu_option` WHERE `menu_id`=8903 AND `id`=1; diff --git a/sql/updates/world/2014_05_08_00_world_smart_scripts.sql b/sql/updates/world/2014_05_08_00_world_smart_scripts.sql new file mode 100644 index 00000000000..ebf971d512d --- /dev/null +++ b/sql/updates/world/2014_05_08_00_world_smart_scripts.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `target_type`=1 WHERE `entryorguid`=28256 AND `source_type`=0; diff --git a/sql/updates/world/2014_05_09_00_world_misc.sql b/sql/updates/world/2014_05_09_00_world_misc.sql new file mode 100644 index 00000000000..8f4971f771f --- /dev/null +++ b/sql/updates/world/2014_05_09_00_world_misc.sql @@ -0,0 +1,11 @@ +SET @OGUID := 6100; + +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+1; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 191849, 619, 3, 1, 523.5123, -301.1218, 68.84955, -1.570796, -0.004628658, 0.003181458, -0.7086, 0.705588, 7200, 255, 1), -- 191849 (Area: 4627) +(@OGUID+1, 191848, 619, 3, 1, 523.4318, -300.7111, 68.82808, -1.575045, 0, 0, -0.7071066, 0.7071069, 7200, 255, 1); -- 191848 (Area: 4627) + + +DELETE FROM `areatrigger_teleport` WHERE `id`=5235; +INSERT INTO `areatrigger_teleport` (`id`, `name`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES +(5235, 'Ahn''Kahet (exit)', 571, 3817.4,2032.82, 11.0133, 3.612832); diff --git a/sql/updates/world/2014_05_09_01_world_gossip.sql b/sql/updates/world/2014_05_09_01_world_gossip.sql new file mode 100644 index 00000000000..7e2a1b040fc --- /dev/null +++ b/sql/updates/world/2014_05_09_01_world_gossip.sql @@ -0,0 +1,15 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (10026,10025,10024); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 10026, 0, 0, 0, 8, 0, 13419, 0, 0, 0, 0, 0, '', 'Sky-Reaver Klum - Show Gossip if player Has rewarded Quest Preparations for War'), +(15, 10026, 1, 0, 0, 28, 0, 13419, 0, 0, 0, 0, 0, '', 'Sky-Reaver Klum - Show Gossip if player Has completed Quest Preparations for War'), +(15, 10025, 0, 0, 0, 8, 0, 13418, 0, 0, 0, 0, 0, '', 'Officer Van Rossem - Show Gossip if player Has rewarded Quest Preparations for War'), +(15, 10025, 1, 0, 0, 28, 0, 13418, 0, 0, 0, 0, 0, '', 'Officer Van Rossem - Show Gossip if player Has completed Quest Preparations for War'), +(15, 10024, 0, 0, 0, 8, 0, 12521, 0, 0, 0, 0, 0, '', 'Archmage Pentarus - Show Gossip if player Has rewarded Quest Where in the World is Hemet Nesingwary?'), +(15, 10024, 1, 0, 0, 28, 0, 12521, 0, 0, 0, 0, 0, '', 'Archmage Pentarus - Show Gossip if player Has completed Quest Where in the World is Hemet Nesingwary?'); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10025,10024) AND `id` IN (0,1); +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(10025, 0, 0, 'Take me to the ship.', 31625, 1, 1, 0, 0, 0, 0, '', 0), +(10025, 1, 0, 'Take me to the ship.', 31625, 1, 1, 0, 0, 0, 0, '', 0), +(10024, 0, 0, 'I''m ready to fly to Sholazar Basin.', 31594, 1, 1, 0, 0, 0, 0, '', 0), +(10024, 1, 0, 'I''m ready to fly to Sholazar Basin.', 31594, 1, 1, 0, 0, 0, 0, '', 0); diff --git a/sql/updates/world/2014_05_09_02_world_creature_template.sql b/sql/updates/world/2014_05_09_02_world_creature_template.sql new file mode 100644 index 00000000000..5520ca5d6f8 --- /dev/null +++ b/sql/updates/world/2014_05_09_02_world_creature_template.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `faction`=14 WHERE `entry`=15625; diff --git a/sql/updates/world/2014_05_10_00_world_player_factionchange_items.sql b/sql/updates/world/2014_05_10_00_world_player_factionchange_items.sql new file mode 100644 index 00000000000..febb1032de3 --- /dev/null +++ b/sql/updates/world/2014_05_10_00_world_player_factionchange_items.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `player_factionchange_items` WHERE `alliance_id` BETWEEN 48357 AND 48370; diff --git a/sql/updates/world/2014_05_10_01_world_halls_of_reflection.sql b/sql/updates/world/2014_05_10_01_world_halls_of_reflection.sql new file mode 100644 index 00000000000..6d6c8feb956 --- /dev/null +++ b/sql/updates/world/2014_05_10_01_world_halls_of_reflection.sql @@ -0,0 +1,218 @@ +SET @CGUID := 142975; -- need 93 +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+92; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +-- The Skybreaker +(@CGUID+0, 30351, 712, 3, 1, 40.85356, 44.65979, 25.11708, 2.617994, 7200, 0, 0), +(@CGUID+1, 30867, 712, 3, 1, -32.58828, 22.11204, 21.78542, 1.762783, 7200, 0, 0), +(@CGUID+2, 30867, 712, 3, 1, -11.11922, 23.02313, 21.71026, 1.727876, 7200, 0, 0), +(@CGUID+3, 30867, 712, 3, 1, 36.80393, 45.60984, 25.11626, 1.43117, 7200, 0, 0), +(@CGUID+4, 30351, 712, 3, 1, 1.432831, 22.45517, 21.75367, 3.193953, 7200, 0, 0), +(@CGUID+5, 30394, 712, 3, 1, -57.66117, -6.004808, 23.56313, 4.956735, 7200, 0, 0), +(@CGUID+6, 30351, 712, 3, 1, 1.032896, 9.635975, 20.53982, 3.211406, 7200, 0, 0), +(@CGUID+7, 30351, 712, 3, 1, -36.27486, -6.711545, 20.53283, 1.53589, 7200, 0, 0), +(@CGUID+8, 30351, 712, 3, 1, -36.26366, 6.612509, 20.5329, 4.642576, 7200, 0, 0), +(@CGUID+9, 30352, 712, 3, 1, -16.93313, 2.497342, 20.87589, 3.106686, 7200, 0, 0), +(@CGUID+10, 30352, 712, 3, 1, -49.00542, 0.003014, 20.75066, 0.01745329, 7200, 0, 0), +(@CGUID+11, 30352, 712, 3, 1, 16.73826, 2.378118, 20.50117, 3.159046, 7200, 0, 0), +(@CGUID+12, 30352, 712, 3, 1, 48.81408, 8.76864, 40.16452, 1.675516, 7200, 0, 0), +(@CGUID+13, 30352, 712, 3, 1, -16.85414, -2.518523, 20.87587, 3.263766, 7200, 0, 0), +(@CGUID+14, 30351, 712, 3, 1, 4.010166, -22.42914, 21.77942, 0.2617994, 7200, 0, 0), +(@CGUID+15, 30351, 712, 3, 1, 0.778628, -9.484917, 20.5411, 3.036873, 7200, 0, 0), +(@CGUID+16, 30867, 712, 3, 1, -9.599308, -23.15501, 21.71576, 4.782202, 7200, 0, 0), +(@CGUID+17, 30352, 712, 3, 1, 48.82674, -8.803922, 40.16443, 4.712389, 7200, 0, 0), +(@CGUID+18, 30867, 712, 3, 1, -32.99351, -22.17393, 21.7879, 4.502949, 7200, 0, 0), +(@CGUID+19, 30867, 712, 3, 1, 37.14339, -45.94594, 25.11639, 4.014257, 7200, 0, 0), +(@CGUID+20, 30344, 712, 3, 1, -2.700737, 12.2316, 20.52945, 1.727876, 7200, 0, 0), +(@CGUID+21, 22515, 712, 3, 1, -27.09398, 38.85326, 1.366914, 1.256637, 7200, 0, 0), +(@CGUID+22, 22515, 712, 3, 1, -6.396934, 39.80114, 1.470398, 1.256637, 7200, 0, 0), +(@CGUID+23, 22515, 712, 3, 1, 4.017809, 38.32001, 1.533938, 1.256637, 7200, 0, 0), +(@CGUID+24, 30392, 712, 3, 1, 28.1948, 7.542603, 23.37183, 5.8294, 7200, 0, 0), +(@CGUID+25, 30833, 712, 3, 1, 6.518055, 0.003965, 20.66434, 0, 7200, 0, 0), +(@CGUID+26, 30350, 712, 3, 1, 16.36582, -2.323581, 20.49201, 3.141593, 7200, 0, 0), +(@CGUID+27, 30347, 712, 3, 1, 28.24817, -7.667989, 23.37183, 0.4363323, 7200, 0, 0), +-- Orgrim Hammer +(@CGUID+28, 30755, 713, 3, 1, -18.96152, 27.52218, 90.04992, 6.213372, 7200, 0, 0), +(@CGUID+29, 30754, 713, 3, 1, -54.68485, 15.01545, 34.49284, 2.338741, 7200, 0, 0), +(@CGUID+30, 30752, 713, 3, 1, -10.94232, 32.12282, 10.65215, 1.518436, 7200, 0, 0), +(@CGUID+31, 30754, 713, 3, 1, -8.504885, -0.019059, 86.17371, 3.159046, 7200, 0, 0), +(@CGUID+32, 30866, 713, 3, 1, -36.03656, 23.91632, 34.00398, 1.937315, 7200, 0, 0), +(@CGUID+33, 30754, 713, 3, 1, 29.97084, 29.32993, 89.84912, 0.122173, 7200, 0, 0), +(@CGUID+34, 30753, 713, 3, 1, 15.19238, -0.108369, 86.17371, 3.071779, 7200, 0, 0), +(@CGUID+35, 30752, 713, 3, 1, 7.702429, 25.23042, 35.08076, 4.764749, 7200, 0, 0), +(@CGUID+36, 30755, 713, 3, 1, 8.555423, 5.155768, 84.79706, 3.560472, 7200, 0, 0), +(@CGUID+37, 30755, 713, 3, 1, -4.588624, 27.91955, 34.27925, 4.729842, 7200, 0, 0), +(@CGUID+38, 30754, 713, 3, 1, -19.19535, -27.024, 90.05069, 3.124139, 7200, 0, 0), +(@CGUID+39, 30754, 713, 3, 1, -54.63672, -15.29832, 34.48149, 3.717551, 7200, 0, 0), +(@CGUID+40, 30753, 713, 3, 1, -26.19901, -10.37834, 35.63048, 1.64061, 7200, 0, 0), +(@CGUID+41, 30755, 713, 3, 1, -56.79522, -3.870484, 13.31639, 0.1047198, 7200, 0, 0), +(@CGUID+42, 30755, 713, 3, 1, -56.8364, 3.557915, 13.3138, 6.178465, 7200, 0, 0), +(@CGUID+43, 30753, 713, 3, 1, -34.95441, 11.84717, 11.5961, 1.082104, 7200, 0, 0), +(@CGUID+44, 30752, 713, 3, 1, 1.994709, 31.96335, 10.09305, 1.448623, 7200, 0, 0), +(@CGUID+45, 30753, 713, 3, 1, -26.06219, 10.57757, 35.58858, 4.712389, 7200, 0, 0), +(@CGUID+46, 30752, 713, 3, 1, 15.2307, 31.76827, 10.66515, 1.466077, 7200, 0, 0), +(@CGUID+47, 30753, 713, 3, 1, 1.994774, 17.06817, 9.246212, 1.500983, 7200, 0, 0), +(@CGUID+48, 30755, 713, 3, 1, -4.484874, 18.00111, 8.70937, 4.729842, 7200, 0, 0), +(@CGUID+49, 30755, 713, 3, 1, 8.521951, 17.92888, 8.777781, 4.625123, 7200, 0, 0), +(@CGUID+50, 30755, 713, 3, 1, -26.0374, 6.533113, 9.42994, 3.124139, 7200, 0, 0), +(@CGUID+51, 30755, 713, 3, 1, -19.30323, 6.17474, 6.879124, 0, 7200, 0, 0), +(@CGUID+52, 30755, 713, 3, 1, 8.786416, -5.037911, 84.79706, 2.740167, 7200, 0, 0), +(@CGUID+53, 30755, 713, 3, 1, 8.557505, 5.72448, 34.52152, 3.106686, 7200, 0, 0), +(@CGUID+54, 30755, 713, 3, 1, 8.450569, -5.609207, 34.52058, 2.792527, 7200, 0, 0), +(@CGUID+55, 30866, 713, 3, 1, -36.32559, -23.21568, 34.04234, 4.39823, 7200, 0, 0), +(@CGUID+56, 30753, 713, 3, 1, -35.48437, -11.9256, 11.71411, 5.986479, 7200, 0, 0), +(@CGUID+57, 30752, 713, 3, 1, 8.472344, -22.36673, 34.99833, 1.780236, 7200, 0, 0), +(@CGUID+58, 30755, 713, 3, 1, -4.738312, -28.17381, 34.26831, 1.466077, 7200, 0, 0), +(@CGUID+59, 30755, 713, 3, 1, 31.3718, -29.84369, 89.84172, 2.96706, 7200, 0, 0), +(@CGUID+60, 30755, 713, 3, 1, 37.59615, -9.010085, 30.1788, 0.05235988, 7200, 0, 0), +(@CGUID+61, 30755, 713, 3, 1, 37.52684, 8.718971, 30.17881, 5.969026, 7200, 0, 0), +(@CGUID+62, 30755, 713, 3, 1, -25.42656, -6.577197, 9.33257, 2.932153, 7200, 0, 0), +(@CGUID+63, 30755, 713, 3, 1, 23.24178, 6.302864, 7.032903, 3.176499, 7200, 0, 0), +(@CGUID+64, 30755, 713, 3, 1, -19.45751, -6.235432, 6.89157, 6.265732, 7200, 0, 0), +(@CGUID+65, 30752, 713, 3, 1, -11.36508, -29.14235, 10.01249, 4.642576, 7200, 0, 0), +(@CGUID+66, 30753, 713, 3, 1, 46.41658, 7.696208, 10.48851, 4.101524, 7200, 0, 0), +(@CGUID+67, 30752, 713, 3, 1, 15.44485, -29.7788, 9.977043, 4.694936, 7200, 0, 0), +(@CGUID+68, 30754, 713, 3, 1, 38.01897, -12.83605, 30.17452, 0.6108652, 7200, 0, 0), +(@CGUID+69, 30866, 713, 3, 1, 17.22244, -26.63993, 35.64188, 4.817109, 7200, 0, 0), +(@CGUID+70, 30752, 713, 3, 1, 2.069969, -29.66959, 9.395721, 4.677482, 7200, 0, 0), +(@CGUID+71, 30753, 713, 3, 1, 2.036507, -17.18819, 9.245911, 4.764749, 7200, 0, 0), +(@CGUID+72, 30753, 713, 3, 1, 46.33955, -7.35728, 10.47599, 2.391101, 7200, 0, 0), +(@CGUID+73, 30755, 713, 3, 1, 8.592517, -17.94128, 8.77952, 1.553343, 7200, 0, 0), +(@CGUID+74, 30755, 713, 3, 1, -4.406364, -17.97099, 8.709299, 1.48353, 7200, 0, 0), +(@CGUID+75, 30755, 713, 3, 1, 22.90693, -6.745431, 7.115322, 3.124139, 7200, 0, 0), +(@CGUID+76, 30824, 713, 3, 1, 17.28272, 21.73325, 35.37741, 1.623156, 7200, 0, 0), +(@CGUID+77, 30827, 713, 3, 1, 45.76886, -8.964413, 30.17881, 1.396263, 7200, 0, 0), +(@CGUID+78, 30825, 713, 3, 1, 38.55754, -0.025193, 10.27214, 3.106686, 7200, 0, 0), +(@CGUID+79, 30826, 713, 3, 1, 55.08521, -3.344726, 30.1788, 2.687807, 7200, 0, 0), +(@CGUID+80, 37593, 713, 3, 1, 2.015905, 34.44526, 10.09305, 1.64061, 7200, 0, 0), +(@CGUID+81, 37593, 713, 3, 1, 14.85607, 33.80163, 9.849781, 1.64061, 7200, 0, 0), +(@CGUID+82, 37593, 713, 3, 1, -10.84229, 34.34502, 10.6434, 1.64061, 7200, 0, 0), +-- Others +(@CGUID+83, 22515, 668, 3, 1, 5274.933, 1693.941, 797.2499, 0, 7200, 0, 0), +(@CGUID+84, 36736, 668, 3, 1, 5415.332, 2080.358, 720.5068, 1.64061, 7200, 0, 0), +(@CGUID+85, 36736, 668, 3, 1, 5376.905, 2115.425, 720.3566, 6.126106, 7200, 0, 0), +(@CGUID+86, 36736, 668, 3, 1, 5445.525, 2099.37, 720.3999, 2.600541, 7200, 0, 0), +(@CGUID+87, 36736, 668, 3, 1, 5431.74, 2087.503, 720.3914, 2.076942, 7200, 0, 0), +(@CGUID+88, 36736, 668, 3, 1, 5395.38, 2146.632, 720.2123, 5.305801, 7200, 0, 0), +(@CGUID+89, 36736, 668, 3, 1, 5380.971, 2134.462, 720.6889, 5.637414, 7200, 0, 0), +(@CGUID+90, 36736, 668, 3, 1, 5449.623, 2117.587, 720.4929, 3.176499, 7200, 0, 0), +(@CGUID+91, 36736, 668, 3, 1, 5412.493, 2150.627, 720.3359, 4.502949, 7200, 0, 0), +(@CGUID+92, 37071, 668, 3, 1, 5408.362, 2110.33, 726.9917, 3.630285, 7200, 0, 0); + +DELETE FROM `creature_template_addon` WHERE `entry`=36736; +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(36736, 0, 0x0, 0x1, '69174'); -- Invisible Stalker (Icecrown Dungeon Trap) - Reflection Window Beam Visual + +DELETE FROM `creature_text` WHERE `entry` IN (30344, 30824, 36954); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextID`) VALUES +-- High Captain Justin Bartlett +(30344, 0, 0, 'FIRE! FIRE!', 14, 0, 100, 0, 0, 16721, 'High Captain Justin Bartlett - Fire', 36993), +(30344, 1, 0, 'Quickly, climb aboard! We mustn''t tarry here! There''s no telling when this whole mountainside will collapse.', 14, 0, 100, 0, 0, 16722, 'High Captain Justin Bartlett - Final', 37213), +-- Sky-Reaver Korm Blackscar +(30824, 0, 0, 'FIRE! FIRE!', 14, 0, 100, 0, 0, 16732, 'Sky-Reaver Korm Blackscar - Fire', 38681), +(30824, 1, 0, 'Get on board, now! This whole mountainside could collapse at any moment.', 14, 0, 100, 0, 0, 16733, 'Sky-Reaver Korm Blackscar - Final', 37212), +-- Lich King +(36954, 0, 0, 'Your allies have arrived, Jaina, just as you promised. You will all become powerful agents of the Scourge..', 14, 0, 100, 0, 0, 17212, 'Lich King SAY_LICH_KING_AGGRO_A', 37172), +(36954, 1, 0, 'I will not make the same mistake again, Sylvanas. This time there will be no escape. You will all serve me in death!', 14, 0, 100, 0, 0, 17213, 'Lich King SAY_LICH_KING_AGGRO_H', 37173), +(36954, 2, 0, 'There is no escape!', 14, 0, 100, 0, 0, 17217, 'Lich King SAY_LICH_KING_WALL_01', 37177), +(36954, 3, 0, 'Succumb to the chill of the grave.', 14, 0, 100, 0, 0, 17218, 'Lich King SAY_LICH_KING_WALL_02', 37175), +(36954, 4, 0, 'Another dead end.', 14, 0, 100, 0, 0, 17219, 'Lich King SAY_LICH_KING_WALL_03', 37176), +(36954, 5, 0, 'How long can you fight it?', 14, 0, 100, 0, 0, 17220, 'Lich King SAY_LICH_KING_WALL_04', 38668), +(36954, 6, 0, 'Arise minions. Do not let them pass.', 14, 0, 100, 0, 0, 17216, 'Lich King SAY_LICH_KING_GHOUL', 38669), +(36954, 7, 0, 'Minions, sieze them. Bring their corpses back to me.', 14, 0, 100, 0, 0, 17222, 'Lich King SAY_LICH_KING_ABON', 38670), +(36954, 8, 0, 'Death''s cold embrace awaits.', 14, 0, 100, 0, 0, 17221, 'Lich King SAY_LICH_KING_WINTER', 37174), +(36954, 9, 0, 'Nowhere to run! You''re mine now...', 14, 0, 100, 0, 0, 17223, 'Lich King SAY_LICH_KING_END_DUN', 36994); + +DELETE FROM `areatrigger_scripts` WHERE `entry` IN (5605,5740); +INSERT INTO `areatrigger_scripts` (`entry`,`scriptname`) VALUES +(5605, 'at_hor_shadow_throne'), +(5740, 'at_hor_impenetrable_door'); + +DELETE FROM `areatrigger_teleport` WHERE `id`=5740; +INSERT INTO `areatrigger_teleport` (`id`, `name`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES +(5740, 'Halls of Reflection (The Impenetrable Door)', 668, 5354.01, 2053.53, 707.695, 0.7853982); + +DELETE FROM `lfg_entrances` WHERE `dungeonId` IN(255,256); +INSERT INTO `lfg_entrances` (`dungeonId`, `name`, `position_x`, `position_y`, `position_z`, `orientation`) VALUES +(255, 'Halls of Reflection (Normal)', 5239.01, 1932.64, 707.695, 0.800565), +(256, 'Halls of Reflection (Heroic)', 5239.01, 1932.64, 707.695, 0.800565); + +-- Lady Jaina Proudmoore +UPDATE `creature_template` SET `ScriptName`='npc_jaina_or_sylvanas_intro_hor' WHERE `entry`=37221; +-- Lady Sylvanas Windrunner +UPDATE `creature_template` SET `ScriptName`='npc_jaina_or_sylvanas_intro_hor' WHERE `entry`=37223; +-- Frostsworn General +UPDATE `creature_template` SET `ScriptName`='npc_frostsworn_general' WHERE `entry`=36723; +-- The Lich King +UPDATE `creature_template` SET `ScriptName`='npc_the_lich_king_escape_hor', `mechanic_immune_mask`=617299839 WHERE `entry` = 36954; +-- Icecrown Dungeon Horde Gunship Cannon +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=37593; + +UPDATE `gameobject_template` SET `faction`=2102,`flags`=32 WHERE `entry`=201385; +UPDATE `gameobject_template` SET `faction`=1375,`flags`=32 WHERE `entry` IN (201596,201709,202211); +UPDATE `gameobject_template` SET `flags`=40 WHERE `entry` IN (201598,201599); +UPDATE `gameobject_template` SET `faction`=35,`flags`=16 WHERE `entry` IN (201710,202212,202336,202337); + + -- Lady Jaina Proudmoore +UPDATE `creature_template` SET `spell1`=0, `gossip_menu_id`=10860 WHERE `entry`=36955; + -- Lady Sylvanas Windrunner +UPDATE `creature_template` SET `gossip_menu_id`=10909 WHERE `entry`=37554; + +DELETE FROM `gossip_menu` WHERE `entry`=10931; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(10931, 15190); -- 37554 -- outro gossip + +UPDATE `gossip_menu_option` SET `option_id`=1, `npc_option_npcflag`=1 WHERE `menu_id`=10860 AND `id`=0; + +-- skip intro +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (11031,10950); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,11031,1,0,0,14,0,24500,0,0,1,0,0,'','Show options only if quest 24500 taken/complete/rewarded'), +(15,10950,1,0,0,14,0,24802,0,0,1,0,0,'','Show options only if quest 24802 taken/complete/rewarded'); + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (72900,70190,70017,72368,72369); +INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES +(72900, 'spell_hor_start_halls_of_reflection_quest_ae'), +(70190, 'spell_hor_evasion'), +(70017, 'spell_hor_gunship_cannon_fire'), +(72368, 'spell_marwyn_shared_suffering'), +(72369, 'spell_marwyn_shared_suffering'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (69857,70199,70021,70246); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,1,69857,0,0,31,0,3,36954,0,0,0,0,'','Taunt Arthas targets The Lich King'), +(13,2,70199,0,0,31,0,3,36954,0,0,0,0,'','Blinding Retreat targets The Lich King'), +(13,1,70021,0,0,31,0,3,22515,0,0,0,0,'','Gunship Cannon Fire targets World Trigger'), +(13,1,70021,0,0,1,0,70017,0,0,1,0,0,'','Gunship Cannon Fire target not has aura Gunship Cannon Fire'), +(13,1,70246,0,0,31,0,3,22515,0,0,0,0,'','Gunship Cannon Fire targets World Trigger'), +(13,1,70246,0,0,1,0,70017,0,0,1,0,0,'','Gunship Cannon Fire target not has aura Gunship Cannon Fire'); + +-- Cloak of Darkness proc on dodge +DELETE FROM `spell_proc_event` WHERE `entry`=70188; +INSERT INTO `spell_proc_event` (`entry`,`procEx`) VALUES +(70188,0x10); + +SET @OGUID := 21620; -- need 12 +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+11; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 201709, 668, 3, 1, 5228.354, 1640.958, 783.7306, 5.585054, 0, 0, 0, 1, -7200, 255, 1), +(@OGUID+1, 201709, 668, 3, 1, 5215.889, 1626.078, 796.4562, 5.585054, 0, 0, 0, 1, -7200, 255, 1), +(@OGUID+2, 202211, 668, 3, 1, 5242.835, 1623.45, 784.1498, 5.811947, 0, 0, 0, 1, -7200, 255, 1), +(@OGUID+3, 202211, 668, 3, 1, 5225.201, 1589.099, 808.5507, 5.811947, 0, 0, 0, 1, -7200, 255, 1), +(@OGUID+4, 202211, 668, 3, 1, 5233.985, 1606.311, 796.2543, 5.811947, 0, 0, 0, 1, -7200, 255, 1), +(@OGUID+5, 195682, 712, 3, 1, 4.395291, 13.68329, 20.80389, 4.19445, 0, 0, 0, 1, 7200, 255, 1), +(@OGUID+6, 201710, 712, 1, 1, -11.7548, 12.02463, 20.40827, 3.217069, 0, 0, 0, 1, 7200, 255, 1), +(@OGUID+7, 202336, 712, 2, 1, -11.7548, 12.02463, 20.40827, 3.217069, 0, 0, 0, 1, 7200, 255, 1), +(@OGUID+8, 202212, 713, 1, 1, 12.23327, 22.47315, 35.07432, 1.239183, 0, 0, 0, 1, 7200, 255, 1), +(@OGUID+9, 202337, 713, 2, 1, 12.23327, 22.47315, 35.07432, 1.239183, 0, 0, 0, 1, 7200, 255, 1), +(@OGUID+10, 195682, 713, 3, 1, 22.17697, 22.95274, 35.65761, 1.919862, 0, 0, 0, 1, 7200, 255, 1), +(@OGUID+11, 191640, 713, 3, 1, 42.08455, 14.60723, 10.65548, 4.244588, 0, 0, 0, 1, 7200, 255, 1); + +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN(72395,72396,72397); +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES +(72395,72395,72390), -- Hopelessness +(72396,72396,72391), -- Hopelessness +(72397,72397,72393); -- Hopelessness + +DELETE FROM `spell_custom_attr` WHERE `entry` = 74117; +INSERT INTO `spell_custom_attr` (`entry`,`attributes`) VALUES +(74117, 2); diff --git a/sql/updates/world/2014_05_11_00_world_gameobject.sql b/sql/updates/world/2014_05_11_00_world_gameobject.sql new file mode 100644 index 00000000000..a25755671a5 --- /dev/null +++ b/sql/updates/world/2014_05_11_00_world_gameobject.sql @@ -0,0 +1,289 @@ +ALTER TABLE `gameobject` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; + +SET @OGUID := 76921; + +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+282; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES +(@OGUID+0, 186519, 571, 1, 1, 2017.644, -4887.931, 214.6985, 5.244714, 0, 0, 0, 1, 120, 255, 1, 15595), -- Fort Wildervar +(@OGUID+1, 186520, 571, 1, 1, 2014.79, -4890.302, 214.6067, 2.434729, 0, 0, 0, 1, 120, 255, 1, 15595), -- Vengeance Landing +(@OGUID+2, 186526, 571, 1, 1, 2017.778, -4887.679, 211.9238, 5.218536, 0, 0, 0, 1, 120, 255, 1, 15595), -- Camp Winterhoof +(@OGUID+3, 186666, 571, 1, 1, 2978.301, -4561.268, 265.7909, 1.090829, 0, 0, 0, 1, 120, 255, 1, 17658), -- Frozen Waterfall +(@OGUID+4, 186798, 571, 1, 1, 2597.174, -3735.528, 244.6674, 3.769912, 0, 0, 0, 1, 120, 255, 1, 17658), -- Gjalerbron Cage +(@OGUID+5, 187106, 571, 1, 1, 1916.92, 5820.15, 8.111198, 2.303831, 0, 0, 0, 1, 120, 255, 1, 15595), -- Brazier +(@OGUID+6, 187251, 571, 1, 1, 2853.868, 5838.515, 100.9134, 4.699066, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire +(@OGUID+7, 187453, 571, 1, 1, 3489.599, 6303.194, -125.5745, 6.26304, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bubbly Fissure +(@OGUID+8, 187454, 571, 1, 1, 3830.716, 5984.776, -126.78, 0.7966011, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bubbly Fissure +(@OGUID+9, 187455, 571, 1, 1, 4007.937, 6009.374, -125.0908, 0.1617281, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bubbly Fissure +(@OGUID+10, 188265, 571, 1, 1, 3095.937, -2048.806, 89.02545, 0.5235979, 0, 0, 0, 1, 120, 255, 1, 15595), -- Venture Bay +(@OGUID+11, 188266, 571, 1, 1, 3183.273, -1991.391, 90.70473, 2.024579, 0, 0, 0, 1, 120, 255, 1, 15595), -- Conquest Hold +(@OGUID+12, 188267, 571, 1, 1, 3183.291, -1991.38, 89.82629, 2.024579, 0, 0, 0, 1, 120, 255, 1, 15595), -- Amberpine Lodge +(@OGUID+13, 188268, 571, 1, 1, 3185.445, -1990.872, 90.65273, 4.721116, 0, 0, 0, 1, 120, 255, 1, 15595), -- Zul''Drak +(@OGUID+14, 188269, 571, 1, 1, 3184.378, -1989.682, 90.62007, 6.178466, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dragonblight +(@OGUID+15, 188270, 571, 1, 1, 3096.181, -2050.726, 89.68048, 2.95833, 0, 0, 0, 1, 120, 255, 1, 15595), -- Amberpine Lodge +(@OGUID+16, 188271, 571, 1, 1, 3096.269, -2050.634, 88.82845, 2.975771, 0, 0, 0, 1, 120, 255, 1, 15595), -- Conquest Hold +(@OGUID+17, 188330, 571, 1, 1, 3785.572, -4975.321, 119.4001, 2.74889, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dun Argol +(@OGUID+18, 188331, 571, 1, 1, 3785.993, -4975.519, 119.3407, 5.916667, 0, 0, 0, 1, 120, 255, 1, 15595), -- Thor Modan +(@OGUID+19, 188332, 571, 1, 1, 3785.9, -4975.272, 119.3984, 1.160642, 0, 0, 0, 1, 120, 255, 1, 15595), -- Grizzlemaw +(@OGUID+20, 188336, 571, 1, 1, 4359.022, -4089.576, 188.5192, 4.869471, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dragonblight +(@OGUID+21, 188387, 571, 1, 1, 4460.03, -1060.602, 169.3596, 4.878196, 0, 0, 0, 1, 120, 255, 1, 15595), -- Grizzly Hills +(@OGUID+22, 188388, 571, 1, 1, 4459.658, -1058.771, 169.4787, 1.850049, 0, 0, 0, 1, 120, 255, 1, 15595), -- Wyrmrest Temple +(@OGUID+23, 188389, 571, 1, 1, 4460.785, -1059.484, 169.2406, 0.1483503, 0, 0, 0, 1, 120, 255, 1, 15595), -- Light''s Trust +(@OGUID+24, 188405, 571, 1, 1, 4458.938, -1059.854, 169.1528, 3.150327, 0, 0, 0, 1, 120, 255, 1, 15595), -- Wintergarde Keep +(@OGUID+25, 188406, 571, 1, 1, 4460.755, -1059.488, 168.8691, 0.08726409, 0, 0, 0, 1, 120, 255, 1, 15595), -- Zul''Drak +(@OGUID+26, 188542, 571, 1, 1, 4319.167, 580.9983, -6.637729, 2.853604, 0, 0, 0, 1, 120, 255, 1, 15595), -- Scourge Bonfire +(@OGUID+27, 188545, 571, 1, 1, 4295.252, 376.5208, -6.531718, 2.897245, 0, 0, 0, 1, 120, 255, 1, 15595), -- Scourge Bonfire +(@OGUID+28, 188547, 571, 1, 1, 4222.608, 514.5868, 11.47814, 2.495818, 0, 0, 0, 1, 120, 255, 1, 15595), -- Scourge Bonfire +(@OGUID+29, 188551, 571, 1, 1, 4924.042, 1250.615, 226.7416, 5.646141, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+30, 188565, 571, 1, 1, 4872.197, -1268.828, 168.1219, 4.047813, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+31, 188566, 571, 1, 1, 4869.077, -1266.7, 168.1245, 4.053197, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+32, 188567, 571, 1, 1, 4887.115, -1319.99, 169.8827, 2.763404, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+33, 188568, 571, 1, 1, 4843.478, -1238.389, 168.1355, 3.189116, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+34, 188569, 571, 1, 1, 4843.253, -1234.773, 168.0832, 3.001129, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+35, 188570, 571, 1, 1, 4834.089, -1278.816, 168.0286, 1.95314, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+36, 188571, 571, 1, 1, 4839.024, -1277.866, 168.0992, 1.88234, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+37, 188576, 571, 1, 1, 4830.733, -1281.578, 168.0519, 3.001428, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+38, 188577, 571, 1, 1, 4813.866, -1379.148, 168.2439, 1.575411, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+39, 188578, 571, 1, 1, 4759.164, -1324.038, 168.0459, 0.9814962, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+40, 188579, 571, 1, 1, 4756.252, -1322.118, 167.9957, 0.9735442, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+41, 188580, 571, 1, 1, 4594.677, -1384.538, 157.1768, 3.218987, 0, 0, 0, 1, 120, 255, 1, 15595), -- +(@OGUID+42, 189294, 571, 1, 1, 3471.479, 940.9305, 153.8268, 1.727875, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+43, 189324, 571, 1, 1, 1946.168, -5494.583, 206.8149, 4.319691, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+44, 189961, 571, 1, 1, 2734.848, -3931.597, 374.5498, 3.001947, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire +(@OGUID+45, 189962, 571, 1, 1, 2710.609, -3917.27, 375.0239, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire +(@OGUID+46, 189963, 571, 1, 1, 2687.596, -3977.962, 375.6875, 2.91469, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire +(@OGUID+47, 189964, 571, 1, 1, 2674.4, -4011.544, 374.0872, 3.141593, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+48, 189965, 571, 1, 1, 2640.501, -4069.877, 352.7829, 3.316144, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+49, 189966, 571, 1, 1, 2652.039, -4094.349, 352.7137, 2.696529, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+50, 190017, 571, 1, 1, 3886.404, -3854.78, 178.6396, 3.298687, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+51, 190018, 571, 1, 1, 3879.928, -3898.141, 177.3041, 3.298687, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+52, 190129, 571, 1, 1, 4093.27, -814.5311, 312.8538, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), -- Campfire +(@OGUID+53, 190132, 571, 1, 1, 4067.972, -1217.099, 129.8714, 2.33874, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire +(@OGUID+54, 190134, 571, 1, 1, 4039.465, -1295.785, 130.3643, 3.194002, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire +(@OGUID+55, 190136, 571, 1, 1, 2901.714, -4730.744, 322.4269, 0.06981169, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+56, 190137, 571, 1, 1, 2916.552, -4763.382, 324.672, 1.48353, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+57, 190138, 571, 1, 1, 2929.887, -4738.271, 322.2895, 0.2967051, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+58, 190275, 571, 1, 1, 3285.183, 1226.998, 137.6425, 2.050762, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+59, 190281, 571, 1, 1, 3167.204, 977.7576, 113.9504, 1.84132, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire +(@OGUID+60, 190662, 571, 1, 1, 2013.997, -4888.311, 211.8739, 1.413715, 0, 0, 0, 1, 120, 255, 1, 15595), -- Westguard Keep +(@OGUID+61, 191201, 571, 1, 1, 4352.986, -4139.897, 183.2539, 0.9250238, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+62, 191223, 571, 1, 1, 3395.608, 3933.193, 28.70841, 0.3316107, 0, 0, 0, 1, 120, 255, 1, 15595), -- Taunka''le Village +(@OGUID+63, 191224, 571, 1, 1, 3396.677, 3930.758, 28.65611, 3.47321, 0, 0, 0, 1, 120, 255, 1, 15595), -- Dragonblight +(@OGUID+64, 191241, 571, 1, 1, 3200.345, -1976.016, 85.20889, 3.036875, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+65, 191242, 571, 1, 1, 3201.704, -1965.061, 85.96173, 1.431168, 0, 0, 0, 1, 120, 255, 1, 15595), -- Chair +(@OGUID+66, 191243, 571, 1, 1, 3210.138, -1984.84, 85.72446, 5.471607, 0, 0, 0, 1, 120, 255, 1, 15595), -- Chair +(@OGUID+67, 191245, 571, 1, 1, 3192.13, -1984.083, 85.71163, 3.857178, 0, 0, 0, 1, 120, 255, 1, 15595), -- Chair +(@OGUID+68, 191256, 571, 1, 1, 3501.222, -4490.944, 225.8872, 2.897245, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire +(@OGUID+69, 191257, 571, 1, 1, 3510.455, -4590.846, 221.0397, 2.565629, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire +(@OGUID+70, 191333, 571, 1, 1, 3072.524, -512.8351, 124.2693, 0.8203033, 0, 0, 0, 1, 120, 255, 1, 15595), -- Bonfire +(@OGUID+71, 191791, 571, 1, 1, 5798.875, -1597.493, 234.2027, 2.10312, 0, 0, 0, 1, 120, 255, 0, 15595), -- +(@OGUID+72, 192256, 571, 1, 1, 9025.685, -1178.616, 1058.108, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), -- Gravestone +(@OGUID+73, 192555, 571, 1, 1, 6137.667, -322.4479, 436.2447, 0.1414226, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire +(@OGUID+74, 192722, 571, 1, 4, 7355.991, -2967.411, 906.3082, 1.727875, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+75, 192723, 571, 1, 4, 7352.724, -2973.597, 938.7529, 2.033306, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+76, 192724, 571, 1, 4, 7354.643, -2973.122, 921.2005, 5.009097, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+77, 192725, 571, 1, 4, 7348.135, -2967.436, 911.3059, 0.7417646, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+78, 192726, 571, 1, 4, 7355.149, -2969.905, 920.3154, 3.281227, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+79, 192727, 571, 1, 4, 7360.083, -2966.736, 911.498, 0.4014239, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+80, 192728, 571, 1, 4, 7360.628, -2971.285, 912.2922, 2.556908, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+81, 192729, 571, 1, 4, 7347.269, -2971.479, 912.0352, 0.1483528, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+82, 192730, 571, 1, 4, 7347.157, -2963.165, 907.7184, 2.801247, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+83, 192731, 571, 1, 4, 7362.757, -2961.672, 907.7986, 3.42085, 0, 0, 0, 1, 120, 255, 1, 17658), -- Throne +(@OGUID+84, 193196, 571, 1, 2, 4840.929, 1494.97, 209.6041, 2.103119, 0, 0, 0, 1, 120, 255, 1, 17658), -- Fordragon''s Shield +(@OGUID+85, 193197, 571, 1, 2, 4875.424, 1486.991, 209.5768, 2.120576, 0, 0, 0, 1, 120, 255, 1, 17658), -- Saurfang''s Battle Armor +(@OGUID+86, 193198, 571, 1, 2, 4875.969, 1487.23, 209.6242, 5.707228, 0, 0, 0, 1, 120, 255, 1, 17658), -- Shoulder [PH] +(@OGUID+87, 193220, 571, 1, 2, 4901.706, 1501.568, 214.8973, 0.0005237369, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+88, 193221, 571, 1, 2, 4899.952, 1499.167, 214.9082, 5.41925, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+89, 193222, 571, 1, 2, 4867.967, 1505.212, 209.1965, 1.82941, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+90, 193223, 571, 1, 2, 4867.679, 1501.424, 209.7898, 0.969179, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+91, 193224, 571, 1, 2, 4867.233, 1510.344, 210.8179, 2.48454, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+92, 193225, 571, 1, 2, 4869.894, 1498.136, 209.9754, 2.077466, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+93, 193226, 571, 1, 2, 4868.827, 1515.047, 210.5834, 1.567609, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+94, 193227, 571, 1, 2, 4872.966, 1514.59, 212.3312, 4.885982, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+95, 193228, 571, 1, 2, 4867.919, 1513.521, 211.374, 4.224219, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+96, 193229, 571, 1, 2, 4899.046, 1500.026, 213.7757, 4.281601, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+97, 193230, 571, 1, 2, 4875.33, 1483.97, 209.321, 1.099933, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+98, 193231, 571, 1, 2, 4875.167, 1482.726, 209.5813, 3.899255, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+99, 193232, 571, 1, 2, 4873.677, 1479.37, 209.2619, 6.044956, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+100, 193233, 571, 1, 2, 4878.027, 1483.453, 209.3674, 3.726801, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+101, 193234, 571, 1, 2, 4874.569, 1482.123, 209.5809, 5.821372, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+102, 193235, 571, 1, 2, 4874.725, 1480.063, 209.5809, 3.477762, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+103, 193236, 571, 1, 2, 4877.155, 1482.281, 209.5077, 6.219547, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+104, 193237, 571, 1, 2, 4879.968, 1484.747, 209.8505, 4.501981, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+105, 193238, 571, 1, 2, 4876.323, 1484.97, 208.3138, 2.230834, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+106, 193239, 571, 1, 2, 4877.1, 1484.656, 209.1863, 2.269449, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+107, 193240, 571, 1, 2, 4871.932, 1485.224, 209.3937, 1.457871, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+108, 193241, 571, 1, 2, 4868.574, 1498.977, 210.52, 0.1396255, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+109, 193242, 571, 1, 2, 4868.924, 1496.627, 210.149, 3.220151, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+110, 193243, 571, 1, 2, 4866.884, 1497.613, 209.2193, 5.581869, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+111, 193244, 571, 1, 2, 4870.409, 1485.929, 208.8148, 2.012669, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+112, 193245, 571, 1, 2, 4873.674, 1463.747, 209.9446, 1.692968, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+113, 193246, 571, 1, 2, 4867.43, 1463.248, 208.1823, 3.382769, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+114, 193247, 571, 1, 2, 4870.533, 1463.094, 209.2539, 2.985031, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+115, 193248, 571, 1, 2, 4872.965, 1463.778, 208.817, 0.3284273, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+116, 193249, 571, 1, 2, 4866.135, 1454.382, 209.254, 2.906489, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+117, 193250, 571, 1, 2, 4863.497, 1511.99, 211.0073, 5.427976, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+118, 193251, 571, 1, 2, 4862.127, 1509.542, 210.2737, 4.765272, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+119, 193252, 571, 1, 2, 4865.178, 1507.217, 210.3379, 5.044526, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+120, 193253, 571, 1, 2, 4853.508, 1504.255, 209.7053, 1.998924, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+121, 193254, 571, 1, 2, 4849.161, 1504.778, 210.4205, 4.066619, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+122, 193255, 571, 1, 2, 4835.896, 1488.719, 209.5815, 3.416903, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+123, 193256, 571, 1, 2, 4841.354, 1482.227, 209.5805, 1.850049, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+124, 193257, 571, 1, 2, 4841.196, 1489.903, 209.5813, 5.725396, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+125, 193258, 571, 1, 2, 4840.608, 1484.361, 209.5813, 2.016231, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+126, 193259, 571, 1, 2, 4839.124, 1486.542, 209.2619, 1.978337, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+127, 193260, 571, 1, 2, 4843.821, 1489.113, 209.283, 5.184155, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+128, 193261, 571, 1, 2, 4842.286, 1483.191, 209.5809, 0.3759405, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+129, 193262, 571, 1, 2, 4845.386, 1486.806, 209.4725, 1.254085, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+130, 193263, 571, 1, 2, 4835.046, 1490.908, 209.2909, 1.831047, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+131, 193264, 571, 1, 2, 4838.369, 1493.165, 209.3897, 2.568887, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+132, 193265, 571, 1, 2, 4842.897, 1491.009, 209.5809, 5.959332, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+133, 193266, 571, 1, 2, 4844.97, 1489.892, 209.3359, 3.932379, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+134, 193267, 571, 1, 2, 4847.749, 1488.823, 209.301, 5.789437, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+135, 193268, 571, 1, 2, 4841.975, 1486.234, 209.4944, 5.791942, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+136, 193269, 571, 1, 2, 4844.339, 1484.116, 209.4908, 3.889533, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+137, 193270, 571, 1, 2, 4840.96, 1481.422, 209.4966, 4.98909, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+138, 193271, 571, 1, 2, 4844.502, 1486.135, 209.3802, 1.443149, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+139, 193272, 571, 1, 2, 4836.853, 1488.425, 209.4966, 3.060501, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+140, 193273, 571, 1, 2, 4844.616, 1493.514, 209.3608, 3.11481, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+141, 193274, 571, 1, 2, 4847.851, 1486.434, 209.3608, 1.151302, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+142, 193275, 571, 1, 2, 4841.349, 1488.082, 208.3138, 3.749274, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+143, 193276, 571, 1, 2, 4842.697, 1487.741, 209.3854, 3.587177, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+144, 193277, 571, 1, 2, 4847.485, 1488.835, 207.9903, 0.485505, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+145, 193278, 571, 1, 2, 4856.974, 1498.668, 210.0112, 5.593781, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+146, 193279, 571, 1, 2, 4860.162, 1499.833, 209.4969, 5.515764, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+147, 193280, 571, 1, 2, 4862.285, 1462.604, 209.3651, 4.037887, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+148, 193281, 571, 1, 2, 4862.758, 1457.965, 209.9445, 0.4537852, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+149, 193282, 571, 1, 2, 4859.121, 1463.345, 209.3854, 5.777565, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+150, 193283, 571, 1, 2, 4861.292, 1455.554, 209.3854, 5.742657, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+151, 193284, 571, 1, 2, 4865.374, 1460.495, 209.1164, 0.3146807, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+152, 193285, 571, 1, 2, 4865.479, 1453.684, 209.7114, 5.969027, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+153, 193286, 571, 1, 2, 4840.913, 1402.094, 192.9591, 5.131985, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+154, 193287, 571, 1, 2, 4837.317, 1400.465, 192.6397, 1.384923, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+155, 193288, 571, 1, 2, 4842.942, 1402.059, 192.9587, 5.365919, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+156, 193289, 571, 1, 2, 4836.487, 1403.299, 192.8744, 2.467085, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+157, 193290, 571, 1, 2, 4840.022, 1400.498, 191.6916, 3.15663, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+158, 193291, 571, 1, 2, 4854.309, 1417.488, 193.4538, 2.059487, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+159, 193292, 571, 1, 2, 4848.659, 1414.785, 191.6916, 3.749274, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+160, 193293, 571, 1, 2, 4852.316, 1415.811, 192.7632, 2.889032, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+161, 193294, 571, 1, 2, 4856.42, 1416.295, 192.7632, 1.702218, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+162, 193295, 571, 1, 2, 4838.964, 1398.37, 192.9591, 1.928963, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+163, 193296, 571, 1, 2, 4842.648, 1399.972, 192.6608, 4.590742, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+164, 193297, 571, 1, 2, 4842.655, 1397.182, 192.8535, 0.6606718, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+165, 193298, 571, 1, 2, 4844.037, 1399.976, 192.7137, 3.338978, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+166, 193299, 571, 1, 2, 4844.027, 1397.335, 192.6788, 4.733513, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+167, 193300, 571, 1, 2, 4839.507, 1398.616, 192.8744, 5.198529, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+168, 193301, 571, 1, 2, 4840.949, 1399.462, 192.7632, 2.993751, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+169, 193302, 571, 1, 2, 4844.576, 1399.304, 191.3681, 5.878576, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+170, 193303, 571, 1, 2, 4819.022, 1437.061, 195.9568, 0.7853968, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+171, 193304, 571, 1, 2, 4814.786, 1441.675, 193.9325, 2.475178, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+172, 193305, 571, 1, 2, 4816.835, 1438.477, 195.4229, 1.614948, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+173, 193306, 571, 1, 2, 4818.494, 1434.955, 194.9861, 6.227641, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+174, 193307, 571, 1, 2, 4804.619, 1464.389, 193.2142, 0.8726636, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+175, 193308, 571, 1, 2, 4802.317, 1465.608, 192.5236, 1.702218, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+176, 193309, 571, 1, 2, 4838.382, 1400.665, 192.9736, 0.165805, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+177, 193310, 571, 1, 2, 4804.275, 1462.243, 192.1949, 0.03171997, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+178, 193311, 571, 1, 2, 4818.627, 1432.585, 195.6188, 0.7931821, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+179, 193312, 571, 1, 2, 4818.935, 1434.288, 194.9375, 6.100451, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+180, 193313, 571, 1, 2, 4802.595, 1414.417, 193.2174, 5.02655, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+181, 193314, 571, 1, 2, 4808.629, 1416.099, 191.6722, 0.4331469, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+182, 193315, 571, 1, 2, 4805.602, 1422.391, 192.5222, 3.915716, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+183, 193316, 571, 1, 2, 4806.971, 1413.819, 192.5371, 0.8470061, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+184, 193317, 571, 1, 2, 4800.958, 1415.844, 192.1961, 4.185608, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+185, 193318, 571, 1, 2, 4814.53, 1421.677, 193.837, 4.031712, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+186, 193319, 571, 1, 2, 4818.464, 1416.958, 192.3035, 0.1713461, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+187, 193320, 571, 1, 2, 4816.804, 1417.587, 192.5431, 2.827954, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+188, 193321, 571, 1, 2, 4813.185, 1424.823, 193.4423, 2.793048, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+189, 193322, 571, 1, 2, 4810.121, 1419.193, 193.3252, 3.648265, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+190, 193323, 571, 1, 2, 4807.363, 1428.156, 193.9222, 3.0194, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+191, 193324, 571, 1, 2, 4806.887, 1426.839, 192.9712, 0.3234065, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+192, 193325, 571, 1, 2, 4822.01, 1384.936, 193.2164, 4.05789, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+193, 193326, 571, 1, 2, 4821.838, 1389.484, 192.8276, 1.342961, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+194, 193327, 571, 1, 2, 4826.813, 1380.915, 191.5601, 5.747677, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+195, 193328, 571, 1, 2, 4824.364, 1383.818, 192.6317, 4.887444, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+196, 193329, 571, 1, 2, 4822.135, 1389.366, 192.6317, 3.831524, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+197, 193330, 571, 1, 2, 4823.995, 1380.991, 192.6317, 6.161535, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+198, 193331, 571, 1, 2, 4822.26, 1387.094, 192.1949, 3.21697, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+199, 193332, 571, 1, 2, 4799.996, 1468.615, 191.452, 2.562449, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+200, 193333, 571, 1, 2, 4792.137, 1470.661, 193.0653, 6.161014, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+201, 193334, 571, 1, 2, 4794.401, 1474.757, 192.7633, 4.957259, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+202, 193335, 571, 1, 2, 4790.183, 1467.854, 192.762, 4.922352, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+203, 193336, 571, 1, 2, 4796.58, 1468.24, 192.1685, 5.777565, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+204, 193337, 571, 1, 2, 4784.452, 1470.938, 192.9553, 4.127707, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+205, 193338, 571, 1, 2, 4784.479, 1470.891, 192.5763, 0.9255483, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+206, 193339, 571, 1, 2, 4772.658, 1434.781, 193.2318, 3.691376, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+207, 193340, 571, 1, 2, 4774.897, 1439.738, 192.737, 3.725339, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+208, 193341, 571, 1, 2, 4775.096, 1434.278, 192.5412, 4.040963, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+209, 193342, 571, 1, 2, 4796.264, 1462.712, 192.9666, 6.045015, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+210, 193343, 571, 1, 2, 4790.44, 1461.151, 192.981, 5.148722, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+211, 193344, 571, 1, 2, 4791.811, 1461.446, 192.6317, 2.452708, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+212, 193345, 571, 1, 2, 4796.167, 1458.012, 192.8273, 4.96452, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+213, 193346, 571, 1, 2, 4778.761, 1431.167, 191.4696, 5.21535, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+214, 193347, 571, 1, 2, 4772.64, 1435.917, 192.8096, 5.940294, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+215, 193348, 571, 1, 2, 4774.135, 1431.061, 192.5412, 5.821197, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+216, 193349, 571, 1, 2, 4772.312, 1368.96, 179.3861, 0.8115751, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+217, 193350, 571, 1, 2, 4768.762, 1368.182, 178.913, 1.444671, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+218, 193351, 571, 1, 2, 4768.806, 1368.814, 178.492, 0.1401508, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+219, 193352, 571, 1, 2, 4773.032, 1368.717, 178.4498, 6.18401, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+220, 193353, 571, 1, 2, 4769.212, 1371.894, 177.5704, 3.96744, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+221, 193354, 571, 1, 2, 4753.28, 1340.752, 168.824, 5.942847, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+222, 193355, 571, 1, 2, 4755.793, 1348.842, 171.9237, 2.460914, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+223, 193356, 571, 1, 2, 4748.543, 1338.941, 166.3824, 5.994266, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+224, 193357, 571, 1, 2, 4755.62, 1346.563, 169.7958, 1.349443, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+225, 193358, 571, 1, 2, 4753.616, 1343.335, 168.9523, 0.4892147, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+226, 193359, 571, 1, 2, 4756.417, 1343.859, 170.2456, 1.763303, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+227, 193360, 571, 1, 2, 4751.151, 1340.321, 166.6075, 5.101904, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+228, 193361, 571, 1, 2, 4734.48, 1318.531, 157.1364, 1.850571, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+229, 193362, 571, 1, 2, 4729.611, 1321.644, 157.5598, 3.769916, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+230, 193363, 571, 1, 2, 4730.31, 1318.991, 155.5435, 4.299054, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+231, 193364, 571, 1, 2, 4730.522, 1317.274, 156.2261, 2.566151, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+232, 193365, 571, 1, 2, 4845.421, 1487.394, 209.5798, 3.621566, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+233, 193366, 571, 1, 2, 4873.986, 1482.95, 209.5806, 2.321287, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+234, 193367, 571, 1, 2, 4877.768, 1484.813, 209.6253, 0.9861118, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+235, 193368, 571, 1, 2, 4843.112, 1399.606, 192.9736, 4.04044, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+236, 193369, 571, 1, 2, 4733.987, 1316.142, 156.3821, 4.214973, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+237, 193370, 571, 1, 2, 4771.53, 1370.231, 177.6764, 3.473215, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+238, 193371, 571, 1, 2, 4747.052, 1371.73, 174.6061, 3.272515, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+239, 193372, 571, 1, 2, 4745.647, 1372.851, 180.6194, 0.2879769, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+240, 193373, 571, 1, 2, 4748.801, 1370.48, 177.2103, 1.125736, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+241, 193374, 571, 1, 2, 4739.766, 1375.458, 175.0408, 5.899213, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+242, 193375, 571, 1, 2, 4747.372, 1376.691, 177.1419, 4.241152, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+243, 193376, 571, 1, 2, 4729.662, 1338.746, 165.7118, 1.483528, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+244, 193377, 571, 1, 2, 4724.683, 1339.089, 165.6361, 0.9512024, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+245, 193378, 571, 1, 2, 4722.371, 1315.175, 153.0163, 4.712391, 0, 0, 0, 1, 120, 255, 1, 15595), +(@OGUID+246, 193379, 571, 1, 2, 4722.186, 1312.745, 151.8177, 2.207837, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+247, 193380, 571, 1, 2, 4721.955, 1313.016, 155.3777, 4.267334, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+248, 193381, 571, 1, 2, 4828.909, 1364.957, 187.7651, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+249, 193382, 571, 1, 2, 4767.654, 1414.143, 182.9588, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+250, 193383, 571, 1, 2, 4885.875, 1446.399, 197.2411, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+251, 193384, 571, 1, 2, 4967.423, 1382.576, 280.6783, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+252, 193385, 571, 1, 2, 4819.641, 1494.38, 197.8983, 3.141593, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+253, 193386, 571, 1, 2, 4760.751, 1331.356, 166.7298, 1.483529, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+254, 193388, 571, 1, 2, 4841.913, 1491.074, 209.5806, 5.026549, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+255, 193389, 571, 1, 2, 4854.66, 1501.157, 209.4814, 2.347464, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+256, 193390, 571, 1, 2, 4867.81, 1503.073, 209.8845, 4.398232, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+257, 193391, 571, 1, 2, 4806.318, 1418.541, 192.7293, 3.996809, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+258, 193392, 571, 1, 2, 4809.103, 1418.015, 192.8921, 1.754055, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+259, 193393, 571, 1, 2, 4866.126, 1504.92, 209.6104, 3.586657, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+260, 193394, 571, 1, 2, 4822.109, 1385.169, 190.8455, 0.5934095, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+261, 193395, 571, 1, 2, 4770.155, 1370.927, 176.3797, 2.809977, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+262, 193396, 571, 1, 2, 4794.685, 1457.065, 192.5883, 2.644167, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+263, 193397, 571, 1, 2, 4733.944, 1315.556, 156.3676, 5.009097, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+264, 193398, 571, 1, 2, 4848.95, 1412.977, 192.9511, 4.468044, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+265, 193399, 571, 1, 2, 4859.428, 1457.759, 209.3438, 3.168109, 0, 0, 0, 1, 120, 255, 1, 17658), +(@OGUID+266, 193986, 571, 1, 1, 7917.546, -2461.021, 1135.937, 3.071766, 0, 0, 0, 1, 120, 255, 1, 15595), -- Gravestone +(@OGUID+267, 194127, 571, 1, 1, 6099.222, -1077.966, 404.2272, 2.948969, 0, 0, 0, 1, 120, 255, 1, 17658), -- Anvil +(@OGUID+268, 194128, 571, 1, 1, 6096.169, -1074.005, 404.5583, 0.5148721, 0, 0, 0, 1, 120, 255, 1, 17658), -- Forge +(@OGUID+269, 194155, 571, 1, 1, 3848.472, -4069.614, 200.835, 6.058595, 0, 0, 0, 1, 120, 255, 1, 15595), -- Mysterious Wreckage +(@OGUID+270, 194535, 571, 1, 1, 4957.066, 1291.01, 234.8064, 4.06662, 0, 0, 0, 1, 120, 255, 1, 15595), -- Campfire +(@OGUID+271, 194540, 571, 1, 1, 6219.549, 1.6977, 410.1644, 0.6981294, 0, 0, 0, 1, 120, 255, 1, 17658), -- Bonfire +(@OGUID+272, 194545, 571, 1, 1, 3833.437, 1629.639, 89.75687, 3.028127, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier +(@OGUID+273, 194546, 571, 1, 1, 3823.038, 1623.943, 89.76097, 3.865906, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier +(@OGUID+274, 194547, 571, 1, 1, 3887.406, 1585.241, 90.91903, 1.204277, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier +(@OGUID+275, 194548, 571, 1, 1, 3887.188, 1596.438, 90.96321, 2.10312, 0, 0, 0, 1, 120, 255, 1, 17658), -- Brazier +(@OGUID+276, 194832, 571, 1, 1, 6452.789, 2345.028, 464.2545, 4.497677, 0, 0, 0, 1, 120, 255, 1, 15595), +(@OGUID+277, 194833, 571, 1, 1, 6454.819, 2346.186, 464.1093, 6.165739, 0, 0, 0, 1, 120, 255, 1, 15595), +(@OGUID+278, 194834, 571, 1, 1, 6424.471, 2383.731, 466.7144, 6.260079, 0, 0, 0, 1, 120, 255, 1, 15595), +(@OGUID+279, 194835, 571, 1, 1, 6422.702, 2385.566, 466.9037, 4.598919, 0, 0, 0, 1, 120, 255, 1, 15595), +(@OGUID+280, 194836, 571, 1, 1, 6429.28, 2385.773, 466.5732, 3.505927, 0, 0, 0, 1, 120, 255, 1, 15595), +(@OGUID+281, 194837, 571, 1, 1, 6425.83, 2383.571, 466.5943, 3.120276, 0, 0, 0, 1, 120, 255, 1, 15595), +(@OGUID+282, 194838, 571, 1, 1, 6425.671, 2386.106, 465.9078, 5.982333, 0, 0, 0, 1, 120, 255, 1, 15595); diff --git a/sql/updates/world/2014_05_11_01_world_misc.sql b/sql/updates/world/2014_05_11_01_world_misc.sql new file mode 100644 index 00000000000..8f8dfc4567b --- /dev/null +++ b/sql/updates/world/2014_05_11_01_world_misc.sql @@ -0,0 +1,39 @@ +ALTER TABLE `broadcast_text` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `creature_equip_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `creature_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `gameobject_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `item_set_names` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `item_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `npc_text` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `page_text` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `quest_template` CHANGE COLUMN `WDBVerified` `VerifiedBuild` SMALLINT(5) DEFAULT '0'; + +ALTER TABLE `areatrigger_teleport` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `creature` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `lfg_entrances` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `locales_broadcast_text` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `locales_creature` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `locales_gameobject` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `locales_item` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `locales_item_set_names` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `locales_quest` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `npc_vendor` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `quest_poi_points` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `quest_poi` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; + +UPDATE `locales_broadcast_text` SET `VerifiedBuild`=18019; +UPDATE `locales_creature` SET `VerifiedBuild`=18019; +UPDATE `locales_gameobject` SET `VerifiedBuild`=18019; +UPDATE `locales_item` SET `VerifiedBuild`=15050; +UPDATE `locales_item_set_names` SET `VerifiedBuild`=15050; +UPDATE `locales_quest` SET `VerifiedBuild`=18019; + +UPDATE `creature_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1; +UPDATE `gameobject_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1; +UPDATE `item_set_names` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1; +UPDATE `item_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1; +UPDATE `npc_text` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1; +UPDATE `page_text` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1; +UPDATE `item_template` SET `VerifiedBuild`=0 WHERE `VerifiedBuild`=1; + +UPDATE `locales_item` SET `VerifiedBuild`=-12340 WHERE `entry` IN (1019, 5022, 5084, 5085, 5096, 5512, 5530, 5544, 5798, 6712, 6949, 6950, 6951, 7675, 8925, 8926, 8927, 8928, 8984, 8985, 9250, 9315, 9577, 10920, 10921, 10922, 10958, 11163, 11168, 11223, 11367, 11368, 12368, 12708, 13466, 16051, 16209, 16262, 16263, 16306, 16310, 16972, 17414, 17683, 17771, 18224, 18256, 18562, 18947, 19004, 19005, 20310, 20844, 21214, 21279, 21280, 21281, 21282, 21283, 21284, 21285, 21287, 21288, 21289, 21290, 21291, 21292, 21293, 21294, 21295, 21296, 21297, 21298, 21299, 21300, 21302, 21303, 21304, 21306, 21307, 21927, 22053, 22054, 22055, 22146, 22153, 22530, 22540, 22549, 22550, 22890, 22891, 22897, 23094, 23096, 23099, 23100, 23105, 23106, 23108, 23109, 23113, 23114, 23115, 23116, 23121, 23130, 23133, 23136, 23137, 23142, 23143, 23144, 23145, 23148, 23149, 23150, 23151, 23155, 23320, 23778, 23815, 23902, 24029, 24030, 24031, 24032, 24037, 24047, 24050, 24051, 24052, 24056, 24057, 24060, 24061, 24062, 24065, 24162, 24192, 24195, 24196, 24197, 24201, 24203, 24205, 24206, 24207, 24211, 24212, 24215, 24216, 24217, 24219, 27679, 27689, 27774, 27777, 27785, 27786, 27809, 27811, 27812, 27820, 28048, 28117, 28118, 28120, 28122, 28274, 28360, 28361, 28362, 28363, 28460, 28461, 28462, 28465, 28466, 28468, 28469, 28470, 28557, 28595, 28596, 2874, 2893, 2939, 29468, 29549, 29550, 29553, 30467, 30547, 30548, 30550, 30551, 30552, 30553, 30555, 30556, 30558, 30559, 30560, 30563, 30564, 30565, 30572, 30573, 30574, 30575, 30581, 30583, 30585, 30586, 30589, 30590, 30591, 30593, 30594, 30600, 30601, 30603, 30605, 30606, 31116, 31117, 31118, 31359, 31501, 31837, 31860, 31861, 31862, 31863, 31864, 31865, 31866, 31867, 31868, 31869, 31870, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 32195, 32196, 32197, 32198, 32202, 32204, 32206, 32207, 32208, 32210, 32213, 32214, 32215, 32216, 32219, 32220, 32221, 32222, 32223, 32225, 32281, 32282, 32283, 32284, 32288, 32290, 32292, 32293, 32294, 32296, 32299, 32300, 32301, 32302, 32305, 32306, 32307, 32308, 32309, 32311, 3238, 32634, 32635, 32636, 32637, 32638, 32639, 32640, 32735, 33139, 33141, 3371, 3372, 33804, 34060, 34061, 34200, 34201, 34218, 3460, 35238, 35239, 35240, 35241, 35245, 35248, 35249, 35250, 35251, 35252, 35255, 35256, 35257, 35259, 35261, 35262, 35266, 35268, 35270, 35271, 35304, 35305, 35306, 35307, 35396, 35397, 35398, 35399, 35400, 35417, 35418, 35419, 35420, 35421, 35422, 35423, 35424, 35425, 35426, 35427, 35428, 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, 35445, 35446, 35447, 35448, 35449, 35450, 35451, 35452, 35453, 35454, 35455, 35456, 35457, 35458, 35459, 35460, 35461, 35462, 35487, 35488, 35489, 35500, 35707, 35708, 35756, 36766, 37347, 37602, 37603, 3776, 3819, 38545, 38546, 38547, 38549, 38679, 38682, 38766, 38767, 38768, 38769, 38770, 38771, 38772, 38773, 38774, 38775, 38776, 38777, 38778, 38779, 38780, 38781, 38782, 38783, 38784, 38785, 38786, 38787, 38788, 38789, 38790, 38791, 38792, 38793, 38794, 38795, 38796, 38797, 38798, 38799, 38800, 38801, 38802, 38803, 38804, 38805, 38806, 38807, 38808, 38809, 38810, 38811, 38812, 38813, 38814, 38815, 38816, 38817, 38818, 38819, 38820, 38821, 38822, 38823, 38824, 38825, 38826, 38827, 38828, 38829, 38830, 38831, 38832, 38833, 38834, 38835, 38836, 38837, 38838, 38839, 38840, 38841, 38842, 38843, 38844, 38845, 38846, 38847, 38848, 38849, 38850, 38851, 38852, 38853, 38854, 38855, 38856, 38857, 38858, 38859, 38860, 38861, 38862, 38863, 38864, 38865, 38866, 38867, 38868, 38869, 38870, 38871, 38872, 38873, 38874, 38875, 38876, 38877, 38878, 38879, 38880, 38881, 38882, 38883, 38884, 38885, 38886, 38887, 38888, 38889, 38890, 38891, 38892, 38893, 38894, 38895, 38896, 38897, 38898, 38899, 38900, 38901, 38902, 38903, 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911, 38912, 38913, 38914, 38915, 38917, 38918, 38919, 38920, 38921, 38922, 38923, 38924, 38925, 38926, 38927, 38928, 38929, 38930, 38931, 38932, 38933, 38934, 38935, 38936, 38937, 38938, 38939, 38940, 38941, 38942, 38943, 38944, 38945, 38946, 38947, 38948, 38949, 38950, 38951, 38953, 38954, 38955, 38956, 38958, 38959, 38960, 38961, 38962, 38963, 38964, 38965, 38966, 38967, 38968, 38969, 38971, 38972, 38973, 38974, 38975, 38976, 38977, 38978, 38979, 38980, 38981, 38982, 38983, 38984, 38985, 38986, 38987, 38988, 38989, 38990, 38991, 38992, 38993, 38994, 38995, 38997, 38998, 38999, 39000, 39001, 39002, 39003, 39004, 39005, 39006, 39349, 39350, 39906, 39907, 39909, 39911, 39912, 39915, 39916, 39927, 39933, 39936, 39937, 39938, 39942, 39943, 39944, 39946, 39948, 39953, 39957, 39958, 39960, 39961, 39962, 39963, 39965, 39966, 39968, 39975, 39976, 39979, 39981, 39983, 39984, 39985, 39986, 39988, 39991, 39998, 39999, 40000, 40002, 40010, 40012, 40014, 40015, 40023, 40024, 40025, 40027, 40029, 40030, 40031, 40032, 40033, 40038, 40044, 40047, 40049, 40050, 40052, 40053, 40054, 40055, 40057, 40058, 40085, 40088, 40089, 40092, 40094, 40096, 40099, 40100, 40101, 40103, 40104, 40113, 40114, 40115, 40117, 40121, 40123, 40125, 40126, 40131, 40132, 40134, 40136, 40137, 40138, 40140, 40143, 40148, 40151, 40153, 40154, 40156, 40157, 40158, 40159, 40161, 40162, 40164, 40166, 40167, 40170, 40172, 40174, 40175, 40176, 40177, 40178, 40181, 40411, 40899, 40901, 40903, 40920, 41094, 41096, 41098, 41100, 41101, 41104, 41105, 41106, 41107, 41109, 41110, 41170, 41377, 41429, 41433, 41436, 41438, 41439, 41440, 41444, 41447, 41449, 41450, 41452, 41454, 41456, 41458, 41459, 41462, 41463, 41464, 41467, 41469, 41471, 41473, 41475, 41477, 41478, 41479, 41481, 41482, 41486, 41487, 41488, 41490, 41491, 41494, 41496, 41501, 41502, 41524, 41535, 41538, 41541, 41563, 41564, 41567, 41568, 41570, 41573, 41580, 41581, 41582, 41687, 41688, 41689, 41694, 41696, 41697, 41698, 41699, 41701, 41702, 41703, 41705, 41718, 41719, 41721, 41722, 41724, 41725, 41730, 41732, 41736, 41739, 41747, 41777, 41782, 41785, 41791, 41795, 41796, 41817, 41818, 41820, 42144, 42146, 42153, 42157, 42299, 42303, 42304, 42309, 42315, 42397, 42403, 42405, 42407, 42416, 42417, 42456, 42465, 42466, 42469, 42471, 42734, 42740, 42743, 42747, 42750, 42753, 42754, 42899, 42901, 42906, 42907, 42909, 42910, 42912, 42915, 42916, 42917, 42965, 42971, 43145, 43146, 43230, 43231, 43232, 43233, 43234, 43235, 43237, 43335, 43339, 43350, 43354, 43355, 43357, 43359, 43360, 43366, 43368, 43369, 43380, 43386, 43391, 43394, 43396, 43397, 43398, 43412, 43414, 43416, 43417, 43418, 43420, 43423, 43424, 43425, 43426, 43428, 43429, 43432, 43441, 43534, 43538, 43545, 43548, 43549, 43553, 4361, 4363, 43671, 43672, 43673, 43826, 43867, 43868, 43869, 43952, 43987, 44449, 44453, 44455, 44456, 44457, 44458, 44463, 44465, 44466, 44467, 44469, 44470, 44493, 44497, 44511, 44512, 44815, 44842, 44843, 44944, 44946, 44947, 45056, 45060, 45603, 45628, 45733, 45737, 45743, 45744, 45757, 45758, 45760, 45761, 45776, 45789, 45793, 45794, 45803, 45804, 45805, 45883, 46026, 46098, 46372, 46767, 46897, 46899, 46900, 46902, 46903, 46906, 46907, 46908, 46909, 46910, 46914, 46916, 46919, 46921, 46922, 46927, 46928, 46930, 46931, 46934, 46936, 46939, 46940, 46944, 46945, 46946, 46947, 46951, 46952, 46953, 46956, 47008, 47010, 47011, 47012, 47016, 47023, 47179, 48720, 49084, 50045, 50077, 50125, 50166, 50167, 50168, 50816, 52022, 52023); diff --git a/sql/updates/world/2014_05_11_02_world_gameobject.sql b/sql/updates/world/2014_05_11_02_world_gameobject.sql new file mode 100644 index 00000000000..e4648d78f50 --- /dev/null +++ b/sql/updates/world/2014_05_11_02_world_gameobject.sql @@ -0,0 +1,4 @@ +ALTER TABLE `points_of_interest` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; +ALTER TABLE `spell_target_position` ADD `VerifiedBuild` SMALLINT(5) DEFAULT '0'; + +UPDATE `gameobject` SET `phasemask`=256 WHERE `guid`=76992; diff --git a/sql/updates/world/2014_05_11_03_world_gameobject.sql b/sql/updates/world/2014_05_11_03_world_gameobject.sql new file mode 100644 index 00000000000..4fd5f7d6fc5 --- /dev/null +++ b/sql/updates/world/2014_05_11_03_world_gameobject.sql @@ -0,0 +1,2 @@ +UPDATE `gameobject` SET `VerifiedBuild`=15595 WHERE `guid` IN (61, 72, 74, 1583, 2214, 4309, 5494, 6974, 6976, 6995, 7003, 7005, 7006, 7009, 7048, 10049, 10135, 10645, 11525, 11620, 11820, 11822, 11829, 12024, 13215, 13540, 13704, 13762, 13763, 13764, 13767, 14261, 15686, 16534, 16821, 16822, 16826, 17761, 21009, 21016, 21103, 21622, 21623, 21624, 22316, 22507, 22989, 23168, 24324, 26190, 26207, 26208, 26264, 26284, 26319, 26320, 26325, 26346, 26347, 26350, 26361, 26365, 26367, 26368, 26369, 26375, 26379, 26381, 26384, 26392, 26394, 26410, 26446, 26447, 26453, 28367, 30037, 30041, 30112, 30537, 31990, 31991, 31992, 31995, 31996, 31997, 31998, 31999, 32000, 32001, 32002, 32005, 32006, 32020, 33327, 33328, 33329, 33335, 33353, 33356, 33358, 33362, 33383, 33384, 33393, 33396, 33403, 33418, 33449, 33483, 34293, 34852, 35590, 35591, 35593, 35594, 35596, 35597, 35598, 35600, 35601, 35606, 35607, 35612, 35613, 35616, 35617, 35618, 35619, 40665, 42980, 43150, 44738, 44745, 44757, 44759, 44761, 44764, 44777, 44783, 44790, 44791, 44799, 44807, 45011, 45308, 45309, 45310, 45313, 45314, 47579, 47581, 47583, 47585, 48006, 49396, 49434, 49832, 50458, 50489, 50576, 50584, 50587, 50593, 50595, 50596, 50597, 50598, 50600, 50608, 50609, 50614, 50631, 50636, 51054, 51059, 51060, 51082, 51083, 51084, 51085, 51086, 51087, 51265, 51266, 51268, 51269, 51312, 51314, 51315, 51316, 51317, 51318, 51320, 51323, 51376, 51377, 51378, 51456, 51457, 51459, 51460, 51462, 51468, 51469, 51472, 51473, 51474, 51497, 51498, 51501, 51502, 51536, 51538, 51546, 51547, 51549, 51550, 51556, 51559, 51561, 51562, 51569, 51572, 51643, 51644, 51685, 51686, 51698, 51700, 51703, 51708, 51709, 51736, 51737, 51751, 51752, 51754, 51755, 51826, 51827, 51828, 51836, 51842, 51843, 51891, 51892, 51923, 51935, 51936, 51957, 52005, 52008, 52013, 52015, 52047, 52061, 52062, 52066, 52067, 52092, 52108, 52109, 52110, 52596, 52605, 52634, 52645, 52647, 52668, 52675, 52682, 52683, 52684, 52689, 52690, 52705, 52706, 52707, 52713, 52714, 52716, 52717, 52735, 52739, 52740, 52743, 52751, 52752, 52753, 52754, 52755, 52760, 52772, 52773, 52787, 52844, 52928, 52929, 52939, 52940, 52942, 52950, 52951, 52952, 52961, 52985, 52986, 52989, 52990, 52994, 52995, 53021, 53023, 53024, 53035, 53036, 53042, 53046, 53047, 53048, 53052, 53053, 53090, 53097, 53098, 53099, 53139, 53140, 53142, 53147, 53152, 53161, 53162, 53167, 53168, 53171, 53187, 53189, 53190, 53223, 53238, 53246, 53247, 53248, 53251, 53252, 53253, 53254, 53263, 53264, 53265, 53266, 53267, 53292, 53293, 53294, 53295, 53307, 53322, 53323, 53352, 53363, 53364, 53365, 53366, 53375, 53384, 53410, 53415, 53471, 53484, 53529, 53531, 53532, 53552, 53553, 53554, 53555, 53597, 53605, 53606, 53611, 53616, 53617, 53618, 53624, 53644, 53648, 53649, 53650, 53704, 53705, 53706, 53707, 53737, 53742, 53746, 53760, 53761, 53764, 53773, 53780, 53812, 53842, 53843, 53844, 53845, 53846, 53847, 53848, 53849, 53854, 53855, 53856, 53882, 53890, 53891, 53908, 53915, 53916, 53917, 53918, 53919, 53944, 53945, 53950, 53951, 53962, 53964, 53975, 53987, 54000, 54005, 54052, 54053, 54054, 54070, 54073, 54074, 54075, 54076, 54078, 54088, 54089, 54091, 54096, 54098, 54109, 54110, 54112, 54116, 54117, 54118, 54119, 54136, 54141, 54142, 54156, 54157, 54162, 54197, 54198, 54202, 54203, 54204, 54209, 54212, 54213, 54214, 54223, 54225, 54235, 54241, 54243, 54244, 54253, 54257, 54265, 54266, 54267, 54331, 54332, 54346, 54361, 54362, 54367, 54379, 54380, 54387, 54406, 54506, 54522, 54531, 54532, 54543, 54546, 54554, 54555, 54567, 54595, 54769, 54770, 54771, 54778, 54780, 54781, 54782, 54795, 54805, 54808, 54812, 54818, 54819, 54820, 54822, 54843, 54856, 54859, 54862, 54863, 54867, 54869, 54870, 54878, 54879, 54880, 54890, 54891, 54902, 54906, 54907, 54934, 54936, 55992, 55995, 55998, 56003, 56005, 56006, 56008, 56009, 56011, 56015, 56016, 56019, 56022, 56024, 56025, 56027, 56029, 56030, 56031, 56129, 56134, 56136, 56142, 56143, 56144, 56145, 56146, 56147, 56151, 56527, 57021, 57057, 57086, 57097, 57101, 57102, 57103, 57105, 57107, 57109, 57112, 57113, 57114, 57115, 57118, 57121, 57125, 57126, 57127, 57129, 57130, 57131, 58703, 58711, 58731, 58732, 58738, 58745, 58752, 58754, 58763, 58766, 58958, 59831, 60019, 60173, 60184, 60186, 60654, 60657, 60660, 60662, 60665, 60666, 60667, 61077, 61079, 62044, 63374, 63394, 63740, 63742, 63747, 63752, 63756, 63759, 63766, 63777, 63819, 63870, 64160, 64164, 64170, 64180, 64182, 64183, 64197, 64203, 64240, 64260, 64265, 64268, 64269, 64271, 64272, 64275, 64277, 64283, 64284, 64285, 64290, 64291, 64294, 64295, 64299, 64304, 64305, 64306, 64307, 64308, 64309, 64312, 64313, 64316, 64318, 64319, 64321, 64322, 64329, 64330, 64334, 64341, 64343, 64344, 64345, 64348, 64350, 64354, 64358, 64364, 64366, 64367, 64368, 64371, 64372, 64374, 64378, 64379, 64380, 64382, 64389, 64390, 64392, 64393, 64394, 64396, 64399, 64401, 64406, 64409, 64411, 64412, 64413, 64418, 64419, 64420, 64421, 64422, 64424, 64425, 64426, 64429, 64456, 64463, 64478, 66846, 66854, 66855, 66883, 66907, 70541, 85938, 85944, 85945, 85953, 85955, 85957, 85958, 85959, 86512, 86513, 86514, 86518, 86522, 86540, 86542, 86543, 86545, 86547, 86557, 87007, 87078, 87082, 87088, 87089, 87115, 87137, 87319, 87320, 87406, 87409, 120696, 121574, 150454, 150708, 150709, 150720, 160002, 160011, 160015, 160016, 160018, 160028, 160035, 160042, 160045, 160047, 160052, 160063, 160064, 160069, 160176, 160209, 160304, 160306, 160311, 160313, 160317, 160318, 160321, 160323, 160324, 160327, 160332, 160334, 160339, 160340, 160343, 160359, 160361, 160362, 160365, 160374, 160379, 160381, 160382, 160385, 160387, 160389, 160390, 160391, 160392, 160393, 160394, 160397, 160399, 160521, 160549, 160609, 160614, 160615, 160618, 160621, 160622, 160624, 160626, 160631, 160632, 160633, 160634, 160637, 160639, 160645, 160646, 160648, 160650, 160718, 160730, 160735); +UPDATE `gameobject` SET `VerifiedBuild`=17658 WHERE `guid` IN (364, 393, 1507, 1953, 2102, 3586, 3953, 4314, 4510, 4516, 4517, 4518, 4519, 4520, 4596, 6783, 6955, 6960, 6965, 6973, 6994, 7034, 9948, 10053, 10069, 10096, 10100, 10218, 10678, 10679, 11832, 11833, 12209, 12450, 12634, 12641, 12642, 12645, 13635, 15421, 17230, 17269, 17337, 21059, 21631, 22655, 23169, 25326, 26351, 26354, 26427, 27677, 28892, 28908, 28911, 28913, 28915, 28952, 28954, 28956, 28991, 29008, 29024, 29027, 29562, 29565, 32320, 32511, 32644, 33486, 35351, 40661, 40663, 40664, 40666, 40667, 40668, 41471, 42079, 42080, 42081, 42082, 42083, 42084, 42085, 42086, 42087, 42088, 42089, 42486, 42507, 42652, 43240, 43393, 44762, 44763, 44787, 44997, 44998, 44999, 45000, 45288, 45612, 46106, 49390, 49391, 49532, 50022, 50044, 50065, 50169, 50171, 50186, 55989, 56012, 56018, 56026, 56037, 56038, 56157, 56956, 57084, 57100, 57104, 57106, 57110, 57119, 57120, 57123, 57124, 58357, 58521, 60596, 60824, 62024, 62371, 63175, 63314, 63757, 64172, 64181, 64198, 64223, 64264, 64286, 64292, 64296, 64298, 64314, 64315, 64320, 64336, 64349, 64376, 64384, 64400, 64405, 64415, 64741, 65119, 65353, 65354, 65516, 65549, 66634, 66635, 66841, 67636, 85947, 85949, 85950, 86556, 86892, 87138, 87318, 87359, 87972, 121573, 121575, 160017, 160021, 160024, 160041, 160061, 160079, 160084, 160320, 160333, 160352, 160383, 160396, 160602, 160638, 160644, 160654); diff --git a/sql/updates/world/2014_05_12_00_world_misc.sql b/sql/updates/world/2014_05_12_00_world_misc.sql new file mode 100644 index 00000000000..4273921e1b6 --- /dev/null +++ b/sql/updates/world/2014_05_12_00_world_misc.sql @@ -0,0 +1,77 @@ +-- +-- Add missing gossip menus for horde npcs +DELETE FROM `gossip_menu` WHERE `entry` in (10419,10420,10421,10425,10426); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(10419, 14458),-- Thunder Bluff +(10420, 14459), -- Undercity +(10421, 14460), -- Ogrimmar +(10425, 14464), -- Sen'Jin +(10426, 14465); -- Silvermoon + +-- add missing gossip options to horde vendors and remove a duplicate menu option from one of the alliance vendors which all have same text and this option is never displayed to players anyway its just for the condition for vendor. +DELETE FROM `gossip_menu_option` WHERE `menu_id`=10417 AND `id`=1 OR `menu_id` in (10419,10420,10421,10425,10426); +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES +(10419, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''), +(10420, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''), +(10421, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''), +(10425, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''), +(10426, 0, 1, 'I want to browse your goods.', 3, 128, 0, 0, 0, 0, ''); + +-- Update creature template with missing gossip menu ids for horde vendors +UPDATE `creature_template` SET `gossip_menu_id`=10426 WHERE `entry`=33557; +UPDATE `creature_template` SET `gossip_menu_id`=10420 WHERE `entry`=33555; +UPDATE `creature_template` SET `gossip_menu_id`=10421 WHERE `entry`=33553; +UPDATE `creature_template` SET `gossip_menu_id`=10419 WHERE `entry`=33556; +UPDATE `creature_template` SET `gossip_menu_id`=10425 WHERE `entry`=33554; + +-- Conditions for argent tournament vendors so they will not allow player to use vendor until they are a champion of that faction +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN(10417,10418,10422,10423,10424); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 10419, 0, 0, 0, 17, 0, 2786, 0, 0, 0, 0, 0, '', 'Only allow champions of Thunderbluff to access vendor'), +(15, 10420, 0, 0, 0, 17, 0, 2787, 0, 0, 0, 0, 0, '', 'Only allow champions of Undercity to access vendor'), +(15, 10421, 0, 0, 0, 17, 0, 2783, 0, 0, 0, 0, 0, '', 'Only allow champions of Ogrimmar to access vendor'), +(15, 10425, 0, 0, 0, 17, 0, 2784, 0, 0, 0, 0, 0, '', 'Only allow champions of Sen Jin to access vendor'), +(15, 10426, 0, 0, 0, 17, 0, 2785, 0, 0, 0, 0, 0, '', 'Only allow champions of Silvermoon to access vendor'), +(15, 10417, 0, 0, 0, 17, 0, 2781, 0, 0, 0, 0, 0, '', 'Only allow champions of Stowmwind to access vendor'), +(15, 10418, 0, 0, 0, 17, 0, 2780, 0, 0, 0, 0, 0, '', 'Only allow champions of Ironforge to access vendor'), +(15, 10422, 0, 0, 0, 17, 0, 2778, 0, 0, 0, 0, 0, '', 'Only allow champions of Exodar to access vendor'), +(15, 10423, 0, 0, 0, 17, 0, 2779, 0, 0, 0, 0, 0, '', 'Only allow champions of Gnomeregan to access vendor'), +(15, 10424, 0, 0, 0, 17, 0, 2777, 0, 0, 0, 0, 0, '', 'Only allow champions of Darnassus to access vendor'); + +-- Add missing versions of mounts for 5 champions seals and 500g to vendors, the versions which require rep to buy which are intended for player who is not member of that faction +DELETE FROM `npc_vendor` WHERE `item` IN(46758,46756,46759,46762,46763,46761,46764,46755,46760,46757); +INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `incrtime`, `ExtendedCost`) VALUES +(33307, 0, 46758, 0, 0, 2671), -- Stormwind (Non Human) - Human version 46752 +(33657, 0, 46756, 0, 0, 2671), -- Exodar (Non Dreanei) - Dreanei version 46745 +(33653, 0, 46759, 0, 0, 2671), -- Darnassus (Non Night elf) - Night elf version 46744 +(33310, 0, 46762, 0, 0, 2671), -- Iron Forge (Non Dwarf) - Dwarf version 46748 +(33650, 0, 46763, 0, 0, 2671), -- Gnomeregan (Non Gnome) - Gnome version 46747 +(33557, 0, 46761, 0, 0, 2671), -- Silvermoon (Non Blood elf) - Blood Elf version 46751 +(33555, 0, 46764, 0, 0, 2671), -- Undercity (Non Undead) - Undead version 46746 +(33556, 0, 46755, 0, 0, 2671), -- Thunderbluff (Non Tauren) - Tauren version 46750 +(33554, 0, 46760, 0, 0, 2671), -- Sen Jin (Non Troll) - Troll version 46743 +(33553, 0, 46757, 0, 0, 2671); -- Orgrimmar (Non Orc) - Orchish version 46749 + +-- Conditions to specify which version of mounts to sell, no restriction if own race, requires exhalted if not this only applys to the mounts for 5 seals and 500g not the ones for 100 seals +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=23 AND `SourceGroup` IN(33307,33657,33653,33310,33650,33557,33555,33556,33554,33555); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(23, 33307, 46758, 0, 0, 16, 0, 1, 0, 0, 1, 0, 0, '', 'Only Sell to Non Humans'), +(23, 33307, 46752, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, '', 'Only Sell to Humans'), +(23, 33657, 46756, 0, 0, 16, 0, 1024, 0, 0, 1, 0, 0, '', 'Only Sell to Non Dreanei'), +(23, 33657, 46745, 0, 0, 16, 0, 1024, 0, 0, 0, 0, 0, '', 'Only Sell to Dreanei'), +(23, 33653, 46759, 0, 0, 16, 0, 8, 0, 0, 1, 0, 0, '', 'Only Sell to Non Night elf'), +(23, 33653, 46744, 0, 0, 16, 0, 8, 0, 0, 0, 0, 0, '', 'Only Sell to Night elf'), +(23, 33310, 46762, 0, 0, 16, 0, 4, 0, 0, 1, 0, 0, '', 'Only Sell to Non Dwarf'), +(23, 33310, 46748, 0, 0, 16, 0, 4, 0, 0, 0, 0, 0, '', 'Only Sell to Dwarf'), +(23, 33650, 46753, 0, 0, 16, 0, 64, 0, 0, 1, 0, 0, '', 'Only Sell to Non Gnome'), +(23, 33650, 46747, 0, 0, 16, 0, 64, 0, 0, 0, 0, 0, '', 'Only Sell to Gnome'), +(23, 33557, 46761, 0, 0, 16, 0, 512, 0, 0, 1, 0, 0, '', 'Only Sell to Non Blood elf'), +(23, 33557, 46751, 0, 0, 16, 0, 512, 0, 0, 0, 0, 0, '', 'Only Sell to Blood elf'), +(23, 33555, 46764, 0, 0, 16, 0, 16, 0, 0, 1, 0, 0, '', 'Only Sell to Non Undead'), +(23, 33555, 46746, 0, 0, 16, 0, 16, 0, 0, 0, 0, 0, '', 'Only Sell to Undead'), +(23, 33556, 46755, 0, 0, 16, 0, 32, 0, 0, 1, 0, 0, '', 'Only Sell to Non Tauren'), +(23, 33556, 46750, 0, 0, 16, 0, 32, 0, 0, 0, 0, 0, '', 'Only Sell to Tauren'), +(23, 33554, 46760, 0, 0, 16, 0, 128, 0, 0, 1, 0, 0, '', 'Only Sell to Non Troll'), +(23, 33554, 46743, 0, 0, 16, 0, 128, 0, 0, 0, 0, 0, '', 'Only Sell to Troll'), +(23, 33657, 46757, 0, 0, 16, 0, 2, 0, 0, 1, 0, 0, '', 'Only Sell to Non Orc'), +(23, 33653, 46749, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, '', 'Only Sell to Orc'); diff --git a/sql/updates/world/2014_05_12_01_world_creature_template.sql b/sql/updates/world/2014_05_12_01_world_creature_template.sql new file mode 100644 index 00000000000..2367789b6e4 --- /dev/null +++ b/sql/updates/world/2014_05_12_01_world_creature_template.sql @@ -0,0 +1,2 @@ +-- update Antipersonnel Cannon (1) immune mask to be the same as lvl 70 version +UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`|2|8|32|64|256|512|1024|4096|8192|65536|262144|8388608|268435456 WHERE `entry`=32795; diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp index 1bf5dcad51f..bb278dd6653 100644 --- a/src/server/authserver/Authentication/AuthCodes.cpp +++ b/src/server/authserver/Authentication/AuthCodes.cpp @@ -25,6 +25,7 @@ namespace AuthHelper {15595, 4, 3, 4, ' '}, {14545, 4, 2, 2, ' '}, {13623, 4, 0, 6, 'a'}, + {13930, 3, 3, 5, 'a'}, // 3.3.5a China Mainland build {12340, 3, 3, 5, 'a'}, {11723, 3, 3, 3, 'a'}, {11403, 3, 3, 2, ' '}, diff --git a/src/server/collision/Management/MMapFactory.h b/src/server/collision/Management/MMapFactory.h index 837c893f038..4b883d43613 100644 --- a/src/server/collision/Management/MMapFactory.h +++ b/src/server/collision/Management/MMapFactory.h @@ -19,11 +19,12 @@ #ifndef _MMAP_FACTORY_H #define _MMAP_FACTORY_H +#include "Define.h" #include "MMapManager.h" -#include "UnorderedMap.h" #include "DetourAlloc.h" #include "DetourNavMesh.h" #include "DetourNavMeshQuery.h" +#include <unordered_map> namespace MMAP { diff --git a/src/server/collision/Management/MMapManager.h b/src/server/collision/Management/MMapManager.h index 7840921e4e6..798d0206538 100644 --- a/src/server/collision/Management/MMapManager.h +++ b/src/server/collision/Management/MMapManager.h @@ -19,17 +19,18 @@ #ifndef _MMAP_MANAGER_H #define _MMAP_MANAGER_H -#include "UnorderedMap.h" +#include "Define.h" #include "DetourAlloc.h" #include "DetourNavMesh.h" #include "DetourNavMeshQuery.h" #include <string> +#include <unordered_map> // move map related classes namespace MMAP { - typedef UNORDERED_MAP<uint32, dtTileRef> MMapTileSet; - typedef UNORDERED_MAP<uint32, dtNavMeshQuery*> NavMeshQuerySet; + typedef std::unordered_map<uint32, dtTileRef> MMapTileSet; + typedef std::unordered_map<uint32, dtNavMeshQuery*> NavMeshQuerySet; // dummy struct to hold map's mmap data struct MMapData @@ -52,7 +53,7 @@ namespace MMAP }; - typedef UNORDERED_MAP<uint32, MMapData*> MMapDataSet; + typedef std::unordered_map<uint32, MMapData*> MMapDataSet; // singleton class // holds all all access to mmap loading unloading and meshes diff --git a/src/server/collision/Management/VMapManager2.h b/src/server/collision/Management/VMapManager2.h index abddd5d7cc3..711025e67c0 100644 --- a/src/server/collision/Management/VMapManager2.h +++ b/src/server/collision/Management/VMapManager2.h @@ -19,9 +19,9 @@ #ifndef _VMAPMANAGER2_H #define _VMAPMANAGER2_H -#include "IVMapManager.h" -#include "Dynamic/UnorderedMap.h" #include "Define.h" +#include "IVMapManager.h" +#include <unordered_map> #include <ace/Thread_Mutex.h> //=========================================================== @@ -63,8 +63,8 @@ namespace VMAP int iRefCount; }; - typedef UNORDERED_MAP<uint32, StaticMapTree*> InstanceTreeMap; - typedef UNORDERED_MAP<std::string, ManagedModel> ModelFileMap; + typedef std::unordered_map<uint32, StaticMapTree*> InstanceTreeMap; + typedef std::unordered_map<std::string, ManagedModel> ModelFileMap; class VMapManager2 : public IVMapManager { diff --git a/src/server/collision/Maps/MapTree.h b/src/server/collision/Maps/MapTree.h index 696935e4198..05351b74019 100644 --- a/src/server/collision/Maps/MapTree.h +++ b/src/server/collision/Maps/MapTree.h @@ -20,8 +20,8 @@ #define _MAPTREE_H #include "Define.h" -#include "Dynamic/UnorderedMap.h" #include "BoundingIntervalHierarchy.h" +#include <unordered_map> namespace VMAP { @@ -39,8 +39,8 @@ namespace VMAP class StaticMapTree { - typedef UNORDERED_MAP<uint32, bool> loadedTileMap; - typedef UNORDERED_MAP<uint32, uint32> loadedSpawnMap; + typedef std::unordered_map<uint32, bool> loadedTileMap; + typedef std::unordered_map<uint32, uint32> loadedSpawnMap; private: uint32 iMapID; bool iIsTiled; diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp index 42584693a13..1b99e282132 100644 --- a/src/server/collision/Models/GameObjectModel.cpp +++ b/src/server/collision/Models/GameObjectModel.cpp @@ -43,7 +43,7 @@ struct GameobjectModelData std::string name; }; -typedef UNORDERED_MAP<uint32, GameobjectModelData> ModelList; +typedef std::unordered_map<uint32, GameobjectModelData> ModelList; ModelList model_list; void LoadGameObjectModelList() diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index 8bf34527769..9631b75fe06 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -28,7 +28,6 @@ void UnitAI::AttackStart(Unit* victim) { - if (victim && me->Attack(victim, true)) me->GetMotionMaster()->MoveChase(victim); } diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index ea9d6c2b9fd..48870a12a25 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -478,10 +478,7 @@ void BossAI::_JustDied() events.Reset(); summons.DespawnAll(); if (instance) - { instance->SetBossState(_bossId, DONE); - instance->SaveToDB(); - } } void BossAI::_EnterCombat() diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 244728a3037..b83222dc263 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -231,7 +231,7 @@ class SmartScript SmartScriptType mScriptType; uint32 mEventPhase; - UNORDERED_MAP<int32, int32> mStoredDecimals; + std::unordered_map<int32, int32> mStoredDecimals; uint32 mPathId; SmartAIEventList mStoredEvents; std::list<uint32>mRemIDs; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 993e6967ba5..2e8453904a1 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -37,7 +37,7 @@ void SmartWaypointMgr::LoadFromDB() { uint32 oldMSTime = getMSTime(); - for (UNORDERED_MAP<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) + for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) { for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr) delete pathItr->second; @@ -96,7 +96,7 @@ void SmartWaypointMgr::LoadFromDB() SmartWaypointMgr::~SmartWaypointMgr() { - for (UNORDERED_MAP<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) + for (std::unordered_map<uint32, WPPath*>::iterator itr = waypoint_map.begin(); itr != waypoint_map.end(); ++itr) { for (WPPath::iterator pathItr = itr->second->begin(); pathItr != itr->second->end(); ++pathItr) delete pathItr->second; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index e69a11d57e5..5574e45c614 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1339,7 +1339,7 @@ struct SmartScriptHolder bool enableTimed; }; -typedef UNORDERED_MAP<uint32, WayPoint*> WPPath; +typedef std::unordered_map<uint32, WayPoint*> WPPath; typedef std::list<WorldObject*> ObjectList; typedef std::list<uint64> GuidList; @@ -1393,7 +1393,7 @@ public: delete m_guidList; } }; -typedef UNORDERED_MAP<uint32, ObjectGuidList*> ObjectListMap; +typedef std::unordered_map<uint32, ObjectGuidList*> ObjectListMap; class SmartWaypointMgr { @@ -1412,14 +1412,14 @@ class SmartWaypointMgr } private: - UNORDERED_MAP<uint32, WPPath*> waypoint_map; + std::unordered_map<uint32, WPPath*> waypoint_map; }; // all events for a single entry typedef std::vector<SmartScriptHolder> SmartAIEventList; // all events for all entries / guids -typedef UNORDERED_MAP<int32, SmartAIEventList> SmartAIEventMap; +typedef std::unordered_map<int32, SmartAIEventList> SmartAIEventMap; // Helper Stores typedef std::map<uint32 /*entry*/, std::pair<uint32 /*spellId*/, SpellEffIndex /*effIndex*/> > CacheSpellContainer; diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index efb42fe693b..2758c677c21 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -35,8 +35,8 @@ class WorldPacket; typedef std::vector<AchievementCriteriaEntry const*> AchievementCriteriaEntryList; typedef std::vector<AchievementEntry const*> AchievementEntryList; -typedef UNORDERED_MAP<uint32, AchievementCriteriaEntryList> AchievementCriteriaListByAchievement; -typedef UNORDERED_MAP<uint32, AchievementEntryList> AchievementListByReferencedId; +typedef std::unordered_map<uint32, AchievementCriteriaEntryList> AchievementCriteriaListByAchievement; +typedef std::unordered_map<uint32, AchievementEntryList> AchievementListByReferencedId; struct CriteriaProgress { @@ -221,7 +221,7 @@ struct AchievementReward uint32 mailTemplate; }; -typedef UNORDERED_MAP<uint32, AchievementReward> AchievementRewards; +typedef std::unordered_map<uint32, AchievementReward> AchievementRewards; struct AchievementRewardLocale { @@ -229,7 +229,7 @@ struct AchievementRewardLocale std::vector<std::string> text; }; -typedef UNORDERED_MAP<uint32, AchievementRewardLocale> AchievementRewardLocales; +typedef std::unordered_map<uint32, AchievementRewardLocale> AchievementRewardLocales; struct CompletedAchievementData { @@ -238,8 +238,8 @@ struct CompletedAchievementData bool changed; }; -typedef UNORDERED_MAP<uint32, CriteriaProgress> CriteriaProgressMap; -typedef UNORDERED_MAP<uint32, CompletedAchievementData> CompletedAchievementMap; +typedef std::unordered_map<uint32, CriteriaProgress> CriteriaProgressMap; +typedef std::unordered_map<uint32, CompletedAchievementData> CompletedAchievementMap; enum ProgressType { diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index b81db2aa79a..978e6869bac 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -145,7 +145,7 @@ class AuctionHouseMgr public: - typedef UNORDERED_MAP<uint32, Item*> ItemMap; + typedef std::unordered_map<uint32, Item*> ItemMap; AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId); AuctionHouseObject* GetBidsMap(uint32 factionTemplateId); diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h index bbb0d87f398..ca915e0db6f 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.h +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h @@ -27,7 +27,7 @@ class ArenaTeamMgr ~ArenaTeamMgr(); public: - typedef UNORDERED_MAP<uint32, ArenaTeam*> ArenaTeamContainer; + typedef std::unordered_map<uint32, ArenaTeam*> ArenaTeamContainer; ArenaTeam* GetArenaTeamById(uint32 arenaTeamId) const; ArenaTeam* GetArenaTeamByName(std::string const& arenaTeamName) const; diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h index 6ee6a158803..45a2f671d81 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.h +++ b/src/server/game/Battlegrounds/BattlegroundMgr.h @@ -28,7 +28,7 @@ typedef std::map<uint32, Battleground*> BattlegroundContainer; typedef std::set<uint32> BattlegroundClientIdsContainer; -typedef UNORDERED_MAP<uint32, BattlegroundTypeId> BattleMastersMap; +typedef std::unordered_map<uint32, BattlegroundTypeId> BattleMastersMap; #define WS_CURRENCY_RESET_TIME 20001 // Custom worldstate diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index c2586e8aa64..83ac056e831 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -552,8 +552,9 @@ void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* switch (go->GetGoType()) { case GAMEOBJECT_TYPE_GOOBER: - if (eventId == BG_SA_EVENT_TITAN_RELIC_ACTIVATED) - TitanRelicActivated(invoker->ToPlayer()); + if (invoker) + if (eventId == BG_SA_EVENT_TITAN_RELIC_ACTIVATED) + TitanRelicActivated(invoker->ToPlayer()); break; case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING: { @@ -577,8 +578,15 @@ void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* GateStatus[gate->GateId] = BG_SA_GATE_DESTROYED; _gateDestroyed = true; - bool rewardHonor = true; + if (gateId < 5) + DelObject(gateId + 14); + if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) + SendChatMessage(c, gate->DestroyedText, invoker); + + PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_DESTROYED_ALLIANCE : SOUND_WALL_DESTROYED_HORDE); + + bool rewardHonor = true; switch (gateId) { case BG_SA_GREEN_GATE: @@ -601,23 +609,18 @@ void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject* break; } - if (gateId < 5) - DelObject(gateId + 14); - - if (Unit* unit = invoker->ToUnit()) + if (invoker) { - if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + if (Unit* unit = invoker->ToUnit()) { - UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); - if (rewardHonor) - UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); + if (rewardHonor) + UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); + } } } - - if (Creature* c = obj->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f)) - SendChatMessage(c, gate->DestroyedText, invoker); - - PlaySoundToAll(Attackers == TEAM_ALLIANCE ? SOUND_WALL_DESTROYED_ALLIANCE : SOUND_WALL_DESTROYED_HORDE); } else break; diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 58ba066eee4..f163f5f15ad 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -146,7 +146,7 @@ typedef std::map<uint64, LfgProposalPlayer> LfgProposalPlayerContainer; typedef std::map<uint64, LfgPlayerBoot> LfgPlayerBootContainer; typedef std::map<uint64, LfgGroupData> LfgGroupDataContainer; typedef std::map<uint64, LfgPlayerData> LfgPlayerDataContainer; -typedef UNORDERED_MAP<uint32, LFGDungeonData> LFGDungeonContainer; +typedef std::unordered_map<uint32, LFGDungeonData> LFGDungeonContainer; // Data needed by SMSG_LFG_JOIN_RESULT struct LfgJoinResultData diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index a7c3b53fd6b..8a22ce61f0d 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -172,7 +172,7 @@ struct CreatureTemplate }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint32, CreatureTemplate> CreatureTemplateContainer; +typedef std::unordered_map<uint32, CreatureTemplate> CreatureTemplateContainer; // GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push, N), also any gcc version not support it at some platform #if defined(__GNUC__) @@ -220,7 +220,7 @@ struct CreatureBaseStats static CreatureBaseStats const* GetBaseStats(uint8 level, uint8 unitClass); }; -typedef UNORDERED_MAP<uint16, CreatureBaseStats> CreatureBaseStatsContainer; +typedef std::unordered_map<uint16, CreatureBaseStats> CreatureBaseStatsContainer; struct CreatureLocale { @@ -245,8 +245,8 @@ struct EquipmentInfo }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint8, EquipmentInfo> EquipmentInfoContainerInternal; -typedef UNORDERED_MAP<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer; +typedef std::unordered_map<uint8, EquipmentInfo> EquipmentInfoContainerInternal; +typedef std::unordered_map<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer; // from `creature` table struct CreatureData @@ -286,7 +286,7 @@ struct CreatureModelInfo }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint16, CreatureModelInfo> CreatureModelContainer; +typedef std::unordered_map<uint16, CreatureModelInfo> CreatureModelContainer; enum InhabitTypeValues { @@ -327,7 +327,7 @@ struct CreatureAddon std::vector<uint32> auras; }; -typedef UNORDERED_MAP<uint32, CreatureAddon> CreatureAddonContainer; +typedef std::unordered_map<uint32, CreatureAddon> CreatureAddonContainer; // Vendors struct VendorItem @@ -404,7 +404,7 @@ struct TrainerSpell bool IsCastable() const { return learnedSpell[0] != spell; } }; -typedef UNORDERED_MAP<uint32 /*spellid*/, TrainerSpell> TrainerSpellMap; +typedef std::unordered_map<uint32 /*spellid*/, TrainerSpell> TrainerSpellMap; struct TrainerSpellData { diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index 846b05abc17..b790853f5e1 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -20,7 +20,7 @@ #define _FORMATIONS_H #include "Define.h" -#include "UnorderedMap.h" +#include <unordered_map> #include <map> class Creature; @@ -36,7 +36,7 @@ struct FormationInfo uint16 point_2; }; -typedef UNORDERED_MAP<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType; +typedef std::unordered_map<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType; class FormationMgr { diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 2120ec0fb36..c21d730b04c 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -97,13 +97,13 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, ui /// OptionText if (optionBroadcastText) - ObjectMgr::GetLocaleString(optionBroadcastText->MaleText, GetLocale(), strOptionText); + strOptionText = optionBroadcastText->GetText(GetLocale()); else strOptionText = itr->second.OptionText; /// BoxText if (boxBroadcastText) - ObjectMgr::GetLocaleString(boxBroadcastText->MaleText, GetLocale(), strBoxText); + strBoxText = boxBroadcastText->GetText(GetLocale()); else strBoxText = itr->second.BoxText; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index e33ffb0c5eb..acfc8da9bc8 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -47,6 +47,7 @@ GameObject::GameObject() : WorldObject(false), MapObject(), m_respawnTime = 0; m_respawnDelayTime = 300; m_lootState = GO_NOT_READY; + m_lootStateUnitGUID = 0; m_spawnedByDefault = true; m_usetimes = 0; m_spellId = 0; @@ -309,13 +310,13 @@ void GameObject::Update(uint32 diff) GameObjectTemplate const* goInfo = GetGOInfo(); // Bombs if (goInfo->trap.type == 2) - m_cooldownTime = time(NULL) + 10; // Hardcoded tooltip value + // Hardcoded tooltip value + m_cooldownTime = time(NULL) + 10; else if (Unit* owner = GetOwner()) - { if (owner->IsInCombat()) m_cooldownTime = time(NULL) + goInfo->trap.startDelay; - } - m_lootState = GO_READY; + + SetLootState(GO_READY); break; } case GAMEOBJECT_TYPE_TRANSPORT: @@ -396,7 +397,7 @@ void GameObject::Update(uint32 diff) if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day) SetRespawnTime(DAY); else - m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime)+urand(5, MINUTE); // else copy time from master and add a little + m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little SaveRespawnTime(); // also save to DB immediately return; } @@ -423,7 +424,7 @@ void GameObject::Update(uint32 diff) } case GAMEOBJECT_TYPE_DOOR: case GAMEOBJECT_TYPE_BUTTON: - //we need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds) + // We need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds) if (GetGoState() != GO_STATE_READY) ResetDoorOrButton(); break; @@ -435,13 +436,15 @@ void GameObject::Update(uint32 diff) break; } - if (!m_spawnedByDefault) // despawn timer + // Despawn timer + if (!m_spawnedByDefault) { - // can be despawned or destroyed + // Can be despawned or destroyed SetLootState(GO_JUST_DEACTIVATED); return; } - // respawn timer + + // Respawn timer uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool<GameObject>(GetDBTableGUIDLow()) : 0; if (poolid) sPoolMgr->UpdatePool<GameObject>(poolid, GetDBTableGUIDLow()); @@ -452,85 +455,59 @@ void GameObject::Update(uint32 diff) if (isSpawned()) { - // traps can have time and can not have GameObjectTemplate const* goInfo = GetGOInfo(); if (goInfo->type == GAMEOBJECT_TYPE_TRAP) { if (m_cooldownTime >= time(NULL)) - return; + break; - // Type 2 - Bomb (will go away after casting it's spell) + // Type 2 (bomb) does not need to be triggered by a unit and despawns after casting its spell. if (goInfo->trap.type == 2) { - if (goInfo->trap.spellId) - CastSpell(NULL, goInfo->trap.spellId); // FIXME: null target won't work for target type 1 - SetLootState(GO_JUST_DEACTIVATED); + SetLootState(GO_ACTIVATED); break; } - // Type 0 and 1 - trap (type 0 will not get removed after casting a spell) - Unit* owner = GetOwner(); - Unit* ok = NULL; // pointer to appropriate target if found any - - bool IsBattlegroundTrap = false; - //FIXME: this is activation radius (in different casting radius that must be selected from spell data) - /// @todo move activated state code (cast itself) to GO_ACTIVATED, in this place only check activating and set state - float radius = (float)(goInfo->trap.radius)/3*2; /// @todo rename radius to diameter (goInfo->trap.radius) should be (goInfo->trap.diameter) - if (!radius) - { - if (goInfo->trap.cooldown != 3) // cast in other case (at some triggering/linked go/etc explicit call) - return; - else - { - if (m_respawnTime > 0) - break; - radius = (float)goInfo->trap.cooldown; // battlegrounds gameobjects has data2 == 0 && data5 == 3 - IsBattlegroundTrap = true; + // Type 0 despawns after being triggered, type 1 does not. + /// @todo This is activation radius. Casting radius must be selected from spell data. + float radius; + if (!goInfo->trap.diameter) + { + // Battleground traps: data2 == 0 && data5 == 3 + if (goInfo->trap.cooldown != 3) + break; - if (!radius) - return; - } + radius = 3.f; } + else + radius = goInfo->trap.diameter / 2.f; + + // Pointer to appropriate target if found any + Unit* target = NULL; - // Note: this hack with search required until GO casting not implemented - // search unfriendly creature - if (owner) // hunter trap + /// @todo this hack with search required until GO casting not implemented + if (Unit* owner = GetOwner()) { + // Hunter trap: Search units which are unfriendly to the trap's owner Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius); - Trinity::UnitSearcher<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, ok, checker); + Trinity::UnitSearcher<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker); VisitNearbyGridObject(radius, searcher); - if (!ok) VisitNearbyWorldObject(radius, searcher); + if (!target) + VisitNearbyWorldObject(radius, searcher); } - else // environmental trap + else { - // environmental damage spells already have around enemies targeting but this not help in case not existed GO casting support - // affect only players + // Environmental trap: Any player Player* player = NULL; Trinity::AnyPlayerInObjectRangeCheck checker(this, radius); Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, player, checker); VisitNearbyWorldObject(radius, searcher); - ok = player; + target = player; } - if (ok) - { - // some traps do not have spell but should be triggered - if (goInfo->trap.spellId) - CastSpell(ok, goInfo->trap.spellId); - - m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)); // template or 4 seconds - - if (goInfo->trap.type == 1) - SetLootState(GO_JUST_DEACTIVATED); + if (target) + SetLootState(GO_ACTIVATED, target); - if (IsBattlegroundTrap && ok->GetTypeId() == TYPEID_PLAYER) - { - //Battleground gameobjects case - if (ok->ToPlayer()->InBattleground()) - if (Battleground* bg = ok->ToPlayer()->GetBattleground()) - bg->HandleTriggerBuff(GetGUID()); - } - } } else if (uint32 max_charges = goInfo->GetCharges()) { @@ -550,7 +527,7 @@ void GameObject::Update(uint32 diff) { case GAMEOBJECT_TYPE_DOOR: case GAMEOBJECT_TYPE_BUTTON: - if (GetGOInfo()->GetAutoCloseTime() && (m_cooldownTime < time(NULL))) + if (m_cooldownTime && (m_cooldownTime < time(NULL))) ResetDoorOrButton(); break; case GAMEOBJECT_TYPE_GOOBER: @@ -575,6 +552,38 @@ void GameObject::Update(uint32 diff) } else m_groupLootTimer -= diff; } + break; + case GAMEOBJECT_TYPE_TRAP: + { + GameObjectTemplate const* goInfo = GetGOInfo(); + if (goInfo->trap.type == 2 && goInfo->trap.spellId) + { + /// @todo NULL target won't work for target type 1 + CastSpell(NULL, goInfo->trap.spellId); + SetLootState(GO_JUST_DEACTIVATED); + } + else if (Unit* target = Unit::GetUnit(*this, m_lootStateUnitGUID)) + { + // Some traps do not have a spell but should be triggered + if (goInfo->trap.spellId) + CastSpell(target, goInfo->trap.spellId); + + // Template value or 4 seconds + m_cooldownTime = time(NULL) + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)); + + if (goInfo->trap.type == 1) + SetLootState(GO_JUST_DEACTIVATED); + else if (!goInfo->trap.type) + SetLootState(GO_READY); + + // Battleground gameobjects have data2 == 0 && data5 == 3 + if (!goInfo->trap.diameter && goInfo->trap.cooldown == 3) + if (Player* player = target->ToPlayer()) + if (Battleground* bg = player->GetBattleground()) + bg->HandleTriggerBuff(GetGUID()); + } + break; + } default: break; } @@ -1905,6 +1914,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u if (newState == GetDestructibleState()) return; + /// @todo: pass attackerOrHealer instead of player SetDestructibleState(newState, player, false); } @@ -2001,6 +2011,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* void GameObject::SetLootState(LootState state, Unit* unit) { m_lootState = state; + m_lootStateUnitGUID = unit ? unit->GetGUID() : 0; AI()->OnStateChanged(state, unit); sScriptMgr->OnGameObjectLootStateChanged(this, state, unit); if (m_model) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 68a5aba619b..640d5718186 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -124,7 +124,7 @@ struct GameObjectTemplate { uint32 lockId; //0 -> Lock.dbc uint32 level; //1 - uint32 radius; //2 radius for trap activation + uint32 diameter; //2 diameter for trap activation uint32 spellId; //3 uint32 type; //4 0 trap with no despawn after cast. 1 trap despawns after cast. 2 bomb casts on spawn. uint32 cooldown; //5 time in secs @@ -539,7 +539,7 @@ struct GameObjectTemplate }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint32, GameObjectTemplate> GameObjectTemplateContainer; +typedef std::unordered_map<uint32, GameObjectTemplate> GameObjectTemplateContainer; class OPvPCapturePoint; struct TransportAnimation; @@ -842,6 +842,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()), uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer LootState m_lootState; + uint64 m_lootStateUnitGUID; // GUID of the unit passed with SetLootState(LootState, Unit*) bool m_spawnedByDefault; time_t m_cooldownTime; // used as internal reaction delay time store (not state change reaction). // For traps this: spell casting cooldown, for doors/buttons: reset time. diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index 3e31347a496..f5813ae0781 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -40,7 +40,7 @@ struct EnchStoreItem }; typedef std::vector<EnchStoreItem> EnchStoreList; -typedef UNORDERED_MAP<uint32, EnchStoreList> EnchantmentStore; +typedef std::unordered_map<uint32, EnchStoreList> EnchantmentStore; static EnchantmentStore RandomItemEnch; diff --git a/src/server/game/Entities/Item/ItemPrototype.h b/src/server/game/Entities/Item/ItemPrototype.h index 4535ae57474..c946f8fd4a3 100644 --- a/src/server/game/Entities/Item/ItemPrototype.h +++ b/src/server/game/Entities/Item/ItemPrototype.h @@ -768,7 +768,7 @@ struct ItemTemplate }; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint32, ItemTemplate> ItemTemplateContainer; +typedef std::unordered_map<uint32, ItemTemplate> ItemTemplateContainer; struct ItemLocale { diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index ed20a8ae5a8..5e525f1e0d5 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -118,7 +118,7 @@ class WorldObject; class WorldPacket; class ZoneScript; -typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType; +typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType; //! Structure to ease conversions from single 64 bit integer guid into individual bytes, for packet sending purposes //! Nuke this out when porting ObjectGuid from MaNGOS, but preserve the per-byte storage diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 2c24643d95d..97323f3f9ab 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -32,7 +32,7 @@ struct PetSpell PetSpellType type; }; -typedef UNORDERED_MAP<uint32, PetSpell> PetSpellMap; +typedef std::unordered_map<uint32, PetSpell> PetSpellMap; typedef std::vector<uint32> AutoSpellList; class Player; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 45dd7f1b641..2a8217d2028 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -371,6 +371,12 @@ void TradeData::SetMoney(uint64 money) if (m_money == money) return; + if (!m_player->HasEnoughMoney(money)) + { + m_player->GetSession()->SendTradeStatus(TRADE_STATUS_BUSY); + return; + } + m_money = money; SetAccepted(false); @@ -660,10 +666,6 @@ void KillRewarder::Reward() } -// == Player ==================================================== - -// we can disable this warning for this since it only -// causes undefined behavior when passed to the base class constructor Player::Player(WorldSession* session): Unit(true), phaseMgr(this) { m_speakTime = 0; @@ -14492,12 +14494,12 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool LocaleConstant locale = GetSession()->GetSessionDbLocaleIndex(); if (optionBroadcastText) - ObjectMgr::GetLocaleString(getGender() == GENDER_MALE ? optionBroadcastText->MaleText : optionBroadcastText->FemaleText, locale, strOptionText); + strOptionText = optionBroadcastText->GetText(locale, getGender()); else strOptionText = itr->second.OptionText; if (boxBroadcastText) - ObjectMgr::GetLocaleString(getGender() == GENDER_MALE ? boxBroadcastText->MaleText : boxBroadcastText->FemaleText, locale, strBoxText); + strBoxText = boxBroadcastText->GetText(locale, getGender()); else strBoxText = itr->second.BoxText; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 48208a61dc8..e417d24f793 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -177,10 +177,10 @@ struct PlayerCurrency uint32 weekCount; }; -typedef UNORDERED_MAP<uint32, PlayerTalent*> PlayerTalentMap; -typedef UNORDERED_MAP<uint32, PlayerSpell*> PlayerSpellMap; +typedef std::unordered_map<uint32, PlayerTalent*> PlayerTalentMap; +typedef std::unordered_map<uint32, PlayerSpell*> PlayerSpellMap; typedef std::list<SpellModifier*> SpellModList; -typedef UNORDERED_MAP<uint32, PlayerCurrency> PlayerCurrenciesMap; +typedef std::unordered_map<uint32, PlayerCurrency> PlayerCurrenciesMap; typedef std::list<uint64> WhisperListContainer; @@ -284,7 +284,7 @@ struct SpellCooldown }; typedef std::map<uint32, SpellCooldown> SpellCooldowns; -typedef UNORDERED_MAP<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap; +typedef std::unordered_map<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap; enum TrainerSpellState { @@ -634,7 +634,7 @@ struct SkillStatusData SkillUpdateState uState; }; -typedef UNORDERED_MAP<uint32, SkillStatusData> SkillStatusMap; +typedef std::unordered_map<uint32, SkillStatusData> SkillStatusMap; class Quest; class Spell; @@ -1735,7 +1735,7 @@ class Player : public Unit, public GridObject<Player> uint8 unReadMails; time_t m_nextMailDelivereTime; - typedef UNORDERED_MAP<uint32, Item*> ItemMap; + typedef std::unordered_map<uint32, Item*> ItemMap; ItemMap mMitems; //template defined in objectmgr.cpp @@ -2387,7 +2387,7 @@ class Player : public Unit, public GridObject<Player> /*** INSTANCE SYSTEM ***/ /*********************************************************/ - typedef UNORDERED_MAP< uint32 /*mapId*/, InstancePlayerBind > BoundInstancesMap; + typedef std::unordered_map< uint32 /*mapId*/, InstancePlayerBind > BoundInstancesMap; void UpdateHomebindTime(uint32 time); @@ -2568,7 +2568,7 @@ class Player : public Unit, public GridObject<Player> //We allow only one timed quest active at the same time. Below can then be simple value instead of set. typedef std::set<uint32> QuestSet; typedef std::set<uint32> SeasonalQuestSet; - typedef UNORDERED_MAP<uint32, SeasonalQuestSet> SeasonalEventQuestMap; + typedef std::unordered_map<uint32, SeasonalQuestSet> SeasonalEventQuestMap; QuestSet m_timedquests; QuestSet m_weeklyquests; QuestSet m_monthlyquests; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index d7af98b47d1..5f0ae6ecdea 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -85,8 +85,8 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa _triggeredDepartureEvent = false; m_goValue.Transport.PathProgress = 0; - SetFloatValue(OBJECT_FIELD_SCALE_X, goinfo->size); - SetUInt32Value(GAMEOBJECT_FACTION, goinfo->faction); + SetObjectScale(goinfo->size); + SetFaction(goinfo->faction); SetUInt32Value(GAMEOBJECT_FLAGS, goinfo->flags); SetPeriod(tInfo->pathTime); SetEntry(goinfo->entry); @@ -209,8 +209,14 @@ void Transport::Update(uint32 diff) 3. transport moves from active to inactive grid 4. the grid that transport is currently in unloads */ - if (_staticPassengers.empty() && GetMap()->IsGridLoaded(GetPositionX(), GetPositionY())) // 2. + bool gridActive = GetMap()->IsGridLoaded(GetPositionX(), GetPositionY()); + + if (_staticPassengers.empty() && gridActive) // 2. LoadStaticPassengers(); + else if (!_staticPassengers.empty() && !gridActive) + // 4. - if transports stopped on grid edge, some passengers can remain in active grids + // unload all static passengers otherwise passengers won't load correctly when the grid that transport is currently in becomes active + UnloadStaticPassengers(); } } @@ -447,6 +453,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu void Transport::UpdatePosition(float x, float y, float z, float o) { bool newActive = GetMap()->IsGridLoaded(x, y); + Cell oldCell(GetPositionX(), GetPositionY()); Relocate(x, y, z, o); UpdateModelPosition(); @@ -461,7 +468,7 @@ void Transport::UpdatePosition(float x, float y, float z, float o) */ if (_staticPassengers.empty() && newActive) // 1. LoadStaticPassengers(); - else if (!_staticPassengers.empty() && !newActive && Cell(x, y).DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3. + else if (!_staticPassengers.empty() && !newActive && oldCell.DiffGrid(Cell(GetPositionX(), GetPositionY()))) // 3. UnloadStaticPassengers(); else UpdatePassengerPositions(_staticPassengers); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f016b226ee2..afc2856fb32 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -155,8 +155,6 @@ ProcEventInfo::ProcEventInfo(Unit* actor, Unit* actionTarget, Unit* procTarget, _damageInfo(damageInfo), _healInfo(healInfo) { } -// we can disable this warning for this since it only -// causes undefined behavior when passed to the base class constructor Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject), m_movedPlayer(NULL), m_lastSanctuaryTime(0), IsAIEnabled(false), NeedChangeAI(false), LastCharmerGUID(0), @@ -13300,7 +13298,7 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const } // Check spellProcEvent data requirements - if (!sSpellMgr->IsSpellProcEventCanTriggeredBy(spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active)) + if (!sSpellMgr->IsSpellProcEventCanTriggeredBy(spellProto, spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active)) return false; // In most cases req get honor or XP from kill if (EventProcFlag & PROC_FLAG_KILL && GetTypeId() == TYPEID_PLAYER) @@ -16467,7 +16465,7 @@ void Unit::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns c data.Initialize(SMSG_SPELL_COOLDOWN, 8 + 1 + (4 + 4) * cooldowns.size()); data << uint64(GetGUID()); data << uint8(flags); - for (UNORDERED_MAP<uint32, uint32>::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr) + for (std::unordered_map<uint32, uint32>::const_iterator itr = cooldowns.begin(); itr != cooldowns.end(); ++itr) { data << uint32(itr->first); data << uint32(itr->second); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 886295d1f1d..1cf44bb5ca7 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1056,7 +1056,7 @@ struct GlobalCooldown uint32 cast_time; }; -typedef UNORDERED_MAP<uint32 /*category*/, GlobalCooldown> GlobalCooldownList; +typedef std::unordered_map<uint32 /*category*/, GlobalCooldown> GlobalCooldownList; class GlobalCooldownMgr // Shared by Player and CharmInfo { @@ -1264,7 +1264,7 @@ enum SpellCooldownFlags SPELL_COOLDOWN_FLAG_INCLUDE_EVENT_COOLDOWNS = 0x2 ///< Starts GCD for spells that should start their cooldown on events, requires SPELL_COOLDOWN_FLAG_INCLUDE_GCD set }; -typedef UNORDERED_MAP<uint32, uint32> PacketCooldowns; +typedef std::unordered_map<uint32, uint32> PacketCooldowns; // delay time next attack to prevent client attack animation problems #define ATTACK_DISPLAY_DELAY 200 diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 4404f8036af..175524d7208 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1621,7 +1621,7 @@ uint16 GameEventMgr::GetEventIdForQuest(Quest const* quest) const if (!quest) return 0; - UNORDERED_MAP<uint32, uint16>::const_iterator itr = _questToEventLinks.find(quest->GetQuestId()); + std::unordered_map<uint32, uint16>::const_iterator itr = _questToEventLinks.find(quest->GetQuestId()); if (itr == _questToEventLinks.end()) return 0; diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index b30ea8fc0ef..4b63402caa8 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -174,7 +174,7 @@ class GameEventMgr QuestIdToEventConditionMap mQuestToEventConditions; GameEventNPCFlagMap mGameEventNPCFlags; ActiveEvents m_ActiveEvents; - UNORDERED_MAP<uint32, uint16> _questToEventLinks; + std::unordered_map<uint32, uint16> _questToEventLinks; bool isSystemInit; public: GameEventGuidMap mGameEventCreatureGuids; diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index af2c1ef290a..7de319df07f 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -440,7 +440,7 @@ void ObjectAccessor::UnloadAll() /// Define the static members of HashMapHolder -template <class T> UNORDERED_MAP< uint64, T* > HashMapHolder<T>::m_objectMap; +template <class T> std::unordered_map< uint64, T* > HashMapHolder<T>::m_objectMap; template <class T> typename HashMapHolder<T>::LockType HashMapHolder<T>::i_lock; /// Global definitions for the hashmap storage diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 1fa8c7dff0c..f65486850ac 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -22,7 +22,7 @@ #include "Define.h" #include <ace/Singleton.h> #include <ace/Thread_Mutex.h> -#include "UnorderedMap.h" +#include <unordered_map> #include "UpdateData.h" @@ -47,7 +47,7 @@ class HashMapHolder { public: - typedef UNORDERED_MAP<uint64, T*> MapType; + typedef std::unordered_map<uint64, T*> MapType; typedef ACE_RW_Thread_Mutex LockType; static void Insert(T* o) @@ -223,8 +223,8 @@ class ObjectAccessor static void _buildPacket(Player*, Object*, UpdateDataMapType&); void _update(); - typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType; - typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType; + typedef std::unordered_map<uint64, Corpse*> Player2CorpsesMapType; + typedef std::unordered_map<Player*, UpdateData>::value_type UpdateDataValueType; std::set<Object*> i_objects; Player2CorpsesMapType i_player2corpse; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 7204b821138..454d79a0ee1 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3657,8 +3657,8 @@ void ObjectMgr::LoadQuests() "QuestGiverTextWindow, QuestGiverTargetName, QuestTurnTextWindow, QuestTurnTargetName, SoundAccept, SoundTurnIn, " // 150 151 152 153 154 155 156 157 158 159 "DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, EmoteOnIncomplete, EmoteOnComplete, " - // 160 161 162 163 164 165 166 167 168 - "OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4, WDBVerified" + // 160 161 162 163 164 165 166 167 + "OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4" " FROM quest_template"); if (!result) { @@ -8644,8 +8644,8 @@ void ObjectMgr::LoadBroadcastTexts() bct.Id = fields[0].GetUInt32(); bct.Language = fields[1].GetUInt32(); - AddLocaleString(fields[2].GetString(), DEFAULT_LOCALE, bct.MaleText); - AddLocaleString(fields[3].GetString(), DEFAULT_LOCALE, bct.FemaleText); + bct.MaleText[DEFAULT_LOCALE] = fields[2].GetString(); + bct.FemaleText[DEFAULT_LOCALE] = fields[3].GetString(); bct.EmoteId0 = fields[4].GetUInt32(); bct.EmoteId1 = fields[5].GetUInt32(); bct.EmoteId2 = fields[6].GetUInt32(); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index f5bd18a2609..9008e7415da 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -126,11 +126,11 @@ enum ScriptCommands SCRIPT_COMMAND_PLAYMOVIE = 34 // source = Player, datalong = movie id }; -// Benchmarked: Faster than UNORDERED_MAP (insert/find) +// Benchmarked: Faster than std::unordered_map (insert/find) typedef std::map<uint32, PageText> PageTextContainer; // Benchmarked: Faster than std::map (insert/find) -typedef UNORDERED_MAP<uint16, InstanceTemplate> InstanceTemplateContainer; +typedef std::unordered_map<uint16, InstanceTemplate> InstanceTemplateContainer; struct GameTele { @@ -143,7 +143,7 @@ struct GameTele std::wstring wnameLow; }; -typedef UNORDERED_MAP<uint32, GameTele > GameTeleContainer; +typedef std::unordered_map<uint32, GameTele > GameTeleContainer; enum ScriptsType { @@ -413,6 +413,13 @@ struct AreaTriggerStruct struct BroadcastText { + BroadcastText() : Id(0), Language(0), EmoteId0(0), EmoteId1(0), EmoteId2(0), + EmoteDelay0(0), EmoteDelay1(0), EmoteDelay2(0), SoundId(0), Unk1(0), Unk2(0) + { + MaleText.resize(DEFAULT_LOCALE + 1); + FemaleText.resize(DEFAULT_LOCALE + 1); + } + uint32 Id; uint32 Language; StringVector MaleText; @@ -426,7 +433,7 @@ struct BroadcastText uint32 SoundId; uint32 Unk1; uint32 Unk2; - // uint32 WDBVerified; + // uint32 VerifiedBuild; std::string const& GetText(LocaleConstant locale = DEFAULT_LOCALE, uint8 gender = GENDER_MALE, bool forceGender = false) const { @@ -445,7 +452,7 @@ struct BroadcastText } }; -typedef UNORDERED_MAP<uint32, BroadcastText> BroadcastTextContainer; +typedef std::unordered_map<uint32, BroadcastText> BroadcastTextContainer; typedef std::set<uint32> CellGuidSet; typedef std::map<uint32/*player guid*/, uint32/*instance*/> CellCorpseSet; @@ -455,8 +462,8 @@ struct CellObjectGuids CellGuidSet gameobjects; CellCorpseSet corpses; }; -typedef UNORDERED_MAP<uint32/*cell_id*/, CellObjectGuids> CellObjectGuidsMap; -typedef UNORDERED_MAP<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap> MapObjectGuids; +typedef std::unordered_map<uint32/*cell_id*/, CellObjectGuids> CellObjectGuidsMap; +typedef std::unordered_map<uint32/*(mapid, spawnMode) pair*/, CellObjectGuidsMap> MapObjectGuids; // Trinity string ranges #define MIN_TRINITY_STRING_ID 1 // 'trinity_string' @@ -473,18 +480,18 @@ struct TrinityStringLocale }; typedef std::map<uint64, uint64> LinkedRespawnContainer; -typedef UNORDERED_MAP<uint32, CreatureData> CreatureDataContainer; -typedef UNORDERED_MAP<uint32, GameObjectData> GameObjectDataContainer; +typedef std::unordered_map<uint32, CreatureData> CreatureDataContainer; +typedef std::unordered_map<uint32, GameObjectData> GameObjectDataContainer; typedef std::map<TempSummonGroupKey, std::vector<TempSummonData> > TempSummonDataContainer; -typedef UNORDERED_MAP<uint32, CreatureLocale> CreatureLocaleContainer; -typedef UNORDERED_MAP<uint32, GameObjectLocale> GameObjectLocaleContainer; -typedef UNORDERED_MAP<uint32, ItemLocale> ItemLocaleContainer; -typedef UNORDERED_MAP<uint32, QuestLocale> QuestLocaleContainer; -typedef UNORDERED_MAP<uint32, NpcTextLocale> NpcTextLocaleContainer; -typedef UNORDERED_MAP<uint32, PageTextLocale> PageTextLocaleContainer; -typedef UNORDERED_MAP<int32, TrinityStringLocale> TrinityStringLocaleContainer; -typedef UNORDERED_MAP<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer; -typedef UNORDERED_MAP<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer; +typedef std::unordered_map<uint32, CreatureLocale> CreatureLocaleContainer; +typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer; +typedef std::unordered_map<uint32, ItemLocale> ItemLocaleContainer; +typedef std::unordered_map<uint32, QuestLocale> QuestLocaleContainer; +typedef std::unordered_map<uint32, NpcTextLocale> NpcTextLocaleContainer; +typedef std::unordered_map<uint32, PageTextLocale> PageTextLocaleContainer; +typedef std::unordered_map<int32, TrinityStringLocale> TrinityStringLocaleContainer; +typedef std::unordered_map<uint32, GossipMenuItemsLocale> GossipMenuItemsLocaleContainer; +typedef std::unordered_map<uint32, PointOfInterestLocale> PointOfInterestLocaleContainer; typedef std::multimap<uint32, uint32> QuestRelations; typedef std::pair<QuestRelations::const_iterator, QuestRelations::const_iterator> QuestRelationBounds; @@ -510,7 +517,7 @@ struct MailLevelReward }; typedef std::list<MailLevelReward> MailLevelRewardList; -typedef UNORDERED_MAP<uint8, MailLevelRewardList> MailLevelRewardContainer; +typedef std::unordered_map<uint8, MailLevelRewardList> MailLevelRewardContainer; // We assume the rate is in general the same for all three types below, but chose to keep three for scalability and customization struct RepRewardRate @@ -612,7 +619,7 @@ struct QuestPOI }; typedef std::vector<QuestPOI> QuestPOIVector; -typedef UNORDERED_MAP<uint32, QuestPOIVector> QuestPOIContainer; +typedef std::unordered_map<uint32, QuestPOIVector> QuestPOIContainer; struct GraveYardData { @@ -621,12 +628,12 @@ struct GraveYardData }; typedef std::multimap<uint32, GraveYardData> GraveYardContainer; -typedef UNORDERED_MAP<uint32 /* graveyard Id */, float /* orientation */> GraveyardOrientationContainer; +typedef std::unordered_map<uint32 /* graveyard Id */, float /* orientation */> GraveyardOrientationContainer; typedef std::pair<GraveYardContainer::const_iterator, GraveYardContainer::const_iterator> GraveYardMapBounds; typedef std::pair<GraveYardContainer::iterator, GraveYardContainer::iterator> GraveYardMapBoundsNonConst; -typedef UNORDERED_MAP<uint32, VendorItemData> CacheVendorItemContainer; -typedef UNORDERED_MAP<uint32, TrainerSpellData> CacheTrainerSpellContainer; +typedef std::unordered_map<uint32, VendorItemData> CacheVendorItemContainer; +typedef std::unordered_map<uint32, TrainerSpellData> CacheTrainerSpellContainer; enum SkillRangeType { @@ -674,7 +681,7 @@ struct DungeonEncounter }; typedef std::list<DungeonEncounter const*> DungeonEncounterList; -typedef UNORDERED_MAP<uint32, DungeonEncounterList> DungeonEncounterContainer; +typedef std::unordered_map<uint32, DungeonEncounterList> DungeonEncounterContainer; struct HotfixInfo { @@ -697,21 +704,21 @@ class ObjectMgr ~ObjectMgr(); public: - typedef UNORDERED_MAP<uint32, Item*> ItemMap; + typedef std::unordered_map<uint32, Item*> ItemMap; - typedef UNORDERED_MAP<uint32, Quest*> QuestMap; + typedef std::unordered_map<uint32, Quest*> QuestMap; - typedef UNORDERED_MAP<uint32, AreaTriggerStruct> AreaTriggerContainer; + typedef std::unordered_map<uint32, AreaTriggerStruct> AreaTriggerContainer; - typedef UNORDERED_MAP<uint32, uint32> AreaTriggerScriptContainer; + typedef std::unordered_map<uint32, uint32> AreaTriggerScriptContainer; - typedef UNORDERED_MAP<uint32, AccessRequirement*> AccessRequirementContainer; + typedef std::unordered_map<uint32, AccessRequirement*> AccessRequirementContainer; - typedef UNORDERED_MAP<uint32, RepRewardRate > RepRewardRateContainer; - typedef UNORDERED_MAP<uint32, ReputationOnKillEntry> RepOnKillContainer; - typedef UNORDERED_MAP<uint32, RepSpilloverTemplate> RepSpilloverTemplateContainer; + typedef std::unordered_map<uint32, RepRewardRate > RepRewardRateContainer; + typedef std::unordered_map<uint32, ReputationOnKillEntry> RepOnKillContainer; + typedef std::unordered_map<uint32, RepSpilloverTemplate> RepSpilloverTemplateContainer; - typedef UNORDERED_MAP<uint32, PointOfInterest> PointOfInterestContainer; + typedef std::unordered_map<uint32, PointOfInterest> PointOfInterestContainer; typedef std::vector<std::string> ScriptNameContainer; @@ -877,7 +884,7 @@ class ObjectMgr DungeonEncounterList const* GetDungeonEncounterList(uint32 mapId, Difficulty difficulty) { - UNORDERED_MAP<uint32, DungeonEncounterList>::const_iterator itr = _dungeonEncounterStore.find(MAKE_PAIR32(mapId, difficulty)); + std::unordered_map<uint32, DungeonEncounterList>::const_iterator itr = _dungeonEncounterStore.find(MAKE_PAIR32(mapId, difficulty)); if (itr != _dungeonEncounterStore.end()) return &itr->second; return NULL; @@ -1332,8 +1339,8 @@ class ObjectMgr QuestMap _questTemplates; - typedef UNORDERED_MAP<uint32, GossipText> GossipTextContainer; - typedef UNORDERED_MAP<uint32, uint32> QuestAreaTriggerContainer; + typedef std::unordered_map<uint32, GossipText> GossipTextContainer; + typedef std::unordered_map<uint32, uint32> QuestAreaTriggerContainer; typedef std::set<uint32> TavernAreaTriggerContainer; typedef std::set<uint32> GameObjectForQuestContainer; diff --git a/src/server/game/Grids/GridStates.cpp b/src/server/game/Grids/GridStates.cpp index 8b57c382cd7..3e085f1f381 100644 --- a/src/server/game/Grids/GridStates.cpp +++ b/src/server/game/Grids/GridStates.cpp @@ -20,18 +20,6 @@ #include "GridNotifiers.h" #include "Log.h" -#ifdef TRINITY_DEBUG -bool GridState::checkMagic() -{ - if (i_Magic != MAGIC_TESTVAL) - { - TC_LOG_ERROR("misc", "!!! GridState: Magic value gone !!!"); - return false; - } - return true; -} -#endif - void InvalidState::Update(Map&, NGridType&, GridInfo&, uint32) const { } diff --git a/src/server/game/Grids/GridStates.h b/src/server/game/Grids/GridStates.h index 016df4dc3d4..af11ab08d5e 100644 --- a/src/server/game/Grids/GridStates.h +++ b/src/server/game/Grids/GridStates.h @@ -27,13 +27,6 @@ class Map; class GridState { public: -#ifdef TRINITY_DEBUG -#define MAGIC_TESTVAL 0xFBE823BA - GridState() { i_Magic = MAGIC_TESTVAL; } - bool checkMagic(); - void setMagic() { i_Magic = MAGIC_TESTVAL; } - unsigned int i_Magic; -#endif virtual ~GridState() { }; virtual void Update(Map &, NGridType&, GridInfo &, uint32 t_diff) const = 0; }; diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index daaa849faef..2929c05cace 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -175,7 +175,7 @@ class Group typedef std::list<MemberSlot> MemberSlotList; typedef MemberSlotList::const_iterator member_citerator; - typedef UNORDERED_MAP< uint32 /*mapId*/, InstanceGroupBind> BoundInstancesMap; + typedef std::unordered_map< uint32 /*mapId*/, InstanceGroupBind> BoundInstancesMap; protected: typedef MemberSlotList::iterator member_witerator; typedef std::set<Player*> InvitesList; diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index 2d9d9085917..d62907ddde5 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -744,7 +744,7 @@ private: void CanStoreItemInTab(Item* pItem, uint8 skipSlotId, bool merge, uint32& count); }; - typedef UNORDERED_MAP<uint32, Member*> Members; + typedef std::unordered_map<uint32, Member*> Members; typedef std::vector<RankInfo> Ranks; typedef std::vector<BankTab*> BankTabs; diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h index 1a400a50f5c..2dcc0202993 100644 --- a/src/server/game/Guilds/GuildMgr.h +++ b/src/server/game/Guilds/GuildMgr.h @@ -54,7 +54,7 @@ public: void ResetTimes(bool week); protected: - typedef UNORDERED_MAP<uint32, Guild*> GuildContainer; + typedef std::unordered_map<uint32, Guild*> GuildContainer; uint32 NextGuildId; GuildContainer GuildStore; std::vector<uint64> GuildXPperLevel; diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index 00a4c799e57..b2db2fff6c2 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -175,6 +175,12 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData) return; } + if (GetPlayer()->GetArenaTeamId(arenaTeam->GetSlot()) != arenaTeamId) + { + SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS); + return; + } + // OK result but don't send invite if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) return; diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 0288e3c86cd..b2eb89efb31 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -305,8 +305,8 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData) BroadcastText const* bct = sObjectMgr->GetBroadcastText(gossip->Options[i].BroadcastTextID); if (bct) { - ObjectMgr::GetLocaleString(bct->MaleText, locale, text0[i]); - ObjectMgr::GetLocaleString(bct->FemaleText, locale, text1[i]); + text0[i] = bct->GetText(locale, GENDER_MALE, true); + text1[i] = bct->GetText(locale, GENDER_FEMALE, true); } else { diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 298ae29bfcd..fc6062773a1 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -785,7 +785,6 @@ void WorldSession::HandleSetTradeGoldOpcode(WorldPacket& recvPacket) if (!my_trade) return; - // gold can be incorrect, but this is checked at trade finished. my_trade->SetMoney(gold); } diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index 7a89e6488f0..cf852b7c952 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -24,7 +24,7 @@ #include <ace/Thread_Mutex.h> #include <list> #include <map> -#include "UnorderedMap.h" +#include <unordered_map> #include "DatabaseEnv.h" #include "DBCEnums.h" #include "ObjectDefines.h" @@ -140,7 +140,7 @@ class InstanceSave ACE_Thread_Mutex _lock; }; -typedef UNORDERED_MAP<uint32 /*PAIR32(map, difficulty)*/, time_t /*resetTime*/> ResetTimeByMapDifficultyMap; +typedef std::unordered_map<uint32 /*PAIR32(map, difficulty)*/, time_t /*resetTime*/> ResetTimeByMapDifficultyMap; class InstanceSaveManager { @@ -152,7 +152,7 @@ class InstanceSaveManager ~InstanceSaveManager(); public: - typedef UNORDERED_MAP<uint32 /*InstanceId*/, InstanceSave*> InstanceSaveHashMap; + typedef std::unordered_map<uint32 /*InstanceId*/, InstanceSave*> InstanceSaveHashMap; /* resetTime is a global propery of each (raid/heroic) map all instances of that map reset at the same time */ diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index fe21e4726ef..ed0f3b9717b 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -178,7 +178,7 @@ typedef std::vector<QuestItem> QuestItemList; typedef std::vector<LootItem> LootItemList; typedef std::map<uint32, QuestItemList*> QuestItemMap; typedef std::list<LootStoreItem*> LootStoreItemList; -typedef UNORDERED_MAP<uint32, LootTemplate*> LootTemplateMap; +typedef std::unordered_map<uint32, LootTemplate*> LootTemplateMap; typedef std::set<uint32> LootIdSet; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index cac40ff4961..22c0b332f33 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -1544,11 +1544,8 @@ void Map::UnloadAll() Transport* transport = *itr; ++itr; - transport->RemoveFromWorld(); - delete transport; + RemoveFromMap<Transport>(transport, true); } - - _transports.clear(); } // ***************************** @@ -2648,27 +2645,30 @@ void Map::RemoveAllObjectsInRemoveList() RemoveFromMap(corpse, true); break; } - case TYPEID_DYNAMICOBJECT: - RemoveFromMap((DynamicObject*)obj, true); - break; - case TYPEID_AREATRIGGER: - RemoveFromMap((AreaTrigger*)obj, true); - break; - case TYPEID_GAMEOBJECT: - if (Transport* transport = obj->ToGameObject()->ToTransport()) - RemoveFromMap(transport, true); - else - RemoveFromMap(obj->ToGameObject(), true); - break; - case TYPEID_UNIT: - // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call - // make sure that like sources auras/etc removed before destructor start - obj->ToCreature()->CleanupsBeforeDelete(); - RemoveFromMap(obj->ToCreature(), true); - break; - default: - TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId()); - break; + case TYPEID_DYNAMICOBJECT: + RemoveFromMap(obj->ToDynObject(), true); + break; + case TYPEID_AREATRIGGER: + RemoveFromMap((AreaTrigger*)obj, true); + break; + case TYPEID_GAMEOBJECT: + { + GameObject* go = obj->ToGameObject(); + if (Transport* transport = go->ToTransport()) + RemoveFromMap(transport, true); + else + RemoveFromMap(go, true); + break; + } + case TYPEID_UNIT: + // in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call + // make sure that like sources auras/etc removed before destructor start + obj->ToCreature()->CleanupsBeforeDelete(); + RemoveFromMap(obj->ToCreature(), true); + break; + default: + TC_LOG_ERROR("maps", "Non-grid object (TypeId: %u) is in grid object remove list, ignored.", obj->GetTypeId()); + break; } i_objectsToRemove.erase(itr); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 6b6de9e5209..c160d7a0f91 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -256,7 +256,7 @@ struct ZoneDynamicInfo typedef std::map<uint32/*leaderDBGUID*/, CreatureGroup*> CreatureGroupHolderType; -typedef UNORDERED_MAP<uint32 /*zoneId*/, ZoneDynamicInfo> ZoneDynamicInfoMap; +typedef std::unordered_map<uint32 /*zoneId*/, ZoneDynamicInfo> ZoneDynamicInfoMap; class Map : public GridRefManager<NGridType> { @@ -483,7 +483,7 @@ class Map : public GridRefManager<NGridType> time_t GetLinkedRespawnTime(uint64 guid) const; time_t GetCreatureRespawnTime(uint32 dbGuid) const { - UNORDERED_MAP<uint32 /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid); + std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _creatureRespawnTimes.find(dbGuid); if (itr != _creatureRespawnTimes.end()) return itr->second; @@ -492,7 +492,7 @@ class Map : public GridRefManager<NGridType> time_t GetGORespawnTime(uint32 dbGuid) const { - UNORDERED_MAP<uint32 /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid); + std::unordered_map<uint32 /*dbGUID*/, time_t>::const_iterator itr = _goRespawnTimes.find(dbGuid); if (itr != _goRespawnTimes.end()) return itr->second; @@ -659,8 +659,8 @@ class Map : public GridRefManager<NGridType> m_activeNonPlayers.erase(obj); } - UNORDERED_MAP<uint32 /*dbGUID*/, time_t> _creatureRespawnTimes; - UNORDERED_MAP<uint32 /*dbGUID*/, time_t> _goRespawnTimes; + std::unordered_map<uint32 /*dbGUID*/, time_t> _creatureRespawnTimes; + std::unordered_map<uint32 /*dbGUID*/, time_t> _goRespawnTimes; ZoneDynamicInfoMap _zoneDynamicInfo; uint32 _defaultLight; diff --git a/src/server/game/Maps/MapInstanced.h b/src/server/game/Maps/MapInstanced.h index aa2b5f95d3f..30aec43cc21 100644 --- a/src/server/game/Maps/MapInstanced.h +++ b/src/server/game/Maps/MapInstanced.h @@ -27,7 +27,7 @@ class MapInstanced : public Map { friend class MapManager; public: - typedef UNORDERED_MAP< uint32, Map*> InstancedMaps; + typedef std::unordered_map< uint32, Map*> InstancedMaps; MapInstanced(uint32 id, time_t expiry); ~MapInstanced() { } diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index 98a5f8c7180..b7fb0617a46 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -126,7 +126,7 @@ class MapManager MapUpdater * GetMapUpdater() { return &m_updater; } private: - typedef UNORDERED_MAP<uint32, Map*> MapMapType; + typedef std::unordered_map<uint32, Map*> MapMapType; typedef std::vector<bool> InstanceIds; MapManager(); diff --git a/src/server/game/Maps/PhaseMgr.h b/src/server/game/Maps/PhaseMgr.h index 3d23a8584ec..a2f51722e26 100644 --- a/src/server/game/Maps/PhaseMgr.h +++ b/src/server/game/Maps/PhaseMgr.h @@ -59,7 +59,7 @@ struct PhaseDefinition }; typedef std::list<PhaseDefinition> PhaseDefinitionContainer; -typedef UNORDERED_MAP<uint32 /*zoneId*/, PhaseDefinitionContainer> PhaseDefinitionStore; +typedef std::unordered_map<uint32 /*zoneId*/, PhaseDefinitionContainer> PhaseDefinitionStore; struct SpellPhaseInfo { @@ -68,7 +68,7 @@ struct SpellPhaseInfo uint32 terrainswapmap; }; -typedef UNORDERED_MAP<uint32 /*spellId*/, SpellPhaseInfo> SpellPhaseStore; +typedef std::unordered_map<uint32 /*spellId*/, SpellPhaseInfo> SpellPhaseStore; struct PhaseInfo { @@ -82,7 +82,7 @@ struct PhaseInfo bool NeedsClientSideUpdate() const { return terrainswapmap || phaseId; } }; -typedef UNORDERED_MAP<uint32 /*spellId*/, PhaseInfo> PhaseInfoContainer; +typedef std::unordered_map<uint32 /*spellId*/, PhaseInfo> PhaseInfoContainer; struct PhaseData { diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index a207522c4df..5da856b185c 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -31,10 +31,10 @@ class Map; typedef Movement::Spline<double> TransportSpline; typedef std::vector<KeyFrame> KeyFrameVec; -typedef UNORDERED_MAP<uint32, TransportTemplate> TransportTemplates; +typedef std::unordered_map<uint32, TransportTemplate> TransportTemplates; typedef std::set<Transport*> TransportSet; -typedef UNORDERED_MAP<uint32, TransportSet> TransportMap; -typedef UNORDERED_MAP<uint32, std::set<uint32> > TransportInstanceMap; +typedef std::unordered_map<uint32, TransportSet> TransportMap; +typedef std::unordered_map<uint32, std::set<uint32> > TransportInstanceMap; struct KeyFrame { diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h index fe7ca5ec931..bafc6322e71 100644 --- a/src/server/game/Movement/Waypoints/WaypointManager.h +++ b/src/server/game/Movement/Waypoints/WaypointManager.h @@ -34,7 +34,7 @@ struct WaypointData }; typedef std::vector<WaypointData*> WaypointPath; -typedef UNORDERED_MAP<uint32, WaypointPath> WaypointPathContainer; +typedef std::unordered_map<uint32, WaypointPath> WaypointPathContainer; class WaypointMgr { diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 0f54e0af6c1..9a17175b1a8 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -162,7 +162,7 @@ Quest::Quest(Field* questRecord) for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) OfferRewardEmoteDelay[i] = questRecord[164+i].GetInt32(); - // int32 WDBVerified = questRecord[168].GetInt32(); + //int32 VerifiedBuild = questRecord[168].GetInt32(); if (SpecialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT) Flags |= QUEST_FLAGS_AUTO_ACCEPT; diff --git a/src/server/game/Scripting/ScriptSystem.h b/src/server/game/Scripting/ScriptSystem.h index af2e50bae36..11120f3031b 100644 --- a/src/server/game/Scripting/ScriptSystem.h +++ b/src/server/game/Scripting/ScriptSystem.h @@ -53,7 +53,7 @@ class SystemMgr ~SystemMgr() { } public: - typedef UNORDERED_MAP<uint32, ScriptPointVector> PointMoveMap; + typedef std::unordered_map<uint32, ScriptPointVector> PointMoveMap; //Database void LoadScriptWaypoints(); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 413addfc6d6..2453104c80e 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1007,7 +1007,7 @@ class WorldSession WorldSession* Session; private: - typedef UNORDERED_MAP<uint16, bool> OpcodeStatusMap; + typedef std::unordered_map<uint16, bool> OpcodeStatusMap; OpcodeStatusMap _isOpcodeAllowed; // could be bool array, but wouldn't be practical for game versions with non-linear opcodes Policy _policy; diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp index 5e272edb531..e8a89039031 100644 --- a/src/server/game/Skills/SkillDiscovery.cpp +++ b/src/server/game/Skills/SkillDiscovery.cpp @@ -40,7 +40,7 @@ struct SkillDiscoveryEntry }; typedef std::list<SkillDiscoveryEntry> SkillDiscoveryList; -typedef UNORDERED_MAP<int32, SkillDiscoveryList> SkillDiscoveryMap; +typedef std::unordered_map<int32, SkillDiscoveryList> SkillDiscoveryMap; static SkillDiscoveryMap SkillDiscoveryStore; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index b8af5a51a3e..a4210d2dad5 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -6039,7 +6039,7 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const uint32 procVictim = PROC_FLAG_TAKEN_PERIODIC; uint32 procEx = (crit ? PROC_EX_CRITICAL_HIT : PROC_EX_NORMAL_HIT) | PROC_EX_INTERNAL_HOT; // ignore item heals - if (!haveCastItem && GetAuraType() != SPELL_AURA_OBS_MOD_HEALTH) + if (!haveCastItem) caster->ProcDamageAndSpell(target, procAttacker, procVictim, procEx, damage, BASE_ATTACK, GetSpellInfo()); } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 44b2be40fec..05b4ebfc258 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1305,17 +1305,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b if (target->HasAura(61988) && !target->HasAura(25771)) target->RemoveAura(61988); break; - case 72368: // Shared Suffering - case 72369: - if (caster) - { - if (AuraEffect* aurEff = GetEffect(0)) - { - int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber()); - if (remainingDamage > 0) - caster->CastCustomSpell(caster, 72373, NULL, &remainingDamage, NULL, true); - } - } + default: break; } break; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6f309a148ce..6ec5e5d5f8f 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -573,6 +573,7 @@ m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharme m_CastItem = NULL; m_castItemGUID = 0; + m_castItemEntry = 0; unitTarget = NULL; itemTarget = NULL; @@ -1243,8 +1244,12 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici float angle = float(rand_norm()) * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f); m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dist, angle); - float ground = z; - float liquidLevel = m_caster->GetMap()->GetWaterOrGroundLevel(x, y, z, &ground); + float ground = m_caster->GetMap()->GetHeight(m_caster->GetPhaseMask(), x, y, z, true, 50.0f); + float liquidLevel = VMAP_INVALID_HEIGHT_VALUE; + LiquidData liquidData; + if (m_caster->GetMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &liquidData)) + liquidLevel = liquidData.level; + if (liquidLevel <= ground) // When there is no liquid Map::GetWaterOrGroundLevel returns ground level { SendCastResult(SPELL_FAILED_NOT_HERE); @@ -2808,9 +2813,15 @@ bool Spell::UpdateChanneledTargetList() void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggeredByAura) { if (m_CastItem) + { m_castItemGUID = m_CastItem->GetGUID(); + m_castItemEntry = m_CastItem->GetEntry(); + } else + { m_castItemGUID = 0; + m_castItemEntry = 0; + } InitExplicitTargets(*targets); @@ -3024,7 +3035,12 @@ void Spell::cancel() void Spell::cast(bool skipCheck) { // update pointers base at GUIDs to prevent access to non-existed already object - UpdatePointers(); + if (!UpdatePointers()) + { + // cancel the spell if UpdatePointers() returned false, something wrong happened there + cancel(); + return; + } // cancel at lost explicit target during cast if (m_targets.GetObjectTargetGUID() && !m_targets.GetObjectTarget()) @@ -3274,7 +3290,12 @@ void Spell::handle_immediate() uint64 Spell::handle_delayed(uint64 t_offset) { - UpdatePointers(); + if (!UpdatePointers()) + { + // finish the spell if UpdatePointers() returned false, something wrong happened there + finish(false); + return 0; + } if (m_caster->GetTypeId() == TYPEID_PLAYER) m_caster->ToPlayer()->SetSpellModTakingSpell(this, true); @@ -3429,7 +3450,12 @@ void Spell::SendSpellCooldown() void Spell::update(uint32 difftime) { // update pointers based at it's GUIDs - UpdatePointers(); + if (!UpdatePointers()) + { + // cancel the spell if UpdatePointers() returned false, something wrong happened there + cancel(); + return; + } if (m_targets.GetUnitTargetGUID() && !m_targets.GetUnitTarget()) { @@ -4283,6 +4309,8 @@ void Spell::TakeCastItem() m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; } } @@ -4521,6 +4549,8 @@ void Spell::TakeReagents() } m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; } // if GetItemTarget is also spell reagent @@ -6336,7 +6366,7 @@ void Spell::DelayedChannel() SendChannelUpdate(m_timer); } -void Spell::UpdatePointers() +bool Spell::UpdatePointers() { if (m_originalCasterGUID == m_caster->GetGUID()) m_originalCaster = m_caster; @@ -6348,13 +6378,22 @@ void Spell::UpdatePointers() } if (m_castItemGUID && m_caster->GetTypeId() == TYPEID_PLAYER) + { m_CastItem = m_caster->ToPlayer()->GetItemByGuid(m_castItemGUID); + // cast item not found, somehow the item is no longer where we expected + if (!m_CastItem) + return false; + + // check if the item is really the same, in case it has been wrapped for example + if (m_castItemEntry != m_CastItem->GetEntry()) + return false; + } m_targets.Update(m_caster); // further actions done only for dest targets if (!m_targets.HasDst()) - return; + return true; // cache last transport WorldObject* transport = NULL; @@ -6375,6 +6414,8 @@ void Spell::UpdatePointers() dest._position.RelocateOffset(dest._transportOffset); } } + + return true; } CurrentSpellTypes Spell::GetCurrentContainer() const diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 65ff9f7551d..2b026b77160 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -456,6 +456,7 @@ class Spell SpellInfo const* const m_spellInfo; Item* m_CastItem; uint64 m_castItemGUID; + uint32 m_castItemEntry; uint8 m_cast_count; uint32 m_glyphIndex; uint32 m_preCastSpell; @@ -491,7 +492,7 @@ class Spell SpellInfo const* GetSpellInfo() const { return m_spellInfo; } int32 GetPowerCost() const { return m_powerCost; } - void UpdatePointers(); // must be used at call Spell code after time delay (non triggered spell cast/update spell call/etc) + bool UpdatePointers(); // must be used at call Spell code after time delay (non triggered spell cast/update spell call/etc) void CleanupTargetList(); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index d2fa8650c13..9c6b69ef7d7 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1933,6 +1933,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex) m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; player->StoreItem(dest, pNewItem, true); return; @@ -1951,6 +1953,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex) m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; player->BankItem(dest, pNewItem, true); return; @@ -1973,6 +1977,8 @@ void Spell::EffectSummonChangeItem(SpellEffIndex effIndex) m_targets.SetItemTarget(NULL); m_CastItem = NULL; + m_castItemGUID = 0; + m_castItemEntry = 0; player->EquipItem(dest, pNewItem, true); player->AutoUnequipOffhandIfNeed(); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index ff6751717ed..33a2bd2d41a 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -776,7 +776,7 @@ SpellProcEventEntry const* SpellMgr::GetSpellProcEvent(uint32 spellId) const return NULL; } -bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const +bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const { // No extra req need uint32 procEvent_procEx = PROC_EX_NONE; @@ -787,13 +787,15 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr bool hasFamilyMask = false; - /** - + /** + * @brief Check auras procced by periodics *Only damaging Dots can proc auras with PROC_FLAG_TAKEN_DAMAGE - *Both Dots and hots can proc if ONLY has PROC_FLAG_DONE_PERIODIC or PROC_FLAG_TAKEN_PERIODIC. Such auras need support in Unit::HandleAuraProc. + *Only Dots can proc if ONLY has PROC_FLAG_DONE_PERIODIC or PROC_FLAG_TAKEN_PERIODIC. + + *Hots can proc if ONLY has PROC_FLAG_DONE_PERIODIC and spellfamily != 0 *Only Dots can proc auras with PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG or PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG @@ -807,7 +809,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr * @param procFlags proc_flags of spellProc * @param procExtra proc_EX of procSpell * @param EventProcFlag proc_flags of aura to be procced - + * @param spellProto SpellInfo of aura to be procced */ @@ -815,34 +817,41 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr if (procFlags & PROC_FLAG_TAKEN_DAMAGE && EventProcFlag & PROC_FLAG_TAKEN_DAMAGE) return true; - /// Any aura that has only PROC_FLAG_DONE_PERIODIC or PROC_FLAG_TAKEN_PERIODIC should always proc, if procSpell is correct or not is checked in Unit::HandleAuraProc - if ((EventProcFlag == PROC_FLAG_DONE_PERIODIC && procFlags == PROC_FLAG_DONE_PERIODIC) || (EventProcFlag == PROC_FLAG_TAKEN_PERIODIC && procFlags == PROC_FLAG_TAKEN_PERIODIC)) - return true; - if (procFlags & PROC_FLAG_DONE_PERIODIC && EventProcFlag & PROC_FLAG_DONE_PERIODIC) - { - /// Aura must have positive procflags for a HOT to proc + { if (procExtra & PROC_EX_INTERNAL_HOT) { - if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS))) + if (EventProcFlag == PROC_FLAG_DONE_PERIODIC) + { + /// no aura with only PROC_FLAG_DONE_PERIODIC and spellFamilyName == 0 can proc from a HOT. + if (!spellProto->SpellFamilyName) + return false; + } + /// Aura must have positive procflags for a HOT to proc + else if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS))) return false; } - /// Aura must have negative procflags for a DOT to proc - else if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG))) - return false; + /// Aura must have negative or neutral(PROC_FLAG_DONE_PERIODIC only) procflags for a DOT to proc + else if (EventProcFlag != PROC_FLAG_DONE_PERIODIC) + if (!(EventProcFlag & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG))) + return false; } if (procFlags & PROC_FLAG_TAKEN_PERIODIC && EventProcFlag & PROC_FLAG_TAKEN_PERIODIC) - { - /// Aura must have positive procflags for a HOT to proc + { if (procExtra & PROC_EX_INTERNAL_HOT) { + /// No aura that only has PROC_FLAG_TAKEN_PERIODIC can proc from a HOT. + if (EventProcFlag == PROC_FLAG_TAKEN_PERIODIC) + return false; + /// Aura must have positive procflags for a HOT to proc if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS))) return false; } - /// Aura must have negative procflags for a DOT to proc - else if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG))) - return false; + /// Aura must have negative or neutral(PROC_FLAG_TAKEN_PERIODIC only) procflags for a DOT to proc + else if (EventProcFlag != PROC_FLAG_TAKEN_PERIODIC) + if (!(EventProcFlag & (PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG | PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG))) + return false; } // Trap casts are active by default if (procFlags & PROC_FLAG_DONE_TRAP_ACTIVATION) @@ -3376,6 +3385,18 @@ void SpellMgr::LoadSpellInfoCorrections() break; // ENDOF TRIAL OF THE CRUSADER SPELLS // + // HALLS OF REFLECTION SPELLS + // + case 72435: // Defiling Horror + case 72452: // Defiling Horror + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd + spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_60_YARDS); // 60yd + break; + case 72900: // Start Halls of Reflection Quest AE + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd + break; + // ENDOF HALLS OF REFLECTION SPELLS + // // ICECROWN CITADEL SPELLS // // THESE SPELLS ARE WORKING CORRECTLY EVEN WITHOUT THIS HACK diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index b1a3d982409..29bfd33f704 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -23,14 +23,15 @@ #include <ace/Singleton.h> +#include "Define.h" #include "DBCStructure.h" #include "SharedDefines.h" -#include "UnorderedMap.h" #include "Util.h" #include <map> #include <set> #include <vector> +#include <unordered_map> class SpellInfo; class Player; @@ -285,7 +286,7 @@ struct SpellProcEventEntry uint32 cooldown; // hidden cooldown used for some spell proc events, applied to _triggered_spell_ }; -typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap; +typedef std::unordered_map<uint32, SpellProcEventEntry> SpellProcEventMap; struct SpellProcEntry { @@ -303,7 +304,7 @@ struct SpellProcEntry uint32 charges; // if nonzero - owerwrite procCharges field for given Spell.dbc entry, defines how many times proc can occur before aura remove, 0 - infinite }; -typedef UNORDERED_MAP<uint32, SpellProcEntry> SpellProcMap; +typedef std::unordered_map<uint32, SpellProcEntry> SpellProcMap; struct SpellEnchantProcEntry { @@ -312,7 +313,7 @@ struct SpellEnchantProcEntry uint32 procEx; }; -typedef UNORDERED_MAP<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap; +typedef std::unordered_map<uint32, SpellEnchantProcEntry> SpellEnchantProcEventMap; struct SpellBonusEntry { @@ -322,7 +323,7 @@ struct SpellBonusEntry float ap_dot_bonus; }; -typedef UNORDERED_MAP<uint32, SpellBonusEntry> SpellBonusMap; +typedef std::unordered_map<uint32, SpellBonusEntry> SpellBonusMap; enum SpellGroup { @@ -443,7 +444,7 @@ enum EffectRadiusIndex class PetAura { private: - typedef UNORDERED_MAP<uint32, uint32> PetAuraMap; + typedef std::unordered_map<uint32, uint32> PetAuraMap; public: PetAura() : removeOnChangePet(false), damage(0) { } @@ -523,7 +524,7 @@ struct SpellChainNode uint8 rank; }; -typedef UNORDERED_MAP<uint32, SpellChainNode> SpellChainMap; +typedef std::unordered_map<uint32, SpellChainNode> SpellChainMap; // spell_id req_spell typedef std::multimap<uint32, uint32> SpellRequiredMap; @@ -657,7 +658,7 @@ class SpellMgr // Spell proc event table SpellProcEventEntry const* GetSpellProcEvent(uint32 spellId) const; - bool IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const; + bool IsSpellProcEventCanTriggeredBy(SpellInfo const* spellProto, SpellProcEventEntry const* spellProcEvent, uint32 EventProcFlag, SpellInfo const* procSpell, uint32 procFlags, uint32 procExtra, bool active) const; // Spell proc table SpellProcEntry const* GetSpellProcEntry(uint32 spellId) const; diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index e2d69e1bfc4..35f5cb82036 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -28,18 +28,19 @@ class CreatureTextBuilder { public: - CreatureTextBuilder(WorldObject const* obj, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) - : _source(obj), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } + CreatureTextBuilder(WorldObject const* obj, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) + : _source(obj), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } size_t operator()(WorldPacket* data, LocaleConstant locale) const { - std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale); + std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale); return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _source, _target, text, 0, "", locale); } private: WorldObject const* _source; + uint8 _gender; ChatMsg _msgType; uint8 _textGroup; uint32 _textId; @@ -50,12 +51,12 @@ class CreatureTextBuilder class PlayerTextBuilder { public: - PlayerTextBuilder(WorldObject const* obj, WorldObject const* speaker, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) - : _source(obj), _talker(speaker), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } + PlayerTextBuilder(WorldObject const* obj, WorldObject const* speaker, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) + : _source(obj), _talker(speaker), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } size_t operator()(WorldPacket* data, LocaleConstant locale) const { - std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _textGroup, _textId, locale); + std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale); return ChatHandler::BuildChatPacket(*data, _msgType, Language(_language), _talker, _target, text, 0, "", locale); } @@ -63,6 +64,7 @@ class PlayerTextBuilder private: WorldObject const* _source; WorldObject const* _talker; + uint8 _gender; ChatMsg _msgType; uint8 _textGroup; uint32 _textId; @@ -283,14 +285,15 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject if (srcPlr) { - PlayerTextBuilder builder(source, finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget); + PlayerTextBuilder builder(source, finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, whisperTarget); SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly); } else { - CreatureTextBuilder builder(finalSource, finalType, iter->group, iter->id, finalLang, whisperTarget); + CreatureTextBuilder builder(finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, whisperTarget); SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly); } + if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f)) SetRepeatId(source, textGroup, iter->id); @@ -452,7 +455,7 @@ bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup) return true; } -std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const +std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const { CreatureTextMap::const_iterator mapitr = mTextMap.find(entry); if (mapitr == mTextMap.end()) @@ -477,15 +480,15 @@ std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGrou BroadcastText const* bct = sObjectMgr->GetBroadcastText(groupItr->BroadcastTextId); if (bct) - ObjectMgr::GetLocaleString(bct->MaleText, locale, baseText); + baseText = bct->GetText(locale, gender); else baseText = groupItr->text; if (locale != DEFAULT_LOCALE && !bct) { - LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id)); - if (locItr != mLocaleTextMap.end()) - ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText); + LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id)); + if (locItr != mLocaleTextMap.end()) + ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText); } return baseText; diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 99c31b0829d..28722ae70f4 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -70,15 +70,15 @@ struct CreatureTextId }; typedef std::vector<CreatureTextEntry> CreatureTextGroup; //texts in a group -typedef UNORDERED_MAP<uint8, CreatureTextGroup> CreatureTextHolder; //groups for a creature by groupid -typedef UNORDERED_MAP<uint32, CreatureTextHolder> CreatureTextMap; //all creatures by entry +typedef std::unordered_map<uint8, CreatureTextGroup> CreatureTextHolder; //groups for a creature by groupid +typedef std::unordered_map<uint32, CreatureTextHolder> CreatureTextMap; //all creatures by entry typedef std::map<CreatureTextId, CreatureTextLocale> LocaleCreatureTextMap; //used for handling non-repeatable random texts typedef std::vector<uint8> CreatureTextRepeatIds; -typedef UNORDERED_MAP<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup; -typedef UNORDERED_MAP<uint64, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based +typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup; +typedef std::unordered_map<uint64, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based class CreatureTextMgr { @@ -97,7 +97,7 @@ class CreatureTextMgr //if sent, returns the 'duration' of the text else 0 if error uint32 SendChat(Creature* source, uint8 textGroup, WorldObject const* whisperTarget = NULL, ChatMsg msgType = CHAT_MSG_ADDON, Language language = LANG_ADDON, CreatureTextRange range = TEXT_RANGE_NORMAL, uint32 sound = 0, Team team = TEAM_OTHER, bool gmOnly = false, Player* srcPlr = NULL); bool TextExist(uint32 sourceEntry, uint8 textGroup); - std::string GetLocalizedChatString(uint32 entry, uint8 textGroup, uint32 id, LocaleConstant locale) const; + std::string GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const; template<class Builder> void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = NULL, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const; diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index 9faecdf7c99..7a48d935a21 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -35,8 +35,8 @@ namespace WeatherMgr namespace { - typedef UNORDERED_MAP<uint32, Trinity::AutoPtr<Weather, ACE_Null_Mutex> > WeatherMap; - typedef UNORDERED_MAP<uint32, WeatherData> WeatherZoneMap; + typedef std::unordered_map<uint32, Trinity::AutoPtr<Weather, ACE_Null_Mutex> > WeatherMap; + typedef std::unordered_map<uint32, WeatherData> WeatherZoneMap; WeatherMap m_weathers; WeatherZoneMap mWeatherZoneMap; diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index d219af05338..7495939887a 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -521,7 +521,7 @@ private: CliCommandHolder& operator=(CliCommandHolder const& right) = delete; }; -typedef UNORDERED_MAP<uint32, WorldSession*> SessionMap; +typedef std::unordered_map<uint32, WorldSession*> SessionMap; struct CharacterNameData { @@ -796,7 +796,7 @@ class World uint32 m_currentTime; SessionMap m_sessions; - typedef UNORDERED_MAP<uint32, time_t> DisconnectMap; + typedef std::unordered_map<uint32, time_t> DisconnectMap; DisconnectMap m_disconnects; uint32 m_maxActiveSessionCount; uint32 m_maxQueuedSessionCount; diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp index 236455137dc..4eaf98d0a0e 100644 --- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp +++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp @@ -29,18 +29,19 @@ EndScriptData */ enum TwilightCorrupter { - ITEM_FRAGMENT = 21149, NPC_TWILIGHT_CORRUPTER = 15625, - YELL_TWILIGHTCORRUPTOR_RESPAWN = 0, - YELL_TWILIGHTCORRUPTOR_AGGRO = 1, - YELL_TWILIGHTCORRUPTOR_KILL = 2, + YELL_TWILIGHT_CORRUPTOR_RESPAWN = 0, + YELL_TWILIGHT_CORRUPTOR_AGGRO = 1, + YELL_TWILIGHT_CORRUPTOR_KILL = 2, + SPELL_SOUL_CORRUPTION = 25805, SPELL_CREATURE_OF_NIGHTMARE = 25806, SPELL_LEVEL_UP = 24312, EVENT_SOUL_CORRUPTION = 1, EVENT_CREATURE_OF_NIGHTMARE = 2, - FACTION_HOSTILE = 14 + + QUEST_NIGHTMARES_CORRUPTION = 8735 }; /*###### @@ -58,12 +59,13 @@ public: void Reset() override { - KillCount = 0; + _events.Reset(); + KillCount = 0; } void EnterCombat(Unit* /*who*/) override { - Talk(YELL_TWILIGHTCORRUPTOR_AGGRO); + Talk(YELL_TWILIGHT_CORRUPTOR_AGGRO); _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, 15000); _events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 30000); } @@ -73,7 +75,7 @@ public: if (victim->GetTypeId() == TYPEID_PLAYER) { ++KillCount; - Talk(YELL_TWILIGHTCORRUPTOR_KILL, victim); + Talk(YELL_TWILIGHT_CORRUPTOR_KILL, victim); if (KillCount == 3) { @@ -90,22 +92,27 @@ public: _events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_SOUL_CORRUPTION: - DoCastVictim(SPELL_SOUL_CORRUPTION); - _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, rand()%4000+15000); + DoCastAOE(SPELL_SOUL_CORRUPTION); + _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, urand(15000, 19000)); break; case EVENT_CREATURE_OF_NIGHTMARE: - DoCastVictim(SPELL_CREATURE_OF_NIGHTMARE); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + DoCast(target, SPELL_CREATURE_OF_NIGHTMARE); _events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 45000); break; default: break; } } + DoMeleeAttackIfReady(); } @@ -124,27 +131,22 @@ public: # at_twilight_grove ######*/ +Position const TwillightCorrupter = { -10328.16f, -489.57f, 49.95f, 0.0f }; + class at_twilight_grove : public AreaTriggerScript { -public: - at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { } + public: + at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override - { - if (player->HasQuestForItem(ITEM_FRAGMENT)) + bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override { - if (Unit* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, -10328.16f, -489.57f, 49.95f, 0, TEMPSUMMON_MANUAL_DESPAWN, 60000)) - corrupter->setFaction(FACTION_HOSTILE); + if (player->GetQuestStatus(QUEST_NIGHTMARES_CORRUPTION) == QUEST_STATUS_INCOMPLETE) + if (!player->FindNearestCreature(NPC_TWILIGHT_CORRUPTER, 500.0f, true)) + if (Creature* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, TwillightCorrupter, TEMPSUMMON_MANUAL_DESPAWN, 60000)) + corrupter->AI()->Talk(YELL_TWILIGHT_CORRUPTOR_RESPAWN, player); - if (Creature* CorrupterSpeaker = player->SummonCreature(1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()-1, 0, TEMPSUMMON_TIMED_DESPAWN, 15000)) - { - CorrupterSpeaker->SetName("Twilight Corrupter"); - CorrupterSpeaker->SetVisible(true); - CorrupterSpeaker->AI()->Talk(YELL_TWILIGHTCORRUPTOR_RESPAWN, player); - } - } - return false; - }; + return false; + }; }; void AddSC_duskwood() diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index ceedf0024ad..35086afa42e 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -483,7 +483,7 @@ public: uint64 StomachEnterTarget; //Stomach map, bool = true then in stomach - UNORDERED_MAP<uint64, bool> Stomach_Map; + std::unordered_map<uint64, bool> Stomach_Map; void Reset() override { @@ -536,7 +536,7 @@ public: if (Stomach_Map.empty()) return NULL; - UNORDERED_MAP<uint64, bool>::const_iterator i = Stomach_Map.begin(); + std::unordered_map<uint64, bool>::const_iterator i = Stomach_Map.begin(); std::list<Unit*> temp; std::list<Unit*>::const_iterator j; @@ -680,7 +680,7 @@ public: DoCast(me, SPELL_PURPLE_COLORATION, true); - UNORDERED_MAP<uint64, bool>::iterator i = Stomach_Map.begin(); + std::unordered_map<uint64, bool>::iterator i = Stomach_Map.begin(); //Kick all players out of stomach while (i != Stomach_Map.end()) @@ -712,7 +712,7 @@ public: if (StomachAcidTimer <= diff) { //Apply aura to all players in stomach - UNORDERED_MAP<uint64, bool>::iterator i = Stomach_Map.begin(); + std::unordered_map<uint64, bool>::iterator i = Stomach_Map.begin(); while (i != Stomach_Map.end()) { diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index 9cf61058bd9..a5577b6a0ea 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -25,7 +25,7 @@ enum Texts SAY_SLAY = 1, SAY_DEATH = 2, SAY_IMPENDING_DESPAIR = 3, - SAY_DEFILING_HORROR = 4, + SAY_DEFILING_HORROR = 4 }; enum Spells @@ -33,8 +33,9 @@ enum Spells SPELL_QUIVERING_STRIKE = 72422, SPELL_IMPENDING_DESPAIR = 72426, SPELL_DEFILING_HORROR = 72435, - SPELL_HOPELESSNESS = 72395, - H_SPELL_HOPELESSNESS = 72390, /// @todo not in dbc. Add in DB. + SPELL_HOPELESSNESS_1 = 72395, + SPELL_HOPELESSNESS_2 = 72396, + SPELL_HOPELESSNESS_3 = 72397 }; enum Events @@ -42,99 +43,106 @@ enum Events EVENT_NONE, EVENT_QUIVERING_STRIKE, EVENT_IMPENDING_DESPAIR, - EVENT_DEFILING_HORROR, + EVENT_DEFILING_HORROR }; +uint32 const HopelessnessHelper[3] = { SPELL_HOPELESSNESS_1, SPELL_HOPELESSNESS_2, SPELL_HOPELESSNESS_3 }; + class boss_falric : public CreatureScript { -public: - boss_falric() : CreatureScript("boss_falric") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_falricAI>(creature); - } - - struct boss_falricAI : public boss_horAI - { - boss_falricAI(Creature* creature) : boss_horAI(creature) { } - - uint8 uiHopelessnessCount; - - void Reset() override - { - boss_horAI::Reset(); - - uiHopelessnessCount = 0; + public: + boss_falric() : CreatureScript("boss_falric") { } - instance->SetBossState(DATA_FALRIC_EVENT, NOT_STARTED); - } - - void EnterCombat(Unit* /*who*/) override + struct boss_falricAI : public boss_horAI { - Talk(SAY_AGGRO); - instance->SetBossState(DATA_FALRIC_EVENT, IN_PROGRESS); - - events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000); - events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000); - events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer. - } + boss_falricAI(Creature* creature) : boss_horAI(creature, DATA_FALRIC) { } - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - - instance->SetBossState(DATA_FALRIC_EVENT, DONE); - } + void Reset() override + { + boss_horAI::Reset(); + _hopelessnessCount = 0; + } - void KilledUnit(Unit* /*victim*/) override - { - Talk(SAY_SLAY); - } + void EnterCombat(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + DoZoneInCombat(); + instance->SetBossState(DATA_FALRIC, IN_PROGRESS); - void UpdateAI(uint32 diff) override - { - // Return since we have no target - if (!UpdateVictim()) - return; + events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 23000); + events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 9000); + events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000)); + } - events.Update(diff); + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if ((_hopelessnessCount < 1 && me->HealthBelowPctDamaged(66, damage)) + || (_hopelessnessCount < 2 && me->HealthBelowPctDamaged(33, damage)) + || (_hopelessnessCount < 3 && me->HealthBelowPctDamaged(10, damage))) + { + if (_hopelessnessCount) + me->RemoveOwnedAura(sSpellMgr->GetSpellIdForDifficulty(HopelessnessHelper[_hopelessnessCount - 1], me)); + DoCast(me, HopelessnessHelper[_hopelessnessCount]); + ++_hopelessnessCount; + } + } - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + events.Reset(); + instance->SetBossState(DATA_FALRIC, DONE); + } - switch (events.ExecuteEvent()) + void KilledUnit(Unit* who) override { - case EVENT_QUIVERING_STRIKE: - DoCast(SPELL_QUIVERING_STRIKE); - events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000); - break; - case EVENT_IMPENDING_DESPAIR: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - { - Talk(SAY_IMPENDING_DESPAIR); - DoCast(target, SPELL_IMPENDING_DESPAIR); - } - events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000); - break; - case EVENT_DEFILING_HORROR: - DoCast(SPELL_DEFILING_HORROR); - events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(25000, 45000)); /// @todo adjust timer. - break; + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } - if ((uiHopelessnessCount < 1 && HealthBelowPct(66)) - || (uiHopelessnessCount < 2 && HealthBelowPct(33)) - || (uiHopelessnessCount < 3 && HealthBelowPct(10))) + void UpdateAI(uint32 diff) override { - uiHopelessnessCount++; - DoCast(DUNGEON_MODE(SPELL_HOPELESSNESS, H_SPELL_HOPELESSNESS)); + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (events.ExecuteEvent()) + { + case EVENT_QUIVERING_STRIKE: + DoCastVictim(SPELL_QUIVERING_STRIKE); + events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 10000); + break; + case EVENT_IMPENDING_DESPAIR: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) + { + Talk(SAY_IMPENDING_DESPAIR); + DoCast(target, SPELL_IMPENDING_DESPAIR); + } + events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 13000); + break; + case EVENT_DEFILING_HORROR: + DoCastAOE(SPELL_DEFILING_HORROR); + events.ScheduleEvent(EVENT_DEFILING_HORROR, urand(21000, 39000)); + break; + default: + break; + } + + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); - } - }; + private: + uint8 _hopelessnessCount; + }; + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<boss_falricAI>(creature); + } }; void AddSC_boss_falric() diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index cf267ff1079..902a917c594 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -17,6 +17,8 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" #include "halls_of_reflection.h" enum Texts @@ -33,6 +35,7 @@ enum Spells SPELL_WELL_OF_CORRUPTION = 72362, SPELL_CORRUPTED_FLESH = 72363, SPELL_SHARED_SUFFERING = 72368, + SPELL_SHARED_SUFFERING_DISPEL = 72373 }; enum Events @@ -41,93 +44,130 @@ enum Events EVENT_OBLITERATE, EVENT_WELL_OF_CORRUPTION, EVENT_CORRUPTED_FLESH, - EVENT_SHARED_SUFFERING, + EVENT_SHARED_SUFFERING }; class boss_marwyn : public CreatureScript { -public: - boss_marwyn() : CreatureScript("boss_marwyn") { } + public: + boss_marwyn() : CreatureScript("boss_marwyn") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<boss_marwynAI>(creature); - } - - struct boss_marwynAI : public boss_horAI - { - boss_marwynAI(Creature* creature) : boss_horAI(creature) { } - - void Reset() override + struct boss_marwynAI : public boss_horAI { - boss_horAI::Reset(); + boss_marwynAI(Creature* creature) : boss_horAI(creature, DATA_MARWYN) { } - instance->SetBossState(DATA_MARWYN_EVENT, NOT_STARTED); - } + void Reset() override + { + boss_horAI::Reset(); + } - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - instance->SetBossState(DATA_MARWYN_EVENT, IN_PROGRESS); + void EnterCombat(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + DoZoneInCombat(); + instance->SetBossState(DATA_MARWYN, IN_PROGRESS); + + events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000)); + events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); + events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); + events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000)); + } - events.ScheduleEvent(EVENT_OBLITERATE, 30000); /// @todo Check timer - events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); - events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); - events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000); /// @todo Check timer - } + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + events.Reset(); + instance->SetBossState(DATA_MARWYN, DONE); + } - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } - instance->SetBossState(DATA_MARWYN_EVENT, DONE); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (events.ExecuteEvent()) + { + case EVENT_OBLITERATE: + DoCastVictim(SPELL_OBLITERATE); + events.ScheduleEvent(EVENT_OBLITERATE, urand(8000, 13000)); + break; + case EVENT_WELL_OF_CORRUPTION: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_WELL_OF_CORRUPTION); + events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); + break; + case EVENT_CORRUPTED_FLESH: + Talk(SAY_CORRUPTED_FLESH); + DoCastAOE(SPELL_CORRUPTED_FLESH); + events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); + break; + case EVENT_SHARED_SUFFERING: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + DoCast(target, SPELL_SHARED_SUFFERING); + events.ScheduleEvent(EVENT_SHARED_SUFFERING, urand(14000, 15000)); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; - void KilledUnit(Unit* /*victim*/) override + CreatureAI* GetAI(Creature* creature) const override { - Talk(SAY_SLAY); + return GetHallsOfReflectionAI<boss_marwynAI>(creature); } +}; - void UpdateAI(uint32 diff) override - { - // Return since we have no target - if (!UpdateVictim()) - return; +// 72368, 72369 - Shared Suffering +class spell_marwyn_shared_suffering : public SpellScriptLoader +{ + public: + spell_marwyn_shared_suffering() : SpellScriptLoader("spell_marwyn_shared_suffering") { } - events.Update(diff); + class spell_marwyn_shared_suffering_AuraScript : public AuraScript + { + PrepareAuraScript(spell_marwyn_shared_suffering_AuraScript); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL) + return; + + if (Unit* caster = GetCaster()) + { + int32 remainingDamage = aurEff->GetAmount() * (aurEff->GetTotalTicks() - aurEff->GetTickNumber()); + if (remainingDamage > 0) + caster->CastCustomSpell(SPELL_SHARED_SUFFERING_DISPEL, SPELLVALUE_BASE_POINT1, remainingDamage, GetTarget(), TRIGGERED_FULL_MASK); + } + } - switch (events.ExecuteEvent()) + void Register() override { - case EVENT_OBLITERATE: - DoCast(SPELL_OBLITERATE); - events.ScheduleEvent(EVENT_OBLITERATE, 30000); - break; - case EVENT_WELL_OF_CORRUPTION: - DoCast(SPELL_WELL_OF_CORRUPTION); - events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); - break; - case EVENT_CORRUPTED_FLESH: - Talk(SAY_CORRUPTED_FLESH); - DoCast(SPELL_CORRUPTED_FLESH); - events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); - break; - case EVENT_SHARED_SUFFERING: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_SHARED_SUFFERING); - events.ScheduleEvent(EVENT_SHARED_SUFFERING, 20000); - break; + AfterEffectRemove += AuraEffectRemoveFn(spell_marwyn_shared_suffering_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } + }; - DoMeleeAttackIfReady(); + AuraScript* GetAuraScript() const override + { + return new spell_marwyn_shared_suffering_AuraScript(); } - }; - }; void AddSC_boss_marwyn() { new boss_marwyn(); + new spell_marwyn_shared_suffering(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index ca2a181a48a..0c5514a1c0a 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -18,6 +18,8 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "ScriptedGossip.h" +#include "SpellScript.h" +#include "Transport.h" #include "Player.h" #include "halls_of_reflection.h" @@ -36,17 +38,6 @@ enum Text SAY_JAINA_INTRO_11 = 10, SAY_JAINA_INTRO_END = 11, - SAY_JAINA_ESCAPE_1 = 0, - SAY_JAINA_ESCAPE_2 = 1, - SAY_JAINA_ESCAPE_3 = 2, - SAY_JAINA_ESCAPE_4 = 3, - SAY_JAINA_ESCAPE_5 = 4, - SAY_JAINA_ESCAPE_6 = 5, - SAY_JAINA_ESCAPE_7 = 6, - SAY_JAINA_ESCAPE_8 = 7, - SAY_JAINA_ESCAPE_9 = 8, - SAY_JAINA_ESCAPE_10 = 9, - SAY_SYLVANAS_INTRO_1 = 0, SAY_SYLVANAS_INTRO_2 = 1, SAY_SYLVANAS_INTRO_3 = 2, @@ -57,16 +48,6 @@ enum Text SAY_SYLVANAS_INTRO_8 = 7, SAY_SYLVANAS_INTRO_END = 8, - SAY_SYLVANAS_ESCAPE_1 = 0, - SAY_SYLVANAS_ESCAPE_2 = 1, - SAY_SYLVANAS_ESCAPE_3 = 2, - SAY_SYLVANAS_ESCAPE_4 = 3, - SAY_SYLVANAS_ESCAPE_5 = 4, - SAY_SYLVANAS_ESCAPE_6 = 5, - SAY_SYLVANAS_ESCAPE_7 = 6, - SAY_SYLVANAS_ESCAPE_8 = 7, - SAY_SYLVANAS_ESCAPE_9 = 8, - SAY_UTHER_INTRO_A2_1 = 0, SAY_UTHER_INTRO_A2_2 = 1, SAY_UTHER_INTRO_A2_3 = 2, @@ -90,27 +71,40 @@ enum Text SAY_LK_JAINA_INTRO_END = 3, SAY_LK_SYLVANAS_INTRO_END = 4, + SAY_JAINA_SYLVANAS_ESCAPE_1 = 0, + SAY_JAINA_SYLVANAS_ESCAPE_2 = 1, + SAY_JAINA_SYLVANAS_ESCAPE_3 = 2, + SAY_JAINA_SYLVANAS_ESCAPE_4 = 3, + SAY_JAINA_SYLVANAS_ESCAPE_5 = 4, + SAY_JAINA_SYLVANAS_ESCAPE_6 = 5, + SAY_JAINA_SYLVANAS_ESCAPE_7 = 6, // unused + SAY_JAINA_SYLVANAS_ESCAPE_8 = 7, + + SAY_JAINA_ESCAPE_9 = 8, + SAY_JAINA_ESCAPE_10 = 9, + + SAY_SYLVANAS_ESCAPE_9 = 8, + SAY_LK_ESCAPE_1 = 0, SAY_LK_ESCAPE_2 = 1, - SAY_LK_ESCAPE_3 = 2, - SAY_LK_ESCAPE_4 = 3, - SAY_LK_ESCAPE_5 = 4, - SAY_LK_ESCAPE_6 = 5, - SAY_LK_ESCAPE_7 = 6, - SAY_LK_ESCAPE_8 = 7, - SAY_LK_ESCAPE_9 = 8, - SAY_LK_ESCAPE_10 = 9, - SAY_LK_ESCAPE_11 = 10, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_1 = 2, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_2 = 3, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_3 = 4, + SAY_LK_ESCAPE_ICEWALL_SUMMONED_4 = 5, + SAY_LK_ESCAPE_GHOULS = 6, + SAY_LK_ESCAPE_ABOMINATION = 7, + SAY_LK_ESCAPE_WINTER = 8, + SAY_LK_ESCAPE_HARVEST_SOUL = 9, SAY_FALRIC_INTRO_1 = 5, SAY_FALRIC_INTRO_2 = 6, - SAY_MARWYN_INTRO_1 = 4, + SAY_MARWYN_INTRO_1 = 4 }; enum Events { - EVENT_WALK_INTRO1 = 1, + EVENT_WALK_INTRO1 = 1, EVENT_WALK_INTRO2, EVENT_START_INTRO, EVENT_SKIP_INTRO, @@ -181,21 +175,17 @@ enum Events EVENT_ESCAPE_13, EVENT_ESCAPE_14, EVENT_ESCAPE_15, - //EVENT_ESCAPE_16, + EVENT_ESCAPE_16, EVENT_ESCAPE_17, - EVENT_ESCAPE_18, - EVENT_ESCAPE_19, - EVENT_ESCAPE_20, - EVENT_ESCAPE_21, - EVENT_ESCAPE_22, - EVENT_ESCAPE_23, - EVENT_ESCAPE_24, - EVENT_ESCAPE_25, - EVENT_ESCAPE_26, - EVENT_ESCAPE_27, - - EVENT_OPEN_FROSTWORN_DOOR, - EVENT_CLOSE_FROSTWORN_DOOR, + + EVENT_REMORSELESS_WINTER, + EVENT_ESCAPE_SUMMON_GHOULS, + EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, + EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, + + EVENT_OPEN_IMPENETRABLE_DOOR, + EVENT_CLOSE_IMPENETRABLE_DOOR, + EVENT_KORELN_LORALEN_DEATH }; enum Misc @@ -203,907 +193,1151 @@ enum Misc ACTION_START_INTRO, ACTION_SKIP_INTRO, - QUEST_DELIVRANCE_FROM_THE_PIT_A2 = 24710, - QUEST_DELIVRANCE_FROM_THE_PIT_H2 = 24712, - QUEST_WRATH_OF_THE_LICH_KING_A2 = 24500, - QUEST_WRATH_OF_THE_LICH_KING_H2 = 24802, + JAINA_SYLVANAS_MAX_HEALTH = 252000, + + POINT_SHADOW_THRONE_DOOR = 1, + POINT_ATTACK_ICEWALL = 2, + POINT_TRAP = 3, + + SOUND_LK_SLAY_1 = 17214, + SOUND_LK_SLAY_2 = 17215, + SOUND_LK_FURY_OF_FROSTMOURNE = 17224 }; enum Spells { - SPELL_CAST_VISUAL = 65633, // Jaina/Sylavana - SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn - SPELL_UTHER_DESPAWN = 70693, + // Misc SPELL_TAKE_FROSTMOURNE = 72729, SPELL_FROSTMOURNE_DESPAWN = 72726, SPELL_FROSTMOURNE_VISUAL = 73220, SPELL_FROSTMOURNE_SOUNDS = 70667, - SPELL_JAINA_ICEBARRIER = 69787, // Jaina Ice Barrier - SPELL_JAINA_ICEPRISON = 69708, // Jaina Ice Prison - SPELL_SYLVANAS_CLOAKOFDARKNESS = 70188, // Sylvanas Cloak of Darkness - SPELL_SYLVANAS_DARKBINDING = 70194, // Sylvanas Dark Binding - SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter - SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper - SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of FrostMourne + SPELL_BOSS_SPAWN_AURA = 72712, // Falric and Marwyn + SPELL_UTHER_DESPAWN = 70693, + + // Jaina, Sylvanas + SPELL_CAST_VISUAL = 65633, // wrong + SPELL_SUMMON_SOULS = 72711, + SPELL_TAUNT_ARTHAS = 69857, + SPELL_JAINA_ICE_BARRIER = 69787, // Jaina Ice Barrier + SPELL_JAINA_ICE_PRISON = 69708, // Jaina Ice Prison SPELL_JAINA_DESTROY_ICE_WALL = 69784, // Jaina + SPELL_SYLVANAS_CLOAK_OF_DARKNESS = 70188, // Sylvanas Cloak of Darkness + SPELL_SYLVANAS_DARK_BINDING = 70194, // Sylvanas Dark Binding SPELL_SYLVANAS_DESTROY_ICE_WALL = 70224, // Sylvanas - SPELL_SYLVANAS_JUMP = 68339, // Sylvanas Jump + SPELL_SYLVANAS_BLINDING_RETREAT = 70199, // Sylvanas Blinding Retreat + + // Lich King + SPELL_REMORSELESS_WINTER = 69780, // Lich King Remorseless Winter + SPELL_SOUL_REAPER = 69409, // Lich King Soul Reaper + SPELL_FURY_OF_FROSTMOURNE = 70063, // Lich King Fury of Frostmourne SPELL_RAISE_DEAD = 69818, - SPELL_HARVEST_SOUL = 70070, - SPELL_SUMMON_RISE_WITCH_DOCTOR = 69836, + SPELL_SUMMON_RISEN_WITCH_DOCTOR = 69836, SPELL_SUMMON_LUMBERING_ABOMINATION = 69835, SPELL_SUMMON_ICE_WALL = 69768, // Visual effect and icewall summoning + SPELL_PAIN_AND_SUFFERING = 74115, // Lich King Pain and Suffering + SPELL_STUN_BREAK_JAINA = 69764, // Lich King visual spell, another Stun Break is 69763, should remove the stun effect + SPELL_STUN_BREAK_SYLVANAS = 70200, + SPELL_HARVEST_SOUL = 69866, // Lich King Harvest Soul + + // Koreln, Loralen + SPELL_FEIGN_DEATH = 29266, // Raging Ghoul - SPELL_EMERGE_VISUAL = 50142, SPELL_GHOUL_JUMP = 70150, + SPELL_RAGING_GHOUL_SPAWN = 69636, - // Witch Doctor - SPELL_COURSE_OF_DOOM = 70144, + // Risen Witch Doctor + SPELL_CURSE_OF_DOOM = 70144, SPELL_SHADOW_BOLT_VOLLEY = 70145, SPELL_SHADOW_BOLT = 70080, + SPELL_RISEN_WITCH_DOCTOR_SPAWN = 69639, // Lumbering Abomination - SPELL_ABON_STRIKE = 40505, - SPELL_VOMIT_SPRAY = 70176, + SPELL_CLEAVE = 40505, + SPELL_VOMIT_SPRAY = 70176 }; -const Position HallsofReflectionLocs[] = +enum HorGossipMenu { - {5283.234863f, 1990.946777f, 707.695679f, 0.929097f}, // 2 Loralen Follows - {5408.031250f, 2102.918213f, 707.695251f, 0.792756f}, // 9 Sylvanas Follows - {5401.866699f, 2110.837402f, 707.695251f, 0.800610f}, // 10 Loralen follows + GOSSIP_MENU_JAINA_FINAL = 10930, + GOSSIP_MENU_SYLVANAS_FINAL = 10931 }; -const Position NpcJainaOrSylvanasEscapeRoute[] = +Position const NpcJainaOrSylvanasEscapeRoute[] = { - {5601.217285f, 2207.652832f, 731.541931f, 5.223304f}, // leave the throne room - {5607.224375f, 2173.913330f, 731.126038f, 2.608723f}, // adjust route - {5583.427246f, 2138.784180f, 731.150391f, 4.260901f}, // stop for talking - {5560.281738f, 2104.025635f, 731.410889f, 4.058383f}, // attack the first icewall - {5510.990723f, 2000.772217f, 734.716064f, 3.973213f}, // attack the second icewall - {5452.641113f, 1905.762329f, 746.530579f, 4.118834f}, // attack the third icewall - {5338.126953f, 1768.429810f, 767.237244f, 3.855189f}, // attack the fourth icewall - {5257.712402f, 1669.379395f, 784.300110f, 0.908373f}, // face the Lich king - {5261.191895f, 1681.901611f, 784.285278f, 4.410465f}, // final position + { 5601.217285f, 2207.652832f, 731.541931f, 5.223304f }, // leave the throne room + { 5607.224375f, 2173.913330f, 731.126038f, 2.608723f }, // adjust route + { 5583.427246f, 2138.784180f, 731.150391f, 4.260901f }, // stop for talking + { 5560.281738f, 2104.025635f, 731.410889f, 4.058383f }, // attack the first icewall + { 5510.990723f, 2000.772217f, 734.716064f, 3.973213f }, // attack the second icewall + { 5452.641113f, 1905.762329f, 746.530579f, 4.118834f }, // attack the third icewall + { 5338.126953f, 1768.429810f, 767.237244f, 3.855189f }, // attack the fourth icewall + { 5259.06f, 1669.27f, 784.3008f, 0.0f }, // trap (sniffed) + { 5265.53f, 1681.6f, 784.2947f, 4.13643f } // final position (sniffed) }; -const Position IceWalls[] = +Position const LichKingMoveAwayPos = { 5400.069824f, 2102.7131689f, 707.69525f, 0.843803f }; // Lich King walks away +Position const LichKingFirstSummon = { 5600.076172f, 2192.270996f, 731.750488f, 4.330935f }; // Lich King First summons +Position const JainaSylvanasShadowThroneDoor = { 5577.243f, 2235.852f, 733.0128f, 2.209562f }; // Jaina/Sylvanas move to door +Position const LichKingFinalPos = { 5283.742188f, 1706.335693f, 783.293518f, 4.138510f }; // Lich King Final Pos + +// sniffed +Position const KorelnOrLoralenPos[] = { - {5547.833f, 2083.701f,731.4332f,4.24115f}, // first icewall - {5503.213f, 1969.547f,737.0245f,4.293779f},// second icewall - {5439.976f, 1879.005f,752.7048f,4.207591f},// third icewall - {5318.289f, 1749.184f,771.9423f,4.054276f},// fourth icewall + { 5253.061f, 1953.616f, 707.6948f, 0.8377581f }, + { 5283.226f, 1992.300f, 707.7445f, 0.8377581f }, + { 5360.711f, 2064.797f, 707.6948f, 0.0f } }; -const Position IntroPos = {5265.89f, 1952.98f, 707.6978f, 0.0f}; // Jaina/Sylvanas Intro Start Position -const Position MoveThronePos = {5306.952148f, 1998.499023f, 709.341431f, 1.277278f}; // Jaina/Sylvanas walks to throne -const Position UtherSpawnPos = {5308.310059f, 2003.857178f, 709.341431f, 4.650315f}; -const Position LichKingSpawnPos = {5362.917480f, 2062.307129f, 707.695374f, 3.945812f}; -const Position LichKingMoveThronePos = {5312.080566f, 2009.172119f, 709.341431f, 3.973301f}; // Lich King walks to throne -const Position LichKingMoveAwayPos = {5400.069824f, 2102.7131689f, 707.69525f, 0.843803f}; // Lich King walks away -const Position LichKingSpawnPos2 = {5552.733398f, 2262.718506f, 733.011047f, 4.009696f}; // Lich King Spawn Position 2 -const Position LichKingFirstSummon = {5600.076172f, 2192.270996f, 731.750488f, 4.330935f}; // Lich King First summons -const Position JainaShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Jaina Spawn Position 2 -const Position SylvanasShadowThroneDoor = {5577.243f, 2235.852f, 733.0128f, 2.209562f}; // Sylvanas Spawn Position 2 -const Position FalricStartPos = {5283.878906f, 2030.459595f, 709.319641f, 5.506670f}; // Falric start position -const Position MarwynStartPos = {5334.979980f, 1982.399536f, 709.320129f, 2.347014f}; // Marwyn start position -const Position LichKingFinalPos = {5283.742188f, 1706.335693f, 783.293518f, 4.138510f}; // Lich King Final Pos -const Position ChestPos = {5246.187500f, 1649.079468f, 784.301758f, 0.901268f}; // Chest position -const Position FinalPortalPos = {5270.634277f ,1639.101196f, 784.303040f, 1.682743f}; // Final portal position - -class npc_jaina_or_sylvanas_hor : public CreatureScript +Position const SylvanasIntroPosition[] = { - public: - npc_jaina_or_sylvanas_hor() : CreatureScript("npc_jaina_or_sylvanas_hor") { } - - // AI of Part1 - struct npc_jaina_or_sylvanas_horAI : public ScriptedAI - { - npc_jaina_or_sylvanas_horAI(Creature* creature) : ScriptedAI(creature) - { - _instance = me->GetInstanceScript(); - } - - InstanceScript* _instance; - uint64 _utherGUID; - uint64 _lichkingGUID; + { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn + { 5263.2f, 1950.96f, 707.6948f, 0.8028514f }, // 1 - Move to Door + { 5306.82f, 1998.17f, 709.341f, 1.239184f }, // 2 - Move to Frostmourne +}; - EventMap _events; +Position const JainaIntroPosition[] = +{ + { 0.0f, 0.0f, 0.0f, 0.0f }, // 0 - Spawn + { 5265.89f, 1952.98f, 707.6978f, 0.0f }, // 1 - Move to Door + { 5306.95f, 1998.49f, 709.3414f, 1.277278f } // 2 - Move to Frostmourne +}; - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case 0: - player->CLOSE_GOSSIP_MENU(); - _events.ScheduleEvent(EVENT_START_INTRO, 1000); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - break; - case 1: - player->CLOSE_GOSSIP_MENU(); - _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - break; - } - } +Position const UtherSpawnPos = { 5307.814f, 2003.168f, 709.4244f, 4.537856f }; - void Reset() override - { - _events.Reset(); +Position const LichKingIntroPosition[] = +{ + { 5362.463f, 2062.693f, 707.7781f, 3.944444f }, // 0 - Spawn + { 5332.83f, 2031.24f, 707.6948f, 0.0f }, // 1 - Door + { 5312.93f, 2010.24f, 709.34f, 0.0f }, // 2 - Move to Frostmourne + { 5319.028f, 2016.662f, 707.6948f, 0.0f }, // 3 - Move back + { 5332.285f, 2030.832f, 707.6948f, 0.0f }, // 4 - Move back 2 + { 5355.488f, 2055.149f, 707.6907f, 0.0f } // 5 - Move back 3 +}; - _utherGUID = 0; - _lichkingGUID = 0; +Position const FalricPosition[] = +{ + { 5276.583f, 2037.45f, 709.4025f, 5.532694f }, // 0 - Spawn + { 5283.95f, 2030.53f, 709.3191f, 0.0f } // 1 - Intro +}; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - me->SetStandState(UNIT_STAND_STATE_STAND); - _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000); - } +Position const MarwynPosition[] = +{ + { 5342.232f, 1975.696f, 709.4025f, 2.391101f }, // 0 - Spawn + { 5335.01f, 1982.37f, 709.3191f, 0.0f } // 1 - Intro +}; - void UpdateAI(uint32 diff) override - { - _events.Update(diff); +Position const SylvanasShadowThroneDoorPosition = { 5576.79f, 2235.73f, 733.0029f, 2.687807f }; - switch (_events.ExecuteEvent()) - { - case EVENT_WALK_INTRO1: - me->GetMotionMaster()->MovePoint(0, IntroPos); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - { - Talk(SAY_JAINA_INTRO_1); - _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000); - } - else - { - Talk(SAY_SYLVANAS_INTRO_1); - _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000); - } - break; - case EVENT_WALK_INTRO2: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_INTRO_2); - else - Talk(SAY_SYLVANAS_INTRO_2); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - break; - case EVENT_START_INTRO: - me->GetMotionMaster()->MovePoint(0, MoveThronePos); - // Begining of intro is differents between fActions as the speech sequence and timers are differents. - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - _events.ScheduleEvent(EVENT_INTRO_A2_1, 0); - else - _events.ScheduleEvent(EVENT_INTRO_H2_1, 0); - break; - // A2 Intro Events - case EVENT_INTRO_A2_1: - Talk(SAY_JAINA_INTRO_3); - _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000); - break; - case EVENT_INTRO_A2_2: - Talk(SAY_JAINA_INTRO_4); - _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000); - break; - case EVENT_INTRO_A2_3: - me->CastSpell(me, SPELL_CAST_VISUAL, false); - me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); - _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); - _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000); - break; - case EVENT_INTRO_A2_4: - if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - uther->GetMotionMaster()->MoveIdle(); - _utherGUID = uther->GetGUID(); - } - _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000); - break; - case EVENT_INTRO_A2_5: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_1); - _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000); - break; - case EVENT_INTRO_A2_6: - Talk(SAY_JAINA_INTRO_5); - _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000); - break; - case EVENT_INTRO_A2_7: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_2); - _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000); - break; - case EVENT_INTRO_A2_8: - Talk(SAY_JAINA_INTRO_6); - _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200); - break; - case EVENT_INTRO_A2_9: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_3); - _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000); - break; - case EVENT_INTRO_A2_10: - Talk(SAY_JAINA_INTRO_7); - _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000); - break; - case EVENT_INTRO_A2_11: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_4); - _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000); - break; - case EVENT_INTRO_A2_12: - Talk(SAY_JAINA_INTRO_8); - _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000); - break; - case EVENT_INTRO_A2_13: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_5); - _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000); - break; - case EVENT_INTRO_A2_14: - Talk(SAY_JAINA_INTRO_9); - _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000); - break; - case EVENT_INTRO_A2_15: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_6); - _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000); - break; - case EVENT_INTRO_A2_16: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_7); - _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000); - break; - case EVENT_INTRO_A2_17: - Talk(SAY_JAINA_INTRO_10); - _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000); - break; - case EVENT_INTRO_A2_18: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - uther->AI()->Talk(SAY_UTHER_INTRO_A2_8); - } - _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000); - break; - case EVENT_INTRO_A2_19: - Talk(SAY_JAINA_INTRO_11); - _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000); - break; - // H2 Intro Events - case EVENT_INTRO_H2_1: - Talk(SAY_SYLVANAS_INTRO_1); - _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000); - break; - case EVENT_INTRO_H2_2: - Talk(SAY_SYLVANAS_INTRO_2); - _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000); - break; - case EVENT_INTRO_H2_3: - Talk(SAY_SYLVANAS_INTRO_3); - me->CastSpell(me, SPELL_CAST_VISUAL, false); - me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); - _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); - _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000); - break; - case EVENT_INTRO_H2_4: - // spawn UTHER during speach 2 - if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - uther->GetMotionMaster()->MoveIdle(); - _utherGUID = uther->GetGUID(); - } - _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000); - break; - case EVENT_INTRO_H2_5: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_1); - _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000); - break; - case EVENT_INTRO_H2_6: - Talk(SAY_SYLVANAS_INTRO_4); - _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000); - break; - case EVENT_INTRO_H2_7: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_2); - _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000); - break; - case EVENT_INTRO_H2_8: - Talk(SAY_SYLVANAS_INTRO_5); - _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000); - break; - case EVENT_INTRO_H2_9: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_3); - _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000); - break; - case EVENT_INTRO_H2_10: - Talk(SAY_SYLVANAS_INTRO_6); - _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500); - break; - case EVENT_INTRO_H2_11: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_4); - _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500); - break; - case EVENT_INTRO_H2_12: - Talk(SAY_SYLVANAS_INTRO_7); - _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000); - break; - case EVENT_INTRO_H2_13: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - uther->AI()->Talk(SAY_UTHER_INTRO_H2_5); - } - _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000); - break; - case EVENT_INTRO_H2_14: - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - uther->AI()->Talk(SAY_UTHER_INTRO_H2_6); - _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000); - break; - case EVENT_INTRO_H2_15: - Talk(SAY_SYLVANAS_INTRO_8); - _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); - break; - // Remaining Intro Events common for both faction - case EVENT_INTRO_LK_1: - // Spawn LK in front of door, and make him move to the sword. - if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - lichking->SetWalk(true); - lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); - _lichkingGUID = lichking->GetGUID(); - _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0); - _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000); - } - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - uther->AI()->Talk(SAY_UTHER_INTRO_A2_9); - else - uther->AI()->Talk(SAY_UTHER_INTRO_H2_7); - } - _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000); - break; - case EVENT_INTRO_LK_2: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->AI()->Talk(SAY_LK_INTRO_1); - _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000); - break; - case EVENT_INTRO_LK_3: - // The Lich King banishes Uther to the abyss. - if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) - { - uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true); - uther->DespawnOrUnsummon(5000); - _utherGUID = 0; - } - _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000); - break; - case EVENT_INTRO_LK_4: - // He steps forward and removes the runeblade from the heap of skulls. - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE))) - frostmourne->SetPhaseMask(2, true); - lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true); - lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true); - } - _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000); - break; - case EVENT_INTRO_LK_5: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->AI()->Talk(SAY_LK_INTRO_2); - _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000); - break; - case EVENT_INTRO_LK_6: - // summon Falric and Marwyn. then go back to the door - if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT))) - { - falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); - falric->SetVisible(true); - } - if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT))) - { - marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); - marwyn->SetVisible(true); - } - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - lichking->AI()->Talk(SAY_LK_INTRO_3); - lichking->SetWalk(true); - lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); - } - _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000); - _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 5000); - break; - case EVENT_INTRO_LK_7: - if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN_EVENT))) - { - marwyn->AI()->Talk(SAY_MARWYN_INTRO_1); - marwyn->SetWalk(true); - marwyn->GetMotionMaster()->MovePoint(0, MarwynStartPos); - } - _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000); - break; - case EVENT_INTRO_LK_8: - if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT))) - { - falric->AI()->Talk(SAY_FALRIC_INTRO_1); - falric->SetWalk(true); - falric->GetMotionMaster()->MovePoint(0, FalricStartPos); - } - _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000); - break; - case EVENT_INTRO_LK_9: - if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC_EVENT))) - falric->AI()->Talk(SAY_FALRIC_INTRO_2); - _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); - _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000); - break; - case EVENT_INTRO_LK_10: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_INTRO_END); - else - Talk(SAY_SYLVANAS_INTRO_END); - me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); - /// @todo Loralen/Koreln shall run also - _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000); - break; - case EVENT_INTRO_LK_11: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END); - else - lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END); - } - _events.ScheduleEvent(EVENT_INTRO_END, 5000); - break; - case EVENT_INTRO_END: - _instance->SetData(DATA_INTRO_EVENT, DONE); - // Loralen or Koreln disappearAndDie() - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - lichking->DespawnOrUnsummon(5000); - _lichkingGUID = 0; - } - me->DespawnOrUnsummon(10000); - _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 7000); - break; - case EVENT_SKIP_INTRO: - me->GetMotionMaster()->MovePoint(0, MoveThronePos); - /// @todo Loralen/Koreln shall run also - if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART1, LichKingSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) - { - lichking->SetWalk(true); - lichking->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos); - lichking->SetReactState(REACT_PASSIVE); - _lichkingGUID = lichking->GetGUID(); - _events.ScheduleEvent(EVENT_OPEN_FROSTWORN_DOOR, 0); - _events.ScheduleEvent(EVENT_CLOSE_FROSTWORN_DOOR, 4000); - } - _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000); - break; - case EVENT_OPEN_FROSTWORN_DOOR: - if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR))) - _instance->HandleGameObject(0, true, gate); - break; - case EVENT_CLOSE_FROSTWORN_DOOR: - if (GameObject* gate = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTWORN_DOOR))) - _instance->HandleGameObject(0, false, gate); - break; - } - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_horAI>(creature); - } +Position const IceWallTargetPosition[] = +{ + { 5547.833f, 2083.701f, 731.4332f, 1.029744f }, // 1st Icewall + { 5503.213f, 1969.547f, 737.0245f, 1.27409f }, // 2nd Icewall + { 5439.976f, 1879.005f, 752.7048f, 1.064651f }, // 3rd Icewall + { 5318.289f, 1749.184f, 771.9423f, 0.8726646f } // 4th Icewall }; -class npc_jaina_or_sylvanas_escape_hor : public CreatureScript +class npc_jaina_or_sylvanas_intro_hor : public CreatureScript { public: - npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { } - - // AI of Part2 - struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI - { - npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature), - _instance(creature->GetInstanceScript()), _lichkingGUID(0), _walltargetGUID(0), - _icewallGUID(0), _icewall(0) - { - } - - InstanceScript* _instance; - uint64 _lichkingGUID; - uint64 _walltargetGUID; // dummy - uint64 _icewallGUID; // object - uint32 _icewall; // icewall number - - EventMap _events; + npc_jaina_or_sylvanas_intro_hor() : CreatureScript("npc_jaina_or_sylvanas_intro_hor") { } - void Reset() override + struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI { - _events.Reset(); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->DespawnOrUnsummon(1); - _lichkingGUID = 0; - _walltargetGUID = 0; - _icewallGUID = 0; - _icewall = 0; - _events.ScheduleEvent(EVENT_ESCAPE, 0); - } - - void JustDied(Unit* /*Killer*/) override - { - _instance->SetData(DATA_ESCAPE_EVENT, FAIL); - } - - void DoAction(int32 actionId) override - { - switch (actionId) - { - case ACTION_START_ESCAPING: // called by InstanceScript when we need to start the escaping event - _events.ScheduleEvent(EVENT_ESCAPE_1, 1000); - break; - case ACTION_WALL_BROKEN: - _icewall++; - if (_icewall != 4) - _events.ScheduleEvent(EVENT_ESCAPE_17, 3000); - else - _events.ScheduleEvent(EVENT_ESCAPE_23, 3000); - break; + npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature) + { + _instance = me->GetInstanceScript(); + _utherGUID = 0; + _lichkingGUID = 0; } - } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override { - case 0: - player->CLOSE_GOSSIP_MENU(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); - _events.ScheduleEvent(EVENT_ESCAPE_7, 0); - break; - } - } + player->PlayerTalkClass->ClearMenus(); - void DestroyIceWall() - { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL); - else - me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL); + switch (gossipListId) + { + case 0: + player->PlayerTalkClass->SendCloseGossip(); + _events.ScheduleEvent(EVENT_START_INTRO, 1000); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + case 1: + player->PlayerTalkClass->SendCloseGossip(); + _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + default: + break; + } + } - _instance->HandleGameObject(_icewallGUID, true); + void Reset() override + { + _events.Reset(); - if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _walltargetGUID)) - wallTarget->DespawnOrUnsummon(); - } + _utherGUID = 0; + _lichkingGUID = 0; - void UpdateAI(uint32 diff) override - { - _events.Update(diff); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->SetStandState(UNIT_STAND_STATE_STAND); + _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000); + } - while (uint32 event = _events.ExecuteEvent()) + void UpdateAI(uint32 diff) override { - switch (event) + _events.Update(diff); + + switch (_events.ExecuteEvent()) { - case EVENT_ESCAPE: - if (Creature* lichking = me->SummonCreature(NPC_LICH_KING_PART2, LichKingSpawnPos2, TEMPSUMMON_MANUAL_DESPAWN)) + case EVENT_WALK_INTRO1: + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[0]); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) { - me->Attack(lichking, true); - lichking->Attack(me, true); - me->SetReactState(REACT_PASSIVE); - lichking->SetReactState(REACT_PASSIVE); - _lichkingGUID = lichking->GetGUID(); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_JAINA_ICEBARRIER); - else - DoCast(me, SPELL_SYLVANAS_CLOAKOFDARKNESS); + me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[1]); + Talk(SAY_JAINA_INTRO_1); + _events.ScheduleEvent(EVENT_WALK_INTRO2, 7000); } - me->SetHealth(252000); - break; - case EVENT_ESCAPE_1: - _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + else { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - lichking->AI()->Talk(SAY_LK_ESCAPE_1); - else - lichking->AI()->Talk(SAY_LK_ESCAPE_2); - _events.ScheduleEvent(EVENT_ESCAPE_2, 8000); + me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[1]); + Talk(SAY_SYLVANAS_INTRO_1); + _events.ScheduleEvent(EVENT_WALK_INTRO2, 9000); } break; - case EVENT_ESCAPE_2: + case EVENT_WALK_INTRO2: if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_CAST_VISUAL, true); + Talk(SAY_JAINA_INTRO_2); else - DoCast(me, SPELL_SYLVANAS_JUMP, true); - _events.ScheduleEvent(EVENT_ESCAPE_3, 1000); + Talk(SAY_SYLVANAS_INTRO_2); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); break; - case EVENT_ESCAPE_3: + case EVENT_START_INTRO: + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]); + // Begining of intro is differents between factions as the speech sequence and timers are differents. if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCastAOE(SPELL_JAINA_ICEPRISON, true); + { + me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]); + _events.ScheduleEvent(EVENT_INTRO_A2_1, 0); + } else - DoCastAOE(SPELL_SYLVANAS_DARKBINDING, true); - _events.ScheduleEvent(EVENT_ESCAPE_4, 2000); + { + me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]); + _events.ScheduleEvent(EVENT_INTRO_H2_1, 0); + } break; - case EVENT_ESCAPE_4: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_1); - else - Talk(SAY_SYLVANAS_ESCAPE_1); - _events.ScheduleEvent(EVENT_ESCAPE_5, 2000); + // A2 Intro Events + case EVENT_INTRO_A2_1: + Talk(SAY_JAINA_INTRO_3); + _events.ScheduleEvent(EVENT_INTRO_A2_2, 7000); break; - case EVENT_ESCAPE_5: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->CombatStop(); - me->GetMotionMaster()->MovePoint(0, JainaShadowThroneDoor); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - me->RemoveAurasDueToSpell(SPELL_JAINA_ICEBARRIER); - else - me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAKOFDARKNESS); - _events.ScheduleEvent(EVENT_ESCAPE_6, 5000); + case EVENT_INTRO_A2_2: + Talk(SAY_JAINA_INTRO_4); + _events.ScheduleEvent(EVENT_INTRO_A2_3, 10000); break; - case EVENT_ESCAPE_6: - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER); + case EVENT_INTRO_A2_3: + me->CastSpell(me, SPELL_CAST_VISUAL, false); + me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); + _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); + _events.ScheduleEvent(EVENT_INTRO_A2_4, 10000); break; - case EVENT_ESCAPE_7: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - { - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICEPRISON); - else - lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARKBINDING); - } - _events.ScheduleEvent(EVENT_ESCAPE_8, 1000); + case EVENT_INTRO_A2_4: + if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) + _utherGUID = uther->GetGUID(); + _events.ScheduleEvent(EVENT_INTRO_A2_5, 2000); break; - case EVENT_ESCAPE_8: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR); - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); - _events.ScheduleEvent(EVENT_ESCAPE_9, 3000); + case EVENT_INTRO_A2_5: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_1); + _events.ScheduleEvent(EVENT_INTRO_A2_6, 3000); break; - case EVENT_ESCAPE_9: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); - _events.ScheduleEvent(EVENT_ESCAPE_10, 1000); + case EVENT_INTRO_A2_6: + Talk(SAY_JAINA_INTRO_5); + _events.ScheduleEvent(EVENT_INTRO_A2_7, 7000); break; - case EVENT_ESCAPE_10: - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]); - _events.ScheduleEvent(EVENT_ESCAPE_11, 5000); + case EVENT_INTRO_A2_7: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_2); + _events.ScheduleEvent(EVENT_INTRO_A2_8, 7000); break; - case EVENT_ESCAPE_11: - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->GetMotionMaster()->MovePoint(0, LichKingFirstSummon); - _events.ScheduleEvent(EVENT_ESCAPE_12, 6000); + case EVENT_INTRO_A2_8: + Talk(SAY_JAINA_INTRO_6); + _events.ScheduleEvent(EVENT_INTRO_A2_9, 1200); break; - case EVENT_ESCAPE_12: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + case EVENT_INTRO_A2_9: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_3); + _events.ScheduleEvent(EVENT_INTRO_A2_10, 11000); + break; + case EVENT_INTRO_A2_10: + Talk(SAY_JAINA_INTRO_7); + _events.ScheduleEvent(EVENT_INTRO_A2_11, 6000); + break; + case EVENT_INTRO_A2_11: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_4); + _events.ScheduleEvent(EVENT_INTRO_A2_12, 12000); + break; + case EVENT_INTRO_A2_12: + Talk(SAY_JAINA_INTRO_8); + _events.ScheduleEvent(EVENT_INTRO_A2_13, 6000); + break; + case EVENT_INTRO_A2_13: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_5); + _events.ScheduleEvent(EVENT_INTRO_A2_14, 13000); + break; + case EVENT_INTRO_A2_14: + Talk(SAY_JAINA_INTRO_9); + _events.ScheduleEvent(EVENT_INTRO_A2_15, 12000); + break; + case EVENT_INTRO_A2_15: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_6); + _events.ScheduleEvent(EVENT_INTRO_A2_16, 25000); + break; + case EVENT_INTRO_A2_16: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_7); + _events.ScheduleEvent(EVENT_INTRO_A2_17, 6000); + break; + case EVENT_INTRO_A2_17: + Talk(SAY_JAINA_INTRO_10); + _events.ScheduleEvent(EVENT_INTRO_A2_18, 5000); + break; + case EVENT_INTRO_A2_18: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - lichking->AI()->Talk(SAY_LK_ESCAPE_3); - lichking->CastSpell(me, SPELL_RAISE_DEAD); - lichking->Attack(me, true); + uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); + uther->AI()->Talk(SAY_UTHER_INTRO_A2_8); } - _events.ScheduleEvent(EVENT_ESCAPE_13, 4000); + _events.ScheduleEvent(EVENT_INTRO_A2_19, 12000); break; - case EVENT_ESCAPE_13: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + case EVENT_INTRO_A2_19: + Talk(SAY_JAINA_INTRO_11); + _events.ScheduleEvent(EVENT_INTRO_LK_1, 3000); + break; + // H2 Intro Events + case EVENT_INTRO_H2_1: + Talk(SAY_SYLVANAS_INTRO_1); + _events.ScheduleEvent(EVENT_INTRO_H2_2, 8000); + break; + case EVENT_INTRO_H2_2: + Talk(SAY_SYLVANAS_INTRO_2); + _events.ScheduleEvent(EVENT_INTRO_H2_3, 6000); + break; + case EVENT_INTRO_H2_3: + Talk(SAY_SYLVANAS_INTRO_3); + me->CastSpell(me, SPELL_CAST_VISUAL, false); + me->CastSpell(me, SPELL_FROSTMOURNE_SOUNDS, true); + _instance->HandleGameObject(_instance->GetData64(DATA_FROSTMOURNE), true); + _events.ScheduleEvent(EVENT_INTRO_H2_4, 6000); + break; + case EVENT_INTRO_H2_4: + // spawn UTHER during speach 2 + if (Creature* uther = me->SummonCreature(NPC_UTHER, UtherSpawnPos, TEMPSUMMON_MANUAL_DESPAWN)) + _utherGUID = uther->GetGUID(); + _events.ScheduleEvent(EVENT_INTRO_H2_5, 2000); + break; + case EVENT_INTRO_H2_5: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_1); + _events.ScheduleEvent(EVENT_INTRO_H2_6, 11000); + break; + case EVENT_INTRO_H2_6: + Talk(SAY_SYLVANAS_INTRO_4); + _events.ScheduleEvent(EVENT_INTRO_H2_7, 3000); + break; + case EVENT_INTRO_H2_7: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_2); + _events.ScheduleEvent(EVENT_INTRO_H2_8, 6000); + break; + case EVENT_INTRO_H2_8: + Talk(SAY_SYLVANAS_INTRO_5); + _events.ScheduleEvent(EVENT_INTRO_H2_9, 5000); + break; + case EVENT_INTRO_H2_9: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_3); + _events.ScheduleEvent(EVENT_INTRO_H2_10, 19000); + break; + case EVENT_INTRO_H2_10: + Talk(SAY_SYLVANAS_INTRO_6); + _events.ScheduleEvent(EVENT_INTRO_H2_11, 1500); + break; + case EVENT_INTRO_H2_11: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_4); + _events.ScheduleEvent(EVENT_INTRO_H2_12, 19500); + break; + case EVENT_INTRO_H2_12: + Talk(SAY_SYLVANAS_INTRO_7); + _events.ScheduleEvent(EVENT_INTRO_H2_13, 2000); + break; + case EVENT_INTRO_H2_13: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - lichking->CastSpell(lichking, SPELL_REMORSELESS_WINTER, true); - lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); + uther->HandleEmoteCommand(EMOTE_ONESHOT_NO); + uther->AI()->Talk(SAY_UTHER_INTRO_H2_5); } - if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[0], TEMPSUMMON_MANUAL_DESPAWN, 720000)) + _events.ScheduleEvent(EVENT_INTRO_H2_14, 12000); + break; + case EVENT_INTRO_H2_14: + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) + uther->AI()->Talk(SAY_UTHER_INTRO_H2_6); + _events.ScheduleEvent(EVENT_INTRO_H2_15, 8000); + break; + case EVENT_INTRO_H2_15: + Talk(SAY_SYLVANAS_INTRO_8); + _events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); + break; + // Remaining Intro Events common for both faction + case EVENT_INTRO_LK_1: + // Spawn LK in front of door, and make him move to the sword. + if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN)) { - _walltargetGUID = walltarget->GetGUID(); - walltarget->CastSpell(walltarget, SPELL_SUMMON_ICE_WALL); - walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - me->Attack(walltarget, false); + lichking->SetWalk(true); + lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]); + _lichkingGUID = lichking->GetGUID(); + _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0); + _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000); } - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[3]); - _events.ScheduleEvent(EVENT_ESCAPE_14, 8000); - break; - case EVENT_ESCAPE_14: - if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID)) + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f)) - { - _icewallGUID = icewall->GetGUID(); - icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - _instance->HandleGameObject(0, false, icewall); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_2); - else - Talk(SAY_SYLVANAS_ESCAPE_2); - } + uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + uther->AI()->Talk(SAY_UTHER_INTRO_A2_9); + else + uther->AI()->Talk(SAY_UTHER_INTRO_H2_7); } - _events.ScheduleEvent(EVENT_ESCAPE_15, 1000); + _events.ScheduleEvent(EVENT_INTRO_LK_2, 10000); break; - case EVENT_ESCAPE_15: + case EVENT_INTRO_LK_2: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + lichking->AI()->Talk(SAY_LK_INTRO_1); + _events.ScheduleEvent(EVENT_INTRO_LK_3, 1000); + break; + case EVENT_INTRO_LK_3: + // The Lich King banishes Uther to the abyss. + if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); - lichking->SetReactState(REACT_PASSIVE); + uther->CastSpell(uther, SPELL_UTHER_DESPAWN, true); + uther->DespawnOrUnsummon(5000); + _utherGUID = 0; } - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true); - else - DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true); + _events.ScheduleEvent(EVENT_INTRO_LK_4, 9000); break; - case EVENT_ESCAPE_17:// ICEWALL BROKEN - me->GetMotionMaster()->MoveIdle(); + case EVENT_INTRO_LK_4: + // He steps forward and removes the runeblade from the heap of skulls. if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - lichking->StopMoving(); - lichking->AI()->Talk(SAY_LK_ESCAPE_3); - lichking->CastSpell(me, SPELL_RAISE_DEAD); + if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE))) + frostmourne->SetPhaseMask(2, true); + lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true); + lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true); } - - DestroyIceWall(); - - if (_icewall && _icewall < 4) - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]); - _events.ScheduleEvent(EVENT_ESCAPE_18, 2000); + _events.ScheduleEvent(EVENT_INTRO_LK_5, 8000); break; - case EVENT_ESCAPE_18: + case EVENT_INTRO_LK_5: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + lichking->AI()->Talk(SAY_LK_INTRO_2); + _events.ScheduleEvent(EVENT_INTRO_LK_6, 10000); + break; + case EVENT_INTRO_LK_6: + // summon Falric and Marwyn. then go back to the door + if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC))) { - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); + falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); + falric->SetVisible(true); } - _events.ScheduleEvent(EVENT_ESCAPE_19, 6000); - break; - case EVENT_ESCAPE_19: - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN))) { - if (_icewall && _icewall < 4) - lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - lichking->GetMotionMaster()->MoveIdle(); - lichking->GetMotionMaster()->MoveChase(me); - lichking->SetReactState(REACT_PASSIVE); - lichking->Attack(me, true); + marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); + marwyn->SetVisible(true); } - if (_icewall < 4) + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - if (Creature* walltarget = me->SummonCreature(NPC_ICE_WALL, IceWalls[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000)) - { - _walltargetGUID = walltarget->GetGUID(); - walltarget->CastSpell(walltarget, SPELL_SUMMON_ICE_WALL); - walltarget->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - me->Attack(walltarget, false); - } + lichking->AI()->Talk(SAY_LK_INTRO_3); + lichking->SetWalk(true); + lichking->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); } - _events.ScheduleEvent(EVENT_ESCAPE_20, 3000); + _events.ScheduleEvent(EVENT_INTRO_LK_7, 10000); + _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 5000); break; - case EVENT_ESCAPE_20: - if (Creature* walltarget = ObjectAccessor::GetCreature(*me, _walltargetGUID)) + case EVENT_INTRO_LK_7: + if (Creature* marwyn = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_MARWYN))) { - if (GameObject* icewall = walltarget->FindNearestGameObject(GO_ICE_WALL, 50.00f)) - { - _icewallGUID = icewall->GetGUID(); - _instance->HandleGameObject(0, false, icewall); - icewall->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - { - if (_icewall == 1) - Talk(SAY_JAINA_ESCAPE_3); - else if (_icewall == 2) - Talk(SAY_JAINA_ESCAPE_4); - else if (_icewall == 3) - Talk(SAY_JAINA_ESCAPE_5); - } - else if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) - { - if (_icewall == 1) - Talk(SAY_SYLVANAS_ESCAPE_3); - else if (_icewall == 2) - Talk(SAY_SYLVANAS_ESCAPE_4); - else if (_icewall == 3) - Talk(SAY_SYLVANAS_ESCAPE_5); - } - } + marwyn->AI()->Talk(SAY_MARWYN_INTRO_1); + marwyn->SetWalk(true); + marwyn->GetMotionMaster()->MovePoint(0, MarwynPosition[1]); } - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + _events.ScheduleEvent(EVENT_INTRO_LK_8, 1000); + break; + case EVENT_INTRO_LK_8: + if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC))) { - if (_icewall && _icewall < 3) - lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - else - lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION); + falric->AI()->Talk(SAY_FALRIC_INTRO_1); + falric->SetWalk(true); + falric->GetMotionMaster()->MovePoint(0, FalricPosition[1]); } - if (_icewall == 3) - _events.ScheduleEvent(EVENT_ESCAPE_21, 16000); // last wall, really far - else - _events.ScheduleEvent(EVENT_ESCAPE_21, 9000); + _events.ScheduleEvent(EVENT_INTRO_LK_9, 5000); + break; + case EVENT_INTRO_LK_9: + if (Creature* falric = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_FALRIC))) + falric->AI()->Talk(SAY_FALRIC_INTRO_2); + _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); + _events.ScheduleEvent(EVENT_INTRO_LK_10, 4000); break; - case EVENT_ESCAPE_21: + case EVENT_INTRO_LK_10: if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true); + Talk(SAY_JAINA_INTRO_END); else - DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true); - + Talk(SAY_SYLVANAS_INTRO_END); + me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos); + /// @todo: needs some improvements + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(1, KorelnOrLoralenPos[2]); + _events.ScheduleEvent(EVENT_INTRO_LK_11, 5000); + break; + case EVENT_INTRO_LK_11: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - if (_icewall == 1) - lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION); - else if (_icewall > 1 && _icewall < 4) - { - lichking->CastSpell(lichking, SPELL_SUMMON_RISE_WITCH_DOCTOR); - _events.ScheduleEvent(EVENT_ESCAPE_22, 1000); - } + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + lichking->AI()->Talk(SAY_LK_JAINA_INTRO_END); + else + lichking->AI()->Talk(SAY_LK_SYLVANAS_INTRO_END); } + _events.ScheduleEvent(EVENT_INTRO_END, 5000); break; - case EVENT_ESCAPE_22: + case EVENT_INTRO_END: + _instance->SetData(DATA_INTRO_EVENT, DONE); + _events.ScheduleEvent(EVENT_KORELN_LORALEN_DEATH, 8000); if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { - if (_icewall >= 2 && _icewall < 4) - lichking->CastSpell(lichking, SPELL_SUMMON_LUMBERING_ABOMINATION); + lichking->DespawnOrUnsummon(5000); + _lichkingGUID = 0; } + me->DespawnOrUnsummon(10000); + _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 7000); break; - case EVENT_ESCAPE_23: // FINAL PART - DestroyIceWall(); - + case EVENT_SKIP_INTRO: if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_6); + me->GetMotionMaster()->MovePoint(0, JainaIntroPosition[2]); else - Talk(SAY_SYLVANAS_ESCAPE_6); + me->GetMotionMaster()->MovePoint(0, SylvanasIntroPosition[2]); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->GetMotionMaster()->MovePoint(0, KorelnOrLoralenPos[1]); + + if (Creature* lichking = me->SummonCreature(NPC_THE_LICH_KING_INTRO, LichKingIntroPosition[0], TEMPSUMMON_MANUAL_DESPAWN)) { - lichking->GetMotionMaster()->MovePoint(0, LichKingFinalPos); - lichking->AI()->Talk(SAY_LK_ESCAPE_11); + lichking->SetWalk(true); + lichking->GetMotionMaster()->MovePoint(0, LichKingIntroPosition[2]); + lichking->SetReactState(REACT_PASSIVE); + _lichkingGUID = lichking->GetGUID(); + _events.ScheduleEvent(EVENT_OPEN_IMPENETRABLE_DOOR, 0); + _events.ScheduleEvent(EVENT_CLOSE_IMPENETRABLE_DOOR, 4000); } - me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[8]); - _events.ScheduleEvent(EVENT_ESCAPE_24, 10000); + _events.ScheduleEvent(EVENT_INTRO_LK_4, 15000); break; - case EVENT_ESCAPE_24: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_8); - else - Talk(SAY_SYLVANAS_ESCAPE_8); - _events.ScheduleEvent(EVENT_ESCAPE_25, 5000); + case EVENT_OPEN_IMPENETRABLE_DOOR: + _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), true); break; - case EVENT_ESCAPE_25: - if (GameObject* cave = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_CAVE_IN))) - cave->SetGoState(GO_STATE_READY); - _events.ScheduleEvent(EVENT_ESCAPE_26, 4000); + case EVENT_CLOSE_IMPENETRABLE_DOOR: + _instance->HandleGameObject(_instance->GetData64(DATA_IMPENETRABLE_DOOR), false); break; - case EVENT_ESCAPE_26: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - Talk(SAY_JAINA_ESCAPE_10); + case EVENT_KORELN_LORALEN_DEATH: + if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_KORELN_LORALEN))) + korelnOrLoralen->CastSpell(korelnOrLoralen, SPELL_FEIGN_DEATH); + break; + default: + break; + } + } + + private: + InstanceScript* _instance; + EventMap _events; + uint64 _utherGUID; + uint64 _lichkingGUID; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_intro_horAI>(creature); + } +}; + +class npc_jaina_or_sylvanas_escape_hor : public CreatureScript +{ + public: + npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { } + + bool OnGossipHello(Player* player, Creature* creature) override + { + // override default gossip + if (InstanceScript* instance = creature->GetInstanceScript()) + if (instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE) + { + player->PrepareGossipMenu(creature, creature->GetEntry() == NPC_JAINA_ESCAPE ? GOSSIP_MENU_JAINA_FINAL : GOSSIP_MENU_SYLVANAS_FINAL, true); + player->SendPreparedGossip(creature); + return true; + } + + // load default gossip + return false; + } + + struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI + { + npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature), + _instance(creature->GetInstanceScript()), _icewall(0), _prefight(false), _invincibility(true) { } + + void Reset() override + { + _events.Reset(); + _icewall = 0; + _events.ScheduleEvent(EVENT_ESCAPE, 1000); + _instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT); + } + + void JustDied(Unit* /*killer*/) override + { + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->AI()->EnterEvadeMode(); // event failed + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if (damage >= me->GetHealth() && _invincibility) + damage = me->GetHealth() - 1; + } + + void DoAction(int32 actionId) override + { + switch (actionId) + { + case ACTION_START_PREFIGHT: + if (_prefight) + return; + _prefight = true; + _events.ScheduleEvent(EVENT_ESCAPE_1, 1000); + break; + case ACTION_WALL_BROKEN: + ++_icewall; + if (_icewall < 4) + _events.ScheduleEvent(EVENT_ESCAPE_13, 3000); else - Talk(SAY_SYLVANAS_ESCAPE_9); - _events.ScheduleEvent(EVENT_ESCAPE_27, 4000); + _events.ScheduleEvent(EVENT_ESCAPE_15, 3000); break; - case EVENT_ESCAPE_27: - if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) - me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_ALLIANCE_HEROIC : GO_CAPTAIN_CHEST_ALLIANCE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000); + case ACTION_GUNSHIP_ARRIVAL: + _events.ScheduleEvent(EVENT_ESCAPE_16, 5000); + break; + case ACTION_GUNSHIP_ARRIVAL_2: + _events.ScheduleEvent(EVENT_ESCAPE_17, 5000); + break; + default: + break; + } + } + + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override + { + player->PlayerTalkClass->ClearMenus(); + + switch (gossipListId) + { + case 0: + player->PlayerTalkClass->SendCloseGossip(); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + _events.ScheduleEvent(EVENT_ESCAPE_6, 0); + break; + default: + break; + } + } + + void DestroyIceWall() + { + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + me->RemoveAurasDueToSpell(SPELL_JAINA_DESTROY_ICE_WALL); + else + me->RemoveAurasDueToSpell(SPELL_SYLVANAS_DESTROY_ICE_WALL); + + _instance->HandleGameObject(_instance->GetData64(DATA_ICEWALL), true); + me->m_Events.AddEvent(new GameObjectDeleteDelayEvent(me, _instance->GetData64(DATA_ICEWALL)), me->m_Events.CalculateTime(5000)); + + if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET))) + wallTarget->DespawnOrUnsummon(); + } + + void SummonIceWall() + { + if (_icewall < 4) + { + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->StopMoving(); + if (Creature* wallTarget = me->SummonCreature(NPC_ICE_WALL_TARGET, IceWallTargetPosition[_icewall], TEMPSUMMON_MANUAL_DESPAWN, 720000)) + lichking->CastSpell(wallTarget, SPELL_SUMMON_ICE_WALL); + + lichking->AI()->SetData(DATA_ICEWALL, _icewall); + } + } + } + + void AttackIceWall() + { + if (_icewall < 4) + Talk(SAY_JAINA_SYLVANAS_ESCAPE_2 + _icewall); + + if (Creature* wallTarget = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ICEWALL_TARGET))) + me->SetFacingToObject(wallTarget); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_JAINA_DESTROY_ICE_WALL, true); + else + DoCast(me, SPELL_SYLVANAS_DESTROY_ICE_WALL, true); + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type != POINT_MOTION_TYPE) + return; + + switch (pointId) + { + case POINT_SHADOW_THRONE_DOOR: + if (me->GetEntry() == NPC_JAINA_ESCAPE) + me->RemoveAurasDueToSpell(SPELL_JAINA_ICE_BARRIER); else - me->SummonGameObject(IsHeroic() ? GO_CAPTAIN_CHEST_HORDE_HEROIC : GO_CAPTAIN_CHEST_HORDE_NORMAL, ChestPos.GetPositionX(), ChestPos.GetPositionY(), ChestPos.GetPositionZ(), ChestPos.GetOrientation(), 0, 0, 0, 0, 720000); - me->SummonGameObject(GO_PORTAL, FinalPortalPos.GetPositionX(), FinalPortalPos.GetPositionY(), FinalPortalPos.GetPositionZ(), FinalPortalPos.GetOrientation(), 0, 0, 0, 0, 720000); - if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) - lichking->DespawnOrUnsummon(1); + me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAK_OF_DARKNESS); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH); + me->SetFacingTo(SylvanasShadowThroneDoorPosition.GetOrientation()); + break; + case POINT_ATTACK_ICEWALL: + AttackIceWall(); + break; + case POINT_TRAP: + Talk(SAY_JAINA_SYLVANAS_ESCAPE_8); + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + me->SetFacingToObject(lichking); break; + default: + break; + } + } + + void DeleteAllFromThreatList(Unit* target, uint64 except) + { + ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList(); + for (auto i : threatlist) + { + if (i->getUnitGuid() == except) + continue; + + i->removeReference(); + } + } + + void UpdateAI(uint32 diff) override + { + _events.Update(diff); + + while (uint32 event = _events.ExecuteEvent()) + { + switch (event) + { + case EVENT_ESCAPE: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_JAINA_ICE_BARRIER); + else + DoCast(me, SPELL_SYLVANAS_CLOAK_OF_DARKNESS); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + AttackStart(lichking); + lichking->AI()->AttackStart(me); + me->CastSpell(lichking, SPELL_TAUNT_ARTHAS, true); + } + me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH); + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + case EVENT_ESCAPE_1: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + lichking->AI()->Talk(SAY_LK_ESCAPE_1); + else + lichking->AI()->Talk(SAY_LK_ESCAPE_2); + _events.ScheduleEvent(EVENT_ESCAPE_2, 8000); + } + break; + case EVENT_ESCAPE_2: + me->AttackStop(); + me->StopMoving(); + me->SetReactState(REACT_PASSIVE); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_JAINA_ICE_PRISON, false); + else + DoCast(me, SPELL_SYLVANAS_BLINDING_RETREAT, true); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->SetReactState(REACT_PASSIVE); + lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + } + + _events.ScheduleEvent(EVENT_ESCAPE_3, 1500); + break; + case EVENT_ESCAPE_3: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE) + DoCastAOE(SPELL_SYLVANAS_DARK_BINDING, true); + _events.ScheduleEvent(EVENT_ESCAPE_4, 1000); + break; + case EVENT_ESCAPE_4: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + DoCast(me, SPELL_CREDIT_FINDING_JAINA); + else + DoCast(me, SPELL_CREDIT_FINDING_SYLVANAS); + Talk(SAY_JAINA_SYLVANAS_ESCAPE_1); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + lichking->RemoveAllAttackers(); + + DeleteAllFromThreatList(lichking, me->GetGUID()); + } + + _events.ScheduleEvent(EVENT_ESCAPE_5, 2000); + break; + case EVENT_ESCAPE_5: + me->GetMotionMaster()->MovePoint(POINT_SHADOW_THRONE_DOOR, SylvanasShadowThroneDoorPosition); + break; + case EVENT_ESCAPE_6: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED); + + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + { + lichking->CastSpell(lichking, SPELL_STUN_BREAK_JAINA); + lichking->RemoveAurasDueToSpell(SPELL_JAINA_ICE_PRISON); + } + else + { + lichking->CastSpell(lichking, SPELL_STUN_BREAK_SYLVANAS); + lichking->RemoveAurasDueToSpell(SPELL_SYLVANAS_DARK_BINDING); + } + } + _invincibility = false; + _instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT); + _events.ScheduleEvent(EVENT_ESCAPE_7, 1000); + break; + case EVENT_ESCAPE_7: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->HandleEmoteCommand(TEXT_EMOTE_ROAR); + me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); + _events.ScheduleEvent(EVENT_ESCAPE_8, 3000); + break; + case EVENT_ESCAPE_8: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[0]); + _events.ScheduleEvent(EVENT_ESCAPE_9, 1000); + break; + case EVENT_ESCAPE_9: + me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[1]); + _events.ScheduleEvent(EVENT_ESCAPE_10, 5000); + break; + case EVENT_ESCAPE_10: + me->GetMotionMaster()->MovePoint(0, NpcJainaOrSylvanasEscapeRoute[2]); + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->GetMotionMaster()->MovePoint(1, LichKingFirstSummon); + _events.ScheduleEvent(EVENT_ESCAPE_11, 6000); + break; + case EVENT_ESCAPE_11: + SummonIceWall(); + _events.ScheduleEvent(EVENT_ESCAPE_12, 4000); + break; + case EVENT_ESCAPE_12: + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + lichking->CastSpell(lichking, SPELL_PAIN_AND_SUFFERING, true); + + me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[3]); + break; + case EVENT_ESCAPE_13: // ICEWALL BROKEN + DestroyIceWall(); + + if (_icewall && _icewall < 4) + me->GetMotionMaster()->MovePoint(POINT_ATTACK_ICEWALL, NpcJainaOrSylvanasEscapeRoute[_icewall + 3]); + _events.ScheduleEvent(EVENT_ESCAPE_14, 8000); + break; + case EVENT_ESCAPE_14: + SummonIceWall(); + break; + case EVENT_ESCAPE_15: // FINAL PART + DestroyIceWall(); + + Talk(SAY_JAINA_SYLVANAS_ESCAPE_6); + + if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_THE_LICH_KING_ESCAPE))) + { + lichking->GetMotionMaster()->MovePoint(2, LichKingFinalPos); + lichking->RemoveAurasDueToSpell(SPELL_REMORSELESS_WINTER); + } + me->GetMotionMaster()->MovePoint(POINT_TRAP, NpcJainaOrSylvanasEscapeRoute[7]); + break; + case EVENT_ESCAPE_16: + me->RemoveAurasDueToSpell(SPELL_HARVEST_SOUL); + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + Talk(SAY_JAINA_ESCAPE_9); + if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP))) + gunship->EnableMovement(true); + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, DONE); + break; + case EVENT_ESCAPE_17: + if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) + Talk(SAY_JAINA_ESCAPE_10); + else + Talk(SAY_SYLVANAS_ESCAPE_9); + DoCast(me, SPELL_CREDIT_ESCAPING_ARTHAS); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; + default: + break; } } + + DoMeleeAttackIfReady(); } - }; - CreatureAI* GetAI(Creature* creature) const override - { - return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature); - } + private: + InstanceScript* _instance; + EventMap _events; + uint32 _icewall; // icewall number + bool _prefight; + bool _invincibility; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_jaina_or_sylvanas_escape_horAI>(creature); + } +}; + +class npc_the_lich_king_escape_hor : public CreatureScript +{ + public: + npc_the_lich_king_escape_hor() : CreatureScript("npc_the_lich_king_escape_hor") { } + + struct npc_the_lich_king_escape_horAI : public ScriptedAI + { + npc_the_lich_king_escape_horAI(Creature* creature) : ScriptedAI(creature) + { + _instance = me->GetInstanceScript(); + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, NOT_STARTED); + _summonsCount = 0; + _icewall = 0; + _despawn = false; + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if (damage >= me->GetHealth()) + damage = me->GetHealth() - 1; + } + + void MovementInform(uint32 type, uint32 pointId) override + { + if (type == POINT_MOTION_TYPE) + { + switch (pointId) + { + case 1: + if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) + me->GetMotionMaster()->MoveChase(target); + break; + case 2: + Talk(SAY_LK_ESCAPE_HARVEST_SOUL); + + if (Creature* target = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) + DoCast(target, SPELL_HARVEST_SOUL); + + if (Transport* gunship = ObjectAccessor::GetTransport(*me, _instance->GetData64(DATA_GUNSHIP))) + gunship->EnableMovement(true); + break; + default: + break; + } + } + } + + void JustSummoned(Creature* /*summon*/) override + { + ++_summonsCount; + } + + void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override + { + // should never happen + if (!_summonsCount) + return; + + --_summonsCount; + + // All summons dead and no summon events scheduled + if (!_summonsCount && _events.Empty()) + { + if (Creature* jainaOrSylvanas = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) + jainaOrSylvanas->AI()->DoAction(ACTION_WALL_BROKEN); + } + } + + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + DoPlaySoundToSet(me, RAND(SOUND_LK_SLAY_1, SOUND_LK_SLAY_2)); + } + + void SetData(uint32 type, uint32 data) override + { + if (type != DATA_ICEWALL) + return; + + _icewall = data; + + switch (_icewall) + { + case 0: // 6 Ghouls, 1 Witch Doctor + DoZoneInCombat(); + _events.ScheduleEvent(EVENT_REMORSELESS_WINTER, 0); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 14000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_1); + break; + case 1: // 6 Ghouls, 2 Witch Doctor, 1 Lumbering Abomination + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 8000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 13000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 16000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 18000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_2); + break; + case 2: // 6 Ghouls, 2 Witch Doctor, 2 Lumbering Abomination + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 19000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 39000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_3); + break; + case 3: // 12 Ghouls, 4 Witch Doctor, 3 Lumbering Abomination + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 9000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 17000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 19000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 40000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 46000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_GHOULS, 55000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 62000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_WITCH_DOCTOR, 66000); + _events.ScheduleEvent(EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION, 14000); + Talk(SAY_LK_ESCAPE_ICEWALL_SUMMONED_4); + break; + default: + break; + } + } + + void EnterEvadeMode() override + { + if (_despawn) + return; + + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, FAIL); + me->StopMoving(); + DoPlaySoundToSet(me, SOUND_LK_FURY_OF_FROSTMOURNE); + DoCastAOE(SPELL_FURY_OF_FROSTMOURNE); + me->DespawnOrUnsummon(12000); + _despawn = true; + } + + void UpdateAI(uint32 diff) override + { + if (!SelectVictim()) + return; + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 event = _events.ExecuteEvent()) + { + switch (event) + { + case EVENT_REMORSELESS_WINTER: + me->StopMoving(); + Talk(SAY_LK_ESCAPE_WINTER); + DoCast(me, SPELL_REMORSELESS_WINTER); + break; + case EVENT_ESCAPE_SUMMON_GHOULS: + me->StopMoving(); + Talk(SAY_LK_ESCAPE_GHOULS); + DoCast(me, SPELL_RAISE_DEAD); + break; + case EVENT_ESCAPE_SUMMON_WITCH_DOCTOR: + DoCast(me, SPELL_SUMMON_RISEN_WITCH_DOCTOR); + break; + case EVENT_ESCAPE_SUMMON_LUMBERING_ABOMINATION: + Talk(SAY_LK_ESCAPE_ABOMINATION); + DoCast(me, SPELL_SUMMON_LUMBERING_ABOMINATION); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + bool SelectVictim() + { + if (!me->IsInCombat()) + return false; + + if (!me->HasReactState(REACT_PASSIVE)) + { + if (Unit* victim = me->SelectVictim()) + AttackStart(victim); + return me->GetVictim(); + } + else if (me->getThreatManager().getThreatList().size() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER)) + { + EnterEvadeMode(); + return false; + } + + return true; + } + + InstanceScript* _instance; + EventMap _events; + uint8 _icewall; + uint32 _summonsCount; + bool _despawn; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_the_lich_king_escape_horAI>(creature); + } }; enum TrashSpells @@ -1140,7 +1374,7 @@ enum TrashSpells SPELL_SHOOT = 72208, SPELL_CURSED_ARROW = 72222, SPELL_FROST_TRAP = 72215, - SPELL_ICE_SHOT = 72268, + SPELL_ICE_SHOT = 72268 }; enum TrashEvents @@ -1175,19 +1409,16 @@ enum TrashEvents EVENT_SHOOT, EVENT_CURSED_ARROW, EVENT_FROST_TRAP, - EVENT_ICE_SHOT, + EVENT_ICE_SHOT }; struct npc_gauntlet_trash : public ScriptedAI { - npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) - { - InternalWaveId = 0; - } + npc_gauntlet_trash(Creature* creature) : ScriptedAI(creature), + _instance(creature->GetInstanceScript()), InternalWaveId(0) { } void Reset() override { - InternalWaveId = 0; me->CastSpell(me, SPELL_WELL_OF_SOULS, true); _events.Reset(); } @@ -1222,352 +1453,362 @@ protected: class npc_ghostly_priest : public CreatureScript { -public: - npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { } - - struct npc_ghostly_priestAI : public npc_gauntlet_trash - { - npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_ghostly_priest() : CreatureScript("npc_ghostly_priest") { } - void EnterCombat(Unit* /*who*/) override + struct npc_ghostly_priestAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); - _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); - _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); - } + npc_ghostly_priestAI(Creature* creature) : npc_gauntlet_trash(creature) { } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_SHADOW_WORD_PAIN: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_SHADOW_WORD_PAIN); - _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000); - break; - case EVENT_CIRCLE_OF_DESTRUCTION: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION); - _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); - break; - case EVENT_COWER_IN_FEAR: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_COWER_IN_FEAR); - _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); - break; - case EVENT_DARK_MENDING: - // find an ally with missing HP - if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000))) - { - DoCast(target, SPELL_DARK_MENDING); - _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); - } - else - { - // no friendly unit with missing hp. re-check in just 5 sec. - _events.ScheduleEvent(EVENT_DARK_MENDING, 5000); - } - break; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000)); + _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); + _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); + _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); } - DoMeleeAttackIfReady(); - } - }; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_ghostly_priestAI>(creature); - } -}; + _events.Update(diff); -class npc_phantom_mage : public CreatureScript -{ -public: - npc_phantom_mage() : CreatureScript("npc_phantom_mage") { } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - struct npc_phantom_mageAI : public npc_gauntlet_trash - { - npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { } + switch (_events.ExecuteEvent()) + { + case EVENT_SHADOW_WORD_PAIN: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_SHADOW_WORD_PAIN); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(6000, 15000)); + break; + case EVENT_CIRCLE_OF_DESTRUCTION: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 10.0f, true)) + DoCast(target, SPELL_CIRCLE_OF_DESTRUCTION); + _events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); + break; + case EVENT_COWER_IN_FEAR: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 20.0f, true)) + DoCast(target, SPELL_COWER_IN_FEAR); + _events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); + break; + case EVENT_DARK_MENDING: + // find an ally with missing HP + if (Unit* target = DoSelectLowestHpFriendly(40, DUNGEON_MODE(30000, 50000))) + { + DoCast(target, SPELL_DARK_MENDING); + _events.ScheduleEvent(EVENT_DARK_MENDING, 20000); + } + else + { + // no friendly unit with missing hp. re-check in just 5 sec. + _events.ScheduleEvent(EVENT_DARK_MENDING, 5000); + } + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; - void EnterEvadeMode() override + CreatureAI* GetAI(Creature* creature) const override { - if (!me->HasAura(AURA_HALLUCINATION)) - npc_gauntlet_trash::EnterEvadeMode(); + return GetHallsOfReflectionAI<npc_ghostly_priestAI>(creature); } +}; - void EnterCombat(Unit* /*who*/) override +class npc_phantom_mage : public CreatureScript +{ + public: + npc_phantom_mage() : CreatureScript("npc_phantom_mage") { } + + struct npc_phantom_mageAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_FIREBALL, 3000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000); - _events.ScheduleEvent(EVENT_FROSTBOLT, 9000); - _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000); - _events.ScheduleEvent(EVENT_HALLUCINATION, 40000); - } + npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { } + + void EnterEvadeMode() override + { + if (!me->HasAura(AURA_HALLUCINATION)) + npc_gauntlet_trash::EnterEvadeMode(); + } - void UpdateAI(uint32 diff) override + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_FIREBALL, 3000); + _events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000); + _events.ScheduleEvent(EVENT_FROSTBOLT, 9000); + _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000); + _events.ScheduleEvent(EVENT_HALLUCINATION, 40000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) + { + case EVENT_FIREBALL: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_FIREBALL); + _events.ScheduleEvent(EVENT_FIREBALL, 15000); + break; + case EVENT_FLAMESTRIKE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_FLAMESTRIKE); + _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000); + break; + case EVENT_FROSTBOLT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_FROSTBOLT); + _events.ScheduleEvent(EVENT_FROSTBOLT, 15000); + break; + case EVENT_CHAINS_OF_ICE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) + DoCast(target, SPELL_CHAINS_OF_ICE); + _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000); + break; + case EVENT_HALLUCINATION: + // removing any dots on mage or else the invisibility spell will break duration + me->RemoveAllAuras(); + DoCast(me, SPELL_HALLUCINATION); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_FIREBALL: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_FIREBALL); - _events.ScheduleEvent(EVENT_FIREBALL, 15000); - break; - case EVENT_FLAMESTRIKE: - DoCast(SPELL_FLAMESTRIKE); - _events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000); - break; - case EVENT_FROSTBOLT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_FROSTBOLT); - _events.ScheduleEvent(EVENT_FROSTBOLT, 15000); - break; - case EVENT_CHAINS_OF_ICE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_CHAINS_OF_ICE); - _events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 15000); - break; - case EVENT_HALLUCINATION: - // removing any dots on mage or else the invisibility spell will break duration - me->RemoveAllAuras(); - DoCast(SPELL_HALLUCINATION); - break; - } - - DoMeleeAttackIfReady(); + return GetHallsOfReflectionAI<npc_phantom_mageAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_phantom_mageAI>(creature); - } }; class npc_phantom_hallucination : public CreatureScript { -public: - npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { } - - struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI - { - npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { } + public: + npc_phantom_hallucination() : CreatureScript("npc_phantom_hallucination") { } - void Reset() override + struct npc_phantom_hallucinationAI : public npc_phantom_mage::npc_phantom_mageAI { - if (Unit* unit = me->SelectNearestTarget()) - AttackStart(unit); - DoZoneInCombat(); - } + npc_phantom_hallucinationAI(Creature* creature) : npc_phantom_mage::npc_phantom_mageAI(creature) { } - void EnterEvadeMode() override - { - if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION)) - npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode(); - } + void Reset() override + { + DoZoneInCombat(me, 150.0f); + } + + void EnterEvadeMode() override + { + if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION)) + npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode(); + } + + void JustDied(Unit* /*killer*/) override + { + DoCastAOE(SPELL_HALLUCINATION_2); + } + }; - void JustDied(Unit* /*killer*/) override + CreatureAI* GetAI(Creature* creature) const override { - DoCast(SPELL_HALLUCINATION_2); + return new npc_phantom_hallucinationAI(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_phantom_hallucinationAI(creature); - } }; class npc_shadowy_mercenary : public CreatureScript { -public: - npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { } - - struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash - { - npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_shadowy_mercenary() : CreatureScript("npc_shadowy_mercenary") { } - void EnterCombat(Unit* /*who*/) override + struct npc_shadowy_mercenaryAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000); - _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000); - } + npc_shadowy_mercenaryAI(Creature* creature) : npc_gauntlet_trash(creature) { } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SHADOW_STEP, 23000); + _events.ScheduleEvent(EVENT_DEADLY_POISON, 5000); + _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _events.Update(diff); - void UpdateAI(uint32 diff) override + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) + { + case EVENT_SHADOW_STEP: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) + DoCast(target, SPELL_SHADOW_STEP); + _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); + break; + case EVENT_DEADLY_POISON: + DoCastVictim(SPELL_DEADLY_POISON); + _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000); + break; + case EVENT_ENVENOMED_DAGGER_THROW: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_ENVENOMED_DAGGER_THROW); + _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); + break; + case EVENT_KIDNEY_SHOT: + DoCastVictim(SPELL_KIDNEY_SHOT); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_SHADOW_STEP: - DoCast(SPELL_SHADOW_STEP); - _events.ScheduleEvent(EVENT_SHADOW_STEP, 8000); - break; - case EVENT_DEADLY_POISON: - DoCastVictim(SPELL_DEADLY_POISON); - _events.ScheduleEvent(EVENT_DEADLY_POISON, 10000); - break; - case EVENT_ENVENOMED_DAGGER_THROW: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_ENVENOMED_DAGGER_THROW); - _events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); - break; - case EVENT_KIDNEY_SHOT: - DoCastVictim(SPELL_KIDNEY_SHOT); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000); - break; - } - - DoMeleeAttackIfReady(); + return GetHallsOfReflectionAI<npc_shadowy_mercenaryAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_shadowy_mercenaryAI>(creature); - } }; class npc_spectral_footman : public CreatureScript { -public: - npc_spectral_footman() : CreatureScript("npc_spectral_footman") { } - - struct npc_spectral_footmanAI : public npc_gauntlet_trash - { - npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_spectral_footman() : CreatureScript("npc_spectral_footman") { } - void EnterCombat(Unit* /*who*/) override + struct npc_spectral_footmanAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); /// @todo adjust timers - _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000); - _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); - } + npc_spectral_footmanAI(Creature* creature) : npc_gauntlet_trash(creature) { } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 14000); + _events.ScheduleEvent(EVENT_SHIELD_BASH, 10000); + _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - _events.Update(diff); + _events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - switch (_events.ExecuteEvent()) - { - case EVENT_SPECTRAL_STRIKE: - DoCastVictim(SPELL_SPECTRAL_STRIKE); - _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); - break; - case EVENT_SHIELD_BASH: - DoCastVictim(SPELL_SHIELD_BASH); - _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000); - break; - case EVENT_TORTURED_ENRAGE: - DoCast(SPELL_TORTURED_ENRAGE); - _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); - break; + switch (_events.ExecuteEvent()) + { + case EVENT_SPECTRAL_STRIKE: + DoCastVictim(SPELL_SPECTRAL_STRIKE); + _events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); + break; + case EVENT_SHIELD_BASH: + DoCastVictim(SPELL_SHIELD_BASH); + _events.ScheduleEvent(EVENT_SHIELD_BASH, 5000); + break; + case EVENT_TORTURED_ENRAGE: + DoCast(me, SPELL_TORTURED_ENRAGE); + _events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); + break; + default: + break; + } + + DoMeleeAttackIfReady(); } + }; - DoMeleeAttackIfReady(); + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_spectral_footmanAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_spectral_footmanAI>(creature); - } }; class npc_tortured_rifleman : public CreatureScript { -public: - npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { } - - struct npc_tortured_riflemanAI : public npc_gauntlet_trash - { - npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { } + public: + npc_tortured_rifleman() : CreatureScript("npc_tortured_rifleman") { } - void EnterCombat(Unit* /*who*/) override + struct npc_tortured_riflemanAI : public npc_gauntlet_trash { - _events.ScheduleEvent(EVENT_SHOOT, 1); /// @todo adjust timers - _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000); - _events.ScheduleEvent(EVENT_FROST_TRAP, 10000); - _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); - } + npc_tortured_riflemanAI(Creature* creature) : npc_gauntlet_trash(creature) { } + + void EnterCombat(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_SHOOT, 1); + _events.ScheduleEvent(EVENT_CURSED_ARROW, 7000); + _events.ScheduleEvent(EVENT_FROST_TRAP, 10000); + _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void UpdateAI(uint32 diff) override + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) + { + case EVENT_SHOOT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_SHOOT); + _events.ScheduleEvent(EVENT_SHOOT, 2000); + break; + case EVENT_CURSED_ARROW: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_CURSED_ARROW); + _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000); + break; + case EVENT_FROST_TRAP: + DoCast(me, SPELL_FROST_TRAP); + _events.ScheduleEvent(EVENT_FROST_TRAP, 30000); + break; + case EVENT_ICE_SHOT: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) + DoCast(target, SPELL_ICE_SHOT); + _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_SHOOT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_SHOOT); - _events.ScheduleEvent(EVENT_SHOOT, 2000); - break; - case EVENT_CURSED_ARROW: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_CURSED_ARROW); - _events.ScheduleEvent(EVENT_CURSED_ARROW, 10000); - break; - case EVENT_FROST_TRAP: - DoCast(SPELL_FROST_TRAP); - _events.ScheduleEvent(EVENT_FROST_TRAP, 30000); - break; - case EVENT_ICE_SHOT: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_ICE_SHOT); - _events.ScheduleEvent(EVENT_ICE_SHOT, 15000); - break; - } - DoMeleeAttackIfReady(); + return GetHallsOfReflectionAI<npc_tortured_riflemanAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_tortured_riflemanAI>(creature); - } }; - -enum GeneralEvents +enum FrostswornGeneral { - //General + // General EVENT_SHIELD = 1, EVENT_SPIKE = 2, EVENT_CLONE = 3, @@ -1575,554 +1816,652 @@ enum GeneralEvents SAY_AGGRO = 0, SAY_DEATH = 1, - SPELL_SHIELD_THROWN = 69222, // 73076 on hc - SPELL_SPIKE = 69184, // 70399 on hc - SPELL_CLONE_NAME = 57507, - SPELL_CLONE_MODEL = 45204, + SPELL_SHIELD_THROWN = 69222, + SPELL_SPIKE = 69184, + SPELL_CLONE = 69828, + SPELL_GHOST_VISUAL = 69861, // Reflection EVENT_BALEFUL_STRIKE = 1, - SPELL_BALEFUL_STRIKE = 69933, // 70400 on hc - SPELL_SPIRIT_BURST = 69900, // 73046 on hc + SPELL_BALEFUL_STRIKE = 69933, + SPELL_SPIRIT_BURST = 69900 }; -class npc_frostworn_general : public CreatureScript +class npc_frostsworn_general : public CreatureScript { -public: - npc_frostworn_general() : CreatureScript("npc_frostworn_general") { } + public: + npc_frostsworn_general() : CreatureScript("npc_frostsworn_general") { } - struct npc_frostworn_generalAI : public ScriptedAI - { - npc_frostworn_generalAI(Creature* creature) : ScriptedAI(creature) + struct npc_frostsworn_generalAI : public ScriptedAI { - _instance = me->GetInstanceScript(); - Reset(); - } + npc_frostsworn_generalAI(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } - InstanceScript* _instance; - EventMap _events; + void Reset() override + { + _events.Reset(); + _instance->SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED); + } - void Reset() override - { - _events.Reset(); - _instance->SetData(DATA_FROSWORN_EVENT, NOT_STARTED); - } + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _events.Reset(); + _instance->SetData(DATA_FROSTSWORN_GENERAL, DONE); + } - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - _instance->SetData(DATA_FROSWORN_EVENT, DONE); - } + void EnterCombat(Unit* /*victim*/) override + { + Talk(SAY_AGGRO); + DoZoneInCombat(); + _events.ScheduleEvent(EVENT_SHIELD, 5000); + _events.ScheduleEvent(EVENT_SPIKE, 14000); + _events.ScheduleEvent(EVENT_CLONE, 22000); + _instance->SetData(DATA_FROSTSWORN_GENERAL, IN_PROGRESS); + } - void EnterCombat(Unit* /*victim*/) override - { - Talk(SAY_AGGRO); - _events.ScheduleEvent(EVENT_SHIELD, 5000); - _events.ScheduleEvent(EVENT_SPIKE, 14000); - _events.ScheduleEvent(EVENT_CLONE, 22000); - _instance->SetData(DATA_FROSWORN_EVENT, IN_PROGRESS); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; + _events.Update(diff); - _events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + while (uint32 event = _events.ExecuteEvent()) + { + switch (event) + { + case EVENT_SHIELD: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) + DoCast(target, SPELL_SHIELD_THROWN); + _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000)); + break; + case EVENT_SPIKE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true)) + DoCast(target, SPELL_SPIKE); + _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000)); + break; + case EVENT_CLONE: + SummonClones(); + _events.ScheduleEvent(EVENT_CLONE, 60000); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } - while (uint32 event = _events.ExecuteEvent()) + void SummonClones() { - switch (event) + std::list<Unit*> playerList; + SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0.0f, true); + for (Unit* target : playerList) { - case EVENT_SHIELD: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_SHIELD_THROWN); - _events.ScheduleEvent(EVENT_SHIELD, urand(8000, 12000)); - break; - case EVENT_SPIKE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_SPIKE); - _events.ScheduleEvent(EVENT_SPIKE, urand(15000, 20000)); - break; - case EVENT_CLONE: - SummonClones(); - _events.ScheduleEvent(EVENT_CLONE, 60000); - break; + if (Creature* reflection = me->SummonCreature(NPC_REFLECTION, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000)) + { + target->CastSpell(reflection, SPELL_CLONE, true); + target->CastSpell(reflection, SPELL_GHOST_VISUAL, true); + reflection->AI()->AttackStart(target); + } } } - DoMeleeAttackIfReady(); - } - void SummonClones() + private: + InstanceScript* _instance; + EventMap _events; + }; + + CreatureAI* GetAI(Creature* creature) const override { - std::list<Unit *> playerList; - SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0, true); - for (std::list<Unit*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) - { - Unit* temp = (*itr); - Creature* reflection = me->SummonCreature(NPC_REFLECTION, temp->GetPositionX(), temp->GetPositionY(), temp->GetPositionZ(), temp->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000); - reflection->SetName(temp->GetName()); - temp->CastSpell(reflection, SPELL_CLONE_NAME, true); - temp->CastSpell(reflection, SPELL_CLONE_MODEL, true); - reflection->setFaction(me->getFaction()); - reflection->AI()->AttackStart(temp); - } + return GetHallsOfReflectionAI<npc_frostsworn_generalAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_frostworn_generalAI>(creature); - } }; class npc_spiritual_reflection : public CreatureScript { -public: - npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { } + public: + npc_spiritual_reflection() : CreatureScript("npc_spiritual_reflection") { } - struct npc_spiritual_reflectionAI : public ScriptedAI - { - npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature) + struct npc_spiritual_reflectionAI : public ScriptedAI { - Reset(); - } + npc_spiritual_reflectionAI(Creature *creature) : ScriptedAI(creature) { } - EventMap _events; + void Reset() override + { + _events.Reset(); + } - void Reset() override - { - _events.Reset(); - } + void EnterCombat(Unit* /*victim*/) override + { + _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000); + } - void EnterCombat(Unit* /*victim*/) override - { - _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 3000); - } + void JustDied(Unit* /*killer*/) override + { + DoCastAOE(SPELL_SPIRIT_BURST); + } - void JustDied(Unit* killer) override - { - DoCast(killer, SPELL_SPIRIT_BURST); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; + _events.Update(diff); - _events.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + switch (_events.ExecuteEvent()) + { + case EVENT_BALEFUL_STRIKE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 8.0f, true)) + DoCast(target, SPELL_BALEFUL_STRIKE); + _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000)); + break; + default: + break; + } - switch (_events.ExecuteEvent()) - { - case EVENT_BALEFUL_STRIKE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_BALEFUL_STRIKE); - _events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(3000, 8000)); + DoMeleeAttackIfReady(); } - DoMeleeAttackIfReady(); - } - }; + private: + EventMap _events; + }; - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_spiritual_reflectionAI(creature); - } + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_spiritual_reflectionAI(creature); + } }; +// 5689 class at_hor_intro_start : public AreaTriggerScript { -public: - at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { } + public: + at_hor_intro_start() : AreaTriggerScript("at_hor_intro_start") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override - { - InstanceScript* _instance = player->GetInstanceScript(); + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override + { + if (player->IsGameMaster()) + return true; - if (player->IsGameMaster()) - return true; + InstanceScript* _instance = player->GetInstanceScript(); - if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED) - _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS); + if (_instance->GetData(DATA_INTRO_EVENT) == NOT_STARTED) + _instance->SetData(DATA_INTRO_EVENT, IN_PROGRESS); - return true; - } + return true; + } }; class at_hor_waves_restarter : public AreaTriggerScript { -public: - at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { } + public: + at_hor_waves_restarter() : AreaTriggerScript("at_hor_waves_restarter") { } - bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override - { - InstanceScript* _instance = player->GetInstanceScript(); + bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override + { + if (player->IsGameMaster()) + return true; - if (player->IsGameMaster()) - return true; + InstanceScript* _instance = player->GetInstanceScript(); + + if (_instance->GetData(DATA_WAVE_COUNT)) + return true; - if (_instance->GetData(DATA_WAVE_COUNT)) + if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN) != DONE) + { + _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); + + if (Creature* falric = player->GetCreature(*player, _instance->GetData64(DATA_FALRIC))) + { + falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); + falric->SetVisible(true); + } + if (Creature* marwyn = player->GetCreature(*player, _instance->GetData64(DATA_MARWYN))) + { + marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); + marwyn->SetVisible(true); + } + } return true; + } +}; - if (_instance->GetData(DATA_INTRO_EVENT) == DONE && _instance->GetBossState(DATA_MARWYN_EVENT) != DONE) +// 5740 +class at_hor_impenetrable_door : public AreaTriggerScript +{ + public: + at_hor_impenetrable_door() : AreaTriggerScript("at_hor_impenetrable_door") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override { - _instance->ProcessEvent(0, EVENT_SPAWN_WAVES); + if (player->IsGameMaster()) + return true; - if (Creature* falric = player->GetCreature(*player, _instance->GetData64(DATA_FALRIC_EVENT))) - { - falric->CastSpell(falric, SPELL_BOSS_SPAWN_AURA, true); - falric->SetVisible(true); - } - if (Creature* marwyn = player->GetCreature(*player, _instance->GetData64(DATA_MARWYN_EVENT))) - { - marwyn->CastSpell(marwyn, SPELL_BOSS_SPAWN_AURA, true); - marwyn->SetVisible(true); - } + InstanceScript* _instance = player->GetInstanceScript(); + if (_instance->GetBossState(DATA_MARWYN) == DONE) + return true; + + /// return false to handle teleport by db + return false; } - return true; - } }; -class at_shadow_throne : public AreaTriggerScript +// 5605 +class at_hor_shadow_throne : public AreaTriggerScript { -public: - at_shadow_throne() : AreaTriggerScript("at_shadow_throne") { } + public: + at_hor_shadow_throne() : AreaTriggerScript("at_hor_shadow_throne") { } - bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override - { - InstanceScript* _instance = player->GetInstanceScript(); + bool OnTrigger(Player* player, AreaTriggerEntry const* /*at*/) override + { + if (player->IsGameMaster()) + return true; + + InstanceScript* _instance = player->GetInstanceScript(); + + if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED) + _instance->SetBossState(DATA_THE_LICH_KING_ESCAPE, IN_PROGRESS); - if (player->IsGameMaster()) return true; + } +}; - if (_instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - _instance->SetData(DATA_ESCAPE_EVENT, IN_PROGRESS); +enum EscapeEvents +{ + // Raging Ghoul + EVENT_RAGING_GHOUL_JUMP = 1, - return true; - } + // Risen Witch Doctor + EVENT_RISEN_WITCH_DOCTOR_CURSE, + EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, + EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, + + // Lumbering Abomination + EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, + EVENT_LUMBERING_ABOMINATION_CLEAVE }; -class npc_raging_ghoul : public CreatureScript +namespace hor { -public: - npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { } - struct npc_raging_ghoulAI : public ScriptedAI - { - npc_raging_ghoulAI(Creature* creature) : ScriptedAI(creature) +class StartMovementEvent : public BasicEvent +{ + public: + StartMovementEvent(Creature* owner) : _owner(owner) { } + + bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override { - _instance = me->GetInstanceScript(); + _owner->SetReactState(REACT_AGGRESSIVE); + if (Unit* target = _owner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) + _owner->AI()->AttackStart(target); + return true; } - InstanceScript* _instance; - uint32 _emergeTimer; - bool _doEmerge; - bool _doJump; - uint64 _leaderGUID; + private: + Creature* _owner; +}; - void Reset() override - { - _emergeTimer = 4000; - _doEmerge = false; - _doJump = false; - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) - _instance->SetData(DATA_SUMMONS, 1); +} // namespace hor - } +struct npc_escape_event_trash : public ScriptedAI +{ + npc_escape_event_trash(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } - void IsSummonedBy(Unit*) override - { - DoCast(me, SPELL_EMERGE_VISUAL); - } + void Reset() override + { + _events.Reset(); + } - void JustDied(Unit* /*killer*/) override + void UpdateAI(uint32 /*diff*/) override + { + if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == FAIL || _instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == NOT_STARTED) + me->DespawnOrUnsummon(); + } + + void IsSummonedBy(Unit* /*summoner*/) override + { + DoZoneInCombat(me, 0.0f); + if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) { - _instance->SetData(DATA_SUMMONS, 0); + me->SetInCombatWith(leader); + leader->SetInCombatWith(me); + me->AddThreat(leader, 0.0f); } + } - void AttackStart(Unit* who) override +protected: + EventMap _events; + InstanceScript* _instance; +}; + +class npc_raging_ghoul : public CreatureScript +{ + public: + npc_raging_ghoul() : CreatureScript("npc_raging_ghoul") { } + + struct npc_raging_ghoulAI : public npc_escape_event_trash { - if (!who) - return; + npc_raging_ghoulAI(Creature* creature) : npc_escape_event_trash(creature) { } - if (!_doEmerge) - return; + void Reset() override + { + npc_escape_event_trash::Reset(); + _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 5000); + } - ScriptedAI::AttackStart(who); - } + void IsSummonedBy(Unit* summoner) override + { + me->CastSpell(me, SPELL_RAGING_GHOUL_SPAWN, true); + me->SetReactState(REACT_PASSIVE); + me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); + me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000)); - void UpdateAI(uint32 diff) override - { - if (!_instance) - return; + npc_escape_event_trash::IsSummonedBy(summoner); + } - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) + void UpdateAI(uint32 diff) override { - _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER); - Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER)); + npc_escape_event_trash::UpdateAI(diff); + + if (!UpdateVictim()) + return; + + _events.Update(diff); - if (_doEmerge != true) + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) { - if (_emergeTimer < diff) - { - _doEmerge = true; - if (leader) + case EVENT_RAGING_GHOUL_JUMP: + if (Unit* victim = me->GetVictim()) { - DoResetThreat(); - me->GetMotionMaster()->MoveIdle(); - me->GetMotionMaster()->MoveChase(leader); + if (me->IsInRange(victim, 5.0f, 30.0f)) + { + DoCast(victim, SPELL_GHOUL_JUMP); + return; + } } - } - else - _emergeTimer -= diff; + _events.ScheduleEvent(EVENT_RAGING_GHOUL_JUMP, 500); + break; + default: + break; } - if (me->Attack(leader,true))/*(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150.0f))*/ - { - if (!_doJump && me->IsWithinDistInMap(leader, 30.0f) && !me->IsWithinDistInMap(leader, 5.0f)) - { - _doJump = true; - DoCast(leader, SPELL_GHOUL_JUMP); - } - } + DoMeleeAttackIfReady(); } - else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - me->DespawnOrUnsummon(); - DoMeleeAttackIfReady(); - } - }; + }; - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_raging_ghoulAI>(creature); - } + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_raging_ghoulAI>(creature); + } }; class npc_risen_witch_doctor : public CreatureScript { -public: - npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { } + public: + npc_risen_witch_doctor() : CreatureScript("npc_risen_witch_doctor") { } - struct npc_risen_witch_doctorAI : public ScriptedAI - { - npc_risen_witch_doctorAI(Creature* creature) : ScriptedAI(creature) + struct npc_risen_witch_doctorAI : public npc_escape_event_trash { - _instance = me->GetInstanceScript(); - } + npc_risen_witch_doctorAI(Creature* creature) : npc_escape_event_trash(creature) { } - InstanceScript* _instance; - uint32 _emergeTimer; - bool _doEmerge; - uint64 _leaderGUID; - uint32 _boltTimer; - uint32 _boltVolleyTimer; - uint32 _curseTimer; + void Reset() override + { + npc_escape_event_trash::Reset(); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, 6000); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, 15000); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, 7000); + } - void Reset() override - { - _emergeTimer = 5000; - _boltTimer = 6000; - _boltVolleyTimer = 15000; - _curseTimer = 7000; - _doEmerge = false; - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) - _instance->SetData(DATA_SUMMONS, 1); - } + void IsSummonedBy(Unit* summoner) override + { + me->CastSpell(me, SPELL_RISEN_WITCH_DOCTOR_SPAWN, true); + me->SetReactState(REACT_PASSIVE); + me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); + me->m_Events.AddEvent(new hor::StartMovementEvent(me), me->m_Events.CalculateTime(5000)); - void IsSummonedBy(Unit*) override - { - DoCast(me, SPELL_EMERGE_VISUAL); - DoZoneInCombat(me, 100.00f); - } + npc_escape_event_trash::IsSummonedBy(summoner); + } - void JustDied(Unit* /*killer*/) override - { - _instance->SetData(DATA_SUMMONS, 0); - } + void UpdateAI(uint32 diff) override + { + npc_escape_event_trash::UpdateAI(diff); - void AttackStart(Unit* who) override - { - if (!who) - return; + if (!UpdateVictim()) + return; + + _events.Update(diff); - if (_doEmerge == false) - return; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - ScriptedAI::AttackStart(who); + switch (_events.ExecuteEvent()) + { + case EVENT_RISEN_WITCH_DOCTOR_CURSE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true)) + DoCast(target, SPELL_CURSE_OF_DOOM); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, urand(10000, 15000)); + break; + case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT: + if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 20.0f, true)) + DoCast(target, SPELL_SHADOW_BOLT); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, urand(2000, 3000)); + break; + case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY: + if (SelectTarget(SELECT_TARGET_RANDOM, 0, 30.0f, true)) + DoCastAOE(SPELL_SHADOW_BOLT_VOLLEY); + _events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT_VOLLEY, urand(15000, 22000)); + break; + default: + break; + } + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_risen_witch_doctorAI>(creature); } +}; + +class npc_lumbering_abomination : public CreatureScript +{ + public: + npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { } - void UpdateAI(uint32 diff) override + struct npc_lumbering_abominationAI : public npc_escape_event_trash { - if (!_instance) - return; + npc_lumbering_abominationAI(Creature* creature) : npc_escape_event_trash(creature) { } - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) + void Reset() override { - if (_doEmerge != true) - { - if (_emergeTimer < diff) - { - _doEmerge = true; - _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER); + npc_escape_event_trash::Reset(); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, 15000); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, 6000); + } - if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) - { - DoResetThreat(); - me->GetMotionMaster()->MoveIdle(); - me->GetMotionMaster()->MoveChase(leader); - } - } - else - _emergeTimer -= diff; - } + void UpdateAI(uint32 diff) override + { + npc_escape_event_trash::UpdateAI(diff); - if (_curseTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM)) - DoCast(target, SPELL_COURSE_OF_DOOM); - _curseTimer = urand(10000, 15000); - } - else - _curseTimer -= diff; + if (!UpdateVictim()) + return; - if (_boltTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_SHADOW_BOLT); - _boltTimer = urand(2000, 3000); - } - else - _boltTimer -= diff; + _events.Update(diff); - if (_boltVolleyTimer < diff) + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + switch (_events.ExecuteEvent()) { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_SHADOW_BOLT_VOLLEY); - _boltVolleyTimer = urand(15000, 22000); + case EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY: + DoCastVictim(SPELL_VOMIT_SPRAY); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_VOMIT_SPRAY, urand(15000, 20000)); + break; + case EVENT_LUMBERING_ABOMINATION_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + _events.ScheduleEvent(EVENT_LUMBERING_ABOMINATION_CLEAVE, urand(7000, 9000)); + break; + default: + break; } - else - _boltVolleyTimer -= diff; + + DoMeleeAttackIfReady(); } - else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - me->DespawnOrUnsummon(); - DoMeleeAttackIfReady(); - } - }; + }; - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_risen_witch_doctorAI>(creature); - } + CreatureAI* GetAI(Creature* creature) const override + { + return GetHallsOfReflectionAI<npc_lumbering_abominationAI>(creature); + } }; - -class npc_lumbering_abomination : public CreatureScript +// 72900 - Start Halls of Reflection Quest AE +class spell_hor_start_halls_of_reflection_quest_ae : public SpellScriptLoader { -public: - npc_lumbering_abomination() : CreatureScript("npc_lumbering_abomination") { } + public: + spell_hor_start_halls_of_reflection_quest_ae() : SpellScriptLoader("spell_hor_start_halls_of_reflection_quest_ae") { } - struct npc_lumbering_abominationAI : public ScriptedAI - { - npc_lumbering_abominationAI(Creature* creature) : ScriptedAI(creature) + class spell_hor_start_halls_of_reflection_quest_ae_SpellScript : public SpellScript { - _instance = me->GetInstanceScript(); - } + PrepareSpellScript(spell_hor_start_halls_of_reflection_quest_ae_SpellScript); + + void StartQuests(SpellEffIndex /*effIndex*/) + { + if (Player* target = GetHitPlayer()) + { + // CanTakeQuest and CanAddQuest checks done in spell effect execution + if (target->GetTeam() == ALLIANCE) + target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_A, true); + else + target->CastSpell(target, SPELL_START_HALLS_OF_REFLECTION_QUEST_H, true); + } + } - InstanceScript* _instance; - uint64 _leaderGUID; - bool _doWalk; - uint32 _strikeTimer; - uint32 _vomitTimer; + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_hor_start_halls_of_reflection_quest_ae_SpellScript::StartQuests, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; - void Reset() override + SpellScript* GetSpellScript() const override { - _doWalk = false; - _vomitTimer = 15000; - _strikeTimer = 6000; - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) - _instance->SetData(DATA_SUMMONS, 1); + return new spell_hor_start_halls_of_reflection_quest_ae_SpellScript(); } +}; + +// 70190 - Evasion +class spell_hor_evasion : public SpellScriptLoader +{ + public: + spell_hor_evasion() : SpellScriptLoader("spell_hor_evasion") { } + + class spell_hor_evasion_SpellScript : public SpellScript + { + PrepareSpellScript(spell_hor_evasion_SpellScript); + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void SetDest(SpellDestination& dest) + { + WorldObject* target = GetExplTargetWorldObject(); + Position pos(*target); + Position home = GetCaster()->ToCreature()->GetHomePosition(); + + // prevent evasion outside the room + if (pos.IsInDist2d(&home, 15.0f)) + return; + + float angle = pos.GetAngle(&home); + float dist = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster()); + target->MovePosition(pos, dist, angle); + + dest.Relocate(pos); + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_hor_evasion_SpellScript::SetDest, EFFECT_0, TARGET_DEST_TARGET_RADIUS); + } + }; - void IsSummonedBy(Unit*) override + SpellScript* GetSpellScript() const override { - DoCast(me, SPELL_EMERGE_VISUAL); - DoZoneInCombat(me, 100.00f); + return new spell_hor_evasion_SpellScript(); } +}; + +// 70017 - Gunship Cannon Fire +class spell_hor_gunship_cannon_fire : public SpellScriptLoader +{ + public: + spell_hor_gunship_cannon_fire() : SpellScriptLoader("spell_hor_gunship_cannon_fire") { } - void UpdateAI(uint32 diff) override + class spell_hor_gunship_cannon_fire_AuraScript : public AuraScript { - if (_instance->GetData(DATA_ESCAPE_EVENT) == IN_PROGRESS) + PrepareAuraScript(spell_hor_gunship_cannon_fire_AuraScript); + + void HandlePeriodic(AuraEffect const* /*aurEff*/) { - if (_doWalk != true) + if (!urand(0, 2)) { - _doWalk = true; - _leaderGUID = _instance->GetData64(DATA_ESCAPE_LEADER); - if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_ESCAPE_LEADER))) - { - DoResetThreat(); - me->GetMotionMaster()->MoveIdle(); - me->GetMotionMaster()->MoveChase(leader); - } - } - if (_strikeTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_ABON_STRIKE); - _strikeTimer = urand(7000, 9000); + if (GetTarget()->GetEntry() == NPC_GUNSHIP_CANNON_HORDE) + GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE, true); + else + GetTarget()->CastSpell((Unit*)NULL, SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE, true); } - else - _strikeTimer -= diff; + } - if (_vomitTimer < diff) - { - if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO)) - DoCast(target, SPELL_VOMIT_SPRAY); - _vomitTimer = urand(15000, 20000); - } - else - _vomitTimer -= diff; + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_hor_gunship_cannon_fire_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } - else if (_instance->GetData(DATA_ESCAPE_EVENT) == FAIL || _instance->GetData(DATA_ESCAPE_EVENT) == NOT_STARTED) - me->DespawnOrUnsummon(); - DoMeleeAttackIfReady(); - } + }; - void JustDied(Unit* /*killer*/) override + AuraScript* GetAuraScript() const override { - _instance->SetData(DATA_SUMMONS, 0); + return new spell_hor_gunship_cannon_fire_AuraScript(); } - - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetInstanceAI<npc_lumbering_abominationAI>(creature); - } }; void AddSC_halls_of_reflection() { new at_hor_intro_start(); new at_hor_waves_restarter(); - new at_shadow_throne(); - new npc_jaina_or_sylvanas_hor(); + new at_hor_impenetrable_door(); + new at_hor_shadow_throne(); + new npc_jaina_or_sylvanas_intro_hor(); new npc_jaina_or_sylvanas_escape_hor(); + new npc_the_lich_king_escape_hor(); new npc_ghostly_priest(); new npc_phantom_mage(); new npc_phantom_hallucination(); new npc_shadowy_mercenary(); new npc_spectral_footman(); new npc_tortured_rifleman(); + new npc_frostsworn_general(); + new npc_spiritual_reflection(); new npc_raging_ghoul(); new npc_risen_witch_doctor(); new npc_lumbering_abomination(); - new npc_frostworn_general(); - new npc_spiritual_reflection(); + new spell_hor_start_halls_of_reflection_quest_ae(); + new spell_hor_evasion(); + new spell_hor_gunship_cannon_fire(); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h index c4776c3cfcd..a05035f7b44 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h @@ -15,170 +15,231 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef DEF_HALLS_OF_REFLECTION_H -#define DEF_HALLS_OF_REFLECTION_H +#ifndef HALLS_OF_REFLECTION_H_ +#define HALLS_OF_REFLECTION_H_ #define HoRScriptName "instance_halls_of_reflection" -#define MAX_ENCOUNTER 3 + +uint32 const EncounterCount = 3; /* Halls of Reflection encounters: -0- Falric -1- Marwyn -2- The Lich King + 0 - Falric + 1 - Marwyn + 2 - The Lich King */ -enum Data +enum DataTypes { - DATA_FALRIC_EVENT = 0, - DATA_MARWYN_EVENT = 1, - DATA_LICHKING_EVENT = 2, + DATA_FALRIC = 0, + DATA_MARWYN = 1, + DATA_THE_LICH_KING_ESCAPE = 2, + DATA_INTRO_EVENT = 3, - DATA_FROSWORN_EVENT = 4, + DATA_FROSTSWORN_GENERAL = 4, - DATA_WAVE_COUNT = 5, - DATA_TEAM_IN_INSTANCE = 6, - DATA_FROSTMOURNE = 7, - DATA_FROSTWORN_DOOR = 8, - DATA_ESCAPE_EVENT = 9, + DATA_KORELN_LORALEN = 5, + DATA_WAVE_COUNT = 6, + DATA_TEAM_IN_INSTANCE = 7, + DATA_FROSTMOURNE = 8, + DATA_IMPENETRABLE_DOOR = 9, DATA_ESCAPE_LEADER = 10, - DATA_SUMMONS = 11, - DATA_ICEWALL = 12, - DATA_CAVE_IN = 13 + DATA_ICEWALL = 11, + DATA_ICEWALL_TARGET = 12, + DATA_GUNSHIP = 13 }; -enum Creatures +enum CreatureIds { - NPC_JAINA_PART1 = 37221, - NPC_SYLVANAS_PART1 = 37223, - NPC_UTHER = 37225, - NPC_LICH_KING_PART1 = 37226, - NPC_LORALEN = 37779, - NPC_KORELN = 37582, - - NPC_FALRIC = 38112, - NPC_MARWYN = 38113, - NPC_WAVE_MERCENARY = 38177, - NPC_WAVE_FOOTMAN = 38173, - NPC_WAVE_RIFLEMAN = 38176, - NPC_WAVE_PRIEST = 38175, - NPC_WAVE_MAGE = 38172, - - NPC_FROSTWORN_GENERAL = 36723, - NPC_REFLECTION = 37068, // 37107 for tank only? - - NPC_JAINA_PART2 = 36955, - NPC_SYLVANAS_PART2 = 37554, - NPC_LICH_KING_PART2 = 36954, - NPC_BARTLETT = 37182, // High Captain Justin Bartlett - NPC_KORM = 37833, // Sky-Reaver Korm Blackscar - NPC_ICE_WALL = 37014, // Ice Wall Target - - NPC_RAGING_GNOUL = 36940, - NPC_RISEN_WITCH_DOCTOR = 36941, - NPC_ABON = 37069 + NPC_JAINA_INTRO = 37221, + NPC_SYLVANAS_INTRO = 37223, + NPC_UTHER = 37225, + NPC_THE_LICH_KING_INTRO = 37226, + NPC_KORELN = 37582, + NPC_LORALEN = 37779, + NPC_FROSTMOUNRE_ALTAR_BUNNY = 37704, + + NPC_FALRIC = 38112, + NPC_MARWYN = 38113, + NPC_WAVE_MERCENARY = 38177, + NPC_WAVE_FOOTMAN = 38173, + NPC_WAVE_RIFLEMAN = 38176, + NPC_WAVE_PRIEST = 38175, + NPC_WAVE_MAGE = 38172, + + NPC_FROSTSWORN_GENERAL = 36723, + NPC_REFLECTION = 37068, // 37107 for tank only? + + NPC_JAINA_ESCAPE = 36955, + NPC_SYLVANAS_ESCAPE = 37554, + NPC_THE_LICH_KING_ESCAPE = 36954, + NPC_ICE_WALL_TARGET = 37014, + + NPC_RAGING_GHOUL = 36940, + NPC_RISEN_WITCH_DOCTOR = 36941, + NPC_LUMBERING_ABOMINATION = 37069, + + NPC_GUNSHIP_CANNON_HORDE = 37593, + NPC_JUSTIN_BARTLETT = 30344, + NPC_KORM_BLACKSCAR = 30824, + + NPC_WORLD_TRIGGER = 22515 }; -enum GameObjects +enum GameObjectIds { - GO_FROSTMOURNE = 202302, - GO_ENTRANCE_DOOR = 201976, - GO_FROSTWORN_DOOR = 197341, - GO_ARTHAS_DOOR = 197342, - //GO_ESCAPE_DOOR = 197343, // always open ? - - GO_ICE_WALL = 201385, - GO_CAVE = 201596, - - GO_STAIRS_SKYBREAKER = 201709, - GO_SKYBREAKER = 201598, - GO_STAIRS_ORGRIM_HAMMER = 202211, - GO_ORGRIM_HAMMER = 201599, - GO_PORTAL = 202079, - - GO_CAPTAIN_CHEST_HORDE_NORMAL = 202212, //3145 - GO_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710, //30357 - GO_CAPTAIN_CHEST_HORDE_HEROIC = 202337, //3246 - GO_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336, //3333 + GO_FROSTMOURNE = 202302, + GO_ENTRANCE_DOOR = 201976, + GO_IMPENETRABLE_DOOR = 197341, + GO_SHADOW_THRONE_DOOR = 197342, + GO_ESCAPE_DOOR = 197343, // always open ? + + GO_ICE_WALL = 201385, + GO_CAVE_IN = 201596, + + GO_THE_SKYBREAKER = 201598, + GO_ORGRIMS_HAMMER = 201599, + GO_THE_SKYBREAKER_STAIRS = 201709, + GO_ORGRIMS_HAMMER_STAIRS = 202211, + GO_PORTAL_TO_DALARAN = 195682, + + GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL = 201710, + GO_THE_CAPTAIN_CHEST_HORDE_NORMAL = 202212, + GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC = 202336, + GO_THE_CAPTAIN_CHEST_HORDE_HEROIC = 202337 }; -enum HorWorldStates +enum Achievements { - WORLD_STATE_HOR_WAVES_ENABLED = 4884, - WORLD_STATE_HOR_WAVE_COUNT = 4882, + ACHIEV_NOT_RETREATING_EVENT = 22615, + SPELL_ACHIEV_CHECK = 72830 }; // Common actions from Instance Script to Boss Script enum Actions { - ACTION_ENTER_COMBAT, - ACTION_START_ESCAPING, - ACTION_WALL_BROKEN + ACTION_ENTER_COMBAT = -668001, + ACTION_START_PREFIGHT = -668002, + ACTION_WALL_BROKEN = -668003, + ACTION_GUNSHIP_ARRIVAL = -668004, + ACTION_GUNSHIP_ARRIVAL_2 = -668005 }; -enum TrashGeneralSpells +enum InstanceEvents { - // General spells - SPELL_WELL_OF_SOULS = 72630, // cast when spawn(become visible) - SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates + EVENT_SPAWN_WAVES = 1, + EVENT_NEXT_WAVE = 2, + EVENT_DO_WIPE = 3, + EVENT_ADD_WAVE = 4, + EVENT_SPAWN_ESCAPE_EVENT = 5 }; -enum InstanceEvents +enum InstanceEventIds { - EVENT_SPAWN_WAVES = 1, - EVENT_NEXT_WAVE = 2, - EVENT_DO_WIPE = 3, - EVENT_ADD_WAVE = 4, + EVENT_GUNSHIP_ARRIVAL = 22709, + EVENT_GUNSHIP_ARRIVAL_2 = 22714, + EVENT_ICE_WALL_SUMMONED = 22795 }; -// Base class for FALRIC and MARWYN -// handled the summonList and the notification events to/from the InstanceScript -struct boss_horAI : ScriptedAI +enum InstanceSpells { - boss_horAI(Creature* creature) : ScriptedAI(creature), summons(creature) - { - instance = me->GetInstanceScript(); - } + // Trash + SPELL_WELL_OF_SOULS = 72630, // cast when spawn (become visible) + SPELL_SPIRIT_ACTIVATE = 72130, // cast when unit activates + + // Start Quests + SPELL_START_HALLS_OF_REFLECTION_QUEST_A = 71351, + SPELL_START_HALLS_OF_REFLECTION_QUEST_H = 71542, + SPELL_START_HALLS_OF_REFLECTION_QUEST_AE = 72900, + + // Quest Credits + SPELL_CREDIT_FINDING_SYLVANAS = 71536, + SPELL_CREDIT_FINDING_JAINA = 71538, + SPELL_CREDIT_ESCAPING_ARTHAS = 71352, + + // Gunship + SPELL_GUNSHIP_CANNON_FIRE = 70017, + SPELL_GUNSHIP_CANNON_FIRE_MISSILE_ALLIANCE = 70021, + SPELL_GUNSHIP_CANNON_FIRE_MISSILE_HORDE = 70246 +}; - InstanceScript* instance; - EventMap events; - SummonList summons; +enum InstanceWorldStates +{ + WORLD_STATE_HOR_WAVES_ENABLED = 4884, + WORLD_STATE_HOR_WAVE_COUNT = 4882 +}; + +enum InstanceYells +{ + SAY_CAPTAIN_FIRE = 0, + SAY_CAPTAIN_FINAL = 1 +}; + +// Base class for FALRIC and MARWYN +struct boss_horAI : BossAI +{ + boss_horAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId) { } - void Reset() + void Reset() override { - events.Reset(); + _Reset(); me->SetVisible(false); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetReactState(REACT_PASSIVE); if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED) - instance->ProcessEvent(0, EVENT_DO_WIPE); + instance->ProcessEvent(NULL, EVENT_DO_WIPE); } - void DoAction(int32 actionID) + void DoAction(int32 actionId) override { - switch (actionID) + switch (actionId) { - case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat. + case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat. me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetReactState(REACT_AGGRESSIVE); - - if (Unit* unit = me->SelectNearestTarget()) - AttackStart(unit); - - DoZoneInCombat(); + DoZoneInCombat(me, 150.0f); + break; + default: break; } } - void JustSummoned(Creature* summoned) + void JustSummoned(Creature* summon) override { - summons.Summon(summoned); + summons.Summon(summon); } }; +class GameObjectDeleteDelayEvent : public BasicEvent +{ + public: + GameObjectDeleteDelayEvent(Unit* owner, uint64 gameObjectGUID) : _owner(owner), _gameObjectGUID(gameObjectGUID) { } + + void DeleteGameObject() + { + if (GameObject* go = ObjectAccessor::GetGameObject(*_owner, _gameObjectGUID)) + go->Delete(); + } + + bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override + { + DeleteGameObject(); + return true; + } + + void Abort(uint64 /*execTime*/) override + { + DeleteGameObject(); + } + + private: + Unit* _owner; + uint64 _gameObjectGUID; +}; + template<class AI> AI* GetHallsOfReflectionAI(Creature* creature) { return GetInstanceAI<AI>(creature, HoRScriptName); } -#endif +#endif // HALLS_OF_REFLECTION_H_ diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index ab5168dd34a..6f33e80b92b 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -19,590 +19,792 @@ #include "ScriptedCreature.h" #include "InstanceScript.h" #include "Player.h" +#include "Transport.h" #include "WorldPacket.h" #include "halls_of_reflection.h" -Position const JainaSpawnPos = {5236.659f, 1929.894f, 707.7781f, 0.8726646f}; // Jaina Spawn Position -Position const SylvanasSpawnPos = {5236.667f, 1929.906f, 707.7781f, 0.8377581f}; // Sylvanas Spawn Position -Position const GeneralSpawnPos = {5415.538f, 2117.842f, 707.7781f, 3.944444f}; // Frostsworn General -Position const JainaSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Jaina Spawn Position 2 -Position const SylvanasSpawnPos2 = {5549.011f, 2257.041f, 733.0120f, 1.153993f}; // Sylvanas Spawn Position 2 +Position const JainaSpawnPos = { 5236.659f, 1929.894f, 707.7781f, 0.8726646f }; // Jaina Spawn Position +Position const SylvanasSpawnPos = { 5236.667f, 1929.906f, 707.7781f, 0.8377581f }; // Sylvanas Spawn Position (sniffed) +Position const JainaSpawnPos2 = { 5549.011f, 2257.041f, 733.0120f, 1.153993f }; // Jaina Spawn Position 2 +Position const SylvanasSpawnPos2 = { 5549.29f, 2257.353f, 733.0943f, 0.8901179f }; // Sylvanas Spawn Position 2 (sniffed) +Position const KorelnOrLoralenSpawnPos = { 5232.68f, 1931.46f, 707.7781f, 0.8377581f }; + +Position const TheLichKingEscapePosition[] = +{ + { 5557.017f, 2266.103f, 733.0943f, 3.892084f }, // 0 - Spawn (Horde) + { 5552.733f, 2262.718f, 733.0110f, 4.009696f } // 1 - Spawn (Alliance) +}; Position const SpawnPos[] = { - {5309.577f, 2042.668f, 707.7781f, 4.694936f}, - {5295.885f, 2040.342f, 707.7781f, 5.078908f}, - {5340.836f, 1992.458f, 707.7781f, 2.757620f}, - {5325.072f, 1977.597f, 707.7781f, 2.076942f}, - {5277.365f, 1993.229f, 707.7781f, 0.401426f}, - {5275.479f, 2001.135f, 707.7781f, 0.174533f}, - {5302.448f, 2042.222f, 707.7781f, 4.904375f}, - {5343.293f, 1999.384f, 707.7781f, 2.914700f}, - {5295.635f, 1973.757f, 707.7781f, 1.186824f}, - {5311.031f, 1972.229f, 707.7781f, 1.640610f}, - {5275.076f, 2008.724f, 707.7781f, 6.213372f}, - {5316.701f, 2041.550f, 707.7781f, 4.502949f}, - {5344.150f, 2007.168f, 707.7781f, 3.159046f}, - {5319.158f, 1973.998f, 707.7781f, 1.919862f}, - {5302.247f, 1972.415f, 707.7781f, 1.378810f}, - {5277.739f, 2016.882f, 707.7781f, 5.969026f}, - {5322.964f, 2040.288f, 707.7781f, 4.345870f}, - {5343.467f, 2015.951f, 707.7781f, 3.490659f}, - {5313.820f, 1978.146f, 707.7781f, 1.745329f}, - {5279.649f, 2004.656f, 707.7781f, 0.069814f}, - {5306.057f, 2037.002f, 707.7781f, 4.817109f}, - {5337.865f, 2003.403f, 707.7781f, 2.984513f}, - {5299.434f, 1979.009f, 707.7781f, 1.239184f}, - {5312.752f, 2037.122f, 707.7781f, 4.590216f}, - {5335.724f, 1996.859f, 707.7781f, 2.740167f}, - {5280.632f, 2012.156f, 707.7781f, 6.056293f}, - {5320.369f, 1980.125f, 707.7781f, 2.007129f}, - {5306.572f, 1977.474f, 707.7781f, 1.500983f}, - {5336.599f, 2017.278f, 707.7781f, 3.473205f}, - {5282.897f, 2019.597f, 707.7781f, 5.881760f}, - {5318.704f, 2036.108f, 707.7781f, 4.223697f}, - {5280.513f, 1997.842f, 707.7781f, 0.296706f}, - {5337.833f, 2010.057f, 707.7781f, 3.228859f}, - {5299.250f, 2035.998f, 707.7781f, 5.026548f}, + { 5309.577f, 2042.668f, 707.7781f, 4.694936f }, + { 5295.885f, 2040.342f, 707.7781f, 5.078908f }, + { 5340.836f, 1992.458f, 707.7781f, 2.757620f }, + { 5325.072f, 1977.597f, 707.7781f, 2.076942f }, + { 5277.365f, 1993.229f, 707.7781f, 0.401426f }, + { 5275.479f, 2001.135f, 707.7781f, 0.174533f }, + { 5302.448f, 2042.222f, 707.7781f, 4.904375f }, + { 5343.293f, 1999.384f, 707.7781f, 2.914700f }, + { 5295.635f, 1973.757f, 707.7781f, 1.186824f }, + { 5311.031f, 1972.229f, 707.7781f, 1.640610f }, + { 5275.076f, 2008.724f, 707.7781f, 6.213372f }, + { 5316.701f, 2041.550f, 707.7781f, 4.502949f }, + { 5344.150f, 2007.168f, 707.7781f, 3.159046f }, + { 5319.158f, 1973.998f, 707.7781f, 1.919862f }, + { 5302.247f, 1972.415f, 707.7781f, 1.378810f }, + { 5277.739f, 2016.882f, 707.7781f, 5.969026f }, + { 5322.964f, 2040.288f, 707.7781f, 4.345870f }, + { 5343.467f, 2015.951f, 707.7781f, 3.490659f }, + { 5313.820f, 1978.146f, 707.7781f, 1.745329f }, + { 5279.649f, 2004.656f, 707.7781f, 0.069814f }, + { 5306.057f, 2037.002f, 707.7781f, 4.817109f }, + { 5337.865f, 2003.403f, 707.7781f, 2.984513f }, + { 5299.434f, 1979.009f, 707.7781f, 1.239184f }, + { 5312.752f, 2037.122f, 707.7781f, 4.590216f }, + { 5335.724f, 1996.859f, 707.7781f, 2.740167f }, + { 5280.632f, 2012.156f, 707.7781f, 6.056293f }, + { 5320.369f, 1980.125f, 707.7781f, 2.007129f }, + { 5306.572f, 1977.474f, 707.7781f, 1.500983f }, + { 5336.599f, 2017.278f, 707.7781f, 3.473205f }, + { 5282.897f, 2019.597f, 707.7781f, 5.881760f }, + { 5318.704f, 2036.108f, 707.7781f, 4.223697f }, + { 5280.513f, 1997.842f, 707.7781f, 0.296706f }, + { 5337.833f, 2010.057f, 707.7781f, 3.228859f }, + { 5299.250f, 2035.998f, 707.7781f, 5.026548f } }; class instance_halls_of_reflection : public InstanceMapScript { -public: - instance_halls_of_reflection() : InstanceMapScript("instance_halls_of_reflection", 668) { } - - struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript - { - instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) { } + public: + instance_halls_of_reflection() : InstanceMapScript(HoRScriptName, 668) { } - void Initialize() override + struct instance_halls_of_reflection_InstanceMapScript : public InstanceScript { - SetBossNumber(MAX_ENCOUNTER); - events.Reset(); - - _falricGUID = 0; - _marwynGUID = 0; - _jainaOrSylvanasPart1GUID = 0; - _jainaOrSylvanasPart2GUID = 0; - _lichkingPart1GUID = 0; - _frostwornGeneralGUID = 0; - - _frostmourneGUID = 0; - _entranceDoorGUID = 0; - _frostwornDoorGUID = 0; - _arthasDoorGUID = 0; - _escapeDoorGUID = 0; - _caveGUID = 0; - - _teamInInstance = 0; - _waveCount = 0; - _introEvent = NOT_STARTED; - _frostwornGeneral = NOT_STARTED; - _escapeevent = NOT_STARTED; - _mobsaticewall = 0; - } + instance_halls_of_reflection_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetBossNumber(EncounterCount); + + JainaOrSylvanasIntroGUID = 0; + KorelnOrLoralenGUID = 0; + TheLichkingIntroGUID = 0; + FalricGUID = 0; + MarwynGUID = 0; + FrostmourneAltarBunnyGUID = 0; + FrostswornGeneralGUID = 0; + JainaOrSylvanasEscapeGUID = 0; + TheLichKingEscapeGUID = 0; + + FrostmourneGUID = 0; + EntranceDoorGUID = 0; + ImpenetrableDoorGUID = 0; + ShadowThroneDoorGUID = 0; + CaveInGUID = 0; + GunshipGUID = 0; + CaptainsChestGUID = 0; + CaptainGUID = 0; + IcewallGUID = 0; + IcewallTargetGUID = 0; + + _teamInInstance = 0; + _waveCount = 0; + _introState = NOT_STARTED; + _frostswornGeneralState = NOT_STARTED; + + events.Reset(); + } - void OnPlayerEnter(Player* player) override - { - if (!_teamInInstance) - _teamInInstance = player->GetTeam(); - } + void OnPlayerEnter(Player* player) override + { + if (!_teamInInstance) + _teamInInstance = player->GetTeam(); - void OnCreatureCreate(Creature* creature) override - { - if (!_teamInInstance) + if (GetBossState(DATA_MARWYN) == DONE) + { + SpawnGunship(); + + if (!JainaOrSylvanasEscapeGUID && GetBossState(DATA_THE_LICH_KING_ESCAPE) != DONE) + SpawnEscapeEvent(); + } + } + + void OnCreatureCreate(Creature* creature) override { - Map::PlayerList const& players = instance->GetPlayers(); - if (!players.isEmpty()) - if (Player* player = players.begin()->GetSource()) - _teamInInstance = player->GetTeam(); + switch (creature->GetEntry()) + { + case NPC_JAINA_INTRO: + case NPC_SYLVANAS_INTRO: + JainaOrSylvanasIntroGUID = creature->GetGUID(); + break; + case NPC_KORELN: + case NPC_LORALEN: + if (GetBossState(DATA_MARWYN) != DONE) + creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + KorelnOrLoralenGUID = creature->GetGUID(); + break; + case NPC_THE_LICH_KING_INTRO: + TheLichkingIntroGUID = creature->GetGUID(); + break; + case NPC_FALRIC: + FalricGUID = creature->GetGUID(); + break; + case NPC_MARWYN: + MarwynGUID = creature->GetGUID(); + break; + case NPC_FROSTMOUNRE_ALTAR_BUNNY: + FrostmourneAltarBunnyGUID = creature->GetGUID(); + break; + case NPC_FROSTSWORN_GENERAL: + FrostswornGeneralGUID = creature->GetGUID(); + if (GetBossState(DATA_MARWYN) == DONE) + creature->SetPhaseMask(1, true); + break; + case NPC_JAINA_ESCAPE: + case NPC_SYLVANAS_ESCAPE: + JainaOrSylvanasEscapeGUID = creature->GetGUID(); + break; + case NPC_THE_LICH_KING_ESCAPE: + TheLichKingEscapeGUID = creature->GetGUID(); + break; + case NPC_JUSTIN_BARTLETT: + case NPC_KORM_BLACKSCAR: + CaptainGUID = creature->GetGUID(); + break; + case NPC_WORLD_TRIGGER: + if (!creature->GetTransport()) + break; + // no break + case NPC_GUNSHIP_CANNON_HORDE: + GunshipCannonGUIDs.insert(creature->GetGUID()); + break; + case NPC_ICE_WALL_TARGET: + IcewallTargetGUID = creature->GetGUID(); + break; + default: + break; + } } - switch (creature->GetEntry()) + void OnCreatureRemove(Creature* creature) override { - case NPC_JAINA_PART1: - case NPC_SYLVANAS_PART1: - _jainaOrSylvanasPart1GUID = creature->GetGUID(); - break; - case NPC_FALRIC: - _falricGUID = creature->GetGUID(); - break; - case NPC_MARWYN: - _marwynGUID = creature->GetGUID(); - break; - case NPC_FROSTWORN_GENERAL: - _frostwornGeneralGUID = creature->GetGUID(); - if (GetBossState(DATA_MARWYN_EVENT) == DONE) - if (Creature* general = instance->GetCreature(_frostwornGeneralGUID)) - general->SetPhaseMask(1, true); - break; - case NPC_JAINA_PART2: - case NPC_SYLVANAS_PART2: - _jainaOrSylvanasPart2GUID = creature->GetGUID(); - break; + switch (creature->GetEntry()) + { + case NPC_WAVE_MERCENARY: + case NPC_WAVE_FOOTMAN: + case NPC_WAVE_RIFLEMAN: + case NPC_WAVE_PRIEST: + case NPC_WAVE_MAGE: + { + uint32 internalWaveId = creature->AI()->GetData(0); + waveGuidList[internalWaveId].erase(creature->GetGUID()); + break; + } + case NPC_ICE_WALL_TARGET: + IcewallTargetGUID = 0; + break; + case NPC_WORLD_TRIGGER: + case NPC_GUNSHIP_CANNON_HORDE: + GunshipCannonGUIDs.erase(creature->GetGUID()); + break; + default: + break; + } } - } - void OnCreatureRemove(Creature* creature) override - { - switch (creature->GetEntry()) + uint32 GetGameObjectEntry(uint32 /*guidLow*/, uint32 entry) override { - case NPC_WAVE_MERCENARY: - case NPC_WAVE_FOOTMAN: - case NPC_WAVE_RIFLEMAN: - case NPC_WAVE_PRIEST: - case NPC_WAVE_MAGE: + if (!_teamInInstance) + { + Map::PlayerList const& players = instance->GetPlayers(); + if (!players.isEmpty()) + if (Player* player = players.begin()->GetSource()) + _teamInInstance = player->GetTeam(); + } + + switch (entry) { - uint32 internalWaveId = creature->AI()->GetData(0); - waveGuidList[internalWaveId].erase(creature->GetGUID()); - break; + case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL: + case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC: + case GO_THE_SKYBREAKER_STAIRS: + if (_teamInInstance == HORDE) + return 0; + break; + case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL: + case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC: + case GO_ORGRIMS_HAMMER_STAIRS: + if (_teamInInstance == ALLIANCE) + return 0; + break; + default: + break; } + + return entry; } - } - void OnGameObjectCreate(GameObject* go) override - { - switch (go->GetEntry()) + void OnGameObjectCreate(GameObject* go) override { - case GO_FROSTMOURNE: - _frostmourneGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - HandleGameObject(0, false, go); - if (GetData(DATA_INTRO_EVENT) == DONE) - go->SetPhaseMask(2, true); - break; - case GO_ENTRANCE_DOOR: - _entranceDoorGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - HandleGameObject(0, true, go); - break; - case GO_FROSTWORN_DOOR: - _frostwornDoorGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - if (GetBossState(DATA_MARWYN_EVENT) == DONE) - HandleGameObject(0, true, go); - else - HandleGameObject(0, false, go); - break; - case GO_ARTHAS_DOOR: - _arthasDoorGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - if (GetData(DATA_FROSWORN_EVENT) == DONE) - HandleGameObject(0, true, go); - else + switch (go->GetEntry()) + { + case GO_FROSTMOURNE: + FrostmourneGUID = go->GetGUID(); + if (GetData(DATA_INTRO_EVENT) == DONE) + go->SetPhaseMask(2, true); + break; + case GO_ENTRANCE_DOOR: + EntranceDoorGUID = go->GetGUID(); + break; + case GO_IMPENETRABLE_DOOR: + ImpenetrableDoorGUID = go->GetGUID(); + HandleGameObject(0, GetBossState(DATA_MARWYN) == DONE, go); + break; + case GO_SHADOW_THRONE_DOOR: + ShadowThroneDoorGUID = go->GetGUID(); + HandleGameObject(0, GetData(DATA_FROSTSWORN_GENERAL) == DONE, go); + break; + case GO_CAVE_IN: + CaveInGUID = go->GetGUID(); + break; + case GO_THE_SKYBREAKER: + case GO_ORGRIMS_HAMMER: + GunshipGUID = go->GetGUID(); + break; + case GO_THE_SKYBREAKER_STAIRS: + case GO_ORGRIMS_HAMMER_STAIRS: + if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE) + go->SetRespawnTime(DAY); + GunshipStairGUIDs.insert(go->GetGUID()); + break; + case GO_THE_CAPTAIN_CHEST_ALLIANCE_NORMAL: + case GO_THE_CAPTAIN_CHEST_HORDE_NORMAL: + case GO_THE_CAPTAIN_CHEST_ALLIANCE_HEROIC: + case GO_THE_CAPTAIN_CHEST_HORDE_HEROIC: + CaptainsChestGUID = go->GetGUID(); + break; + case GO_ICE_WALL: HandleGameObject(0, false, go); - break; - case GO_CAVE: - _caveGUID = go->GetGUID(); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); - break; + IcewallGUID = go->GetGUID(); + break; + default: + break; + } } - } - void FillInitialWorldStates(WorldPacket& data) override - { - data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(0); - data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(0); - } - - bool SetBossState(uint32 type, EncounterState state) override - { - if (!InstanceScript::SetBossState(type, state)) - return false; - - switch (type) + void OnGameObjectRemove(GameObject* go) override { - case DATA_FALRIC_EVENT: - if (state == DONE) - { - ++_waveCount; - events.ScheduleEvent(EVENT_NEXT_WAVE, 60000); - } - break; - case DATA_MARWYN_EVENT: - if (state == DONE) - { - HandleGameObject(_entranceDoorGUID, true); - HandleGameObject(_frostwornDoorGUID, true); - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0); - if (Creature* general = instance->GetCreature(_frostwornGeneralGUID)) - general->SetPhaseMask(1, true); - } - break; - case DATA_LICHKING_EVENT: - default: - break; + switch (go->GetEntry()) + { + case GO_THE_SKYBREAKER_STAIRS: + case GO_ORGRIMS_HAMMER_STAIRS: + GunshipStairGUIDs.erase(go->GetGUID()); + break; + default: + break; + } } - return true; - } + void FillInitialWorldStates(WorldPacket& data) override + { + data << uint32(WORLD_STATE_HOR_WAVES_ENABLED) << uint32(_introState == DONE && GetBossState(DATA_MARWYN) != DONE); + data << uint32(WORLD_STATE_HOR_WAVE_COUNT) << uint32(_waveCount); + } - void SetData(uint32 type, uint32 data) override - { - switch (type) + bool SetBossState(uint32 type, EncounterState state) override { - case DATA_INTRO_EVENT: - if (data == IN_PROGRESS) - { - if (!_introEvent) + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_FALRIC: + if (state == DONE) { - if (_teamInInstance == ALLIANCE) - instance->SummonCreature(NPC_JAINA_PART1, JainaSpawnPos); - else - instance->SummonCreature(NPC_SYLVANAS_PART1, SylvanasSpawnPos); + ++_waveCount; + events.ScheduleEvent(EVENT_NEXT_WAVE, 60000); } - } - _introEvent = data; - break; - case DATA_WAVE_COUNT: - if (_waveCount && data == NOT_STARTED) - ProcessEvent(NULL, EVENT_DO_WIPE); - break; - case DATA_FROSWORN_EVENT: - if (data == DONE) - { - HandleGameObject(_arthasDoorGUID, true); - if (_teamInInstance == ALLIANCE) - instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2); - else - instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2); - } - _frostwornGeneral = data; - break; - case DATA_ESCAPE_EVENT: - if (data == IN_PROGRESS) - { - if (!_escapeevent) - if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID)) - jaina_or_sylvanas->AI()->DoAction(ACTION_START_ESCAPING); - } - else if (data == NOT_STARTED) - { - if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID)) - jaina_or_sylvanas->DespawnOrUnsummon(1); - if (_teamInInstance == ALLIANCE) - instance->SummonCreature(NPC_JAINA_PART2, JainaSpawnPos2); - else - instance->SummonCreature(NPC_SYLVANAS_PART2, SylvanasSpawnPos2); - SetData(DATA_ESCAPE_EVENT,IN_PROGRESS); - } - _escapeevent = data; - break; - case DATA_SUMMONS: - if (data == 0) - { - _mobsaticewall--; - if (_mobsaticewall == 0) + break; + case DATA_MARWYN: + if (state == DONE) { - if (Creature* jaina_or_sylvanas = instance->GetCreature(_jainaOrSylvanasPart2GUID)) - jaina_or_sylvanas->AI()->DoAction(ACTION_WALL_BROKEN); + if (Creature* bunny = instance->GetCreature(FrostmourneAltarBunnyGUID)) + bunny->CastSpell(bunny, SPELL_START_HALLS_OF_REFLECTION_QUEST_AE, true); + + if (Creature* korelnOrLoralen = instance->GetCreature(KorelnOrLoralenGUID)) + korelnOrLoralen->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + + HandleGameObject(EntranceDoorGUID, true); + HandleGameObject(ImpenetrableDoorGUID, true); + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 0); + if (Creature* general = instance->GetCreature(FrostswornGeneralGUID)) + general->SetPhaseMask(1, true); + + SpawnGunship(); + SpawnEscapeEvent(); } - } - else if (data == 1) - _mobsaticewall++; - break; + break; + case DATA_THE_LICH_KING_ESCAPE: + switch (state) + { + case NOT_STARTED: + break; + case IN_PROGRESS: + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->AI()->DoAction(ACTION_START_PREFIGHT); + break; + case DONE: + if (GameObject* chest = instance->GetGameObject(CaptainsChestGUID)) + chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN); + + DoUseDoorOrButton(CaveInGUID, 15); + + if (Creature* lichking = instance->GetCreature(TheLichKingEscapeGUID)) + { + lichking->CastSpell((Unit*)NULL, SPELL_ACHIEV_CHECK, true); + lichking->DespawnOrUnsummon(1); + } + break; + case FAIL: + DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_NOT_RETREATING_EVENT); + + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->DespawnOrUnsummon(10000); + + if (Creature* icewallTarget = instance->GetCreature(IcewallTargetGUID)) + icewallTarget->DespawnOrUnsummon(); + + if (GameObject* icewall = instance->GetGameObject(IcewallGUID)) + icewall->Delete(); + + events.ScheduleEvent(EVENT_SPAWN_ESCAPE_EVENT, 30000); + break; + default: + break; + } + break; + default: + break; + } + + return true; } - SaveToDB(); - } + void SpawnGunship() + { + // don't spawn gunship twice + if (GunshipGUID) + return; + if (!_teamInInstance) + { + Map::PlayerList const& players = instance->GetPlayers(); + if (!players.isEmpty()) + if (Player* player = players.begin()->GetSource()) + _teamInInstance = player->GetTeam(); + } - // wave scheduling,checked when wave npcs die - void OnUnitDeath(Unit* unit) override - { - Creature* creature = unit->ToCreature(); - if (!creature) - return; + if (Transport* gunship = sTransportMgr->CreateTransport(_teamInInstance == HORDE ? GO_ORGRIMS_HAMMER : GO_THE_SKYBREAKER, 0, instance)) + gunship->EnableMovement(GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE); + } - switch (creature->GetEntry()) + void SpawnEscapeEvent() { - case NPC_WAVE_MERCENARY: - case NPC_WAVE_FOOTMAN: - case NPC_WAVE_RIFLEMAN: - case NPC_WAVE_PRIEST: - case NPC_WAVE_MAGE: + if (!_teamInInstance) { - uint32 deadNpcs = 0; - uint32 waveId = creature->AI()->GetData(0); - for (std::set<uint64>::const_iterator itr = waveGuidList[waveId].begin(); itr != waveGuidList[waveId].end(); ++itr) - { - Creature* npc = instance->GetCreature(*itr); - if (!npc || !npc->IsAlive()) - ++deadNpcs; - } - // because the current npc returns IsAlive when OnUnitDeath happens - // we check if the number of dead npcs is equal to the list-1 - if (deadNpcs == waveGuidList[waveId].size() - 1) + Map::PlayerList const& players = instance->GetPlayers(); + if (!players.isEmpty()) + if (Player* player = players.begin()->GetSource()) + _teamInInstance = player->GetTeam(); + } + + if (_teamInInstance == ALLIANCE) + { + instance->SummonCreature(NPC_JAINA_ESCAPE, JainaSpawnPos2); + instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[1]); + } + else + { + instance->SummonCreature(NPC_SYLVANAS_ESCAPE, SylvanasSpawnPos2); + instance->SummonCreature(NPC_THE_LICH_KING_ESCAPE, TheLichKingEscapePosition[0]); + } + } + + void SetData(uint32 type, uint32 data) override + { + switch (type) + { + case DATA_INTRO_EVENT: + if (data == IN_PROGRESS) + { + if (_introState == NOT_STARTED) + { + if (_teamInInstance == ALLIANCE) + { + instance->SummonCreature(NPC_JAINA_INTRO, JainaSpawnPos); + instance->SummonCreature(NPC_KORELN, KorelnOrLoralenSpawnPos); + } + else + { + instance->SummonCreature(NPC_SYLVANAS_INTRO, SylvanasSpawnPos); + instance->SummonCreature(NPC_LORALEN, KorelnOrLoralenSpawnPos); + } + } + } + _introState = data; + break; + case DATA_WAVE_COUNT: + if (_waveCount && data == NOT_STARTED) + ProcessEvent(NULL, EVENT_DO_WIPE); + break; + case DATA_FROSTSWORN_GENERAL: + if (data == DONE) + HandleGameObject(ShadowThroneDoorGUID, true); + _frostswornGeneralState = data; + break; + default: + break; + } + + SaveToDB(); + } + + // wave scheduling, checked when wave npcs die + void OnUnitDeath(Unit* unit) override + { + Creature* creature = unit->ToCreature(); + if (!creature) + return; + + switch (creature->GetEntry()) + { + case NPC_WAVE_MERCENARY: + case NPC_WAVE_FOOTMAN: + case NPC_WAVE_RIFLEMAN: + case NPC_WAVE_PRIEST: + case NPC_WAVE_MAGE: { + uint32 waveId = creature->AI()->GetData(0); + for (uint64 guid : waveGuidList[waveId]) + { + if (Creature* npc = instance->GetCreature(guid)) + if (npc->IsAlive()) + return; + } + ++_waveCount; events.ScheduleEvent(EVENT_NEXT_WAVE, 3000); + break; } - break; } } - } - void Update(uint32 diff) override - { - if (!instance->HavePlayers()) - return; + void Update(uint32 diff) override + { + if (!instance->HavePlayers()) + return; - events.Update(diff); + events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_NEXT_WAVE: - ProcessEvent(NULL, EVENT_ADD_WAVE); - break; + switch (events.ExecuteEvent()) + { + case EVENT_NEXT_WAVE: + ProcessEvent(NULL, EVENT_ADD_WAVE); + break; + case EVENT_SPAWN_ESCAPE_EVENT: + SpawnEscapeEvent(); + break; + } } - } - void ProcessEvent(WorldObject* /*go*/, uint32 eventId) override - { - switch (eventId) + void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override { - // spawning all wave npcs at once - case EVENT_SPAWN_WAVES: - _waveCount = 1; - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); - { - std::list<uint32> possibilityList, tempList; - uint32 posIndex = 0; + switch (eventId) + { + // spawning all wave npcs at once + case EVENT_SPAWN_WAVES: + _waveCount = 1; + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); + DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); + { + std::list<uint32> possibilityList, tempList; + uint32 posIndex = 0; - possibilityList.push_back(NPC_WAVE_MERCENARY); - possibilityList.push_back(NPC_WAVE_FOOTMAN); - possibilityList.push_back(NPC_WAVE_RIFLEMAN); - possibilityList.push_back(NPC_WAVE_PRIEST); - possibilityList.push_back(NPC_WAVE_MAGE); + possibilityList.push_back(NPC_WAVE_MERCENARY); + possibilityList.push_back(NPC_WAVE_FOOTMAN); + possibilityList.push_back(NPC_WAVE_RIFLEMAN); + possibilityList.push_back(NPC_WAVE_PRIEST); + possibilityList.push_back(NPC_WAVE_MAGE); - // iterate each wave - for (uint8 i = 0; i < 8; ++i) - { - tempList = possibilityList; + // iterate each wave + for (uint8 i = 0; i < 8; ++i) + { + tempList = possibilityList; - uint64 bossGuid = i <= 3 ? _falricGUID : _marwynGUID; + uint64 bossGuid = i <= 3 ? FalricGUID : MarwynGUID; - if (!i) - Trinity::Containers::RandomResizeList(tempList, 3); - else if (i < 6 && i != 3) - Trinity::Containers::RandomResizeList(tempList, 4); + if (!i) + Trinity::Containers::RandomResizeList(tempList, 3); + else if (i < 6 && i != 3) + Trinity::Containers::RandomResizeList(tempList, 4); - for (std::list<uint32>::const_iterator itr = tempList.begin(); itr != tempList.end(); ++itr) - { - if (Creature* boss = instance->GetCreature(bossGuid)) + for (uint32 entry : tempList) { - if (Creature* temp = boss->SummonCreature(*itr, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN)) + if (Creature* boss = instance->GetCreature(bossGuid)) { - temp->AI()->SetData(0, i); - waveGuidList[i].insert(temp->GetGUID()); + if (Creature* temp = boss->SummonCreature(entry, SpawnPos[posIndex], TEMPSUMMON_DEAD_DESPAWN)) + { + temp->AI()->SetData(0, i); + waveGuidList[i].insert(temp->GetGUID()); + } } - } - ++posIndex; + ++posIndex; + } } } - } - events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); - break; - case EVENT_ADD_WAVE: - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); - HandleGameObject(_entranceDoorGUID, false); - - if (_waveCount % 5) - { - uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2); - for (std::set<uint64>::const_iterator itr = waveGuidList[internalWaveId].begin(); itr != waveGuidList[internalWaveId].end(); ++itr) + events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); + break; + case EVENT_ADD_WAVE: + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); + DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); + HandleGameObject(EntranceDoorGUID, false); + + if (_waveCount % 5) { - if (Creature* temp = instance->GetCreature(*itr)) + uint32 internalWaveId = _waveCount - ((_waveCount < 5) ? 1 : 2); + for (uint64 guid : waveGuidList[internalWaveId]) { - temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, true); - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_NOT_SELECTABLE); - temp->AI()->DoZoneInCombat(temp, 100.00f); + if (Creature* temp = instance->GetCreature(guid)) + { + temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, false); + temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE); + temp->AI()->DoZoneInCombat(temp, 100.00f); + } } } - } - else - { - uint32 bossIndex = (_waveCount / 5) - 1; - if (GetBossState(DATA_FALRIC_EVENT + bossIndex) != DONE) + else + { + uint32 bossIndex = (_waveCount / 5) - 1; + if (GetBossState(DATA_FALRIC + bossIndex) != DONE) + { + if (Creature* boss = instance->GetCreature(bossIndex ? MarwynGUID : FalricGUID)) + boss->AI()->DoAction(ACTION_ENTER_COMBAT); + } + else if (_waveCount != 10) + { + ++_waveCount; + events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); + } + } + break; + case EVENT_DO_WIPE: + _waveCount = 0; + events.Reset(); + DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); + DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); + HandleGameObject(EntranceDoorGUID, true); + + if (Creature* falric = instance->GetCreature(FalricGUID)) + falric->SetVisible(false); + if (Creature* marwyn = instance->GetCreature(MarwynGUID)) + marwyn->SetVisible(false); + // despawn wave npcs + for (uint8 i = 0; i < 8; ++i) { - if (Creature* boss = instance->GetCreature(bossIndex ? _marwynGUID : _falricGUID)) - boss->AI()->DoAction(ACTION_ENTER_COMBAT); + for (uint64 guid : waveGuidList[i]) + if (Creature* creature = instance->GetCreature(guid)) + creature->DespawnOrUnsummon(1); + waveGuidList[i].clear(); } - else if (_waveCount != 10) + break; + // Gunship Outro + case EVENT_GUNSHIP_ARRIVAL: + if (GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE) + break; + + if (Transport* gunship = instance->GetTransport(GunshipGUID)) + gunship->EnableMovement(false); + + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL); + + if (Creature* captain = instance->GetCreature(CaptainGUID)) + captain->AI()->Talk(SAY_CAPTAIN_FIRE); + + for (uint64 guid : GunshipCannonGUIDs) { - ++_waveCount; - events.ScheduleEvent(EVENT_NEXT_WAVE, 5000); + uint32 entry = GUID_ENPART(guid); + if ((entry == NPC_WORLD_TRIGGER && _teamInInstance == ALLIANCE) || (entry == NPC_GUNSHIP_CANNON_HORDE && _teamInInstance == HORDE)) + if (Creature* cannon = instance->GetCreature(guid)) + cannon->CastSpell(cannon, SPELL_GUNSHIP_CANNON_FIRE, true); } - } - break; - case EVENT_DO_WIPE: - _waveCount = 0; - events.Reset(); - DoUpdateWorldState(WORLD_STATE_HOR_WAVES_ENABLED, 1); - DoUpdateWorldState(WORLD_STATE_HOR_WAVE_COUNT, _waveCount); - HandleGameObject(_entranceDoorGUID, true); - - if (Creature* falric = instance->GetCreature(_falricGUID)) - falric->SetVisible(false); - if (Creature* marwyn = instance->GetCreature(_marwynGUID)) - marwyn->SetVisible(false); - //despawn wave npcs - for (uint8 i = 0; i < 8; ++i) - { - for (std::set<uint64>::const_iterator itr = waveGuidList[i].begin(); itr != waveGuidList[i].end(); ++itr) - if (Creature* creature = instance->GetCreature(*itr)) - creature->DespawnOrUnsummon(1); - waveGuidList[i].clear(); - } - break; + break; + case EVENT_GUNSHIP_ARRIVAL_2: + if (Transport* gunship = instance->GetTransport(GunshipGUID)) + gunship->EnableMovement(false); + + for (uint64 guid : GunshipStairGUIDs) + if (GameObject* stairs = instance->GetGameObject(guid)) + stairs->SetRespawnTime(DAY); + + if (Creature* jainaOrSylvanas = instance->GetCreature(JainaOrSylvanasEscapeGUID)) + jainaOrSylvanas->AI()->DoAction(ACTION_GUNSHIP_ARRIVAL_2); + + if (Creature* captain = instance->GetCreature(CaptainGUID)) + captain->AI()->Talk(SAY_CAPTAIN_FINAL); + + break; + default: + break; + } } - } - uint32 GetData(uint32 type) const override - { - switch (type) + uint32 GetData(uint32 type) const override { - case DATA_WAVE_COUNT: - return _waveCount; - case DATA_TEAM_IN_INSTANCE: - return _teamInInstance; - case DATA_INTRO_EVENT: - return _introEvent; - case DATA_FROSWORN_EVENT: - return _frostwornGeneral; - case DATA_ESCAPE_EVENT: - return _escapeevent; - case DATA_SUMMONS: - return _mobsaticewall; - default: - break; - } + switch (type) + { + case DATA_WAVE_COUNT: + return _waveCount; + case DATA_TEAM_IN_INSTANCE: + return _teamInInstance; + case DATA_INTRO_EVENT: + return _introState; + case DATA_FROSTSWORN_GENERAL: + return _frostswornGeneralState; + default: + break; + } - return 0; - } + return 0; + } - uint64 GetData64(uint32 type) const override - { - switch (type) + uint64 GetData64(uint32 type) const override { - case DATA_FALRIC_EVENT: - return _falricGUID; - case DATA_MARWYN_EVENT: - return _marwynGUID; - case DATA_FROSWORN_EVENT: - return _frostwornGeneralGUID; - case DATA_FROSTWORN_DOOR: - return _frostwornDoorGUID; - case DATA_FROSTMOURNE: - return _frostmourneGUID; - case DATA_ESCAPE_LEADER: - return _jainaOrSylvanasPart2GUID; - case DATA_CAVE_IN: - return _caveGUID; - default: - break; - } + switch (type) + { + case DATA_FALRIC: + return FalricGUID; + case DATA_MARWYN: + return MarwynGUID; + case DATA_FROSTSWORN_GENERAL: + return FrostswornGeneralGUID; + case DATA_IMPENETRABLE_DOOR: + return ImpenetrableDoorGUID; + case DATA_FROSTMOURNE: + return FrostmourneGUID; + case DATA_ESCAPE_LEADER: + return JainaOrSylvanasEscapeGUID; + case DATA_KORELN_LORALEN: + return KorelnOrLoralenGUID; + case DATA_THE_LICH_KING_ESCAPE: + return TheLichKingEscapeGUID; + case DATA_GUNSHIP: + return GunshipGUID; + case DATA_ICEWALL: + return IcewallGUID; + case DATA_ICEWALL_TARGET: + return IcewallTargetGUID; + default: + break; + } - return 0; - } + return 0; + } - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; + std::string GetSaveData() override + { + OUT_SAVE_INST_DATA; - std::ostringstream saveStream; - saveStream << "H R " << GetBossSaveData() << _introEvent << ' ' << _frostwornGeneral << ' ' << _escapeevent; + std::ostringstream saveStream; + saveStream << "H R " << GetBossSaveData() << _introState << ' ' << _frostswornGeneralState; - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } - void Load(char const* in) override - { - if (!in) + void Load(char const* in) override { - OUT_LOAD_INST_DATA_FAIL; - return; - } + if (!in) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } - OUT_LOAD_INST_DATA(in); + OUT_LOAD_INST_DATA(in); - char dataHead1, dataHead2; + char dataHead1, dataHead2; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2; + std::istringstream loadStream(in); + loadStream >> dataHead1 >> dataHead2; - if (dataHead1 == 'H' && dataHead2 == 'R') - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) + if (dataHead1 == 'H' && dataHead2 == 'R') { - uint32 tmpState; - loadStream >> tmpState; - if (tmpState == IN_PROGRESS || tmpState > SPECIAL) - tmpState = NOT_STARTED; + for (uint8 i = 0; i < EncounterCount; ++i) + { + uint32 tmpState; + loadStream >> tmpState; + if (tmpState == IN_PROGRESS || tmpState > SPECIAL) + tmpState = NOT_STARTED; - SetBossState(i, EncounterState(tmpState)); - } + SetBossState(i, EncounterState(tmpState)); + } - uint32 temp = 0; - loadStream >> temp; - if (temp == DONE) - SetData(DATA_INTRO_EVENT, DONE); - else - SetData(DATA_INTRO_EVENT, NOT_STARTED); + uint32 temp = 0; + loadStream >> temp; + if (temp == DONE) + SetData(DATA_INTRO_EVENT, DONE); + else + SetData(DATA_INTRO_EVENT, NOT_STARTED); - loadStream >> temp; - if (temp == DONE) - SetData(DATA_FROSWORN_EVENT, DONE); + loadStream >> temp; + if (temp == DONE) + SetData(DATA_FROSTSWORN_GENERAL, DONE); + else + SetData(DATA_FROSTSWORN_GENERAL, NOT_STARTED); + } else - SetData(DATA_FROSWORN_EVENT, NOT_STARTED); + OUT_LOAD_INST_DATA_FAIL; - loadStream >> temp; - if (temp == DONE) - SetData(DATA_ESCAPE_EVENT, DONE); - else - SetData(DATA_ESCAPE_EVENT, NOT_STARTED); + OUT_LOAD_INST_DATA_COMPLETE; } - else - OUT_LOAD_INST_DATA_FAIL; - OUT_LOAD_INST_DATA_COMPLETE; + private: + uint64 JainaOrSylvanasIntroGUID; // unused + uint64 KorelnOrLoralenGUID; + uint64 TheLichkingIntroGUID; // unused + uint64 FalricGUID; + uint64 MarwynGUID; + uint64 FrostmourneAltarBunnyGUID; + uint64 FrostswornGeneralGUID; + uint64 JainaOrSylvanasEscapeGUID; + uint64 TheLichKingEscapeGUID; + + uint64 FrostmourneGUID; + uint64 EntranceDoorGUID; + uint64 ImpenetrableDoorGUID; + uint64 ShadowThroneDoorGUID; + uint64 CaveInGUID; + + uint32 _teamInInstance; + uint32 _waveCount; + uint32 _introState; + uint32 _frostswornGeneralState; + + EventMap events; + std::set<uint64> waveGuidList[8]; + + uint64 GunshipGUID; + uint64 CaptainsChestGUID; + uint64 CaptainGUID; + uint64 IcewallGUID; + uint64 IcewallTargetGUID; + + std::set<uint64> GunshipCannonGUIDs; + std::set<uint64> GunshipStairGUIDs; + }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const override + { + return new instance_halls_of_reflection_InstanceMapScript(map); } - - private: - uint64 _falricGUID; - uint64 _marwynGUID; - uint64 _jainaOrSylvanasPart1GUID; - uint64 _jainaOrSylvanasPart2GUID; - uint64 _lichkingPart1GUID; - uint64 _frostwornGeneralGUID; - - uint64 _frostmourneGUID; - uint64 _entranceDoorGUID; - uint64 _frostwornDoorGUID; - uint64 _arthasDoorGUID; - uint64 _escapeDoorGUID; - uint64 _caveGUID; - - uint32 _teamInInstance; - uint32 _waveCount; - uint32 _introEvent; - uint32 _frostwornGeneral; - uint32 _escapeevent; - uint32 _mobsaticewall; - - EventMap events; - - std::set<uint64> waveGuidList[8]; - }; - - InstanceScript* GetInstanceScript(InstanceMap* map) const override - { - return new instance_halls_of_reflection_InstanceMapScript(map); - } }; void AddSC_instance_halls_of_reflection() diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 25cc47b358c..592c44940a4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1800,7 +1800,7 @@ class spell_icc_sprit_alarm : public SpellScriptLoader } if (GameObject* trap = GetCaster()->FindNearestGameObject(trapId, 5.0f)) - trap->SetRespawnTime(trap->GetGOInfo()->trap.autoCloseTime); + trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime()); std::list<Creature*> wards; GetCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index bd446c60c90..67500382758 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -1196,7 +1196,7 @@ class spell_algalon_big_bang : public SpellScriptLoader bool Load() override { _targetCount = 0; - return true; + return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->IsAIEnabled; } void CountTargets(std::list<WorldObject*>& targets) diff --git a/src/server/shared/Common.h b/src/server/shared/Common.h index 04cfefc6815..0485b6b7cc7 100644 --- a/src/server/shared/Common.h +++ b/src/server/shared/Common.h @@ -61,7 +61,7 @@ #include "Define.h" -#include "Dynamic/UnorderedMap.h" +#include <unordered_map> #include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/src/server/shared/CompilerDefs.h b/src/server/shared/CompilerDefs.h index 8a557328af4..2c2d7ea861d 100644 --- a/src/server/shared/CompilerDefs.h +++ b/src/server/shared/CompilerDefs.h @@ -55,12 +55,4 @@ # error "FATAL ERROR: Unknown compiler." #endif -#if defined(__cplusplus) && __cplusplus == 201103L -# define COMPILER_HAS_CPP11_SUPPORT 1 -#elif _MSC_VER >= 1700 -# define COMPILER_HAS_CPP11_SUPPORT 1 -#else -# define COMPILER_HAS_CPP11_SUPPORT 0 -#endif - #endif diff --git a/src/server/shared/Dynamic/HashNamespace.h b/src/server/shared/Dynamic/HashNamespace.h deleted file mode 100644 index 0e95332c05f..00000000000 --- a/src/server/shared/Dynamic/HashNamespace.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef TRINITY_HASH_NAMESPACE_H -#define TRINITY_HASH_NAMESPACE_H - -#include "Define.h" - -#if COMPILER_HAS_CPP11_SUPPORT -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif defined(_STLPORT_VERSION) -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100 -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -# define HASH_NAMESPACE_START namespace std { namespace tr1 { -# define HASH_NAMESPACE_END } } -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -# define HASH_NAMESPACE_START namespace stdext { -# define HASH_NAMESPACE_END } - -#if !_HAS_TRADITIONAL_STL -#ifndef HASH_NAMESPACE -#define HASH_NAMESPACE -#else - -// can be not used by some platforms, so provide fake forward -HASH_NAMESPACE_START - -template<class K> -class hash -{ -public: - size_t operator() (K const&); -}; - -HASH_NAMESPACE_END - -#endif -#endif - -#elif COMPILER == COMPILER_INTEL -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# define HASH_NAMESPACE_START namespace std { namespace tr1 { -# define HASH_NAMESPACE_END } } -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# define HASH_NAMESPACE_START namespace __gnu_cxx { -# define HASH_NAMESPACE_END } - -#include <ext/hash_fun.h> -#include <string> - -HASH_NAMESPACE_START - -template<> -class hash<unsigned long long> -{ -public: - size_t operator()(const unsigned long long &__x) const { return (size_t)__x; } -}; - -template<typename T> -class hash<T *> -{ -public: - size_t operator()(T * const &__x) const { return (size_t)__x; } -}; - -template<> struct hash<std::string> -{ - size_t operator()(const std::string &__x) const - { - return hash<char const*>()(__x.c_str()); - } -}; - -HASH_NAMESPACE_END - -#else -# define HASH_NAMESPACE_START namespace std { -# define HASH_NAMESPACE_END } -#endif - -#if COMPILER != COMPILER_MICROSOFT - -// Visual Studio use non standard hash calculation function, so provide fake forward for other -HASH_NAMESPACE_START - -template<class K> -size_t hash_value(K const&); - -HASH_NAMESPACE_END - -#endif - -#endif diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h index 4b17b2fc558..be7ce00ac05 100644 --- a/src/server/shared/Dynamic/ObjectRegistry.h +++ b/src/server/shared/Dynamic/ObjectRegistry.h @@ -20,12 +20,12 @@ #define TRINITY_OBJECTREGISTRY_H #include "Define.h" -#include "Dynamic/UnorderedMap.h" #include <ace/Singleton.h> #include <string> #include <vector> #include <map> +#include <unordered_map> /** ObjectRegistry holds all registry item of the same type */ diff --git a/src/server/shared/Dynamic/UnorderedMap.h b/src/server/shared/Dynamic/UnorderedMap.h deleted file mode 100644 index f97c4830c75..00000000000 --- a/src/server/shared/Dynamic/UnorderedMap.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef TRINITY_UNORDERED_MAP_H -#define TRINITY_UNORDERED_MAP_H - -#include "HashNamespace.h" - -#if COMPILER_HAS_CPP11_SUPPORT -# include <unordered_map> -#elif COMPILER == COMPILER_INTEL -# include <ext/hash_map> -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# include <unordered_map> -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# include <tr1/unordered_map> -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# include <ext/hash_map> -#elif COMPILER == COMPILER_MICROSOFT && ((_MSC_VER >= 1500 && _HAS_TR1) || _MSC_VER >= 1700) // VC9.0 SP1 and later -# include <unordered_map> -#else -# include <hash_map> -#endif - -#ifdef _STLPORT_VERSION -# define UNORDERED_MAP std::hash_map -# define UNORDERED_MULTIMAP std::hash_multimap -#elif COMPILER_HAS_CPP11_SUPPORT -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_MULTIMAP std::unordered_multimap -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100 -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_MULTIMAP std::tr1::unordered_multimap -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_MULTIMAP std::tr1::unordered_multimap -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -# define UNORDERED_MAP stdext::hash_map -# define UNORDERED_MULTIMAP stdext::hash_multimap -#elif COMPILER == COMPILER_INTEL -# define UNORDERED_MAP std::hash_map -# define UNORDERED_MULTIMAP std::hash_multimap -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# define UNORDERED_MAP std::unordered_map -# define UNORDERED_MULTIMAP std::unordered_multimap -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# define UNORDERED_MAP std::tr1::unordered_map -# define UNORDERED_MULTIMAP std::tr1::unordered_multimap -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# define UNORDERED_MAP __gnu_cxx::hash_map -# define UNORDERED_MULTIMAP __gnu_cxx::hash_multimap -#else -# define UNORDERED_MAP std::hash_map -# define UNORDERED_MULTIMAP std::hash_multimap -#endif - -#endif diff --git a/src/server/shared/Dynamic/UnorderedSet.h b/src/server/shared/Dynamic/UnorderedSet.h deleted file mode 100644 index 0e084698c47..00000000000 --- a/src/server/shared/Dynamic/UnorderedSet.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef TRINITY_UNORDERED_SET_H -#define TRINITY_UNORDERED_SET_H - -#include "HashNamespace.h" - -#if COMPILER_HAS_CPP11_SUPPORT -# include <unordered_set> -#elif COMPILER == COMPILER_INTEL -# include <ext/hash_set> -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# include <unordered_set> -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# include <tr1/unordered_set> -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# include <ext/hash_set> -#elif COMPILER == COMPILER_MICROSOFT && ((_MSC_VER >= 1500 && _HAS_TR1) || _MSC_VER >= 1700) // VC9.0 SP1 and later -# include <unordered_set> -#else -# include <hash_set> -#endif - -#ifdef _STLPORT_VERSION -# define UNORDERED_SET std::hash_set -using std::hash_set; -#elif COMPILER_HAS_CPP11_SUPPORT -# define UNORDERED_SET std::unordered_set -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1600 // VS100 -# define UNORDERED_SET std::tr1::unordered_set -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1500 && _HAS_TR1 -# define UNORDERED_SET std::tr1::unordered_set -#elif COMPILER == COMPILER_MICROSOFT && _MSC_VER >= 1300 -# define UNORDERED_SET stdext::hash_set -using stdext::hash_set; -#elif COMPILER == COMPILER_INTEL -# define UNORDERED_SET std::hash_set -using std::hash_set; -#elif COMPILER == COMPILER_GNU && defined(__clang__) && defined(_LIBCPP_VERSION) -# define UNORDERED_SET std::unordered_set -#elif COMPILER == COMPILER_GNU && GCC_VERSION > 40200 -# define UNORDERED_SET std::tr1::unordered_set -#elif COMPILER == COMPILER_GNU && GCC_VERSION >= 30000 -# define UNORDERED_SET __gnu_cxx::hash_set -#else -# define UNORDERED_SET std::hash_set -using std::hash_set; -#endif - -#endif diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h index b373f0459c9..84d0dc14eca 100644 --- a/src/server/shared/Logging/Appender.h +++ b/src/server/shared/Logging/Appender.h @@ -20,8 +20,7 @@ #include "Define.h" #include <time.h> -#include "Dynamic/UnorderedMap.h" - +#include <unordered_map> #include <string> // Values assigned have their equivalent in enum ACE_Log_Priority @@ -105,6 +104,6 @@ class Appender AppenderFlags flags; }; -typedef UNORDERED_MAP<uint8, Appender*> AppenderMap; +typedef std::unordered_map<uint8, Appender*> AppenderMap; #endif diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index 73c5601b95b..5fa638e2f40 100644 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -23,8 +23,8 @@ #include "Appender.h" #include "Logger.h" #include "LogWorker.h" -#include "Dynamic/UnorderedMap.h" +#include <unordered_map> #include <string> #include <ace/Singleton.h> @@ -34,8 +34,8 @@ class Log { friend class ACE_Singleton<Log, ACE_Thread_Mutex>; - typedef UNORDERED_MAP<std::string, Logger> LoggerMap; - typedef UNORDERED_MAP<std::string, Logger const*> CachedLoggerContainer; + typedef std::unordered_map<std::string, Logger> LoggerMap; + typedef std::unordered_map<std::string, Logger const*> CachedLoggerContainer; private: Log(); |