From ef8549c6a680f91d3bf44b024da94346d213512c Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 29 Jun 2014 18:42:49 +0200 Subject: DB/Misc: correct some trinity_string encoding By easy1, closes #11912 --- .../updates/world/ \t2014_06_29_02_world_misc.sql" | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "sql/updates/world/ \t2014_06_29_02_world_misc.sql" (limited to 'sql') diff --git "a/sql/updates/world/ \t2014_06_29_02_world_misc.sql" "b/sql/updates/world/ \t2014_06_29_02_world_misc.sql" new file mode 100644 index 00000000000..dd99a1f4bed --- /dev/null +++ "b/sql/updates/world/ \t2014_06_29_02_world_misc.sql" @@ -0,0 +1,27 @@ +-- +SET NAMES 'utf8'; +DELETE FROM `trinity_string` WHERE entry IN (453, 548, 549, 550, 714, 716, 749, 752, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 871, 879); +INSERT INTO `trinity_string` (entry, content_default) VALUES +(453,'│Player %s %s (guid: %u)'), +(548,'│ GM Mode active, Phase: -1'), +(549,'├─ Banned: (Type: %s, Reason: %s, Time: %s, By: %s)'), +(550,'├─ Muted: (Reason: %s, Time: %s, By: %s)'), +(714,'│ Account: %s (ID: %u), GMLevel: %u'), +(716,'│ Last Login: %s (Failed Logins: %u)'), +(749,'│ OS: %s - Latency: %u ms'), +(752,'│ Last IP: %s (Locked: %s)'), +(843,'│ Level: %u (%u/%u XP (%u XP left))'), +(844,'│ Race: %s %s, %s'), +(845,'│ Alive ?: %s'), +(846,'│ Phase: %u'), +(847,'│ Money: %ug%us%uc'), +(848,'│ Map: %s, Area: %s, Zone: %s'), +(849,'│ Guild: %s (ID: %u)'), +(850,'├─ Rank: %s'), +(851,'├─ Note: %s'), +(852,'├─ O. Note: %s'), +(853,'│ Played time: %s'), +(854,'│ Mails: %d Read/%u Total'), +(871,'│ Level: %u'), +(879,'└ Registration Email: %s - Email: %s'); +SET NAMES 'latin1'; -- cgit v1.2.3 From a1bbadbfc74debf37f715408aadad6e3fef79731 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 29 Jun 2014 19:28:47 +0200 Subject: Rename 2014_06_29_02_world_misc.sql to 2014_06_29_02_world_misc.sql --- .../updates/world/ \t2014_06_29_02_world_misc.sql" | 27 ---------------------- sql/updates/world/2014_06_29_02_world_misc.sql | 27 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 27 deletions(-) delete mode 100644 "sql/updates/world/ \t2014_06_29_02_world_misc.sql" create mode 100644 sql/updates/world/2014_06_29_02_world_misc.sql (limited to 'sql') diff --git "a/sql/updates/world/ \t2014_06_29_02_world_misc.sql" "b/sql/updates/world/ \t2014_06_29_02_world_misc.sql" deleted file mode 100644 index dd99a1f4bed..00000000000 --- "a/sql/updates/world/ \t2014_06_29_02_world_misc.sql" +++ /dev/null @@ -1,27 +0,0 @@ --- -SET NAMES 'utf8'; -DELETE FROM `trinity_string` WHERE entry IN (453, 548, 549, 550, 714, 716, 749, 752, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 871, 879); -INSERT INTO `trinity_string` (entry, content_default) VALUES -(453,'│Player %s %s (guid: %u)'), -(548,'│ GM Mode active, Phase: -1'), -(549,'├─ Banned: (Type: %s, Reason: %s, Time: %s, By: %s)'), -(550,'├─ Muted: (Reason: %s, Time: %s, By: %s)'), -(714,'│ Account: %s (ID: %u), GMLevel: %u'), -(716,'│ Last Login: %s (Failed Logins: %u)'), -(749,'│ OS: %s - Latency: %u ms'), -(752,'│ Last IP: %s (Locked: %s)'), -(843,'│ Level: %u (%u/%u XP (%u XP left))'), -(844,'│ Race: %s %s, %s'), -(845,'│ Alive ?: %s'), -(846,'│ Phase: %u'), -(847,'│ Money: %ug%us%uc'), -(848,'│ Map: %s, Area: %s, Zone: %s'), -(849,'│ Guild: %s (ID: %u)'), -(850,'├─ Rank: %s'), -(851,'├─ Note: %s'), -(852,'├─ O. Note: %s'), -(853,'│ Played time: %s'), -(854,'│ Mails: %d Read/%u Total'), -(871,'│ Level: %u'), -(879,'└ Registration Email: %s - Email: %s'); -SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_06_29_02_world_misc.sql b/sql/updates/world/2014_06_29_02_world_misc.sql new file mode 100644 index 00000000000..dd99a1f4bed --- /dev/null +++ b/sql/updates/world/2014_06_29_02_world_misc.sql @@ -0,0 +1,27 @@ +-- +SET NAMES 'utf8'; +DELETE FROM `trinity_string` WHERE entry IN (453, 548, 549, 550, 714, 716, 749, 752, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 871, 879); +INSERT INTO `trinity_string` (entry, content_default) VALUES +(453,'│Player %s %s (guid: %u)'), +(548,'│ GM Mode active, Phase: -1'), +(549,'├─ Banned: (Type: %s, Reason: %s, Time: %s, By: %s)'), +(550,'├─ Muted: (Reason: %s, Time: %s, By: %s)'), +(714,'│ Account: %s (ID: %u), GMLevel: %u'), +(716,'│ Last Login: %s (Failed Logins: %u)'), +(749,'│ OS: %s - Latency: %u ms'), +(752,'│ Last IP: %s (Locked: %s)'), +(843,'│ Level: %u (%u/%u XP (%u XP left))'), +(844,'│ Race: %s %s, %s'), +(845,'│ Alive ?: %s'), +(846,'│ Phase: %u'), +(847,'│ Money: %ug%us%uc'), +(848,'│ Map: %s, Area: %s, Zone: %s'), +(849,'│ Guild: %s (ID: %u)'), +(850,'├─ Rank: %s'), +(851,'├─ Note: %s'), +(852,'├─ O. Note: %s'), +(853,'│ Played time: %s'), +(854,'│ Mails: %d Read/%u Total'), +(871,'│ Level: %u'), +(879,'└ Registration Email: %s - Email: %s'); +SET NAMES 'latin1'; -- cgit v1.2.3 From 39140fe1ccb54442c4ba84692b6f1d1631ada64a Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sun, 29 Jun 2014 23:50:22 +0200 Subject: DB/Locale: Fix some locales problems Preparation for tdb release in soon soon (Fix first db errors) :P --- sql/updates/world/2014_04_21_06_world_locales_broadcast_text.sql | 4 ++++ sql/updates/world/2014_04_21_07_world_locales_item.sql | 4 ++++ sql/updates/world/2014_04_21_08_world_locales_item_set_names.sql | 4 ++++ sql/updates/world/2014_04_22_00_world_locales_gameobject.sql | 4 ++++ sql/updates/world/2014_04_22_01_world_locales_creature.sql | 4 ++++ sql/updates/world/2014_04_23_01_world_locales_quest.sql | 4 ++++ sql/updates/world/2014_04_23_04_world_locales_item.sql | 4 ++++ sql/updates/world/2014_04_24_00_world_locales_broadcast_text.sql | 4 ++++ sql/updates/world/2014_04_24_01_world_locales_gameobject.sql | 4 ++++ sql/updates/world/2014_04_26_01_world_locales_creature.sql | 4 ++++ sql/updates/world/2014_06_22_00_world_locales_creature.sql | 4 ++++ 11 files changed, 44 insertions(+) (limited to 'sql') diff --git a/sql/updates/world/2014_04_21_06_world_locales_broadcast_text.sql b/sql/updates/world/2014_04_21_06_world_locales_broadcast_text.sql index 214a80e72ca..a1401a2eefe 100644 --- a/sql/updates/world/2014_04_21_06_world_locales_broadcast_text.sql +++ b/sql/updates/world/2014_04_21_06_world_locales_broadcast_text.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + DROP TABLE IF EXISTS `locales_broadcast_text`; CREATE TABLE IF NOT EXISTS `locales_broadcast_text` ( `ID` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', @@ -73832,3 +73834,5 @@ INSERT INTO `locales_broadcast_text` (`ID`, `MaleText_loc1`, `MaleText_loc2`, `M (77369, '', '|TInterface\\Icons\\inv_misc_bomb_05:20|tVous êtes |cFFFF0000|Hspell:145996|h[Prêt à exploser]|h|r ! Utilisez |cFFFF0000|Hspell:146364|h[Larguer la bombe]|h|r pour les larguer !', '|TInterface\\Icons\\inv_misc_bomb_05:20|t Ihr wurdet |cFFFF0000|Hspell:145996|h[scharfgemacht]|h|r! Benutzt |cFFFF0000|Hspell:146364|h[Bombe werfen]|h|r, um sie loszuwerden!', '', '', '|TInterface\\Icons\\inv_misc_bomb_05:20|tTienes |cFFFF0000|Hspell:145996|h[Listo para explotar]|h|r! Utiliza |cFFFF0000|Hspell:146364|h[Lanzar bomba]|h|r para lanzarlas!', '', '|TInterface\\Icons\\inv_misc_bomb_05:20|tВы использовали способность|cFFFF0000|Hspell:145996|h[Готовность к взрыву]|h|r! Используйте |cFFFF0000|Hspell:146364|h[Бросок бомбы]|h|r, чтобы метнуть заряд в цель.', '', '', '', '', '', '', '', ''), (77371, '', 'Pour Hurlenfer, c’est la fin.$b$b$b$bQue voulez-vous d’autre, $r ?', 'Das ist das Ende von Höllschrei.$b$b$b$bWas jetzt, $R?', '', '', 'Eh''te es el final de Grito Infernal.$b$b$b$b¿Y ahora qué, $r?', '', 'С Адским Криком покончено.$b$b<Вол''джин тревожно смотрит на вас.>$b$bЧто будет дальше, $r?', '', '', '', '', '', '', '', ''), (77865, '', '|TInterface\\Icons\\achievement_arena_2v2_5:20|t$n a accepté de commencer le combat. Joueurs supplémentaires requis pour commencer : $8589w.', '|TInterface\\Icons\\achievement_arena_2v2_5:20|t$n hat zugestimmt, die Begegnung zu starten. Zusätzliche Spieler benötigt, um zu beginnen: $8589w.', '', '', '|TInterface\\Icons\\achievement_arena_2v2_5:20|t$n ha aceptado el encuentro. Jugadores adicionales necesarios para comenzar: $8589w.', '', '|TInterface\\Icons\\achievement_arena_2v2_5:20|t$n $gсогласился:согласилась; начать бой. Число недостающих игроков: $8589w.', '', '', '', '', '', '', '', ''); + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_21_07_world_locales_item.sql b/sql/updates/world/2014_04_21_07_world_locales_item.sql index 26fcbb6cdc0..c3cdea25531 100644 --- a/sql/updates/world/2014_04_21_07_world_locales_item.sql +++ b/sql/updates/world/2014_04_21_07_world_locales_item.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + TRUNCATE `locales_item`; INSERT INTO `locales_item` (`entry`, `name_loc1`, `name_loc2`, `name_loc3`, `name_loc4`, `name_loc5`, `name_loc6`, `name_loc7`, `name_loc8`, `description_loc1`, `description_loc2`, `description_loc3`, `description_loc4`, `description_loc5`, `description_loc6`, `description_loc7`, `description_loc8`) VALUES @@ -38287,3 +38289,5 @@ INSERT INTO `locales_item` (`entry`, `name_loc1`, `name_loc2`, `name_loc3`, `nam (54857, '', 'Petite lance de Bourbimus', 'Murkimus'' kleiner Speer', '', '', 'Pequeña lanza de Murkimus', '', 'Маленькое копье Мурчалия', '', 'Vous apprend à invoquer cette mascotte.', 'Lehrt Euch, wie man dieses Haustier beschwört.', '', '', 'Te enseña a invocar este compañero.', '', 'Учит призывать этого спутника.'), (54860, '', 'Fusée de tourisme X-53', 'X-53 Reiserakete', '', '', 'Cohete de paseo X-53', '', 'Прогулочная ракета X-53', '', 'Vous apprend à invoquer cette monture. Elle change selon l''endroit où vous vous trouvez et votre compétence de monte.', 'Lehrt Euch, wie man dieses Reittier beschwört. Dieses Reittier passt sich Eurer Reitfertigkeit und Eurem Aufenthaltsort an.', '', '', 'Te enseña a invocar esta montura. Cambia según tu habilidad en equitación y la zona en la que estés.', '', 'Обучает управлению этим средством передвижения. Свойства этого транспортного средства могут меняться в зависимости от вашего навыка верховой езды и местонахождения.'), (56806, '', 'Mini Thor', 'Mini-Thor', '', '', 'Mini thor', '', 'Игрушечный Тор', '', 'Vous apprend à invoquer le mini Thor.', 'Lehrt Euch, wie man einen winzigen Thor beschwört.', '', '', 'Te enseña a invocar un mini thor.', '', 'Учит призывать игрушечного Тора.'); + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_21_08_world_locales_item_set_names.sql b/sql/updates/world/2014_04_21_08_world_locales_item_set_names.sql index 5b55ca6d060..83fbc7c349f 100644 --- a/sql/updates/world/2014_04_21_08_world_locales_item_set_names.sql +++ b/sql/updates/world/2014_04_21_08_world_locales_item_set_names.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + TRUNCATE `locales_item_set_names`; INSERT INTO `locales_item_set_names` (`entry`, `name_loc1`, `name_loc2`, `name_loc3`, `name_loc4`, `name_loc5`, `name_loc6`, `name_loc7`, `name_loc8`) VALUES @@ -2490,3 +2492,5 @@ INSERT INTO `locales_item_set_names` (`entry`, `name_loc1`, `name_loc2`, `name_l (51774, '', 'Grand heaume de seigneur ymirjar', 'Großhelm des Ymirjarfürsten', '', '', 'Gran yelmo de señor Ymirjar', '', 'Великий шлем имирьярского повелителя'), (51775, '', 'Garde-jambes de seigneur ymirjar', 'Beinschützer des Ymirjarfürsten', '', '', 'Musleras de señor Ymirjar', '', 'Набедренники имирьярского повелителя'), (51776, '', 'Espauliers de seigneur ymirjar', 'Schulterstücke des Ymirjarfürsten', '', '', 'Espaldares de señor Ymirjar', '', 'Наплечье имирьярского повелителя'); + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_22_00_world_locales_gameobject.sql b/sql/updates/world/2014_04_22_00_world_locales_gameobject.sql index 7640918784e..fd4c09ae488 100644 --- a/sql/updates/world/2014_04_22_00_world_locales_gameobject.sql +++ b/sql/updates/world/2014_04_22_00_world_locales_gameobject.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + TRUNCATE `locales_gameobject`; INSERT INTO `locales_gameobject` (`entry`, `name_loc1`, `name_loc2`, `name_loc3`, `name_loc4`, `name_loc5`, `name_loc6`, `name_loc7`, `name_loc8`, `castbarcaption_loc1`, `castbarcaption_loc2`, `castbarcaption_loc3`, `castbarcaption_loc4`, `castbarcaption_loc5`, `castbarcaption_loc6`, `castbarcaption_loc7`, `castbarcaption_loc8`) VALUES @@ -19727,3 +19729,5 @@ INSERT INTO `locales_gameobject` (`entry`, `name_loc1`, `name_loc2`, `name_loc3` (203079, '', 'Œuf de dragon rouge (grand)', 'Großes Rotdrachenei', '', '', 'Huevo de dragón Rojo (grande)', '', 'Большое яйцо красного дракона', '', '', '', '', '', '', '', ''), (203080, '', 'Œuf de dragon rouge brisé (grand)', 'Zerbrochenes großes Rotdrachenei', '', '', 'Huevo de dragón Rojo roto (grande)', '', 'Большое разбитое яйцо красного дракона', '', '', '', '', '', '', '', ''), (203624, '', 'Anneau du Crépuscule d''Halion', 'Zwielichtring von Halion', '', '', 'Anillo Crepuscular de Halion', '', 'Сумеречное кольцо Халиона', '', '', '', '', '', '', '', ''); + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_22_01_world_locales_creature.sql b/sql/updates/world/2014_04_22_01_world_locales_creature.sql index a0576578eb4..2cfe1c35eac 100644 --- a/sql/updates/world/2014_04_22_01_world_locales_creature.sql +++ b/sql/updates/world/2014_04_22_01_world_locales_creature.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + TRUNCATE `locales_creature`; INSERT INTO `locales_creature` (`entry`, `name_loc1`, `name_loc2`, `name_loc3`, `name_loc4`, `name_loc5`, `name_loc6`, `name_loc7`, `name_loc8`, `subname_loc1`, `subname_loc2`, `subname_loc3`, `subname_loc4`, `subname_loc5`, `subname_loc6`, `subname_loc7`, `subname_loc8`) VALUES @@ -27350,3 +27352,5 @@ INSERT INTO `locales_creature` (`entry`, `name_loc1`, `name_loc2`, `name_loc3`, (40870, '', 'Dragon rubis', 'Rubindrache', '', '', 'Dragón rubí', '', 'Рубиновый дракон', '', '', '', '', '', '', '', ''), (41839, '', '[DND] Controller', '[DND] Controller', '', '', '[DND] Controller', '', '[DND] Controller', '', '', '', '', '', '', '', ''), (42078, '', 'Mini Thor', 'Mini-Thor', '', '', 'Mini thor', '', 'Игрушечный Тор', '', 'Le destructeur', 'Der Zerstörer', '', '', 'El Destructor', '', 'Разрушитель'); + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_23_01_world_locales_quest.sql b/sql/updates/world/2014_04_23_01_world_locales_quest.sql index b191439ea52..b19d251a4dd 100644 --- a/sql/updates/world/2014_04_23_01_world_locales_quest.sql +++ b/sql/updates/world/2014_04_23_01_world_locales_quest.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + TRUNCATE `locales_quest`; INSERT INTO `locales_quest` (`Id`, `Title_loc1`, `Title_loc2`, `Title_loc3`, `Title_loc4`, `Title_loc5`, `Title_loc6`, `Title_loc7`, `Title_loc8`, `Details_loc1`, `Details_loc2`, `Details_loc3`, `Details_loc4`, `Details_loc5`, `Details_loc6`, `Details_loc7`, `Details_loc8`, `Objectives_loc1`, `Objectives_loc2`, `Objectives_loc3`, `Objectives_loc4`, `Objectives_loc5`, `Objectives_loc6`, `Objectives_loc7`, `Objectives_loc8`, `OfferRewardText_loc1`, `OfferRewardText_loc2`, `OfferRewardText_loc3`, `OfferRewardText_loc4`, `OfferRewardText_loc5`, `OfferRewardText_loc6`, `OfferRewardText_loc7`, `OfferRewardText_loc8`, `RequestItemsText_loc1`, `RequestItemsText_loc2`, `RequestItemsText_loc3`, `RequestItemsText_loc4`, `RequestItemsText_loc5`, `RequestItemsText_loc6`, `RequestItemsText_loc7`, `RequestItemsText_loc8`, `EndText_loc1`, `EndText_loc2`, `EndText_loc3`, `EndText_loc4`, `EndText_loc5`, `EndText_loc6`, `EndText_loc7`, `EndText_loc8`, `CompletedText_loc1`, `CompletedText_loc2`, `CompletedText_loc3`, `CompletedText_loc4`, `CompletedText_loc5`, `CompletedText_loc6`, `CompletedText_loc7`, `CompletedText_loc8`, `ObjectiveText1_loc1`, `ObjectiveText1_loc2`, `ObjectiveText1_loc3`, `ObjectiveText1_loc4`, `ObjectiveText1_loc5`, `ObjectiveText1_loc6`, `ObjectiveText1_loc7`, `ObjectiveText1_loc8`, `ObjectiveText2_loc1`, `ObjectiveText2_loc2`, `ObjectiveText2_loc3`, `ObjectiveText2_loc4`, `ObjectiveText2_loc5`, `ObjectiveText2_loc6`, `ObjectiveText2_loc7`, `ObjectiveText2_loc8`, `ObjectiveText3_loc1`, `ObjectiveText3_loc2`, `ObjectiveText3_loc3`, `ObjectiveText3_loc4`, `ObjectiveText3_loc5`, `ObjectiveText3_loc6`, `ObjectiveText3_loc7`, `ObjectiveText3_loc8`, `ObjectiveText4_loc1`, `ObjectiveText4_loc2`, `ObjectiveText4_loc3`, `ObjectiveText4_loc4`, `ObjectiveText4_loc5`, `ObjectiveText4_loc6`, `ObjectiveText4_loc7`, `ObjectiveText4_loc8`) VALUES @@ -10178,3 +10180,5 @@ INSERT INTO `locales_quest` (`Id`, `Title_loc1`, `Title_loc2`, `Title_loc3`, `Ti (26013, '', 'Assaut sur le sanctum', 'Angriff auf das Sanktum', '', '', 'Asalto al Sagrario', 'Asalto al Sagrario', 'Нападение на святилище', '', '$R, quelque chose de terrible est survenu dans le sanctum Rubis, sous le temple.$B$BL’entrée du sanctum a été saccagée, et ses gardiens sauvagement assassinés. Nous avons envoyé des éclaireurs pour comprendre ce qui s’est passé, mais aucun d’entre eux n’est revenu. Je crains malheureusement le pire.$B$BEntrez dans le sanctum Rubis et découvrez ce qui est arrivé au foyer de mon Vol. Quand nous aurons plus d’informations, nous pourrons préparer nos plans.', '$R, etwas Schreckliches ist im Rubinsanktum unterhalb des Tempels geschehen.$B$BDer Eingang zum Sanktum liegt in Ruinen und seine Wächter sind auf grausame Art und Weise erschlagen worden. Wir haben Kundschafter ausgesandt, um der Sache auf den Grund zu gehen, aber sie sind nicht zurückgekommen. Nun befürchte ich das Schlimmste.$B$BBetretet das Rubinsanktum und bringt in Erfahrung, was in der Heimat meines Schwarmes passiert ist. Sobald wir mehr Informationen haben, können wir unsere nächsten Schritte entsprechend planen.', '', '', '$R, algo terrible ha ocurrido dentro del Sagrario Rubí, bajo el templo.$B$BLa entrada al Sagrario está en ruinas y sus guardianes han muerto de forma violenta. Enviamos exploradores a investigar, pero no han regresado. No puedo evitar temerme lo peor.$B$BEntra al Sagrario Rubí y descubre qué ha sucedido en el hogar de mi Vuelo. Una vez que tengamos más información, podremos planear nuestros siguientes pasos.', '$R, algo terrible ha ocurrido dentro del Sagrario Rubí, bajo el templo.$B$BLa entrada al Sagrario está en ruinas y sus guardianes han muerto de forma violenta. Enviamos exploradores a investigar, pero no han regresado. No puedo evitar temerme lo peor.$B$BEntra al Sagrario Rubí y descubre qué ha sucedido en el hogar de mi Vuelo. Una vez que tengamos más información, podremos planear nuestros siguientes pasos.', '$R, в Рубиновом святилище под храмом произошло нечто ужасное!$B$BГлавный вход разрушен, стражи мертвы... Мы послали туда разведчиков, но никто не вернулся живым. Боюсь, нам надо готовиться к худшему.$B$BОтправляйся в Рубиновое святилище и выясни, кто осмелился поднять руку на дом моего племени. Как только у нас будет больше информации, мы сможем спланировать дальнейшие действия.', '', 'Menez une enquête au Sanctum Rubis, sous le Temple du Repos du ver.', 'Untersucht das Rubinsanktum unterhalb des Wyrmruhtempels.', '', '', 'Investiga el Sagrario Rubí bajo el Templo del Reposo del Dragón.', 'Investiga el Sagrario Rubí bajo el Templo del Reposo del Dragón.', 'Осмотрите Рубиновое святилище под храмом Драконьего Покоя.', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Menez une enquête au sanctum Rubis, sous le temple du Repos du ver.', 'Untersucht das Rubinsanktum unterhalb des Wyrmruhtempels.', '', '', 'Investiga el Sagrario Rubí bajo el Templo del Reposo del Dragón.', 'Investiga el Sagrario Rubí bajo el Templo del Reposo del Dragón.', 'Осмотрите Рубиновое святилище под храмом Драконьего Покоя.', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''); INSERT INTO `locales_quest` (`Id`, `Title_loc1`, `Title_loc2`, `Title_loc3`, `Title_loc4`, `Title_loc5`, `Title_loc6`, `Title_loc7`, `Title_loc8`, `Details_loc1`, `Details_loc2`, `Details_loc3`, `Details_loc4`, `Details_loc5`, `Details_loc6`, `Details_loc7`, `Details_loc8`, `Objectives_loc1`, `Objectives_loc2`, `Objectives_loc3`, `Objectives_loc4`, `Objectives_loc5`, `Objectives_loc6`, `Objectives_loc7`, `Objectives_loc8`, `OfferRewardText_loc1`, `OfferRewardText_loc2`, `OfferRewardText_loc3`, `OfferRewardText_loc4`, `OfferRewardText_loc5`, `OfferRewardText_loc6`, `OfferRewardText_loc7`, `OfferRewardText_loc8`, `RequestItemsText_loc1`, `RequestItemsText_loc2`, `RequestItemsText_loc3`, `RequestItemsText_loc4`, `RequestItemsText_loc5`, `RequestItemsText_loc6`, `RequestItemsText_loc7`, `RequestItemsText_loc8`, `EndText_loc1`, `EndText_loc2`, `EndText_loc3`, `EndText_loc4`, `EndText_loc5`, `EndText_loc6`, `EndText_loc7`, `EndText_loc8`, `CompletedText_loc1`, `CompletedText_loc2`, `CompletedText_loc3`, `CompletedText_loc4`, `CompletedText_loc5`, `CompletedText_loc6`, `CompletedText_loc7`, `CompletedText_loc8`, `ObjectiveText1_loc1`, `ObjectiveText1_loc2`, `ObjectiveText1_loc3`, `ObjectiveText1_loc4`, `ObjectiveText1_loc5`, `ObjectiveText1_loc6`, `ObjectiveText1_loc7`, `ObjectiveText1_loc8`, `ObjectiveText2_loc1`, `ObjectiveText2_loc2`, `ObjectiveText2_loc3`, `ObjectiveText2_loc4`, `ObjectiveText2_loc5`, `ObjectiveText2_loc6`, `ObjectiveText2_loc7`, `ObjectiveText2_loc8`, `ObjectiveText3_loc1`, `ObjectiveText3_loc2`, `ObjectiveText3_loc3`, `ObjectiveText3_loc4`, `ObjectiveText3_loc5`, `ObjectiveText3_loc6`, `ObjectiveText3_loc7`, `ObjectiveText3_loc8`, `ObjectiveText4_loc1`, `ObjectiveText4_loc2`, `ObjectiveText4_loc3`, `ObjectiveText4_loc4`, `ObjectiveText4_loc5`, `ObjectiveText4_loc6`, `ObjectiveText4_loc7`, `ObjectiveText4_loc8`) VALUES (26034, '', 'Le destructeur du Crépuscule', 'Der Zwielichtzerstörer', '', '', 'El Destructor del Crepúsculo', 'El Destructor del Crepúsculo', 'Сумеречный разрушитель', '', 'Ce n’était pas une attaque téméraire, mais plutôt une frappe soigneusement orchestrée contre le cœur du Vol draconique rouge.$B$BZarithrian, sur ce piton, là-bas, supervise l’assaut, mais le véritable chef de cette force est un dragon du Crépuscule arrogant et puissant nommé Halion. On n''avait plus vu de rejeton adulte issu des expériences malsaines de Sinestra depuis Dargonax.$B$BTuez-le, $n, et quand l’invasion aura été complètement repoussée, allez raconter à Krasus tout ce que vous avez vu ici.', 'Dies war kein leichtfertiger Angriff, sondern vielmehr ein sorgsam inszenierter Schlag gegen das Herz des roten Drachenschwarms.$B$BZarithrian, der sich auf dem Felsvorsprung dort drüben befindet, überwacht den Angriff, doch ist der wahre Anführer ein dreister und mächtiger Zwielichtdrache namens Halion. Seit Dargonax ist kein ausgewachsenes Exemplar der Brut aus Sinestras verdorbenen Experimenten mehr gesichtet worden.$B$BTötet ihn, $n. Sobald es Euch gelungen ist, diese Invasion zurückzudrängen, meldet Ihr Euch bei Krasus und berichtet ihm, was Ihr hier gesehen habt.', '', '', 'No se trató de un ataque imprudente, sino de un ataque bien organizado contra el corazón del Vuelo Rojo.$B$BZarithrian, en la cima de ahí arriba, está vigilando el asalto, pero el verdadero líder de esta fuerza es un dragón Crepuscular valiente y poderoso llamado Halion. Desde Dargonax no se había visto a ningún engendro adulto de los experimentos retorcidos de Sinestra.$B$BMátalo, $n, y cuando se haya repelido totalmente la invasión, informa a Krasus sobre todo lo que has visto aquí.', 'No se trató de un ataque imprudente, sino de un ataque bien organizado contra el corazón del Vuelo Rojo.$B$BZarithrian, en la cima de ahí arriba, está vigilando el asalto, pero el verdadero líder de esta fuerza es un dragón Crepuscular valiente y poderoso llamado Halion. Desde Dargonax no se había visto a ningún engendro adulto de los experimentos retorcidos de Sinestra.$B$BMátalo, $n, y cuando se haya repelido totalmente la invasión, informa a Krasus sobre todo lo que has visto aquí.', 'Нет, это было не случайное нападение, а организованная атака на род красных драконов.$B$BЯ вижу Заритриана, наблюдающего за битвой с вершины холма, но истинный лидер захватчиков – могущественный сумеречный дракон Халион. В первый раз после появления Даргонакса мы столкнулись со взрослым отпрыском Зловестины.$B$BУбей его, $n, изгони захватчиков и сообщи Красу обо всем, что ты здесь $Gвидел:видела;.', '', 'Détruisez Halion et repoussez les envahisseurs qui ont investi le Sanctum Rubis.', 'Besiegt Halion und drängt die Invasion des Rubinsanktums zurück.', '', '', 'Derrota a Halion y repele la invasión del Sagrario Rubí.', 'Derrota a Halion y repele la invasión del Sagrario Rubí.', 'Победите Халиона и отразите нападение на Рубиновое святилище.', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Faites votre rapport à Krasus, au sommet du temple du Repos du ver.', 'Erstattet Krasus auf dem Dach des Wyrmruhtempels Bericht.', '', '', 'Informa a: Krasus. Zona: Parte superior del Templo del Reposo del Dragón.', 'Informa a: Krasus. Zona: Parte superior del Templo del Reposo del Dragón.', 'Вернитесь к Красу на вершину храма Драконьего Покоя.', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''); + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_23_04_world_locales_item.sql b/sql/updates/world/2014_04_23_04_world_locales_item.sql index 5b0e08d531b..f4b7831b8dd 100644 --- a/sql/updates/world/2014_04_23_04_world_locales_item.sql +++ b/sql/updates/world/2014_04_23_04_world_locales_item.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + UPDATE `locales_item` SET `name_loc1`='마틴 퓨리', `name_loc4`='马丁之怒', `name_loc5`='馬汀烈怒', `name_loc7`='Martin Furia' WHERE `entry`=17; UPDATE `locales_item` SET `name_loc1`='낡은 쇼트소드', `name_loc4`='破损的短剑', `name_loc5`='破損的短劍', `name_loc7`='Espada corta desgastada' WHERE `entry`=25; UPDATE `locales_item` SET `name_loc1`='구부러진 지팡이', `name_loc4`='弯曲的法杖', `name_loc5`='彎曲法杖', `name_loc7`='Bastón doblado' WHERE `entry`=35; @@ -38109,3 +38111,5 @@ UPDATE `locales_item` SET `name_loc1`='꼬마 해체자', `name_loc4`='小拆', UPDATE `locales_item` SET `name_loc1`='머키무스의 작은 창', `name_loc4`='莫叽姆斯的小矛', `name_loc5`='魚人穆斯的小矛', `name_loc7`='Pequeña lanza de Murkimus', `description_loc1`='애완동물 친구를 소환하는 법을 배웁니다.', `description_loc4`='教你学会召唤这种小伙伴。', `description_loc5`='教你學會如何召喚這個夥伴。', `description_loc7`='Te enseña a invocar este compañero.' WHERE `entry`=54857; UPDATE `locales_item` SET `name_loc1`='X-53 관광 로켓', `name_loc4`='X-53型观光火箭', `name_loc5`='X-53型觀光火箭', `name_loc7`='Cohete de paseo X-53', `description_loc1`='탈것 소환하는 법을 배웁니다. 타기 숙련도와 위치에 따라 달라지는 탈것입니다.', `description_loc4`='教你学会召唤这种坐骑。这种坐骑的速度会根据你的骑术等级和所在区域改变。', `description_loc5`='教你學會如何召喚這個坐騎。此坐騎將隨著你的騎術技能和地點而改變。', `description_loc7`='Te enseña a invocar esta montura. Cambia según tu habilidad en equitación y la zona en la que estés.' WHERE `entry`=54860; UPDATE `locales_item` SET `name_loc1`='꼬마 토르', `name_loc4`='迷你雷神', `name_loc5`='迷你雷神', `name_loc7`='Mini thor', `description_loc1`='꼬마 토르 소환하는 법을 배웁니다.', `description_loc4`='教会你如何召唤迷你雷神。', `description_loc5`='教你學會如何召喚迷你雷神。', `description_loc7`='Te enseña a invocar un mini thor.' WHERE `entry`=56806; + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_24_00_world_locales_broadcast_text.sql b/sql/updates/world/2014_04_24_00_world_locales_broadcast_text.sql index abb838cd62c..92c0e75fd8a 100644 --- a/sql/updates/world/2014_04_24_00_world_locales_broadcast_text.sql +++ b/sql/updates/world/2014_04_24_00_world_locales_broadcast_text.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + UPDATE `locales_broadcast_text` SET `MaleText_loc1`='제발, 제발 좀 도와주시오! 난 여기 갇혀 있소!', `MaleText_loc4`='救命啊!我动不了了!', `MaleText_loc5`='救命啊!我動不了了!', `MaleText_loc7`='¡Socorro! ¡Socorro! ¡Soy víctima de represión!' WHERE `ID`=1; UPDATE `locales_broadcast_text` SET `MaleText_loc1`='중대.. 제자리에 서! ... 정렬!', `MaleText_loc4`='全队……立正!……集合!', `MaleText_loc5`='全體...立正!...集合!', `MaleText_loc7`='Compañía... ¡ALTO! ¡Formen FILAS!' WHERE `ID`=3; UPDATE `locales_broadcast_text` SET `MaleText_loc1`='앞으로... 가!', `MaleText_loc4`='前进……前进!', `MaleText_loc5`='起步...走!!', `MaleText_loc7`='Adelante... ¡¡MARCHEN!!' WHERE `ID`=4; @@ -78650,3 +78652,5 @@ UPDATE `locales_broadcast_text` SET `MaleText_loc1`='볼진은 정말 보통이 UPDATE `locales_broadcast_text` SET `MaleText_loc1`='|TInterface\\Icons\\inv_misc_bomb_05:20|t |cFFFF0000|Hspell:145996|h[폭파 준비 완료]|h|r! |cFFFF0000|Hspell:146364|h[폭탄 투척]|h|r으로 폭탄을 던지십시오!', `MaleText_loc4`='|TInterface\\Icons\\inv_misc_bomb_05:20|t你身后被|cFFFF0000|Hspell:145996|h[设置炸弹]|h|r了!快使用|cFFFF0000|Hspell:146364|h[投掷炸弹]|h|r扔掉它们!', `MaleText_loc5`='|TInterface\\Icons\\inv_misc_bomb_05:20|t你獲得|cFFFF0000|Hspell:145996|h[引爆]|h|r!使用|cFFFF0000|Hspell:146364|h[投擲炸彈]|h|r來投擲炸彈!', `MaleText_loc7`='|TInterfaceIconsinv_misc_bomb_05:20|tTienes |cFFFF0000|Hspell:145996|h[Listo para explotar]|h|r! Utiliza |cFFFF0000|Hspell:146364|h[Lanzar bomba]|h|r para lanzarlas!' WHERE `ID`=77369; UPDATE `locales_broadcast_text` SET `MaleText_loc1`='헬스크림의 최후로군.$b$b<경계하는 눈길로 당신을 바라보는 볼진>$b$b$r|1이여;여;, 앞으로는 어쩔 셈인가?', `MaleText_loc4`='地狱咆哮已经完蛋了。$b$b<沃金警惕地看着你。>$b$b接下来呢,$r?', `MaleText_loc5`='這就是地獄吼最終的下場。$b$b<沃金小心翼翼地看著你。>$b$b下一步是什麼,$r?', `MaleText_loc7`='Eh''te es el final de Grito Infernal.$b$b$b$b¿Y ahora qué, $r?' WHERE `ID`=77371; UPDATE `locales_broadcast_text` SET `MaleText_loc1`='|TInterface\\Icons\\achievement_arena_2v2_5:20|t$n|1이;가; 전투를 시작하려고 합니다. 전투 시작에 필요한 추가 인원: $8589w', `MaleText_loc4`='|TInterface\\Icons\\achievement_arena_2v2_5:20|t$n已同意开始战斗。另外还需要$8589w名玩家才可开始。', `MaleText_loc5`='|TInterface\\Icons\\achievement_arena_2v2_5:20|t$n同意進行戰鬥。另外還需要$8589w名玩家才可開始。', `MaleText_loc7`='|TInterfaceIconsachievement_arena_2v2_5:20|t$n ha aceptado el encuentro. Jugadores adicionales necesarios para comenzar: $8589w.' WHERE `ID`=77865; + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_24_01_world_locales_gameobject.sql b/sql/updates/world/2014_04_24_01_world_locales_gameobject.sql index 3ab380a7a9e..b929eb0eed5 100644 --- a/sql/updates/world/2014_04_24_01_world_locales_gameobject.sql +++ b/sql/updates/world/2014_04_24_01_world_locales_gameobject.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + UPDATE `locales_gameobject` SET `name_loc1`='오래된 사자상', `name_loc4`='陈旧的石狮子', `name_loc5`='老舊獅子雕像', `name_loc7`='Estatua de león antigua' WHERE `entry`=31; UPDATE `locales_gameobject` SET `name_loc1`='가라앉은 상자', `name_loc4`='沉没的箱子', `name_loc5`='沉沒的箱子', `name_loc7`='Cofre sumergido' WHERE `entry`=32; UPDATE `locales_gameobject` SET `name_loc1`='잠긴 궤짝', `name_loc4`='锁住的箱子', `name_loc5`='鎖住的箱子', `name_loc7`='Cofre cerrado' WHERE `entry`=33; @@ -19666,3 +19668,5 @@ UPDATE `locales_gameobject` SET `name_loc1`='불타는 나무', `name_loc4`='燃 UPDATE `locales_gameobject` SET `name_loc1`='붉은 용 알 (대형)', `name_loc4`='Red Dragon Egg (Large)', `name_loc5`='紅龍蛋(大)', `name_loc7`='Huevo de dragón Rojo (grande)' WHERE `entry`=203079; UPDATE `locales_gameobject` SET `name_loc1`='깨진 붉은용 알 (대형)', `name_loc4`='Broken Red Dragon Egg (Large)', `name_loc5`='破掉的紅龍蛋(大)', `name_loc7`='Huevo de dragón Rojo roto (grande)' WHERE `entry`=203080; UPDATE `locales_gameobject` SET `name_loc1`='할리온 황혼의 고리', `name_loc4`='海里昂暮光之环', `name_loc5`='海萊恩暮光環', `name_loc7`='Anillo Crepuscular de Halion' WHERE `entry`=203624; + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_04_26_01_world_locales_creature.sql b/sql/updates/world/2014_04_26_01_world_locales_creature.sql index c49e37f0bf3..4e718cd8ed3 100644 --- a/sql/updates/world/2014_04_26_01_world_locales_creature.sql +++ b/sql/updates/world/2014_04_26_01_world_locales_creature.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + UPDATE `locales_creature` SET `name_loc1`='굶주린 시체', `name_loc4`='食腐者', `name_loc5`='食腐者', `name_loc7`='Comecarnes' WHERE `entry`=3; UPDATE `locales_creature` SET `name_loc1`='코볼트 졸개', `name_loc4`='狗头人歹徒', `name_loc5`='狗頭人惡黨', `name_loc7`='Alimaña kóbold' WHERE `entry`=6; UPDATE `locales_creature` SET `name_loc1`='퀘스트기버 베니', `name_loc4`='Benny Questgiver', `name_loc5`='本尼任務給予者', `name_loc7`='Asignador Benny', `subname_loc1`='시험용', `subname_loc4`='NPC', `subname_loc5`='測試', `subname_loc7`='PNJ' WHERE `entry`=19; @@ -27245,3 +27247,5 @@ UPDATE `locales_creature` SET `name_loc1`='루비 비룡', `name_loc4`='红玉 UPDATE `locales_creature` SET `name_loc1`='루비 용', `name_loc4`='红玉巨龙', `name_loc5`='晶紅龍', `name_loc7`='Dragón rubí' WHERE `entry`=40870; UPDATE `locales_creature` SET `name_loc1`='[DND] 제어기', `name_loc4`='[DND] Controller', `name_loc5`='[DND]控制器', `name_loc7`='[DND] Controller' WHERE `entry`=41839; UPDATE `locales_creature` SET `name_loc1`='꼬마 토르', `name_loc4`='迷你雷神', `name_loc5`='迷你雷神', `name_loc7`='Mini thor', `subname_loc1`='파괴자', `subname_loc4`='无坚不摧', `subname_loc5`='毀滅者', `subname_loc7`='El Destructor' WHERE `entry`=42078; + +SET NAMES 'latin1'; diff --git a/sql/updates/world/2014_06_22_00_world_locales_creature.sql b/sql/updates/world/2014_06_22_00_world_locales_creature.sql index d24a4dd1f33..5dc00dfa692 100644 --- a/sql/updates/world/2014_06_22_00_world_locales_creature.sql +++ b/sql/updates/world/2014_06_22_00_world_locales_creature.sql @@ -1,3 +1,5 @@ +SET NAMES 'utf8'; + -- Male frFR UPDATE `locales_creature` SET `name_loc2`='Contrebandier défias' WHERE `entry`=95; UPDATE `locales_creature` SET `name_loc2`='Eclaireur défias' WHERE `entry`=121; @@ -3774,3 +3776,5 @@ UPDATE `locales_creature` SET `name_loc7`='Espía creciente de la muerte captura -- ruRU UPDATE `locales_creature` SET `name_loc8`='Жрец Алого ордена' WHERE `entry`=10608; UPDATE `locales_creature` SET `name_loc8`='Разведчик Похитителей Солнца' WHERE `entry`=30233; + +SET NAMES 'latin1'; -- cgit v1.2.3 From 4a05a082fd671099463049552170ddbeaff6a257 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 1 Jul 2014 12:18:16 +0200 Subject: DB/Quest: The Left Piece of Lord Valthalak's Amulet By dr-j, closes #11753 --- sql/updates/world/2014_07_01_00_world_misc.sql | 75 ++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 sql/updates/world/2014_07_01_00_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_01_00_world_misc.sql b/sql/updates/world/2014_07_01_00_world_misc.sql new file mode 100644 index 00000000000..ae9ffafe986 --- /dev/null +++ b/sql/updates/world/2014_07_01_00_world_misc.sql @@ -0,0 +1,75 @@ +-- +SET @Guid := 14218; + +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI', `ScriptName`='' WHERE `entry`IN(181045,181051); +DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`IN(181045,181051); + +DELETE FROM `gameobject` WHERE `id` IN(181096,181048); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@Guid,181096,429,1,1,263.38,-452.69,-119.96,0,0,0,0,0,180,0,1), +(@Guid+1,181096,229,1,1,-23.97,-451.98,-18.64,0,0,0,0,0,180,0,1), +(@Guid+2,181096,289,1,1,-3.82,141.88,83.9,0,0,0,0,0,180,0,1), +(@Guid+3,181096,229,1,1,25.92,-537.7,110.93,0,0,0,0,0,180,0,1), +(@Guid+4,181096,329,1,1,3423.47,-3055.73,136.499,6.00568,0,0,0.138306,-0.990389,300,0,1), +(@Guid+5, 181048, 329, 1, 1, 3423.47, -3055.73, 136.499, 6.00568, 0, 0, 0.138306, -0.990389, 300, 0, 1); + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(181045, 1, 0 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,45841,16044,0,0,0,0,0, 'Brazier of Beckoning - On Spawn - Set Data Mor Grayhoof Trigger'), +(181045, 1, 1 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,48937,16047,0,0,0,0,0, 'Brazier of Beckoning - On Spawn - Set Data Kormok Trigger'), +(181045, 1, 2 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,84386,16045,0,0,0,0,0, 'Brazier of Beckoning - On Spawn - Set Data Isalien Trigger'), +(181045, 1, 3 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,53937,16046,0,0,0,0,0, 'Brazier of Beckoning - On Spawn - Set Data Jarien and Sothos Trigger'), +(181045, 1, 4 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,137927,16048,0,0,0,0,0, 'Brazier of Beckoning - On Spawn - Set Data Lord Valthalak Trigger'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=181045; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 181045, 1, 0, 23, 1, 1583, 0, 0, 0, 0, 0, '', 'Brazier of Beckoning only run SAI in Blackrock Spire'), +(22, 2, 181045, 1, 0, 23, 1, 2057, 0, 0, 0, 0, 0, '', 'Brazier of Beckoning only run SAI in Scholomance'), +(22, 3, 181045, 1, 0, 23, 1, 2557, 0, 0, 0, 0, 0, '', 'Brazier of Beckoning only run SAI in Dire Maul'), +(22, 4, 181045, 1, 0, 23, 1, 2017, 0, 0, 0, 0, 0, '', 'Brazier of Beckoning only run SAI in Stratholme'), +(22, 5, 181045, 1, 0, 23, 1, 1583, 0, 0, 0, 0, 0, '', 'Brazier of Beckoning only run SAI in Blackrock Spire'); + +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(181051, 1, 0 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,45841,16044,0,0,0,0,0, 'Brazier of Invocation - On Spawn - Set Data Mor Grayhoof Trigger'), +(181051, 1, 1 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,48937,16047,0,0,0,0,0, 'Brazier of Invocation - On Spawn - Set Data Kormok Trigger'), +(181051, 1, 2 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,84386,16045,0,0,0,0,0, 'Brazier of Invocation - On Spawn - Set Data Isalien Trigger'), +(181051, 1, 3 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,53937,16046,0,0,0,0,0, 'Brazier of Invocation - On Spawn - Set Data Jarien and Sothos Trigger'), +(181051, 1, 4 ,0, 11, 0, 100, 0, 0, 0, 0,0,45,1,1,0,0,0,0,10,137927,16048,0,0,0,0,0, 'Brazier of Invocation - On Spawn - Set Data Lord Valthalak Trigger'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=181051; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 181051, 1, 0, 23, 1, 1583, 0, 0, 0, 0, 0, '', 'Brazier of Invocation only run SAI in Blackrock Spire'), +(22, 2, 181051, 1, 0, 23, 1, 2057, 0, 0, 0, 0, 0, '', 'Brazier of Invocation only run SAI in Scholomance'), +(22, 3, 181051, 1, 0, 23, 1, 2557, 0, 0, 0, 0, 0, '', 'Brazier of Invocation only run SAI in Dire Maul'), +(22, 4, 181051, 1, 0, 23, 1, 2017, 0, 0, 0, 0, 0, '', 'Brazier of Invocation only run SAI in Stratholme'), +(22, 5, 181051, 1, 0, 23, 1, 1583, 0, 0, 0, 0, 0, '', 'Brazier of Invocation only run SAI in Blackrock Spire'); + +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=16044; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =16044; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16044, 0, 0, 0, 38, 0, 100, 1, 1, 1, 0, 0, 12, 16080, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Mor Grayhoof Trigger - On Data Set - Spawn Mor Grayhoof'); + +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=16045; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =16045; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16045, 0, 0, 0, 38, 0, 100, 1, 1, 1, 0, 0, 12, 16097, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Isalien Trigger - On Data Set - Spawn Isalien'); + +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=16046; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =16046; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16046, 0, 0, 1, 38, 0, 100, 1, 1, 1, 0, 0, 12, 16101, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jarien and Sothos Trigger - On Data Set - Spawn Jarien'), +(16046, 0, 1, 0, 61, 0, 100, 1, 1, 1, 0, 0, 12, 16102, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Jarien and Sothos Trigger - Linked with Previous Event - Spawn Sothos'); + +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=16047; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =16047; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16047, 0, 0, 0, 38, 0, 100, 1, 1, 1, 0, 0, 12, 16118, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Kormok Trigger - On Data Set - Spawn Kormok'); + +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=16048; + +DELETE FROM `smart_scripts` WHERE `entryorguid` =16048; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16048, 0, 0, 0, 38, 0, 100, 1, 1, 1, 0, 0, 12, 16042, 8, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lord Valthalak Trigger - On Data Set - Spawn Lord Valthalak'); -- cgit v1.2.3 From d4cec6b397839ee7ff8bc501c5069dad31787116 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 1 Jul 2014 16:14:14 +0200 Subject: DB/Misc: Fix some startup errors By dr-j --- sql/updates/world/2014_07_01_01_world_misc.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2014_07_01_01_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_01_01_world_misc.sql b/sql/updates/world/2014_07_01_01_world_misc.sql new file mode 100644 index 00000000000..9806235da58 --- /dev/null +++ b/sql/updates/world/2014_07_01_01_world_misc.sql @@ -0,0 +1,7 @@ +-- +UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=48830 WHERE `entryorguid`=27225 AND `source_type`=0 AND `id`=0 AND `link`=1; +UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=48829 WHERE `entryorguid`=27226 AND `source_type`=0 AND `id`=0 AND `link`=1; +UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=48832 WHERE `entryorguid`=27229 AND `source_type`=0 AND `id`=0 AND `link`=1; +UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=48831 WHERE `entryorguid`=27224 AND `source_type`=0 AND `id`=0 AND `link`=1; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=49734 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=31 AND `ConditionTarget`=0 AND `ConditionValue1`=3 AND `ConditionValue2`=27851 AND `ConditionValue3`=0; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (69548,69542,69544,69543); -- cgit v1.2.3 From 2a3546ca36468b81d673bdb27315006144af3165 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 1 Jul 2014 17:20:48 +0200 Subject: Core/Skills: Use SkillLineAbility.dbc to determine player initial spells - skill assignment done in a new table `playercreateinfo_skills` * Removed DK start skill hacks * Resolved missing skills in character skill tab Closes #12311 --- .../2014_07_01_00_characters_character_skills.sql | 4 + ...2014_07_01_02_world playercreateinfo_skills.sql | 90 ++++++++ src/server/game/DataStores/DBCEnums.h | 6 +- src/server/game/DataStores/DBCStores.cpp | 2 +- src/server/game/DataStores/DBCStructure.h | 19 +- src/server/game/Entities/Player/Player.cpp | 257 ++++++++++++--------- src/server/game/Entities/Player/Player.h | 15 +- src/server/game/Entities/Unit/Unit.cpp | 10 +- src/server/game/Globals/ObjectMgr.cpp | 131 ++++++++--- src/server/game/Globals/ObjectMgr.h | 2 +- src/server/game/Spells/SpellInfo.cpp | 2 +- src/server/game/Spells/SpellMgr.cpp | 2 +- src/server/scripts/Commands/cs_learn.cpp | 3 +- 13 files changed, 368 insertions(+), 175 deletions(-) create mode 100644 sql/updates/characters/2014_07_01_00_characters_character_skills.sql create mode 100644 sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql (limited to 'sql') diff --git a/sql/updates/characters/2014_07_01_00_characters_character_skills.sql b/sql/updates/characters/2014_07_01_00_characters_character_skills.sql new file mode 100644 index 00000000000..1987adb064c --- /dev/null +++ b/sql/updates/characters/2014_07_01_00_characters_character_skills.sql @@ -0,0 +1,4 @@ +-- Set fist weapon skill equal to current unarmed skill value +UPDATE character_skills cs_unarmed INNER JOIN character_skills cs_fist ON cs_unarmed.guid = cs_fist.guid +SET cs_fist.value = cs_unarmed.value, cs_fist.max = cs_unarmed.max +WHERE cs_unarmed.skill = 162 AND cs_fist.skill = 473; diff --git a/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql b/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql new file mode 100644 index 00000000000..8eb452afa96 --- /dev/null +++ b/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql @@ -0,0 +1,90 @@ +DROP TABLE IF EXISTS `playercreateinfo_spells`; + +DROP TABLE IF EXISTS `playercreateinfo_skills`; +CREATE TABLE `playercreateinfo_skills` ( + `raceMask` int(10) unsigned NOT NULL, + `classMask` int(10) unsigned NOT NULL, + `skill` smallint(5) unsigned NOT NULL, + `rank` smallint(5) unsigned NOT NULL DEFAULT '0', + `comment` varchar(255) DEFAULT NULL, + PRIMARY KEY (`raceMask`,`classMask`,`skill`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `playercreateinfo_skills` VALUES +(0,0,95,0,'Defense'), +(0,0,162,0,'Unarmed'), +(0,0,183,0,'GENERIC (DND)'), +(0,0,415,0,'Cloth'), +(0,0,777,0,'Mounts'), +(0,0,778,0,'Companion Pets'), +(0,1,26,0,'Warrior - Arms'), +(0,1,256,0,'Warrior - Fury'), +(0,1,257,0,'Warrior - Protection'), +(0,2,184,0,'Paladin - Retribution'), +(0,2,267,0,'Paladin - Protection'), +(0,2,594,0,'Paladin - Holy'), +(0,4,50,0,'Hunter - Beast Mastery'), +(0,4,51,0,'Hunter - Survival'), +(0,4,163,0,'Hunter - Marksmanship'), +(0,8,38,0,'Rogue - Combat'), +(0,8,39,0,'Rogue - Subtlety'), +(0,8,176,0,'Thrown'), +(0,8,253,0,'Rogue - Assassination'), +(0,16,56,0,'Priest - Holy'), +(0,16,78,0,'Priest - Shadow'), +(0,16,613,0,'Priest - Discipline'), +(0,32,129,4,'Death Knight - First Aid'), +(0,32,229,0,'Polearms'), +(0,32,293,0,'Plate'), +(0,32,762,0,'Death Knight - Riding'), +(0,32,770,0,'Death Knight - Blood'), +(0,32,771,0,'Death Knight - Frost'), +(0,32,772,0,'Death Knight - Unholy'), +(0,35,55,0,'Two-Handed Swords'), +(0,35,413,0,'Mail'), +(0,37,44,0,'Axes'), +(0,37,172,0,'Two-Handed Axes'), +(0,39,43,0,'Swords'), +(0,40,118,0,'Dual Wield'), +(0,64,373,0,'Shaman - Enhancement'), +(0,64,374,0,'Shaman - Restoration'), +(0,64,375,0,'Shaman - Elemental'), +(0,67,433,0,'Shield'), +(0,128,6,0,'Mage - Frost'), +(0,128,8,0,'Mage - Fire'), +(0,128,237,0,'Mage - Arcane'), +(0,256,354,0,'Warlock - Demonology'), +(0,256,355,0,'Warlock - Affliction'), +(0,256,593,0,'Warlock - Destruction'), +(0,400,228,0,'Wands'), +(0,1024,134,0,'Druid - Feral'), +(0,1024,573,0,'Druid - Restoration'), +(0,1024,574,0,'Druid - Balance'), +(0,1107,54,0,'Maces'), +(0,1135,414,0,'Leather'), +(0,1488,136,0,'Staves'), +(1,0,754,0,'Human - Racial'), +(2,0,125,0,'Orc - Racial'), +(4,0,101,0,'Dwarf - Racial'), +(4,0,111,0,'Language: Dwarven'), +(8,0,126,0,'Night Elf - Racial'), +(8,0,137,0,'Language: Thalassian'), +(16,0,220,0,'Undead - Racial'), +(16,0,673,0,'Language: Forsaken'), +(32,0,113,0,'Language: Darnassian'), +(32,0,124,0,'Tauren - Racial'), +(36,4,46,0,'Guns'), +(64,0,313,0,'Language: Gnomish'), +(64,0,753,0,'Gnome - Racial'), +(128,0,315,0,'Language: Troll'), +(128,0,733,0,'Troll - Racial'), +(512,0,115,0,'Language: Taurahe'), +(512,0,756,0,'Blood Elf - Racial'), +(650,4,45,0,'Bows'), +(690,0,109,0,'Language: Orcish'), +(735,1293,173,0,'Daggers'), +(1024,0,759,0,'Language: Draenei'), +(1024,0,760,0,'Draenei - Racial'), +(1024,4,226,0,'Crossbows'), +(1061,3,160,0,'Two-Handed Maces'), +(1101,0,98,0,'Language: Common'); diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 10b7c25bb1f..03180b35cb5 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -326,8 +326,8 @@ enum MapFlags enum AbilytyLearnType { - ABILITY_LEARNED_ON_GET_PROFESSION_SKILL = 1, - ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL = 2 + SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE = 1, // Spell state will update depending on skill value + SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN = 2 // Spell will be learned/removed together with entire skill }; enum ItemEnchantmentType @@ -356,7 +356,7 @@ enum SkillRaceClassInfoFlags SKILL_FLAG_UNLEARNABLE = 0x20, // Skill can be unlearned SKILL_FLAG_INCLUDE_IN_SORT = 0x80, // Spells belonging to a skill with this flag will additionally compare skill ids when sorting spellbook in client SKILL_FLAG_NOT_TRAINABLE = 0x100, - SKILL_FLAG_MONO_VALUE = 0x400 // Skill always has value 1 + SKILL_FLAG_MONO_VALUE = 0x400 // Skill always has value 1 - clientside display flag, real value can be different }; enum SpellCategoryFlags diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 92d00b20645..e960422cbbc 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -450,7 +450,7 @@ void LoadDBCStores(const std::string& dataPath) if (spellInfo->spellLevel) continue; - if (skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL) + if (skillLine->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; sPetFamilySpellsStore[i].insert(spellInfo->Id); diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 2da166fb049..946cbc42f25 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1535,23 +1535,6 @@ struct ScalingStatValuesEntry // uint32 displayOrder; // 19 m_sortIndex //}; -//struct SkillRaceClassInfoEntry{ -// uint32 id; // 0 m_ID -// uint32 skillId; // 1 m_skillID -// uint32 raceMask; // 2 m_raceMask -// uint32 classMask; // 3 m_classMask -// uint32 flags; // 4 m_flags -// uint32 reqLevel; // 5 m_minLevel -// uint32 skillTierId; // 6 m_skillTierID -// uint32 skillCostID; // 7 m_skillCostIndex -//}; - -//struct SkillTiersEntry{ -// uint32 id; // 0 m_ID -// uint32 skillValue[16]; // 1-17 m_cost -// uint32 maxSkillValue[16]; // 18-32 m_valueMax -//}; - struct SkillLineEntry { uint32 id; // 0 m_ID @@ -1578,7 +1561,7 @@ struct SkillLineAbilityEntry //uint32 classmaskNot; // 6 m_excludeClass uint32 req_skill_value; // 7 m_minSkillLineRank uint32 forward_spellid; // 8 m_supercededBySpell - uint32 learnOnGetSkill; // 9 m_acquireMethod + uint32 AutolearnType; // 9 m_acquireMethod uint32 max_value; // 10 m_trivialSkillLineRankHigh uint32 min_value; // 11 m_trivialSkillLineRankLow //uint32 characterPoints[2]; // 12-13 m_characterPoints[2] diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8653106a865..b32ef34edb2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1134,7 +1134,8 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) } // original spells - learnDefaultSpells(); + LearnDefaultSkills(); + LearnCustomSpells(); // original action bar for (PlayerCreateInfoActions::const_iterator action_itr = info->action.begin(); action_itr != info->action.end(); ++action_itr) @@ -3827,34 +3828,14 @@ bool Player::addSpell(uint32 spellId, bool active, bool learning, bool dependent if (!pSkill) continue; - if (!Has310Flyer(false) && pSkill->id == SKILL_MOUNTS) + if (!HasSkill(pSkill->id)) + LearnDefaultSkill(pSkill->id, 0); + + if (pSkill->id == SKILL_MOUNTS && !Has310Flyer(false)) for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED && spellInfo->Effects[i].CalcValue() == 310) SetHas310Flyer(true); - - if (HasSkill(pSkill->id)) - continue; - - if (_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL || - // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL - ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0)) - { - switch (GetSkillRangeType(pSkill, _spell_idx->second->racemask != 0)) - { - case SKILL_RANGE_LANGUAGE: - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 300, 300); - break; - case SKILL_RANGE_LEVEL: - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 1, GetMaxSkillValueForLevel()); - break; - case SKILL_RANGE_MONO: - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 1, 1); - break; - default: - break; - } - } } } @@ -4079,33 +4060,27 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank) // not ranked skills SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spell_id); - for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) + // most likely will never be used, haven't heard of cases where players unlearn a mount + if (Has310Flyer(false) && spellInfo) { - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); - if (!pSkill) - continue; - - if ((_spell_idx->second->learnOnGetSkill == ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL && - pSkill->categoryId != SKILL_CATEGORY_CLASS) ||// not unlearn class skills (spellbook/talent pages) - // lockpicking/runeforging special case, not have ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL - ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0)) + for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { - // not reset skills for professions and racial abilities - if ((pSkill->categoryId == SKILL_CATEGORY_SECONDARY || pSkill->categoryId == SKILL_CATEGORY_PROFESSION) && - (IsProfessionSkill(pSkill->id) || _spell_idx->second->racemask != 0)) + SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); + if (!pSkill) continue; - SetSkill(pSkill->id, GetSkillStep(pSkill->id), 0, 0); - } - - // most likely will never be used, haven't heard of cases where players unlearn a mount - if (Has310Flyer(false) && _spell_idx->second->skillId == SKILL_MOUNTS) - { - if (spellInfo) + if (_spell_idx->second->skillId == SKILL_MOUNTS) + { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED && spellInfo->Effects[i].CalcValue() == 310) + { Has310Flyer(true, spell_id); // with true as first argument its also used to set/remove the flag + break; + } + } + } } } } @@ -6080,9 +6055,6 @@ bool Player::UpdateSkill(uint32 skill_id, uint32 step) if (!skill_id) return false; - if (skill_id == SKILL_FIST_WEAPONS) - skill_id = SKILL_UNARMED; - SkillStatusMap::iterator itr = mSkillStatus.find(skill_id); if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) return false; @@ -6097,13 +6069,14 @@ bool Player::UpdateSkill(uint32 skill_id, uint32 step) if (value < max) { - uint32 new_value = value+step; + uint32 new_value = value + step; if (new_value > max) new_value = max; SetUInt32Value(valueIndex, MAKE_SKILL_VALUE(new_value, max)); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; + UpdateSkillEnchantments(skill_id, value, new_value); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL, skill_id); return true; @@ -6277,9 +6250,25 @@ void Player::UpdateWeaponSkill(WeaponAttackType attType) Item* tmpitem = GetWeaponForAttack(attType, true); if (!tmpitem && attType == BASE_ATTACK) + { + // Keep unarmed & fist weapon skills in sync UpdateSkill(SKILL_UNARMED, weapon_skill_gain); + UpdateSkill(SKILL_FIST_WEAPONS, weapon_skill_gain); + } else if (tmpitem && tmpitem->GetTemplate()->SubClass != ITEM_SUBCLASS_WEAPON_FISHING_POLE) - UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain); + { + switch (tmpitem->GetTemplate()->SubClass) + { + case ITEM_SUBCLASS_WEAPON_FISHING_POLE: + break; + case ITEM_SUBCLASS_WEAPON_FIST: + UpdateSkill(SKILL_UNARMED, weapon_skill_gain); + // no break intended + default: + UpdateSkill(tmpitem->GetSkill(), weapon_skill_gain); + break; + } + } UpdateAllCritPercentages(); } @@ -6352,11 +6341,11 @@ void Player::UpdateSkillsForLevel() continue; uint32 pskill = itr->first; - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(pskill); - if (!pSkill) + SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(pskill, getRace(), getClass()); + if (!rcEntry) continue; - if (GetSkillRangeType(pSkill, false) != SKILL_RANGE_LEVEL) + if (GetSkillRangeType(rcEntry) != SKILL_RANGE_LEVEL) continue; uint32 valueIndex = PLAYER_SKILL_VALUE_INDEX(itr->second.pos); @@ -17704,7 +17693,8 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) // after spell and quest load InitTalentForLevel(); - learnDefaultSpells(); + LearnDefaultSkills(); + LearnCustomSpells(); // must be before inventory (some items required reputation check) m_reputationMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_REPUTATION)); @@ -23078,15 +23068,19 @@ void Player::resetSpells(bool myClassOnly) for (PlayerSpellMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter) removeSpell(iter->first, false, false); // only iter->first can be accessed, object by iter->second can be deleted already - learnDefaultSpells(); + LearnDefaultSkills(); + LearnCustomSpells(); learnQuestRewardedSpells(); } -void Player::learnDefaultSpells() +void Player::LearnCustomSpells() { + if (!sWorld->getBoolConfig(CONFIG_START_ALL_SPELLS)) + return; + // learn default race/class spells PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); - for (PlayerCreateInfoSpells::const_iterator itr = info->spell.begin(); itr != info->spell.end(); ++itr) + for (PlayerCreateInfoSpells::const_iterator itr = info->customSpells.begin(); itr != info->customSpells.end(); ++itr) { uint32 tspell = *itr; TC_LOG_DEBUG("entities.player.loading", "PLAYER (Class: %u Race: %u): Adding initial spell, id = %u", uint32(getClass()), uint32(getRace()), tspell); @@ -23097,6 +23091,63 @@ void Player::learnDefaultSpells() } } +void Player::LearnDefaultSkills() +{ + // learn default race/class skills + PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); + for (PlayerCreateInfoSkills::const_iterator itr = info->skills.begin(); itr != info->skills.end(); ++itr) + { + uint32 skillId = itr->SkillId; + if (HasSkill(skillId)) + continue; + + LearnDefaultSkill(skillId, itr->Rank); + } +} + +void Player::LearnDefaultSkill(uint32 skillId, uint16 rank) +{ + SkillRaceClassInfoEntry const* rcInfo = GetSkillRaceClassInfo(skillId, getRace(), getClass()); + if (!rcInfo) + return; + + TC_LOG_DEBUG("entities.player.loading", "PLAYER (Class: %u Race: %u): Adding initial skill, id = %u", uint32(getClass()), uint32(getRace()), skillId); + switch (GetSkillRangeType(rcInfo)) + { + case SKILL_RANGE_LANGUAGE: + SetSkill(skillId, 0, 300, 300); + break; + case SKILL_RANGE_LEVEL: + { + uint16 skillValue = 0; + uint16 maxValue = GetMaxSkillValueForLevel(); + if (rcInfo->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE) + skillValue = maxValue; + else + skillValue = std::min(std::max({ 1, uint16((getLevel() - 1) * 5) }), maxValue); + + SetSkill(skillId, 0, skillValue, maxValue); + break; + } + case SKILL_RANGE_MONO: + SetSkill(skillId, 0, 1, 1); + break; + case SKILL_RANGE_RANK: + { + if (!rank) + break; + + SkillTiersEntry const* tier = sSkillTiersStore.LookupEntry(rcInfo->SkillTier); + uint16 maxValue = std::max(GetMaxSkillValue(skillId), tier->MaxSkill[std::max(rank - 1, 0)]); + uint16 skillValue = std::min(std::max({ uint16(1), uint16((getLevel() - 1) * 5) }), maxValue); + SetSkill(skillId, rank, skillValue, maxValue); + break; + } + default: + break; + } +} + void Player::learnQuestRewardedSpells(Quest const* quest) { int32 spell_id = quest->GetRewSpellCast(); @@ -23194,29 +23245,35 @@ void Player::learnSkillRewardedSpells(uint32 skill_id, uint32 skill_value) { uint32 raceMask = getRaceMask(); uint32 classMask = getClassMask(); - for (uint32 j=0; jskillId != skill_id || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL) + if (!pAbility || pAbility->skillId != skill_id) + continue; + + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(pAbility->spellId); + if (!spellInfo) + continue; + + if (pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE && pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; + // Check race if set if (pAbility->racemask && !(pAbility->racemask & raceMask)) continue; + // Check class if set if (pAbility->classmask && !(pAbility->classmask & classMask)) continue; - if (sSpellMgr->GetSpellInfo(pAbility->spellId)) - { - // need unlearn spell - if (skill_value < pAbility->req_skill_value) - removeSpell(pAbility->spellId); - // need learn - else if (!IsInWorld()) - addSpell(pAbility->spellId, true, true, true, false); - else - learnSpell(pAbility->spellId, true); - } + // need unlearn spell + if (skill_value < pAbility->req_skill_value && pAbility->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) + removeSpell(pAbility->spellId); + // need learn + else if (!IsInWorld()) + addSpell(pAbility->spellId, true, true, true, false); + else + learnSpell(pAbility->spellId, true); } } @@ -23944,7 +24001,7 @@ bool Player::IsAtRecruitAFriendDistance(WorldObject const* pOther) const return pOther->GetDistance(player) <= sWorld->getFloatConfig(CONFIG_MAX_RECRUIT_A_FRIEND_DISTANCE); } -uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const +uint32 Player::GetBaseWeaponSkillValue(WeaponAttackType attType) const { Item* item = GetWeaponForAttack(attType, true); @@ -23952,8 +24009,8 @@ uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const if (attType != BASE_ATTACK && !item) return 0; - // weapon skill or (unarmed for base attack and for fist weapons) - uint32 skill = (item && item->GetSkill() != SKILL_FIST_WEAPONS) ? item->GetSkill() : uint32(SKILL_UNARMED); + // weapon skill or (unarmed for base attack) + uint32 skill = item ? item->GetSkill() : uint32(SKILL_UNARMED); return GetBaseSkillValue(skill); } @@ -24907,15 +24964,15 @@ void Player::_LoadSkills(PreparedQueryResult result) uint16 value = fields[1].GetUInt16(); uint16 max = fields[2].GetUInt16(); - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(skill); - if (!pSkill) + SkillRaceClassInfoEntry const* rcEntry = GetSkillRaceClassInfo(skill, getRace(), getClass()); + if (!rcEntry) { TC_LOG_ERROR("entities.player", "Character %u has skill %u that does not exist.", GetGUIDLow(), skill); continue; } // set fixed skill ranges - switch (GetSkillRangeType(pSkill, false)) + switch (GetSkillRangeType(rcEntry)) { case SKILL_RANGE_LANGUAGE: // 300..300 value = max = 300; @@ -24923,9 +24980,12 @@ void Player::_LoadSkills(PreparedQueryResult result) case SKILL_RANGE_MONO: // 1..1, grey monolite bar value = max = 1; break; + case SKILL_RANGE_LEVEL: + max = GetMaxSkillValueForLevel(); default: break; } + if (value == 0) { TC_LOG_ERROR("entities.player", "Character %u has skill %u with value 0. Will be deleted.", GetGUIDLow(), skill); @@ -24940,11 +25000,20 @@ void Player::_LoadSkills(PreparedQueryResult result) continue; } - // enable unlearn button for primary professions only - if (pSkill->categoryId == SKILL_CATEGORY_PROFESSION) - SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, 1)); - else - SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, 0)); + uint16 skillStep = 0; + if (SkillTiersEntry const* skillTier = sSkillTiersStore.LookupEntry(rcEntry->SkillTier)) + { + for (uint32 i = 0; i < MAX_SKILL_STEP; ++i) + { + if (skillTier->MaxSkill[skillStep] == max) + { + skillStep = i + 1; + break; + } + } + } + + SetUInt32Value(PLAYER_SKILL_INDEX(count), MAKE_PAIR32(skill, skillStep)); SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(count), MAKE_SKILL_VALUE(value, max)); SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0); @@ -24970,34 +25039,6 @@ void Player::_LoadSkills(PreparedQueryResult result) SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(count), 0); SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0); } - - // special settings - if (getClass() == CLASS_DEATH_KNIGHT) - { - uint8 base_level = std::min(getLevel(), uint8(sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL))); - if (base_level < 1) - base_level = 1; - uint16 base_skill = (base_level-1)*5; // 270 at starting level 55 - if (base_skill < 1) - base_skill = 1; // skill mast be known and then > 0 in any case - - if (GetPureSkillValue(SKILL_FIRST_AID) < base_skill) - SetSkill(SKILL_FIRST_AID, 4 /*artisan*/, base_skill, 300); - if (GetPureSkillValue(SKILL_AXES) < base_skill) - SetSkill(SKILL_AXES, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_DEFENSE) < base_skill) - SetSkill(SKILL_DEFENSE, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_POLEARMS) < base_skill) - SetSkill(SKILL_POLEARMS, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_SWORDS) < base_skill) - SetSkill(SKILL_SWORDS, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_2H_AXES) < base_skill) - SetSkill(SKILL_2H_AXES, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_2H_SWORDS) < base_skill) - SetSkill(SKILL_2H_SWORDS, 0, base_skill, base_skill); - if (GetPureSkillValue(SKILL_UNARMED) < base_skill) - SetSkill(SKILL_UNARMED, 0, base_skill, base_skill); - } } uint32 Player::GetPhaseMaskForSpawn() const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index fdebbde0ae2..5f500b7f1d8 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -249,6 +249,14 @@ struct PlayerCreateInfoAction typedef std::list PlayerCreateInfoActions; +struct PlayerCreateInfoSkill +{ + uint16 SkillId; + uint16 Rank; +}; + +typedef std::list PlayerCreateInfoSkills; + struct PlayerInfo { // existence checked by displayId != 0 @@ -263,8 +271,9 @@ struct PlayerInfo uint16 displayId_m; uint16 displayId_f; PlayerCreateInfoItems item; - PlayerCreateInfoSpells spell; + PlayerCreateInfoSpells customSpells; PlayerCreateInfoActions action; + PlayerCreateInfoSkills skills; PlayerLevelInfo* levelInfo; //[level-1] 0..MaxPlayerLevel-1 }; @@ -1573,7 +1582,9 @@ class Player : public Unit, public GridObject void learnSpell(uint32 spell_id, bool dependent); void removeSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true); void resetSpells(bool myClassOnly = false); - void learnDefaultSpells(); + void LearnCustomSpells(); + void LearnDefaultSkills(); + void LearnDefaultSkill(uint32 skillId, uint16 rank); void learnQuestRewardedSpells(); void learnQuestRewardedSpells(Quest const* quest); void learnSpellHighRank(uint32 spellid); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 5eb48160e8a..154688b2cfc 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2834,12 +2834,10 @@ uint32 Unit::GetWeaponSkillValue (WeaponAttackType attType, Unit const* target) if (IsInFeralForm()) return GetMaxSkillValueForLevel(); // always maximized SKILL_FERAL_COMBAT in fact - // weapon skill or (unarmed for base attack and fist weapons) - uint32 skill; - if (item && item->GetSkill() != SKILL_FIST_WEAPONS) + // weapon skill or (unarmed for base attack) + uint32 skill = SKILL_UNARMED; + if (item) skill = item->GetSkill(); - else - skill = SKILL_UNARMED; // in PvP use full skill instead current skill value value = (target && target->IsControlledByPlayer()) @@ -15288,7 +15286,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) group->SendLooter(creature, NULL); // Update round robin looter only if the creature had loot - if (!creature->loot.empty()) + if (!loot->empty()) group->UpdateLooterGuid(creature); } } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 9eb7d5ec1bf..278460e73dd 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3322,17 +3322,91 @@ void ObjectMgr::LoadPlayerInfo() } } + + // Load playercreate skills + TC_LOG_INFO("server.loading", "Loading Player Create Skill Data..."); + { + uint32 oldMSTime = getMSTime(); + + QueryResult result = WorldDatabase.PQuery("SELECT raceMask, classMask, skill, rank FROM playercreateinfo_skills"); + + if (!result) + { + TC_LOG_ERROR("server.loading", ">> Loaded 0 player create skills. DB table `playercreateinfo_skills` is empty."); + } + else + { + uint32 count = 0; + + do + { + Field* fields = result->Fetch(); + uint32 raceMask = fields[0].GetUInt32(); + uint32 classMask = fields[1].GetUInt32(); + PlayerCreateInfoSkill skill; + skill.SkillId = fields[2].GetUInt16(); + skill.Rank = fields[3].GetUInt16(); + + if (skill.Rank >= MAX_SKILL_STEP) + { + TC_LOG_ERROR("sql.sql", "Skill rank value %hu set for skill %hu raceMask %u classMask %u is too high, max allowed value is %d", skill.Rank, skill.SkillId, raceMask, classMask, MAX_SKILL_STEP); + continue; + } + + if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE)) + { + TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_skills` table, ignoring.", raceMask); + continue; + } + + if (classMask != 0 && !(classMask & CLASSMASK_ALL_PLAYABLE)) + { + TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `playercreateinfo_skills` table, ignoring.", classMask); + continue; + } + + if (!sSkillLineStore.LookupEntry(skill.SkillId)) + { + TC_LOG_ERROR("sql.sql", "Wrong skill id %u in `playercreateinfo_skills` table, ignoring.", skill.SkillId); + continue; + } + + for (uint32 raceIndex = RACE_HUMAN; raceIndex < MAX_RACES; ++raceIndex) + { + if (raceMask == 0 || ((1 << (raceIndex - 1)) & raceMask)) + { + for (uint32 classIndex = CLASS_WARRIOR; classIndex < MAX_CLASSES; ++classIndex) + { + if (classMask == 0 || ((1 << (classIndex - 1)) & classMask)) + { + if (!GetSkillRaceClassInfo(skill.SkillId, raceIndex, classIndex)) + continue; + + if (PlayerInfo* info = _playerInfo[raceIndex][classIndex]) + { + info->skills.push_back(skill); + ++count; + } + } + } + } + } + } while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u player create skills in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + } + } + // Load playercreate spells TC_LOG_INFO("server.loading", "Loading Player Create Spell Data..."); { uint32 oldMSTime = getMSTime(); - std::string tableName = sWorld->getBoolConfig(CONFIG_START_ALL_SPELLS) ? "playercreateinfo_spell_custom" : "playercreateinfo_spell"; - QueryResult result = WorldDatabase.PQuery("SELECT racemask, classmask, Spell FROM %s", tableName.c_str()); + QueryResult result = WorldDatabase.PQuery("SELECT racemask, classmask, Spell FROM playercreateinfo_spell_custom"); if (!result) { - TC_LOG_ERROR("server.loading", ">> Loaded 0 player create spells. DB table `%s` is empty.", tableName.c_str()); + TC_LOG_ERROR("server.loading", ">> Loaded 0 player create spells. DB table `playercreateinfo_spell_custom` is empty."); } else { @@ -3347,13 +3421,13 @@ void ObjectMgr::LoadPlayerInfo() if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `%s` table, ignoring.", raceMask, tableName.c_str()); + TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_spell_custom` table, ignoring.", raceMask); continue; } if (classMask != 0 && !(classMask & CLASSMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `%s` table, ignoring.", classMask, tableName.c_str()); + TC_LOG_ERROR("sql.sql", "Wrong class mask %u in `playercreateinfo_spell_custom` table, ignoring.", classMask); continue; } @@ -3367,7 +3441,7 @@ void ObjectMgr::LoadPlayerInfo() { if (PlayerInfo* info = _playerInfo[raceIndex][classIndex]) { - info->spell.push_back(spellId); + info->customSpells.push_back(spellId); ++count; } // We need something better here, the check is not accounting for spells used by multiple races/classes but not all of them. @@ -3381,7 +3455,7 @@ void ObjectMgr::LoadPlayerInfo() } while (result->NextRow()); - TC_LOG_INFO("server.loading", ">> Loaded %u player create spells in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded %u custom player create spells in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } } @@ -7808,36 +7882,27 @@ int32 ObjectMgr::GetBaseReputationOf(FactionEntry const* factionEntry, uint8 rac return 0; } -SkillRangeType GetSkillRangeType(SkillLineEntry const* pSkill, bool racial) +SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry) { - switch (pSkill->categoryId) + SkillLineEntry const* skill = sSkillLineStore.LookupEntry(rcEntry->SkillId); + if (!skill) + return SKILL_RANGE_NONE; + + if (sSkillTiersStore.LookupEntry(rcEntry->SkillTier)) + return SKILL_RANGE_RANK; + + if (rcEntry->SkillId == SKILL_RUNEFORGING) + return SKILL_RANGE_MONO; + + switch (skill->categoryId) { - case SKILL_CATEGORY_LANGUAGES: return SKILL_RANGE_LANGUAGE; - case SKILL_CATEGORY_WEAPON: - if (pSkill->id != SKILL_FIST_WEAPONS) - return SKILL_RANGE_LEVEL; - else - return SKILL_RANGE_MONO; case SKILL_CATEGORY_ARMOR: - case SKILL_CATEGORY_CLASS: - if (pSkill->id != SKILL_LOCKPICKING) - return SKILL_RANGE_MONO; - else - return SKILL_RANGE_LEVEL; - case SKILL_CATEGORY_SECONDARY: - case SKILL_CATEGORY_PROFESSION: - // not set skills for professions and racial abilities - if (IsProfessionSkill(pSkill->id)) - return SKILL_RANGE_RANK; - else if (racial) - return SKILL_RANGE_NONE; - else - return SKILL_RANGE_MONO; - default: - case SKILL_CATEGORY_ATTRIBUTES: //not found in dbc - case SKILL_CATEGORY_GENERIC: //only GENERIC(DND) - return SKILL_RANGE_NONE; + return SKILL_RANGE_MONO; + case SKILL_CATEGORY_LANGUAGES: + return SKILL_RANGE_LANGUAGE; } + + return SKILL_RANGE_LEVEL; } void ObjectMgr::LoadGameTele() diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index e5e55b847d3..3f8013bbd78 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -643,7 +643,7 @@ enum SkillRangeType SKILL_RANGE_NONE // 0..0 always }; -SkillRangeType GetSkillRangeType(SkillLineEntry const* pSkill, bool racial); +SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry); #define MAX_PLAYER_NAME 12 // max allowed by client name length #define MAX_INTERNAL_PLAYER_NAME 15 // max server internal player name length (> MAX_PLAYER_NAME for support declined names) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 4d97dc97e5b..8034002a470 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -967,7 +967,7 @@ bool SpellInfo::IsAbilityLearnedWithProfession() const for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { SkillLineAbilityEntry const* pAbility = _spell_idx->second; - if (!pAbility || pAbility->learnOnGetSkill != ABILITY_LEARNED_ON_GET_PROFESSION_SKILL) + if (!pAbility || pAbility->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_VALUE) continue; if (pAbility->req_skill_value > 0) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 6f56c0ebc40..77450dc859a 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2382,7 +2382,7 @@ void SpellMgr::LoadPetLevelupSpellMap() if (skillLine->skillId != creatureFamily->skillLine[j]) continue; - if (skillLine->learnOnGetSkill != ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL) + if (skillLine->AutolearnType != SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN) continue; SpellInfo const* spell = GetSpellInfo(skillLine->spellId); diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index 12721c61936..03d10149ae5 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -332,7 +332,8 @@ public: if (!handler->extractPlayerTarget((char*)args, &target)) return false; - target->learnDefaultSpells(); + target->LearnDefaultSkills(); + target->LearnCustomSpells(); target->learnQuestRewardedSpells(); handler->PSendSysMessage(LANG_COMMAND_LEARN_ALL_DEFAULT_AND_QUEST, handler->GetNameLink(target).c_str()); -- cgit v1.2.3 From abb16a521aa79d6b66e29a614dd2bbc5431beb9b Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 1 Jul 2014 17:33:44 +0200 Subject: Update 2014_07_01_02_world playercreateinfo_skills.sql Fixed table name --- sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sql') diff --git a/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql b/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql index 8eb452afa96..ad85276527b 100644 --- a/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql +++ b/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql @@ -1,4 +1,4 @@ -DROP TABLE IF EXISTS `playercreateinfo_spells`; +DROP TABLE IF EXISTS `playercreateinfo_spell`; DROP TABLE IF EXISTS `playercreateinfo_skills`; CREATE TABLE `playercreateinfo_skills` ( -- cgit v1.2.3 From 1e15c577eb53c1ef84c6a32e961673ed2318735d Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 2 Jul 2014 09:53:30 +0200 Subject: DB/Misc: Fix some runtime errors/incorrect triggers By dr-j --- sql/updates/world/2014_07_02_00_world_misc.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2014_07_02_00_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_02_00_world_misc.sql b/sql/updates/world/2014_07_02_00_world_misc.sql new file mode 100644 index 00000000000..03c2df0347d --- /dev/null +++ b/sql/updates/world/2014_07_02_00_world_misc.sql @@ -0,0 +1,5 @@ +-- +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=32790 AND `source_type`=0 AND `id`=1 AND `link`=2; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=30630 AND `source_type`=0 AND `id`=0 AND `link`=1; +-- The below is also related to same quest for moonglade portal and return from moonglade portal same quest, these gained trigger flags resulting in the portals becoming non clickable. +UPDATE`creature_template` SET `flags_extra`=0 WHERE `entry`IN(32790,32788); -- cgit v1.2.3 From 2ca24b090669c2b3d0e559c7b697a92317839ab2 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 2 Jul 2014 13:30:56 +0200 Subject: DB/SAI: Fix Cosmetic Chains on Kirgaraak By dr-j, closes #12420 --- sql/updates/world/2014_07_02_01_world_misc.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2014_07_02_01_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_02_01_world_misc.sql b/sql/updates/world/2014_07_02_01_world_misc.sql new file mode 100644 index 00000000000..ad5679406d3 --- /dev/null +++ b/sql/updates/world/2014_07_02_01_world_misc.sql @@ -0,0 +1,5 @@ +UPDATE `smart_scripts` SET `event_flags`=0,`event_type`=38, `event_param1`=1, `event_param2`=1, `target_param2`=200, `comment`='Cosmetic Trigger - LAB - On Data Set - Cast \'Cosmetic Chains\'' WHERE `entryorguid`IN(-103996,-103997,-103998,-103999,-104000,-104001,-104002,-104003,-104004,-104005,-104006,-104007,-104008)AND `source_type`=0 AND `id`=0 AND `link`=0; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=29352 AND `id`=1; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(29352, 0, 1, 0, 25, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 11, 24921, 200, 0, 0, 0, 0, 0, 'Kirgaraak - On Respawn - Set Data Cosmetic Trigger'); -- cgit v1.2.3 From 4c3cb8038ad9fd9e387b7c5df1784c6012cd9986 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 2 Jul 2014 13:33:10 +0200 Subject: DB/Items: Fix realtime duration of event items By dr-j closes #12421 --- sql/updates/world/2014_07_02_02_world_misc.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2014_07_02_02_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_02_02_world_misc.sql b/sql/updates/world/2014_07_02_02_world_misc.sql new file mode 100644 index 00000000000..5226606dc7c --- /dev/null +++ b/sql/updates/world/2014_07_02_02_world_misc.sql @@ -0,0 +1,2 @@ +-- +UPDATE `item_template` SET `flagsCustom`=1 WHERE `entry` IN(34000,34001,20562,20392,20565,20563,20569,20571,20567,20574,34002,34003,20561,20391,20566,20564,20570,20572,20568,20573,37585,37583,37582,37584,33226,44835, 44839, 44853,44840,46797,44836,46784,46796,44838,44855,46793,44854.44844,44812,46888,46887,44837,34412,34191,21711,21812,22261,18598,18597,31180,31181,46297,46396,34494,34684); -- cgit v1.2.3 From 9f0698b605a48578a0f2e82c8a6fc507ad54d0b8 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 2 Jul 2014 14:48:04 +0200 Subject: DB/Vendor: Add Arcanum of the Stalwart Protector reputation version --- sql/updates/world/2014_07_02_03_world_npc_vendor.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2014_07_02_03_world_npc_vendor.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_02_03_world_npc_vendor.sql b/sql/updates/world/2014_07_02_03_world_npc_vendor.sql new file mode 100644 index 00000000000..40003053b0d --- /dev/null +++ b/sql/updates/world/2014_07_02_03_world_npc_vendor.sql @@ -0,0 +1,2 @@ +-- +INSERT INTO `npc_vendor` (`entry`, `item`) VALUES (30431, 50369); -- cgit v1.2.3 From 13f849aea8f8b2aab3bb638b39ef32b2a5c61f76 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 3 Jul 2014 08:32:14 +0200 Subject: Rename 2014_06_20_01_world_spell_dbc.sql to 2014_06_20_01_world_creature_text.sql --- sql/updates/world/2014_06_20_01_world_creature_text.sql | 4 ++++ sql/updates/world/2014_06_20_01_world_spell_dbc.sql | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 sql/updates/world/2014_06_20_01_world_creature_text.sql delete mode 100644 sql/updates/world/2014_06_20_01_world_spell_dbc.sql (limited to 'sql') diff --git a/sql/updates/world/2014_06_20_01_world_creature_text.sql b/sql/updates/world/2014_06_20_01_world_creature_text.sql new file mode 100644 index 00000000000..5f11bd036db --- /dev/null +++ b/sql/updates/world/2014_06_20_01_world_creature_text.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `creature_text` WHERE `entry`=14467; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES +(14467, 0, 0, 'Kroshius live? Kroshius crush!', 14, 0, 100, 0, 0, 0, 'Kroshius'); diff --git a/sql/updates/world/2014_06_20_01_world_spell_dbc.sql b/sql/updates/world/2014_06_20_01_world_spell_dbc.sql deleted file mode 100644 index 5f11bd036db..00000000000 --- a/sql/updates/world/2014_06_20_01_world_spell_dbc.sql +++ /dev/null @@ -1,4 +0,0 @@ --- -DELETE FROM `creature_text` WHERE `entry`=14467; -INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES -(14467, 0, 0, 'Kroshius live? Kroshius crush!', 14, 0, 100, 0, 0, 0, 'Kroshius'); -- cgit v1.2.3 From 37f7cc4615163ae9a4800af211a9423774bf8223 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 3 Jul 2014 12:26:40 +0200 Subject: DB/Items: Fix typos on 4c3cb80 By dr-j --- sql/updates/world/2014_07_03_00_world_misc.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2014_07_03_00_world_misc.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_03_00_world_misc.sql b/sql/updates/world/2014_07_03_00_world_misc.sql new file mode 100644 index 00000000000..507b306342f --- /dev/null +++ b/sql/updates/world/2014_07_03_00_world_misc.sql @@ -0,0 +1,2 @@ +UPDATE `item_template` SET `flagsCustom`=0 WHERE `entry` IN(31180,31181,46297); +UPDATE `item_template` SET `flagsCustom`=1 WHERE `entry` IN(31880,31881,46397); -- cgit v1.2.3 From 7b74a725c89cca383acab8a002c162fc7ff1e0ac Mon Sep 17 00:00:00 2001 From: joschiwald Date: Thu, 3 Jul 2014 22:32:41 +0200 Subject: Core/Spells: fixed Deep Freeze after 2a3546ca36468b81d673bdb27315006144af3165 Closes #12424 --- sql/updates/world/2014_07_03_01_world_spell_proc_event.sql | 7 +++++++ src/server/game/Spells/Spell.cpp | 14 +++----------- src/server/game/Spells/SpellEffects.cpp | 8 -------- 3 files changed, 10 insertions(+), 19 deletions(-) create mode 100644 sql/updates/world/2014_07_03_01_world_spell_proc_event.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_03_01_world_spell_proc_event.sql b/sql/updates/world/2014_07_03_01_world_spell_proc_event.sql new file mode 100644 index 00000000000..3ae38f82698 --- /dev/null +++ b/sql/updates/world/2014_07_03_01_world_spell_proc_event.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_linked_spell` WHERE `spell_effect`=71757; + +DELETE FROM `spell_proc_event` WHERE `entry`=71761; +INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`procFlags`,`procEx`,`ppmRate`,`CustomChance`,`Cooldown`) VALUES +(71761, 0, 3, 0, 0x100000, 0, 0, 0x100, 0, 0, 0); -- Deep Freeze + +UPDATE `spell_proc_event` SET `procEx`=`procEx`|0x100 WHERE `entry`=74396; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 814ae4d24c1..0e0443cc675 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2265,7 +2265,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) m_spellAura = NULL; // Set aura to null for every target-make sure that pointer is not used for unit without aura applied //Spells with this flag cannot trigger if effect is cast on self - bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && CanExecuteTriggersOnHit(mask); + bool canEffectTrigger = !(m_spellInfo->AttributesEx3 & SPELL_ATTR3_CANT_TRIGGER_PROC) && unitTarget->CanProc() && (CanExecuteTriggersOnHit(mask) || missInfo == SPELL_MISS_IMMUNE || missInfo == SPELL_MISS_IMMUNE2); Unit* spellHitTarget = NULL; if (missInfo == SPELL_MISS_NONE) // In case spell hit target, do all effect on that target @@ -2311,15 +2311,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) if (m_damage > 0) positive = false; else if (!m_healing) - { - for (uint8 i = 0; i< MAX_SPELL_EFFECTS; ++i) - // If at least one effect negative spell is negative hit - if (mask & (1<IsPositiveEffect(i)) - { - positive = false; - break; - } - } + positive = m_spellInfo->IsPositive(); + switch (m_spellInfo->DmgClass) { case SPELL_DAMAGE_CLASS_MAGIC: @@ -2397,7 +2390,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) caster->ToPlayer()->CastItemCombatSpell(unitTarget, m_attackType, procVictim, procEx); } - m_damage = damageInfo.damage; caster->DealSpellDamage(&damageInfo, true); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 606851bf8f1..0a5d265cbfa 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -654,14 +654,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex) } break; } - case SPELLFAMILY_MAGE: - { - // Deep Freeze should deal damage to permanently stun-immune targets. - if (m_spellInfo->Id == 71757) - if (unitTarget->GetTypeId() != TYPEID_UNIT || !(unitTarget->IsImmunedToSpellEffect(sSpellMgr->GetSpellInfo(44572), 0))) - return; - break; - } } if (m_originalCaster && damage > 0 && apply_direct_bonus) -- cgit v1.2.3 From 70daf215548e77765af552a3d8c943f3c2cf9ff6 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 4 Jul 2014 14:27:27 +0200 Subject: Rename 2014_07_01_02_world playercreateinfo_skills.sql to 2014_07_01_02_world_playercreateinfo_skills.sql --- ...2014_07_01_02_world playercreateinfo_skills.sql | 90 ---------------------- ...2014_07_01_02_world_playercreateinfo_skills.sql | 90 ++++++++++++++++++++++ 2 files changed, 90 insertions(+), 90 deletions(-) delete mode 100644 sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql create mode 100644 sql/updates/world/2014_07_01_02_world_playercreateinfo_skills.sql (limited to 'sql') diff --git a/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql b/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql deleted file mode 100644 index ad85276527b..00000000000 --- a/sql/updates/world/2014_07_01_02_world playercreateinfo_skills.sql +++ /dev/null @@ -1,90 +0,0 @@ -DROP TABLE IF EXISTS `playercreateinfo_spell`; - -DROP TABLE IF EXISTS `playercreateinfo_skills`; -CREATE TABLE `playercreateinfo_skills` ( - `raceMask` int(10) unsigned NOT NULL, - `classMask` int(10) unsigned NOT NULL, - `skill` smallint(5) unsigned NOT NULL, - `rank` smallint(5) unsigned NOT NULL DEFAULT '0', - `comment` varchar(255) DEFAULT NULL, - PRIMARY KEY (`raceMask`,`classMask`,`skill`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `playercreateinfo_skills` VALUES -(0,0,95,0,'Defense'), -(0,0,162,0,'Unarmed'), -(0,0,183,0,'GENERIC (DND)'), -(0,0,415,0,'Cloth'), -(0,0,777,0,'Mounts'), -(0,0,778,0,'Companion Pets'), -(0,1,26,0,'Warrior - Arms'), -(0,1,256,0,'Warrior - Fury'), -(0,1,257,0,'Warrior - Protection'), -(0,2,184,0,'Paladin - Retribution'), -(0,2,267,0,'Paladin - Protection'), -(0,2,594,0,'Paladin - Holy'), -(0,4,50,0,'Hunter - Beast Mastery'), -(0,4,51,0,'Hunter - Survival'), -(0,4,163,0,'Hunter - Marksmanship'), -(0,8,38,0,'Rogue - Combat'), -(0,8,39,0,'Rogue - Subtlety'), -(0,8,176,0,'Thrown'), -(0,8,253,0,'Rogue - Assassination'), -(0,16,56,0,'Priest - Holy'), -(0,16,78,0,'Priest - Shadow'), -(0,16,613,0,'Priest - Discipline'), -(0,32,129,4,'Death Knight - First Aid'), -(0,32,229,0,'Polearms'), -(0,32,293,0,'Plate'), -(0,32,762,0,'Death Knight - Riding'), -(0,32,770,0,'Death Knight - Blood'), -(0,32,771,0,'Death Knight - Frost'), -(0,32,772,0,'Death Knight - Unholy'), -(0,35,55,0,'Two-Handed Swords'), -(0,35,413,0,'Mail'), -(0,37,44,0,'Axes'), -(0,37,172,0,'Two-Handed Axes'), -(0,39,43,0,'Swords'), -(0,40,118,0,'Dual Wield'), -(0,64,373,0,'Shaman - Enhancement'), -(0,64,374,0,'Shaman - Restoration'), -(0,64,375,0,'Shaman - Elemental'), -(0,67,433,0,'Shield'), -(0,128,6,0,'Mage - Frost'), -(0,128,8,0,'Mage - Fire'), -(0,128,237,0,'Mage - Arcane'), -(0,256,354,0,'Warlock - Demonology'), -(0,256,355,0,'Warlock - Affliction'), -(0,256,593,0,'Warlock - Destruction'), -(0,400,228,0,'Wands'), -(0,1024,134,0,'Druid - Feral'), -(0,1024,573,0,'Druid - Restoration'), -(0,1024,574,0,'Druid - Balance'), -(0,1107,54,0,'Maces'), -(0,1135,414,0,'Leather'), -(0,1488,136,0,'Staves'), -(1,0,754,0,'Human - Racial'), -(2,0,125,0,'Orc - Racial'), -(4,0,101,0,'Dwarf - Racial'), -(4,0,111,0,'Language: Dwarven'), -(8,0,126,0,'Night Elf - Racial'), -(8,0,137,0,'Language: Thalassian'), -(16,0,220,0,'Undead - Racial'), -(16,0,673,0,'Language: Forsaken'), -(32,0,113,0,'Language: Darnassian'), -(32,0,124,0,'Tauren - Racial'), -(36,4,46,0,'Guns'), -(64,0,313,0,'Language: Gnomish'), -(64,0,753,0,'Gnome - Racial'), -(128,0,315,0,'Language: Troll'), -(128,0,733,0,'Troll - Racial'), -(512,0,115,0,'Language: Taurahe'), -(512,0,756,0,'Blood Elf - Racial'), -(650,4,45,0,'Bows'), -(690,0,109,0,'Language: Orcish'), -(735,1293,173,0,'Daggers'), -(1024,0,759,0,'Language: Draenei'), -(1024,0,760,0,'Draenei - Racial'), -(1024,4,226,0,'Crossbows'), -(1061,3,160,0,'Two-Handed Maces'), -(1101,0,98,0,'Language: Common'); diff --git a/sql/updates/world/2014_07_01_02_world_playercreateinfo_skills.sql b/sql/updates/world/2014_07_01_02_world_playercreateinfo_skills.sql new file mode 100644 index 00000000000..ad85276527b --- /dev/null +++ b/sql/updates/world/2014_07_01_02_world_playercreateinfo_skills.sql @@ -0,0 +1,90 @@ +DROP TABLE IF EXISTS `playercreateinfo_spell`; + +DROP TABLE IF EXISTS `playercreateinfo_skills`; +CREATE TABLE `playercreateinfo_skills` ( + `raceMask` int(10) unsigned NOT NULL, + `classMask` int(10) unsigned NOT NULL, + `skill` smallint(5) unsigned NOT NULL, + `rank` smallint(5) unsigned NOT NULL DEFAULT '0', + `comment` varchar(255) DEFAULT NULL, + PRIMARY KEY (`raceMask`,`classMask`,`skill`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `playercreateinfo_skills` VALUES +(0,0,95,0,'Defense'), +(0,0,162,0,'Unarmed'), +(0,0,183,0,'GENERIC (DND)'), +(0,0,415,0,'Cloth'), +(0,0,777,0,'Mounts'), +(0,0,778,0,'Companion Pets'), +(0,1,26,0,'Warrior - Arms'), +(0,1,256,0,'Warrior - Fury'), +(0,1,257,0,'Warrior - Protection'), +(0,2,184,0,'Paladin - Retribution'), +(0,2,267,0,'Paladin - Protection'), +(0,2,594,0,'Paladin - Holy'), +(0,4,50,0,'Hunter - Beast Mastery'), +(0,4,51,0,'Hunter - Survival'), +(0,4,163,0,'Hunter - Marksmanship'), +(0,8,38,0,'Rogue - Combat'), +(0,8,39,0,'Rogue - Subtlety'), +(0,8,176,0,'Thrown'), +(0,8,253,0,'Rogue - Assassination'), +(0,16,56,0,'Priest - Holy'), +(0,16,78,0,'Priest - Shadow'), +(0,16,613,0,'Priest - Discipline'), +(0,32,129,4,'Death Knight - First Aid'), +(0,32,229,0,'Polearms'), +(0,32,293,0,'Plate'), +(0,32,762,0,'Death Knight - Riding'), +(0,32,770,0,'Death Knight - Blood'), +(0,32,771,0,'Death Knight - Frost'), +(0,32,772,0,'Death Knight - Unholy'), +(0,35,55,0,'Two-Handed Swords'), +(0,35,413,0,'Mail'), +(0,37,44,0,'Axes'), +(0,37,172,0,'Two-Handed Axes'), +(0,39,43,0,'Swords'), +(0,40,118,0,'Dual Wield'), +(0,64,373,0,'Shaman - Enhancement'), +(0,64,374,0,'Shaman - Restoration'), +(0,64,375,0,'Shaman - Elemental'), +(0,67,433,0,'Shield'), +(0,128,6,0,'Mage - Frost'), +(0,128,8,0,'Mage - Fire'), +(0,128,237,0,'Mage - Arcane'), +(0,256,354,0,'Warlock - Demonology'), +(0,256,355,0,'Warlock - Affliction'), +(0,256,593,0,'Warlock - Destruction'), +(0,400,228,0,'Wands'), +(0,1024,134,0,'Druid - Feral'), +(0,1024,573,0,'Druid - Restoration'), +(0,1024,574,0,'Druid - Balance'), +(0,1107,54,0,'Maces'), +(0,1135,414,0,'Leather'), +(0,1488,136,0,'Staves'), +(1,0,754,0,'Human - Racial'), +(2,0,125,0,'Orc - Racial'), +(4,0,101,0,'Dwarf - Racial'), +(4,0,111,0,'Language: Dwarven'), +(8,0,126,0,'Night Elf - Racial'), +(8,0,137,0,'Language: Thalassian'), +(16,0,220,0,'Undead - Racial'), +(16,0,673,0,'Language: Forsaken'), +(32,0,113,0,'Language: Darnassian'), +(32,0,124,0,'Tauren - Racial'), +(36,4,46,0,'Guns'), +(64,0,313,0,'Language: Gnomish'), +(64,0,753,0,'Gnome - Racial'), +(128,0,315,0,'Language: Troll'), +(128,0,733,0,'Troll - Racial'), +(512,0,115,0,'Language: Taurahe'), +(512,0,756,0,'Blood Elf - Racial'), +(650,4,45,0,'Bows'), +(690,0,109,0,'Language: Orcish'), +(735,1293,173,0,'Daggers'), +(1024,0,759,0,'Language: Draenei'), +(1024,0,760,0,'Draenei - Racial'), +(1024,4,226,0,'Crossbows'), +(1061,3,160,0,'Two-Handed Maces'), +(1101,0,98,0,'Language: Common'); -- cgit v1.2.3