diff --git a/LICENSE-AGPL3 b/LICENSE similarity index 100% rename from LICENSE-AGPL3 rename to LICENSE diff --git a/LICENSE-GPL2 b/LICENSE-GPL2 deleted file mode 100644 index d159169d1..000000000 --- a/LICENSE-GPL2 +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/apps/ci/ci-install-modules.sh b/apps/ci/ci-install-modules.sh index 94b70f2b3..c8137ab32 100755 --- a/apps/ci/ci-install-modules.sh +++ b/apps/ci/ci-install-modules.sh @@ -7,21 +7,23 @@ git clone --depth=1 --branch=master --recursive https://github.com/azerothcore/m git clone --depth=1 --branch=master https://github.com/azerothcore/mod-autobalance.git modules/mod-autobalance git clone --depth=1 --branch=master https://github.com/azerothcore/mod-ah-bot.git modules/mod-ah-bot git clone --depth=1 --branch=master https://github.com/azerothcore/mod-anticheat.git modules/mod-anticheat +git clone --depth=1 --branch=master https://github.com/azerothcore/mod-bg-item-reward.git modules/mod-bg-item-reward # NOTE: disabled because it causes DB error # git clone --depth=1 --branch=master https://github.com/azerothcore/mod-azerothshard.git modules/mod-azerothshard git clone --depth=1 --branch=master https://github.com/azerothcore/mod-cfbg.git modules/mod-cfbg git clone --depth=1 --branch=master https://github.com/azerothcore/mod-chat-transmitter modules/mod-chat-transmitter # NOTE: disabled because it causes DB error #git clone --depth=1 --branch=master https://github.com/azerothcore/mod-chromie-xp.git modules/mod-chromie-xp +git clone --depth=1 --branch=master https://github.com/azerothcore/mod-cta-switch.git modules/mod-cta-switch git clone --depth=1 --branch=master https://github.com/azerothcore/mod-desertion-warnings.git modules/mod-desertion-warnings git clone --depth=1 --branch=master https://github.com/azerothcore/mod-duel-reset.git modules/mod-duel-reset git clone --depth=1 --branch=master https://github.com/azerothcore/mod-ip-tracker.git modules/mod-ip-tracker git clone --depth=1 --branch=main https://github.com/azerothcore/mod-low-level-arena.git modules/mod-low-level-arena -git clone --depth=1 --branch=master https://github.com/azerothcore/mod-low-level-rbg modules/mod-low-level-rbg +git clone --depth=1 --branch=master https://github.com/azerothcore/mod-low-level-rbg.git modules/mod-low-level-rbg git clone --depth=1 --branch=master https://github.com/azerothcore/mod-multi-client-check.git modules/mod-multi-client-check git clone --depth=1 --branch=master https://github.com/azerothcore/mod-pvp-titles.git modules/mod-pvp-titles git clone --depth=1 --branch=master https://github.com/azerothcore/mod-pvpstats-announcer.git modules/mod-pvpstats-announcer git clone --depth=1 --branch=main https://github.com/azerothcore/mod-queue-list-cache.git modules/mod-queue-list-cache git clone --depth=1 --branch=master https://github.com/azerothcore/mod-server-auto-shutdown.git modules/mod-server-auto-shutdown git clone --depth=1 --branch=master https://github.com/azerothcore/mod-transmog.git modules/mod-transmog -git clone --depth=1 --branch=main https://github.com/azerothcore/mod-progression-system modules/mod-progression-system +git clone --depth=1 --branch=main https://github.com/azerothcore/mod-progression-system.git modules/mod-progression-system diff --git a/apps/compiler/includes/functions.sh b/apps/compiler/includes/functions.sh index df41acf70..b29c58de3 100644 --- a/apps/compiler/includes/functions.sh +++ b/apps/compiler/includes/functions.sh @@ -19,7 +19,12 @@ function comp_ccacheEnable() { export CCACHE_COMPRESSLEVEL=${CCACHE_COMPRESSLEVEL:-9} #export CCACHE_NODIRECT=true - export CCUSTOMOPTIONS="$CCUSTOMOPTIONS -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" + unamestr=$(uname) + if [[ "$unamestr" == 'Darwin' ]]; then + export CCUSTOMOPTIONS="$CCUSTOMOPTIONS -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DMYSQL_ADD_INCLUDE_PATH=/usr/local/include -DMYSQL_LIBRARY=/usr/local/lib/libmysqlclient.dylib -DREADLINE_INCLUDE_DIR=/usr/local/opt/readline/include -DREADLINE_LIBRARY=/usr/local/opt/readline/lib/libreadline.dylib -DOPENSSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include -DOPENSSL_SSL_LIBRARIES=/usr/local/opt/openssl@1.1/lib/libssl.dylib -DOPENSSL_CRYPTO_LIBRARIES=/usr/local/opt/openssl@1.1/lib/libcrypto.dylib" + else + export CCUSTOMOPTIONS="$CCUSTOMOPTIONS -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" + fi } function comp_ccacheClean() { diff --git a/data/sql/updates/db_world/2022_03_12_02.sql b/data/sql/updates/db_world/2022_03_12_02.sql new file mode 100644 index 000000000..ffc4f4c38 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_12_02.sql @@ -0,0 +1,30 @@ +-- DB update 2022_03_12_01 -> 2022_03_12_02 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_12_01'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_12_01 2022_03_12_02 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1646846735975559298'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1646846735975559298'); + +-- Fixed ruRU translation of the objectives field for quest 5624 +UPDATE `quest_template_locale` SET `VerifiedBuild`=0, `Objectives`='Разыщите стражника Робертса и исцелите его раны, пользуясь "Малым исцелением" (уровень 2), а затем одарите его заклинанием "Слово силы: Стойкость", после чего вернитесь в Златоземье к жрице Жозетте.' WHERE `ID`=5624 AND `locale`='ruRU'; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_12_02' WHERE sql_rev = '1646846735975559298'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_12_03.sql b/data/sql/updates/db_world/2022_03_12_03.sql new file mode 100644 index 000000000..af9084830 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_12_03.sql @@ -0,0 +1,68 @@ +-- DB update 2022_03_12_02 -> 2022_03_12_03 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_12_02'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_12_02 2022_03_12_03 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1646152616244410200'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1646152616244410200'); + +SET @NPC := 35073; +SET @GOSSIP_MENU_ID := 10631; +SET @ITEM_ID := 46978; +SET @QUEST_ID := 14111; + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = @NPC; + +DELETE FROM `gossip_menu_option` WHERE `MenuId` = @GOSSIP_MENU_ID; +INSERT INTO `gossip_menu_option` (`MenuId`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`) VALUES +(@GOSSIP_MENU_ID, 0, 0, "I lost my totems. Can you help?", 35455, 1, 1, 0, 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` = @GOSSIP_MENU_ID; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15, @GOSSIP_MENU_ID, 0, 0, 0, 8, 0, @QUEST_ID, 0, 0, 0, 0, '', 'Requires Quest Completed'), +(15, @GOSSIP_MENU_ID, 0, 0, 0, 2, 0, @ITEM_ID, 1, 0, 1, 0, '', 'Requires Missing Item'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@NPC AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@NPC, 0, 0, 1, 62, 0, 100, 0, @GOSSIP_MENU_ID, 0, 0, 0, 56, @ITEM_ID, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Farsser Eannu - On Gossip Option Select - Add Item to Player'), +(@NPC, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Farsser Eannu - On Gossip Option Select - Close Gossip'); + +SET @NPC := 35068; +SET @GOSSIP_MENU_ID := 10630; +SET @QUEST_ID := 14100; + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = @NPC; + +DELETE FROM `gossip_menu_option` WHERE `MenuId` = @GOSSIP_MENU_ID; +INSERT INTO `gossip_menu_option` (`MenuId`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`) VALUES +(@GOSSIP_MENU_ID, 0, 0, "I lost my totems. Can you help?", 35455, 1, 1, 0, 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` = @GOSSIP_MENU_ID; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15, @GOSSIP_MENU_ID, 0, 0, 0, 8, 0, @QUEST_ID, 0, 0, 0, 0, '', 'Requires Quest Completed'), +(15, @GOSSIP_MENU_ID, 0, 0, 0, 2, 0, @ITEM_ID, 1, 0, 1, 0, '', 'Requires Missing Item'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@NPC AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@NPC, 0, 0, 1, 62, 0, 100, 0, @GOSSIP_MENU_ID, 0, 0, 0, 56, @ITEM_ID, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Gotura Fourwinds - On Gossip Option Select - Add Item to Player'), +(@NPC, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Gotura Fourwinds - On Gossip Option Select - Close Gossip'); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_12_03' WHERE sql_rev = '1646152616244410200'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_13_00.sql b/data/sql/updates/db_world/2022_03_13_00.sql new file mode 100644 index 000000000..f2eae76cb --- /dev/null +++ b/data/sql/updates/db_world/2022_03_13_00.sql @@ -0,0 +1,46 @@ +-- DB update 2022_03_12_03 -> 2022_03_13_00 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_12_03'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_12_03 2022_03_13_00 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647042448722452100'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647042448722452100'); + +UPDATE `creature_template` SET `unit_flags` = `unit_flags`|256|512|33554432, `AIName` = 'SmartAI', `flags_extra` = `flags_extra`|2|64 WHERE `entry` IN (14307, 14309, 14310, 14311, 14312); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (14307, 14309, 14310, 14311, 14312) AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(14307, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 22653, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - On Respawn - Cast \'Serverside - Drakonid Spawner\''), +(14307, 0, 1, 0, 1, 0, 100, 1, 1000, 60000, 60000, 60000, 0, 11, 22680, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - Out of Combat - Cast \'Spawn Chromatic Drakonid\' (No Repeat)'), +(14309, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 22653, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - On Respawn - Cast \'Serverside - Drakonid Spawner\''), +(14309, 0, 1, 0, 1, 0, 100, 1, 1000, 60000, 60000, 60000, 0, 11, 22680, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - Out of Combat - Cast \'Spawn Chromatic Drakonid\' (No Repeat)'), +(14310, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 22653, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - On Respawn - Cast \'Serverside - Drakonid Spawner\''), +(14310, 0, 1, 0, 1, 0, 100, 1, 1000, 60000, 60000, 60000, 0, 11, 22680, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - Out of Combat - Cast \'Spawn Chromatic Drakonid\' (No Repeat)'), +(14311, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 22653, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - On Respawn - Cast \'Serverside - Drakonid Spawner\''), +(14311, 0, 1, 0, 1, 0, 100, 1, 1000, 60000, 60000, 60000, 0, 11, 22680, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - Out of Combat - Cast \'Spawn Chromatic Drakonid\' (No Repeat)'), +(14312, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 22653, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - On Respawn - Cast \'Serverside - Drakonid Spawner\''), +(14312, 0, 1, 0, 1, 0, 100, 1, 1000, 60000, 60000, 60000, 0, 11, 22680, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Black Drakonid Spawner - Out of Combat - Cast \'Spawn Chromatic Drakonid\' (No Repeat)'); + +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_spawn_drakonid'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(22659, 'spell_spawn_drakonid'); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_13_00' WHERE sql_rev = '1647042448722452100'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_14_00.sql b/data/sql/updates/db_world/2022_03_14_00.sql new file mode 100644 index 000000000..4aaf5834c --- /dev/null +++ b/data/sql/updates/db_world/2022_03_14_00.sql @@ -0,0 +1,66 @@ +-- DB update 2022_03_13_00 -> 2022_03_14_00 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_13_00'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_13_00 2022_03_14_00 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1643424341492582600'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1643424341492582600'); + +DELETE FROM `npc_text` WHERE `ID` IN (10303, 10304); +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`) VALUES +(10303, 'Forgetting tribal leatherworking is not something to do lightly. If you choose to abandon it you will forget all recipes that require tribal leatherworking as well!', 'Forgetting tribal leatherworking is not something to do lightly. If you choose to abandon it you will forget all recipes that require tribal leatherworking as well!', 18974), +(10304, 'Forgetting dragonscale leatherworking is not something to do lightly. If you choose to abandon it you will forget all recipes that require dragonscale leatherworking as well!', 'Forgetting dragonscale leatherworking is not something to do lightly. If you choose to abandon it you will forget all recipes that require dragonscale leatherworking as well!', 18976); + +DELETE FROM `gossip_menu` WHERE `MenuID` IN (3068, 3069, 3073) AND `TextID` IN (3802, 3803, 3806); +DELETE FROM `gossip_menu` WHERE `MenuID` IN (3075, 3076, 3077) AND `TextID` IN (10302, 10303, 10304); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(3068, 3802), +(3069, 3803), +(3073, 3806), +(3075, 10304), -- dragonscale +(3076, 10302), -- elemental +(3077, 10303); -- tribal + +DELETE FROM `gossip_menu_option` WHERE `MenuID` IN (3067, 3068, 3069, 3070, 3072, 3073) AND `OptionID` = 0; +DELETE FROM `gossip_menu_option` WHERE `MenuID` IN (3067, 3068, 3069, 3070, 3072, 3073, 3075, 3076, 3077) AND `OptionID` = 1; +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(3067, 0, 3, 'I would like to train.', 5597, 5, 16, 0, 0, 0, 0, '', 0, 0), +(3067, 1, 0, 'I wish to unlearn dragonscale leatherworking!', 18977, 1, 1, 3075, 0, 0, 0, '', 0, 0), +(3068, 0, 3, 'I would like to train.', 5597, 5, 16, 0, 0, 0, 0, '', 0, 0), +(3068, 1, 0, 'I wish to unlearn dragonscale leatherworking!', 18977, 1, 1, 3075, 0, 0, 0, '', 0, 0), +(3069, 0, 3, 'I would like to train.', 5597, 5, 16, 0, 0, 0, 0, '', 0, 0), +(3069, 1, 0, 'I wish to unlearn elemental leatherworking!', 18917, 1, 1, 3076, 0, 0, 0, '', 0, 0), +(3070, 0, 3, 'I would like to train.', 5597, 5, 16, 0, 0, 0, 0, '', 0, 0), +(3070, 1, 0, 'I wish to unlearn elemental leatherworking!', 18917, 1, 1, 3076, 0, 0, 0, '', 0, 0), +(3072, 0, 3, 'I would like to train.', 5597, 5, 16, 0, 0, 0, 0, '', 0, 0), +(3072, 1, 0, 'I wish to unlearn tribal leatherworking!', 18975, 1, 1, 3077, 0, 0, 0, '', 0, 0), +(3073, 0, 3, 'I would like to train.', 5597, 5, 16, 0, 0, 0, 0, '', 0, 0), +(3073, 1, 0, 'I wish to unlearn tribal leatherworking!', 18975, 1, 1, 3077, 0, 0, 0, '', 0, 0), +(3075, 1, 0, 'I wish to unlearn dragonscale leatherworking!', 18977, 1, 1, 0, 0, 0, 0, 'Do you really want to unlearn your leatherworking specialty and lose all associated recipes?', 18969, 0), +(3076, 1, 0, 'I wish to unlearn elemental leatherworking!', 18917, 1, 1, 0, 0, 0, 0, 'Do you really want to unlearn your leatherworking specialty and lose all associated recipes?', 18969, 0), +(3077, 1, 0, 'I wish to unlearn tribal leatherworking!', 18975, 1, 1, 0, 0, 0, 0, 'Do you really want to unlearn your leatherworking specialty and lose all associated recipes?', 18969, 0); + + +UPDATE `creature_template` SET `gossip_menu_id` = 3068, `npcflag` = `npcflag`|1 WHERE `entry` = 7867; -- Thorkaf Dragoneye +UPDATE `creature_template` SET `gossip_menu_id` = 3069, `npcflag` = `npcflag`|1 WHERE `entry` = 7869; -- Mrumn Winterhoof +UPDATE `creature_template` SET `gossip_menu_id` = 3073, `npcflag` = `npcflag`|1 WHERE `entry` = 7871; -- Se'Jib + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_14_00' WHERE sql_rev = '1643424341492582600'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_14_01.sql b/data/sql/updates/db_world/2022_03_14_01.sql new file mode 100644 index 000000000..cf23527e8 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_14_01.sql @@ -0,0 +1,299 @@ +-- DB update 2022_03_14_00 -> 2022_03_14_01 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_14_00'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_14_00 2022_03_14_01 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1646835034551886180'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1646835034551886180'); + +REPLACE INTO `quest_template_locale` (ID, locale, Title, Details, Objectives, EndText, CompletedText, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, VerifiedBuild) +VALUES +(13040,'zhTW','死馬當活馬醫','受傷的士兵數目與日俱增。他們正被某種前所未見的毒物侵襲。不論成份是什麼,這些奈幽蟲族施放出來的毒液,都是致命而無藥可救的!目前為止,我們僅能減緩毒質在病人體內擴散的速度。我們必須製出解藥!$B$B朝西北方去,到先鋒駐地外的山谷中,殺死一些遺忘深淵奈幽蟲族。摘下他們的毒腺,帶回來給我。','寒冰皇冠中,銀白先鋒駐地的賈斯塔夫神父,要求你帶回10個遺忘深淵毒囊。','','到寒冰皇冠的銀白先鋒駐地找賈斯塔夫神父。','','','','',0), +(13041,'zhTW','使命必達','很高興你出現了!我現在就得交出幽坑城訂購的發光象牙刻像,但我還缺一個玉髓才能替這套珠寶畫龍點睛。$B$B替我帶一個玉髓來,你就可以得到一個達拉然珠寶匠徽章。','把一個玉髓交給達拉然的提摩西‧瓊斯。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(13042,'zhTW','深入地下大廳','在東北方,地下大廳的深處,有個名為恐怖博士的瘋狂科學家,他正準備做些名副其實的恐怖壞事。$B$B在巫妖王的特許下,他打算在瓦苟身上做些實驗 - 這個維酷人一文不名地橫屍沙場,然後成了天譴軍團的一員。$B$B我們必須阻止他,但是我的占兆術無法找到他。一定有某人在幫助他。$B$B向他的學徒探明這件事,然後,別讓他看見明天的太陽!','尼約達村的骸骨女巫要你拷問學徒歐斯特基爾格,問出有關恐怖博士所從事工作的情報。$B$B然後殺人滅口。','','到寒冰皇冠的尼約達村找骸骨女巫。','從學徒歐斯特基爾格那探聽到情報','','','',0), +(13043,'zhTW','聚沙成塔','打開這本書,你發現上面充斥著噁心的圖解,說明如何建造博士稱之為「終極武器」的東西!$B$B顯然試作的原型產物,奈傑德,就是驚怖大廳盡頭矗立的那個巨型血肉巨人。$B$B如果他們建立了整支像這樣的軍隊,就意味著末日的到來。唯一能夠避免這件事的方法就只有殺了恐怖博士!$B$B要是你能夠控制這個傀儡,也許博士就會現身?','乘上奈傑德並控制它。擊退地下大廳的居民,直到恐怖博士現身。$B$B用奈傑德殺死博士,然後回去找尼約達村的骸骨女巫。','','到寒冰皇冠的尼約達村找骸骨女巫。','','','','',0), +(13044,'zhTW','如果有生還者...','越過西方的回聲山谷,穿過止境,就能看見第一個寒冰皇冠的天譴營地-天譴岸地。我們在天譴岸地打了一場漂亮的仗,殺了不少天譴軍,但是最後仍不得不撤退。許多士兵走散了-是生是死仍是未知數。$B$B如果有生還者的話,我們必須救出他們。沿著這條路往東南方走,就可以找到潘農布理斯,青銅龍軍團的盟友與元龍雛龍的飼養者。找到他,並尋求他的幫助。','和潘農布理斯對話,他在寒冰皇冠的銀白先鋒駐地。','','','','','','',0), +(13045,'zhTW','駭速快手','我們將盡我們所能地協助你,$n。元龍雛龍自願載你飛越止境,進入天譴岸地。盡量救出任何被俘虜的銀白十字軍。將他們帶回這裡,安置在基地中央的先鋒醫護站。$B$B在我後面的圍欄裡挑一頭銀白天爪,然後去吧!天譴岸地在西北方遠處,你得先越過回聲山谷,並穿越遼闊的止境。','在天譴岸地救出3個被俘虜的銀白十字軍,將他們安置在先鋒駐地中心的先鋒醫護站。並向大領主提里奧‧弗丁呈報你的捷報。','','到寒冰皇冠的銀白先鋒駐地找大領主提里奧·弗丁。','解救被俘虜的十字軍','','','',0), +(13066,'zhTW','由羅克長者','','','','','','','','',0), +(13067,'zhTW','修干加達長者','','','','','','','','',0), +(13070,'zhTW','冷鋒逼近','死亡之寒在西方肆虐,威脅著要將我們的身心都冰封起來,並將我們擄給他在荒地上的黑暗主人。我們將堅守此地,並奮戰到底!$B$B我們已開始備戰。向攻城大師費茲克報到,他就在前門。','在寒冰皇冠的先鋒駐地,向攻城大師費茲克報到。','','','','','','',0), +(13100,'zhTW','灌能蘑菇肉糕','我們有張訂單得馬上出貨!『不只是配件』的歐爾頓‧班尼特需要一份蘑菇肉糕。$B$B弄來一些長在達拉然下水道的灌能蘑菇,還有冷肉塊,在任何一個火堆處放進鍋子裡燉煮,煮好後送到歐爾頓那兒去。','使用你的肉糕鍋,用4朵長在達拉然下水道的灌能蘑菇和2份冷肉塊煮出灌能蘑菇肉糕,然後送去給『不只是配件』的歐爾頓‧班尼特,就在達拉然的織符者廣場。','','到達拉然的『不只是配件』找歐爾頓·班尼特交談。','','','','',0), +(13101,'zhTW','戲法旅舍的會議','戲法旅舍的艾立爾‧蒼凝要舉辦一場會議,而且他得盡快籌備盛宴!$B$B你要提供他一些北地燉肉,還有一壺葡萄酒。你可以在達拉然中央一帶的『勸君更進一杯酒』起司店弄到酒。起司店的老闆欠我酒,你應該可以在店附近找到一壺。$B$B把酒和燉肉帶給艾立爾。','以你的烹飪技能作出4份北地燉肉,並從達拉然的起司店取走一壺葡萄酒,將其帶給戲法旅舍的艾立爾‧蒼凝,就在達拉然的織符者廣場。','','到達拉然的戲法旅舍找艾立爾·蒼凝交談。','','','','',0), +(13102,'zhTW','下水道燉菜','雅杰‧格林,地下道的旅店老闆,現在需要為在他那落腳的顧客張羅一份燉菜。$B$B在水晶之歌森林裡,摘取4根水晶之歌胡蘿蔔,和4份冷肉塊一起烹調。$B$B要去水晶之歌森林的話,可以透過織符者廣場東角的傳送門大廳。$B$B燉菜準備好後,送去給雅杰。','在烹調鍋中,將產自水晶之歌森林的4支水晶之歌胡蘿蔔,與4份冷肉塊一起烹調。$B$B燉菜備齊以後,送去給達拉然下水道的旅店老闆,雅杰‧格林。','','到達拉然的城底區的咒語與烏鴉找雅杰·格林交談。','','','','',0), +(13103,'zhTW','給怒金的起司','達拉然獸皮工店的拉尼德‧怒金現在急需葡萄酒和起司。$B$B從達拉然中心的『勸君更進一杯酒』貨架上取得起司,並在全市各處的桌上,收集半杯滿的葡萄酒。把收集來的酒倒在同一個瓶子中,和起司一起送去給拉尼德。$B$B我不覺得他分得出其中的差別。','在空的起司盤上,放上『勸君更進一杯酒』取來的陳年達拉然濃起司,並從達拉然市中各處的桌上,收集6杯半滿的達拉然葡萄酒杯。$B$B將起司和葡萄酒帶給達拉然獸皮工店的拉尼德‧怒金,店的位置在魔導師貿易區。','','到達拉然找獸皮工店的拉尼德‧怒金。','','','','',0), +(13104,'zhTW','重登止境吧,英雄','先鋒駐地已經鞏固了,吾友。我們重新奪回了回聲山谷,也拿下了封阻止境入口的網牆。現在正是在天譴岸地發動反攻,並在寒冰皇冠內建立據點的好時機。戰線就要動起來了!$B$B我已經向黯黑看守者提出請求,請他在我們對天譴岸地發動攻擊時提供協助。他對天譴軍團的了解,將為我們的努力帶來無比貢獻。$B$B現在就動身,去向他報到吧,他的帳篷就在止境之外,這裡的西北方。','向回聲山谷裡的黯黑看守者報到,就在止境之外。','','','','','','',0), +(13105,'zhTW','重登止境吧,英雄','先鋒駐地已經鞏固了,吾友。我們重新奪回了回聲山谷,也拿下了封阻止境入口的網牆。現在正是在天譴岸地發動反攻,並在寒冰皇冠內建立據點的好時機。戰線就要動起來了!$B$B我已經向黯黑看守者提出請求,請他在我們對天譴岸地發動攻擊時提供協助。他對天譴軍團的了解,將為我們的努力帶來無比貢獻。$B$B現在就動身,去向他報到吧,他的帳篷就在止境之外,這裡的西北方。','向回聲山谷裡的黯黑看守者報到,就在止境之外。','','','','','','',0), +(13107,'zhTW','芥末熱狗!','大法師潘塔魯斯偶爾喜歡看鬥球比賽,而他現在就要出發去看一場,但他需要帶些食物。$B$B你必須在他的野餐籃中,放入4份你做的犀牛熱狗,還有4份自市中綠地採來的野生芥末。$B$B把野餐籃送去給他,使他準備齊全地出發。','以烹飪技能調理4份犀牛熱狗,並自達拉然市內的綠地採來4份野生芥末,都放進空的野餐籃。$B$B然後將野餐籃送去給達拉然市內,卡薩斯平臺的大法師潘塔魯斯。','','到達拉然的卡薩斯平臺找大法師潘塔魯斯。','','','','',0), +(13110,'zhTW','死不瞑目','並非所有我們的士兵都能自天譴岸地平安歸來。許多人被殺害後,被轉化成醜惡而扭曲的另一種人格。這就是成為天譴軍團之途。對這些枉死的靈魂而言,並不能得到永恆的寧靜。我們應該要讓他們安息。$B$B越過止境到天譴岸地去吧,殺掉那些被轉化為骷髏的再活化十字軍。將聖水灑在他們的骸骨上,解救他們的靈魂。','在回聲山谷的賈斯塔夫神父要求你,在再活化的十字軍屍體上使用聖水,以解救10個不能安息的靈魂。','','到寒冰皇冠的回聲山谷找賈斯塔夫神父。','解救不能安息的靈魂','','','',0), +(13112,'zhTW','灌能蘑菇肉糕','『不只是配件』的歐爾頓‧班尼特需要一份蘑菇肉糕。$B$B弄來一些長在達拉然下水道的灌能蘑菇,還有份冷肉塊,在任何一個火堆處放進鍋子裡燉煮,烹調好後送到歐爾頓那兒去。$B$B只要他們願意嚐嚐地精的美味,我會讓他們一試成主顧的!','使用你的肉糕鍋,用4朵長在達拉然下水道的灌能蘑菇和2份冷肉塊煮出灌能蘑菇肉糕,然後送去給『不只是配件』的歐爾頓‧班尼特,就在達拉然的織符者廣場。','','到達拉然的『不只是配件』找歐爾頓·班尼特交談。','','','','',0), +(13113,'zhTW','戲法旅舍的會議','你相信嗎?部落竟然禁止了吃人的行為…我告訴你這是不對的!我還是專心完成我的訂單好了。$B$B戲法旅舍的艾立爾‧蒼凝有許多訪客,你得提供他一些北地燉肉,還有一壺葡萄酒,酒可以從達拉然市中心的起司店弄來。$B$B去吧,把酒和燉肉送去給艾立爾。','將4份北地燉肉與從達拉然的起司店取走的一壺葡萄酒,帶給戲法旅舍的艾立爾‧蒼凝,就在達拉然的織符者廣場。','','到達拉然的戲法旅舍找艾立爾·蒼凝交談。','','','','',0), +(13114,'zhTW','下水道燉菜','我們又有活得幹了。地下道旅店的老闆,現在要為他那餓死鬼般的顧客張羅一份燉菜。$B$B不過看來他不怎麼欣賞,我上回在燉菜裡放地精的廚藝。在水晶之歌森林裡,摘取4根水晶之歌胡蘿蔔,和4份冷肉塊一起烹調。然後送去給雅杰。$B$B要去水晶之歌森林的話,可以透過織符者廣場東角的傳送門大廳。','在烹調鍋中,將產自水晶之歌森林的4根水晶之歌胡蘿蔔,與4份冷肉塊一起烹調。$B$B燉菜煮好以後,送去給達拉然下水道的旅店老闆,雅杰‧格林。','','到達拉然的城底區的咒語與烏鴉找雅杰·格林交談。','','','','',0), +(13115,'zhTW','給怒金的起司','獸皮工店的拉尼德‧怒金,現在需要葡萄酒和起司。為什麼他不想嚐嚐我美味的地精呢?$B$B從達拉然中心的起司店弄點起司,然後從城市各處的桌子上,收集幾杯半滿的葡萄酒。把酒和起司一起送去給拉尼德。$B$B也許我們可以將其命名為雜燴美酒,是吧。','在空的起司盤上,放上『勸君更進一杯酒』取來的陳年達拉然濃起司,並從達拉然市中各處的桌上,收集6杯半滿的達拉然葡萄酒杯。$B$B將起司和葡萄酒帶給達拉然獸皮工店的拉尼德‧怒金,店的位置在魔導師貿易區。','','到達拉然的傳奇皮革找拉尼德·怒金交談。','','','','',0), +(13116,'zhTW','芥末熱狗!','大法師潘塔魯斯喜歡看激烈的鬥球比賽,但他需要帶些食物。$B$B你必須在他的野餐籃中,放入4份你做的犀牛熱狗,還有4份自市中綠地採來的野生芥末。$B$B用芥末熱狗塞滿他的野餐籃吧,小子。','以烹飪技能調理4份犀牛熱狗,並自達拉然市內的綠地採來4份野生芥末,都放進空的野餐籃。$B$B然後將野餐籃送去給達拉然市內,卡薩斯平臺的大法師潘塔魯斯。','','到達拉然的卡薩斯平臺找大法師潘塔魯斯交談。','','','','',0), +(13118,'zhTW','對天譴岸地的淨化','天譴軍團派遣大軍進犯銀白十字軍,但是被擊退。現在他們到處燒殺擄掠。他們在天譴岸地的所有俘虜,都被巫妖王操控,成了他的奴隸。$B$B無疑地,銀白十字軍一定會請你幫忙,讓他們的士兵能有尊嚴地死去。我對你的要求不多,為了成功,我們必須對天譴軍團進行無差別掃蕩。$B$B去天譴岸地吧,朝西北方穿過止境,讓所有阻擋你路途的人都倒下。','在寒冰皇冠,回聲山谷的黯黑看守者要求你,殺掉3名遺忘深淵高階祭師、3名遺忘深淵地底王、還有8名再活化的十字軍。','','到寒冰皇冠的回聲山谷找黯黑看守者。','','','','',0), +(13122,'zhTW','天譴石','天譴石,是每個天譴軍在誕生或被創造時,伴隨產生的一項物品。它對擁有者而言,有某些益處,然而更重要的,它能讓天譴軍團的領導者,隨時掌握每個單位的位置與動向。$B$B只要有足夠的天譴石,我就能追蹤其他天譴軍團成員,在寒冰皇冠上的行動。$B$B當你在天譴岸地上,對天譴軍團大開殺戒時,收集所有你能找到的天譴石。當你的背包再也裝不下,把它們帶回來給我。','在寒冰皇冠,回聲山谷裡的黯黑看守者要你帶回15個天譴石給他。','','到寒冰皇冠的回聲山谷找黯黑看守者。','','','','',0), +(13125,'zhTW','空氣也為之凍結','你必須擊敗天譴岸地的領主們,若要讓此地自天譴軍團的魔掌中解放出來。$B$B『血肉撕裂者』索拉納斯掌控了天譴岸地第一階的神殿。在索拉納斯附近,你可以找到高階祭師亞薩蒙,他在第二階的靈魂尖塔上宣道。再往上走,地底王塔婁諾斯則據有魔鬼之淵的庭院。$B$B他們都是可怕而不容小覷的敵手。需要幫助時,使用這把戰爭號角。亞榭洛的死亡騎士將會出現。','在寒冰皇冠,回聲山谷的黯黑看守者要求你,殺掉『血肉撕裂者』索拉納斯、高階祭師亞薩蒙、和地底王塔婁諾斯。','','到寒冰皇冠的回聲山谷找黯黑看守者。','','','','',0), +(13130,'zhTW','革命的基石','你可以看見天譴岸地,有個令人作嘔的腐朽坑洞,然而有天它將成為尊貴與榮耀之地。大領主弗丁將之稱為「正義要塞」。$B$B嗯,固若金湯如冰冠城塞,也是從一顆石頭開始建造的。所以,現在開始尋找革命的第一顆石頭吧。$B$B往南方的水晶之歌去,找到在其東邊的無縛灌木林。在灌木叢的底層收集結晶心材,並從珊達拉遺跡取得精靈石藝。','回聲山谷的十字軍建築師席拉斯要求你,採集10株結晶心材的樹幹,以及10份上古精靈石藝。','','到寒冰皇冠的回聲山谷找十字軍建築師席拉斯。','','','','',0), +(13135,'zhTW','它會殺了我們','此處的東南方,在水晶之歌森林的東界,有個被稱為無縛灌木林的地方。在那裡,存在各種生命的形式。灌木林中的生物有種共通的特點,就是他們對魔法能量起的共鳴。他們都擁有純淨的晶化能量。當其不穩定時,足以殺死我們每個人!$B$B前往無縛灌木林,殺掉其中的生物,奪取他們的晶化能量。我們需要補充燃料,而他們需要永遠的安息。我們稱之為「雙贏」。','在寒冰皇冠,回聲山谷的十字軍工程師史匹派崔要求你,收集並帶回8份晶化能量。','','到寒冰皇冠的回聲山谷找十字軍工程師史匹派崔。','','','','',0), +(13139,'zhTW','深入北裂境的冰凍心臟','席拉斯和史匹派崔點收了建造正義要塞所需的建材與燃料。多虧你和黯刃騎士團,天譴岸地裡的天譴軍團已潰不成軍,他們的軍官也都被擊敗。$B$B我將會挑選動工的地點,但是,在此之前,你得先將我的報告上呈給大領主提里奧‧弗丁。在他的領導下,大軍將開入寒冰皇冠。','將賈斯塔夫神父的報告呈給大領主提里奧‧弗丁,他在寒冰皇冠的銀白先鋒駐地。','','到寒冰皇冠的銀白先鋒駐地找大領主提里奧·弗丁。','','','','',0), +(13141,'zhTW','十字軍之巔保衛戰','<大領主弗丁握著一支銀白十字軍的旌旗。>$B$B這支旌旗是獨一無二的,$n。它帶著強力的祝福,可以使大片荒蕪的土地變得聖潔不可侵犯。$B$B你必須帶著它前往西北方,穿過止境,到天譴軍團嘲弄地稱為十字軍之巔的地方。將旌旗豎立在死去弟兄的顱骨堆頂端,然後防禦任何攻擊。聖滌的過程結束後,去找賈斯塔夫神父。$B$B現在去吧,$n。願你心中無畏無懼。','前往十字軍之巔,在十字軍顱骨堆上使用十字軍祝福旌旗。防禦天譴軍團發動的攻擊,直到十字軍之巔頂端一帶的土地被聖滌。最後回到寒冰皇冠的回聲山谷,找到賈斯塔夫神父。','北伐軍之峰的戰鬥','到寒冰皇冠的回聲山谷找賈斯塔夫神父。','','','','',0), +(13148,'zhTW','修理項鍊','這條損壞的項鍊附著一張發票,上面寫著「提摩西‧瓊斯財產 - 卡地亞珠寶公司 - 魔導師貿易區 - 達拉然」。$B$B也許你該修復它並物歸原主。','以一枚玉髓修復這條項鍊,並送至提摩西‧瓊斯的珠寶工藝店,店在達拉然的魔導師貿易區。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(13157,'zhTW','十字軍之巔','很榮幸地知道,你協助銀白十字軍,在寒冰皇冠城牆內站穩腳跟,$n。十字軍之巔,現在與巫妖王及他跳梁小丑般的爪牙正面對峙。$B$B大領主弗丁和存活下來的十字軍,都等著你造訪十字軍之巔。再次動身,穿過止境去找到大領主吧!','在寒冰皇冠的十字軍之巔上,找到大領主提里奧‧弗丁。','','','','','','',0), +(13203,'zhTW','冬幕節禮物','','','','','','','','',0), +(13221,'zhTW','我還沒死!','聖光對我微笑。我還沒死於這活生生的夢魘中,但若我不能逃脫,天譴軍團將殺了我,並肢解我的軀體以作為他們『工作』的原料。$B$B我無法獨力做到這件事,我的孩子,唯有藉助你的幫忙,我才能活下來再次對抗天譴軍團。$B$B在天譴軍團的劊子手了結我以前,你能幫助我幫逃出去嗎?','護送卡瑪洛斯神父至安全之處,並向破天者號上的虔誠的亞柏薩倫回報。','護送卡瑪洛斯神父逃離險境','到寒冰皇冠的破天者號找虔誠的亞柏薩倫。','','','','',0), +(13224,'zhTW','奧格林之錘','銀白十字軍將我飽經蹂躪的身軀,從破碎前線上拉了回來。多麼榮耀的一場戰役,$r。當它砍下聯盟齷齪小賊和天譴軍團的頭顱時,我的斧頭,它高歌著。$B$B我的時代結束了。對我而言,這將是善終。幫我帶封口信,大兵。$B$B我們的基地遠在天譴軍所及之外-默德雷薩和奧多薩之間的上空。它被稱為『奧格林之錘』。$B$B<賀克徒勞無功地試圖敬禮。>$B$B飛高些,小心避開聯盟的毀滅武器,破天者號。告訴寇姆...告訴他我不行了...奮鬥...為了部落。','找出搭乘著奧格林之錘,在寒冰皇冠上空盤旋的空奪者寇姆‧黑疤。','','','','','','',0), +(13226,'zhTW','審判日將臨!','我們無法獨力擊敗巫妖王。分裂的我們唯有敗亡一途!$B$B我懇求你回應我們的呼喚,$g兄弟:姐妹;。銀白十字軍接受所有願意為戰爭奉獻心力的志士。大領主提里奧‧弗丁在銀白先鋒駐地親自等著你!坐上你的坐騎,飛往寒冰皇冠的東南邊境。你可以在那裡找到大領主弗丁以及銀白十字軍的士兵。$B$B去吧,$c,為了審判日將臨!','在寒冰皇冠的銀白先鋒駐地,向大領主提里奧‧弗丁報到。','','','','','','',0), +(13227,'zhTW','審判日將臨!','我們無法獨力擊敗巫妖王。分裂的我們唯有敗亡一途!$B$B我懇求你回應我們的呼喚,$g兄弟:姐妹;。銀白十字軍接受所有願意為戰爭奉獻心力的志士。大領主提里奧‧弗丁在銀白先鋒駐地親自等著你!坐上你的坐騎,飛往寒冰皇冠的東南邊境。你可以在那裡找到大領主弗丁以及銀白十字軍的士兵。$B$B去吧,$c,為了審判日將臨!','到寒冰皇冠的銀白先鋒駐地向大領主提里奧‧弗丁報到。','','','','','','',0), +(13240,'zhTW','泰彌亞在你的未來預見了離心傀儡!','汝應前往漂浮於凜懼島上的奧核之眼,$n。$B$B據余所見,汝應當於該地毀去離心傀儡。余斷言,若汝不能當機立斷地摧毀這些怪力亂神之物,則汝輩必致敗亡。$B$B吾既視之,汝遂應行之。','達拉然的大法師泰彌亞預見你必須摧毀10個離心傀儡。','','到達拉然找大法師泰彌亞。','','','','',0), +(13244,'zhTW','提邁爾的預言:泰坦神鐵先鋒!','整個艾澤拉斯都處在危險之中。瘋狂的神靈洛肯已經具備了毀滅世界的能力!$B$B在閃電大廳的大地瞭望塔里,那些泰坦神鐵先鋒正在有條不紊地執行著洛肯的瘋狂計畫,無數生靈即將成為他們的犧牲品。$B$B我已經預見到了,$N。你就是阻止這個瘋狂計畫的人!','根據達拉然的大法師提邁爾的預言,你必須去殺死7個泰坦神鐵先鋒。','','到達拉然找大法師提邁爾。','','','','',0), +(13246,'zhTW','死亡證明:克莉斯塔薩','你聽說克莉斯塔薩的遭遇了嗎?$B$B她幫助我們消滅了瑪裡苟斯的配偶,莎拉苟薩。為了報復,瑪裡苟斯抓住了她,讓她成為自己的配偶,還將她凍在一塊冰裡。$B$B我們最近發現,瑪裡苟斯正在用魔法消磨她的意志,她已經快被逼瘋了。$B$B$N,你必須趁她還沒有完全轉變,趕快轉至考達拉的魔樞,去結束她的生命。$B$B雖然我感到非常難過,但你必須把她的心臟帶回來作為憑證。','達拉然的大法師朗達拉克要你將克莉斯塔薩的破碎之心交給他。$B$B該任務必須在英雄難度下完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13247,'zhTW','死亡證明:魔網守護者埃雷苟斯','魔樞之戰愈演愈烈,我們必須想辦法扭轉局勢!你願意飛往戰鬥最激烈的地區嗎,$N?$B$B魔網守護者埃雷苟斯守護著一條管道,瑪裡苟斯正是通過這條管道源源不斷地汲取魔網中的能量。如果我們能殺了魔網守護者,就可以對敵人造成重創。$B$B請把他的魔網調諧器帶回來給我,讓我們好好研究一下。','達拉然的大法師朗達拉克要你將魔網調諧器交給他。$B$B該任務必須在英雄難度下完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13250,'zhTW','死亡證明:蓋爾達拉','祖爾德拉克的德拉克瑞預言者,做了件駭人聽聞的事:他們殺死了他們大多數的神衹,並吸收了祂們的力量!其中最危險的,就是阿卡利高階預言者,蓋爾達拉。$B$B隱身於剛德拉克深處,蓋爾達拉幾乎吸收了阿卡利所有的魔精,現在,他和其追隨者的勢力,已自該地冒出頭來。如果我們現在不儘快清除掉他,我們將會被瘋狂與駭人力量的浪潮沖走!$B$B快點,$n,將阿卡利剩下的魔精帶回來給我。','達拉然的大法師朗達拉克要求你,帶回阿卡利的魔精殘餘。$B$B這個任務只能在英雄難度中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13251,'zhTW','死亡證明:瑪爾加尼斯','$N,一位青銅龍軍團的朋友向我傳達了一個很有價值的情報。$B$B被燃燒軍團稱為恐懼魔王的那種神秘生物,也就是魔族納斯雷茲姆,關於他們生存的那個世界呢,人們知之甚少,而且可以說幾乎都是無憑無據的傳言。$B$B但瑪爾加尼斯曾犯過一個致命的錯誤:他留下了一件來自他們世界的聖物!$B$B你要進入時光之穴,返回阿爾薩斯王子淨化斯坦索姆的那個時刻,拿到那件聖物。','達拉然的大法師朗達拉克要你將納斯雷茲姆家園的聖物交給他。$B$B該任務必須在英雄難度下完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13252,'zhTW','死亡證明:『塑鐵者』斯雍尼爾','我們對血肉詛咒所知甚少。然而,我們可以在石之大廳裡弄到些情報。$B$B『塑鐵者』斯雍尼爾似乎了解不少有關詛咒的事。據可靠的消息來源,他有一只載有許多資訊的泰坦圓盤,可以解答我們所有的疑問。$B$B取回這只圓盤給我,$n,好讓我們解開謎團。','達拉然的大法師朗達拉克要求你,帶回血肉詛咒圓盤。$B$B這個任務只能在英雄難度中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13253,'zhTW','死亡證明:洛肯','洛肯屹立於雷光大廳之中,策劃著終結我們世界的計畫。需要我複述一次嗎,$n?$B$B他安坐在那裡,聆聽著禁錮於北裂境之底古神的瘋狂囈語。你和你的朋友必須立刻前往風暴群山!$B$B在地疆瞭望塔中挺身面對洛肯,在事情還來得及挽回之前!把他的紅寶石戒指帶回來,好讓我知道我們再次安全了。','達拉然的大法師朗達拉克要求你,帶回天界紅寶石戒指。$B$B這個任務只能在英雄難度中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13255,'zhTW','死亡證明:信使沃菈齊','安卡罕特的奈幽蟲族,在試圖逃離天譴軍團的侵略時掘得太深了。他們與北裂境底下的古神近在咫尺。$B$B引起了他的警覺,他派出他的瘋狂生物以對付牠們,而奈幽蟲族便陷入了兩難的境地。$B$B上古諸神軍隊的首領,信使沃菈齊,是名為無面者的可怕族類其中一員。做掉他,並帶回他萎縮的腦部。$B$B不過拜託,保持你的理智。','達拉然的大法師朗達拉克要求你,帶回無面者的萎縮腦部。$B$B這個任務只能在英雄難度中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13256,'zhTW','死亡證明:塞安妮苟薩','我們遭到了入侵!藍龍軍團已經傳送進了紫羅蘭監獄,正計畫從那裡沖進達拉然!$B$B有報告說,他們已經不小心釋放了一些囚犯。不過就算他們是故意放出那些囚犯,我也不會感到意外的。$B$B$N,你能否迅速召集一支隊伍趕到那裡去?塞安妮苟薩是這些入侵者的首領,把她的徽記給我帶回來!','達拉然的大法師朗達拉克要你將塞安妮苟薩的徽記交給他。$B$B該任務必須在英雄難度下完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(13257,'zhTW','戰爭的使者','酋長需要你,勇士。奧格瑞瑪進入了全城戒嚴狀態,一場不可避免的衝突迫在眉睫。酋長已經下令關閉所有的商店和服務設施,全面備戰。$B$B我不能透露更多的消息了——至少現在不能。在這樣的場合跟你談論局勢也不合適。$B$B酋長傳下令來,部落最強大的勇士必須立即趕往王座廳向他報到。去吧,$N!穿過傳送門返回奧格瑞瑪,向薩爾報到。','轉至奧格瑞瑪的格羅瑪什堡壘,向薩爾報到。','','','','','','',0), +(13265,'zhTW','布料搜掠','','','','','','','','',0), +(13268,'zhTW','布料搜掠','','','','','','','','',0), +(13269,'zhTW','布料搜掠','','','','','','','','',0), +(13270,'zhTW','布料搜掠','','','','','','','','',0), +(13272,'zhTW','布料搜掠','','','','','','','','',0), +(13311,'zhTW','群魔套卡','你現在收集齊了整套的群魔套卡,另一張卡片出現在套卡的上面。上頭描繪著一個占卜師,似乎無論你用什麼角度拿著套卡,他都一直盯著你看。$b$b你覺得這張卡片似乎可以用來跟什麼人溝通。','使用群魔套卡召喚一位暗月占卜師,然後把套卡交給他。','','找暗月占卜師。','','','','',0), +(13350,'zhTW','別讓邪惡伺機喘息','是雅路麥斯...我能夠感應到,他的力量又增強了。顯然他的爪牙又重新開始對他灌注能量。如果他得到足夠的休養,很快地他就會變成一個可怕的威脅。$b$b回到他在奧多薩北部的處所。蒐集雅路麥斯的心臟、顱骨、權杖與長袍然後在雅路麥斯的殘骸結合。$b$b快點,$r! 在他尚未變得太過強大之前摧毀他!','破天者號上的薩沙理安要你在奧多薩擊敗飛升的雅路麥斯。','','到寒冰皇冠的破天者號找薩沙理安。','殺死飛昇的雅路麥斯','','','',0), +(13479,'zhTW','彩蛋大狩獵','貴族花園,生命與春天的慶典!希望你們喜歡彩蛋狩獵,朋友,說不定我用得上像你這樣卓越人士的協助。$b$b我不知道是什麼樣的魔法製造出這些彩蛋,德魯伊也不願意向我解釋。說不定你能在收集彩蛋的時候也替我找一些蛋殼碎片。你可以保留彩蛋裡面的東西,我只是想要一些蛋殼碎片的樣本。','春日蒐集者要你帶給他20個蛋殼碎片。','','找春日蒐集者。','','','','',0), +(13480,'zhTW','彩蛋大狩獵','貴族花園,生命與春天的慶典!希望你們喜歡彩蛋狩獵,朋友,說不定我用得上像你這樣卓越人士的協助。$b$b我不知道是什麼樣的魔法製造出這些彩蛋,德魯伊也不願意向我解釋。說不定你能在收集彩蛋的時候也替我找一些蛋殼碎片。你可以保留彩蛋裡面的東西,我只是想要一些蛋殼碎片的樣本。','春日收集者要你帶給他20個蛋殼碎片。','','找春日收集者。','','','','',0), +(13483,'zhTW','春日蒐集者','如果你想要找點事情做,我聽說有些法師在主城附近的營地 - 剃刀嶺、布瑞爾、血蹄村和獵鷹之翼廣場,正在徵召彩蛋獵人協助進行一些研究。我是不清楚詳情啦,不過我很肯定他們一定會告訴你。','跟剃刀嶺、布瑞爾、血蹄村或獵鷹之翼廣場的一位春日蒐集者交談。','','','','','','',0), +(13484,'zhTW','春日收集者','如果你想要找點事情做,我聽說有些法師在主城附近的營地 - 閃金鎮、卡拉諾斯、多蘭納爾和藍色守望,正在徵召彩蛋獵人協助進行一些研究。我是不清楚詳情啦,不過我很肯定他們一定會告訴你。','跟閃金鎮、卡拉諾斯、多蘭納爾或藍色守望的一位春日收集者交談。','','','','','','',0), +(13502,'zhTW','滴搭滴,貴族花園籃','來...拿著這個蛋籃去尋找明亮的彩蛋。等你找到十個貴族花園巧克力之後再帶著籃子回來找我。','貴族花園商販要你收集10個貴族花園巧克力,並帶著借來的蛋籃回去找他。','','找貴族花園商販。','','','','',0), +(13503,'zhTW','滴搭滴,貴族花園籃','來...拿著這個蛋籃去尋找明亮的彩蛋。等你找到十個貴族花園巧克力之後再帶著籃子回來找我。','貴族花園商人要你收集10個貴族花園巧克力,並帶著借來的蛋籃回去找他。','','找貴族花園商人。','','','','',0), +(13685,'zhTW','鐵爐堡驍士','你已經證明你有資格在鐵爐堡的旌旗下參與競賽,$n。現在,你應該去向菈娜‧頑錘自我介紹,她率領著鐵爐堡代表隊,同時也是鐵爐堡大勇士。她會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的菈娜‧頑錘談談,以成為一名鐵爐堡驍士。','','','','','','',0), +(13688,'zhTW','諾姆瑞根驍士','你已經證明你有資格在諾姆瑞根的旌旗下參與競賽,$n。現在,你應該去向安布羅斯‧拴炫自我介紹,他率領著諾姆瑞根代表隊,同時也是諾姆瑞根大勇士。他會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的安布羅斯‧拴炫談談,以成為一名諾姆瑞根驍士。','','','','','','',0), +(13689,'zhTW','達納蘇斯驍士','你已經證明你有資格在達納蘇斯的旌旗下參與競賽,$n。現在,你應該去向潔琳‧晚歌自我介紹,她率領著達納蘇斯代表隊,同時也是達納蘇斯大勇士。她會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的潔琳‧晚歌談談,以成為一名達納蘇斯驍士。','','','','','','',0), +(13690,'zhTW','艾克索達驍士','你已經證明你有資格在艾克索達的旌旗下參與競賽,$n。現在,你應該去向克羅索斯自我介紹,他率領著艾克索達代表隊,同時也是艾克索達大勇士。他會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的克羅索斯談談,以成為一名艾克索達驍士。','','','','','','',0), +(13691,'zhTW','奧格瑪驍士','你已經證明你有資格在奧格瑪的旌旗下參與競賽,$n。現在,你應該去向『碎顱者』莫克拉自我介紹,他率領著奧格瑪參賽者,同時也是奧格瑪大勇士。他會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的『碎顱者』莫克拉談談,以成為一名奧格瑪驍士。','','','','','','',0), +(13692,'zhTW','劍與海','我的劍掉進海裡了。幫我找回來!','水晶之歌森林的老人巴洛要你幫他找回騎士位階之劍。','','到泰洛卡森林找老人巴洛。','','','','',0), +(13693,'zhTW','森金驍士','你已經證明你有資格在森金的旌旗下參與競賽,$n。現在,你應該去向祖爾拓自我介紹,他率領著森金的戰士,同時也是食人妖大勇士。他會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的祖爾拓談談,以成為一名森金驍士。','','','','','','',0), +(13694,'zhTW','雷霆崖驍士','你已經證明你有資格在雷霆崖的旌旗下參與競賽,$n。現在,你應該去向魯諾克‧蠻鬃自我介紹,他率領著雷霆崖參賽者,同時也是雷霆崖大勇士。他會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的魯諾克‧蠻鬃談談,以成為一名雷霆崖驍士。','','','','','','',0), +(13695,'zhTW','幽暗城驍士','你已經證明你有資格在幽暗城的旌旗下參與競賽,$n。現在,你應該去向亡靈哨兵威瑟瑞自我介紹,他率領著幽暗城代表隊,同時也是幽暗城大勇士。他會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的亡靈哨兵威瑟瑞談談,以成為一名幽暗城驍士。','','','','','','',0), +(12420,'zhTW','每月啤酒俱樂部','會員享有優惠。成為「每月啤酒俱樂部」的會員,表示你有管道獲得到最新、最青的啤酒。$B$B帶著你的「每月啤酒」俱樂部會員表格給拉金‧雷酒,他就在鐵爐堡的石火旅店中。','把「每月啤酒」俱樂部會員表格帶給拉金‧雷酒,他就在鐵爐堡的石火旅店中。','','到鐵爐堡的石火旅店找拉金‧雷酒。','','','','',0), +(12421,'zhTW','每月啤酒俱樂部','$n,團結就是力量。成為「每月啤酒」俱樂部的一員,意味著你和你的同好隨時享用最青的啤酒。$b$b帶著你的「每月啤酒」俱樂部會員表格交給雷瑪,他就在奧格瑪裡。','帶著「每月啤酒」俱樂部會員表格交給奧格瑪裡的雷瑪。','','到奧格瑪找雷瑪。','','','','',0), +(12491,'zhTW','恐酒的恐酒','寇仁‧恐酒的屍體緊抓住這個小小的酒桶。這一定是他最惡名昭彰的恐酒!','將恐酒的恐酒帶到鐵爐堡附近的啤酒節營地交給易菲克佛‧鐵桶。','','到丹莫洛找易菲克佛·鐵桶。','','','','',0), +(12492,'zhTW','恐酒的恐酒','寇仁‧恐酒的屍體緊抓住這個小小的酒桶。這一定是他最惡名昭彰的恐酒!','將恐酒的恐酒帶到奧格瑪附近的啤酒節營地交給泰伯‧詐桶。','','到杜洛塔找泰伯·詐桶。','','','','',0), +(12564,'zhTW','食人妖巡邏:痛苦特效藥','我的手下雖然很勇敢,但還是凡人。$b$b創傷和疼痛會削弱他們在任務中的表現。不管做多少訓練都沒有辦法改變生命的本質。$b$b幸虧,我們有位鍊金師開發了一種軟膏,塗在繃帶上使用能夠大幅減輕士兵所承受的痛楚。$b$b這種軟膏需要用到食人妖種在西邊的一種特殊罌粟。前往德拉克索璀原野採收一些罌粟,避免我們的儲量用盡。','德拉克索璀的布蘭登上尉要你從德拉克索璀原野收集5個成熟的水罌粟。','','到祖爾德拉克的德拉克索璀找布蘭頓上尉。','','','','',0), +(12568,'zhTW','食人妖巡邏:徹底死亡','相信我,$r。我知道...$b$b燒焦血肉的氣味即使對我這樣一個被遺忘者來說都令人作嘔。然而,確保我們的同胞不會加入天譴軍團是一項嚴肅的責任。$b$b把這個油澆在我們的戰死者身上,確保我們永遠不會在戰場上以敵人的身分相見。','魯伯特上尉要你在德拉克索璀對5個戰敗的銀白步卒使用焚化之油。','','到祖爾德拉克的德拉克索璀找魯伯特上尉。','焚燒銀白步卒屍體','','','',0), +(12585,'zhTW','食人妖巡邏:物質享受','好吧,這不是什麼華麗的任務,但還是得做。$b$b我的部隊在外邊拋頭顱灑熱血,還得成天泡在及膝的髒水裡。這真的對身體很不好。$b$b他們很需要一個溫暖的營火讓他們烘乾身體,然後放鬆心靈。$b$b城市這個區域全沉在水裡,但是這些棘木的枯枝很能抵擋濕氣。$b$b替我們弄來一些生火的燃料,我們會萬分感激的。','德拉克亞苟的格隆戴爾上尉要你拿給他二十塊枯死的棘木。','','到祖爾德拉克的德拉克亞苟找格隆戴爾上尉。','','','','',0), +(12588,'zhTW','食人妖巡邏:你能挖出來嗎?','我們其中一支小隊在最後一波攻擊中碰巧發現了一張老舊的藏寶圖。如果上面寫的是真的,那麼這附近就藏有無價的食人妖神器。$b$b我的士兵都很忙,被天譴軍團和德拉克瑞兩方面壓迫。我要你去跑這條情報。$b$b帶著這個鏟子,然後在西南邊的鬆土堆使用它。當你認真的搜尋完之後再回來找我。','德拉克索璀的布蘭登上尉要你在附近的上古土堆使用鋼鏟來回收上古德拉克瑞聖物。','','到祖爾德拉克的德拉克索璀找布蘭頓上尉。','調查上古土堆','','','',0), +(12591,'zhTW','食人妖巡邏:投彈','聰明...$b$b當我們看起來好像控制住局勢的時候,他們把隧道挖過我們正下方,並且佔領了聖壇!$b$b現在我們被夾在兩支奈幽蟲族的部隊之間,我們的處境每分每秒都在惡化。$b$b首先,我們一定要阻止他們繼續增援。一定要把他們的隧道封閉起來。$b$b帶著這些手榴彈,把它們丟進西北方的蟲坑之中。','德拉克索璀的魯伯特上尉要你對5個奈幽蟲坑使用高衝擊手榴彈。','','到祖爾德拉克的德拉克索璀找魯伯特上尉。','奈幽隧道坍塌','','','',0), +(12594,'zhTW','食人妖巡邏:無法坐視','這麼多個哨站,他們卻把我丟來這裡。$b$b這個鬼地方快被那些惡臭停滯的死水給淹沒了,而現在還聚集了一堆污水元素!$b$b我並不知道這些傢伙是什麼,也不知道他們為什麼會在這裡,但現實就是我無法坐視不理。我只知道他們把我的轄區搞得一團亂!我怎麼可能在這種滿是爛泥髒污的地方帶領一支有尊嚴高貴的軍隊?$b$b快到外邊去,$c,在你沒有把我的戰場弄乾淨之前,不要回來!','格隆戴爾上尉要你在德拉克亞苟殺死7隻青苔狂暴者。','','到祖爾德拉克的德拉克亞苟找格隆戴爾上尉。','殺死青苔狂暴者','','','',0), +(12600,'zhTW','兌換商品–熊坐騎','','','','','','','','',0), +(12601,'zhTW','煉金師的幫手','哈,你一定就是他們提過的那個巡邏兵吧。你來得真是太及時了,我正急需幫手呢。$b$b我們抓到了一個達卡萊俘虜,正準備審問他。不過在審訊開始之前,我需要你幫忙製造一種真言藥水。$b$b製造真言藥水是非常複雜的活,需要保持敏銳的直覺、完美地把握時機,並在每一個製作環節上都有即興發揮的能力。$b$b你準備好以後就告訴我吧,$r。記住,對時機的掌握至關重要。','赫布瓦羅的煉金師菲肯斯坦要你幫他製作真言藥水。$b$b準備好以後與他交談,並按照他的指示行動。','','到祖爾德拉克赫布瓦羅找煉金師菲肯斯坦。','完成自白劑','','','',0), +(12602,'zhTW','煉金師的幫手','哈,你一定就是他們提過的那個巡邏兵吧。你來得真是太及時了,我正急需幫手呢。$b$b我們抓到了一個達卡萊俘虜,正準備審問他。不過在審訊開始之前,我需要你幫忙製造一種真言藥水。$b$b製造真言藥水是非常複雜的活,需要保持敏銳的直覺、完美地把握時機,並在每一個製作環節上都有即興發揮的能力。$b$b你準備好以後就告訴我吧,$r。記住,對時機的掌握至關重要。','赫布瓦羅的煉金師菲肯斯坦要你幫他製作真言藥水。$b$b準備好以後與他交談,並按照他的指示行動。','','到祖爾德拉克赫布瓦羅找煉金師菲肯斯坦。','完成自白劑','','','',0), +(12604,'zhTW','恭喜!','','','','','','','','',0), +(12616,'zhTW','滿載秘密的房間','太棒了,是個經驗老到的冒險者。這正是我們需要的人選。$B$B祈倫托那些負責防衛麥迪文之塔的守衛說卡拉贊似乎不大對勁。塔裡似乎潛伏著新的力量,既不屬於守護者,也不屬於燃燒軍團。他們偵察的結果顯示,那似乎是一個叫做坦瑞斯‧暗血的精靈王子,推測他服侍的是天譴軍團。$b$b去吧,我的朋友,調查暗血的房間,把你找到的情報都帶來給我。','銀色黎明大使要你到卡拉贊的佣人區去,搜索坦瑞斯·暗血的房間。','瞭解坦瑞斯目的。','找銀色黎明特使。','','','','',0), +(12626,'zhTW','詛咒連','<科弗斯抬手敬了一個禮。>$B$B我們已經準備了成堆的武器、盔甲和彈藥,幾乎要把倉庫堆滿了。戰爭準備已經就緒!$B$B<科弗斯將一份單據小心地卷了起來。>$B$B軍官辦公區在守備層的另一側,也就是這裡的西南方向。你去把這份裝備報告書交給天災指揮官薩拉諾爾,他是詛咒連的指揮官。','將科弗斯的報告交給黑鋒要塞守備層的天災指揮官薩拉諾爾。','','到東瘟疫之地:血色領地找天災指揮官薩拉諾爾。','','','','',0), +(12693,'zhTW','狼獾人陣營','','','','','','','','',0), +(12694,'zhTW','神諭者陣營','','','','','','','','',0), +(12745,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的地精,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,高比‧布雷斯頓海默。','','到東瘟疫之地:血色領地找騎士指揮官瘟疫之拳。','','','','',0), +(12749,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的食人妖,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,伊吉‧暗牙。','','到東瘟疫之地:血色領地找騎士指揮官瘟疫之拳。','','','','',0), +(12752,'zhTW','孤注一擲的研究','$n,巫妖王的侵略肆虐著我們。如果要把他趕回他的冰封王座,部落與聯盟必須同舟共濟。在撒塔斯的聖光露臺成立了一個新同盟。$B$B為了要援助和巫妖王的艱苦奮戰,前往聖光露臺的新藥劑師營地,和大藥劑師普崔司談談。他進行危急調查想辦法結束這場殭屍瘟疫。他的解藥是我們的救星。$B$B動作快,$n,每秒鐘都有一條無辜的生命喪失。','與大藥劑師普崔司交談,他就在撒塔斯聖光露臺的新藥劑師營地中。','','','','','','',0), +(12753,'zhTW','孤注一擲的聯盟','善良的$n,巫妖王以侵略和疾病毒害我們 -- 部落與聯盟都難逃一劫 。唯有結合我們兩大艾澤拉斯文明的力量才能對抗他的攻擊。$B$B在撒塔斯的聖光露臺,我們結成了新的聯盟。為了協助我們對抗巫妖王,前往聖光露臺的新聯盟駐紮地和主教拉札利爾談談。$B$B動作快,$n。','與撒塔斯的主教拉札利爾談談。他就在聖光露臺的新聯盟駐紮地中。','','','','','','',0), +(12764,'zhTW','康加露酒的秘密','','','','','','','','',0), +(12765,'zhTW','康加露酒','','','','','','','','',0), +(12766,'zhTW','與你的大使談談','<精靈形態的龍拿走你的介紹信,瀏覽一番後收進他的袖套內。>$B$B所有事務看起來都很規則。不過,如果你不在意的話,我想要你去與你在神殿這裡的大使談談。$B$B在我們派你去見女王前,她那裡有些極為重要的事需要你先去處理。$B$B<他輕拍了袖套裡的信件。>$B$B我會在你回來前替你保存這封信件的。','與龍眠神殿的洛瑞爾‧真刃談談。','','','','','','',0), +(12767,'zhTW','與你的大使談談','<精靈形態的龍拿走你的介紹信,瀏覽一番後收進他的袖套內。>$B$B所有事務看起來都很規則。不過,如果你不在意的話,我想要你去與你在神殿這裡的大使談談。$B$B在我們派你去見女王前,她那裡有些極為重要的事需要你先去處理。$B$B<他輕拍了袖套裡的信件。>$B$B我會在你回來前替你保存這封信件的。','與龍眠神殿的葛拉克‧岩拳談談。','','','','','','',0), +(12768,'zhTW','龍眠神殿管理者','你已經證明你值得信賴,甚至比信賴更進一步。$B$B你應該回到龍眠神殿並且和管理者,泰瑞歐斯塔茲再談一談,$n。','和龍眠神殿的泰瑞歐斯塔茲交談。','','','','','','',0), +(12771,'zhTW','鐵爐堡','聖光響應了我們的祈禱!依靠沙塔斯城的納魯所賜予的聖光精華,以及虔誠信徒的祈福,我們終於創造出了神聖而強大的聖物,這些聖物將成為我們對抗巫妖王的利器。$B$B帶上這個,$n。你要仔細保護它,把它安全地送到鐵爐堡。麥格尼·銅須急於轉至諾森德參戰,這件聖物可以説明他達成目標。','拉莎莉爾主教要你將光明聖物交給鐵爐堡的國王麥格尼·銅須。','','到鐵爐堡找國王麥格尼·銅須。','','','','',0), +(12772,'zhTW','孤注一擲的聯盟','善良的$n,巫妖王以侵略和疾病毒害我們 -- 部落與聯盟都難逃一劫 。唯有結合我們兩大艾澤拉斯文明的力量才能對抗他的攻擊。$B$B在撒塔斯的聖光露臺,我們結成了新的聯盟。為了協助我們對抗巫妖王,前往聖光露臺的新聯盟駐紮地和主教拉札利爾談談。$B$B動作快,$n。','與撒塔斯的主教拉札利爾談談。他就在聖光露臺的新聯盟駐紮地中。','','','','','','',0), +(12773,'zhTW','達納蘇斯','我們的祈禱得到了回應!我們利用來自撒塔斯那魯的聚合聖光,以及虔誠信徒所獻上的祈禱,創造了擁有深奧力量的神聖法器。這些法器將會成為我們對抗巫妖王陰謀的武器。$B$B帶著這個,$n。看緊它,將之確實送抵達納蘇斯。把它送去給泰蘭妲‧語風 -- 她的牧師們將會發現這是她們與來自北方的邪惡勢力交戰的關鍵力量來源。','主教拉札利爾要你把聖光灌注神器送去給達納蘇斯的泰蘭妲‧語風。','','到達納蘇斯找神殿花園的泰蘭妲‧語風。','','','','',0), +(12774,'zhTW','暴風城','我們的祈禱得到了回應!我們利用來自撒塔斯那魯的聚合聖光,以及虔誠信徒所獻上的祈禱,創造了擁有深奧力量的神聖法器。這些法器將會成為我們對抗巫妖王陰謀的武器。$B$B帶著這個,$n。看緊它,並安全地將它送達暴風城。暴風城之王已經回來了。我相信他會很樂於見到這個。','主教拉札利爾要你把聖光灌注神器送去給暴風城的瓦裡安‧烏瑞恩國王。','','到暴風城的暴風要塞找瓦裡安·烏瑞恩國王。','','','','',0), +(12775,'zhTW','孤注一擲的聯盟','善良的$n,巫妖王以侵略和疾病毒害我們 -- 部落與聯盟都難逃一劫 。唯有結合我們兩大艾澤拉斯文明的力量才能對抗他的攻擊。$B$B在撒塔斯的聖光露臺,我們結成了新的聯盟。為了協助我們對抗巫妖王,前往聖光露臺的新聯盟駐紮地和主教拉札利爾談談。$B$B動作快,$n。','與撒塔斯的主教拉札利爾談談。他就在聖光露臺的新聯盟駐紮地中。','','','','','','',0), +(12776,'zhTW','埃索達','聖光響應了我們的祈禱!依靠沙塔斯城的納魯所賜予的聖光精華,以及虔誠信徒的祈福,我們終於創造出了神聖而強大的聖物,這些聖物將成為我們對抗巫妖王的利器。$B$B帶上這個,$n。你要仔細保護它,把它安全地送到埃索達,交給聖光穹頂的先知維倫。他可以借用聖物的力量對抗阿爾薩斯的邪惡部隊。','拉莎莉爾主教要你將光明聖物交給埃索達的維倫。','','到埃索達找先知維倫。','','','','',0), +(12777,'zhTW','絕望的聯軍','親愛的$n,巫妖王在用疾病和侵略折磨著我們——部落和聯盟都深受其害。只有艾澤拉斯的這兩個偉大文明聯手,才有可能擊敗他。$B$B我們在沙塔斯城的聖光廣場結成了聯軍。$B$B為了幫助我們對抗巫妖王,請你到聖光廣場的新聯盟營地去,和拉莎莉爾主教談一談。$B$B願聖光保佑你,$n。','到沙塔斯城的聖光廣場去,與新聯盟營地中的拉莎莉爾主教談一談。','','','','','','',0), +(12781,'zhTW','歡迎!','歡迎來到魔獸世界!$B$B為了感謝您購買魔獸世界典藏版,請將這張禮券交給黑鋒要塞的女妖希奧克絲。您將得到一份特別的禮物:陪伴您踏上冒險旅途的小寵物!$B$B再次感謝您的支持,請盡情享受魔獸世界的樂趣吧!','將黑鋒要塞禮品券交給黑鋒要塞的女妖希奧克絲。','','到黑鋒要塞找女妖希奧克絲。','','','','',0), +(12782,'zhTW','孤注一擲的研究','$n,巫妖王的侵略肆虐著我們。如果要把他趕回他的冰封王座,部落與聯盟必須同舟共濟。在撒塔斯的聖光露臺成立了一個新同盟。$B$B為了要援助和巫妖王的艱苦奮戰,前往聖光露臺的新藥劑師營地,和大藥劑師普崔司談談。他進行危急調查想辦法結束這場殭屍瘟疫。他的解藥是我們的救星。$B$B動作快,$n,每秒鐘都有一條無辜的生命喪失。','與大藥劑師普崔司交談,他就在撒塔斯聖光露臺的新藥劑師營地中。','','','','','','',0), +(12783,'zhTW','孤注一擲的研究','$n,巫妖王的侵略肆虐著我們。如果要把他趕回他的冰封王座,部落與聯盟必須同舟共濟。在撒塔斯的聖光露臺成立了一個新同盟。$B$B為了要援助和巫妖王的艱苦奮戰,前往聖光露臺的新藥劑師營地,和大藥劑師普崔司談談。他進行危急調查想辦法結束這場殭屍瘟疫。他的解藥是我們的救星。$B$B動作快,$n,每秒鐘都有一條無辜的生命喪失。','與大藥劑師普崔司交談,他就在撒塔斯聖光露臺的新藥劑師營地中。','','','','','','',0), +(12784,'zhTW','孤注一擲的研究','$n,巫妖王的侵略肆虐著我們。如果要把他趕回他的冰封王座,部落與聯盟必須同舟共濟。在撒塔斯的聖光露臺成立了一個新同盟。$B$B為了要援助和巫妖王的艱苦奮戰,前往聖光露臺的新藥劑師營地,和大藥劑師普崔司談談。他進行危急調查想辦法結束這場殭屍瘟疫。他的解藥是我們的救星。$B$B動作快,$n,每秒鐘都有一條無辜的生命喪失。','與大藥劑師普崔司交談,他就在撒塔斯聖光露臺的新藥劑師營地中。','','','','','','',0), +(12785,'zhTW','奧格瑪','我們有了突破性的發現!我們的殭屍樣本讓我們對天譴瘟疫的本質有了新的認識。他們結出了腐爛,甜美的果實...$B$B把這個盒子帶往奧格瑪,盒子裡面是一顆被殭屍瘟疫感染的頭顱,當然還有一些其他我們發明出的東西 -- 一種反式瘟疫。這兩種瘟疫在殭屍的腦袋中不斷對抗,而這顆頭顱正是解藥的關鍵,這我很確定。$B$B把這個盒子帶給我的助手,藥劑師卡洛孚,他在奧格瑪替大酋長索爾服務。','大藥劑師普崔司要你把這顆雙重染疫的大腦交給奧格瑪的藥劑師卡洛孚。','','到奧格瑪找藥劑師卡洛孚。','','','','',0), +(12786,'zhTW','雷霆崖','我們有了突破性的發現!我們的殭屍樣本讓我們對天譴瘟疫的本質有了新的認識。他們結出了腐爛,甜美的果實...$B$B把這個盒子帶往雷霆崖,盒子裡面是一顆被殭屍瘟疫感染的頭顱,當然還有一些其他我們發明出的東西 -- 一種反式瘟疫。這兩種瘟疫在殭屍的腦袋中不斷對抗,而這顆頭顱正是解藥的關鍵,這我很確定。$B$B把這個盒子帶給我的助手,鍊金師夏睨,他在雷霆崖上替瑪加薩‧恐怖圖騰服務。','大藥劑師普崔司要你把這顆雙重染疫的大腦交給雷霆崖的鍊金師夏睨。','','到雷霆崖找鍊金師夏睨。','','','','',0), +(12787,'zhTW','幽暗城','殭屍瘟疫實際上是個隱藏的祝福。在我們尋找解藥的研究中,我們學習到許多與天譴軍與他們的傳染病相關的知識。我們的研究賦予了我們對付他們的武器。武器,還有工具...$B$B拿著這個 -- 這是一顆殭屍的腦袋,我們從近來的發現中取得的化合物裡面,注射進這顆頭顱中,使得它有一部分被治癒了。將這顆頭顱送給藥劑大師法拉尼爾;我有一整列張表的實驗等著他拿這個頭來做。','大藥劑師普崔司要你把這顆雙重染疫的大腦交給幽暗城的藥劑大師法拉尼爾。','','到幽暗城找藥劑大師法拉尼爾','','','','',0), +(12788,'zhTW','銀月城','我們有了突破性的發現!我們的殭屍樣本讓我們對天譴瘟疫的本質有了新的認識。他們結出了腐爛,甜美的果實...$B$B把這個盒子帶往銀月城,盒子裡面是一顆被殭屍瘟疫感染的頭顱,當然還有一種我們發明出的東西 -- 一種反式瘟疫。這兩種瘟疫在殭屍的腦袋中不斷對抗,而這顆頭顱正是解藥的關鍵,這我很確定。$B$B把這個盒子帶給我的助手,藥劑師提琵希。她在銀月城替洛索瑪‧塞隆服務。','大藥劑師普崔司要你把這顆雙重染疫的大腦交給銀月城的藥劑師提琵希。','','到銀月城找藥劑師提琵希。','','','','',0), +(12798,'zhTW','眾劍套卡','你現在集齊了整套的眾劍套卡,另一張卡片出現在套卡的上面。上頭描繪著一個占卜師,似乎無論你用什麼角度拿著套卡,他都一直盯著你看。$b$b你覺得這張卡片似乎可以用來跟什麼人溝通。','使用眾劍套卡召喚一位暗月占卜師,然後把套卡交給他。','','找暗月占卜師。','','','','',0), +(12808,'zhTW','孤注一擲的聯盟','善良的$n,巫妖王以侵略和疾病毒害我們 -- 部落與聯盟都難逃一劫 。唯有結合我們兩大艾澤拉斯文明的力量才能對抗他的攻擊。$B$B在撒塔斯的聖光露臺,我們結成了新的聯盟。為了協助我們對抗巫妖王,前往聖光露臺的新聯盟駐紮地和主教拉札利爾談談。$B$B動作快,$n。','與撒塔斯的主教拉札利爾談談。他就在聖光露臺的新聯盟駐紮地中。','','','','','','',0), +(12809,'zhTW','鐵爐堡','聖光響應了我們的祈禱!依靠沙塔斯城的納魯所賜予的聖光精華,以及虔誠信徒的祈福,我們終於創造出了神聖而強大的聖物,這些聖物將成為我們對抗巫妖王的利器。$B$B帶上這個,$n。你要仔細保護它,把它安全地送到鐵爐堡。侏儒區的大工匠梅卡托克正在期待著借助聖物的力量為聯盟效力。','拉莎莉爾主教要你將光明聖物交給鐵爐堡的大工匠梅卡托克。','','到鐵爐堡找大工匠梅卡托克。','','','','',0), +(12811,'zhTW','孤注一擲的研究','$n,巫妖王的侵略肆虐著我們。如果要把他趕回他的冰封王座,部落與聯盟必須同舟共濟。在撒塔斯的聖光露臺成立了一個新同盟。$B$B為了要援助和巫妖王的艱苦奮戰,前往聖光露臺的新藥劑師營地,和大藥劑師普崔司談談。他進行危急調查想辦法結束這場殭屍瘟疫。他的解藥是我們的救星。$B$B動作快,$n,每秒鐘都有一條無辜的生命喪失。','與大藥劑師普崔司交談,他就在撒塔斯聖光露臺的新藥劑師營地中。','','','','','','',0), +(12812,'zhTW','奧格瑪','終於有重大突破了!我們的僵屍樣本在天災的影響下產生了新的特性,並結出了豐碩的果實……$B$B把這只盒子帶到奧格瑞瑪去。裡面是一枚帶有僵屍疫病的徽記,上面還有我們添加的其它東西——一種反藥劑。這兩種將在徽記上相互作用,而我敢肯定,這枚徽記就是治癒疫病的關鍵。$B$B把這只盒子交給我的助手,藥劑師卡爾洛夫。他就在奧格瑞瑪的薩爾酋長身邊。','大藥劑師普特雷斯要求你將雙天災腦質交給奧格瑞瑪的藥劑師卡爾洛夫。','','到奧格瑪找藥劑師卡爾洛夫。','','','','',0), +(12816,'zhTW','調查銀月城的天譴軍團','巫妖王把他的不死生物派到我們的門口,我們不能坐視不管!你一定會站出來保衛銀月城不受可惡的入侵者騷擾吧?$b $b外面有些奇怪的符文法陣,散發著和周圍不死生物與亡域上同樣的能量。它們有一定的重要性,我肯定,而且我要你去調查出來。削減那些該死生物的數量,把它們死亡的證據和調查結果帶來給我,我就會獎勵你。去吧!','從銀月城外的天譴軍團身上,收集三個暗淡的亡域之石,並調查它們營地附近發光的符文法陣。','調查法陣','到永歌森林找朱雷克中尉。','','','','',0), +(12817,'zhTW','調查艾克索達的天譴軍團','巫妖王把他的不死生物派到我們的門口,我們不能坐視不管!你一定會站出來保衛艾克索達不受可惡的入侵者騷擾吧?$b $b外面有些奇怪的符文法陣,散發著和周圍不死生物與亡域上同樣的能量。它們有一定的重要性,我肯定,而且我要你去調查出來。削減那些該死生物的數量,把它們死亡的證據和調查結果帶來給我,我就會獎勵你。去吧!','從艾克索達外的天譴軍團身上,收集三個暗淡的亡域之石,並調查它們營地附近發光的符文法陣。然後回去找克瑞格中尉。','調查法陣','到埃索達找克雷格爾上尉。','','','','',0), +(12872,'zhTW','諾甘農之殼','發明者圓盤資料傳輸中。$B$B圓盤資料傳輸完畢。$B$B緊急伽瑪射線措施準備中。$B$B緊急伽瑪射線措施準備完成。請以充能圓盤啟動諾甘農之殼管理員梅查頓。一旦您的身分確認完成,管理員會立刻給您諾甘農之殼。$B$B祝您擁有愉快的千年。','從管理員梅查頓那取回諾甘農之殼。','','使用布萊恩的通訊器聯絡布萊恩·銅須。$B$B如果你弄丟了聯絡器,你可以與冰霜堡的考古學家安多林重新要個新的。','','','','',0), +(12873,'zhTW','霜誕國王','當然...我確實看得出核心會長什麼樣。如果有任何霜誕矮人看過它,他們聽到這描述一定會認出來的。$B$B沒有時間可以浪費了,讓我們直接進入重點吧。去找風暴之心國王談話,請求他的協助...他一定知道有誰可以幫我們找到核心。對了,記得客氣一點 - 他在這一帶很受敬重的。','與霜堡的約格‧風暴之心交談。','','','','','','',0), +(12880,'zhTW','探索大師','要組合拱心石,就需要諾甘農之縛...那是一具位於造物者動力核心的裝置,就是我們身旁的這個大坑。布萊恩現在應該帶著另一半的拱心石待在底下了。我已經教他如何使用裝置了。他在等待著你。$B$B我會盡可能的拖延鐵矮人,但是我沒有自信能夠抵擋太久。風暴之心國王帶著他的手下回頭防禦霜堡了。你得快點,$r。','將諾甘農之核帶去造物者動力核心給布萊恩‧銅鬚。','','到風暴群山的造物者動力核心找布萊恩‧銅鬚。','','','','',0), +(12890,'zhTW','如果尺寸重要','','','','','','','','',0), +(12918,'zhTW','完美寶石','看來刺骨的寒風已經吹到這裡來了?現在不僅僅是缺少欣賞我手藝的顧客,而且我也沒有庫存的寶石可以出售了!如果你能弄些未切割的寶石來補充我的庫存,我可以教你切割完美寶石的技術。切割完美寶石能讓你在切割諾森德地區出產的優秀品質寶石時,有機會切割出一顆具有更高屬性的完美寶石。','將茶晶石、黑玉和暗影水晶各兩顆交給瓦加德的恩霍羅。','','到凜風峽灣的瓦爾加德的恩霍羅。','','','','',0), +(12952,'zhTW','完美寶石','在這個鳥不生蛋的地方,我的手藝都會被荒廢的。我花了很多年來學習怎麼把寶石切割成完美的形態,現在卻英雄無用武之地!你看上去就像是能幫我找些寶石來的那類人,如果你願意幫忙的話,我可以教你切割完美寶石的技術。切割完美寶石能讓你在切割諾森德地區出產的優秀品質寶石時,有機會切割出一顆具有更高屬性的完美寶石。','將茶晶石、黑玉和暗影水晶各兩顆交給復仇港的卡特爾·迪芬斯。','','到凜風峽灣的復仇臺地找卡特爾·迪芬斯。','','','','',0), +(12958,'zhTW','貨品:血玉護符','一間有錢的貨運公司訂購了整套的血玉護符要賣到幽坑城去。如果你能夠給我一個護符,我可以給你一個達拉然珠寶匠徽章作為回報。','將一個維酷護符、一個暗玉以及一個血石合併,以製成一個血玉護符,將其交給達拉然的提摩西‧瓊斯。$B$B你可以從北裂境的任何一個維酷人身上找到維酷護符。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(12959,'zhTW','貨品:發光象牙刻像','一間有錢的貨運公司訂購了整套的發光象牙刻像要賣到幽坑城去。如果你能夠替我帶來一個刻像,我可以給你一個達拉然珠寶匠徽章作為回報。','將一個北地象牙、一個玉髓以及一個暗影水晶組合成發光象牙刻像,然後交給達拉然的提摩西‧瓊斯。$B$B你可以從北裂境的任何一個鍬牙或長毛象身上找到北地象牙。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(12960,'zhTW','貨品:邪惡烈日胸針','一間有錢的貨運公司訂購了整套的邪惡烈日胸針要賣到幽坑城去。如果你能為我找來一個,我可以給你個達拉然珠寶匠徽章作為回報。','把一個鐵矮人胸針、一個巨黃晶以及一個烈日水晶組合成邪惡烈日胸針,交給達拉然的提摩西‧瓊斯。$B$B你可以從北裂境的任何一個鐵矮人身上找到鐵矮人胸針。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(12961,'zhTW','貨品:錯綜龍骨刻像','一間有錢的貨運公司訂購了整套的錯綜龍骨刻像要賣到幽坑城去。如果你能夠給我一個,我可以給你個達拉然珠寶匠徽章作為回報。','把一個元龍骨、一個烈日水晶以及一個暗玉組合成錯綜龍骨刻像,並交給達拉然的提摩西‧瓊斯。$B$B你可以從北裂境的任何一頭元龍身上取得元龍骨。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(12962,'zhTW','貨品:光亮護甲聖物','一間有錢的貨運公司訂購了整套的光亮護甲聖物要賣到幽坑城去。如果你能夠給我一套,我可以給你一個達拉然珠寶匠徽章作為回報。','把一個元素護甲碎塊、一個血石以及一個巨黃晶組合成光亮護甲聖物,並交給達拉然的提摩西‧瓊斯。$B$B你可以從北裂境的任何一個亡魄身上取得元素護甲碎塊。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(12963,'zhTW','貨品:移形烈日珍品','一間有錢的貨運公司訂購了整套的移形烈日珍品要賣到幽坑城去。如果你能夠給我一份,我可以給你一個達拉然珠寶匠徽章作為回報。','把一個天譴珍品、一個烈日水晶以及一個暗影水晶組合成移形烈日珍品,並交給達拉然的提摩西‧瓊斯。$B$B你可以從北裂境的任何一個天譴軍身上取得天譴珍品。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(13002,'zhTW','寶石完美工法','歡迎來到冰天雪地,$g。這地方對於身子保暖來說不太好,但是我學會怎麼切割完美的寶石啦。我只需要有幾顆寶石讓我來活動一下手腳就行。$B$B替我帶來一些寶石,我就會教你寶石完美工法。它能讓你在切割北裂境出產的優秀寶石時,切出擁有額外加值的完美寶石。','將兩顆巨黃晶、兩顆暗玉和兩顆暗影水晶交給戰歌堡的賈巴利。','','到北風凍原的戰歌堡找賈巴利。','','','','',0), +(13004,'zhTW','完美寶石','戰爭一觸即發,我們都要竭盡所能!我的長處在於切割寶石,而且不是普通的寶石,是完美的寶石!如果你能弄些未切割的寶石來給我,我也可以教你學會這種技術。切割完美寶石能讓你在切割諾森德地區出產的優秀品質寶石時,有機會切割出一顆具有更高屬性的完美寶石。','將茶晶石、黑玉和暗影水晶各兩顆交給無畏要塞的奧雷斯托斯。','','到北風凍原的驍勇要塞找奧雷斯托斯。','','','','',0), +(13008,'zhTW','天譴戰術','我們碰上了意想不到的事情!我們在山側炸出了一個洞穴,然後衝進了天譴岸地。天譴軍的反擊非常強烈,我們撐沒多久就潰敗了。我們撤退到谷地,以彈雨伺候追上來的天譴軍。這抵擋了他們一陣子,直到...那些混蛋開始用十字軍當做活盾牌。我們因為擔心殺死自己的士兵而不得不停火。$B$B解救那些困在基地外面原野上的士兵吧,$c!','銀白先鋒駐地的十字軍指揮官恩塔利要你解救5位被網住的十字軍。','','到寒冰皇冠的銀白先鋒駐地找十字軍指揮官恩塔利。','釋放被網住的十字軍','','','',0), +(13012,'zhTW','沙迪斯長者','','','','','','','','',0), +(13013,'zhTW','貝爾達克長者','','','','','','','','',0), +(13014,'zhTW','莫爾希長者','','','','','','','','',0), +(13015,'zhTW','法爾高長者','','','','','','','','',0), +(13016,'zhTW','諾爾索長者','','','','','','','','',0), +(13017,'zhTW','加坦長者','','','','','','','','',0), +(13018,'zhTW','杉德林長者','','','','','','','','',0), +(13019,'zhTW','索依姆長者','','','','','','','','',0), +(13020,'zhTW','石鬚長者','','','','','','','','',0), +(13021,'zhTW','伊加修長者','','','','','','','','',0), +(13022,'zhTW','訥金長者','','','','','','','','',0), +(13023,'zhTW','奇里亞斯長者','','','','','','','','',0), +(13024,'zhTW','瓦尼卡雅長者','','','','','','','','',0), +(13025,'zhTW','魯納羅長者','','','','','','','','',0), +(13026,'zhTW','藍狼長者','','','','','','','','',0), +(13027,'zhTW','陶羅斯長者','','','','','','','','',0), +(13028,'zhTW','灰鬃長者','','','','','','','','',0), +(13029,'zhTW','帕姆亞長者','','','','','','','','',0), +(13030,'zhTW','胡瑞恩長者','','','','','','','','',0), +(13031,'zhTW','天衛長者','','','','','','','','',0), +(13032,'zhTW','慕拉可長者','','','','','','','','',0), +(13033,'zhTW','阿爾普長者','','','','','','','','',0), +(13036,'zhTW','榮譽至上','通往救贖之道漫長無盡啊,年輕的$c。我們打遍了各大陸,甚至穿越了世界,來到了此處。現在,我們要面臨最大的挑戰:毀滅巫妖王與他的天譴軍團。$B$B哎,我們卻是各自為政地在進行這場戰鬥。部落與聯盟彼此作戰,無法援助我們。我們一定得為了自己奮戰不懈!我們又有什麼別的選擇呢?$B$B你願意加入嗎?把你的力量借給我們,$c!我的指揮官,恩塔利,正在等待著你。','向銀白先鋒駐地的十字軍指揮官恩塔利報到。','','','','','','',0), +(13039,'zhTW','防守先鋒駐地','我們無法保持這個步調,$g小夥子:小姑娘;。當缺口崩毀的時候,閘門也被打開了。天譴軍團如潮水般湧入,他們滿山遍野,在視野可及之處如同沒有邊界般散佈!$B$B我們需要任何願意挺身而出的男女,協助我們制止這波邪惡的浪潮。到外面去盡你的本分,朋友。盡你所能地殺那些怪物!','在寒冰皇冠之銀白先鋒駐地的十字軍領主達佛斯要求你殺掉15個遺忘深淵奈幽蟲族。','','到寒冰皇冠的銀白先鋒駐地找十字軍領主達佛斯。','殺死遺忘深淵奈幽蟲族','','','',0), +(11532,'zhTW','分散死亡之痕的注意力','一旦軍團南下的部隊獲得抒解,他們就會立刻對付我們。天譴軍團也持續地聚集在死亡之痕。但這維持不了多久了。$B$B我要你騎著龍鷹前往死亡之痕,用這些秘法炸藥減少那些惡魔的數量。$B$B如果一切順利的話,他們甚至不會知道我們從凱爾的僕人那邊取得這些軍火。等你準備好就和埃倫談談,那個港口西邊的龍鷹管理者。','戰鬥法師艾里娜要你準備好飛越死亡之痕後,和埃倫‧破雲者談談。一旦抵達之後,用秘法炸藥殺死2隻深淵霸主、3隻埃雷達爾巫士和12隻憤怒執行者。','','到奎爾丹納斯島的陽灣聖殿找戰鬥法師艾爾娜。','','','','',0), +(11535,'zhTW','做好準備','物資正在運來,起碼我是這麼被告知的。$b$b但無論如何,我們無法繼續等待支援會在攻勢陷入困境前到來。我們必須要盡量利用手邊的資源。$b$b就我來說,我需要礦石來製造鐵砧,好讓我可以著手升級我們的鎧甲和武器。$b$b在東邊的海岸有一群納迦,他們在收集礦石並且裝箱要運送給燃燒軍團。$b$b偷走他們的礦石會對我們有很大的幫助...。','日境軍械庫的鐵匠荷莎要你殺死東部的暗脊部屬,用他們身上的鑰匙,然後從箱子中偷取三塊礦石。','','到奎爾丹納斯島的日境軍械庫找鐵匠霍爾薩。','','','','',0), +(11538,'zhTW','日境軍械庫的戰鬥','燃燒軍團控制著日境軍械庫,它在我們的行動中具有重要的戰略價值。只要他們的士氣高昂,我們就很難奪取建築物的控制權。$B$B憎恨密使是軍團的打擊部隊派來鞏固他們的戰術據點。敵人靠著他們的抵達正在重整。比起我們,他們更懼怕這些憎恨密使。$B$B今天,我們要改變這件事。拿起這個旌旗並且殺死那些軍團惡魔。等到憎恨密使出現,殺死他並且刺穿他。','先驅者因努羅要你殺在曙光廣場或日境軍械庫的6隻燃燒軍團惡魔以及憎恨密使。用破碎之日旌旗刺穿憎恨密使的屍體。','','到奎爾丹納斯島的陽灣聖殿找先驅者因努羅。','刺穿憎恨密使','','','',0), +(11539,'zhTW','奪下港口','凱爾最精英的部隊之一,曦刃軍團目前駐紮日境港和晨星村。$B$B港口在我們的計畫中佔有關鍵的位置,所以你對曦刃造成的每一分損傷都對我們來說是莫大的助力。凱爾薩斯會悔恨他為什麼要背棄他的人民,與燃燒軍團同流合污。','日境軍械庫的博學者伊拉斯塔要你去殺死6名曦刃召喚師、6名曦刃血騎士和3名曦刃神射手。','','到奎爾丹納斯島的日境軍械庫找博學者伊拉斯塔。','','','','',0), +(11542,'zhTW','攔截援軍','我們需要將戰線往前推進,來鞏固我們對日境的控制權,目標就是佔領港口。不幸的是,一支曦刃後備兵的艦隊正在支援凱爾部隊的路上。$B$B帶上這些火油,然後從埃倫‧破雲者那邊借調一隻龍鷹。你可以飛近那些船帆;一旦你靠得夠近,就把那些船帆全點燃。$B$B找一艘船降落,然後對付那些後備部隊。只要他們的船帆著火,他們就無法好好組織防禦。','日境軍械庫的復仇者卡藍要你和埃倫‧破雲者談談,並且飛往曦刃的支援艦隊。使用燃油點燃那些船帆,等你降落後,殺死6名曦刃後備兵。','','到奎爾丹納斯島的日境軍械庫找復仇者卡藍。','燒燬辛洛倫的船帆','燒燬血之誓約的船帆','燒燬曦逐者的船帆','',0), +(11545,'zhTW','仁慈的募捐','我們已經從敵人的手中徹底奪回了陽灣港,最終的勝利就在眼前。不過,我們也付出了非常沉重的代價,許多英勇的戰士倒在了敵人的刀下。$B$B我現在唯一想做的事情就是讓這些犧牲者永遠被人們銘記,永遠不被遺忘。現在我們打算在這裡建造一座紀念碑,在上面篆刻所有犧牲者的姓名。當然,如果你能捐一筆錢就再好不過了,希望你能考慮一下這件事。多餘的資金將會用來幫助英烈們留下來的孤兒與遺孀。','奎爾丹納斯島陽灣港的學者艾尤莉希望你捐贈10枚金幣。','','','','','','',0), +(11551,'zhTW','第一道屏障,阿加麥斯之門','','','','到奎爾丹納斯島找大法師奈蘇爾。','','','','',0), +(11552,'zhTW','第二道屏障,洛希多爾之門','','','','到奎爾丹納斯島找大法師奈蘇爾。','','','','',0), +(11553,'zhTW','最後的屏障,埃庫尼蘇之門','','','','到奎爾丹納斯島找大法師奈蘇爾。','','','','',0), +(11556,'zhTW','戰場上的崇敬','','','','','','','','',0), +(11557,'zhTW','所有戰士的崇拜','','','','','','','','',0), +(11558,'zhTW','危險的愛','這種像傳染病的愛有些不對勁。這情形很噁心,而且當它降低了我們的警戒心,對所有人來說都是個威脅。$b$b我們有這麼多人民都已經陷入如此荒繆的行為已經夠糟了。但我想這甚至還散播到我們的守衛那裡了,他們是應該對這種事免疫的人。$b$b找一名我們的守衛,看看他們是否已經得到了這愚蠢的病。','取得一張守衛發黴的卡片並帶給幽暗城的芬斯塔德‧阿吉歐。','','到奧特蘭克山脈的洛丹米爾湖找芬斯塔德·阿吉歐。','','','','',0), +(11578,'zhTW','The \'Chow\' Quest (123)aa COPY','$T蠢蛋;!殺死2個狗頭人惡黨。','殺死兩個狗頭人惡黨。','','找本尼任務給予者。','','','','',0), +(11579,'zhTW','「狗頭人」任務(123)aa COPY','$T蠢蛋;!殺死2個狗頭人惡黨。','殺死兩個狗頭人惡黨。','','找本尼任務給予者。','','','','',0), +(11621,'zhTW','萊維羅希的石板','你清理了石板上的刻痕,找尋任何你看得懂的內容。你終於找到了以下的片段:$B$B「迷霧之子將要收集一千個靈魂,以獻給居於晦暗深海中的,喚醒他的特使。」$B$B卡魯克或許會對這個消息感興趣。','把你在石板上找到的訊息告訴卡魯克。','','','','','','',0), +(11653,'zhTW','哈...你現在可沒那麼大囉!','這樣就可以應付她了,老大!接下來,我要你這麼做...$B$B帶著我的光束槍,朝著北邊前往瑪格默斯。如果我們想要有機會對抗那些怪物,我們必須減小他們的體型...就這麼辦。$B$B為了評估光束槍的效能,我要你在猛瑪象人身上的光束槍效果結束之前殺掉牠們。任何粉碎者或是配偶都可以,不過放過那些後代吧...他們還很小,不用擔心。','在5隻瑪格默斯粉碎者或瑪格默斯瑞卡的配偶身上檢測卡芙緹的超進階初體版微縮光束槍。在完成後,回到嘶軸簡易機場找她。','','','測試卡芙緹的光束槍','','','',0), +(11657,'zhTW','接住火炬','既然你已經學會投擲火炬了,讓我們看看你接不接得住它!$B$B拿著這堆未點燃的火炬。去篝火那邊然後把火炬高高地丟向空中!然後在火炬落地之前接住它…然後再把它丟回去!連續接住四個後,就回來找我。$B$B小心點!如果它們掉到地上可是很危險的!所以千萬別失誤!要是你真的失誤了,那你就得回到篝火那再重新開始一次。祝你好運!','連續接住4根火炬,然後跟吞火者大師談話。','連續接住火炬4次。','找吞火者大師。','','','','',0), +(11665,'zhTW','城裡的鱷魚','你好,$g小夥子:姑娘;。我很高興你願意停下來和這個老人聊天 -- 家裡最近出了一些狀況。$b$b一個旅行商人把一窩鱷魚寶寶賣給了容易受騙的孩子。鱷魚是狂野的獸類,許多已經逃走,潛伏在城裡的下水道中。$b$b拿出你最堅固的釣魚竿吧,在暴風城或是奧格瑪垂下魚標,把一隻小惡魔帶回來給我。我急著想看看這些鱷魚寶寶。','把一隻鱷魚寶寶帶給老人巴洛。你可以在撒塔斯城東北邊的泥濘湖畔找到他在那釣魚。','','到泰洛卡森林的泥濘湖畔找老人巴洛。','','','','',0), +(11666,'zhTW','魚餌強盜','你一定知道有關金色淡水小魚的事--牠們遍佈於所有泰洛卡森林的河中,對牧師來說是一道美味佳餚。不過這裡有個你從來都沒聽說過的:黑鰭小魚。$b$b這種魚是出名的狡詐且難以捕捉。你得在最佳的緊要關頭才能拉動你的釣線,因為牠們在咬住餌之前都很小心翼翼。$b$b將你的魚線丟入泰洛卡森林的河中,並將一尾黑鰭小魚帶來給我。別在湖中垂釣,黑鰭小魚只生長在流動的水中。','帶一尾黑鰭小魚給老人巴洛。你可以在撒塔斯城東北邊的泥濘湖畔找到他在那釣魚。','','到泰洛卡森林的泥濘湖畔找老人巴洛。','','','','',0), +(11667,'zhTW','逃脫的傢伙','微光泥鰍是一種在納葛蘭水域中非常靈活的底棲魚。他們一生都在不斷成長,並以戰士的別稱聞名。$b$b許多年前,我抓到一隻我認為是世界上最大的泥鰍...直到牠咬斷我的魚線並且掙脫。$b$b像你這種程度的漁夫是不需要什麼指點 -- 你的命運正等在納葛蘭的湖畔。','抓到世界最大的泥鰍,然後帶給老人巴洛。你可以在撒塔斯城東北邊的泥濘湖畔找到他在那釣魚。','','到泰洛卡森林的泥濘湖畔找老人巴洛。','','','','',0), +(11668,'zhTW','抓蝦子一點都不簡單','贊格沼澤的湖中擁有豐富的魚產。懷疑過他們以什麼為食嗎?$b$b就是蝦子。巨型清水蝦。洛克跟我說你可以用蝦子煮出無數的菜色。$b$b但是蝦子實在太小了,沒辦法用釣線來釣。所以這有個點子:把浮腫的倒刺鰓鱒魚剖開,夠幸運的話你會在當中找到一兩隻蝦子。','帶10隻巨型清水蝦給老人巴洛。你可以在撒塔斯城東北方找到他在泥濘湖畔垂釣。','','到泰洛卡森林的泥濘湖畔找老人巴洛。','','','','',0), +(11669,'zhTW','魔化之血肉片','我這個老人就快要去打獵了,打敗艾薩拉海岸外的一隻巨大鯊魚。$b$b事實上,我需要一種在水中也不會溶解的毒藥。想要製作出那樣的東西,我會需要一種腺體,來自於一種毒魚:魔化之血鯛魚。$b$b像這種邪惡的魚種只存活在地獄火半島和影月谷的惡水中。帶條大魚給我,我就會是個快樂的老人了。','帶一尾可怕的魔化之血鯛魚給老人巴洛。你可以在撒塔斯城東北邊的泥濘湖畔找到他在那釣魚。','','到泰洛卡森林的泥濘湖畔找老人巴洛。','','','','',0), +(11691,'zhTW','召喚艾胡恩','我和手下的薩滿已經聚集我們的力量,為了接下來和冰霜領主的戰鬥做好準備。$n,你將會是大地之母的拳頭。$B$B帶著這根熔岩圖騰。對東北方的冰石使用它。艾胡恩正在透過那個石塊引導他的力量;我們希望圖騰能夠打斷他並且切斷他和元素位面的連結。$B$B如果我們夠幸運的話,那或許我們就能打敗他。$B$B做好準備,$n。如果艾胡恩和我們正面衝突,他將會非常瘋狂與憤怒。','將陶土議會熔岩圖騰帶到冰石旁邊。','','到希爾斯布萊德丘陵的達隆山找冰石。','','','','',0), +(11696,'zhTW','艾胡恩就在這裡!','$n,你的出現真是個恩賜。艾胡恩就在那些洞穴之中,為他的攻擊積蓄力量。陶土議會已經派人出發了,但單靠他們是無法擊敗艾胡恩的。$B$B探索吧,$n。找到我們陶土議會的薩滿,和他們的領袖魯瑪‧天空之母談談。或許加上你的力量,我們能在一切太遲之前打倒艾胡恩。','在奴隸監獄中找到魯瑪‧天空之母。','','','','','','',0), +(11731,'zhTW','投擲火炬','你想當一名火焰雜耍師?你已經具備這個資格了嗎?你夠靈敏嗎?反應夠快嗎?你有勇氣嗎?假如你認為你已經具備以上的條件,那麼我們來做個小小的練習吧!$B$B拿著這些火炬,然後跑到篝火的旁邊。你會看到火盆上閃爍著標誌。對標示的火盆投擲一根火炬。動作要快!你得在標誌消失以前擲出火炬才算數!$B$B在時間結束之前擊中足夠數量的火盆,然後回到這裡…我們再來進行下一個課程。','在火炬投擲遊戲中獲勝,然後與吞火者大師談話。','擊中8個火盆。','找吞火者大師。','擊中火盆','','','',0), +(11790,'zhTW','教徒內奸','這個祭壇布滿各種詛咒神教的印記。看來本土上的那些狂信者也來到了北裂境。最好去通知這艘船的船長。$B$B你或許可以在甲板上找到他。','與『左撇子』縱帆船長談談,他就在驍勇要塞的風暴破碎者上。','','','','','','',0), +(11861,'zhTW','榮耀火焰','','','','','','','','',0), +(11862,'zhTW','榮耀火焰','','','','','','','','',0), +(11863,'zhTW','榮耀火焰','','','','','','','','',0), +(11882,'zhTW','玩火','你想學點熱騰騰的新技巧嗎?$b$b我不知道你有沒有辦法學會我這種技藝,不過如果你是個夠專心的學生的話,或許能學會一兩招。去跟任何一個聯盟主城的吞火者大師談談。他們應該可以協助你。','跟任何一個聯盟主城的吞火者大師談談。','','','','','','',0), +(11883,'zhTW','火舞?','你想要學習火舞的藝術?$b$b很好,那去跟任何一個部落主城的火舞者大師談談。他們應該可以協助你。','跟任一個何部落主城的火舞者大師談談。','','','','','','',0), +(11886,'zhTW','不尋常的活動','當慶典舉行時,$c,我們當中的某些人就需要留意那些較嚴重的問題。$b$b在節慶開始時,我們收到了來自佐拉姆海岸的報告,有關於暮光教派的活動明顯增加。這個節日的起源就是緬懷那些瘋子所崇敬的強大力量;這不可能是巧合。前往黑暗深淵入口南邊的營地去,看看那些暮光教徒在搞什麼鬼 - 必要的時候使用武力也沒關係。等你找到的時候,使用這個信號來召喚一個嚮導。','前往位於梣谷,佐拉姆海岸的黑暗深淵入口南邊新成立的暮光營地。為陶土議會找出答案,然後使用圖騰信號召喚陶土議會嚮導。','','找陶土議會嚮導。','','','','',0), +(11891,'zhTW','無辜的偽裝','根據這個看來,在佐拉姆海岸的大集會西北邊有另一個教徒營地,而且他們正在與...客人說話?$b$b親耳聽聽會知道的更多,$r。拿著這個寶珠;它可讓你以本地海灘爬行物的模樣出現。去刺探那些教徒在西北邊營地中的「客人」談話,成功後回報給我。','使用爬行者寶珠去刺探位於梣谷,佐拉姆海岸的黑暗深淵西邊新成立的暮光營地。然後使用圖騰信號召喚陶土議會嚮導。','偷聽暮光教徒的陰謀。','找陶土議會嚮導。','','','','',0), +(11915,'zhTW','玩火','你想學點熱騰騰的新技巧嗎?$b$b我不知道你有沒有辦法學會我這種技藝,不過如果你是個夠專心的學生的話,或許能學會一兩招。去跟任何一個部落主城的吞焰者大師談談。他們應該可以協助你。','跟任一個何部落主城的吞焰者大師談談。','','','','','','',0), +(11917,'zhTW','反攻','我們必須以行動來維持平衡!時間對我們相當不利。$b$b回到佐拉姆海岸矗立著大型冰石的營地。他們可以利用這些東西來和元素溝通,就像是希利蘇斯那樣。雖然我不喜歡這樣,那些精靈會瞭解的 - 你必須要召喚艾胡恩手下的一個副官,並且摧毀它。或許這樣先發制人的行動會有效...','把冰石召喚出來的霜浪副官殺死,冰石就在梣谷的佐拉姆海岸。然後向主城中的陶土議會長老回報。','','找陶土議會長者。','','','','',0), +(11921,'zhTW','投擲更多的火炬','哈囉,火焰雜耍師!你玩得開心或是燒掉了什麼嗎?那就是我想聽到的事!現在,你覺得自己是個火炬投擲的專家嗎?既然這樣的話我有個測試給你...$B$B你知道規則:將火炬投擲到標記的火盆裡。不過,這一次你擁有的時間變少,你得投中的火盆更多了。$B$B準備好了嗎?','在火炬投擲遊戲中獲勝,然後與吞火者大師談話。','擊中20個火盆。','找吞火者大師。','擊中火盆','','','',0), +(11922,'zhTW','投擲火炬','你想當一名火焰雜耍師?你已經具備這個資格了嗎?你夠靈敏嗎?反應夠快嗎?你有勇氣嗎?假如你認為你已經具備以上的條件,那麼我們來做個小小的練習吧!$B$B拿著這些火炬,然後跑到篝火的旁邊。你會看到火盆上閃爍著標誌。對標示的火盆投擲一根火炬。動作要快!你得在標誌消失以前擲出火炬才算數!$B$B在時間結束之前擊中足夠數量的火盆,然後回到這裡…我們再來進行下一個課程。','在火炬投擲遊戲中獲勝,然後跟吞焰者大師談話。','擊中8個火盆。','找吞焰者大師。','擊中火盆','','','',0), +(11923,'zhTW','接住火炬','既然你已經學會投擲火炬了,讓我們看看你接不接得住它!$B$B拿著這堆未點燃的火炬。去篝火那邊然後把火炬高高地丟向空中!然後在火炬落地之前接住它…然後再把它丟回去!連續接住四個後,就回來找我。$B$B小心點!如果它們掉到地上可是很危險的!所以千萬別失誤!要是你真的失誤了,那你就得回到篝火那再重新開始一次。祝你好運!','連續接住4根火炬,然後跟吞焰者大師談話。','連續接住火炬4次。','找吞焰者大師。','','','','',0), +(11924,'zhTW','接住更多的火炬','接火炬當然可以讓你保持清醒。你以為你可以持續很久嗎?$B$B走著瞧吧...','連續接住10根火炬,然後跟吞火者大師談話。','連續接住火炬10次。','找吞火者大師。','','','','',0), +(11925,'zhTW','接住更多的火炬','接火炬當然可以讓你保持清醒。你以為你可以持續很久嗎?$B$B走著瞧吧…','連續接住10根火炬,然後跟吞焰者大師談話。','連續接住火炬10次。','找吞焰者大師。','','','','',0), +(11926,'zhTW','投擲更多的火炬','哈囉,火焰雜耍師!你燒得開心嗎?那就是我想聽到的事!現在,你覺得自己是個火炬投擲的專家嗎?既然這樣的話我有個測試給你…$B$B你知道規則:將火炬投擲到標記的火盆裡。不過,這一次你擁有的時間變少,你得投中的火盆更多了。$B$B準備好了嗎?','在火炬投擲遊戲中獲勝,然後跟吞焰者大師談話。','擊中20個火盆。','找吞焰者大師。','擊中火盆','','','',0), +(11933,'zhTW','偷取艾克索達之焰','這個從艾克索達核心偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但故事使者或許知道更多...','將艾克索達之焰交給節慶故事使者。','','找節慶故事使者。','','','','',0), +(11935,'zhTW','偷取銀月之焰','這個從銀月城偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但博學大師或許知道更多...','將銀月之焰交給節慶博學大師。','','找節慶博學大師。','','','','',0), +(11941,'zhTW','謎題...','這個金屬碎片有某種力量阻礙了你施法。$b$b或許瑞洛拉茲可以壓抑一些它的效果。','將閃爍碎片交給隘境之盾的瑞洛拉茲。','','到北風凍原的隘境之盾找瑞洛拉茲。','','','','',0), +(11943,'zhTW','囚籠','你發現了一個特殊監牢的碎片,$n。$b$b瑪里苟斯的手下使用類似的監牢囚禁被抓到的法師以及其他秘法實體,但這個監牢是製造來囚禁某種...更強大的...$b$b希望我們敵人的敵人能夠成為一個朋友,你要去找到這個監牢的其他碎片。$b$b它們可能由瑪里苟斯最信賴的部下所保管。','隘境之盾的瑞洛拉茲要你從天藍將軍身上取得監禁外殼,以及從戰爭使者寇瑞卓克身上取得能量之核。','','到北風凍原的隘境之盾找瑞洛拉茲。','','','','',0), +(11947,'zhTW','反攻','我們必須以行動來維持平衡!時間對我們相當不利。$b$b淒涼之地西北邊的艾瑟雷索,有個營地藏在它的陰影之下。他們使用冰石和元素溝通,就像是希利蘇斯那樣。雖然我不喜歡這樣,那些精靈會瞭解的 - 你必須要召喚艾胡恩手下的一個副官,並且摧毀它。或許這樣先發制人的行動會有效...','把冰石召喚出來的冰雹副官殺死,冰石就在淒涼之地的艾瑟雷索。然後向主城中的陶土議會長老回報。','','找陶土議會長老。','','','','',0), +(11948,'zhTW','反攻','我們必須以行動來維持平衡!時間對我們相當不利。$b$b奈普圖隆一直以來都在荊棘谷西岸小島上有個基地。暮光教派在此設立了冰石,來和獵潮者的國度溝通,就像是希利蘇斯那樣。雖然我不喜歡這樣,那些精靈會瞭解的 - 你必須要召喚艾胡恩手下的一個副官,並且摧毀它。或許這樣先發制人的行動會有效...','把冰石召喚出來的冰風副官殺死,冰石就在荊棘谷西邊的水元素小島。然後向主城中的陶土議會長老回報。','','找陶土議會長老。','','','','',0), +(11952,'zhTW','反攻','我們必須以行動來維持平衡!時間對我們相當不利。$b$b灼熱峽谷的觀火嶺是暮光教派在此地的活動基地。最近他們透過冰石來和獵潮者的國度溝通,就像是希利蘇斯那樣。雖然我不喜歡這樣,那些精靈會瞭解的 - 你必須要召喚艾胡恩手下的一個副官,並且摧毀它。或許這樣先發制人的行動會有效...','把冰石召喚出來的嚴寒副官殺死,冰石就在灼熱峽谷的西北部,觀火嶺底下的洞穴。然後向主城中的陶土議會長老回報。','','找陶土議會長老。','','','','',0), +(11953,'zhTW','反攻','我們必須以行動來維持平衡!時間對我們相當不利。$b$b希利蘇斯是暮光教派的艾澤拉斯基地。他們在北部透過新的冰石來和獵潮者的國度溝通。雖然我不喜歡這樣,那些精靈會瞭解的 - 你必須要召喚艾胡恩手下的一個副官,並且摧毀它。或許這樣先發制人的行動會有效...','把冰石召喚出來的冰川副官殺死,冰石就在希利蘇斯北部的暮光小徑。然後向主城中的陶土議會長老回報。','','找陶土議會長老。','','','','',0), +(11954,'zhTW','反攻','我們必須以行動來維持平衡!時間對我們相當不利。$b$b為了確保艾胡恩能夠成功,暮光教派在德拉諾靠近黑暗之門的地方建立了一個基地。他們透過冰石來協助冰霜領主的抵達。雖然我不喜歡這樣,那些精靈會瞭解的 - 你必須要召喚艾胡恩手下的一個聖殿騎士,並且摧毀它。或許這樣先發制人的行動會有效...','把冰石召喚出來的冰川聖殿騎士殺死,冰石就在地獄火半島靠近黑暗之門的地方。然後向主城中的陶土議會長老回報。','','找陶土議會長老。','','','','',0), +(11955,'zhTW','艾胡恩,冰霜領主','我相信你有足夠的力量能承擔我們眼前的責任。$b$b我們不能容許暮光教派和奈普圖隆的納迦異端實現他們的計畫。為了艾澤拉斯以及這塊土地上所有的生命,我們一定要行動。我們的目標十分明確,你必須前往盤牙蓄湖中的奴隸監獄,去找我們在那邊的薩滿。去吧,要快!','前往贊格沼澤的盤牙蓄湖,進入其中的奴隸監獄,並且和紐瑪‧雲女交談。','','','','','','',0), +(11964,'zhTW','夏日小焦焰的薰香','你知道節慶火焰在每個聯盟營地都有嗎?火焰看守者在每個城鎮之外照顧它們,確保篝火明亮和慶典的維持。$b$b每位火焰看守者都有一個夏日小焦焰陪伴 -- 火焰精靈的使者。$B$B你想要向小焦焰獻上敬意嗎,$n?帶著這個夏日薰香,把它交給任何一個夏日小焦焰。取悅那些火焰小精靈,它或許會回報你。','節慶博學大師要你把夏日薰香帶給任何一座聯盟據點外的夏日小焦焰。','','找夏日小焦焰。','','','','',0), +(11966,'zhTW','節慶小焦焰薰香','你知道節慶火焰在每個部落營地都有嗎?火焰守護者在每個城鎮之外照顧它們,確保篝火明亮和慶典的維持。$b$b每位火焰看守者都有一個節慶小焦焰陪伴 -- 火焰精靈的使者。$B$B你想要向小焦焰獻上敬意嗎,$n?帶著這個夏日薰香,把它交給任何一個節慶小焦焰。取悅那些火焰小精靈,它或許會回報你。','節慶故事使者要你把夏日薰香帶給任何一座部落據點外的節慶小焦焰。','','找節慶小焦焰。','','','','',0), +(11970,'zhTW','夏日傳說大師','節慶固然是個歡樂與笑語的時刻,然而讓你知道這個節日的由來也很重要。教育是一種需要追求並且細細品味的東西。$b$b聯盟主城的節慶博學大師能夠引領你。去好好學習吧。','和聯盟主城的任何一位節慶博學大師談談。','','','','','','',0), +(11971,'zhTW','夏日故事使者','節慶固然是個歡樂與笑語的時刻,然而讓你知道這個節日的由來也很重要。教育是一種需要追求並且細細品味的東西。$b$b部落主城的節慶故事使者能夠引領你。去好好學習吧。','和部落主城的任何一位節慶故事使者談談。','','','','','','',0), +(11972,'zhTW','艾胡恩裂片','這些裂片不祥地震動著。它們蘊含著冰霜領主的最後精華嗎?','將寒冰裂片交給魯瑪‧天空之母。','','回奴隸監獄找魯瑪·天空之母。','','','','',0), +(11974,'zhTW','[ph]等我長大了……','你在我這麼大的時候,你就知道你長大後會想當個$c嗎?$B$B我還不確定我想做什麼呢。我以前想當個血騎士,但現在不會了。現在我想當個搖滾巨星!像是那個70級牛頭大佬裡面的血精靈!$B$B沒在巡迴的時候,他們常在銀月城裡閒逛耶!你可以帶我去那裡嗎?他們常在長者步道的一個陽台…大概是不想讓歌迷太靠近吧。但我們總可是試著靠近,對吧?$B$B拜託帶我去,拜託!','帶你的孤兒,瑟蘭德雅去看70級牛頭大佬,他們在銀月城的長者步道。當你抵達時,如果她不附近記得要叫她。','瑟蘭德雅在銀月城拜訪了70級牛頭大佬','找血精靈孤兒。','','','','',0), +(11975,'zhTW','現在,等我長大...','也許我已經問過你了,你在我這麼大的時候,你就知道你長大後會想當個$c嗎?$B$B我還不確定我想做什麼呢。也許是法師、術士或是個血騎士,就像我以前說的?說不定…一個搖滾巨星!!像席格‧尼修斯,那個精英牛頭大佬裡面的血精靈!$B$B我聽說沒在巡迴的時候,他們常在銀月城裡閒逛耶!你可以帶我去那裡嗎?他們就坐在長者步道的一個陽台,等別人來拜訪他們。$B$B拜託帶我去,拜託!','帶你的孤兒,瑟蘭德雅去看精英牛頭大佬,他們在銀月城的長者步道。當你抵達時,如果她不附近記得要叫她。','','找血精靈孤兒。','','','','',0), +(11976,'zhTW','冰片','碎片跳動著,透露出不祥的徵兆。難道其中蘊含著冰霜領主的精華?','將冰片交給魯瑪·天母。','','到希爾斯布萊德丘陵的達隆山找魯瑪·天空之母。','','','','',0), +(11987,'zhTW','幸運卡片:白銀','','','','','','','','',0), +(11992,'zhTW','海圖','你在龍皮上發現了海圖的一部分。如果能拼湊出完整的海圖,或許可以瞭解克瓦迪爾未來的攻擊計畫。$B$B裂鞭海岸的水手身上說不定就攜帶著海圖的缺失部分。卡魯克應該會對上面的內容感興趣吧。','將斯卡迪爾海圖的缺失部分交給裂鞭海岸的卡魯克。','','到北風凍原找卡魯克。','','','','',0), +(11995,'zhTW','繁星之眠需要你','$C,我知道那些巨牙海民會要求你幫很多忙,但你必須要前往繁星之眠,而且要盡快!$B$B今天早上的劇變一定有很廣泛的影響,絕對不止於原住民的不便。$B$B港口北面出去的十字路口的西邊就是繁星之眠。那邊有個大法師叫做莫德菈。她會在那邊等你。','到繁星之眠和大法師莫德菈的影像談談。','','','','','','',0), +(11996,'zhTW','阿格瑪之錘需要你','$C,我知道那些巨牙海民會要求你幫很多忙,但你必須要前往阿格瑪之錘,而且要盡快!$B$B今天早上的劇變一定有很廣泛的影響,絕對不止於原住民的不便。$B$B港口北面出去的十字路口的西邊就是阿格瑪之錘。大法師埃薩‧奪日者會在那邊等你!','和位於阿格瑪之錘的大法師埃薩‧奪日者的影像談談。','','','','','','',0), +(11997,'zhTW','再次向格裡安·斯托曼報到','月溪旅奉命轉至灰熊丘陵東北部,確保那裡的通行安全。他們在灰喉堡東北方、索爾莫丹西南方創建了一處營地。$B$B你應該認識月溪旅的領袖格裡安·斯托曼上尉吧?在對抗洛丹倫天災軍團的戰役中,格裡安立下了赫赫戰功。但他卻毅然決定離開戰場,返回西部荒野對抗迪菲亞兄弟會。','與月溪旅營地的格裡安·斯托曼上尉談一談。','','','','','','',0), +(11999,'zhTW','搜索屍體','西南邊的月眠花園是一群精靈貴族的最後安息地。同時也是一個地脈核心。$B$B藍龍軍團在使用一種叫做極濤磁針的魔法裝置要摧毀核心,將能量釋出好讓他們可以隨意重新導向。$B$B我需要更多的訊息,而你要幫我取那些訊息!$B$B在那個地方被摧毀成遺跡之後,精靈貴族的鬼魂重新甦醒,殺死了那邊大半的狩法獵人。去搜索他們的屍體尋找線索。','找出月眠花園計畫書,並交到阿格瑪之錘給大法師埃薩‧奪日者的影像。','','到龍骨荒野的阿格瑪之錘找大法師埃薩·奪日者的影像。','','','','',0), +(12000,'zhTW','搜索屍體','西南邊的月眠花園是一群精靈貴族的最後安息地。同時也是一個強大的地脈核心。$B$B藍龍軍團在使用一種叫做極濤磁針的魔法裝置要摧毀核心,將能量釋出好讓他們可以隨意重新導向。$B$B我需要更多的訊息,而我希望你能幫我取得那些訊息。$B$B在那個地方發生劇變而變成遺跡之後,精靈貴族的鬼魂重新甦醒,殺死了那邊大半的狩法獵人。去搜索他們的屍體尋找線索。','找出月眠花園計畫書,並帶去繁星之眠給大法師莫德菈的影像。','','到龍骨荒野的繁星之眠找大法師莫德菈的影像。','','','','',0), +(12006,'zhTW','為暴行復仇!','這些被稱為狩法獵人的生物闖入並毀掉了我們的居地。$B$B為我們復仇,否則我會確保你的軍事基地被亡靈大軍給輾過!','殺死總計15名的龍骨荒野狩法獵人、月眠巡者、極濤磁針巫士或節點巫師。完成之後向月眠花園的伊希尼歐‧月影回報。','','到龍骨荒野的月眠花園找伊希尼歐·月影。','殺死月眠花園的藍龍軍團部隊','','','',0), +(12009,'zhTW','突凱亞的螃蟹陷阱','因為這些麻煩事,我失去了助手。如果可以的話你能不能幫幫我?$B$B我在港口的海面下設置了許多補蟹陷阱。你能幫我拿回來嗎?我太老了,動不了了,大海對我來說又太危險。$B$B求求你,拿著這顆氣囊,你在水面下的時候它會幫助你呼吸。','收集8個突凱亞的螃蟹陷阱,交還給默亞基港的突凱亞。','','到龍骨荒野的默亞基港找突凱亞。','','','','',0), +(12012,'zhTW','通知長老','這個消息必須要通知整個陶土議會。我不確定該如何進行,但把任務交付給你的長老或許知道。拜託,回去向長老報告,並且採取下一步行動 - 我們一定得做點什麼!','回到任何一座主城,並和陶土議會長老交談。','','','','','','',0), +(12020,'zhTW','就這麼一次,在我酒醉的時候...','黑鐵矮人被痛扁了一頓!就在他們夾著尾巴逃回黑鐵酒吧的時候,他們還掉了一些貨物下來。最重要的是,你保住了營地...至少今天保住了。$b$b去找博克西,然後向他說明你擊敗黑鐵矮人的英勇事蹟。','與啤酒節營地的博克西‧栓旋者交談。','','','','','','',0), +(12022,'zhTW','乾了再砸!','嘿!看來你酒量不錯嘛。\n\n但你駕馭得了酒杯嗎?\n\n我們拿那些把營地搞得天翻地覆的麥芽酒沒轍。我們發現如果要重新把這些活生生的麥芽酒給抓住,最好的辦法就是朝它們丟酒杯!\n\n看來你需要練習練習。如果你能丟中S.T.O.U.T.,那下次麥芽酒又活過來時你應該可以幫得上忙。拿一杯樣品酒來,乾了,然後把酒杯丟出去!','朝S.T.O.U.T.丟無酒精的啤酒節樣品並丟中5次。','','到丹莫洛找博克西·栓旋者。','命中S.T.O.U.T.','','','',0), +(12027,'zhTW','軟綿綿先生的冒險之旅','抱歉打擾你,$g先生:女士;,你知道回去軍營的路嗎?我和軟綿綿先生本來決定在樹林裡走走,而我的兄弟沃特也要跟來的,可是他有侍從工作要做只得作罷。$B$B我和軟綿綿先生自個兒來,但是迷路了,森林裡到處都是飢餓的狼群,不過,我們找到了這座塔。$B$B狼走了,可是我們還是走不出去。$B$B我問過軟綿綿先生,他也不清楚回去的路,可以幫幫我們嗎?行行好?','幫助愛蜜莉和軟綿綿先生回到西部荒野民兵團駐營,然後再向侍從沃特交談。','幫助艾米莉和小毛球逃回營地','到灰白之丘的西部荒野民兵團駐營找侍從沃特。','','','','',0), +(12028,'zhTW','靈魂洞察','$R,自從地震分隔之後,我再也沒有聽過因度雷村族人的消息了。$B$B你有經歷過幻象任務嗎?你打敗過洛根,你一定能夠勝任的。$B$B我會給你一些特製的薰香灑在我的火盆中。把它的煙霧用力吸進去,你的靈魂就會飄升到空中,可以看見因度雷的情況。$B$B隨著你的靈魂升起,我就可以透過你的眼睛觀察。','完成靈魂洞察之後和默亞基港的『秘法師』托阿魯交談。','通過靈魂視界觀察因度雷村的情況。','到龍骨荒野的默亞基港找『秘法師』托阿魯。','','','','',0), +(12030,'zhTW','長者馬納洛亞','我的人民...$B$B<秘法師瀕臨崩潰邊緣。>$B$B當你的靈魂飛越這座村子的時候,我感受到長者馬納洛亞注意到你。$n,他希望和你聊聊。我們將這些岩石長者尊崇為遠古智慧的明燈。$B$B長老一定是想要幫忙,到村子的西北邊找到他。','和長者馬納洛亞交談,他就是因度雷村中的雕像。','','','','','','',0), +(12031,'zhTW','解放徘徊者','精靈在西方的聖地被蹂躪得支離破碎。如今,魔法在土地間流竄,所經之處飽受摧殘。$B$B當藍龍試著要控制這股法力的同時,卡魯耶克的靈魂陷入了危機。$B$B這股力量自湖泊竄出,瞬間就殺死了絕大多數的村民,而倖存者都陷入了瘋狂。$B$B$n,你一定要馬上釋放這些靈魂,他們才能超生。放過那些瘋狂的生物;他們還有機會能獲得理智。','讓總計15名的因度雷漁夫、因度雷秘法師或因度雷戰士獲得安息,並向因度雷村的長者馬納洛亞回報。','','到龍骨荒野的因度雷村找長者馬納洛亞。','讓因度雷靈魂安息','','','',0), +(12123,'zhTW','警告龍后','<巨龍管理者將介紹信從你手中取走。>$B$B是...是呀,我想你已經準備好覲見女王。$B$B準備好就告訴我吧,我會命這些飛龍安全地引領你到神殿的頂端。你得親自將這封信呈給雅立史卓莎女王。','將介紹信送交到龍眠神殿的『生命守縛者』龍后雅立史卓莎手上。','','到龍骨荒野的龍眠神殿找『生命守縛者』龍后雅立史卓莎。','','','','',0), +(12133,'zhTW','砸碎南瓜','這個大型南瓜燈籠放在村莊的中央。那些看著它眼睛的人,都會受到當中黑暗威脅的引誘而誤入歧途。$B$B砸碎南瓜之後露出一個老舊、燒焦的聖徽。','將燒焦的聖徽交給變裝的孤兒監護員。','','找變裝的孤兒監護員。','','','','',0), +(12135,'zhTW','「讓火焰來吧!」','你一定得幫幫我們!無頭騎士可能會在任何時候攻擊這個村子!火焰將會到處都是!孩子們並不安全!$B$B拜託,$n,你願意面對無頭騎士的火焰嗎?等他來的時候,你一定要加入滅火的行列。拿起水桶灑向火源,或是交給靠近火勢的朋友。如果你能熄滅那些火焰,我們或許還有救!','變裝的孤兒監護員希望你在無頭騎士縱火之後,幫助撲滅村莊中的火勢。等火完全撲滅之後,再和變裝的孤兒監護員交談。','撲滅火焰','找變裝的孤兒監護員。','','','','',0), +(12139,'zhTW','「讓火焰來吧!」','無頭騎士可能會在任何時候攻擊這個村子!火焰將會到處都是!$B$B$n,你願意面對無頭騎士的火焰嗎?等他來的時候,你一定要加入滅火的行列。拿起水桶灑向火源,或是交給靠近火勢的朋友。如果你能熄滅那些火焰,我們或許還有救!','戴面具的孤兒監護員要你幫忙撲滅村莊中的火勢。等火完全撲滅之後,再和鎮上的戴面具的孤兒監護員交談。','撲滅火焰','找戴面具的孤兒監護員。','','','','',0), +(12153,'zhTW','鐵族長與他的鐵砧','既然你已經將你的戰爭魔像充能完成,接下來就是要好好利用能源了。到丹亞戈的內部啟動魔像然後控制它。$B$B就我們所收集到的資料來看,丹亞戈的領袖,鐵族長怒錘,他身邊的私人保鏢,推測能夠保護他不受一切的傷害。$B$B那個保鏢就是和他一道旅行的構裝生物,大家都叫它鐵砧。癱瘓那尊構裝生物,那麼他的保護也就同時消失。$B$B族長常常待在主要工廠裡面,位在丹亞戈的頂端,在那裡監督下層產品進度。','利用戰爭魔像的能力,擊敗鐵族長怒錘,接著向勘察員崗哨的瑞加爾‧斷眉回報。','','到灰白之丘的勘察員崗哨找瑞加爾‧斷眉。','','','','',0), +(12154,'zhTW','熄燈號','丹亞戈的頂端大廳儲存了整個區域的能量來源。如果你能將動力核心摧毀,這可以癱瘓整個丹亞戈好一會兒。$B$B沒有能量就沒有魔像、沒有哨兵更沒有閃電武器。$B$B當我們被送上去以後,他們說這些炸藥是用來逃脫的,但是都是因為鐵族長怒錘,這些探查都報銷了。不過我們還是可以利用這些炸藥就是,畢竟,這些是我們唯一可以用來炸毀動力核心的東西。','利用瑞加爾的爆裂物摧毀丹亞戈的符能核心,接著向勘察員崗哨的瑞加爾‧斷眉回報。','','到灰白之丘的勘察員崗哨找瑞加爾‧斷眉。','摧毀丹亞戈能量核心','','','',0), +(12155,'zhTW','砸碎南瓜','這個大型南瓜燈籠放在村莊的中央。那些看著它眼睛的人,都會受到當中黑暗威脅的引誘而誤入歧途。$B$B砸碎南瓜之後露出一個老舊、燒焦的聖徽。','將燒焦的聖徽交給戴面具的孤兒監護員。','','找戴面具的孤兒監護員。','','','','',0), +(12180,'zhTW','被俘的勘察員','為了探查神器和當地歷史的資訊,瑞加爾派了一隊的勘察員進丹亞戈。瑞加爾的小隊卻從未料想到丹亞戈是如此的人口眾多。$B$B當鐵矮人備戰的同時,他們被俘,但是我們不夠人手救出他們,而瑞加爾又忙著幻想著如何打敗鐵矮人而分身乏術。$B$B任務落在你肩上了,$n,任何鐵矮人和他們僕役的身上,都有可能帶著關有勘查員牢房的鑰匙。','救出勘察員加恩、勘察員拓剛和勘察員韋拉那,再向勘察員崗哨的巡山人基立安回報。','','到灰白之丘的勘察員崗哨找巡山人基立安。','救出勘察員加恩','救出勘察員拓剛','救出勘察員韋拉那','',0), +(12185,'zhTW','為洛肯笑一個','我已經利用你捕捉的影像,把監督者偽裝所需的一切給準備妥當了。不是我要自誇,你偽裝的鐵矮人真不賴。$B$B把偽裝工具帶去丹亞戈,偽裝你自己,前去城市寬廣的中央區最東邊建築物裡面。$B$B在那裡,你應該可以看見一個平臺,用來讓族長和監督者聽取洛肯的命令。披著偽裝啟動它,盡你所能的蒐集情報。','把你自己偽裝成鐵符文監督者,攔截洛肯的訊息,然後回報給勘察員崗哨的巡山人基立安。','','到灰白之丘的勘察員崗哨找巡山人基立安。','收到洛肯的訊息','','','',0), +(12191,'zhTW','乾了再砸!','嘿,看來你的手臂挺有力的!\n\n我就開門見山地說了。有時候麥芽酒會在營地附近大鬧。我們花了大把的錢才把那些商人和他們的酒給請到這裡來!一丁點酒都不能浪費掉,更別說是讓它們活過來了!\n\n讓麥芽酒回到原始型態最好的方法就是朝它丟酒杯。把樣品酒喝光,然後朝這邊的S.T.O.U.T.丟酒杯。證明你有能力保護我們的財產!','朝S.T.O.U.T.丟無酒精的啤酒節樣品並丟中5次。','','到杜洛塔找比索·迅提。','命中S.T.O.U.T.','','','',0), +(12192,'zhTW','就這麼一次,在我酒醉的時候...','黑鐵矮人被痛扁了一頓!就在他們夾著尾巴逃回黑鐵酒吧的時候,他們還掉了一些貨物下來。最重要的是,你保住了營地...至少今天保住了。$b$b去找比索,然後向他說明你擊敗黑鐵矮人的英勇事蹟。','與啤酒節營地的比索‧迅提交談。','','','','','','',0), +(12194,'zhTW','喂,聽說今年沒有紀念品,是不是真的啊?','我們不但供應每個人啤酒,同時還贈送酒杯!只要用合法的方式就可以換取漂亮的紀念杯!這張兌換卷給你。$b$b跟啤酒節營地後方的布力克斯談話。他是個怪傢伙,甚至現在也還戴著那副護目鏡。他會幫你處理那張兌換券,而所有啤酒節的交易也都可以找他。','把啤酒節酒杯兌換券交給啤酒節營地後方的布力克斯‧修械。','','到杜洛塔找布力克斯‧修械。','','','','',0), +(12228,'zhTW','重獲法術','','','','','','','','',0), +(12233,'zhTW','處理種子','不,不……還是你拿著吧。$B$B你不會真的想讓我拿著它們吧?$B$B接下來你該這麼做……','','','','','','','',0), +(12245,'zhTW','格殺俘虜','我們準備了更多的蠢蛋供你宰殺。$B$B我聽我的探員說一些模範市民落入了血色突襲軍的手中。$B$B這可不行。$B$B回去新壁爐谷,殺掉亡靈衛兵施耐德,資深書記金尼迪斯,工程師波奇,以及大法官亞邁。$B$B據我所知,他們散佈在該區域的各處,但毫無疑問的,他們都待在籠子裡等著被折磨。$B$B和他們說話,宰掉他們!','女間諜瑞派恩要求你除去亡靈衛兵施耐德,資深書記金尼迪斯,工程師波奇,以及大法官亞邁。$B$B任務完成之後,與毒怨之地的高階執行官羅思回報你完成的消息。','','到龍骨荒野的毒怨之地找高階執行官羅思。','','','','',0), +(12252,'zhTW','折磨拷問者','夠了!我要你終止我的子民所受的折磨!$B$B突襲軍的拷問者阿爾馮斯,從每個落在那些混蛋手上的人身上搾取情報!我得知道他們到底得知了什麼情報。$B$B我的線人告訴我他的拷問室位於軍營的地下室,就在鐵匠舖的旁邊。我借給你我個人的烙鐵,確保這任務正確地執行。$B$B找到他,然後問出情報。','毒怨之地的高階執行官羅思要你在拷問者阿爾馮斯身上使用5次烙鐵來拷問出情報。然後殺了他。','','到龍骨荒野的毒怨之地找高階執行官羅思。','徹底拷問拷問者樂卡夫特','','','',0), +(12254,'zhTW','除去祈禱','這些計畫透露了某種暗地裡的陰謀。如果我們要搞清楚究竟是怎麼一回事,我們就得趕快行動。$B$B但首先,我們得先處理突襲軍身上的奇異保護,如果毒怨之地要一勞永逸的對付他們,我們得找出他們背後的傢伙並消滅他們。$B$B我注意到新壁爐谷遠處那間教堂裡的主教會祝福那些部隊。殺了他,竊取他的祈禱書。$B$B也許這本書可以給我們一點線索。','新壁爐谷的史考莉探員要你取得主教史曲特的祈禱書。','','到龍骨荒野的新壁爐谷找史考莉探員。','','','','',0), +(12272,'zhTW','流血的礦石','在納克薩瑪斯進攻的幾小時之前,我們有個礦工碰巧發現了一種暗色礦石,會不斷的流出黏濁的液體。在疏散礦坑的混亂之中,我們失去了那個陌生礦脈的樣本。現在天譴軍團正在為了製造他們的死亡機械探礦。$B$B你必須回去在此處東北方的腐屍農地裡的溫特加德礦坑,並回收這種奇怪的礦石。對我們的任務來說,這是至關緊要的一件事!','龍骨荒野上溫特加德要塞的攻城工程師刻閃要你從溫特加德礦坑回收10個奇怪的礦石的樣本。','','到龍骨荒野的溫特加德要塞找攻城工程師刻閃。','','','','',0), +(12278,'zhTW','每月啤酒俱樂部','會員享有優惠。成為「每月啤酒俱樂部」的會員,表示你有管道獲得到最新、最青的啤酒。$B$B帶著你的「每月啤酒」俱樂部會員表格給拉金‧雷酒,他就在鐵爐堡的石火旅店中。','把「每月啤酒」俱樂部會員表格帶給拉金‧雷酒,他就在鐵爐堡的石火旅店中。','','到鐵爐堡的石火旅店找丹莫羅的拉金‧雷酒。','','','','',0), +(12281,'zhTW','瞭解天譴戰爭機器','我們必須將史霖金的死視為一種安慰,化悲憤為力量。他的發現,以及你在礦坑中英勇的表現,與你所帶回來給我們的樣本,結合起來,讓我們對於天譴軍的戰爭機器有了更進一步的認識。$B$B將這個包裹帶給高階指揮官海弗德‧龍禍,裡面有那個奇異礦石的樣本和我的分析資料。','將刻閃的包裹遞送給位於溫特加德要塞的高階指揮官海弗德‧龍禍。','','到龍骨荒野的溫特加德要塞找高階指揮官海弗德·龍禍。','','','','',0), +(12282,'zhTW','往日的傷痕','$n,過去的記憶困擾著這片大地。我聽見橫貫整個北裂境墮落回音的哭號聲–對我哭喊。$B$B阿薩斯對每一個觸碰過的東西留下了駭人的傷痕。只有凋零與衰敗在他的視野中存留。對我們來說,研究我們敵人的過去非常重要。也許,不為人道的真相才能在這場戰役中突顯出幫助。$B$B首先,你必須在市鎮大廳中找回我的占卜寶珠,$n。離開這座塔,向左轉直走到底,前往市鎮廣場。','位於龍骨荒野,溫特加德要塞的『遠識』齊利格需要你找回他的占卜寶珠。','','到龍骨荒野的溫特加德要塞找『遠識』齊利格。','','','','',0), +(12283,'zhTW','真相大白','我們得搞清楚這裡發生了什麼事,所以需要將軍的日記!$B$B我很確定你可以在她宅邸二樓的床邊小桌上發現那本日記。宅邸就在教堂隔壁,獸欄和伐木場的對面。$B$B在你拿到日記以後,交給毒怨之地的高階執行官。$B$B你必須用老方法來辦這件事。鏡子的力量已經低到只夠讓我使用了。$B$B<探員奸笑著。>','史考莉探員要求你拿取大將軍阿比迪斯的日記,並將其交給毒怨之地的高階執行官羅思。','','到龍骨荒野的毒怨之地找高階執行官羅思。','','','','',0), +(12287,'zhTW','歐利克‧真心與遺民之濱','我凝視著寶珠、看見了你必經的道路,$n。$B$B多年以前,龍骨荒野海岸邊發生了一件慘劇。事件的本身依舊晦暗難明,但是我相信你的宿命就在南方,在遺民之濱的諸多廢墟之中。$B$B沿著東南方的路走下去,經過被蹂躪的城鎮廣場,順著路走,直到黎明之境。你會遇到我的一個老朋友,名叫歐利克‧真心。他在那兒等著你。','在龍骨荒野的黎明之境上,尋求歐利克‧真心的協助。','','','','','','',0), +(12297,'zhTW','叛徒與通敵','我手上的這份名單一定得要送到高階指揮官海弗德‧龍禍手中。他負責指揮第七軍團,駐紮在龍骨荒野東境的溫特加德要塞。$B$B如果這份名單上的任何一個叛徒駐紮在溫特加德...那就大事不妙了。$B$B快點,$n。把這份文件拿給格銳爾‧礦錘看,就在這鎮西要塞裡,然後向他解釋你的任務。他會讓你搭乘最快的獅鷲獸前往溫特加德!','亞當斯隊長要你把聯盟公文拿給鎮西要塞的格銳爾‧礦錘看。','','到凜風峽灣的鎮西要塞找格銳爾‧礦錘。','','','','',0), +(12306,'zhTW','每月啤酒俱樂部','$n,團結就是力量。成為「每月啤酒」俱樂部的一員,意味著你和你的同好隨時享用最青的啤酒。$b$b帶著你的「每月啤酒」俱樂部會員表格交給雷瑪,他就在奧格瑪裡。','帶著「每月啤酒」俱樂部會員表格交給奧格瑪裡的雷瑪。','','到奧格瑪找雷瑪。','','','','',0), +(12313,'zhTW','挽救啤酒節!','拯救美酒節!進入黑石深淵,與黑鐵酒吧的美酒節間諜談一談。','進入黑石深淵,與黑鐵酒吧的美酒節間諜談一談。','','','','','','',0), +(12318,'zhTW','拯救美酒節!','$n,我們的間諜發現了黑鐵矮人惡毒的陰謀!他們想破壞我們的美酒節慶典!$B$B科林·烈酒,這個釀酒者變節系列的頭領,糾集了黑石深淵的黑鐵矮人準備對付我們。他們的挖掘機經常朝我們發動攻擊。$B$B美酒節間諜已經潛入了位於黑石深淵深處的黑鐵酒吧。他應該知道關於科林的陰謀的更多資訊。$B$B找到這名間諜,拯救美酒節!','進入黑石深淵,與黑鐵酒吧的美酒節間諜談一談。','','','','','','',0), +(12416,'zhTW','戰火升溫','龍殿被天譴軍破壞殆盡,而龍殿的守護者,妲莉雅‧日觸,下落不明。在神殿中殞命的紅龍,如今成了扭曲的骸骨餘燼龍,將我們團團圍住,情勢危急,$r。$B$B伊斯肯達隊長帶領了一群汝等族類的小隊,在龍殿之外截斷天譴軍團的攻勢。$B$B前去幫助他...但請待在他的小隊後方。天譴軍團的攻勢源源不絕,我可不希望在那些滿是創痕的山谷中失去你。','幫助伊斯肯達隊長守護山谷,擊敗12隻嚴寒食屍鬼攻擊者、8隻嚴寒魂屍攻擊者,以及1隻嚴寒憎惡體攻擊者。事成以後,向賽利斯塔茲回報。','','到龍骨荒野的龍墳荒原找賽利斯塔茲。','','','','',0), +(12417,'zhTW','回歸大地','我還有另外一項需要注意的任務。我的兄弟不時在戰鬥中殞歿,如果我們不快點行動,他們只會助長餘燼龍的事例。$B$B從北方或南方的通道進入龍殿...這兩處的天譴軍應該比較薄弱。$B$B尋找從樹上掉落的晶紅橡實,並且將之種在我殞落的兄弟身旁。藉此,他們能夠帶來新生...這是吾族皆為之驕傲的命運。','從北方或南方的通道進入晶紅龍殿,尋找晶紅橡實。對戰死的紅龍使用晶紅橡實,使他們的軀體回歸大地。任務完成以後,向賽利斯塔茲回報。','','到龍骨荒野的龍墳荒原找賽利斯塔茲。','晶紅管理者回歸大地','','','',0), +(11486,'zhTW','美酒中的美酒','我知道像你這樣的$G小子:姑娘;最喜歡阻止衝突了,對吧?你想要讓你們的美酒節平平安安地辦完,不要出亂子。那麼我有一個提議……$B$B在這只酒杯中裝滿我們最棒的烈酒,然後把它交給鐵爐堡外的美酒節組織者,這樣我們黑鐵矮人也算是參加了這個節日!全艾澤拉斯最棒的烈酒來自這裡!黑石山的深處!不要忘了這一點!','將黑鐵啤酒杯交給丹莫羅的埃菲庫格·鐵桶。','','到丹莫洛找埃菲庫格·鐵桶。','','','','',0), +(11487,'zhTW','美酒中的美酒','我知道像你這樣的$G小子:姑娘;最喜歡阻止衝突了,對吧?你想要讓你們的美酒節平平安安地辦完,不要出亂子。那麼我有一個提議……$B$B在這只酒杯中裝滿我們最棒的烈酒,然後把它交給奧格瑞瑪外的美酒節組織者,這樣我們黑鐵矮人也算是參加了這個節日!全艾澤拉斯最棒的烈酒來自這裡!黑石山的深處!不要忘了這一點!','將黑鐵啤酒杯交給杜隆塔爾的塔波爾·斯威雷格。','','到杜洛塔找塔波爾·斯威雷格。','','','','',0), +(11490,'zhTW','占卜者的占卜','到殿堂去...使用寶珠。$b$b<提里斯喘息著。>$b$b快一點...一定要...阻止他們...在他們能夠...$b$b<提里斯在你面前死去。>','提里斯要你在博學者殿堂的陽臺使用寶珠。','','到博學者殿堂找卡雷苟斯。','啟動占卜寶珠','','','',0), +(11491,'zhTW','鐵符文傀儡和你:虛張聲勢','你隨時要有預備計畫,以免你的主要計畫發生意外!那就是為何我會將反智慧系統內建於傀儡中的原因。$B$B當你駕駛著閃亮新坐騎在巴爾古恩挖掘場時,可能會招致一些懷疑。這就是你的虛張聲勢技能存在的理由!你只要在被質問時,使用這個技能就可保你安然無恙。$B$B踩在雷布隆斯基的毯子上試試這個能力,一旦他開始咆哮生氣時,就使用虛張聲勢!$B$B等你準備好了,就爬上工作臺吧。','凜風峽灣,探險者協會前哨的渥特要你在踏上雷布隆斯基的地毯後,對他使用鐵符文傀儡的虛張聲勢技能。$B$B一旦完成任務後,你可以點選寵物視窗選擇解散來取消傀儡。','唬騙雷波斯基','到凜風峽灣的探險者協會前哨找渥特。','','','','',0), +(11513,'zhTW','攔截法力電池','我構思了一個計畫來取得足夠的能量來源,好製造我們的傳送門。$B$B劍刃山脈西北邊的以太族據點,貝許爾平臺,一直從風暴要塞走私法力電池到太陽之井,提供給凱爾薩斯。$B$B他們把法力電池都藏了起來,但有個方法可以讓你發現它們;某些以太族身上有相位裝置可以用來發覺這些走私貨物。$B$B使用相位裝置來找到這些法力電池,但小心他們的守衛。','找到10個走私的法力電池,然後把他們交給撒塔斯城,聖光露臺的主教納蘇安。','','到撒塔斯城的聖光露臺找主教納蘇安','','','','',0), +(11517,'zhTW','向納蘇安回報','我非常高興你在這裡,$c!現在我們拿下了聖所,我們得盡快建立一座魔法傳送門,從這裡直通到外域的撒塔斯城。$B$B我可敬的主上,主教納蘇安正在指揮進攻的事宜。任何能協助取得更多能量供給傳送門的人,他都希望我能派去給他。$B$B拜託,請前往撒塔斯城和他談談,他就在聖光露臺的阿達歐的房間。','商人波塔努斯請你和主教納蘇安談談,他就在撒塔斯城的聖光露臺。','','','','','','',0), +(11520,'zhTW','尋根','歡迎,$r。$b$b我怕這裡沒什麼能提供的,我得等我的試劑到貨。$b$b在我要求的補給中,其中有一種特別的試劑,刺棘根莖,特別難以取得。$b$b所幸,我知道一個秘密...$b$b使用刺棘撕掠者的腺體,可以控制劫毀者來挖掘那些根莖。$b$b要找到那些根莖,你要旅行到外域,從撒塔斯往東北飛,直到刺棘高地。','日境港的瑪納要你去外域的刺棘高地收集5個刺棘根莖,然後再回來找她。','','到奎爾丹納斯島的的日境港找瑪納。','','','','',0), +(11524,'zhTW','不穩定的運轉','我們缺乏人手來佔領日境聖所,但我有個計畫能夠把局面導向我們的目標。$B$B從太陽之井散溢出來的能量造成巡邏這座島嶼的哨兵幾乎發揮不了作用。控制他們機器運轉的水晶核已經受損到無法修復。$B$B我已經造出了一些新的水晶,能夠把控制權轉到我們手上,把水晶放入那些被擊敗的哨兵體內。我們需要所有可用的支援。','破碎之日會所的復仇者薩楊希望你將調諧水晶核放入5隻被擊倒的不穩定哨兵體內,將他們轉化為友軍。','','到奎爾丹納斯島的的破碎之日會所找復仇者薩楊。','部署轉化的哨衛','','','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_14_01' WHERE sql_rev = '1646835034551886180'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_15_00.sql b/data/sql/updates/db_world/2022_03_15_00.sql new file mode 100644 index 000000000..77bd38bb9 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_15_00.sql @@ -0,0 +1,31 @@ +-- DB update 2022_03_14_01 -> 2022_03_15_00 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_14_01'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_14_01 2022_03_15_00 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1645819759880724600'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1645819759880724600'); + +DELETE FROM `acore_string` WHERE `entry` = 726; +INSERT INTO `acore_string` (`entry`, `content_default`, `locale_koKR`, `locale_frFR`, `locale_deDE`, `locale_zhCN`, `locale_zhTW`, `locale_esES`, `locale_esMX`, `locale_ruRU`) VALUES +(726, '|cffff0000[Arena Queue]:|r %s (skirmish %s) -- [%u-%u] [%u/%u]|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_15_00' WHERE sql_rev = '1645819759880724600'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_16_00.sql b/data/sql/updates/db_world/2022_03_16_00.sql new file mode 100644 index 000000000..d1fd8f06d --- /dev/null +++ b/data/sql/updates/db_world/2022_03_16_00.sql @@ -0,0 +1,31 @@ +-- DB update 2022_03_15_00 -> 2022_03_16_00 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_15_00'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_15_00 2022_03_16_00 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647185908361212000'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647185908361212000'); + +DELETE FROM `spell_script_names` WHERE `spell_id`=45831; +INSERT INTO `spell_script_names` VALUES +(45831,'spell_gen_av_drekthar_presence'); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_16_00' WHERE sql_rev = '1647185908361212000'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_16_01.sql b/data/sql/updates/db_world/2022_03_16_01.sql new file mode 100644 index 000000000..e7911e42a --- /dev/null +++ b/data/sql/updates/db_world/2022_03_16_01.sql @@ -0,0 +1,29 @@ +-- DB update 2022_03_16_00 -> 2022_03_16_01 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_16_00'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_16_00 2022_03_16_01 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647107378248226200'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647107378248226200'); + +UPDATE `smart_scripts` SET `target_type`=1 WHERE `entryorguid`=30154 AND `source_type`=0 AND `id` IN (1,4); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_16_01' WHERE sql_rev = '1647107378248226200'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_00.sql b/data/sql/updates/db_world/2022_03_18_00.sql new file mode 100644 index 000000000..e91ce7bd8 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_00.sql @@ -0,0 +1,473 @@ +-- DB update 2022_03_16_01 -> 2022_03_18_00 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_16_01'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_16_01 2022_03_18_00 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1646922359631359324'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1646922359631359324'); + +REPLACE INTO `quest_template_locale` (ID, locale, Title, Details, Objectives, EndText, CompletedText, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4, VerifiedBuild) +VALUES +(8311,'zhTW','賈斯伯的萬鬼節糖果!','我沒辦法去玩不給糖就搗蛋。因為死亡之翼的攻擊,監護員南丁格爾願意讓我跑這麼遠都已經很幸運了。$b$b如果你代我去的話,我會用我現有的一些糖果跟你交換!$B$B每座主城的旅店老闆都有為萬鬼節準備糖果,去和他們談話,然後按照他們所要求的做就可以了!另外,鐵爐堡有個叫塔瓦斯德的小地精也在散發糖果。拿到所有的糖果之後,就把它們都帶回來給我吧!','和暴風城、鐵爐堡、達納蘇斯的旅店老闆及鐵爐堡的塔瓦斯德‧基瑟爾交談。完成要求的惡作劇來交換他們提供的糖果。$B$B將達納蘇斯杏仁糖、諾姆瑞根橡皮糖、暴風城牛軋糖,和鐵爐堡薄荷糖帶回暴風城前面給賈斯伯。','','到暴風城前面找賈斯伯。','','','','',0), +(8312,'zhTW','史波普的萬鬼節糖果!','我還想要去玩不給糖就搗蛋,但是我不能去,因為監護員不讓我去。如果你代我去的話,我會用我現有的一些糖果跟你交換!我想你會喜歡這種糖果的...它可以讓你變成又好玩又可怕的東西!$B$B每座主城的旅店老闆都有為萬鬼節準備糖果,去和他們談話,然後按照他們所要求的做就可以了!另外,奧格瑪裡一個名叫卡利‧雷米克的食人妖也在散發糖果。拿到所有的糖果之後,就把它們都帶回來給我吧!','和奧格瑪、幽暗城、雷霆崖的旅店老闆及奧格瑪精神谷的卡利‧雷米克交談。完成要求的惡作劇來交換他們提供的糖果。$B$B將雷霆崖杏仁糖、暗矛橡皮糖、奧格瑪牛軋糖和幽暗城薄荷糖帶回羅德隆廢墟給史波普。','','到羅德隆廢墟找史波普。','','','','',0), +(8353,'zhTW','學小雞,換糖果','啊,代替小孩玩不給糖就搗蛋是吧?我本來還想說,以四處要糖果的遊戲來講,你的年紀似乎大了點...$B$B好吧,我的糖果是一顆鐵爐堡薄荷糖,你得...你得學小雞咯咯叫!是的,小雞們喜歡薄荷糖...好吧,或許它們不喜歡...但是除非你學小雞叫,否則我不會給你薄荷糖的!$B$B好啦,$c,你到底要不要幹?!想要糖就開始吧!','對旅店老闆火酒模仿小雞的動作並得到一顆鐵爐堡薄荷糖!','','到丹莫洛找旅店老闆洛雷·火酒。','為旅店老闆洛雷·火酒模仿小雞的動作','','','',0), +(8354,'zhTW','學小雞,換糖果','啊,代替小孩玩不給糖就搗蛋是吧?我本來還想說,以四處要糖果的遊戲來講,你的年紀似乎大了點...$B$B好吧,我的糖果是一顆幽暗城薄荷糖,你得...你得學小雞咯咯叫!是的,小雞們喜歡薄荷糖...好吧,或許牠們不喜歡...但是除非你學小雞叫,否則我不會給你薄荷糖的!$B$B好啦,$c,你到底要不要幹?!想要糖就開始吧!','對旅店老闆諾曼模仿小雞的動作並得到一顆幽暗城薄荷糖!','','到提里斯法林地找旅店老闆諾曼。','為旅店老闆諾曼模仿小雞的動作','','','',0), +(8355,'zhTW','學火車,換糖果','有人來玩不給糖就搗蛋了!哈哈!$B$B好吧,儘管你做的是為小孩收集糖果的高尚事兒,我還是不能讓你輕易過關。我有一顆諾姆瑞根橡皮糖要送給那個孩子...如果你願意模仿火車聲音的話!哈哈,是的,這就是你要搗的蛋!你要拿到橡皮糖,就得模仿火車的聲音!$B$B恰嘎-恰嘎,$C!','對塔瓦斯德‧基瑟爾做出火車的聲音,並交換你應得的諾姆瑞根橡皮糖!','','到鐵爐堡找塔瓦斯德·基瑟爾。','為塔瓦斯德模仿火車的聲音','','','',0), +(8356,'zhTW','顯肌肉,換糖果','你...你的打扮真有趣。即使你有副好心腸,代替一個小孩子玩不給糖就搗蛋的遊戲,我恐怕還是得要求你搗個蛋來給我看看!$B$B讓我想想...你穿的這身衣服...讓你看起來很壯...那你得炫耀一下自己的肌肉!是的,就是現在,炫耀你的肌肉吧,強壯的$g猛男:壯女;$c!$B$B你必須炫耀肌肉,這樣我才會給你美味的暴風城杏仁糖。這可是很棒的萬鬼節的糖果。','對旅店老闆奧里森作展示肌肉的動作,並交換你應得的暴風城牛軋糖!','','到暴風城找旅店老闆奧里森。','展示肌肉給旅店老闆奧裡森看','','','',0), +(8357,'zhTW','跳跳舞,換糖果','儘管你只是在代表一個小孩子玩不給糖就搗蛋的遊戲,你還是得搗個蛋才能換取糖果!傳統習俗可不能被破壞,對吧...$B$B以時價計算的話,我想一顆杏仁糖的代價就是你得跳支舞!是的,讓我看看你的舞技!跳起來吧,那樣我就會給你美味的杏仁糖!','對旅店老闆塞琳尼跳舞,並交換你應得的達納蘇斯杏仁糖!','','到達納蘇斯找旅店老闆塞琳尼。','為旅店老闆塞琳尼跳舞','','','',0), +(8358,'zhTW','學火車,換糖果','有人來玩不給糖就搗蛋了!好耶,老兄!$B$B好吧,儘管你做的是為小孩收集糖果的高尚事兒,我還是不能讓你輕易過關。我有一顆好吃的暗矛橡皮糖要送給那個孩子...如果你願意模仿火車聲音的話!哈哈,是的,這就是你要搗的蛋!你要拿到橡皮糖,就得模仿火車的聲音!$B$B恰嘎-恰嘎,$C!','對卡利·雷米克做出火車的聲音,並交換你應得的暗矛橡皮糖!','','到奧格瑪的精神谷找卡利·雷米克。','為卡利·雷米克模仿火車的聲音','','','',0), +(8359,'zhTW','顯肌肉,換糖果','你...你的打扮真有趣。即使你有副好心腸,代替一個小孩子玩不給糖就搗蛋的遊戲,我恐怕還是得要求你搗個蛋來給我看看!$B$B讓我想想...你穿的這身衣服...讓你看起來很壯...那你得炫耀一下自己的肌肉!是的,就是現在,炫耀你的肌肉吧,強壯的$g猛男:壯女;$c!$B$B你必須炫耀肌肉,這樣我才會給你美味的奧格瑪牛軋糖。這可是很棒的萬鬼節糖果。','對旅店老闆格雷什卡作展示肌肉的動作,並交換你應得的奧格瑪牛軋糖!','','到奧格瑪找旅店老闆格雷什卡。','展示肌肉給旅店老闆格雷什卡看','','','',0), +(8360,'zhTW','跳跳舞,換糖果','儘管你只是在代表一個小孩子玩不給糖就搗蛋的遊戲,你還是得搗個蛋才能換取糖果!傳統習俗可不能被破壞,對吧...$B$B以時價計算的話,我想一顆杏仁糖的代價就是你得跳支舞!是的,讓我看看你的舞技!跳起來吧,那樣我就會給你美味的杏仁糖!','對旅店老闆帕拉跳舞,並交換你應得的雷霆崖杏仁糖!','','到雷霆崖找旅店老闆帕拉。','跳舞給旅店老闆帕拉看','','','',0), +(11131,'zhTW','阻止火勢!','你一定要幫助我們!無頭騎士正在攻擊村莊。到處都是火焰!孩子們會有危險!$B$B拜託,$n,加入滅火的行列。拿起水桶灑向火源,或是交給靠近火勢的朋友。熄滅那些火焰,我們或許還有救!','變裝的孤兒監護員希望你幫助撲滅村莊中的火勢。等火完全撲滅之後,再和變裝的孤兒監護員交談。','撲滅火焰','找變裝的孤兒監護員。','','','','',0), +(11135,'zhTW','無頭騎士','無頭騎士被趕走了,但只要萬鬼節還沒結束他就還會再回來。$n,結束我們的苦難,以及無頭騎士瘋狂的哀傷。當他的頭與身體合而為一的時候摧毀它!$B$B他深眠在血色修道院中的孤寂迴廊,就在提里斯法林地。找到他的南瓜祭壇然然後說:$B$B騎士甦醒吧!你的時刻已經近了。$B$B你曾嘗過死亡的滋味,現在感受終結吧!$B$B去吧,$n。願聖光與你同在。','找到無頭騎士的南瓜祭壇。','','','','','','',0), +(11219,'zhTW','阻止火勢!','部落的孩子需要你,$n。無頭騎士曾是個人類聖騎士,如今他只是個瘋狂的魔鬼,他正在我們的村莊裡四處放火!你一定要撲滅那些火焰!$B$B拿起水桶灑向火焰吧,或是把水桶交給靠近火源的夥伴。撲滅所有的火焰並且阻止無頭騎士!','戴面具的孤兒監護員要你幫忙撲滅村莊中的火勢。等火完全撲滅之後,再和鎮上的戴面具的孤兒監護員交談。','撲滅火焰','找戴面具的孤兒監護員。','','','','',0), +(11220,'zhTW','無頭騎士','在無頭騎士的頭顱被消滅之前,他的暴行都不會停止。$B$B騎士深眠在血色修道院中的孤寂迴廊,就在提里斯法林地。前往他的南瓜聖壇並且說出以下的話語:$B$B騎士甦醒吧!你的時刻已經近了。$B$B你曾嘗過死亡的滋味,現在感受終結吧!$B$B這樣會喚醒那個魔鬼。摧毀無頭騎士的頭顱,他將無法再騷擾我們。','找到無頭騎士的南瓜祭壇。','','','','','','',0), +(11242,'zhTW','終獲自由!','憤怒是我的囚牢,$n,而你釋放了我。儘管我自詡正義,但我帶給艾澤拉斯良善百姓的死亡與恐懼,讓我的靈魂悔恨垂淚。$B$B感謝你領我重回聖光。希望我永遠也不會再次迷失。$B$B帶著這本破碎的祈禱書給孤兒監護員,那些孩子將會知道我再也不會去騷擾他們了。','帶著湯瑪斯‧托姆森的聖典交給變裝的孤兒監護員,她在閃金鎮、卡拉諾斯或藍色守望。','','找變裝的孤兒監護員。','','','','',0), +(11356,'zhTW','變裝的孤兒監護員','在萬鬼節期間,人類的孤兒院替他們的孤兒安排了參觀聯盟鄉野村莊的行程。那些可憐的小朋友們真的希望可以看到像你這樣有成就的$c!$B$B你要不要去看看他們呢?他們在艾爾文森林的閃金鎮、丹莫洛的卡拉諾斯還有藍謎島的藍色守望。去那邊跟變裝的孤兒監護員,也就是孩子們的監護者談話,她將會把孩子們介紹給你。','跟閃金鎮、卡拉諾斯,或者藍色守望的其中一位變裝的孤兒監護員談話。','','','','','','',0), +(11357,'zhTW','戴面具的孤兒監護員','在萬鬼節期間,獸人孤兒被安排參加許多部落村莊的參觀行程。孤兒監護員認為讓那些孩子們看見真正英雄的英勇行徑對他們來說是一件好事。$B$B你何不去看看他們呢?像你這麼勇敢的$c可以跟孩子們說說你勇猛的冒險故事,鼓舞他們的心志!他們在杜洛塔的剃刀嶺、提里斯法林地的布瑞爾還有永歌森林的獵鷹之翼廣場。跟戴面具的孤兒監護員談話,她就會介紹你給孩子們認識。','跟剃刀嶺、布瑞爾,或者獵鷹之翼廣場的其中一位戴面具的孤兒監護員談話。','','','','','','',0), +(11360,'zhTW','救火隊演練','現在無頭騎士還逍遙法外,閃金鎮的英雄總是準備隨時組成救火隊。你也想要幫忙嗎?$B$B在此地以北,守衛們設立了一個區域來練習救火。去那邊然後練習把水潑向火焰。你可以在大水桶那裡把水裝滿。$B$B再見,$n。等你完成救火隊的訓練,再來找我們!','把水桶丟向5個火源,然後跟變裝的孤兒監護員談話。','','到艾爾文森林的閃金鎮找變裝的孤兒監護員。','滅火','','','',0), +(11361,'zhTW','消防演練','蠻兵們在村子外頭設立了消防演練區。這段時間剃刀嶺的建築常常失火--你應該要伸出援手,受訓成為一個消防員!$B$B往剃刀嶺的西邊走,穿過村牆時向右轉。找到演練區,然後抓住水桶把它們扔向那些練習用的火堆。','把水桶扔向5個火源,然後再和剃刀嶺的戴面具的孤兒監護員談談。','','到杜洛塔的剃刀嶺找戴面具的孤兒監護員。','滅火','','','',0), +(11403,'zhTW','終獲自由!','憤怒是我的囚牢,$n,而你釋放了我。儘管我自詡正義,但我帶給艾澤拉斯良善百姓的死亡與恐懼,讓我的靈魂悔恨垂淚。$B$B感謝你領我重回聖光。希望我永遠也不會再次迷失。$B$B帶著這本破碎的祈禱書給孤兒監護員,那些孩子將會知道我再也不會去騷擾他們了。','帶著湯瑪斯‧托姆森的聖典交給戴面具的孤兒監護員,她在杜洛塔、布瑞爾和獵鷹之翼廣場。','','找戴面具的孤兒監護員。','','','','',0), +(11405,'zhTW','召喚無頭騎士','許多悲傷蠟燭裝飾著這座南瓜祭壇,搖曳的火光似乎是在竊笑與嘲諷著你……','將一根悲傷蠟燭插入翻過的泥土。','','到血色修道院找零散翻覆的泥土。','','','','',0), +(11435,'zhTW','收集南瓜燈','你好,$N!謝謝你趕走了無頭騎士!他跑掉以後,我們就可以自由自在地在村裡玩啦!$B$B哦哦,對啦對啦,我還找到幾個無頭騎士丟在這裡的南瓜,真可怕……你能把它們帶給院長嗎?','將一堆南瓜燈交給穿戲服的孤兒院長。','','找變裝的孤兒監護員。','','','','',0), +(11439,'zhTW','救火隊演練','卡拉諾斯的勇敢矮人可以立刻組成一支救火隊,現在無頭騎士還逍遙法外。你想要幫忙嗎?$B$B南邊那裡,巡山人設立了一個區域來練習救火。去那邊然後練習把水潑向火焰。你可以在大水桶那裡把水裝滿。$B$B再見,$n。等你完成救火隊的訓練,再來找我們!','把水桶丟向5個火源,然後跟變裝的孤兒監護員談話。','','到丹莫洛的卡拉諾斯找變裝的孤兒監護員。','滅火','','','',0), +(11440,'zhTW','救火隊演練','現在無頭騎士還逍遙法外,保安官們總是辛勤地準備隨時組成救火隊。你也想要幫忙嗎?$B$B在此地的西邊往艾克索達的方向,保安官們設立了一個區域來練習救火。去那邊然後練習把水潑向火焰。你可以在大水桶那裡把水裝滿。$B$B再見,$n。等你完成救火隊的訓練,再來找我們!','把水桶丟向5個火源,然後跟變裝的孤兒監護員談話。','','到藍謎島的藍色守望找變裝的孤兒監護員。','滅火','','','',0), +(11449,'zhTW','消防演練','亡靈哨兵在城鎮外頭設立了消防演練區。我們不能讓布瑞爾的建築物再受到傷害了-你應該要盡你的本分,受訓成為一個消防員。$B$B順著路朝西邊經過墓園。你就會看到演練區了。','把水桶扔向5個火源,然後再和布瑞爾的戴面具的孤兒監護員談談。','','到提里斯法林地的布瑞爾找戴面具的孤兒監護員。','滅火','','','',0), +(11450,'zhTW','消防演練','衛兵們在城鎮外頭設立了消防演練區。我們不能讓無頭騎士破壞辛苦重建的城鎮--你應該要盡你的本分,受訓成為一個消防員。$B$B朝南方穿越大門到十字路口交界處。你就會看到演練區了。','把水桶扔向5個火源,然後再和獵鷹之翼廣場的戴面具的孤兒監護員談談。','','到永歌森林的獵鷹之翼廣場找戴面具的孤兒監護員。','滅火','','','',0), +(12361,'zhTW','糖果桶','','','','','','','','',0), +(12362,'zhTW','糖果桶','','','','','','','','',0), +(12363,'zhTW','糖果桶','','','','','','','','',0), +(12364,'zhTW','糖果桶','','','','','','','','',0), +(12365,'zhTW','糖果桶','','','','','','','','',0), +(12366,'zhTW','糖果桶','','','','','','','','',0), +(12367,'zhTW','糖果桶','','','','','','','','',0), +(12368,'zhTW','糖果桶','','','','','','','','',0), +(12369,'zhTW','糖果桶','','','','','','','','',0), +(12370,'zhTW','糖果桶','','','','','','','','',0), +(12371,'zhTW','糖果桶','','','','','','','','',0), +(12373,'zhTW','糖果桶','','','','','','','','',0), +(12374,'zhTW','糖果桶','','','','','','','','',0), +(12375,'zhTW','糖果桶','','','','','','','','',0), +(12376,'zhTW','糖果桶','','','','','','','','',0), +(12377,'zhTW','糖果桶','','','','','','','','',0), +(12378,'zhTW','糖果桶','','','','','','','','',0), +(12379,'zhTW','糖果桶','','','','','','','','',0), +(12380,'zhTW','糖果桶','','','','','','','','',0), +(12381,'zhTW','糖果桶','','','','','','','','',0), +(12382,'zhTW','糖果桶','','','','','','','','',0), +(12383,'zhTW','糖果桶','','','','','','','','',0), +(12384,'zhTW','糖果桶','','','','','','','','',0), +(12385,'zhTW','糖果桶','','','','','','','','',0), +(12386,'zhTW','糖果桶','','','','','','','','',0), +(12387,'zhTW','糖果桶','','','','','','','','',0), +(12388,'zhTW','糖果桶','','','','','','','','',0), +(12389,'zhTW','糖果桶','','','','','','','','',0), +(12390,'zhTW','糖果桶','','','','','','','','',0), +(12391,'zhTW','糖果桶','','','','','','','','',0), +(12392,'zhTW','糖果桶','','','','','','','','',0), +(12393,'zhTW','糖果桶','','','','','','','','',0), +(12394,'zhTW','糖果桶','','','','','','','','',0), +(12395,'zhTW','糖果桶','','','','','','','','',0), +(12396,'zhTW','糖果桶','','','','','','','','',0), +(12397,'zhTW','糖果桶','','','','','','','','',0), +(12398,'zhTW','糖果桶','','','','','','','','',0), +(12399,'zhTW','糖果桶','','','','','','','','',0), +(12400,'zhTW','糖果桶','','','','','','','','',0), +(12401,'zhTW','糖果桶','','','','','','','','',0), +(12402,'zhTW','糖果桶','','','','','','','','',0), +(12403,'zhTW','糖果桶','','','','','','','','',0), +(12404,'zhTW','糖果桶','','','','','','','','',0), +(12405,'zhTW','糖果桶','','','','','','','','',0), +(12406,'zhTW','糖果桶','','','','','','','','',0), +(12407,'zhTW','糖果桶','','','','','','','','',0), +(12408,'zhTW','糖果桶','','','','','','','','',0), +(12409,'zhTW','糖果桶','','','','','','','','',0), +(12410,'zhTW','糖果桶','','','','','','','','',0), +(12940,'zhTW','糖果桶','','','','','','','','',0), +(12941,'zhTW','糖果桶','','','','','','','','',0), +(12946,'zhTW','糖果桶','','','','','','','','',0), +(12947,'zhTW','糖果桶','','','','','','','','',0), +(12950,'zhTW','糖果桶','','','','','','','','',0), +(13452,'zhTW','糖果桶','','','','','','','','',0), +(13456,'zhTW','糖果桶','','','','','','','','',0), +(13459,'zhTW','糖果桶','','','','','','','','',0), +(13460,'zhTW','糖果桶','','','','','','','','',0), +(13461,'zhTW','糖果桶','','','','','','','','',0), +(13462,'zhTW','糖果桶','','','','','','','','',0), +(13463,'zhTW','糖果桶','','','','','','','','',0), +(13464,'zhTW','糖果桶','','','','','','','','',0), +(13465,'zhTW','糖果桶','','','','','','','','',0), +(13466,'zhTW','糖果桶','','','','','','','','',0), +(13467,'zhTW','糖果桶','','','','','','','','',0), +(13468,'zhTW','糖果桶','','','','','','','','',0), +(13469,'zhTW','糖果桶','','','','','','','','',0), +(13470,'zhTW','糖果桶','','','','','','','','',0), +(13471,'zhTW','糖果桶','','','','','','','','',0), +(13472,'zhTW','糖果桶','','','','','','','','',0), +(13474,'zhTW','糖果桶','','','','','','','','',0), +(13501,'zhTW','糖果桶','','','','','','','','',0), +(13548,'zhTW','糖果桶','','','','','','','','',0), +(13952,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給暴風城墓地中興奮的人類靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','到艾爾文森林找興奮的人類靈魂。','','','','',0), +(14166,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給達拉然墓地中興奮的達拉然靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','到水晶之歌森林的曦光之溪找興奮的達拉然靈魂。','','','','',0), +(14171,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給銀月城墓地中興奮的血精靈靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','到永歌森林的銀月廢墟找興奮的血精靈靈魂。','','','','',0), +(14172,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給撒塔斯墓地中興奮的奧多爾靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','到泰洛卡森林找興奮的奧多爾靈魂。','','','','',0), +(14173,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給撒塔斯墓地中興奮的占卜者靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','到泰洛卡森林找興奮的占卜者靈魂。','','','','',0), +(14174,'zhTW','死者的感激','真高興能再次見到朋友和親人,不過也許我做得有些太誇張了……我已經吃光了他們為我準備的一切!$B$B能不能幫我一個忙,再給我拿來一些那種美味的悼念糕餅?我會非常感激你的……$B$B我想,那邊的查普曼正在出售食譜。','弄到悼念糕餅,並把它交給幽暗城墓地的歡快的被遺忘者靈魂。$B$B你必須使用一朵橙菊,才能看到那個隱形的靈魂。','','到提里斯法林地的羅德隆廢墟找興奮的被遺忘者靈魂。','','','','',0), +(14175,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給奧格瑪墓地中興奮的獸人靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','到杜洛塔找興奮的兽人灵魂。','','','','',0), +(14176,'zhTW','死者的感激','真高興能再次見到朋友和親人,不過也許我做得有些太誇張了……我已經吃光了他們為我準備的一切!$B$B能不能幫我一個忙,再給我拿來一些那種美味的悼念糕餅?我會非常感激你的……$B$B我想,那邊的查普曼正在出售食譜。','弄到悼念糕餅,並把它交給雷霆崖墓地的歡快的牛頭人靈魂。$B$B你必須使用一朵橙菊,才能看到那個隱形的靈魂。','','到雷霆崖找興奮的牛頭人靈魂。','','','','',0), +(14177,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給奧格瑪墓地中興奮的食人妖靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','到杜洛塔找興奮的食人妖靈魂。','','','','',0), +(1657,'zhTW','臭氣熏天的南海鎮','我們這次萬聖節的慶祝要換個方式……我們要給南海鎮的敵人帶去痛苦!$B$B拿著這些特殊的臭氣彈。其中包含了任何人類——或者較弱的野獸——都無法忍受的味道。你需要把這些臭氣彈丟在南海鎮的中心,然後使它生效,準備和聯盟好好幹一仗吧!$B$B當你完成任務之後……完成這個象徵我們自由的標誌之後,回到我這裡來!','將三顆亡靈臭氣彈放置在希爾斯布萊德丘陵的南海鎮中心,完成任務之後回到提瑞斯法林地的黑暗召喚者雅恩卡那裡。','','到提里斯法林地的羅德隆廢墟找黑暗召喚者雅恩卡。','在南海鎮投擲球型臭彈','','','',0), +(1658,'zhTW','稻草人的節日','我需要勇敢的人去提瑞斯法林地然後找到亡靈的稻草人節日舉辦地點。我不想撒謊——去那裡會有危險。那裡的守衛非常兇悍。但是,我們需要知道今年這個展會的規模有多大,另外就是被遺忘者打算在萬聖節給我們造成多大的麻煩。$B$B如果你願意接受這個任務的話,去提瑞斯法林地進行偵查吧。當你得到有價值的情報之後就回到我這裡來,我會給予你優厚的補償。','在提瑞斯法林地找到被遺忘者的稻草人節日舉辦地點。任務完成之後回到南海鎮的哈特曼中士那裡。','找到被遺忘者的稻草人節日舉辦地點。','到希爾斯布萊德丘陵找哈特曼中士。','','','','',0), +(6961,'zhTW','冬天爺爺在這裡!','冬幕節快樂,我的朋友!你一定要去跟冬天爺爺打個招呼!如果你今年表現的不錯的話,你會在冬幕節那天收到一份很棒的禮物。你一定要告訴冬天爺爺你今年想要什麼!$B$B另外,記得多買些好東西來給那些今年表現得好的人。我們這裡貨物齊全。各種貨物一應俱全─這是燻木牧場精心為您準備的貨物!','和冬天爺爺談談;他在奧格瑪燻木牧場商人區旁邊。','','','','','','',0), +(6962,'zhTW','招待冬天爺爺','嘿,你能幫冬天爺爺一個忙嗎,小$g男孩:女孩;?$B$B不用我說你也看得出來,冬天爺爺一天到晚都在這裡忙碌,所以他想吃些東西。要是有幾塊薑餅和一杯搭配的冰牛奶那就太棒了。你是冬天爺爺的朋友吧,可以帶一些給我嗎?','把5塊薑餅和1杯冰牛奶帶給奧格瑪的冬天爺爺。','','到奧格瑪找冬天爺爺。','','','','',0), +(6963,'zhTW','被偷走的冬幕節禮物','聽著……我不想破壞了節日的美好氣氛,但是煙林牧場需要幫助——需要你這樣的冒險家。$B$B我們弄丟了節日所需的重要禮品,現在連我們派去尋找禮品的煙林牧場密探也不見了!請幫幫忙——禮品是在奧特蘭克山脈附近丟失的,我們派出的密探也在那兒。$B$B看看禮品和密探是否都安然無恙吧!','轉至奧特蘭克山脈雪域尋找失蹤的煙林牧場密探。','','','','','','',0), +(6964,'zhTW','冬幕節的意義','禮物、款待、獎品...我要說,呸!$B$B那些哥布林玷污了這個季節的真正意義─冬幕節。這是個萬物復甦的時刻,整個大地安靜的覆蓋在冬天爺爺所帶來的薄雪之下,冬天爺爺可不是那個穿著紅色外套的笨蛋!$B$B如果你想要瞭解更多關於冬幕節的事情,就去問問薩格尼吧。他肯定會因為有人對禮物不感興趣而是對冬幕節的歷史感興趣而感到驚奇的。','和奧格瑪智慧谷裡的薩格尼談談關於冬幕節的事情。','','','','','','',0), +(6983,'zhTW','那個卑鄙的傢伙...','一個叫做「可惡的格林奇」的生物偷走了我們的禮物,$n。但是要小心!他不但兇殘,一旁還有那些綠色小地精助紂為虐!$B$B如果你要對付他的話,可能需要一點幫助。傳言說他把禮物和我們敬愛的麋鹿梅特森藏在希爾斯布萊德丘陵的無草洞裡!在慶祝儀式搞砸、奧格瑪的小朋友失望前,替我們找出那些禮物,$n!','打敗躲在希爾斯布萊德丘陵的無草洞裡的「可惡的格林奇」,然後找回被偷走的禮物,並釋放麋鹿梅特森。','','到奧格瑪找凱瑪德·考伯賓奇。','','','','',0), +(6984,'zhTW','燻木牧場的感謝','我們燻木牧場的人感謝你幫我們找回了丟失的禮物,$n。為此,我們將會給你一件特殊的禮物...將由冬天爺爺特別送出!$B$B請你,和冬天爺爺談談,他會親自從我們燻木牧場這裡的貨物中選一樣送給你做為冬幕節的禮物。各種貨物一應俱全─這是燻木牧場精心為您準備的貨物...當然我們還要感謝你!','和奧格瑪的冬天爺爺談談。','','','','','','',0), +(7021,'zhTW','冬天爺爺在這裡!','冬幕節快樂,我的朋友!你一定要去跟現在正在奧格瑪的冬天爺爺打個招呼!如果你今年表現的不錯的話,你會在冬幕節那天收到一份很棒的禮物。你一定要告訴冬天爺爺你今年想要什麼!$B$B另外,記得多買些好東西來給那些今年表現得好的人。我們這裡貨物齊全。各種貨物一應俱全─這是燻木牧場精心為您準備的貨物!','和冬天爺爺談談;他在奧格瑪燻木牧場商人區旁邊。','','','','','','',0), +(7022,'zhTW','冬天爺爺在這裡!','冬幕節快樂,我的朋友!你一定要去跟冬天爺爺打個招呼!如果你今年表現的不錯的話,你會在冬幕節那天收到一份很棒的禮物。你一定要告訴冬天爺爺你今年想要什麼!$B$B另外,記得多買些好東西來給那些今年表現得好的人。我們這裡貨物齊全。各種貨物一應俱全─這是燻木牧場精心為您準備的貨物!','和冬天爺爺談談;他在鐵爐堡燻木牧場商人區旁邊。','','','','','','',0), +(7023,'zhTW','冬天爺爺在這裡!','冬幕節快樂,我的朋友!你一定要去跟現在正在鐵爐堡的冬天爺爺打個招呼!如果你今年表現的不錯的話,你會在冬幕節那天收到一份很棒的禮物。你一定要告訴冬天爺爺你今年想要什麼!$B$B另外,記得多買些好東西來給那些今年表現得好的人。我們這裡貨物齊全。各種貨物一應俱全─這是燻木牧場精心為您準備的貨物!','和冬天爺爺談談;他在鐵爐堡燻木牧場商人區旁邊。','','','','','','',0), +(7024,'zhTW','冬天爺爺在這裡!','冬幕節快樂,我的朋友!你一定要去跟現在正在奧格瑪的冬天爺爺打個招呼!如果你今年表現的不錯的話,你會在冬幕節那天收到一份很棒的禮物。你一定要告訴冬天爺爺你今年想要什麼!$B$B另外,記得多買些好東西來給那些今年表現得好的人。我們這裡貨物齊全。各種貨物一應俱全─這是燻木牧場精心為您準備的貨物!','和冬天爺爺談談;他在奧格瑪燻木牧場商人區旁邊。','','','','','','',0), +(7025,'zhTW','招待冬天爺爺','嘿,你能幫冬天爺爺一個忙嗎,小$g男孩:女孩;?$B$B不用我說你也看得出來,冬天爺爺一天到晚都在這裡忙碌,所以他想吃些東西。要是有幾塊薑餅和一杯搭配的冰牛奶那就太棒了。你是冬天爺爺的朋友吧,可以帶一些給我嗎?','把5塊薑餅和一杯冰牛奶帶給鐵爐堡的冬天爺爺。','','到鐵爐堡找冬天爺爺。','','','','',0), +(7043,'zhTW','那個卑鄙的傢伙...','一個叫做「可惡的格林奇」的生物偷走了我們的禮物,$n。但是要小心!他不但兇殘,一旁還有那些綠色小地精助紂為虐!$B$B如果你要對付他的話,可能需要一點幫助。傳言說他把禮物和我們敬愛的麋鹿梅特森藏在希爾斯布萊德丘陵的無草洞裡!在慶祝儀式搞砸、暴風城的小朋友失望前,替我們找出那些禮物,$n!','打敗躲在希爾斯布萊德丘陵的無草洞裡的「可惡的格林奇」,然後找回被偷走的禮物,並釋放麋鹿梅特森。','','到鐵爐堡的平民大廳找烏爾莫特·叮噹口袋。','','','','',0), +(7045,'zhTW','燻木牧場的感謝','我們燻木牧場的人感謝你找回了被偷竊的禮物,$n。為此,我們要給你一件特殊的禮物...冬天爺爺將會親自把它給你!$B$B請你去找冬天爺爺,他會給你冬幕節的禮物,其將來自於我們燻木牧場。我們這裡應有盡有,燻木牧場能滿足你一切需求...當然,我們還要謝謝你!','和鐵爐堡的冬天爺爺談談。','','','','','','',0), +(7061,'zhTW','冬幕節','來!若你有興趣更了解冬幕節的話,可以閱讀這本書。儘管我認為我們對傳說的認知才是正確的,但是鄉土研究員的身分還是讓我覺得收集這些擁有相同起源的資訊非常有趣。$B$B當你完成了以後,把這本書拿給雷霆崖的貝恩‧血蹄。我知道若聽到有其他人關注著我們族人的傳說,他會感到很有興趣的。','請自由取閱那本「冬幕節」來學習更多關於這個節日的意義。當你看完這本書後,把它送去給雷霆崖的貝恩‧血蹄。','','','','','','',0), +(7062,'zhTW','冬幕節的意義','禮物、點心、獎品...我要說,呸!$B$B那些哥布林玷污了這個季節的真正意義。冬幕節,這是個萬物復甦的時刻,整個大地安靜的覆蓋在冬天爺爺所帶來的薄雪之下,冬天爺爺可不是那個穿著紅色外套的笨蛋!$B$B如果你想要瞭解更多關於冬幕節的事情,就去問問探險者協會的歷史學家卡尼克吧。他肯定會因為有人對禮物不感興趣而是對冬幕節的歷史感興趣而感到驚奇的。','跟鐵爐堡的探險者協會的歷史學家卡尼克詢問關於冬幕節的事情。','','','','','','',0), +(7063,'zhTW','冬幕節','拿著,若你有興趣對冬幕節多點了解的話,不妨看看這本書。雖然我也認同冬幕節的各種慶祝和紀念活動,但身為學者的我,還是把關於此傳說的所有故事都集結成了一本書。$B$B等你看完以後,把這本書拿給國王穆拉丁‧銅鬚。我敢說,他一定會很高興知道,還有其他人也對古老的傳說感到興趣。','請自由翻閱「冬幕節」這本書來學習更多關於這個節日的意義。當你看完這本書後,把它送去給鐵爐堡的穆拉丁‧銅鬚。','','','','','','',0), +(7790,'zhTW','黑紙白字','你可沒預計到這個...','','','找強納森·樂卡夫特談話。','佔領戰歌磨坊','','','',0), +(8149,'zhTW','緬懷英雄','在艾澤拉斯收穫節上,我們對那些無私奉獻英雄們表示感謝,他們其中甚至獻出自己的性命。聯盟曾湧現出很多的英雄,但是沒有誰的光芒能超越光明使者烏瑟。$B$B將這些祭品帶到西瘟疫之地光明使者烏瑟的墓碑那兒,去表達我們的敬意吧。把祭品放在墓碑下,然後回到我們這兒來。收穫節結束之前我會一直在這兒,別浪費時間了,出發吧。','前往西瘟疫之地的光明使者烏瑟的墓碑,在墓碑前放下他的祭品。在收穫節結束之前返回鐵爐堡的瓦格納‧巨錘那兒。','將祭品放在光明使者烏瑟爾的墓碑前','到丹莫洛的鐵爐堡大門找瓦格納·巨錘。','','','','',0), +(8150,'zhTW','緬懷英雄','在艾澤拉斯收穫節上,我們對那些無私奉獻英雄們表示感謝,他們其中甚至犧牲自己的生命。部落曾湧現出許多英雄,但是沒有誰的光芒能超越葛羅‧地獄吼。$B$B將這些祭品帶到梣谷屠魔峽谷中的葛羅‧地獄吼的紀念碑那兒,去表達我們的敬意吧。把祭品放在墓碑下,然後回到我們這兒來。收穫節結束之前我會一直在這兒,別浪費時間了,出發吧。','前往梣谷屠魔峽谷的葛羅‧地獄吼的紀念碑,在紀念碑前放下他的祭品。在收穫節結束之前返回奧格瑪的亞尼‧納沙克那邊。','將祭品放在格羅姆·地獄咆哮的墓碑前','到杜洛塔找亞尼·納沙克。','','','','',0), +(8322,'zhTW','惡臭雞蛋','南海鎮的人熱愛他們的麥芽酒,因此他們視南海鎮旅店裡的麥芽酒為寶。現在趁著萬鬼節的混亂,我們可以去毀了他們最新一批的飲品,讓他們好幾個禮拜 - 甚至是好幾個月都沒東西喝!$B$B帶著這些腐爛發臭的雞蛋,把它們放到南海鎮旅店釀酒的桶子裡。你獨自前往一定會引起衝突,所以要提高警覺!$B$B等你給南海鎮的人嘗到難以忘懷的滋味之後,回到慶典這裡找我!','將惡臭雞蛋放到南海鎮旅店主要的釀酒桶子裡。','','','','','','',0), +(8373,'zhTW','松木的力量','我對萬聖節最憎恨的一點就是被遺忘者用在南海鎮的臭氣彈。誰知道這些節日慶祝用的東西會搞得這樣臭氣熏天……$B$B在萬聖節期間,使用這個清潔器來把部落的雜碎們丟在村莊裡的臭氣彈處理掉吧。它使用了松木的力量來消除那些難聞的味道。$B$B你是否願意加入清潔南海鎮的行列?我會用萬聖節禮物來作為回報的。','使用臭氣彈清潔器來把散落在南海鎮的亡靈臭氣彈處理掉。當任務完成之後,回到南海鎮的哈特曼中士那裡。','清掃一顆被扔在南海鎮的臭氣彈!','到希爾斯布萊德丘陵的南海鎮找哈特曼中士。','','','','',0), +(8744,'zhTW','仔細包裝的禮物','','','','','','','','',0), +(8746,'zhTW','麋鹿梅特森','出大事了!麋鹿梅特森被綁架了!$B$B梅特森是冬天爺爺的八頭麋鹿之一,同時也是燻木牧場的財產。我們認為犯下這樁罪行的,是躲在希爾斯布萊德丘陵那個可惡的格林奇。節日馬上就要來臨了,而我們卻被耽擱在勒索這件事情上!拜託你,找出藏匿地點,打敗犯人,然後把梅特森帶回來!','在希爾斯布萊德丘陵的無草洞附近從綁架犯人手中救出麋鹿梅特森。','','到奧格瑪找凱瑪德·考伯賓奇。','尋找麋鹿梅特森並且解救它','','','',0), +(8762,'zhTW','麋鹿梅特森','出大事了!麋鹿梅特森被綁架了!$B$B梅特森是冬天爺爺的八頭麋鹿之一,同時也是燻木牧場的財產。我們認為犯下這樁罪行的,是躲在希爾斯布萊德丘陵那個可惡的格林奇。節日馬上就要來臨了,而我們卻被耽擱在勒索這件事情上!拜託你,找出藏匿地點,打敗犯人,然後把梅特森帶回來!','在希爾斯布萊德丘陵的無草洞附近從綁架犯人手中救出麋鹿梅特森。','','到鐵爐堡的平民大廳找烏爾莫特·叮噹口袋。','尋找麋鹿梅特森並且解救它','','','',0), +(8767,'zhTW','輕輕搖晃過的禮物','','','','','','','','',0), +(8768,'zhTW','精心包裝的禮物','','','','','','','','',0), +(8769,'zhTW','滴答作響的禮物','','','','','','','','',0), +(8788,'zhTW','輕輕搖晃過的禮物','','','','','','','','',0), +(8799,'zhTW','節日英雄','聽好...我不應該告訴你這件事情的內容,但既然你是今日的英雄...$B$B每年的這個時候到處都有新鮮的冬青,但是都沒法保存太久。我們有一台保存的機器,能為冬青永遠保鮮!我們用它來點綴節日...在夏天的時候還可以賺取利潤!$B$B我會讓你使用保存機,但你一定要是個大師級的廚師才行。你需要一些石中鹽和兩個,三個,喔五個好了,五個金幣。我會幫你弄到一批好貨的。','攜帶1份石中鹽及5個金幣到冬青保存機去,你可以獲得5份保存的冬青。','','','','','','',0), +(8803,'zhTW','節慶禮物','','','','','','','','',0), +(8827,'zhTW','冬天的禮物','我聽說冬天爺爺 - 在燻木牧場的慷慨支持下 - 已經把要給所有人的禮物放在鐵爐堡的樹下。真希望我也能去,但是我必須看管這台PX-238冬幕歡樂製造器。$b$b不過你一定得去看看。我相信冬天爺爺已經準備好印有你名字的禮物了。','和冬天爺爺談談;他在鐵爐堡燻木牧場商人區旁邊。','','','','','','',0), +(8828,'zhTW','冬天的禮物','我聽說冬天爺爺 - 在燻木牧場的慷慨支持下 - 已經把要給所有人的禮物放在奧格瑪的樹下。真希望我也能去,但是我必須看管這台PX-238冬幕歡樂製造器。$b$b不過你一定得去看看。我相信冬天爺爺已經準備好印有你名字的禮物了。','和冬天爺爺談談。他在奧格瑪燻木牧場商人區旁邊。','','','','','','',0), +(8861,'zhTW','新年慶典!','雷霆崖正在舉辦新年的慶典!那裡整天提供免費的飲料,晚上他們還會舉辦煙火表演!$B$B應該會很不錯的…但是藏寶海灣今天晚上也有個宴會,我敢說那一定更棒!$B$B總之,雷霆崖的旅店老闆帕拉需要燻木牧場的補給品才能應付需求量龐大的慶典。你能幫我送過去嗎?$B$B謝謝你,$n!旅店老闆帕拉就在通往獵人高地橋邊的旅店裡面。','將燻木補給品帶給雷霆崖的旅店老闆帕拉。','','','','','','',0), +(8868,'zhTW','伊露恩的祝福','年獸曾是這個世界的英雄。一隻有著極大力量和運氣的狼,在年獸屈服於惡魔魔法前,他都在先祖之戰的英雄身邊一起作戰。和他的盟友反目成仇後,他的怒火席捲了整個艾澤拉斯,所到之處充滿死亡和恐懼。$B$B最後終於在月光林地這裡被擊敗了,年獸現在沉睡在月神湖水中。但是每年新年,在慶典之中,他就會開始蠢蠢欲動...$B$B找些朋友,$n,召喚年獸並擊敗他。贏得伊露恩的祝福!','召喚年獸,擊敗牠並獲得伊露恩的祝福。再回到永夜港找瓦拉達爾‧星歌。','獲得艾露恩的祝福。','到月光林地的永夜港找瓦拉達爾·星歌。','','','','',0), +(8899,'zhTW','最親愛的克萊拉','要如何形容她的美麗?我想千言萬語也道不盡。$b$b這些人類混淆視聽,任由我們成了胡言亂語的傻瓜。$b$b我早就看那些文字不順眼了。而且我不想再擠出其他華麗的辭藻。對,她早就擁有了一切,否則其他的求婚者將佔據她視線,偷走她的眼眸。','將完美無瑕的信件遞給克萊拉‧迪恩,她在暴風城的銀行外面。','','','','','','',0), +(8900,'zhTW','最親愛的艾妮亞','我看得出來她很傷心,看她過去的處境,我是說她似乎蠻難過的,你不覺得嗎?$b$b可是和她談過之後,我發現有個關聯。沒人懂我,但我覺得只有她能懂我。$b$b像我跟別人聊的時候,他們就只會笑我,而我也沒再跟她談天了。可是,我好想念她。你能幫我把這封信交給她嗎?我希望她能親自收到這封。','將微皺的筆記送給幽暗城銀行旁的艾妮亞‧ 海頓。','','','','','','',0), +(8902,'zhTW','最親愛的艾妮亞','很久以前,我就和我的青梅竹馬艾妮亞訂下婚約。我已經很多年都不再想她了,但是最近,她又會不時的佔據我的腦海。$b$b或許,即使一切都過去了,每個人的生命中都還有點空間可以容納愛。$b$b我相信她也一定變了。你可以幫我把這封信送給她嗎?我太緊張了,不敢親自拿給她。','將深情書寫的信送給幽暗城銀行附近的艾妮亞‧海頓。','','','','','','',0), +(8903,'zhTW','危險的愛','這種像傳染病的愛有些不對勁。這樣不太好,是個眼中釘,而且最糟的是,這對聯盟本身的安全來說也是個威脅。$b$b你想想:要是守衛也感染了這種奇怪的病怎麼辦?我們一定要想個辦法。$b$b找到暴風城裡的一名守衛,看看他們是否已經得到了這愚蠢的病。','取得一張暴風城守衛的卡片並帶給暴風城的艾里斯坦‧莫塔。','','到暴風城找艾里斯坦·莫塔。','','','','',0), +(8904,'zhTW','危險的愛','這種像傳染病的愛有些不對勁。這情形很噁心,而且當它降低了我們的警戒心,對所有人來說都是個威脅。$b$b我們有這麼多人民都已經陷入如此荒繆的行為已經夠糟了。但我想這甚至還散播到我們的守衛那裡了,他們是應該對這種事免疫的人。$b$b找一名我們的守衛,看看他們是否已經得到了這愚蠢的病。','取得一張守衛發黴的卡片並帶給幽暗城的芬斯塔德‧阿吉歐。','','到奧特蘭克山脈的洛丹米爾湖找芬斯塔德·阿吉歐。','','','','',0), +(8971,'zhTW','暫無內容','','','','','','','','',0), +(8972,'zhTW','REUSE','','','','','','','','',0), +(8973,'zhTW','REUSE','','','','','','','','',0), +(8974,'zhTW','REUSE','','','','','','','','',0), +(8975,'zhTW','REUSE','','','','','','','','',0), +(8976,'zhTW','REUSE','','','','','','','','',0), +(8979,'zhTW','芬斯塔德的直覺','我想我知道造成最近這種情況的原因。你有沒有在運河上聞過新的香水味?新上市的古龍水和香水?$b$b我們的思想已經被一些邪惡的鍊金術給混亂了。$b$b只有一個方法可以確定 - 帶一瓶古龍水和香水給我的朋友,藥劑師金格。皇家藥劑師學會會找出真相的。$b$b你回來後我會補償你購買香水的錢。','帶1個古龍水瓶和1個香水瓶給幽暗城鍊金區的藥劑師金格。','','到奧特蘭克山脈的洛丹米爾湖找藥劑師金格。','','','','',0), +(8981,'zhTW','送禮物','','','','找丘比特·傳播者。','','','','',0), +(8983,'zhTW','追溯來源','我的產品有什麼問題嗎?嗯,我從沒看過這麼多人都如此想得到一個東西。$b$b我是跟一個叫瑪拉‧瑞尼克的商人購買我的補給的。她是鎮上新來的。$b$b她提到有一些東西要送到法師區的裁縫師那裡。','前往幽暗城的法師區,到裁縫師的店裡和瑪拉‧瑞尼克談談。','','','','','','',0), +(8984,'zhTW','揭露來源','聽好,盜賊藥劑師的行為並不是我所擔心的。如果他正暗中破壞我們的努力,就讓我第一個指引你正確的方向。$b$b如果他是無辜的,那他也沒什麼好怕的,對嗎?$b$b我這些東西是跟藥劑師史塔弗隆‧雷倫買的。他正在希爾斯布萊德丘陵越過拉文霍德莊園的隱密區域工作。老實跟你說,我覺得他有點怪怪的。','越過拉文霍德莊園,找到希爾斯布萊德丘陵上的藥劑師史塔弗隆‧雷倫。','','','','','','',0), +(9027,'zhTW','追溯來源','古龍水發生什麼事了嗎?有可能。我從沒見過有這麼多人都爭相搶購一項商品。$b$b聽著,如果它有什麼問題,我也想知道。我跟一個叫艾佛特‧索里山姆的商人買了補給品。他是鎮上新來的。他提到有一些物品要送到「最好的線團」那家店。','到暴風城運河邊和「最好的線團」那家店的艾佛特‧索里山姆談談。','','','','','','',0), +(9028,'zhTW','揭露來源','什麼?叛國罪?不,不,我向你保證,我完全沒有惡意。$b$b難道我想幫助那些人減輕痛苦的求愛儀式也有錯嗎?拜託,那不是犯罪。$b$b為了證明我沒有惡意,我甚至可以告訴你我的貨源是誰。$b$b是一個叫史塔弗隆‧雷倫的人運給我的,他是個藥劑師。我從沒跟他講過話。$b$b我們的哥布林經紀人說他在希爾斯布萊德丘陵越過神秘的拉文霍德莊園工作。希望你有那個運氣能找到他。','找到在希爾斯布萊德丘陵,拉文霍德莊園後方的藥劑師史塔弗隆‧雷倫。','','','','','','',0), +(11528,'zhTW','冬幕節禮物','','','','','','','','',0), +(11580,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11581,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11584,'zhTW','榮耀火焰','','','','','','','','',0), +(11732,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11734,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11735,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11736,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11737,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11738,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11739,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11740,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11741,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11742,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11743,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11744,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11745,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11746,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11747,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11748,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11749,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11750,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11751,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11752,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11753,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11754,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11755,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11756,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11757,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11758,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11759,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11760,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11761,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11762,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11763,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11764,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11765,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11766,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11767,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11768,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11769,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11770,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11776,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11777,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11778,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11779,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11780,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11781,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11782,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11783,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11784,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11785,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11786,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11787,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11799,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11800,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11801,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11802,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11803,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(11835,'zhTW','榮耀火焰','','','','','','','','',0), +(11836,'zhTW','榮耀火焰','','','','','','','','',0), +(11837,'zhTW','榮耀火焰','','','','','','','','',0), +(11838,'zhTW','榮耀火焰','','','','','','','','',0), +(11839,'zhTW','榮耀火焰','','','','','','','','',0), +(11840,'zhTW','榮耀火焰','','','','','','','','',0), +(11841,'zhTW','榮耀火焰','','','','','','','','',0), +(11842,'zhTW','榮耀火焰','','','','','','','','',0), +(11843,'zhTW','榮耀火焰','','','','','','','','',0), +(11844,'zhTW','榮耀火焰','','','','','','','','',0), +(11845,'zhTW','榮耀火焰','','','','','','','','',0), +(11846,'zhTW','榮耀火焰','','','','','','','','',0), +(11847,'zhTW','榮耀火焰','','','','','','','','',0), +(11848,'zhTW','榮耀火焰','','','','','','','','',0), +(11849,'zhTW','榮耀火焰','','','','','','','','',0), +(11850,'zhTW','榮耀火焰','','','','','','','','',0), +(11851,'zhTW','榮耀火焰','','','','','','','','',0), +(11852,'zhTW','榮耀火焰','','','','','','','','',0), +(11853,'zhTW','榮耀火焰','','','','','','','','',0), +(11854,'zhTW','榮耀火焰','','','','','','','','',0), +(11855,'zhTW','榮耀火焰','','','','','','','','',0), +(11856,'zhTW','榮耀火焰','','','','','','','','',0), +(11857,'zhTW','榮耀火焰','','','','','','','','',0), +(11858,'zhTW','榮耀火焰','','','','','','','','',0), +(11859,'zhTW','榮耀火焰','','','','','','','','',0), +(11860,'zhTW','榮耀火焰','','','','','','','','',0), +(11937,'zhTW','旗幟 - 歸還所有火炬的任務完成','','','','','','','','',0), +(13440,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13441,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13442,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13443,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13444,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13445,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13446,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13447,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13449,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13450,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13451,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13453,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13454,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13455,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13457,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13458,'zhTW','褻瀆這些火焰!','','','','','','','','',0), +(13493,'zhTW','榮耀火焰','','','','','','','','',0), +(13494,'zhTW','榮耀火焰','','','','','','','','',0), +(13495,'zhTW','榮耀火焰','','','','','','','','',0), +(13496,'zhTW','榮耀火焰','','','','','','','','',0), +(13497,'zhTW','榮耀火焰','','','','','','','','',0), +(13498,'zhTW','榮耀火焰','','','','','','','','',0), +(13499,'zhTW','榮耀火焰','','','','','','','','',0), +(13500,'zhTW','榮耀火焰','','','','','','','','',0), +(13966,'zhTW','冬幕節禮物','','','','','','','','',0), +(8619,'zhTW','深晨長者','','','','','','','','',0), +(8635,'zhTW','劈石長者','','','','','','','','',0), +(8636,'zhTW','巨石長者','','','','','','','','',0), +(8642,'zhTW','銀脈長者','','','','','','','','',0), +(8643,'zhTW','高峰長者','','','','','','','','',0), +(8644,'zhTW','石壘長者','','','','','','','','',0), +(8645,'zhTW','黑曜長者','','','','','','','','',0), +(8646,'zhTW','錘嘯長者','','','','','','','','',0), +(8647,'zhTW','怒嘯長者','','','','','','','','',0), +(8648,'zhTW','暗靈長者','','','','','','','','',0), +(8649,'zhTW','雷眉長者','','','','','','','','',0), +(8650,'zhTW','雪冠長者','','','','','','','','',0), +(8651,'zhTW','鐵環長者','','','','','','','','',0), +(8652,'zhTW','墓生長者','','','','','','','','',0), +(8653,'zhTW','金善長者','','','','','','','','',0), +(8654,'zhTW','基石長者','','','','','','','','',0), +(8670,'zhTW','符文圖騰長者','','','','','','','','',0), +(8671,'zhTW','狂暴圖騰長者','','','','','','','','',0), +(8672,'zhTW','石塔長者','','','','','','','','',0), +(8673,'zhTW','血蹄長者','','','','','','','','',0), +(8674,'zhTW','冬蹄長者','','','','','','','','',0), +(8675,'zhTW','逐星長者','','','','','','','','',0), +(8676,'zhTW','蠻鬃長者','','','','','','','','',0), +(8677,'zhTW','黑角長者','','','','','','','','',0), +(8678,'zhTW','麥蹄長者','','','','','','','','',0), +(8679,'zhTW','恐怖圖騰長者','','','','','','','','',0), +(8680,'zhTW','風之圖騰長者','','','','','','','','',0), +(8681,'zhTW','雷角長者','','','','','','','','',0), +(8682,'zhTW','星眼長者','','','','','','','','',0), +(8683,'zhTW','晨行長者','','','','','','','','',0), +(8684,'zhTW','夢境先知長者','','','','','','','','',0), +(8685,'zhTW','迷霧長者','','','','','','','','',0), +(8686,'zhTW','高山長者','','','','','','','','',0), +(8688,'zhTW','風行長者','','','','','','','','',0), +(8713,'zhTW','星歌長者','','','','','','','','',0), +(8714,'zhTW','月擊長者','','','','','','','','',0), +(8715,'zhTW','刃葉長者','','','','','','','','',0), +(8716,'zhTW','星林長者','','','','','','','','',0), +(8717,'zhTW','月守長者','','','','','','','','',0), +(8718,'zhTW','劍捷長者','','','','','','','','',0), +(8719,'zhTW','刃歌長者','','','','','','','','',0), +(8720,'zhTW','天光長者','','','','','','','','',0), +(8721,'zhTW','星織長者','','','','','','','','',0), +(8722,'zhTW','草奔長者','','','','','','','','',0), +(8723,'zhTW','夜風長者','','','','','','','','',0), +(8724,'zhTW','晨露長者','','','','','','','','',0), +(8725,'zhTW','河歌長者','','','','','','','','',0), +(8726,'zhTW','銳矛長者','','','','','','','','',0), +(8727,'zhTW','遙語長者','','','','','','','','',0), +(8862,'zhTW','伊露恩的蠟燭','','','','到月光林地找瓦拉達爾·星歌。','','','','',0), +(8863,'zhTW','新年節慶點心','','','','到月光林地找瓦拉達爾·星歌。','','','','',0), +(8864,'zhTW','新年洋裝','','','','到月光林地找瓦拉達爾·星歌。','','','','',0), +(8865,'zhTW','新年長褲套裝','','','','到月光林地找瓦拉達爾·星歌。','','','','',0), +(8866,'zhTW','銅鬚長者','','','','','','','','',0), +(8867,'zhTW','新年煙火','月光林地的德魯伊每年都會舉辦一次慶典,慶祝我們城市對抗遠古惡魔的偉大勝利。$B$B我們讚美長者的智慧,共享美食盛宴,當然還有...煙火秀!$B$B這些可不是普通的煙火。它們受過伊露恩的祝福,經月火賜予力量,發射它們能提高人民的精神,振奮他們的力量。$B$B你只要捐獻一點東西就能跟我們的商人購買色彩繽紛的煙火。試試這附近的一些發射器吧,$n。','點燃8枚新年煙花和2組新年煙花束,然後回到任何一座主城的新年預告者身邊。','','找新年預告者。','點燃春節煙花','點燃新年煙火束','','',0), +(8870,'zhTW','新年慶典','新年將至,$n!塞納里奧議會邀請艾澤拉斯大陸的居民,一同參加新年的慶祝活動。在這特有的城市有一個標示著神聖月光之環的地方,你可以在那兒找到新年預告者。她會告訴你更多關於節慶的訊息。','與鐵爐堡秘法區的新年預告者談話,你也可以在其他主要城市跟新年預告者談話。','','','','','','',0), +(8871,'zhTW','新年慶典','新年將至,$n!塞納里奧議會邀請艾澤拉斯大陸的居民,一同參加新年的慶祝活動。在這特有的城市有一個標示著神聖月光之環的地方,你可以在那兒找到新年預告者。她會告訴你更多關於節慶的訊息。','與暴風城花園區的新年預告者談話。','','','','','','',0), +(8872,'zhTW','新年慶典','新年將至,$n!塞納里奧議會邀請艾澤拉斯大陸的居民,一同參加新年的慶祝活動。在這特有的城市有一個標示著神聖月光之環的地方,你可以在那兒找到新年預告者。她會告訴你更多關於節慶的訊息。','到達納蘇斯,與在塞納里奧區的新年預告者談話,你也可以在其他主要城市跟新年預告者談話。','','','','','','',0), +(8873,'zhTW','新年慶典','新年將至,$n!塞納里奧議會邀請艾澤拉斯大陸的居民,一同參加新年的慶祝活動。在這特有的城市有一個標示著神聖月光之環的地方,你可以在那兒找到新年預告者。她會告訴你更多關於節慶的訊息。','與奧格瑪智慧谷的新年預告者談話,你也可以在其他主要城市跟新年預告者談話。','','','','','','',0), +(8874,'zhTW','新年慶典','新年將至,$n!塞納里奧議會邀請艾澤拉斯大陸的居民,一同參加新年的慶祝活動。在這特有的城市有一個標示著神聖月光之環的地方,你可以在那兒找到新年預告者。她會告訴你更多關於節慶的訊息。','與幽暗城入口的新年預告者談話,你也可以在其他主要城市跟新年預告者談話。','','','','','','',0), +(8875,'zhTW','新年慶典','新年將至,$n!塞納里奧議會邀請艾澤拉斯大陸的居民,一同參加新年的慶祝活動。在這特有的城市有一個標示著神聖月光之環的地方,你可以在那兒找到新年預告者。她會告訴你更多關於節慶的訊息。','到雷霆崖,與長者高地的新年預告者談話,你也可以在其他主要城市跟新年預告者談話。','','','','','','',0), +(8876,'zhTW','小型煙花','','','','到月光林地找法莉爾·星歌。','','','','',0), +(8877,'zhTW','煙火發射器','','','','到月光林地找法莉爾·星歌。','','','','',0), +(8878,'zhTW','節慶設計圖','','','','到月光林地找法莉爾·星歌。','','','','',0), +(8879,'zhTW','大型煙花','','','','到月光林地找法莉爾·星歌。','','','','',0), +(8880,'zhTW','煙花束','','','','到月光林地找法莉爾·星歌。','','','','',0), +(8881,'zhTW','大型煙花束','','','','到月光林地找法莉爾·星歌。','','','','',0), +(8882,'zhTW','煙花束發射器','','','','到月光林地找法莉爾·星歌。','','','','',0), +(8883,'zhTW','瓦拉達爾‧星歌','既然你有新年邀請卡,你就能前往月光林地!你會在那裡看到許多狂歡者,瓦拉達爾‧星歌和他的姐姐法莉爾‧星歌在永夜港裡等著所有想積極參與慶祝活動的人。$B$B通過較強的月光前往月光林地並和瓦拉達爾‧星歌談談;看看你能在新年裡得到什麼禮物!','在月光中使用你的新年邀請卡前往月光林地。到達後和永夜港的瓦拉達爾‧星歌交談。','','','','','','',0), +(13065,'zhTW','歐漢茲長者','','','','','','','','',0), +(9319,'zhTW','暗處之光','我們不是唯一慶祝這個節日的人,$n。所有的生物,所有的文化,都被這火焰所感動。就連在最黑暗的地方,也點著這些火焰。$b$b如果你想親自看看它們就到深處去。找到在斯坦索姆,通靈學院,厄運之槌,和黑石塔大廳燃燒的篝火;我會等著你回來。','找到並觸碰位在黑石塔,厄運之槌,通靈學院,和斯坦索姆的篝火。','','找陶土議會長者。','','','','',0), +(9322,'zhTW','卡林多的藍色火焰','艾澤拉斯到處都在慶祝仲夏火焰節慶,而卡林多這塊多變的土地也不例外。你看起來很適合旅行 - 或許已經安排好一個旅程了。$b$b如果你沒有看過世界各處猛烈的藍色火焰就不算真的體驗了仲夏。主持者們在冷颼颼的西冬泉谷,艾薩拉東北邊,希利蘇斯荒原的勇士之墓附近,和通往繁茂安戈洛的入口都點燃了火焰。等你的旅行完成了再回來。','拜訪艾薩拉,希利蘇斯,安戈洛環形山,和冬泉谷的仲夏營地,再回去找節慶營火管理者。','','找節慶營火管理者。','','','','',0), +(9323,'zhTW','東部王國的藍色火焰','我們的火焰慶典遍布整個大陸,$c。每一個地方都感受到這個節日的熱情,最旺盛的火焰燃燒著明亮的藍色。去找它們吧。你會在黑石塔北邊就發現一個。其他有的在東瘟疫之地一個老舊的城鎮附近,有的在沿著路到多山的辛特蘭懸崖邊,還有詛咒之地通往黑暗之門的路上。$b$b完成之後再回來這裡。','拜訪詛咒之地,東瘟疫之地,辛特蘭和灼熱峽谷的火焰節慶營地。','','找節慶營火管理者。','','','','',0), +(9324,'zhTW','偷取奧格瑪之焰','這個從奧格瑪中心偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但博學大師或許知道更多...','將奧格瑪之焰交給節慶博學大師。','','','','','','',0), +(9326,'zhTW','偷取幽暗城之焰','這個從幽暗城廢墟偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但博學大師或許知道更多...','將幽暗城之焰交給節慶博學大師。','','','','','','',0), +(9330,'zhTW','偷取暴風城之焰','這個從暴風城中心偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但故事使者或許知道更多...','將暴風城之焰交給節慶故事使者。','','','','','','',0), +(9331,'zhTW','偷取鐵爐堡之焰','這個從鐵爐堡中心偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但故事使者或許知道更多...','將鐵爐堡之焰交給節慶故事使者。','','','','','','',0), +(9332,'zhTW','偷取達納蘇斯之焰','這個從泰達希爾陸地偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但故事使者或許知道更多...','將達納蘇斯之焰交給節慶故事使者。','','','','','','',0), +(9339,'zhTW','小偷的獎勵','這個從暴風城中心偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但(NAME)或許知道更多...','將暴風城之焰交給(NAME)。','','','','','','',0), +(9365,'zhTW','小偷的獎勵','這個從暴風城中心偷出來的火焰,讓你感到很溫暖。這股新的力量對你而言很陌生,但(NAME)或許知道更多...','將暴風城之焰交給(NAME)。','','','','','','',0), +(9367,'zhTW','火焰節慶','仲夏又來了!$b$b每一年,按照傳統,雀屏中選的篝火管理者要負責看管我們城市裡的篝火。當整個艾澤拉斯都是燃燒的火焰時,我們的火苗一定要是最熱烈、最明亮的,才能恰當地表現出對季節的尊敬。$b$b事實上,我有個任務要給你,如果你不介意的話。我還沒聽說所有主城裡的火焰都燃燒的恰如其分。前往那裡讓火焰為你取取暖 -- 確定它們是燙的!','觸摸暴風城、鐵爐堡和達納蘇斯裡的篝火,再和任何一個節慶博學大師談談。','','找節慶博學大師。','','','','',0), +(9368,'zhTW','火焰節慶','仲夏又來了!$b$b每一年,按照傳統,雀屏中選的篝火管理者要負責看管我們城市裡的篝火。當整個艾澤拉斯都是燃燒的火焰時,我們的火苗一定要是最熱烈、最明亮的,才能恰當地表現出對季節的尊敬。$b$b事實上,我有個任務要給你,如果你不介意的話。我還沒聽說所有主城裡的火焰都燃燒的恰如其分。前往那裡讓火焰為你取取暖 -- 確定它們是燙的!','觸摸奧格瑪、雷霆崖和幽暗城裡的篝火,再和任何一個節慶故事使者談談。','','找節慶故事使者。','','','','',0), +(9386,'zhTW','黑暗中的光明','你真是個渴望冒險的傢伙,不是嗎?如果你願意再一次進入地下城深處的話,那我會給你獎勵的。$b$b去看看通靈學院、斯坦索姆、黑石塔和厄運之槌廳堂內的篝火,我會在這裡等你回來的。','找到並碰觸在黑石塔、厄運之槌、通靈學院和斯坦索姆內的火盆,並回到節日護火者處。','','找節慶營火管理者。','','','','',0), +(9388,'zhTW','卡林多的閃爍火焰','世界各地都有許多的火焰在燃燒著,$n。最難處理的火焰就是那些發著綠光的;沒有管理的話它們不會長久燃燒。為我們的火焰管理者確認那些翠綠色的火焰仍在卡林多燃燒著,聽到了嗎?$b$b你可以在貧瘠之地的棘齒城,黑海岸的主宰之劍附近找到它們,還有從銀翼哨站旁的橋邊進入梣谷的森林裡,和沿著石爪山脈的幹道走到通往狂風峭壁的路上都能找到。','探勘梣谷,貧瘠之地,黑海岸,和石爪山脈的篝火,再和節慶火焰管理者談談。','','找節慶營火管理者。','','','','',0), +(9389,'zhTW','東部王國的閃爍火焰','仲夏火焰節慶傳統上會在整個土地上點燃無數的火焰。有些人說綠色的火焰是最美的,因為它們是最難維持的而且又有獨特的色澤。為我們的火焰管理者確認它們仍在東部王國燃燒著。它們坐落在濕地的丹莫德附近,銀松森林內的焚木村那裡也有,眺望濕地燈塔的峭壁上,和希爾斯布萊德丘陵廢棄的哨塔旁。','探勘希爾斯布萊德丘陵,銀松森林,西部荒野,和濕地的篝火,再和節慶火焰管理者談談。','','找節慶營火管理者。','','','','',0), +(11117,'zhTW','抓住野生鹿角兔!','就是現在。你聽到了嗎?從那邊的丘陵傳過來的。那是鹿角兔!被啤酒節氣味吸引過來的野生動物。我一直想抓一些,可惜我撞傷了小腿,跑不過那些兔崽子。但是你可以幫我!$b$b帶著這個網子然後用它抓住那些小傢伙。帶五隻回來給我,我會給你很不錯的報酬!還有一件事 - 你得戴上模擬醉眼護目鏡才能看到牠們,如果你需要一副的話跟我說一聲。','茍達克‧狙獵者要你用鹿角兔捕網幫他抓5隻昏迷的鹿角兔。他提到你必須要戴上模擬醉眼護目鏡才看得到那些鹿角兔。','','到丹莫洛找茍達克·狙獵者。','','','','',0), +(11118,'zhTW','粉紅伊萊克遊行','在啤酒節時喝醉是個長久以來的優良傳統 - 是天殺的必要!問題是,我接到從艾澤拉斯各地的報告都指出,我們的慶典被幻象所騷擾!我們可不能容許這種事!$b$b這些伊萊克不能被一般武器所傷害 - 武器會直接穿過牠們 - 所以帶著這個驚人的地精裝置前往其他的啤酒廣場,讓牠們灰飛湮滅。$b$b要記得,你一定要戴上模擬醉眼護目鏡才能看到牠們!如果你需要一副的話跟我說一聲。','前往暴風城、達納蘇斯還有艾克索達外頭的啤酒廣場,在那些地方宰掉三頭伊萊克,然後回去找茍達克‧狙獵者。你一定要戴上模擬醉眼護目鏡才看得見那些粉紅伊萊克。','','到丹莫洛找茍達克·狙獵者。','','','','',0), +(11120,'zhTW','粉紅伊萊克遊行','啤酒節是個行之有年的食物與飲品的慶典。但有時候人們會不勝酒力!飲酒過量可能會產生副作用…我們接獲通報,有許多人看見了幻象。\n\n大夥們一直說他們看到了粉紅伊萊克,我需要你去把伊萊克給處理掉。帶著這把哥布林工程師的光線槍前往其他的啤酒廣場,把伊萊克給宰了。為了保護你自身的安全,我建議你戴上模擬醉眼護目鏡,這樣子就可以看到你的目標,同時又保有理智了。','造訪銀月城、雷霆崖還有幽暗城外的啤酒廣場,在每個地方各宰掉$1oa頭粉紅伊萊克,然後回去找葛洛‧獵狙者。你得戴上模擬醉眼護目鏡才看得見那些粉紅伊萊克。','','到杜洛塔找葛羅卓克·獵狙者。','','','','',0), +(11122,'zhTW','來回跑','你想在啤酒節中幫忙是吧?我有個絕佳的任務可以託付給你。我讓你坐上我的競速山羊,然後你就直奔卡拉諾斯。我有些酒桶要從那裡拿過來。$b$b弗萊恩‧火酒就在酒桶堆附近的小丘上。在你靠近時他會把酒桶丟給你,然後你要迅速地把酒桶拿回來這邊丟給保爾‧凍石。一次只能帶一桶。$b$b準備好了嗎?','從卡拉諾斯的弗萊恩‧火酒那裡拿一個酒桶,並帶回來給保爾‧凍石。如果你的山羊跑掉了,就叫奈爾‧拉姆斯登再給你一頭。','','到丹莫洛找奈爾·拉姆斯登。','運送酒桶','','','',0), +(11127,'zhTW','雷酒的秘密','我絕對沒有從我們的雷酒表親那邊偷過一樣東西,他們是一群好人。但如果你想在這個行業中領先,有時候就得做一些不幸的事情,這就是為什麼我會去僱人來替我做那些事。$B$B葛林布茲·雷酒是家族中的古怪份子,他就住在月溪鎮的南邊,西部荒野的小丘上。我聽說他有了麥芽酒的新配方,我要在這東西打擊市場前拿到它。你願意替我把它拿來嗎?我會給你報酬的。一個麥酒家族的人有恩必報。','前往西部荒野,從葛林布茲的營地中偷取葛林布茲的秘密配方,再回啤酒節場地去找·麥酒。','','到丹莫洛找畢肯·麥酒。','','','','',0), +(11293,'zhTW','叫賣麥酒!','我們得向大家宣傳麥酒家族參加了啤酒節。你得到銀行外面、軍事區、探險者大廳以及秘法區的旗幟下大聲叫喊。不過我會讓事情簡單點,我會借你一頭競速山羊,為時4分鐘。用韁繩驅趕山羊奔跑,不過別讓牠累過頭。','在銀行外、軍事區、探險者大廳及秘法區外散佈有關啤酒節的訊息。','','到丹莫洛找畢肯·麥酒。','在銀行外叫賣','在軍事區叫賣','在探險者大廳叫賣','在秘法區叫賣',0), +(11294,'zhTW','叫賣雷酒!','是時候讓人們知道雷酒聽見了他們對於好啤酒的渴求。你得到銀行外、軍事區、探險者大廳以及秘法區的旗幟下大聲叫喊。$b$b不過我會讓事情簡單點,我會借你一頭山羊,為時4分鐘。$b$b跑太快的時候要小心,你在鐵爐堡可找不到蘋果...我們可不想幫到麥酒的使者。','在銀行外、軍事區、探險者大廳及秘法區外散佈有關啤酒節的訊息。','','到丹莫洛找達然·雷酒。','在銀行外叫賣','在軍事區叫賣','在探險者大廳叫賣','在秘法區叫賣',0), +(11318,'zhTW','現在就是山羊競速...差不多。','你想要去看看競速山羊啊?但願你已經準備好面對極速挑戰了。在我放你到處跑之前,你得先向我展示你懂得駕馭這些優秀的生物。$b$b條件如下:我會借給你競速韁繩和一頭山羊。你得向我證明你能夠駕馭這些山羊。$b$b讓山羊保持在快步、慢跑與奔跑狀態各8秒鐘。如果你需要駕馭山羊的教學,就去找我的學徒保爾‧凍石聊聊。','你有4分鐘的時間可以鞭打山羊,然後在3種不同速度下各維持8秒。','','到丹莫洛找奈爾·拉姆斯登。','維持快步8秒','維持慢跑8秒','維持疾馳8秒','',0), +(11320,'zhTW','[NYI]現在就是山羊競速…差不多。','任務描述','日誌描述','','到丹莫洛找達然·雷酒。','維持綠色速度6秒','維持黃色速度6秒','維持紅色速度6秒','',0), +(11407,'zhTW','為德羅恩的釀酒廠而吶喊!','你想幫忙把力量與榮譽帶給啤酒節嗎?我們需要你在力量谷、榮譽谷、智慧谷和精神谷拍賣場外的旗杆下大聲叫喊。$b$b我們可以把競速山羊借給你4分鐘。$b$b不過要小心,那些小氣的哥布林可沒有在沿路上放著蘋果。','在力量谷的拍賣場外的旗杆下,榮譽谷、智慧谷與精神谷散佈有關啤酒節的訊息。','','到杜洛塔找寇特·高斯坦。','在拍賣場外叫賣','在榮譽穀叫賣','在智慧穀叫賣','在精神穀叫賣',0), +(11408,'zhTW','為提洽里的巫毒釀酒廠而吶喊!','我們需要讓大家知道有關食人妖參加了啤酒節的事情。你得到力量谷的拍賣場外,還有榮譽谷、智慧谷以及精神谷的旗幟下大聲叫喊。不過我會讓事情簡單點,我會借你一頭競速山羊,為時4分鐘。$b$b不過小心點,哥布林可沒有在沿路上放蘋果,他們就是這麼小氣。','在力量谷的拍賣場外的旗杆下,榮譽谷、智慧谷與精神谷散佈有關啤酒節的訊息。','','','在拍賣場外叫賣','在榮譽穀叫賣','在智慧穀叫賣','在精神穀大喊',0), +(11409,'zhTW','現在就是山羊競速...差不多。','你想去看看競速山羊啊?矮人們自以為很懂得駕馭這些生物,可是說老實話,他們大部分的時候都醉得一塌糊塗,你覺得騎個山羊還會有多難呢?$b$b在我讓你出發之前,你得向我證明你能駕馭這些透過合法途徑取得的優良動物。$b$b條件如下:我會借給你一頭山羊。你得向我證明你能夠駕馭這些山羊。$b$b讓山羊保持在快步、慢跑與奔跑狀態各8秒鐘。','你有4分鐘的時間可以鞭打山羊,然後在3種不同速度下各維持8秒。','','到杜洛塔的啤酒節場地找山羊管理員雷。','維持快步8秒','維持慢跑8秒','維持疾馳8秒','',0), +(11412,'zhTW','來回跑','真高興你來了,我們有大麻煩了!酒在從刃拳海灣送過來的路上出了一點意外,現在那些酒卡在半路動彈不得。你得幫我們把那些酒帶回來!$b$b騎我的競速山羊去,只要順著路走就可以到達刃拳海灣了。$b$b你一靠近他,他就會丟給你一桶酒,然後你把酒桶帶回來,丟給我那更靠得住的助手。目前我們只需要3桶酒。這件事若辦得好,也許我們還會有其他的工作交代給你。','從倒在通往刃拳海灣路上的哥布林手中得到酒桶,然後交給山羊管理員雷的助手。如果你的山羊不見了,找山羊管理員雷再要一頭。','','到杜洛塔找山羊管理員雷。','運送酒桶','','','',0), +(11419,'zhTW','啤酒節騎乘用山羊','假如你給山羊競速學徒,德瑞茲·迅跌看這個手印的話,他就會讓你購買啤酒節騎乘用山羊。','將『榮譽釀酒者』手印交給德瑞茲·迅跌,他就在杜洛塔的啤酒節營地入口附近。','','到杜洛塔的野豬農場找德瑞茲·迅跌。','','','','',0), +(11431,'zhTW','抓住野生鹿角兔!','在德拉諾,很多生物都難以獵捕。但是我在艾澤拉斯還從來沒有遇過像野生鹿角兔這樣的生物!\n\n這些野獸在一年之中很少出現,但啤酒節的聲音和氣味似乎可以引誘它們現身。如果你四處看看,可能還是會一無所獲…這個時候護目鏡就派上用場啦!\n\n活捉五隻這種鹿角兔給我,向我證明你是個夠格的獵人。如果你需要護目鏡的話,我有幾副可以給你用。','葛洛‧獵狙者要求你用鹿角兔捕網去抓$1oa隻昏迷的鹿角兔。你得戴上模擬醉眼護目鏡才能看見這些鹿角兔。','','到杜洛塔找葛羅卓克·獵狙者。','','','','',0), +(11441,'zhTW','啤酒節!','前往在鐵爐堡外的啤酒節營地,找啤酒節管理人談談並取得一杯免費啤酒。','和啤酒節管理人交談。','','','','','','',0), +(11444,'zhTW','[PH]啤酒廣場A','[PH]找一個啤酒節宣傳員交談,他會在達納蘇斯、埃索達、沙塔斯城或暴風城外的啤酒廣場。取得一個免費的鹹脆餅。','[PH]在任何一個啤酒廣場和啤酒節宣傳員交談,並取得免費的鹹脆餅。','','','','','','',0), +(11445,'zhTW','[PH]啤酒廣場B','[PH]找一個啤酒節宣傳員交談,他會在達納蘇斯、埃索達、沙塔斯城或暴風城外的啤酒廣場。取得一個免費的鹹脆餅。','[PH]在任何一個啤酒廣場和啤酒節宣傳員交談,並取得免費的鹹脆餅。','','','','','','',0), +(11446,'zhTW','啤酒節!','前往在奧格瑪外的啤酒節營地,找啤酒節管理人談談並取得一杯免費啤酒。','和啤酒節管理人交談。','','','','','','',0), +(11447,'zhTW','歡迎來到啤酒節!','[PH]前往在鐵爐堡外的啤酒節營地,找啤酒節管理人談談並取得一杯免費啤酒。','和啤酒節管理人交談並取得一杯免費啤酒。','','','','','','',0), +(11454,'zhTW','尋找破壞者','這一堆破爛的廢紙像是被那些黑鐵入侵者所意外留下來的。$B$B那些計畫很複雜,而且是用一種矮人語密碼所寫成,末尾的簽名『寇仁·恐酒』倒是很清楚,還提到提到黑石深淵的黑鐵酒吧。你應該要找到這個教唆者,終止這些掠奪。','在黑石深淵的黑鐵酒吧中找到寇仁·恐酒。','','','','','','',0), +(14022,'zhTW','旅人豐年祭','你要和我們一起慶祝旅人豐年祭嗎,$n?這是個回顧你的旅程與好運,與朋友分享豐富的食物及故事的好機會。$B$B你能坐在主城的豐年祭餐席旁參加美好的旅人豐年祭餐會並享用所有的美食。$B$B如果你想學習如何烹飪旅人豐年祭的傳統食物,就去找葛列格里‧塔波吧。你可以在暴風城大門外邊找到他。','與暴風城大門外邊的葛列格里‧塔波談談。','','','','','','',0), +(14023,'zhTW','香料麵包餡料','我們的香料麵包餡料是旅人豐年祭餐桌上的必備食物。它不只在暴風城受歡迎,現在更在旅人豐年祭的食譜上佔有一席之地。$B$B如果你已經是位廚師,去找旅人豐年祭的商人領取一本烹飪書吧,他也提供所有佳節大餐所需的當地食材。如果你還不是位廚師,這是你開始學習的最好時機!$B$B當你做好餡料,就交給餐桌旁的賈斯伯‧摩爾吧。','製作5份香料麵包餡料,然後帶給暴風城大門外邊餐會區的賈斯伯‧摩爾。','','到艾爾文森林的閃金鎮找賈斯伯·摩爾。','準備香料麵包餡料','','','',0), +(14024,'zhTW','南瓜派','你做的香料麵包餡料聞起來很香,但少了南瓜派就不配稱作旅人豐年祭餐會了。那是我們喜歡的另一道暴風城名餚,而它只使用這裡生長的成熟的艾爾文南瓜來製作。$B$B如果你還不知道怎麼做南瓜派,在你的豐年祭烹飪書中有這道菜的做法。$B$B你願意做幾片南瓜派並帶給鐵爐堡外邊的愛德華‧溫斯洛嗎?他正為南瓜派的量不夠而急得跳腳呢。','製作5片南瓜派,然後帶給鐵爐堡外邊餐會區的愛德華‧溫斯洛。','','到丹莫洛的鐵爐堡大門找愛德華·溫斯洛。','準備南瓜派','','','',0), +(14028,'zhTW','蔓越莓甜酸醬','如果你從未吃過蔓越莓甜酸醬,嘗過後你會愛上它的。它是用最新鮮又氣味強烈的濕地蔓越莓所製成的。如果你想試試手藝來製作甜酸醬,從旅人豐年祭的商人那就可以買到。$B$B食譜應該就在你的豐年祭烹飪書中。$B$B如果有時間的話,你願意做一些甜酸醬並帶給暴風城外的賈斯伯‧摩爾嗎?我答應用一些甜酸醬跟他交換你帶來的南瓜派。','製作5份蔓越莓甜酸醬,然後帶給暴風城外邊餐會區的賈斯伯‧摩爾。','','到艾爾文森林的閃金鎮找賈斯伯·摩爾。','準備蔓越莓酸甜醬','','','',0), +(14030,'zhTW','達納蘇斯的貪吃鬼','謝謝你帶來的蔓越莓甜酸醬。這裡有太多東西要烹製了,我幾乎沒時間去想別的事。而我現在的第一要務是,達納蘇斯的艾薩克‧愛勒頓那裡幾乎吃完了所有食物。你應該可以快馬加鞭的幫忙趕製更多的香料麵包餡料和南瓜派吧?商人那有你所需要的一切食材。$B$B你可以在戰士區的那一邊,達納蘇斯入口附近的餐桌旁找到他。','帶5份香料麵包餡料和5份南瓜派給達納蘇斯入口附近的艾薩克‧愛勒頓。','','到達納蘇斯的戰士區找艾薩克·愛勒頓。','','','','',0), +(14033,'zhTW','蜜煮甘薯','既然你都來了,那就應該帶幾個泰達希爾甘薯才對。它們被用來製作世界上最美味的蜜煮甘薯。$B$B如果你不相信我,去查查你豐年祭烹飪書中的食譜然後試試吧。如果還有剩,你應該分一些給暴風城外邊餐會區的葛列格里‧塔波。這是他最愛的美食之一,不過對他來說,其實每樣食物都是他的最愛!','製作5份蜜煮甘薯,然後帶給暴風城大門外邊的葛列格里‧塔波。','','到艾爾文森林的閃金鎮找葛列格里·塔波。','準備糖煮甜薯','','','',0), +(14035,'zhTW','慢烤火雞','每個旅人豐年祭的餐會都需要一個華麗的主題物,當然我不是指裝飾用的豐饒角,而是說華美的烤火雞這道主菜。$B$B在你的豐年祭烹飪書中有這道好菜。何不去宰了幾隻野生火雞然後準備個幾份呢?而整個艾爾文森林都有火雞在亂逛,找到牠們並不是件難事。$B$B在你烤好之後,你願意帶幾份給達納蘇斯大門附近的艾薩克‧愛勒頓嗎?','製作5隻慢烤火雞然後帶給達納蘇斯大門附近的艾薩克‧愛勒頓。','','到達納蘇斯的戰士區找艾薩克·愛勒頓。','準備炆烤火雞','','','',0), +(14036,'zhTW','旅人豐年祭','你來此是要和我們一同慶祝旅人豐年祭嗎?在過去,這是個一邊回顧你的旅程與好運,同時一邊與朋友分享美食的節日。許多地方仍然沿襲這個優良的傳統。$B$B你可以坐在各大主城的豐年祭餐席上,親身參與旅人豐年祭的餐會,並且享用所有的美食。$B$B如果你想學習如何烹飪旅人豐年祭的傳統食物,就去找邁爾斯‧墨壺吧。你可以在幽暗城上層的中庭找到他。','和幽暗城上層中庭的邁爾斯‧墨壺談談。','','','','','','',0), +(14037,'zhTW','香料麵包餡料','我們的香料麵包餡料是旅人豐年祭餐桌上的必備食物。這道菜從羅德隆美好的年代就一直記載著,現在更在傳統菜餚上佔有一席之地。$B$B如果你已經是位廚師,去找旅人豐年祭的商人領取一本烹飪書吧,他也提供所有佳節大餐所需的當地食材。如果你還不是位廚師,這是你開始學習的最好時機!$B$B當你做好餡料,就交給餐桌旁的威廉‧慕林吧。','製作5份香料麵包餡料,然後帶給幽暗城中庭餐會區的威廉‧慕林。','','到提里斯法林地的羅德隆廢墟找威廉·慕林','準備香料麵包餡料','','','',0), +(14040,'zhTW','南瓜派','你做的香料麵包餡料很受歡迎,但少了南瓜派就不配稱作旅人豐年祭餐會了。那是另一道傳統的當地名餚,而它只使用這裡生長的成熟提里斯法南瓜來製作。$B$B如果你還不知道怎麼做南瓜派,在你的豐年祭烹飪書中有這道菜的做法。$B$B你願意做幾片南瓜派並帶給奧格瑪外邊的法蘭西斯‧埃頓嗎?他正為南瓜派的量不夠而急得跳腳呢。','製作5片南瓜派,然後帶給奧格瑪外邊餐會區的法蘭西斯‧埃頓。','','到杜洛塔的野豬農場找法蘭西斯·埃頓。','準備南瓜派','','','',0), +(14041,'zhTW','蔓越莓甜酸醬','你嚐過蔓越莓甜酸醬沒?它是用新鮮又氣味強烈的怒水蔓越莓所製成的。如果你想試試手藝來製作甜酸醬,從旅人豐年祭的商人那就可以買到。$B$B食譜應該就在你的豐年祭烹飪書中。$B$B如果有時間的話,你願意做一些甜酸醬並帶給雷霆崖升降梯底部西邊的杜金‧遠野嗎?','製作5份蔓越莓甜酸醬,然後帶給雷霆崖升降梯底部西邊的杜金‧遠野。','','到雷霆崖找杜金·遠野。','準備蔓越莓酸甜醬','','','',0), +(14043,'zhTW','蜜煮甘薯','既然你都來了,那就應該帶著幾個莫高雷甘薯才對。它們被用來製作美味的蜜煮甘薯,所有旅人豐年祭名餚中我最愛的一道菜。$B$B如果你不相信我,去查查你豐年祭烹飪書中的食譜然後試試吧。如果你正要回去奧格瑪,把它們帶給城外邊餐會區的法蘭西斯‧埃頓。我是一直在補給他的食物存量沒錯,可是那邊的消耗量實在太大了。','製作5份蜜煮甘薯,然後帶給奧格瑪外邊餐會區的法蘭西斯‧埃頓。','','到杜洛塔的野豬農場找法蘭西斯·埃頓。','準備糖煮甜薯','','','',0), +(14044,'zhTW','食物短缺的幽暗城','謝謝你帶來的蜜煮甘薯。這裡有太多東西要烹製了,我很難補滿所有食物。然後,邁爾斯捎給我一封短信說他那裡的餡料及蔓越莓甜酸醬快要消耗殆盡了。你應該可以快馬加鞭的幫忙趕製更多的這兩樣食物吧?商人那應該有你所需要的一切食材。$B$B你可以在幽暗城廢墟中庭附近的餐桌旁找到邁爾斯‧墨壺。','帶5份香料麵包餡料和5份蔓越莓甜酸醬給幽暗城入口附近的邁爾斯‧墨壺。','','到提里斯法林地的羅德隆廢墟找邁爾斯·墨壺。','','','','',0), +(14047,'zhTW','慢烤火雞','旅人豐年祭的餐會都需要一個主菜,以我們來說就是慢烤火雞了。沒有任何一道菜可以與它相提並論。$B$B在你的豐年祭烹飪書中有這道好菜。何不去宰了幾隻野生火雞然後準備個幾份呢?整個提里斯法林地都有火雞在亂逛,找到牠們並不是件難事。$B$B在你烤好之後,你可以帶幾份給奧格瑪外邊的法蘭西斯‧埃頓嗎?','製作5隻慢烤火雞然後帶給奧格瑪大門附近的法蘭西斯‧埃頓。','','到杜洛塔的野豬農場找法蘭西斯·埃頓。','準備炆烤火雞','','','',0), +(14048,'zhTW','火雞不足','我從節日開始就不停的烹製食物,但依然是供不應求。可以請你幫我處理一道菜嗎?$B$B這裡很難抓到火雞,如果你能提供一些慢烤火雞,那可是幫了一個大忙。若你想要自己準備這道菜,艾爾文森林的任何地方都可以獵捕到野生火雞。旅人豐年祭商人也提供你所需要的其他物品。','帶20隻慢烤火雞給鐵爐堡外的凱特倫‧鐵壺。','','到丹莫洛的鐵爐堡大門找凱特倫·鐵壺。','','','','',0), +(14051,'zhTW','別忘了餡料!','快要可以把桌子擺滿食物了!我在盯著甘薯時順道做好了蔓越莓甜酸醬,也確定派沒有烤焦。$B$B我想所有東西應該都準備好了。不,等等,我忘了某個東西。餡料!噢,不。在其他東西做好之前我沒有時間把餡料放進製作排程了。你可以幫幫我嗎?買或做一些餡料應該不會花太多時間,而且你可以在這裡買到食材。','帶20份香料麵包餡料給鐵爐堡外邊餐會區的凱特倫‧鐵壺。','','到丹莫洛的鐵爐堡大門找凱特倫·鐵壺。','','','','',0), +(14053,'zhTW','蔓越莓甜酸醬又吃完了?','我丈夫,賈斯伯,要去做更多的蔓越莓甜酸醬,但看來他正忙於確認蜜煮甘薯是否足以供應給所有的客人。你可以幫忙嗎?如果你是個廚師,你可以在鐵爐堡外邊的旅人豐年祭商人那取得氣味強烈的濕地蔓越莓。$B$B如果你不會烹調,請其他人做甜酸醬也是可以。','帶20份蔓越莓甜酸醬給暴風城外邊餐會區的愛蓮‧摩爾。','','到艾爾文森林的閃金鎮找愛蓮·摩爾。','','','','',0), +(14054,'zhTW','一「派」輕鬆','艾薩克忙著教慶祝者製作旅人豐年祭的傳統菜宴並如何分配每年此時所收成的食材。我已經儘可能的把桌子堆滿菜盤,但艾薩克的最愛快要吃完了,就是南瓜派。$B$B你能拿一些來給我們嗎?如果你想自己做,你需要去暴風城外邊跟旅人豐年祭商人購買成熟的艾爾文南瓜。','帶20片南瓜派給達納蘇斯大門附近餐會區的瑪麗‧愛勒頓。','','到達納蘇斯的戰士區找瑪麗·愛勒頓。','','','','',0), +(14055,'zhTW','她要甘薯','我妻子愛蓮把我抓來幫忙把桌子堆滿,但她卻三心二意。一開始要我做南瓜派,但現在她卻改要蜜煮甘薯。$B$B不過,我已經開始做派了,所以也許你能幫我趕製那些甘薯。若我們能完成她要求的每樣東西,她一定會很驚喜的。$B$B如果你要自己做蜜煮甘薯,你必須從達納蘇斯的旅人豐年祭商人那邊買一些甘薯。謝了,$n。','帶20份蜜煮甘薯給暴風城外邊餐會區的賈斯伯‧摩爾。','','到艾爾文森林的閃金鎮找賈斯伯·摩爾。','','','','',0), +(14058,'zhTW','她要甘薯','蘿貝塔‧卡特找我來幫忙準備其中一道菜,蜜煮甘薯。正常說來,我是很樂意幫忙的,但我已經答應女侍幫她看好桌子。$B$B若你願意幫我處理那些蜜煮甘薯,我會很感激你的。要是我讓蘿貝塔失望,她是不會原諒我的。$B$B如果你要自己烹製蜜煮甘薯,你必須跟雷霆崖的旅人豐年祭商人買些甘薯。謝了,$n。','帶20份蜜煮甘薯給幽暗城餐會區的威廉‧慕林。','','到提里斯法林地的羅德隆廢墟找威廉·慕林。','','','','',0), +(14059,'zhTW','蔓越莓甜酸醬又吃完了?','我真希望能搞清楚為何蔓越莓甜酸醬消耗得那麼快。有時候,我猜他們趁我不注意時偷偷拿去餵那些憎惡體。你可以幫我做一批新的嗎?如果你是個廚師,你可以在奧格瑪外邊的旅人豐年祭商人那買到氣味強烈的怒水河蔓越莓。$B$B如果你不會烹調,請其他人做甜酸醬也是可以。','帶20份蔓越莓甜酸醬給幽暗城中庭餐會區的蘿貝塔‧卡特。','','到提里斯法林地的羅德隆廢墟找蘿貝塔·卡特。','','','','',0), +(14060,'zhTW','一「派」輕鬆','杜金和拉荷忙著教慶祝者製作旅人豐年祭的傳統菜宴並如何分配每年此時所收成的食材。我已經儘可能的把桌子堆滿菜盤,可是南瓜派快吃完了。$B$B你能拿一些來給我們嗎?如果你想自己做,你需要去幽暗城外邊跟旅人豐年祭商人購買成熟的提里斯法南瓜。','帶20片南瓜派給雷霆崖外邊餐會區的瑪哈拉‧金麥。','','到莫高雷找瑪哈拉·金麥。','','','','',0), +(14061,'zhTW','火雞不足','我從節日開始就不停的烹製食物,但依然是供不應求。可以請你幫我處理一道菜嗎?$B$B這裡很難抓到火雞,如果你能提供一些慢烤火雞,那可是幫了一個大忙。若你想要自己準備這道菜,提里斯法林地的任何地方都可以獵捕到野生火雞。旅人豐年祭商人也提供你所需要的其他物品。','帶20隻慢烤火雞給奧格瑪外邊的昂達尼‧巨磨。','','到杜洛塔的野豬農場找昂達尼·巨磨。','','','','',0), +(14062,'zhTW','別忘了餡料!','快要可以把桌子擺滿食物了!我在盯著甘薯時順道做好了蔓越莓甜酸醬,也確定派沒有烤焦。$B$B我想所有東西應該都準備好了。不,等等,我忘了某個東西。餡料!噢,不。在其他東西做好之前我沒有時間把餡料放進製作排程了。你可以幫幫我嗎?買或做一些餡料應該不會花太多時間,而且你可以在這裡買到食材。','帶20份香料麵包餡料給奧格瑪外邊的昂達尼‧巨磨。','','到杜洛塔的野豬農場找昂達尼·巨磨。','','','','',0), +(14064,'zhTW','分享豐年祭盛宴','直到你在豐年祭餐席上吃的飽飽才算是徹底的慶祝了旅人豐年祭。$B$B來唷,坐好囉,開動吧,吃吃看每樣食物!你可以自己換位置,或是請其他人傳一些他們的食物給你。$B$B當你每種菜餚都吃足了,你將滿懷著有福同享的愉悅。','在豐年祭餐席上吃下每種食物各五份直到獲得有福同享。','','找豐年祭餐席女侍。','有福同享','','','',0), +(14065,'zhTW','分享豐年祭盛宴','直到你在豐年祭餐席上吃的飽飽才算是徹底的慶祝了旅人豐年祭。$B$B來唷,坐好囉,開動吧,吃吃看每樣食物!你可以自己換位置,或是請其他人傳一些他們的食物給你。$B$B當你每種菜餚都吃足了,你將滿懷著有福同享的愉悅。','在豐年祭餐席上吃下每種食物各五份直到獲得有福同享。','','找豐年祭盛宴女侍。','有福同享','','','',0), +(14483,'zhTW','微妙的氣氛(肯定不是愛)','卡片的內容實在太瘋狂了,裡面詳細記載著感染整個艾澤拉斯的計畫。你應該把這個立刻拿去給其中一個熱砂企業的調查員看!','把褪色的可愛邀請卡拿給奧格瑪的警探史內卜‧凸栓。','','到奧格瑪找警探史內卜·凸栓。','','','','',0), +(14488,'zhTW','服務到家','你到了,嗯?很好。我一直在等待幫手。此時不做更待何時,對吧? $b$b帶著這個工具組,深入那個人渣化學製藥公司,把這張傳票交給他們的領導人胡默爾。傳票就在裡面。這可以保護你不被他們施展的化學伎倆給傷害。當時機來臨時,就使用其中一個中和劑,好嗎?','把法院傳票交給影牙城堡的藥劑師胡默爾。','','把法院傳票交給影牙城堡的藥劑師胡默爾。','','','','',0), +(24536,'zhTW','事有蹊蹺','你也注意到那些傢伙了吧,對嗎?多年來,各大節慶的商業活動一向都由熱砂企業一手包辦,突然之間,這群傢伙就這麼湧入了市場。他們可不屬於熱砂企業;公司僱用我來查明事情的真相。這件事看來並不單純,不單是香水而已。\n\n帶著我拿來的儀器,然後去分析一下守衛身上散發的香水氣息。我想知道他們在香水裡頭添加了什麼東西。事情看來不太對勁。','使用『凸栓的空氣分析器』來測試6名香味濃郁的守衛四周的氣味,然後回奧格瑪找警探史內卜‧凸栓。','','到奧格瑪找警探史內卜·凸栓。','分析擦了香水的守衛','','','',0), +(24541,'zhTW','竊取香水','我就知道他們圖謀不軌!這東西含有某種思想控制的化學成分,但光憑這種小樣本,我仍無法掌握他們的把柄。我需要的是成品。\n\n你可別大搖大擺的跑去跟他們買!我不想看你付給那些下流胚子任何一分錢。不,你必須不著痕跡的從他們的源頭下手。\n\n我會把你偽裝成一個送貨員。我看到他們僱用的惡棍在大門外看守著一批囤貨。用跑的過去那邊,記得別停下來,不然他們會逮到你!他們會丟給你一個箱子。把它帶回來這裡。','當你偽裝成送貨員時,前往奧格瑪大門外的王冠化學製藥公司的囤貨區,把他們交給你的包裹帶回去給奧格瑪的警探史內卜‧凸栓。','','到奧格瑪找警探史內卜‧凸栓。','','','','',0), +(24576,'zhTW','善意的溝通...','<蘿卡聽你述說追捕史尼佛的原因,臉上浮現著厭惡的表情。>$B$B你的意思是說,這陣子我是被鍊金師下了咒?我真不敢相信我愛上那種大騙子!如果再讓我見到那個偷雞摸狗的小哥布林,我絕對會把他撕成碎片! $B$B達成任務之後,他就會前往奧格瑪城門外的東部飛艇塔!$n,無論如何,你都不能讓他就這樣搭上飛艇逃跑!$B$B趕快前往飛艇塔,不然你會錯失逮到他的機會!','到奧格瑪中央斷崖上的飛艇塔,向史尼佛‧鏽彈質詢有關供給品的事。並且帶回你從他那裡找出來的證據。','','到奧格瑪找警探史內卜·凸栓。','','','','',0), +(24597,'zhTW','給暴風城國王的禮物','你想做一個可愛符咒手鐲送給暴風城的國王嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給暴風城的安杜因‧烏瑞恩國王。','','找瓦里安·烏瑞恩國王。','','','','',0), +(24609,'zhTW','給鐵爐堡國王的禮物','你想做一個可愛符咒手鐲送給穆拉丁‧銅鬚嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給鐵爐堡的穆拉丁‧銅鬚。','','到丹莫洛找穆拉丁·銅鬚。','','','','',0), +(24610,'zhTW','給伊露恩的高階女祭司的禮物','你想做一個可愛符咒手鐲送給伊露恩的高階女祭司嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給達納蘇斯的泰蘭妲‧語風。','','到達納蘇斯的神殿花園找泰蘭妲·語風。','','','','',0), +(24611,'zhTW','給預言者的禮物','你想做一個可愛符咒手鐲送給艾克索達的預言者嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給艾克索達的預言者費倫。','','找預言者費倫。','','','','',0), +(24612,'zhTW','給大酋長的諫言者的禮物','你想做一個可愛符咒手鐲送給伊崔格嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給奧格瑪的伊崔格。','','到奧格瑪找大酋長。','','','','',0), +(24613,'zhTW','給女妖之王的禮物','你想做一個可愛符咒手鐲送給女妖之王嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給幽暗城的希瓦娜斯‧風行者女士。','','找希瓦娜斯·風行者女士。','','','','',0), +(24614,'zhTW','給牛頭大酋長的禮物','你想做一個可愛符咒手鐲送給牛頭人酋長嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給雷霆崖的貝恩‧血蹄。','','到莫高雷的金色平原找貝恩·血蹄。','','','','',0), +(24615,'zhTW','給奎爾薩拉斯攝政王的禮物','你想做一個可愛符咒手鐲送給奎爾薩拉斯攝政王嗎?我相信他會大吃一驚的。$B$B你已經有可愛符咒收集工具組了嗎?','將可愛符咒手鐲獻給銀月城的洛索瑪‧塞隆。','','到銀月城找洛索瑪·塞隆。','','','','',0), +(24629,'zhTW','完美香氛','你看起來就是一個真正的行動家,$c。想不想一起搞個雙贏的生意?$B$B王冠公司要把節日主題商品的試用品,儘可能地提供給所有的潛在客戶。只要幫我們分享這份愛心,在購買一些優質的王冠公司商品時,就可以享有折扣!$B$B朋友,你出時間,我們賺錢。意下如何?','對著10個人使用王冠香水罐。','','到任一主城找王冠公司的公共關係仲介商。','發送試用品','','','',0), +(24635,'zhTW','典雅古龍','你看起來就是個行動派,$c。要不要來打個交道?$B$B王冠公司要把節日主題商品的試用品儘可能地提供給所有的潛在客戶。只要幫我們分享這份愛心,你就可以獲得王冠公司的夢幻商品!$B$B朋友,你出時間,我們賺錢。你覺得呢?','對著10個人使用王冠古龍水罐。','','到任一主城找王冠公司的公共關係仲介商。','發送試用品','','','',0), +(24636,'zhTW','甜食總動員','我知道你在尋找機會,$n。要不要一起賺些小錢呢?$B$B王冠公司要把節日主題商品的試吃品發送給城內所有的潛在客戶。幫我們分享這份愛心的話,我們就會把這些令人驚奇的王冠公司商品分享給你!$B$B朋友,你出時間,我們賺錢。一言為定囉?','從王冠巧克力取樣器裡分送試吃品給10個人。','','到任一主城找王冠公司的公共關係仲介商。','發送試吃品','','','',0), +(24645,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取開行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:它就在銀松森林裡的安伯米爾外頭。這絕不是什麼好事情。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到銀松森林裡的安伯米爾外頭,殺掉5名王冠公司暴徒,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回奧格瑪找警探史內卜‧凸栓。','','到奧格瑪的力量谷找警探史內卜·凸栓。','摧毀化學貨車','','','',0), +(24647,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:它就在希爾斯布萊德的村落外頭—你猜對了—就是希爾斯布萊德丘陵。這絕不是什麼好事情。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到希爾斯布萊德丘陵的村莊外頭,殺掉5名王冠公司清潔工,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回奧格瑪找警探史內卜‧凸栓。','','到奧格瑪的力量谷找警探史內卜·凸栓。','摧毀化學貨車','','','',0), +(24650,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:它就在冬泉谷,永望鎮的東邊。喔,這純屬私事。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到冬泉谷的永望鎮東邊,殺掉5名王冠公司灑水員,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回奧格瑪找警探史內卜‧凸栓。','','到奧格瑪的力量谷找警探史內卜·凸栓。','摧毀化學貨車','','','',0), +(24651,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:這看起來是在泰洛卡森林,撒塔斯城的東邊。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到泰洛卡森林的撒塔斯城東邊,殺掉5名王冠公司部屬,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回奧格瑪找警探史內卜‧凸栓。','','到奧格瑪的力量谷找警探史內卜·凸栓。','摧毀化學貨車','','','',0), +(24652,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:這看起來是在水晶之歌森林的凋落樹林,曦光之鏡的西北邊。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到水晶之歌森林的凋落樹林,殺掉5名王冠公司噴灑者,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回奧格瑪找警探史內卜‧凸栓。','','到奧格瑪的力量谷找警探史內卜·凸栓。','摧毀化學貨車','','','',0), +(24655,'zhTW','事有蹊蹺','你也注意到那些傢伙了吧,對嗎?多年來,各大節慶的商業活動一向都由熱砂企業一手包辦,突然之間,這群傢伙就這麼湧入了市場。他們可不屬於熱砂企業;公司僱用我來查明事情的真相。這件事看來並不單純,不單是香水而已。\n\n帶著我拿來的儀器,然後去分析一下守衛身上散發的香水氣息。我想知道他們在香水裡頭添加了什麼東西。事情看來不太對勁。','使用『凸栓的空氣分析器』來測試6名香味濃郁的守衛四周的氣味,然後回暴風城找巡官史尼卜‧凸栓。','','到暴風城找巡官史尼卜·凸栓。','分析擦了香水的守衛','','','',0), +(24656,'zhTW','竊取香水','我就知道他們圖謀不軌!這東西含有某種思想控制的化學成分,但光憑這種小樣本,我仍無法掌握他們的把柄。我需要的是成品。\n\n你可別大搖大擺的跑去跟他們買!我不想看你付給那些下流胚子任何一分錢。不,你必須不著痕跡的從他們的源頭下手。\n\n我會把你偽裝成一個送貨員。我看到他們僱用的惡棍在大門外看守著一批囤貨。用跑的過去那邊,記得別停下來,不然他們會逮到你!他們會丟給你一個箱子。把它帶回來這裡。','當你偽裝成送貨員時,前往暴風城大門外的王冠化學製藥公司的囤貨區,把他們交給你的包裹帶回去給暴風城的巡官史尼卜‧凸栓。','','到暴風城找巡官史尼卜‧凸栓。','','','','',0), +(24657,'zhTW','善意的溝通...','<當瑪莉恩聽到你追捕史尼佛的原因,她的臉上浮現驚慌的神情。>$B$B你的意思是說,他可能對我下了藥?噢!我真不敢相信我愛上那種大騙子! $B$B一但他達成任務之後,就會前往碼頭搭上開往南海的船! $n,無論如何,你都不能讓他把這一切拋諸腦後! $B$B趕快前去暴風港,不然你會錯失逮到他的機會!','到暴風港向史尼佛‧鏽彈質詢有關供給品的事。並且帶回你從他那裡找出來的證據。','','到暴風城找巡官史尼卜·凸栓。','','','','',0), +(24659,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:它就在黑海岸的古樹之林南邊。這絕不是什麼好事情。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到黑海岸的古樹之林南邊,殺掉5名王冠公司暴徒,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回暴風城找巡官史尼卜‧凸栓。','','到暴風城的貿易區找巡官史尼卜·凸栓。','摧毀化學貨車','','','',0), +(24660,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:它就在暮色森林東南方的夜色鎮。這絕不是什麼好事情。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到暮色森林東南方的夜色鎮上廢棄的農場,殺掉5名王冠公司清潔工,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回暴風城找巡官史尼卜‧凸栓。','','到暴風城的貿易區找巡官史尼卜·凸栓。','摧毀化學貨車','','','',0), +(24662,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:它就在塵泥沼澤裡塞拉摩外頭的警戒崗哨。別這樣看著我,好嗎?這對我們而言同樣是個問題。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到塵泥沼澤的塞拉摩外頭,殺掉5名王冠公司流氓,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回暴風城找巡官史尼卜‧凸栓。','','到暴風城的貿易區找巡官史尼卜·凸栓。','摧毀化學貨車','','','',0), +(24664,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:它就在冬泉谷,永望鎮的東邊。喔,這純屬私事。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到冬泉谷的永望鎮東邊,殺掉5名王冠公司灑水員,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回暴風城找巡官史尼卜‧凸栓。','','到暴風城的貿易區找巡官史尼卜·凸栓。','摧毀化學貨車','','','',0), +(24665,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:這看起來是在泰洛卡森林,撒塔斯城的東邊。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到泰洛卡森林的撒塔斯城東邊,殺掉5名王冠公司部屬,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回暴風城找巡官史尼卜‧凸栓。','','到暴風城的貿易區找巡官史尼卜·凸栓。','摧毀化學貨車','','','',0), +(24666,'zhTW','摧毀化學製藥公司','朋友,這帳本上記載著許多地點,我要你去一一調查,並且採取行動。這事情已經拖夠久了。$b$b我要你去調查這個項目:這看起來是在水晶之歌森林裡的凋落樹林,曦光之鏡的西北邊。去那裡痛扁他們一頓吧。$b$b噢,如果你發現任何嚴重的問題,其危險的程度是必須要消滅掉的,就用這個炸彈炸掉它。','到水晶之歌森林的凋落樹林,殺掉5名王冠公司噴灑者,並且使用凸栓的克銀炸彈來摧毀一台化學貨車,然後回暴風城找巡官史尼卜‧凸栓。','','到暴風城的貿易區找巡官史尼卜·凸栓。','摧毀化學貨車','','','',0), +(24745,'zhTW','微妙的氣氛(肯定不是愛)','卡片的內容實在太瘋狂了,裡面詳細記載著感染整個艾澤拉斯的計畫。你應該馬上把這個拿去給其中一個熱砂企業的調查員看!','把褪色的可愛邀請卡拿給暴風城的巡官史尼卜‧凸栓。','','到影牙城堡找巡官史尼卜·凸栓。','','','','',0), +(24792,'zhTW','裡應外合','看來你就是揭露這整個事件幕後主腦最適合的人選了。帳本上說明他藏身在影牙城堡,那就是我要派你過去的地方。$b$b我們已經派了一個人過去,但是他不太適合親自執行這項任務。帶著你的夥伴,到那裡去跟調查員會合。','到影牙城堡找調查員菲贊‧銅釘回報。','','','','','','',0), +(24793,'zhTW','裡應外合','看來你就是揭露這整個事件幕後主腦最適合的人選了。帳本上說明他藏身在影牙城堡,那就是我要派你過去的地方。$b$b我們已經派了一個人過去,但是他不太適合親自執行這項任務。帶著你的夥伴,到那裡去跟調查員會合。','到影牙城堡找調查員菲贊‧銅釘回報。','','','','','','',0), +(24804,'zhTW','香水疑雲','這個王冠化學製藥公司不太對勁。熱砂企業正在關注他們的一舉一動,而且我們也應該注意他們一下。$b$b如果你有興趣助我們一臂之力的話,就前去暴風城一趟。巡官史尼卜‧凸栓正在那裡進行調查,他會需要手邊可以獲得的任何幫助。','到暴風城找巡官史尼卜‧凸栓回報。','','','','','','',0), +(24805,'zhTW','香水疑雲','這個王冠化學製藥公司不太對勁。熱砂企業正在關注他們的一舉一動,而且我們也應該注意他們一下。$b$b如果你有興趣助我們一臂之力的話,就前去奧格瑪一趟。警探史內卜‧凸栓正在那裡進行調查,他會需要手邊可以獲得的任何幫助。','到奧格瑪找警探史內卜‧凸栓回報。','','','','','','',0), +(24848,'zhTW','鑲金玫瑰之戀','孩子,這裡面放的不是只有香水。箱子裡面還放著一些火箭,這些火箭內建了某種化學彈頭。我無法在這裡做分析,不過我不會讓你這麼無聊的跑一趟實驗室。$B$B不用那麼麻煩,你只要去拜訪一下製作這些東西的人就好。我認得這個製造者的標誌。就是史尼佛‧鏽彈。$B$B根據可靠的消息指出,史尼佛正住在暴風城的『鑲金玫瑰』。還聽說,他時常摟著一名女子—她的名字就叫做瑪莉恩‧蘇頓。到『鑲金玫瑰』去看看她知道些什麼。','到暴風城貿易區的『鑲金玫瑰』找瑪莉恩‧蘇頓交談。','','','','','','',0), +(24849,'zhTW','重要線索','這故事最好從頭講起。$n,我對他一見鍾情。從我見到那位哥布林的那一刻開始就愛上他了。$B$B在一起度過甜蜜的一週之後,史尼佛說他收到了一大筆錢,並且要帶我去南海度個長假!你相信嗎? $B$B總而言之,他說他去銀行、拍賣場以及美髮沙龍辦事情的時候,要我先整理行李,但是他就再也沒回來過了!我開始覺得他只是一個大騙子!','到暴風城的會計室、拍賣場以及美容沙龍,尋找史尼佛‧鏽彈的身影。','','到暴風城找瑪莉恩·蘇頓。','搜索暴風城會計室','搜索暴風城拍賣場','搜索暴風城美容沙龍','',0), +(24850,'zhTW','史尼佛的心上人','孩子,這可不只是關於香水。箱子裡面還放著一些火箭,火箭內建了某種化學彈頭。我無法在這裡做分析,不過我會讓你省去跑一趟實驗室的麻煩。$B$B你只要去拜訪一下製作這些東西的人就好。我認得這個製造者的標誌。就是史尼佛‧鏽彈。$B$B我聽說史尼佛住在奧格瑪。還聽說他有個女朋友,是個叫做蘿卡的獸人女子。她會和他在暗巷區中的『高特雷的旅行裝備』集合,然後一起逃離這裡。','到奧格瑪暗巷區的『高特雷的旅行裝備』找蘿卡交談。','','','','','','',0), +(24851,'zhTW','重要線索','這故事最好從頭講起。$n,我對他一見鍾情。從我見到那位哥布林的那一刻開始就愛上他了。$B$B在一起度過甜蜜的一週之後,史尼佛說他收到了一大筆錢,並且要帶我去南海度個長假!你相信嗎? $B$B總而言之,他說他去銀行、拍賣場以及美髮沙龍辦事情的時候,要我先整理行李,但是他就再也沒回來過了!我開始覺得他只是一個大騙子!','到奧格瑪力量谷的銀行、拍賣場以及美容沙龍,尋找史尼佛‧鏽彈的身影。','','到奧格瑪的高特雷的旅行裝備找蘿卡。','搜索奧格瑪銀行','搜索奧格瑪拍賣場','搜索奧格瑪美容沙龍','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_00' WHERE sql_rev = '1646922359631359324'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_01.sql b/data/sql/updates/db_world/2022_03_18_01.sql new file mode 100644 index 000000000..cb250cb9d --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_01.sql @@ -0,0 +1,717 @@ +-- DB update 2022_03_18_00 -> 2022_03_18_01 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_00'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_00 2022_03_18_01 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647383101536190010'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647383101536190010'); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(12552,'zhTW','殺死死靈魔導師','當食人妖擊落科爾拉瑪斯的時候,它墜毀在我們的東南方。不幸的是,墜落的撞擊並未殺死裡面所有的天譴軍。$B$B現在他們在復活我們死去的人馬,然後用來對付我們!$B$B我們不能允許這樣的事繼續下去。你負責去屠殺他們的死靈魔導師!你瞭解任務了嗎?','德拉克索璀的月裂中士要你消滅8個哈薩爾死靈魔導師。','','到祖爾德拉克的德拉克索璀找月裂中士。','','','','',0), +(12553,'zhTW','剝奪者的絲囊','為什麼我每次都要應付這種困難的工作?$B$B科爾拉瑪斯的天譴軍瘟疫噴灑器靠的太近了,這很危險。你不會想知道要是他們往這裡過來會發生什麼事的!$B$B我有個點子,也許可以把他們都打下來,但是我們得先去弄些材料...從他們那邊的生物身上弄來。$B$B哈薩爾剝奪者可以吐出非常堅韌的網子。我在想,我們應該可以好好利用這個東西。幫我拿一些完整的絲囊來。','德拉克索璀的專家榫輪要你收集5個完整的剝奪者絲囊。','','到祖爾德拉克的德拉克索璀找專家榫輪。','','','','',0), +(12554,'zhTW','『墮落者』瑪拉斯','$n,回來下面!$B$B你會找到科爾拉瑪斯的領導者,『墮落者』瑪拉斯,得意洋洋的站在墜毀的亡域頂端。$B$B殺了他,提他的腦袋來見我!','德拉克索璀的月裂中士強烈要求你帶著墮落者的頭顱回去找他。','','到祖爾德拉克的德拉克索璀找月裂中士。','','','','',0), +(12615,'zhTW','辛托加之祝福','妖術師烏邦茍或許跟你提過向祖爾德拉克的諸神奉獻的事情。辛阿布瓦並不是唯一被德拉克瑞所遺忘的神祇。$B$B我們庇護於辛托加,繁榮之母的保護之下。就像辛阿布瓦一樣,如果你將德拉克瑞的祭品獻給她,她一定會將祝福賜予你。','巫醫庫弗要你在辛托加的雕像前獻上10份德拉克瑞祭品。','','到祖爾德拉克的辛托加,把德拉克瑞祭品交給辛托加。','','','','',0), +(12618,'zhTW','辛托加的祝福','','','','到祖爾德拉克找辛托加。','','','','',0), +(12622,'zhTW','金阿萊的領袖','你跟艾胡奈想到的是同一件事嗎,老兄?$B$B有一些德拉克瑞食人妖聚集在西南方的金阿萊之池。我們得引出他們的領袖,而艾胡奈剛好知道你該怎麼做!$B$B去那邊殺死那些食人妖。等你殺得夠多了,他們的領袖就會出現。$B$B等他們出現在圖騰旁邊的時候,老兄,你一定得要把庫吐貝沙,加瓦尼爾還有『瘋子』丘洛的寶藏都給弄到手。','辛托加的割顱者艾胡奈要你拿到庫吐貝沙的寶藏,加瓦尼爾的寶藏以及『瘋子』丘洛的寶藏。','','到祖爾德拉克的辛托加找割顱者艾胡奈。','','','','',0), +(12623,'zhTW','去找巫醫','我們贊達拉食人妖需要你的幫忙,$n。我們必須阻止德拉克瑞食人妖對他們的神明所做的事!$B$B東北方,通往祖爾德拉克下一層的階梯上方,就是辛托加。那是另一個神像的居所,也是我那些試圖防衛該處的同胞避難所。$B$B我想要你到那裡去和巫醫庫弗談談。不過小心,那個地方一直處於德拉克瑞的攻擊之中。','到辛托加與巫醫庫弗談談。','','','','','','',0), +(12627,'zhTW','突破金阿萊','我一直試圖與諸神溝通。然而,金阿萊之池的咒醫在舉行的儀式一直干擾我的嘗試。$B$B打破他們的阻礙是必要的。如果你要往西南方進入池子的區域,我很確定你一定會碰上他們的魔法大鍋。$B$B擾亂每一個大鍋,破壞他們阻擋我的儀式。','辛托加的巫醫庫弗要你擾亂藍色大鍋,綠色大鍋,紫色大鍋和紅色大鍋。','','到祖爾德拉克的辛托加找巫醫庫弗。','幹擾藍色大鍋','幹擾綠色大鍋','幹擾紫色大鍋','幹擾紅色大鍋',0), +(12628,'zhTW','與哈寇亞談話','神靈已經說了,$n。我們現在知道你必須做些什麼。$B$B你現在得去東南方的哈寇亞祭壇然後與豹女神交談。','到哈寇亞祭壇與哈寇亞談話。','','','','','','',0), +(12632,'zhTW','但首先是我的後裔','我是最後一個還沒被鎮壓的神,所以我們必須設法解救其他神。由於被鎮壓者的魔法所束縛,我沒辦法看出祂們的命運。$B$B但首先,我要請你幫我一個忙。德拉克瑞食人妖用我的魔法來對付我。他們將我的後裔轉變成了畸形的怪物。$B$B帶著我的鬍鬚,殺死我受折磨的子嗣,然後用它的魔法將他們從惡夢中釋放,重新復活。','哈寇亞要你在她子嗣的屍體上使用她的鬍鬚來釋放他們,並且將他們復活。當你完成之後回到哈寇亞祭壇找她。','','到祖爾德拉克的哈寇亞祭壇找哈寇亞。','復活被詛咒的哈寇亞後裔','','','',0), +(12635,'zhTW','雪豹女神的聖物','我聽說你要去探視哈寇亞的狀況。祝你好運。$B$B我在想如果你到了祭壇周邊,願不願意幫我回收他們的聖物?我不需要太多個,而且那就在東南方不遠處而已。$B$B你怎麼說?','辛托加的撰史者托基尼要你回收10個哈寇亞聖物。','','到祖爾德拉克的辛托加找撰史者托基尼。','','','','',0), +(12639,'zhTW','冰凍土元素','我們從附近抓到了這些元素,所以我現在有很多的防衛者了。但是,要讓它們強到可以抵擋我們的敵人需要很多能量。$B$B西北方德拉克瑪布瓦的冰凍土元素身上有我可以用來維持我們防線的東西。','辛托加的元素馴伏者達茍答要你收集7個冰凍土元素精華。','','到祖爾德拉克的辛托加找元素馴伏者達茍答。','','','','',0), +(12640,'zhTW','封閉裂隙','如果達茍答還沒講的話,我想她要派你去西北方的德拉克瑪布瓦幫她的防衛者找更多東西。$B$B當你在那邊的時候,艾胡奈想要你摧毀那些源源不絕冒出元素的裂隙。我們才不想要被他們攻擊!$B$B但要小心,在你嘗試封閉裂隙的時候會有更多冰凍土元素出現。','辛托加的割顱者艾胡奈要你封閉7個元素裂隙。','','到祖爾德拉克的辛托加找割顱者艾胡奈。','封閉元素裂隙','','','',0), +(12642,'zhTW','魯諾克之靈','我的感覺告訴我魯諾克沒有多少時間了。$B$B我知道那隻寒地熊神的靈魂已經跟他虛弱的身體分離。你必須和他的靈魂溝通。$B$B它的祭壇就在西北邊德拉克瑪布瓦的後方。','在魯諾克祭壇與魯諾克之靈交談。','','','','','','',0), +(12646,'zhTW','我的預言者,我的敵人','我的預言者太快吸收了我太多力量,也因此害死了他自己。你可以在南邊德拉克瑪布瓦的水坑看出這件事的後果。$B$B我的前牧師已經將他給復活起來,以期完成這項工作。他們正在將我的力量重新引導回他身上,不久之後他就會重新甦醒。$B$B你必須在事情太遲之前解決他,然後帶著我的魔精回來。','魯諾克祭壇的魯諾克之靈要你取得他的寒地熊神魔精。','','到祖爾德拉克的魯諾克祭壇找魯諾克之靈。','','','','',0), +(12647,'zhTW','苦難的盡頭','我的身體已經死去多時了,$n。他們選出新的預言者來結束這一切只是時間上的問題。$B$B我要把我最後的力量灌注在你身上。在祭壇建築裡,那個折磨者的身上有一種薰香,可以喚醒我的身體,讓你能夠傷害它。$B$B使用薰香,為我結束我的苦難吧。$B$B如果我反抗的話,我先向你道歉。即使是我,求生的意志也是很強烈的。','魯諾克之靈要你用折磨者薰香喚醒他的身體。然後你要用他的靈魂灌注給你的力量殺死魯諾克。$B$B如果你失去了魯諾克的魔精光環,你可以回去找魯諾克之靈重新獲取它。','','到祖爾德拉克的魯諾克祭壇找魯諾克之靈。','','','','',0), +(12650,'zhTW','掠奪他們自己的神器','附近還有一個儲藏神器的祭壇。$B$B聽說在西北方,越過德拉克瑪布瓦的破碎凍原後方,魯諾克祭壇的德拉克瑞食人妖已經掠奪了他們自己的聖地。$B$B$C,如果你能夠從他們不知感激的手中搶救那些神器的話我會很感激你的。','辛托加的撰史者托基尼要你回收7個魯諾克神器。','','到祖爾德拉克的辛托加找撰史者托基尼。','','','','',0), +(12653,'zhTW','返回哈寇亞處','現在你該回去找豹女神了。我覺得她對你另有打算。$B$B告訴她不論發生什麼事,我們都是永恆的。','到哈寇亞祭壇與哈寇亞交談。','','','','','','',0), +(12655,'zhTW','辛茹克的祝福','祖爾德拉克還有一位被忽視的神明。$B$B辛茹克的雕像就在正北方。被稱做「睿智者」的辛茹克也很珍惜祂的領域。祂讓守衛嚴厲的處罰那些不夠聰明,沒繞過守衛的人。$B$B避開守衛,然後把祭品獻給辛茹克,以獲取祂的祝福。','巫醫庫弗要你對辛茹克的雕像獻上10份德拉克瑞祭品。','','到祖爾德拉克的辛茹克,把德拉克瑞祭品交給辛茹克。','','','','',0), +(12656,'zhTW','辛茹克的祝福','','','','到祖爾德拉克找辛茹克。','','','','',0), +(12659,'zhTW','割頭皮!','我想差不多是割點頭皮的時間了,老兄!$B$B東北邊希伯德拉卡的食人妖應該很不賴。誰叫他們要養了那些花俏的蝙蝠,又攻擊我們呢!$B$B艾胡奈甚至還借給你他的刀子讓你好好完成這項工作呢。','辛托加的割顱者艾胡奈要你使用艾胡奈小刀去割10個希伯德拉卡食人妖的頭皮。$B$B割顱者提醒你記得要先拾取他們身上的物品。','','到祖爾德拉克的辛托加找割顱者艾胡奈。','剝取希伯德拉卡食人妖頭皮','','','',0), +(12662,'zhTW','宰掉希伯金','<達茍答看著艾胡奈,然後嘆了口氣。>$B$B你真的想要對付希伯德拉卡?光是收集頭皮是沒用的。你得解決掉他們的首領,希伯金。$B$B問題是,他待在他們的蝙蝠養殖場上面指揮他的部隊。$B$B去敲響他的鼓,我保證他會飛下來。那就是你動手殺他的好時機。$B$B你可以帶著我們從他的獵頭者那裡得到的網子。當他降落的時候用網子困住他的蝙蝠。這樣你就不用同時面對兩個敵人。','辛托加的元素馴伏者達茍答要你殺死希伯金。','','到祖爾德拉克的辛托加找元素馴伏者達茍答。','','','','',0), +(12665,'zhTW','我感應到不安','風蛇女神奎茲倫出了點問題。我沒辦法感應出確切的狀況,但我知道她的祭壇被強大的生物給蹂躪了。$B$B我要派你搭乘我其中一個被你拯救的孩子過去那裡。你們兩個將會迅速而隱匿的移動,查出奎茲倫的狀況。$B$B我的孩子將會確保你平安回到我這裡來。睜大眼睛注意狀況吧。$B$B當你準備好的時候就提出要求,我會為你召喚我的小貓。','哈寇亞要你查清楚奎茲倫身上發生了什麼事。和她交談以騎上她的孩子,潛入奎茲倫的祭壇。$B$B當你完成任務之後回到哈寇亞祭壇找她。','瞭解奎絲魯恩的命運。','到祖爾德拉克的哈寇亞祭壇找哈寇亞。','','','','',0), +(12666,'zhTW','進入幽界的準備','奎茲倫可能已經死了,但我可以感覺到他的靈魂還在幽界的祭壇處徘徊。我們得想個辦法把你送過去她那裡。$B$B幸運的是, 我手邊剛好有一批不再被主人需要的神聖飾物。我的鎮壓者和爪牙應該都還戴著它們。$B$B把那些飾物帶來給我,我會抽取它們的能量讓你跨入奎茲倫的幽界夢魘中。','哈寇亞要你收集8個神聖飾物。收集完成之後送去哈寇亞祭壇給她。','','到祖爾德拉克的哈寇亞祭壇找哈寇亞。','','','','',0), +(12667,'zhTW','尋找風蛇女神','你做了準備,但我不確定你是否有準備好面對接下來要發生的事。$B$B當你回到奎茲倫祭壇的時候,你將會進入死者的世界。從我感覺到的來看,它不會令你太愉快的。$B$B試著不要被你在那裡見的事物分散了注意力。就直線前往祭壇建築,然後找出奎茲倫的靈魂。','到奎茲倫祭壇找出奎茲倫之靈。','','','','','','',0), +(12668,'zhTW','復仇的基礎','我為我最愛的高階祭司準備了特別的計畫。不過,首先你得透過為我的復仇奠基來證明你自己。$B$B你還想活,對吧?$B$B就像你看到的一樣,我的信徒在這裡過得很愜意,但是該送他們回去最終的歸宿了。$B$B如果你願意的話就幫我這個小忙,$n。引誘他們靠近我的靈魂之泉,然後了結他們的性命。$b$b他們嚐起來如此美味,他們的獻祭再也不會落空了。我向你保證。','奎茲倫之靈要你在她的靈魂之泉附近毀滅12個食人妖,不管是奎茲倫崇拜者或蛇觸狂戰士都可以。$B$B你只能在完成這任務之後才回去她的祭壇找她。','','到灰白之丘的巨礫之丘找奎茲倫的靈魂。','在靈魂聖水器附近殺死食人妖','','','',0), +(12672,'zhTW','準備舞台','我給你個繼續存活的機會。$B$B有許多驅動詛咒的能量碎片散落在祭壇附近的地面。我想要你去替我收集那些碎片。沒有多到足夠撼動詛咒的程度,但夠我用來對我的預言者復仇了。$B$B去吧,小蟲。在我改變讓你活著的決定之前快完成我的要求。','奎茲倫的靈魂要你收集10個幽界力量碎片。當你完成之後回到奎茲倫祭壇找她,','','到灰白之丘的巨礫之丘找奎茲倫的靈魂。','','','','',0), +(12674,'zhTW','地獄也會憤怒','現在你該懲罰我的三個高階祭司了:姆弗努、托托、還有哈文尼。你可以在祭壇周邊找到他們。$B$B帶著這根妖術手杖。我用我的憤怒強化了手杖。我確定它的效果一定夠強。$B$B只要使用它,然後接著毀掉他們就行了。手杖上的妖術會處理好其他事情。$B$B<奎茲倫露齒而笑。>$B$B成功了我就放你走。失敗了就死。','奎茲倫祭壇的奎茲倫之靈要你對高階祭司姆弗努、高階祭司托托、還有高階祭司哈文尼使用奎茲倫的妖術手杖。一旦使用完手杖,就殺了他們。','','到灰白之丘的巨礫之丘找奎茲倫的靈魂。','高階祭司姆弗努死於妖術','高階祭司托托死於妖術','高階祭司哈文尼死於妖術','',0), +(12675,'zhTW','最後一件事','在我們實行對預言者的終極復仇之前只剩下最後一件事情要做。你所收集的力量碎片必須灌注一個活神的部分靈魂。你必須向哈寇亞求取她的靈魂。$B$B一旦你成功了,你不要回到幽世來,返回我物質世界的祭壇。我的子嗣與守護者將不會再攻擊你,你可以輕鬆地接近我的預言者。','將幽界力量碎片堆送去給哈寇亞,請求她給你部分的靈魂。你仍會在哈寇亞祭壇找到她。','','到祖爾德拉克的哈寇亞祭壇找哈寇亞。','','','','',0), +(12684,'zhTW','逝神之血','長毛象之神瑪姆托司選擇自我毀滅,同時也將神殿毀了大半,不讓祂的食人妖取得祂的力量。$B$B如果我要犧牲我部分的靈魂,我就需要一些用來支撐自己的東西。$B$B瑪姆托司在東北方留下了一個大坑洞,就在奎茲倫祭壇的北邊。在坑洞裡,他的血液仍舊活著。$B$B把它帶來給我。','哈寇亞要你去收集7個瑪姆托司之血。將它們帶回去哈寇亞祭壇給她。','','到祖爾德拉克的哈寇亞祭壇找哈寇亞。','','','','',0), +(12685,'zhTW','自作自受','這就是事情的結果...復仇。$B$B<哈寇亞嘆了一口氣。>$B$B帶著這個儀式工具包,然後在祭壇上奎茲倫的屍體附近啟動它。如果一切順利,她的靈魂會被拉進物質界,讓她能夠從預言者身上取回力量。$B$B剩下的就靠你了,$n。你必須在預言者枯竭的狀態下殺死他。','殺死枯竭的奎茲倫預言者然後通知辛托加的巫醫庫弗。','','到祖爾德拉克的辛托加找巫醫庫弗。','','','','',0), +(12707,'zhTW','毛茸茸的正義','艾胡奈聽說你要去瑪姆托司爆坑啊,老兄。瑪姆托司之子被激怒了,並且高聲要求正義!$B$B沿著東北的小路走上階梯,前往祖爾德拉克的下一層。你在右手邊可以找到瑪姆托司祭壇的殘留部分。$B$B當你到了那裡以後,把這個瑪姆托司勳章亮給一頭暴怒的長毛象看。牠會冷靜下來,讓你跳上牠的背。$B$B騎上牠,把所有你找得到的瑪姆托司信徒都給踩爛!','辛托加的割顱者艾胡奈要你使用瑪姆托司勳章安撫一頭暴怒的長毛象,然後騎上牠將12個瑪姆托司信徒踐踏至死。','','到祖爾德拉克的辛托加找割顱者艾胡奈。','踏死瑪姆托司信徒','','','',0), +(12708,'zhTW','附魔提基戰士','我知道你要去東北邊的佐爾馬茲堡砦,$c。當你到那裡的時候,我需要你對付督軍的特別護衛。$B$B他們叫做附魔提基戰士,是非常嚴重的威脅。如果德拉克瑞食人妖大量生產他們,我們很快就會被擊垮了。$B$B讓咱們告訴他們這種東西不值得生產,怎麼樣?','辛托加的元素馴伏者達茍答要你消滅12個附魔提基戰士。','','到祖爾德拉克的辛托加找元素馴伏者達茍答。','消滅附魔提基戰士','','','',0), +(12709,'zhTW','中了妖術的儲藏箱','請見諒,$n。我聽說你可能要前往東北方的佐爾馬茲堡砦。這樣的旅程對我們來說,是替收集德拉克瑞貨物做個收尾的好機會。$B$B我透過管道得知德拉克瑞督軍的異常偏執。他對堡砦裡所有的儲藏箱都施展了強大的妖術。謠傳他的提基戰士身上有解藥,但誰知道呢?$B$B如果你有空收集這些貨品的話,我會非常感激你的。','辛托加的撰史者托基尼要你收集12個佐爾馬茲堡砦貯藏箱。','','到祖爾德拉克的辛托加找撰史者托基尼。','','','','',0), +(12712,'zhTW','督軍佐爾馬茲的鑰匙','$n,我們需要一把鑰匙來解開犀牛神阿卡利的縛鎖。他們正準備要殺死祂。$B$B德拉克瑞督軍,佐爾馬茲持有那把鑰匙。聽說了你的事蹟之後,他把自己和家人關在東北方階梯上的要塞裡。$B$B督軍很強,而你將會需要幫助。如果你能夠結合提基,也就是他家族成員的劍與符咒,你就能夠召喚你所需要的助力,到他的家門前去挑戰他。','辛托加的哈寇亞要你去取得督軍佐爾馬茲的鑰匙。','','到祖爾德拉克的辛托加找哈寇亞。','','','','',0), +(12721,'zhTW','暴怒','$n,沒有時間了。你一定得拿這把鑰匙去解開阿卡利的縛鎖。$B$B他被固定在祖爾德拉克的首都,剛德拉克前方的庭院裡。阿卡利的鎖鍊被四個錨點所固定。你必須將他們一一解開,釋放犀牛神。$B$B剛德拉克裡面滿是寒冰食人妖。然而,我相信如果你夠小心的話,應該能夠偷溜進去,不會遇到太多危險。$B$B一旦你成功了,請通知巫醫。','辛托加的哈寇亞要你釋放阿卡利,然後到辛托加通知巫醫庫弗。','解除阿卡裡身上的鎖鏈。','到祖爾德拉克的辛托加找巫醫庫弗。','','','','',0), +(12729,'zhTW','諸神已然開口','諸神已然開口,而我們必須回應祂們的睿智。到北邊的辛茹克去殺死那裡的守護者,直到得到一顆無瑕疵的心臟。到東南邊的奎茲倫祭壇去瓦解祭壇守望者,直到取得他們的陣風精華。$B$B把兩者都送去給哈寇亞,她將會把它們結合成一樣物品,能夠強迫死去阿卡利的預言者現身。','將無瑕疵的守護者之心和守望者的陣風精華送去給辛托加的哈寇亞。','','到祖爾德拉克的辛托加找哈寇亞。','','','','',0), +(12730,'zhTW','佐爾希伯的召集','你必須把這個召集裝置,或者說召喚裝置,拿去剛德拉克南方的佐爾希伯。$B$B你會在裡面找到一個法陣。使用召集裝置強迫阿卡利得預言者現身。$B$B我心與你同在,$n。我們共同經歷了這麼多事,你不但盡力拯救了我的性命,還幫助了其他被德拉克瑞食人妖毀滅的神。$B$B但這次,我擔心我們也許要在彼界才能再會了。','辛托加的哈寇亞要你殺死阿卡利預言者。','','到祖爾德拉克的辛托加找哈寇亞。','','','','',0), +(12932,'zhTW','苦痛露天競技場:伊格卓斯!','我跟你說,老兄,這個地方是納葛蘭平原的翻版。這些食人妖比巨魔還要下流,但是我跟你講,哪裡有錢賺,我就往哪裡跑!所以啦,歡迎來到祖爾德拉克,夥伴。$B$B你新來乍到,就讓我直接幫你講解。我是比賽發起人,我身旁的是我的保鏢烏丁。你則是場上的娛樂。當你想要作戰的時候就告訴我,我就會準備進行比賽。$B$B如果你準備好了,而且帶了一隊朋友,我們就可以開始了!怎麼樣?','進入苦痛露天競技場並且擊敗伊格卓斯!然後去找『食人妖僕從』烏丁領賞。','擊敗伊戈達斯','到祖爾德拉克的苦痛露天競技場找『食人妖僕從』烏丁。','','','','',0), +(12933,'zhTW','苦痛露天競技場:猛瑪象人!','下一場比賽可好玩了,夥伴!顯然有些從龍骨荒野來的猛瑪象人也想參一腳。你以前有跟這些傢伙打過嗎?我只能建議你瞄高一點啊!$B$B告訴我一聲,咱們就開始搞派對吧!','進入苦痛露天競技場並且擊敗臭鬚!然後去找『食人妖僕從』烏丁領賞。','擊敗惡臭之須','到祖爾德拉克的苦痛露天競技場找『食人妖僕從』烏丁。','','','','',0), +(12934,'zhTW','苦痛露天競技場:超越次元!','我不想對你說謊,朋友。這次也許你贏不了。下一個對手是從元素界來的!我根本不知道競技場上到底會出現什麼咧!$B$B如果你覺得準備好了,就進去送他們下地獄吧!','進入苦痛露天競技場並且擊敗一位元素領主!然後去找『食人妖僕從』烏丁領賞。','擊敗元素領主','到祖爾德拉克的苦痛露天競技場找『食人妖僕從』烏丁。','','','','',0), +(12935,'zhTW','苦痛露天競技場:巨牙世界末日!','下一場的戰士是從一個黑暗的地方來的,小子。只有在另一邊才看的到的那種黑暗。他非常的飢餓,而且願意不擇手段取勝。你可要小心點!我聽說他把跟雪人摔角當作運動在做!$B$B你準備好了我們就開始。','進入苦痛露天競技場並且擊敗歐令諾寇‧碎牙者!然後去找『食人妖僕從』烏丁領賞。','擊敗奧裡努克·碎牙','到祖爾德拉克的苦痛露天競技場找『食人妖僕從』烏丁。','','','','',0), +(12936,'zhTW','苦痛露天競技場:『血怒者』科爾拉克!','你不會相信的,夥伴。你的下一場戰鬥是對上『血怒者』科爾拉克!看來德拉克瑞食人妖決定放手一搏了!讓我告訴你,夥伴,他可是有喝過那些動物神的汁液。他很強,而且完全準備好要把你給抬去種了。$B$B你準備好了嗎?','進入苦痛露天競技場並且擊敗『血怒者』科爾拉克!然後去找『食人妖僕從』烏丁領賞。','擊敗血怒者科爾拉克','到祖爾德拉克的苦痛露天競技場找『食人妖僕從』烏丁。','','','','',0), +(12948,'zhTW','苦痛勇士','這是最後了,我的朋友!你的最後一個對手將會是你一生中最大的挑戰。他是來自寒冰皇冠的維酷鬥士,為了尋求血腥而來!擊敗他,你就會被加冕成為苦痛露天競技場的勇士!這場打鬥將會讓我們兩個都賺大錢!$B$B準備好了跟我說一聲,咱們就開始吧。','進入苦痛露天競技場並且擊敗『屠夫』伏雷多弗!然後去找『食人妖僕從』烏丁領賞。','擊敗屠夫烏拉多弗','到祖爾德拉克的苦痛露天競技場找『食人妖僕從』烏丁。','','','','',0), +(12954,'zhTW','苦痛露天競技場:伊格卓斯!','我還在想你什麼時候才會出現呢,$n!過去的血之競技場勇士會吸引超多人來看比賽!我們會賺大錢的,老兄!好多好多錢!$B$B總而言之,這個垃圾場就是祖爾德拉克。這些冰霜食人妖好像都把它當廁所在用。我不知道,不過你問我的話我會說這整個地方都過時啦!但是誰管它呢,對吧?我們是來賺錢的!$B$B你知道規矩,$n。你準備好了就跟我說一聲,咱們就開始表演啦!','進入苦痛露天競技場並且擊敗伊格卓斯!然後去找『食人妖僕從』烏丁領賞。','擊敗伊戈達斯','到祖爾德拉克的苦痛露天競技場找『食人妖僕從』烏丁。','','','','',0), +(12974,'zhTW','勇士的呼喚!','呼,下面那根本不叫打鬥。只不過是幾個傢伙圍著旗子在跳舞罷了。$B$B你想要來點真正的打鬥嗎?因為我手上可是有最熱門的票。$B$B聽過葛爾薩克和烏丁嗎?在外域經營血之競技場的那個哥布林與食人妖?他們現在來到了北裂境,而且他們在祖爾德拉克開了全新的鬥技俱樂部。如果你有興趣的話,就去水晶之歌東邊的祖爾德拉克吧。他們在中央的大競技場裡面。告訴他們是維克斯派你去的!','到祖爾德拉克的苦痛露天競技場找葛爾薩克。','','','','','','',0), +(13097,'zhTW','未完成的任務','雖然阿卡利的預言者再也不會侵擾這個世界了,但是我們還有事情得做。$b$b大半部的阿卡利之血都被另外一個傢伙吸收強化了,他才是真正的危險人物。$b$b快,$n,前往剛德拉克的北邊,去找杜布拉金的托爾瑪談談。他會提供你更進一步的資訊。','哈寇亞要你與杜布拉金的托爾瑪交談。','','','','','','',0), +(13099,'zhTW','探班','有些可怕的聲音從剛德拉克裡頭傳出來,老兄。而且還越來越大聲,越來越頻繁。$b$b我的老學生待在剛德拉克西邊的哨站記錄事情。也許你能夠幫我去探個班?','托基尼要你與杜布拉金的撰史者巴琪妮談談。','','','','','','',0), +(13549,'zhTW','驗明正身','除了德拉克瑞神器之外,我也打算要帶一些祖爾德拉克的野生生物回去贊達拉島。我這裡有公的霜豹和冰掌熊,但是我還需要雌豹跟雌熊!$B$B可惜我的陷捕者在一場意外中喪生了。也許你願意替補他的位置?$B$B不知道你能不能好心地用這個吹箭把那些豹和熊弄睡著,然後拉起牠們的尾巴檢查,替我帶回來一些雌獸。你可以在魯諾克祭壇、奎茲倫祭壇和哈寇亞祭壇的附近找到這些動物。','辛托加的撰史者托基尼要你對霜豹和冰掌熊使用托基尼的吹箭。把兩種雌獸各3隻帶回來給他。','','到祖爾德拉克的辛托加找撰史者托基尼。','捕獲雌霜豹','捕獲雌冰掌熊','','',0), +(13556,'zhTW','杜布拉金的蛋','你好嗎,老兄?能不能幫我個忙啊?巴琪妮需要用一堆迅猛龍蛋為杜布拉金進行獻祭儀式。$B$B你以為我們為什麼沒有被德拉克瑞食人妖宰掉啊?!那是因為杜布拉金在幫助我們!$B$B我們需要你從外頭剛德拉克的樹邊收集那些迅猛龍蛋。有時候迅猛龍也會把蛋帶在身上孵。','杜布拉金的哈瓦那要你收集12個剛德拉克迅猛龍蛋。','','到祖爾德拉克的杜布拉金找哈瓦那。','','','','',0), +(12501,'zhTW','食人妖巡邏','拔出武器,$r。該是出去巡邏的時候了!$b$b我負責指揮四座崗哨,維持住這些崗哨對我們的成功非常重要。我命令你去探視這四座崗哨並提供你的協助。$b$b你可以從東南邊的布蘭登上尉那開始。當你完成工作後,他會指引你前往下一座崗哨。$b$b幫助完我的手下之後,回來向我報告。記住,你越快回來,獎賞就越多 - 所以動作快!$b$b解散!','銀白看臺的指揮官康茲要你造訪四座銀白十字軍崗哨,遵從該處上尉的命令,完成後回報給他。布蘭登上尉和魯伯特上尉駐守在德拉克索璀,格隆戴爾上尉駐守在德拉克亞苟,而鍊金師芬克斯坦駐守在希伯伐洛克。','','到祖爾德拉克的銀白看臺找指揮官康茲。','布蘭登上尉的工作','魯伯特上尉的工作','格隆戴爾上尉的工作','煉金師芬克斯坦的工作',0), +(12503,'zhTW','守護看臺','雖然我們在祖爾德拉克的底下第三層有重大的勝利,但我們仍得面對天譴軍團的突襲軍。這就是這片冰天雪地的地獄會發生的事情!$B$B攻擊從未停止,然而我的手下卻需要休息。如果你願意的話,我們可以借助你的力量來支援他們。$B$B你可以在下方的庭園中發現無盡的戰鬥。用你全部的熱情殺死那裡的天譴軍團,$c。','指揮官法爾斯戴夫派你去銀白看臺庭院區內殺掉10名天譴軍團成員。','','到祖爾德拉克的銀白看臺找指揮官法爾斯戴夫。','摧毀銀白看臺的天譴軍','','','',0), +(12504,'zhTW','銀白十字軍,我們要離開了!','<中士迅速的閱讀你交給他的命令,臉皺了起來。>$B$B瞧,$g小夥子:姑娘;,我很樂意馬上離開,不過,看看外面。我的手下全都在戰鬥中。$B$B告訴你,你都已經到這麼遠的地方來了,你可以幫我個小小的忙嗎?到外面去集合我的士兵好嗎?$B$B告訴他們,中士下令要他們馬上回來報到。如果有必要,請幫幫他們。','司瑟拉圖斯祭壇的疊錘中士要你去跟10名他手下的銀白士兵談談,並要求他們向他回報。','','到祖爾德拉克的司瑟拉圖斯祭壇找疊錘中士。','告知銀白士兵向中士回報','','','',0), +(12505,'zhTW','給疊錘中士的新指令','$C,你是來提供幫助的,對嗎?我有新的指令要給目前部署在北部德拉克瑞祭壇的軍隊。$B$B你不會找不到的。只要順著大道路走。疊錘中士應該不會很難找。','中尉康茲要你將新的部署命令送到司瑟拉圖斯祭壇交給疊錘中士。','','到祖爾德拉克的嚴寒止境找疊錘中士。','','','','',0), +(12506,'zhTW','司瑟拉圖斯祭壇的麻煩','蛇神的祭壇有麻煩了。$B$B天譴軍團的出現虛弱了這片大地,$r。現在輪到了荒野神靈。$B$B我們知道德拉克瑞會利用這個機會對神祇做出邪惡的事。$B$B我需要你充當我的耳目。司瑟拉圖斯祭壇就在北邊大道的盡頭。偷偷潛入後方,看一眼主祭壇建築內部。$B$B無論如何,絕對要避開預言者!','銀白看臺的妖術師烏邦茍要你去調查司瑟拉圖斯祭壇的主祭壇建築。','調查西萊圖斯祭壇的主建築。','到祖爾德拉克的銀白看臺找妖術師烏邦茍。','','','','',0), +(12507,'zhTW','奇怪的魔精','這瓶奇怪的魔精可能就是發生在這裡所有事的關鍵。$B$B妖術師烏邦茍,這位贊達拉食人妖也許會想要看一看這東西,他就在銀白看臺。','將奇怪的魔精帶給銀白看臺的妖術師烏邦茍。','','到祖爾德拉克的亡者原野找妖術師烏邦茍。','','','','',0), +(12508,'zhTW','完成任務','我忍不住偷聽了你對中士說的事情。那並無法改變我們在這仍有工作待完成的事實。$B$B當你到了那裡,可以幫我們終結掉那些司瑟拉圖斯跟隨者的悲慘命運嗎?','司瑟拉圖斯祭壇的瑪嘉下士要你去殺了總計10名的司瑟拉圖斯勇士,司瑟拉圖斯祭師或德拉克瑞控蛇者 。','','到祖爾德拉克的司瑟拉圖斯祭壇找瑪嘉下士。','殺死司瑟拉圖斯追隨者','','','',0), +(12510,'zhTW','珍貴的元素液體','<妖術師檢驗了魔精瓶。>$B$B我有個對付司瑟拉圖斯預言者的點子。不過首先,我們會需要準備一些東西。$B$B德拉克索璀原野就在正南方。因為天譴軍團橫行的壓力和諸神殞落的影響,世界之間的壁壘變的脆弱,而元素不斷湧入。$B$B我們需要從元素領主身上取得珍貴的元素液體。如果你把三個那裡的元素拴繩結合在一起,就可以召喚一位元素的領主。','銀白看臺的妖術師烏邦茍要你取得3個珍貴的元素液體。','','到祖爾德拉克的銀白看臺找妖術師烏邦茍。','','','','',0), +(12512,'zhTW','一個都不能少','啊,太棒了。他們派人來了。$b$b聽好,$r,我們需要幫忙。我們的軍隊節節敗退,德拉克索璀已經落入了天譴軍團的手中。沒人知道他們從何而來...$b$b重點是,我們需要所有我們在這裡能夠召集的人力,而我們部份的優秀成員前往戰場後就一去不回。$b$b我需要你進入廢墟找尋我們的傷兵並替他們包紮,然後把他們帶回來這裡給我。$b$b搜遍德拉克索璀!他們不會走太遠的。','德拉克索璀的羅傑斯醫生要求你,找到十字軍拉姆夫、十字軍強納森、和十字軍約瑟芬,在他們身上使用十字軍繃帶,並護送他們安全回到羅傑斯醫生處。','','到祖爾德拉克的德拉克索璀找羅傑斯醫生。','拯救十字軍強納森','拯救十字軍拉姆夫','拯救十字軍約瑟芬','',0), +(12514,'zhTW','蘑菇混合者','現在我們需要的就是某種可以將魔精攙入的東西。某種可以在預言者喝下後,將他會變得虛弱的東西。$B$B德拉克亞苟就在東邊。那裡有一種蘑菇,本地人稱之為渾帽菌。我覺得那就是我們需要的東西。$B$B將一堆渾帽菌回來給我。等我們將東西混進魔精後,任何喝下它的人都會變成心智昏沉。','收集10朵渾帽菌,並將它們交給銀白看臺的妖術師烏邦茍。','','到祖爾德拉克的銀白看臺找妖術師烏邦茍。','','','','',0), +(12516,'zhTW','樂極生悲','瞧。我對魔精進行了調整。現在,當預言者喝掉它,他不只會失去部份的力量,連同他的心智都會被真菌的效果給混亂。$B$B至少理論上是這樣沒錯。$B$B至於要如何讓他喝掉魔精呢,我建議你不如直接把魔精丟給他如何?以他在祭壇表現的那種傲慢,他肯定會撿起來並直接喝掉。$B$B除非你能殺掉他,$c,否則你的銀白十字軍大概就完了吧。','殺掉混亂的司瑟拉圖斯預言者,然後回到銀白看臺回報妖術師烏邦茍。','','到祖爾德拉克的銀白看臺找妖術師烏邦茍。','','','','',0), +(12527,'zhTW','貪吃的潛伏者','我的老師,芬克斯坦在西北邊希伯伐洛克的聖壇準備自白劑。他需要一些石化蜥蜴水晶來當材料。$B$B我們的運氣不錯,在東邊的德拉克亞苟就有一些潛伏的石化蜥蜴。$B$B要是你收集一些祖爾德拉克鼠然後丟過去餵那些蜥蜴的話,那些石化蜥蜴吃下5隻之後就會變得容易馴服。這樣你就可以安全地從他們身上取得水晶。$B$B殺死那些石化蜥蜴對你沒有什麼好處...只會把水晶弄壞。','把5顆石化蜥蜴水晶交給在希伯伐洛克聖壇的鍊金師芬克斯坦。','','到祖爾德拉克的希伯伐洛克的神殿找鍊金師芬克斯坦。','','','','',0), +(12555,'zhTW','盤根錯節','嘿!有台盤根錯節投擲器已經準備好了,正等著你拿它去擺平那些瘟疫噴灑器呢。$B$B你只要瞄準然後射出去就是了。網子應該可以把他們的浮空法術抵銷掉,讓他們像科爾拉瑪斯一樣墜到地面。$B$B蠻有詩意的。我喜歡!','德拉克索璀的專家榫輪要你使用盤根錯節投擲器毀掉5個瘟疫噴灑器。','','到祖爾德拉克的德拉克索璀找專家榫輪。','網住並摧毀瘟疫噴灑器','','','',0), +(12557,'zhTW','實驗室作業','我猜,你打擾我是因為你也想要排隊當我的學徒。$b$b很好的志向...$b$b如果有一天我想接受你的申請,我得確定你在我的實驗室派的上用場。我這裡要用到很多材料,有些很充裕,有些存量不足。$b$b慢慢來,$c。去找一隻爛沼泥蛆,一個萎縮的蝙蝠翅膀,一顆琥珀種子,還有一些寒冽巨蛇黏液。$b$b把這件事做好,我就會認真考慮你的請求。','希伯伐洛克的鍊金師芬克斯坦要你從他的實驗室中找出1個爛沼泥蛆,1個萎縮的蝙蝠翅膀,1顆琥珀種子,還有一些寒冽巨蛇黏液。','','到祖爾德拉克的希伯伐洛克找鍊金師芬克斯坦。','找到爛沼泥蛆','找到萎縮的蝙蝠翅膀','找到琥珀種子','找到寒冽巨蛇黏液',0), +(12562,'zhTW','德拉克瑞不需要水元素!','情報指出自從水元素出現在德拉克索璀原野之後,就有一些德拉克瑞薩滿就從祖爾德拉克的上層跑下來控制它們。$B$B$g先生:女士;,我沒辦法更加強調這有多危險。我們不希望讓他們控制水元素。$B$B指揮官已經下令攻擊那些德拉克瑞縛水者。你準備好的話就往南方前進。','銀白看臺的賈克斯中尉要你殺死10個德拉克瑞縛水者。','','到祖爾德拉克的銀白看臺找賈克斯中尉。','','','','',0), +(12563,'zhTW','食人妖巡邏','拔出武器,$r。該是出去巡邏的時候了!$b$b我負責指揮四座崗哨,維持住這些崗哨對我們的成功非常重要。我命令你去探視這四座崗哨並提供你的協助。$b$b你可以從東南邊的布蘭登上尉那開始。當你完成工作後,他會指引你前往下一座崗哨。$b$b幫助完我的手下之後,回來向我報告。記住,你越快回來,獎賞就越多 - 所以動作快!$b$b解散!','銀白看臺的指揮官康茲要你造訪四座銀白十字軍崗哨,遵從該處上尉的命令,完成後回報給他。布蘭登上尉和魯伯特上尉駐守在德拉克索璀,格隆戴爾上尉駐守在德拉克亞苟,而鍊金師芬克斯坦駐守在希伯伐洛克。','','到祖爾德拉克的銀白看臺找指揮官康茲。','布蘭登上尉的工作','魯伯特上尉的工作','格隆戴爾上尉的工作','煉金師芬克斯坦的工作',0), +(12565,'zhTW','辛阿布瓦的祝福','我很高興看到你們銀白十字軍為了對抗天譴軍團所付出的努力,$r。我想幫助你們。$B$B住在這個雄偉城市的德拉克瑞食人妖曾經定期的向他們的神祇獻上祭品,但現在卻無視祂們,或者還要更糟。$B$B如果你向祂們獻上祭品,祂們將會感激地回報你。$B$B辛阿布瓦的雕像就在西南方。如果你將德拉克瑞的神器獻給祂作為你保護祖爾德拉克的證明,祂會很樂意收下你的祭品。','銀白看臺的妖術師烏邦茍,要你在辛阿布瓦的雕像面前獻上10份德拉克瑞祭品。','','把德拉克瑞祭品帶給辛阿布瓦,他就在祖爾德拉克的銀白看臺西南。','','','','',0), +(12567,'zhTW','辛阿布瓦的祝福','','','','到祖爾德拉克找辛阿布瓦。','','','','',0), +(12583,'zhTW','墜毀的噴灑器','我知道其中一台瘟疫噴灑器墜毀在西邊的德拉克索璀。$B$B你何不去試看看你能不能找到它呢?我可以使用噴灑器的零件來製作一台可以把那些東西打下來的機械!','德拉克索璀的專家榫輪要你去收集瘟疫噴灑器零件。','','到祖爾德拉克的德拉克索璀找專家榫輪。','','','','',0), +(12584,'zhTW','純粹的邪惡','我們知道科爾拉瑪斯,就是墜毀在東南方的那個亡域,在食人妖把它打下來的時候載有大量被稱做薩鋼礦石的礦。$B$B我的斥候告訴我說這些薩鋼礦現在大多散落在那玩意的內部。$B$B伊崔格和他在銀白看臺的朋友想拿些那種礦石來研究。$B$B我要你去那兒看看能不能收集到足夠的份量。','魯伯特上尉要你收集10個大塊的薩鋼礦然後送去給銀白看臺的伊崔格。','','到祖爾德拉克的銀白看臺找伊崔格。','','','','',0), +(12587,'zhTW','食人妖巡邏','拔出武器,$r。該是出去巡邏的時候了!$b$b我負責指揮四座崗哨,維持住這些崗哨對我們的成功非常重要。我命令你去探視這四座崗哨並提供你的協助。$b$b你可以從東南邊的布蘭登上尉那開始。當你完成工作後,他會指引你前往下一座崗哨。$b$b幫助完我的手下之後,回來向我報告。記住,你越快回來,獎賞就越多 - 所以動作快!$b$b解散!','銀白看臺的指揮官康茲要你造訪四座銀白十字軍崗哨,遵從該處上尉的命令,完成後回報給他。布蘭登上尉和魯伯特上尉駐守在德拉克索璀,格隆戴爾上尉駐守在德拉克亞苟,而鍊金師芬克斯坦駐守在希伯伐洛克。','','到祖爾德拉克的銀白看臺找指揮官康茲。','布蘭登上尉的工作','魯伯特上尉的工作','格隆戴爾上尉的工作','煉金師芬克斯坦的工作',0), +(12590,'zhTW','布拉布拉[PH]','','','','','','','','',0), +(12596,'zhTW','巡食人妖','歡迎來到銀白看臺,小傢伙。我是指揮官康茲,而你 - 你可以稱我為...指揮官。$b$b別以為你可以在我的轄區遊蕩,挑選自己想做的任務,不用理會任何人。$b$b在這裡,你向我回報,你聽從我的指揮。瞭解嗎?$b$b首先,你要開始熟悉我的手下,還有我們負責清理的地區。$b$b向他們每一個報告,照他們說的話去做。等你完成巡邏之後,再向我報告。','銀白看臺的指揮官康茲要你造訪四座銀白十字軍崗哨,遵從該處指揮的命令,完成後回報給他。布蘭登上尉和魯伯特上尉駐守在東南方的德拉克索璀。$b$b格隆戴爾上尉駐守在東方的德拉克亞苟。$b$b而鍊金師芬克斯坦駐守在北方的希伯伐洛克。','','到祖爾德拉克的銀白看臺找指揮官康茲。','布蘭登上尉的工作','魯伯特上尉的工作','格隆戴爾上尉的工作','煉金師芬克斯坦的工作',0), +(12597,'zhTW','痛苦特效藥','就算我的手下如此英勇,但他們依舊是凡人。$b$b傷口和疼痛減弱了他們執行任務的能力。沒有任何訓練能夠改變這個簡單的生命真理。$b$b所幸,我們的一位鍊金師研發出一種軟膏配方,配合我們的繃帶一起使用,可以大幅減少士兵所感受的痛楚。$b$b這種軟膏需要一種那些食人妖種植在西邊的特殊罌粟。前往德拉克索璀原野去收集罌粟,以免我們的庫存用盡。','德拉克索璀的布蘭登上尉要你從德拉克索璀原野收集5個成熟的水罌粟。','','到祖爾德拉克的德拉克索璀找布蘭登上尉。','','','','',0), +(12598,'zhTW','扔下去','聰明...$b$b當我們看起來好像控制住局勢的時候,他們把隧道挖過我們正下方,並且佔領了聖壇!$b$b現在我們被夾在兩支奈幽蟲族的部隊之間,我們的處境每分每秒都在惡化。$b$b首先,我們一定要阻止他們繼續增援。一定要把他們的隧道封閉起來。$b$b帶著這些手榴彈,把它們丟進西北方的蟲坑之中。','德拉克索璀的魯伯特上尉要你對5個奈幽蟲坑使用高衝擊手榴彈。','','到祖爾德拉克的德拉克索璀找魯伯特上尉。','封閉奈幽隧道','','','',0), +(12599,'zhTW','物質享受','好吧,這不是什麼華麗的任務,但還是得做。$b$b我的部隊在外邊拋頭顱灑熱血,還得成天泡在及膝的髒水裡。這真的對身體很不好。$b$b他們很需要一個溫暖的營火讓他們烘乾身體,然後放鬆心靈。$b$b城市這個區域全沉在水裡,但是這些棘木的枯枝很能抵擋濕氣。$b$b替我們弄來一些生火的燃料,我們會萬分感激的。','德拉克亞苟的格隆戴爾上尉要你拿給他20塊枯死的棘木。','','到祖爾德拉克的德拉克亞苟找格隆戴爾上尉。','','','','',0), +(12606,'zhTW','繭縛!','現在隧道被封閉了,我們下一個該關心的就是落在敵人手中的夥伴。$b$b如果運氣好的話,我們有些士兵應該還在奈幽蟲繭裡活的好好的。$b$b趁還來得及的時候把他們放出來!','魯伯特上尉要你打開德拉克索璀的奈幽之繭,解救3個俘虜步卒之後回去和他交談。','','到祖爾德拉克的德拉克索璀找魯伯特上尉。','解救俘虜步卒','','','',0), +(12609,'zhTW','補充貨架','聽著,$c。我瞭解這樣可能有點要求太多了...$b$b新鮮的蜘蛛毒液很難找到,就算是蜘蛛在這裡大批出沒也一樣。但芬克斯坦說他至少需要一大缸,而且很快就要用到。$b$b我會叫我在外頭的部下收集這些藥材,但如果我們要及時完成鍊金師的命令,他們就需要援手。$b$b當你漫步在祖爾德拉克的原野上的時候,留意地門爬行者,然後把你找到的毒液全都拿來給我。','希伯伐洛克的阿爾納斯上尉,要你從祖爾德拉克的地門爬行者身上,收集7份新鮮的蜘蛛毒液。','','到祖爾德拉克的希伯伐洛克找阿爾納斯上尉。','','','','',0), +(12610,'zhTW','剪掉他們的翅膀','自從芬克斯坦來了以後,我就被迫替他的實驗和製藥收集各種不同的材料。$b$b我會遵守誓言執行我的命令,但我是個經驗豐富的老兵。我曾經參與過數十場戰鬥。我寧可待在前線,對十字軍做出更直接的貢獻。$b$b幫幫我,$r。替我收集一些蝙蝠翅膀,好讓我能夠更快回去參與一些真正的行動。','希伯伐洛克的阿爾納斯上尉,要你從祖爾德拉克蝙蝠身上,收集7個無瑕疵的蝙蝠翼。','','到祖爾德拉克的希伯伐洛克找阿爾納斯上尉。','','','','',0), +(12629,'zhTW','你可以逃,但你躲不了','一旦天譴軍團有了目標,就沒有東西可以阻止他們獲得它。$b$b你注定要變成一個沒有心智的存在,變成一具行屍走肉...$b$b<史戴芬的臉扭曲成一個殘忍的笑容。>$b$b...除非,我們可以利用他們的慾望來對付他們。$b$b我晚點再解釋。我得準備一個複雜的魔法,而且需要一些材料。$b$b到東邊的苦楚聖匣去。殺掉憎惡體,並且收集那裡的食屍鬼口水,然後帶著他們的殘骸回來給我。','黯黑守望的史戴芬要你前往苦楚聖匣,從惡臭的憎惡體身上收集5個惡臭的憎惡體內臟,以及收集5份黏稠的食屍鬼唾液。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','','','','',0), +(12630,'zhTW','踢納斯、拿毛髮','在你跟納斯見面之前,有件事情得先告訴你。$b$b納斯那天感染了一劑有毒的瘟疫,現在他既盲又聾,幾乎是麻木不仁了。$b$b不過這並不全是壞事。他差不多完全對事物免疫了,因此很適合做某些工作-比方說我現在要給你的工作。$b$b這附近有些初生的天譴食人妖,我們需要研究荒疫在他們身上的效果。帶上納斯和這雙靴子。當你殺了一隻食人妖,就猛踹他一腳,然後他就知道要採集毛髮樣本了。','黯黑守望的史戴芬要你用納斯從乾癟的食人妖身上收集10份毛髮樣本。$b$b如果你失去了納斯,就回去找史戴芬。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','採集毛髮樣本','','','',0), +(12631,'zhTW','某種邀請...','這個頸飾以骸骨製作,仍然淌著血,充滿著精細繁複的設計。$b$b看著它,使你被一種不祥的感覺所吞噬–它在逼迫你戴上頸子。你奮力抵抗這種衝動,決定要把它帶回黯黑守望。$b$b如果有人能夠解釋這一切,一定是死亡騎士...','把無息頸飾交給黯黑守望的史戴芬。','','','','','','',0), +(12638,'zhTW','迫近的呼喚','也許是睿智、也許是幸運,二者其一阻止了你把這個頸飾戴上,$r。$b$b不論如何,你得到這個東西絕非偶然。你被某人給盯上了。或者是某個東西...。$b$b把你的頸飾拿去給血玫,讓她把險些落在你身上的命運展示給你看。','黯黑守望的史戴芬要你把苦痛糾結頸飾交給血玫‧達圖拉。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','發現頸飾的用意','','','',0), +(12713,'zhTW','背叛','是時候結束這場猜謎遊戲了,$n。$b$b雖然你帶來的情報很有價值,我們還是必須解決德拉庫魯,在他把他的怪物放出來之前終止他的計畫。$b$b我們替你改造了這柄權杖。當時機來臨的時候,你可以對德拉庫魯的荒疫之血食人妖使用它,然後讓他們背叛德拉庫魯。這是你唯一可以擊敗他的機會。$b$b好好奮戰吧。','黯黑守望的史戴芬要你擊敗德拉庫魯。$b$b如果你把蠱惑頸飾搞丟了,返回黯黑守望的史戴芬處再拿一個。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','擊敗德拉庫魯霸王','','','',0), +(12740,'zhTW','給銀白十字軍的降落傘','那些天空之懼一直在屠殺我的手下!摔死是一種恐怖的死法。$B$B$C,你得把這些降落傘發給他們!這樣至少他們有機會可以奮力求生。','銀白看臺的指揮官法爾斯戴夫要你替10個庭院裡的銀白十字軍或銀白盾侍裝備降落傘。','','到祖爾德拉克的銀白看臺找指揮官法爾斯戴夫。','銀白部隊裝備降落傘','','','',0), +(12857,'zhTW','懸賞: 怒鬃的蹼','公告者:怒爪酋長$B$B怒爪酋長所信賴的海獅,怒鬃,反咬了他主人一口。怒爪說怒鬃不乖因為那些德拉庫魯食人妖。怒爪酋長很傷心的要求殺死怒鬃並把怒鬃的蹼帶來給酋長當作證明。$B$B你會在東南邊找到怒鬃,在怒爪湖。$B$B怒爪酋長寫得不好很抱歉。第一次用這種東西;對了,怒爪酋長是獾狼怪,不是人。','取回怒鬃的蹼,然後交給祖爾德拉克中,聖光止境的怒爪酋長。','','到祖爾德拉克的聖光止境找怒爪酋長。','','','','',0), +(12859,'zhTW','這個讚:火還很燙!','食人妖攻擊怒爪巢穴,把怒爪趕出去!現在更壞。食人妖現在在燒村莊!這很糟。酋長讓最厲害的怒爪巫醫,摩基,研究火焰。結果驚人!火還是很燙,而且會燒東西。$B$B你可以幫怒爪滅火嗎?摩基會給你特殊的怒爪滅火器。用特殊的滅火器把把東南方的怒爪巢穴的火滅掉。有時候要噴很多次才能滅火,但滅火器一定有水!怒爪魔法超厲害!','祖爾德拉克聖光止境的巫醫長老摩基要你用怒爪滅火器撲滅15個怒爪巢穴裡的著火小屋。','','到祖爾德拉克的聖光止境找薩滿長老摩基。','熄滅著火小屋','','','',0), +(12861,'zhTW','食人妖發瘋啦!','德拉庫魯...你知道這食人妖是誰嗎?我覺得壞食人妖都是被德拉庫魯食人妖控制。他們叫自己德拉庫魯食人妖-我聽說的。你知道我為什麼是怒爪酋長了。我是獾狼怪裡最聰明的!$B$B但是這不是我跟你說話的原因。壞食人妖來把怒爪趕出巢穴。沒逃走的怒爪都被抓走了。你要去怒爪巢穴,東南方,然後救出被抓走的怒爪。鑰匙在食人妖身上,殺了他們!很多個鎖需要很多把鑰匙!','祖爾德拉克聖光止境的怒爪酋長要你用從不同食人妖身上拿到的德拉庫魯『開鎖器』解救八個怒爪囚犯。','','到祖爾德拉克的聖光止境找怒爪酋長。','釋放怒爪囚犯','','','',0), +(12883,'zhTW','德拉庫魯的命令','奴僕們聽令!巫妖王將讓德拉庫魯指揮在祖爾德拉克的天譴軍部隊。我們的命令是殺掉所有東西。$B$B所有東西都得死!$B$B我們將走在亡者原野的屍體上。為了天譴軍,將他們送到在賽拉瑪斯的納法勒斯王子部隊!在德拉庫魯的管理下,所有東西都不會浪費!很快,我們就會喝著先知的血,變得比以往都要強大!祖爾德拉克跟剛德拉克都將死於天譴軍手上!','把德拉庫魯的命令拿給祖爾德拉克聖光止境的十字軍領主蘭迪加。','','到祖爾德拉克的聖光止境找十字軍領主蘭迪加。','','','','',0), +(12884,'zhTW','黯黑守望','此處以西,越過了毀壞的路面跟建築,就是死亡騎士的紮營地,黯黑守望。$B$B<十字軍領主蘭迪加將德拉庫魯的命令捲起。>$B$B把這些命令拿給一個叫史戴芬‧瓦度的。讓他知道銀白十字軍會對付納法勒斯王子。他們要處理德拉庫魯。$B$B小心點,$n。去黯黑守望的路上有許多天譴軍。','將德拉庫魯的命令送到祖爾德拉克黯黑守望的史戴芬‧瓦度手上。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','','','','',0), +(12894,'zhTW','十字軍前線營地','十字軍達加希,十字軍麥克凱拉,工程師瑞德,還有雙胞胎介爾克與孛爾,幾天前被派去亡者原野建立前線了。我最後一次和他們通信的時候,他們成功的在亡者原野的邊緣建立了營地,就在西北方。$B$B收到關於德拉庫魯與納法勒斯王子新消息,我認為派個人去十字軍前線營地是比較穩當的作法 - 而且要快。$B$B把你的行李打包好,$n。你必須立刻出發!','在祖爾德拉克的十字軍前線營地中找到十字軍麥克凱拉。','','','','','','',0), +(12901,'zhTW','無中生有','一定要阻止納法勒斯王子。我們不能讓天譴軍繼續把這個地區當作殭屍工廠。如果我們能夠讓坦克運作,也許就還有一點機會。現在我需要的是備用零件。$B$B此地西北方被稱為瑟瑞姆之歿。天譴軍隊把這個地方當作某種基地。殘骸自從他們抵達以來就散佈在基地的四周。那裡地表四處遍布天譴金屬碎塊。把那些東西拿給我,我會試著好好加以利用。','十字軍前線營地的工程師瑞德要你回收10個天譴金屬碎塊。','','到祖爾德拉克的十字軍前進營地找工程師瑞德。','','','','',0), +(12903,'zhTW','這就是朋友的意義...','我們當時被納法勒斯王子與至少十幾個天譴軍襲擊。我叫達加希和雙胞胎待在坦克裡面,但是他們不聽我的話。達加希盯著我的眼睛,然後說,「如果沒有人出去的話,我們全都會被殺光。」然後他就叫瑞德關掉引擎,接著他就衝鋒出去了。這是我看過最英勇的行為。$B$B我聽見王子對那些怪獸喊了幾句命令。聽起來他似乎要把他們帶去瑟瑞姆之歿,就在此地西北方。我們一定得救出我們的朋友。你願意去尋找他們嗎?','十字軍前線營地的十字軍麥克凱拉要你找到十字軍達加希、介爾克、與孛爾。','','到祖爾德拉克的十字軍前進營地找十字軍麥克凱拉。','找到十字軍達加希','找到介爾克','找到孛爾','',0), +(12904,'zhTW','聖光不會賜予我復仇','他們...他們殺了我兄弟。$B$B<介爾克努力忍住淚水。>$B$B他們像是宰殺牲口一樣屠殺了他。現在他們把他放在營地另一頭的一張桌子上,準備用他來進行穢暗的實驗。達加希也死了。聖騎士在東北方的遺跡英勇地頑抗,但是瓦苟的領袖,奧嘉爾,實在太強了。$B$B我是唯一的倖存者,而我也快死了。我...我正在轉變。$B$B如果聖光不會賜予我復仇,也許你會,$c。把他們全部殺光。','瑟瑞姆之歿的介爾克要你殺死15個瓦苟。','','到祖爾德拉克的瑟瑞姆之歿找介爾克。','殺死瓦苟','','','',0), +(12912,'zhTW','巨大風暴的迫近','你跟其他人不同,小傢伙。你身上沒有死亡的臭氣。也許我可以信任你。$B$B我是基默,風暴巨人之王。我被我的兄弟,賽厄西,誘來此處,他是巫妖王的不死僕役。當我發現他呼救的聲音是個陷阱的時候,一切都太遲了。我現在是天譴軍的囚犯,而恐怕我很快就要面臨和其他風暴巨人一樣悲慘的命運。$B$B替我找出釋放我的方法,我就會盡我所能的幫助你。','風暴巨人之王基默要求你找出從牢籠中釋放他的方法。與十字軍前線營地的工程師瑞德交談。','','','','','','',0), +(12914,'zhTW','拯救基默','所以你是說他被關在一個百呎高的籠子裡,嗯?$B$B如果我的計算正確,我們至少可以脆化籠子的絞鍊,給巨人足夠的餘裕掙脫出來。$B$B要做到這件事,我需要一些塑化劑和穩定劑。$B$B女妖精華應該很適合當作塑化劑。你可以從東北邊亡者原野的女妖身上取得。穩定劑可以從西南邊黯黑守望附近的地怒者身上取得。$B$B動作快吧!','十字軍前線營地的工程師瑞德要你把6個女妖精華與6個矽藻土壤交給他。','','到祖爾德拉克的十字軍前進營地找工程師瑞德。','','','','',0), +(12916,'zhTW','我們唯一的希望','我要給你的東西叫做爆鹽。這是一種極端易爆的炸藥,還具有獨特的性質。由於具有高延展性,你可以很輕易的把它塞進鉸鏈與籠子的縫隙裡製造最大的傷害。$B$B回去找你的朋友用超超超大爆鹽炸藥釋放他吧。$B$B讓我們期待他能遵守約定。他是我們唯一的希望了。','一旦你使用超超超大爆鹽炸藥打開天譴圍欄之後,就與與瑟瑞姆之歿的基默交談。','','到祖爾德拉克的瑟瑞姆之歿找基默。','炸開天譴圍欄','','','',0), +(12919,'zhTW','風暴之王的復仇','我的子民被巫妖王大舉屠殺。天譴軍團現在用風暴巨人的屍體製造毫無心智的血肉巨人,或者縫補出像瑟瑞姆這種更糟的畸形怪物。$B$B沒有任何東西可以阻止我把他們逐出這個世界。我們會攜手毀滅威脅祖爾德拉克的天譴軍。$B$B我們將會把他們全部殺死:納法勒斯王子、奧嘉爾以及瑟瑞姆!$B$B當你準備好了,就告訴我,讓我們開始我們的毀滅之旅。','與基默交談出發。$B$B騎著基默摧毀100個天譴軍,並殺死『天選』奧嘉爾、瑟瑞姆以及納法勒斯王子。一旦你成功了,就向十字軍前線營地的十字軍麥克凱拉報告。','','到祖爾德拉克的十字軍前進營地找十字軍麥克凱拉。','殺死天譴軍','','','',0), +(12633,'zhTW','黑暗呼喚','這個頸飾以骸骨製作還滴著血,充滿著精細繁複的設計。$b$b看著它,使你被一種不祥的感覺所吞噬-它在逼迫你戴上它。你奮力抵抗這種衝動,決定要把它帶回黯黑守望。$b$b如果有人能夠解釋這一切,一定是死亡騎士...','把苦痛糾結頸飾交給黯黑守望的史戴芬。','','','','','','',0), +(12637,'zhTW','擦身而過','也許是睿智、也許是幸運,二者其一阻止了你把這個頸飾戴上。$b$b不論如何,你得到這個東西絕非偶然。你被某人給盯上了。或者是某個東西...。$b$b把你的頸飾拿去給血玫,讓她把險些落在你身上的命運展示給你看。','黯黑守望的史戴芬要你把無息頸飾交給血玫‧達圖拉。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','發現頸飾的用意','','','',0), +(12643,'zhTW','銀內襯','一旦天譴軍團的眼中發現了目標,在得到它以前休想阻止他們。$b$b你注定要變成一個沒有心智的生物,像是一具會走路的屍體一樣...$b$b<史戴芬的臉扭曲成一個邪惡的笑容。>$b$b...除非,我們可以利用他們的慾望來對付他們。$b$b我晚點再解釋。我有一個複雜的魔法要準備,而且需要一些材料。$b$b到東邊去,苦楚聖匣下方的那塊地。殺掉那裡的食屍鬼和憎惡體,然後帶著他們的屍塊回來。','黯黑守望的史戴芬要你前往苦楚聖匣,從惡臭的憎惡體身上收集5個惡臭的憎惡體內臟,以及收集5份黏稠的食屍鬼唾液。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','','','','',0), +(12648,'zhTW','裝扮','拿著...我替你製造了一套偽裝,應該可以讓你看起來跟天譴軍團一模一樣。$b$b只要保持住偽裝,你應該可以自由的在他們之間走動。只有荒疫守衛可以看穿我的幻象。小心他們!$b$b還有一件事是你該知道的,就是這偽裝不太穩定,因此可能會無預警地消失,所以請保持警戒。$b$b讓我們來測試看看。使用頸飾並且拜訪東邊的天譴商人。帶一瓶苦澀血漿回來找我。','黯黑守望的史戴芬要你使用蠱惑頸飾披上天譴偽裝。$b$b當你變成天譴軍的外貌以後,從軟魄那裡買一瓶苦澀血漿。$b$b如果你失去了蠱惑頸飾,回去黯黑守望找史戴芬再要一個。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','','','','',0), +(12649,'zhTW','著裝!','拿著...我替你製造了一套偽裝,應該可以讓你看起來跟天譴軍團一模一樣。$b$b只要保持住偽裝,你應該可以自由的在他們之間走動。只有荒疫守衛可以看穿我的幻象。小心他們!$b$b還有一件事是你該知道的,就是這偽裝不太穩定,因此可能會無預警地消失,所以請保持警戒。$b$b讓我們來測試看看。使用頸飾並且拜訪東邊的天譴商人。帶一瓶苦澀血漿回來找我。','黯黑守望的史戴芬,要你使用蠱惑頸飾以披上天譴偽裝。$b$b當你變成天譴軍的外貌以後,從軟魄那裡買一瓶苦澀血漿。$b$b如果你失去了蠱惑頸飾,回去黯黑守望找史戴芬再要一個。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','','','','',0), +(12652,'zhTW','餵食食屍鬼','過來,食屍鬼!對啊,我在跟你說話。$b$b吃飯時間到啦!得把伙食都發給食屍鬼才行!$b$b今天的特餐!腸腦煲...好吃好吃好吃。$b$b只要在食屍鬼旁邊丟下碗公就好了。這是交朋友的好方法啊。$b$b你有食屍鬼朋友嗎?哈,哈,哈哈!','苦楚聖匣的軟魄,要你在10個凋零的食屍鬼旁邊使用腸腦煲。','','到祖爾德拉克的苦楚聖匣找軟魄。','餵食凋零的食屍鬼','','','',0), +(12661,'zhTW','滲透沃塔魯斯','你現在也許已經猜到我的計畫了。$b$b我們要利用天譴軍團對你的興趣來對付他們。你要去進行臥底工作。我知道這等於是叫你去送死,但反正我們不採取行動的話你也是死定了。$b$b前往東北方的痛苦聖匣,然後披著你的偽裝站上那個平臺。進入沃塔魯斯之後你得去贏取天譴指揮官的信任。$b$b完成了你的任務之後,就吹響這個號角,我會飛去你的位置接收報告。','史戴芬要你使用蠱惑頸飾進入沃塔魯斯然後完成天譴指揮官的任何要求。$b$b如果你失去了蠱惑頸飾,回去黯黑守望找史戴芬再要一個。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','完成德拉庫魯霸王的任務','','','',0), +(12663,'zhTW','聚首','$n!$b$b你一定收到了我的禮物吧!轉個身,老兄,讓我好好看看你…啊,你真讓我驕傲。$b$b我們走了這麼長一段路,你跟我,而現在我們一起為巫妖王效忠。$b$b跟緊我吧,有大事要發生了,老兄。大事…不過首先,我們得讓你搞清楚狀況。自從我上次見到你來發生了好多好多事。$b$b去跟血袋參觀一下祖爾德拉克。為了我聽聽導覽,然後我就會告訴你該知道的事。','沃塔魯斯的德拉庫魯要你跟血袋交談,然後參觀祖爾德拉克。','','到祖爾德拉克的沃塔魯斯找德拉庫魯霸主。','參觀完祖爾德拉克','','','',0), +(12669,'zhTW','目前為止一切都很糟','你所報告的一切都與我們所知的相符。觀察德拉庫魯以及贏得他的信任將會為你未來的任務打好基礎。$b$b回去找他,然後照他說的話做。用一切手段使你自己看起來很真心,$n。有太多事都要靠你的表現了。$b$b這次我還要指派你一項額外的工作:當你在原野上的時候,將這個添加物加進他們的荒疫大鍋裡面。這應該能夠中和天譴的散佈,讓這一批鍋子失效。','黯黑守望的史戴芬要你回去找德拉庫魯,然後完成他交代你的工作。$b$b當你到痛苦聖匣的時候,你要對5個荒疫大鍋使用稀釋添加物。$b$b如果你失去了蠱惑頸飾,回去黯黑守望找史戴芬再要一個。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','完成德拉庫魯的任務','稀釋天災之鍋','','',0), +(12673,'zhTW','滾下山坡','如果你要讓自己值得巫妖王賞識,你就得當一個好的領袖-要能夠控制尊敬!$b$b我有個能夠讓你磨練指揮技巧的工作,老兄...$b$b我有些手下被訓練去底下的土地收集荒疫水晶,但他們又懶又慢的。你要負責指揮他們,老兄。$b$b帶著這根權杖去教他們怎樣做好工作。當他們被你控制住了,就叫他們去收集水晶!','沃塔魯斯的德拉庫魯指揮官,要你對荒疫魂屍使用建言權杖,然後命令他們收集7個荒疫水晶。','','到祖爾德拉克的沃塔魯斯找德拉庫魯霸主。','採集荒疫水晶','','','',0), +(12676,'zhTW','破壞工作','在我們想辦法研究水晶的用途的時候,我們要你回到沃塔魯斯去達成德拉庫魯的要求。$b$b你每成功完成一個任務,你就越接近他,帶領我們更加接近他的心思。$b$b你到兒的時候,我還有個任務要給你。德拉庫魯的天譴血屍車隊我們造成了顯著的威脅。我們得那些車子毀掉。$b$b去血屍車那裡啟動這些炸藥。一旦裝好了,就快離開!如果你太靠近的話,炸彈也會波及到你。','黯黑守望的史戴芬要你再替德拉庫魯完成一項任務。$b$b此外,你還要在痛苦聖匣用爆破炸藥炸毀5台血屍車。$b$b如果你失去了蠱惑頸飾,回去黯黑守望找史戴芬再要一個。','','到祖爾德拉克的黯黑守望找史戴芬·瓦度。','摧毀血屍車','完成德拉庫魯的任務','獲知德拉庫魯的秘密','',0), +(12677,'zhTW','危險物質','荒疫水晶?!這該死的德拉庫魯究竟想要做什麼?$b$b顯然,他在做的事很重要。繼續完成他的要求,也許當他跟你更熟了以後,就會讓你知道他的計畫。$b$b在此期間,我們得調查這些水晶。$b$b當你進入沃塔魯斯的時候,試著趁沒人注意的時候弄來一些採收的水晶。$b$b小心點!處理那些水晶的時候你的偽裝有可能會消失。','黯黑守望的史戴芬要你去沃塔魯斯完成任何德拉庫魯要你做的任務。當你到那裡的時候,要去偷取5個採收的荒疫水晶。$b$b如果你失去了蠱惑頸飾,回去黯黑守望找史戴芬再要一個。','','','完成德拉庫魯的任務','','','',0), +(12686,'zhTW','忍無可忍','愚蠢!這實在是忍無可忍,老兄!我整批的荒疫都沒用了!$b$b那個雜種,達穆克!他應該負責看守那些荒疫的。他令我失望了,老兄!$b$b好好學著,$n。失敗是會像疾病一樣蔓延的。你得抓住它,在你被殺掉之前搶先除掉它!$b$b帶上這支權杖。他會讓我的天譴食人妖變的更強壯。用他們殺掉達穆克。他就躲在下頭南邊的地方$b$b讓他成為所有人的警惕吧,老兄。不要讓德拉庫魯失望!','沃塔魯斯的德拉庫魯要你前往痛苦聖匣,並且對德拉庫魯的僕從使用活效權杖。接著用它的能力來擊敗達穆克。','','到祖爾德拉克的沃塔魯斯找德拉庫魯霸主。','殺死達穆克','','','',0), +(12690,'zhTW','火上加油','該開始對剛德拉克進軍了,老兄。也是時候把你放出去對付那些食人妖了!$b$b他們突破了我們的牆壁,把整個軍隊送到咱們北邊。$b$b哈哈哈!$b$b他們只是替咱們補充燃料罷了,老兄!我們把酋長抓過來,然後其餘的都殺光!這是主人計畫中的一部份...$b$b你帶著這根權杖去控制我的憎惡體。帶他們到德拉克瑞的軍隊那裡去,然後把他們全都殺掉!當酋長出現的時候,我的寵物泥岩之翼將會把他們抓來我這裡。','沃塔魯斯的德拉庫魯要你用指揮權杖控制浮腫的憎惡體,然後在嚴寒止境用他們的能力殺死60個德拉克瑞碎顱者,並引出3個德拉克瑞酋長。$b$b當你殺死夠多碎顱者之後酋長就會出現。','','到祖爾德拉克的沃塔魯斯找德拉庫魯霸主。','殺死德拉克瑞碎顱者','引出德拉克瑞酋長','','',0), +(12710,'zhTW','揭露真相','你做得很好,$n。$b$b你證明了我有看人的眼光!現在你知道為什麼巫妖王給了我這個天賦...$b$b現在是時候把主人的計畫透露給你了,老兄。$b$b現在你會知道我們要怎麼掃蕩蜂擁的德拉克瑞食人妖,然後在偉大的剛德拉克取得我們應得的位置。$b$b拿著這枝權杖,老兄。這是對你信任的象徵。有了它,你就可以進入我的上層房間,親眼見識一下我們的秘密武器。','沃塔魯斯的德拉庫魯要你傳送至他的上層房間。','','到祖爾德拉克的沃塔魯斯找德拉庫魯霸主。','探索德拉庫魯的上層房間','','','',0), +(12780,'zhTW','敵人的敵人','儘管和死亡騎士一起工作十分令人不快,但我們實在不適合這裡挑剔自己的盟友。$b$b我們現在夾在天譴軍團與野蠻的德拉克瑞之間,他們都恨不得毀滅我們,好讓他們可以彼此廝殺。$b$b往西方前去黯黑守望,和史戴芬談談,看看你能不能提供他協助。','聖光止境的瑞安娜中士要你和黯黑守望的史戴芬談談,並且提供你的協助。','','','','','','',0), +(12789,'zhTW','深入止境!','做好準備,$c。我派你前往聖光止境,在此地的東北方。$b$b我接到消息說天譴軍正在試圖佔領祖爾德拉克。$b$b<瓦魯思死盯著你。>$b$b這絕對不能發生。$b$b確保你自己能在該處天譴軍的毀滅上盡一份力。聖光如此冀求。$b$b你可以退下了。','聖光之託的十字軍瓦魯思要你向瑞安娜中士報到,她就在祖爾德拉克的聖光止境。','','','','','','',0), +(12792,'zhTW','輕重緩急','聽著,$r!$b$b這整個地區都充滿了危機。不管你往哪裡看,都可以找到需要你協助的人。$b$b<康茲堅定地注視著你的雙眼。>$b$b但現在沒有人比瑞安娜更需要你的幫助。天譴軍團強行將我們隔開,使她和她的部下遭到孤立。$b$b聖光止境,就是她的部隊堅守的地點,就在此地的西南方。','銀白看臺的指揮官康茲要你向聖光止境的瑞安娜中士報到。','','','','','','',0), +(12793,'zhTW','地平線上的煙塵','你聽到了嗎,$r?$b$b戰鬥的噪音遠從西方一直傳到這裡來,甚至蓋過了我們這邊的聲音。$b$b天譴軍團嚴重威脅著那些自稱為銀白十字軍的傢伙們所佈下的防線。阻止這件事和我們這裡的任務一樣重要。$b$b前往聖光止境加入他們的奮戰吧。跟瑪卡談談,他會把你安全地送到那裡去。','辛托加的庫弗要你前往聖光止境向瑞安娜中士報到。$b$b瑪卡會把你送到那裡去。','','','','','','',0), +(12795,'zhTW','前往看臺','不久之前我在東邊的林線上方看到了信號煙。$b$b這只代表著一件事,那就是在銀白看臺的十字軍狀況不太好。$b$b我沒辦法離開我在這裡的崗位,$r,但你可以。當你有時間的時候,去找指揮官法爾斯戴夫,看看你能不能夠幫忙減輕他們的負擔。','黯黑守望的血玫‧達吐拉要你去跟銀白看臺的指揮官法爾斯戴夫談談。','','','','','','',0), +(12799,'zhTW','吸取靈魂','他們說,你應該對他的到來感到開心。他們說,你應該享受有他陪伴的時光...$b$b在這件事情上來說,我沒多大選擇餘地。芬克斯坦是十字軍陣中最優秀的鍊金師,我其實應該感到很光榮,因為他選擇我的崗哨建立商店。但是自從他來這裡以後,我就被抓去收集一大堆的材料。$b$b那麼,$r,幫個忙如何?就在南邊,有些池子被古老的食人妖靈魂給佔據了。幫我收集他們的魂能吧。','希伯伐洛克的阿爾納斯上尉要你去薩金之池從迷失的德拉克瑞靈魂身上收集5個上古魂能。','','到祖爾德拉克的希伯伐洛克找阿爾納斯上尉。','','','','',0), +(12902,'zhTW','尋找答案','這些可憐的傢伙就是僅存的生還者了。$B$B根據他們領袖的說法,德拉克瑞食人妖與怒爪獾狼怪已經結盟數千年了。他們在這裡生活,與食人妖比鄰而居,一代又一代,完全沒有注意到身邊世界的變化。對怒爪獾狼怪來說,食人妖就是食人妖;所以當食人妖攻擊他們的巢穴時他們完全猝不及防。$B$B我們需要答案,$n。搜索他們的村莊,就在東南方,找出到底是誰,或者什麼東西負責指揮這些攻擊。','搜索怒爪巢穴,找攻擊怒爪獾狼怪的元兇所留下的線索。','','','','','','',0); + +-- +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(11236,'zhTW','死靈主宰梅贊','天譴軍團就在夏勒布隆,他們還有一堆死靈法師!他們一定是要把維酷人拉入阿薩斯的陣營。$B$B我要消滅那些死靈領主的領袖!$B$B不管要什麼代價,$n,我都要死靈主宰梅贊和他所計畫的一切都被消滅。$B$B我絕對不能讓維酷人與天譴軍團結盟!$B$B梅贊就在夏勒布隆的右後方平台。','殺死死靈主宰梅贊。然後向鎮西要塞的亞當斯隊長回報。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','','','','',0), +(11237,'zhTW','夏勒布隆攻擊計畫','這些計畫記錄了即將對鎮西要塞展開的攻擊。它顯示了時常在上空盤旋的冰霜巨龍加拉希恩也會參與進攻。$B$B法師中尉瑪歷斯特肯定會對這件事情有所建議。把計畫交給在要塞南方的他。','把夏勒布隆攻擊計畫交給鎮西要塞的法師中尉瑪歷斯特。','','到凜風峽灣的破碎海峽找法師中尉瑪歷斯特。','','','','',0), +(11238,'zhTW','冰霜巨龍與它的主人','你把這個東西拿來給我是對的,$n。你得排除萬難前往夏勒布隆,並殺了那隻飛龍和牠的主人,喚龍者惡邪!$B$B即使是現在,就在我們進行談話的當下,冰霜巨龍可能已經在路途中了。$B$B不過,如果我從這些計畫中理解得沒錯的話,在夏勒布隆外左後方喚龍者的平臺上吹響這個喚龍者號角,就可以將加拉希恩召喚回去。當這隻生物降落後,就殺了牠!$B$B還有,$n,請把號角帶回來給我。我們可不想讓它落入不適當的人手中。','殺了喚龍者惡邪並使用喚龍者號角將加拉希恩召喚回來,殺了牠。接著,帶著號角回到鎮西要塞交給法師中尉瑪歷斯特。','','到凜風峽灣的破碎海峽找法師中尉瑪歷斯特。','','','','',0), +(11250,'zhTW','斯考恩征服者萬歲!','呃...您...已經完成了被派來此地的每一件任務,$g先生:女士;。我必須要說我很榮幸能聽從這樣一位優秀而年輕$r的指揮。$B$B隊長一定會很樂於知道你的成功,但如果你因為任何理由要繼續待在這裡,我將聽任你的指揮。','將鎮西指揮徽記還給鎮西要塞的亞當斯隊長。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','','','','',0), +(11264,'zhTW','死靈主宰梅贊','這些死人都在夏勒布隆,和死靈法師一夥?$B$B我們必須把死靈領主的領導者消滅才行。$B$B$n,不計一切代價去完成,小心死靈主宰梅贊,不管他嘗試要完成什麼,制止這件事。$B$B不管他們利用這些不死生物從事什麼,我們都無法承擔維酷族人成功的後果!$B$B找到梅贊,他就在夏勒布隆右後方區域的平台上。','殺掉死靈主宰梅贊以後,向冬蹄營地的灰燼圖騰酋長回報。','','到凜風峽灣的冬蹄營地找灰燼圖騰酋長。','','','','',0), +(11266,'zhTW','夏勒布隆攻擊計畫','這些計畫書詳述著即將對冬蹄營地發起的攻擊。在上空盤旋的冰霜巨龍,加拉希恩,看來似乎是將會參與攻擊。$b$b毫無疑問,賽利亞‧冰鬃在這件事當中會提供她的協助。將計畫帶到東邊的營地交給她。','將夏勒布隆攻擊計畫送到冬蹄營地交給賽利亞‧冰鬃。','','到凜風峽灣的冬蹄營地找賽利亞·冰鬃。','','','','',0), +(11267,'zhTW','冰霜巨龍與它的主人','你將這個東西拿來給我的直覺是對的,不過我的蠍尾獅無法與龍相抗衡。你得往西探索並前往夏勒布隆,殺掉那隻冰霜巨龍和它的主人,喚龍者惡邪!$B$B現在它可能就在途中了!$B$B如果我從這些計畫中理解沒錯的話,在夏勒布隆左後方外的平臺上吹響喚龍者號角,加拉希恩就會回去。當這隻生物降落之後,就殺了它!$B$B還有,$n,把號角帶來給我。我們不想讓號角落入壞人的手裡!','殺了喚龍者惡邪並使用喚龍者號角將加拉希恩召喚下來然後殺掉它。完成後,帶著號角回到冬蹄營地找賽利亞‧冰鬃。','','到凜風峽灣的冬蹄營地找賽利亞·冰鬃。','','','','',0), +(11269,'zhTW','羽絨之於絲線','聯盟的先鋒將於幾天內抵達。這些士兵等著要用禦冬裝備,但是我還有幾件披風要完成。$B$B一直以來我都使用斑點角鷹獸的羽絨作為披風的內裡,但是我的存貨用完了!$B$B你一定要幫幫我,$n。要是這些披風沒有即時完成,亞當斯隊長一定會剝了我的皮!把所有你找得到的羽絨帶來給我。換毛期的角鷹獸在飛越堡壘附近的荒野時,身上的毛都會掉落地面。','吉爾‧葛瑞斯特要你帶10團斑點角鷹獸羽絨給他。','','到凜風峽灣的威德瓦堡壘找吉爾·葛瑞斯特。','','','','',0), +(11271,'zhTW','加緊準備','我的族人很重視斑點角鷹獸的羽絨,從單純裝飾到製作儀式服裝都用的上。我們正在進行離開崗哨的準備,所以這是本季最後一次收集的機會了。$B$B要是你肯幫忙,我就能弄到足夠的存量,以確保大家都能擁有長途跋涉所需要的裝備。山裡的情況變化很快,風暴可能毫無預警的就出現了。$B$B你可以在崗哨周圍的地面找到這些羽絨。','冬蹄營地的阿喉塔‧白霜要你帶10團斑點角鷹獸羽絨給他。','','到凜風峽灣的冬蹄營地找阿喉塔·白霜。','','','','',0), +(11275,'zhTW','製作號角','我的族人世世代代都在獵殺這些山丘上的巨型雪人,而我今年要初次加入打獵。這很可能是我們永遠離開這個崗哨以前的最後一次狩獵了。$B$B為了替這次的狩獵做準備,我必須用山羊角做出一個響亮的號角,牠們就漫步在營地附近的雪地中。長者告訴我說那聲音很像女性雪人的發情聲,不過我很懷疑。$B$B將你找到最好的山羊角帶來給我,$n,我會從裡面挑一個出來。','冬蹄營地的諾可瑪‧雪先知要你帶6個未受損傷的山羊角給她。','','到凜風峽灣的冬蹄營地找諾可瑪·雪先知。','','','','',0), +(11281,'zhTW','模仿自然的呼喚','號角已經粗略製作完成了,不過在我進行傳統的雕刻前,我想要先確認一下號角是否有用。阿喉塔告訴我說他在崗哨東北邊凍結的瀑布底下測試他的號角。阿喉塔還告訴我說我們的獵人世代都這樣利用凍水的音響效果。我等不及想要知道更多了!$B$B你可以幫我去測試這個號角嗎?如果我沒弄錯,你說不定還會引來一頭雪人,所以請做好準備!一旦你測試完號角,就把它帶回來給我!','測試雕紋號角,然後將結果帶回冬蹄營地交給諾可瑪‧雪先知。','','到凜風峽灣的冬蹄營地找諾可瑪·雪先知。','測試諾可瑪的號角','','','',0), +(11286,'zhTW','鋼鐵之門的神器','我來到這裡是為了一個不同的理由;我的一位老朋友在夢中呼喚我。但是,如今我看到這些小傢伙用他們的機械在地上打出了一個大窟窿,讓我怒火中燒。$B$B舉目所及,這些矮人們,正如他們為人所知的,正在挖掘神器;一些對瞭解我們過去可能相當重要的神器。$B$B我要你到底下把那些東西拿給我。不要讓任何矮人阻擋了你的去路。','賢者霧行要求你收集10樣鋼鐵之門神器。收集完成以後,回到鋼鐵之門向他回報。','','到凜風峽灣的鋼鐵之門找賢者霧行。','','','','',0), +(11287,'zhTW','尋找賢者霧行','$C,我的兒子,賢者霧行,失蹤了好長一段時間,讓我越來越擔心。這片大地既殘酷又危險。$B$B他提過一匹不斷浮現在他腦海中的狼,於是他和一群遠偵斥候向西行,尋找影像的來源。我相信他提過的那個地方,名字叫做鋼鐵之門。$B$B你能找到他嗎?我希望能確定他安然無恙。','主母安卡請你調查賢者霧行的情況。她相信賢者霧行在鋼鐵之門附近。','','','','','','',0), +(11296,'zhTW','裂木森林的俘虜','有某種東西激怒了附近的生物,可能就是那些被稱為天譴軍的活死人。$B$B在護送賢者來此的路上,我們大部分的獵人都折損在裂木寡婦的手上,她們是一種致命的巨大蜘蛛,就住在裂木森林的北部。$B$B我必須留在此地保護我們剩餘的力量,但是你…你可以幫我看看我的遠偵斥候是否還活著,也許被困在裂木寡婦的繭中。$B$B你願意嗎,陌生人?','遠偵斥候穹雲要你釋放7名冬蹄遠偵斥候。完成之後,回到鋼鐵之門找他。','','到凜風峽灣的鋼鐵之門找遠偵斥候穹雲。','釋放冬蹄遠偵斥候','','','',0), +(11297,'zhTW','注意入侵者','連大地都無法抵擋襲捲而過的死亡浪潮。屍體成群在大陸上行走,以驚人的速度散佈著他們的腐敗。$B$B有一小隊遠征隊在西邊的峭壁上落腳,剩下的則在低語峽谷附近。你自己去看看,$n。看看你是不是能夠知道他們的目的,並勸他們不要把他們的毒藥帶來我們的土地上。從崗哨出發往西南方走,朝西邊海岸上的峭壁前進。他們的營地就在鋼鐵之門的挖掘場西邊。','與藥劑師營地的藥劑師馬爾薩斯談談。','','','','','','',0), +(11298,'zhTW','那瓶酒是啥?','東南方是一個名為低語峽谷的地方。發了瘋的探險者協會成員在裡頭到處橫行!我們的商隊在穿越本區時遭到他們攻擊,他們還不停地襲擊我們的糧秣搜尋隊。$B$B我一定得知道到底是什麼造成了這次錯亂!我懷疑是他們喝的東西導致他們失去理智,就是那些散佈在峽谷中的桶子。我要你趁他們忙著採礦時,從那些矮人中偷出這些桶子。','藥劑師營地的藥劑師馬爾薩斯要你帶5個矮人酒桶給他。','','到凜風峽灣的藥劑師營地找藥劑師馬爾薩斯。','','','','',0), +(11301,'zhTW','腦!腦!腦!','馬爾薩斯有沒有抓著你嘮嘮叨叨地講那些啤酒桶還有瘋矮人的事情?$B$B我一點都不懷疑那些矮人瘋了,但我一點也不覺得偷那些矮人的啤酒會有任何幫助。$B$B我們需要的是大腦。大量的腦。我們將要立刻開始徹底研究這些謎團,說不定能替瘟疫找到新的材料。$B$B帶著這個鋸子,前往東南方的低語峽谷,殺死一些矮人。用這個鋸子從他們身上取出腦子,然後帶來給我。','藥劑師營地的藥劑師格里克要你帶給他12個發狂的探險者大腦。','','到凜風峽灣的藥劑師營地找藥劑師格里克。','','','','',0), +(11311,'zhTW','壓制元素','如果你要像我們一樣,在此地生存,你一定要學會如何面對環境的挑戰。隨著北方山丘上的元素逐漸增生,如果你警覺性不夠,元素將會取走你的性命。$B$B在我們離開此地之前,必須要最後一次削減那些元素。你願意在我們繼續準備的時候協助我們嗎?$B$B你必須要殺死你在前哨附近雪丘遇到的冰裂片元素或咆哮颶風。','冬蹄營地的馴風者卡剛要你殺死8個山地的元素。你可以殺死冰裂片元素或咆哮颶風。','','到凜風峽灣的冬蹄營地找馴風者卡剛。','殺死山地的元素','','','',0), +(11312,'zhTW','冰凍林地','歷代以來,我的族人流傳著冰霜水精在林間跳躍,藏身在野外的傳說。孩提時期,我搜尋著她們的蹤跡,不顧父母親的勸告,直到我近乎凍死。$B$B這些日子,甚至不需要翻遍森林就能看到她們。我只能猜測她們決定現身的理由,但是我並不認為可以忽視這樣的改變。前去東南邊的冰凍林地,尋找水精,但是請多加小心;你會在途中經過扭曲林地。','和冰凍林地的露麗兒談談。','','','','','','',0), +(11313,'zhTW','冰的靈魂','在林地附近的冰元素曾經是我們的同伴,但是一股迅速且具破壞性的力量橫掃了這片土地,讓它們轉而攻擊我們!$B$B這就是我和我的姊妹們所承受的恐懼。我們向你現身就是希望你能幫助我們擊退這股蔓延進我們林地、毒害我的姊妹的腐化力量!$B$B我們一直在收集這些冰元素的核心,並妥善保管,直到某天,我們能將冰元素復原。你願意幫忙嗎?','冰凍林地的露麗兒要你帶給他15顆冰結之核。','','到凜風峽灣的冰凍林地找露麗兒。','','','','',0), +(11314,'zhTW','墮落的姊妹','西南邊的那座林地,過去跟這座林地並無二致。神秘的力量和異種魔法重塑了那片大地。林地的雪融了,居住在那兒的姊妹們被這突如其來的改變而陷入瘋狂。$B$B我們以為能夠和她們接觸,但是卻被攻擊,我害怕許多的姊妹們已經無可救藥,但是我不能放棄希望。$B$B帶著我的墜飾,前往西南方的鮮亮林地,使用它試著拯救我的姊妹們。','冰凍林地的露麗兒要你在7名冰寒水精身上使用她的墜飾。','','到凜風峽灣的冰凍林地找露麗兒。','拯救冰寒水精','','','',0), +(11315,'zhTW','狂亂的藤蔓','居住在西南方,鮮亮林地的水精們,從前照料著嬌豔的血色常春藤花壇,但是,那股使水精們瘋狂的力量,同樣也轉變了她們所最愛的常春藤。$B$B這些藤蔓如今會抓住那些粗心動物的腳,或者鞭笞靠近林地裡的生物。在我們收復這座林地之前,我們需要馴服這些藤蔓並且拔除它們。$B$B盡你所能的清除這些常春藤,它們的生長已經無法控制了。','冰凍林地的露麗兒要你去殺死8棵血色常春藤。','','到凜風峽灣的冰凍林地找露麗兒。','','','','',0), +(11316,'zhTW','扭曲林地之子','西邊的林地被轉化成一個可怕的地方,稱之為扭曲林地。駭人的野獸居住在樹林、石堆以及林地水池間。$B$B我不知道這些生物是從哪來的,或者是什麼可怕的力量給予他們生命,不過他們一定得被解決掉!$B$B我擔心要是他們掌控了林地,他們將會毫不留情的進行污染。去收拾掉這些殺害我們姐妹的生物。','冰凍林地的露麗兒要你去殺掉10個刺藤蠕行者。','','到凜風峽灣的冰凍林地找露麗兒。','','','','',0), +(11317,'zhTW','淨化','我們勇敢地進入裂木森林是因為我糾纏的夢境,夢境與我生死之交的座狼朋友,巫牙有關。他正在向外求援,而你一定要去幫他。$B$B但你無法和他溝通,或在其他座狼之中活動。我知道一個方法。$B$B首先,你需要透過冥想來淨化你的內在騷動。$B$B在霜刃峰的頂端有著一座聖壇,就在冬蹄營地的東北邊。山脈的西邊有一條小路通往山頂。$B$B在那裡冥想好淨化你自己,完成之後再回來找我。','鋼鐵之門的賢者霧行建議你去霜刃聖壇冥想,好淨化你的內在騷動。','','到凜風峽灣的鋼鐵之門找賢者霧行。','淨化你的內在騷動','','','',0), +(11319,'zhTW','黑魂看守者種子','西北邊的林地如今是扭曲林地,那裡曾經是一些林地看守者的家園。他們和姐妹們一起負責林地的維護。$B$B當林地產生變化時,那些姐妹們都死了,不過有些看守者設法活了下來。現在,他們在這塊土地上種植會使健康植物枯死的有毒植物。$B$B我會給你一個冰元素的冰結之核。當你摧毀一個孢子,便以冰晶冰凍它,使它不會再生。','冰凍林地的露麗兒要你摧毀8個孢子。','','到凜風峽灣的冰凍林地找露麗兒。','凍結孢子','','','',0), +(11322,'zhTW','淨化','最近我常做惡夢,都是關於一隻叫做巫牙的座狼。牠在向外求援,你一定得幫幫他。$B$B然而,你無法和牠說話,或是讓其他的座狼接受你。我知道方法。$B$B但首先,你需要透過冥想來淨化你的內在騷動。$B$B在霜刃峰的頂端有著一座聖壇,就在東北方。山脈的西邊有一條小路通往山頂。$B$B在那裡冥想好淨化你自己,完成之後再回來找我。','鋼鐵之門的看守者月葉建議你去霜刃聖壇冥想,好淨化你的內在騷動。','','到凜風峽灣的鋼鐵之門找看守者月葉。','淨化你的內在騷動','','','',0), +(11323,'zhTW','披著座狼皮','我從夢中得知巫牙在裂木森林西北邊緣,一個大雪紛飛的洞穴中。$B$B他身處巨大的危險之中!$B$B我想出了一種魔法偽裝,可以讓你在裂木森林時看起來像是一隻座狼。這種偽裝很脆弱,完全倚賴鬧鬼森林的奇異魔法在運作。這只能騙過那些座狼,讓你可以靠近巫牙。$B$B拜託,$c,找到他並且幫助他。','賢者霧行要你到裂木森林找出巫牙並且幫助牠。如果你失去了座狼偽裝,回去找賢者霧行再要一個。','','','','','','',0), +(11324,'zhTW','座狼首領','當你吃下了猛禽之鷹的雙眼之後,你應該就能看見賈爾沃並且撕裂他的喉嚨!$B$B$R朋友,去裂木森林的西邊找出賈爾沃並且殺掉他。事成之後,告訴霧行,我又是座狼首領了!','巫牙要求你殺掉賈爾沃。接著將座狼偽裝交還給鋼鐵之門的賢者霧行。','','到凜風峽灣的鋼鐵之門找賢者霧行。','','','','',0), +(11325,'zhTW','披著座狼皮','我從夢中得知巫牙在裂木森林西北邊緣,一個大雪紛飛的洞穴中。$B$B他身處巨大的危險之中!$B$B我想出了一種魔法偽裝,可以讓你在裂木森林時看起來像是一隻座狼。這種偽裝很脆弱,完全倚賴鬧鬼森林的奇異魔法在運作。這只能騙過那些座狼,讓你可以靠近巫牙。$B$B拜託,$c,找到他並且幫助他。','看守者月葉要你到裂木森林找出巫牙並且幫助牠。如果你失去了座狼偽裝,回去找看守者月葉再要一個。','','','','','','',0), +(11326,'zhTW','座狼首領','當你吃下了猛禽之鷹的雙眼之後,你應該就能看見賈爾沃並且撕裂他的喉嚨!$B$B$R朋友,去裂木森林的西邊找出賈爾沃並且殺掉他。事成之後,告訴月葉,我又是座狼首領了!','巫牙要求你殺掉賈爾沃。接著將座狼偽裝交還給鋼鐵之門的看守者月葉。','','到凜風峽灣的鋼鐵之門找看守者月葉。','','','','',0), +(11346,'zhTW','符文之書','巨人小徑,位於東南邊廣大的岩石區,裡頭到處都是鐵矮人。斥候回報中提到他們看到矮人哄騙地面上的石巨人,然後在他們身上雕刻符文。$B$B我無法推論他們的動機,不過我懷疑他們想要將這些巨人轉化成武器。這些鐵符文喚石者和束縛者隨身帶了大量的書本,當中一定包括了他們雕刻在巨人身上的符文。$B$B去取得這些書本的書頁,$n,收集它們,然後帶回來給我。','威德瓦堡壘的勘察員貝爾瓦要你將符文之書帶去給他。','','到凜風峽灣的威德瓦堡壘找勘察員貝爾瓦。','','','','',0), +(11348,'zhTW','指揮符文','你可以感受到我刻在石板上符文所散發出來的力量嗎?這些是鐵矮人所使用符文的縮小版。我們可以使用這些來停止它們的運作。$B$B帶著這個去巨人小徑,然後對一個尚未受到鐵矮人轉化的石巨人使用。$B$B巨人應該會服從你,但我將符文設計為一段時間之後就會恢復呈原本的狀態。巨人應該能在你對抗束縛者穆迪斯時成為有力的盟友,穆迪斯是巨人小徑的鐵矮人部隊領袖。','威德瓦堡壘的勘察員貝爾瓦要你測試指揮符文,並且擊敗束縛者穆迪斯。','','到凜風峽灣的威德瓦堡壘找勘察員貝爾瓦。','測試指揮符文','','','',0), +(11350,'zhTW','符文之書','灰燼圖騰酋長派我前往巨人小徑進行一次偵察任務,那是在東南方,越過了冰凍林地的一片遼闊的岩石高原。$B$B這個區域被鐵矮人所佔領,他們重新出現在地表似乎改變了巨人。$B$B鐵符文喚石者和束縛者帶著大本的書籍,書中一定紀錄著他們刻在巨人身上的符文。$B$B找到這本書的紙頁,收集它們,然後把它帶給我。這是我們唯一了解他們計畫的方法。','冬蹄營地的遠偵斥候潘比要你把符文之書帶給他。','','到凜風峽灣的冬蹄營地找遠偵斥候潘比。','','','','',0), +(11351,'zhTW','精通符文','我想我大概知道鐵矮人在做什麼了。他們所使用的工具是在鑄造的時候就已經灌注了魔法。$B$B然後他們用此來雕刻符文,這些圖案不只是文字。這些符文有力量能夠束縛、強迫與扭曲。$B$B要是我能有那樣一組工具,我就可以仿製書中的符文。我曾經在巨人小徑那邊的帳篷中找到一個工具盒,不過那個盒子是空的。幫我找找看類似的盒子,從他們那邊取得一組工具。','把鐵符文雕刻工具帶給冬蹄營地的遠偵斥候潘比。','','到凜風峽灣的冬蹄營地找遠偵斥候潘比。','','','','',0), +(11352,'zhTW','指揮符文','你可以感受到我刻在石板上符文所散發出來的力量?這些是鐵矮人所使用符文的縮小版。我們可以使用這些來停止它們的運作。$B$B帶著這個去巨人小徑,然後對一個尚未受到鐵矮人轉化的石巨人使用。$B$B巨人應該會服從你,但我將符文設計為一段時間之後就會恢復呈原本的狀態。巨人應該能在你對抗束縛者穆迪斯時成為有力的盟友,穆迪斯是巨人小徑的鐵矮人部隊領袖。','冬蹄營地的遠偵斥候潘比要你測試指揮符文,並且打倒束縛者穆迪斯。','','到凜風峽灣的冬蹄營地找遠偵斥候潘比。','測試指揮符文','','','',0), +(11358,'zhTW','誘因','如果我們能找出什麼東西吸引巨人在西北邊出沒,我們或許能在他們達成目的之前阻止他們。$B$B雖然我能解讀不少你帶來樣本上的符文,但我所不瞭解的符文,才讓我最憂心。當我前往巨人小徑時,我注意到有一個巨大破損的石板從地面突起,就在這個區域的東北方白雪堆積處,霜刃峰的山腳附近。帶著這個樣本,比對石板上的符文,看你能不能查出些什麼。','威德瓦堡壘的研究員艾德蘭要你去比較符文樣本與破損的石板。','','到凜風峽灣的威德瓦堡壘找研究員艾德蘭。','比對破損的石板上的符文','','','',0), +(11359,'zhTW','破壞麥加力斯','束縛者穆迪斯創造出了最強大的符文巨人,麥加力斯,並且帶領他們完成任務。擊敗麥加力斯會令他們群龍無首。等到遠征軍力抵達以後,我們的士兵們便能孤立並且打敗殘存的巨人,同時把鐵矮人大師從他們的營地趕出去。$B$B在巨人小徑之北,霜刃峰的丘陵一帶找出麥加力斯,並且打敗他!','擊敗麥加力斯,並且向威德瓦堡壘的研究員艾德蘭回報。','','到凜風峽灣的威德瓦堡壘找研究員艾德蘭。','','','','',0), +(11365,'zhTW','巨人的行進','東邊的巨人小徑,刻著符文的石巨人開始往北方遷移,靠近霜刃峰。他們的最後目的地是哪裡,我並不知道。$B$B石巨人身上刻著的發光符文引導著他們的旅程。打倒一些巨人。$B$B對巨人的屍體使用這個十字鎬,這樣可以敲下那些符文。等你收集了足夠多的樣本,就帶著你的發現回來。','冬蹄營地的賢者伊丹要你對4個符文石巨人的屍體使用符文追尋之鎬。','','到凜風峽灣的冬蹄營地找賢者伊丹。','分析符文石巨人的屍體','','','',0), +(11366,'zhTW','誘因','我們一定要找出什麼東西吸引巨人往西北方而去,這樣我們才能在他們抵達目的地前阻止他們。$B$B符文樣本給了我們一些線索,但那些未知的符文讓我有些憂慮。$B$B當我前往巨人小徑時,我注意到一個巨大破損的石板從地面突起,就在這個區域東北方的積雪之處,霜刃峰的山腳附近。帶著這個樣本,比對石板上的符文,看你能不能查出些什麼。','冬蹄營地的賢者伊丹希望你去比較符文樣本與破損的石板。','','到凜風峽灣的冬蹄營地找賢者伊丹。','比對破損的石板上的符文','','','',0), +(11367,'zhTW','破壞麥加力斯','束縛者穆迪斯製造了麥加力斯,做為符文巨人的核心,領導他們進行任務。打倒麥加力斯可以讓他們群龍無首。我會請灰燼圖騰酋長在我們往北邊前進時,挪出一些人手來消滅那些剩下的符文巨人。沒有了那些巨人,鐵矮人就無法對抗我們了。$B$B在巨人小徑之北,霜刃峰的丘陵一帶找出麥加力斯,並且打敗他!','擊敗麥加力斯,並且向冬蹄營地的賢者伊丹回報。','','到凜風峽灣的冬蹄營地找賢者伊丹。','','','','',0), +(11390,'zhTW','我有飛行器了!','哎呀,你在等什麼,還有工作等著完成呢!$B$B這是我們飛行器的鑰匙。去抓三袋聖物,並運回鋼鐵之門北側和南側的起吊平臺。我會替你標示出平臺位置。$B$B手腳快點!我們時間不多了!','鋼鐵之門首席考古學家要你去挖掘地點的底部運回3袋聖物,並將東西帶到鋼鐵之門北側或南側的平臺。$B$B使用飛行器上的繩鉤來進行此任務。$B$B完成後回去找鋼鐵之門首席考古學家。','','到凜風峽灣的鋼鐵之門找首席考古學家。','運送一袋聖物','','','',0), +(11391,'zhTW','巡邏鋼鐵之門','啊?你回來詢問另一個工作?$B$B嗯,好吧,鑰匙在這。我們今天不需要拖運,所以只要留心有沒有任何可疑的地方就好了,行嗎?$B$B我已經在她身上裝備了火箭和機關槍 - 只是以防不備之需。','你現在是鋼鐵之門的一流駕駛,所以鋼鐵之門首席考古學家要你去巡邏挖掘地點,並擊退任何想要進行攻擊的生物。$B$B待你完成你的巡邏後,回報給他。','','到凜風峽灣的鋼鐵之門找首席考古學家。','','','','',0), +(11393,'zhTW','探險者賈倫在哪?','$n,我的未婚夫賈倫,跟一群探險者往西邊去調查關於寒凜海岸的神器謠言。但那邊有很多魚人,我擔心他們會遭遇不幸。$B$B我相信你一定有空可以去看看他們對吧?西南邊正好有一條小路可以通往海邊,但要小心座狼還有其他在森林中潛伏的東西。','監督者艾琳娜‧石衣請你去尋找她的未婚夫,探險者賈倫。','','','','','','',0), +(11395,'zhTW','這是個天譴裝置','你剛剛摧毀的天譴生物手上抓著這個裝置。這個裝置上鑲著一顆珠寶,很像是天譴水晶頂端的那個。$b$b當然,探險家賈倫會很樂意看一看這個。','將天譴裝置交給寒凜海岸的探險者賈倫。','','到凜風峽灣的寒凜海岸找探險者賈倫。','','','','',0), +(11397,'zhTW','你還以為魚人已經夠臭了!','我最近到這裡是為了調查一些關於天譴軍的謠言。我以為這一帶的海岸只有魚人,可是我完全沒想到會看到這種場面!$B$B天譴軍團就在那邊,他們在改變那些魚人,還把任何他們派得上用場的東西全變成不死生物!$B$B$C,我們不能任由他們繼續製造更多同類,尤其是不能對魚人下手!在營地的西北邊有斜坡可以到海邊。在還沒有太遲之前對付那些天譴軍!','藥劑師安娜塔西亞要你殺死寒凜海岸上任何種類的天譴軍共15名。一旦你完成去凜風峽灣的藥劑師營地向她回報。','','到凜風峽灣的藥劑師營地找藥劑師安娜塔西亞。','殺死寒凜海岸的天譴軍','','','',0), +(11423,'zhTW','敵人的遺產','隨著我們的部隊向北裂境進軍,我們的敵人將不單單被擊敗。他們的房舍將被燒毀,他們的屍體將被我們的瘟疫所吞噬,所有他們存在過的痕跡都會被抹去。$B$B但身為一個知識的追尋者,我很擔心。東方的城鎮尼弗瓦很快將會被我們復仇臺地的部隊所夷平。曾在此生活的維酷詩人海古斯曾經寫過三首英雄史詩:雙子的英雄史詩、寒冬詛咒的英雄史詩和華爾琪英雄史詩。在尼弗瓦被摧毀之前取得它們。','前往鬼刃崗哨北邊的尼弗瓦,尋找寒冬詛咒的英雄史詩、華爾琪英雄史詩和雙子的英雄史詩。','','到凜風峽灣的鬼刃崗哨找抄寫員賽昆恩。','','','','',0), +(11452,'zhTW','沉睡的國王','從霸主手中掉落的一束羊皮紙中,你可以分辨出上面寫著在墓窖下舉行的儀式。$B$B然而,上頭顯示維酷之后,安格博妲在喚醒依米倫王上遇到了困難。這個儀式在被稱為冬之殿堂的巨大房間中舉行,就在夏勒布隆的北方盡頭。$B$B如果你動作夠快,你或許還來得及阻止她。','擊敗安格博妲王后並且阻止喚醒依米倫王的儀式。如果你成功的話,回到鎮西要塞向亞當斯隊長回報。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','','','','',0), +(11453,'zhTW','沉睡的國王','從霸主手中掉落的一束羊皮紙中,你可以分辨出上面寫著在墓窖下舉行的儀式。$B$B然而,上頭顯示維酷之后,安格博妲在喚醒依米倫王上遇到了困難。這個儀式在被稱為冬之殿堂的巨大房間中舉行,就在夏勒布隆的北方盡頭。$B$B如果你動作夠快,你或許還來得及阻止她。','擊敗安格博妲王后並且阻止喚醒依米倫王的儀式。如果你成功的話,回到冬蹄營地向灰燼圖騰酋長回報。','','到凜風峽灣的冬蹄營地找灰燼圖騰酋長。','','','','',0), +(11462,'zhTW','帥哥泰瑞','你們的人花了一大筆錢要我混進北海掠劫者中,也讓你有機會進來。$B$B我要你去找一位名叫帥哥泰瑞的傢伙,他就在無賴角。我告訴他,多人推薦你來這裡。$B$B穿上你的偽裝去見他,會有人帶你去找他的。$B$B在他們介紹你給更上面的人知道以前,你要證明你自己才行。不過,這都取決於你自己。記得,$N,一旦你進去之後,就只能靠你自己了!','穿上海賊偽裝包,並與無賴角的帥哥泰瑞聊聊。','','','','','','',0), +(12181,'zhTW','取名','喔,老天,到底花了多久的時間?我們究竟為這場該死的瘟疫花了多少的時間在上面?好不容易,在無盡的失敗之後,終於完成了。這東西...還有沒替他取個合適的名字!這片荒蕪...對了,「荒疫」!荒疫會把最後一絲生命都撕扯殆盡!$B$B<哈瑞斯交給你一個瓶子。>$B$B那麼,去見蝙蝠管理員托比亞斯,把樣本給他看。他會領你去毒怨之地的。','把荒疫採樣拿給新阿加曼德的托比亞斯‧薩寇夫看。','','到凜風峽灣的新阿加曼德找托比亞斯·薩寇夫。','','','','',0), +(11154,'zhTW','嚇到他們挫屎!','你,對,就是你…我需要你來幫幫我!$B$B派特洛夫為了要在要塞裡面製造榴散彈,派我上來這撿一些蝙蝠糞便。他派我來送死嘛!$B$B暗爪蝙蝠就倒掛在北邊的裂木森林裡面,但是除非要我回家,否則我一步也不要離開這座平台!$B$B但…但是你,可以幫我對吧?拜託拜託?!!!$B$B喏,這些是鞭炮。我想啊,如果你在蝙蝠底下放這些鞭炮,他們一定會馬上嚇到拉屎的!','收集10塊暗爪糞便,送去給鋼鐵之門的工程師費克努。','','到凜風峽灣的鋼鐵之門找工程師費克努。','','','','',0), +(11175,'zhTW','我的女兒','告訴我,這是真的嗎?前往低語峽谷的探險者都瘋掉了嗎?$B$B我女兒是探險者協會派往北方一個叫作鋼鐵之門地方的監督者。這些可怕的事情降臨在我們身上,我擔心她的安危。$B$B拜託,$c,我已經老得無法旅行。她的名字是艾琳娜。你能幫我確定她是否安然無恙嗎?','石衣老者請你去尋找他的女兒,監督者艾琳娜‧石衣,就在鋼鐵之門。','','','','','','',0), +(11176,'zhTW','監督運作','我們在此地的工作才剛剛展開。但現在我們從鎮西要塞帶來了這些飛行器,應該要能有些實質的幫助。$B$B但問題是我們缺少足夠數量的合格駕駛員。但北方裂木森林的問題越來越嚴重,我希望能專心地盡快完成這些事情,然後打包回家。$B$B如果你願意幫忙,請去跟我的首席考古學家談談。你在南北側的飛行器旁邊都可以找到他們。','探險者艾琳娜‧石衣請你前往鋼鐵之門,與鋼鐵之門首席考古學家談談。','','','','','','',0), +(11265,'zhTW','鑰匙與牢籠','在我們僅有的瞭解中,維酷人正進行一個非自然的儀式,一個「喚醒」儀式,在西邊的夏勒布隆。$B$B$n,你一定要阻止這件事。不管是誰或什麼東西被關在那些籠子裡,都一定要救他們出來。我猜,維酷人擁有鑰匙。$B$B我們最不願意見到的是那些奇怪的維酷人對我們造成威脅,或著更糟,他們把更邪惡的生物喚醒...','主母安卡要求你收集足夠的夏勒布隆鐵籠鑰匙,將10名夏勒布隆囚犯救出來。當你完成以後,回到冬蹄營地向她回報。','','到凜風峽灣的冬蹄營地找主母安卡。','釋放夏勒布隆囚犯','','','',0), +(11268,'zhTW','活屍橫行','你給予我們的協助遠超過我們所冀求,$n,但有件事情依舊令我困擾:那些叫做天譴軍團的東西。$B$B在這個世界底下的大地、空氣、水與火焰的精靈無法容忍他們的存在,卻似乎不打算對他們出手。我們要讓天譴軍團知道,他們在和誰作對!$B$B也許這個要求太過份了,但我希望你能回到西方,前往夏勒布隆,毀滅那些邪惡巢穴中違反自然的天譴軍團。記得也要查探夏勒布隆底下的喚醒之廳!','殺死10個不滅的看守者、4隻駭人的恐獸和2隻腐爛的活屍。然後,通知主母安卡你的成功,她就在冬蹄營地。','','到凜風峽灣的冬蹄營地找主母安卡。','','','','',0), +(11270,'zhTW','戰爭就是地獄','我們已經慢慢毀掉暴風城位於這座海岸的北方艦隊餘黨。位於西邊的屍體就是這場對抗的殘暴證明。$B$B這並不會影響我高雅的審美觀,不過這倒是對我們的生命造成了危險。$B$B在這片巫妖王的土地上,死者隨時都會甦醒過來化為對付我們的武器。拿著這把火炬 - 你得要去確認這種事不會發生。','復仇臺地的高階執行官安賽姆要你拿著點燃的火炬,使用它燒掉10具被丟棄在城鎮西邊的屍體。','','到凜風峽灣的復仇臺地找高階執行官安賽姆。','燒掉陣亡戰鬥員','','','',0), +(11277,'zhTW','邪惡深淵','他們將迪剛恩關在附近一個大型競鬥場的籠子裡。在我收集到的消息指出,掠龍者讓他們的囚犯與他們最強大的鬥士對打。他們會將輸家丟到地下室讓天譴軍團的死靈法師將他們變成食屍鬼!太恐怖了!$B$B不過事有先後順序!石板就散落在整個地城中。我們先來找到這些石板,你再去嘗試當個英雄吧。','俄特加德墓窖的葛羅倫費德要你去收集10個龍顱石板。','','到凜風峽灣的俄特加德墓窖找葛羅倫費德。','','','','',0), +(11278,'zhTW','回到瓦爾加德','為了發現這樣聖物,我們羞愧地損失了兩名最優秀的矮人。他們犧牲生命保住了這些資訊。$B$B<葛羅倫費德用一件破衣服把密碼與石板裹了起來。>$B$B帶著這個回到瓦爾加德。麥克索夫會知道該怎麼處理這些東西。$B$B至於我?我自己一個人沒問題的。我都已經撐了這麼久!','把葛羅倫費德的包裹交給瓦爾加德港口的貝爾川‧麥克索夫。','','到凜風峽灣找貝爾川·麥克索夫。','','','','',0), +(11279,'zhTW','綠色的龍蛋和幼龍','我們正在研究的新瘟疫非常驚人,我想繼續研究。$B$B要不要拿些元龍寶寶來試試看?!$B$B想想它的可能性,不只能感染人形生物,這種瘟疫可以感染任何物種!$B$B來,我多準備了一瓶瘟疫,就是為了這一刻,就是為了你。$B$B將它灑在西北方餘燼窩巢的蛋上,然後從孵化的染疫元龍身上採集樣本。','瘟疫使者提林加斯特要你去收集10個染疫元龍幼龍採樣,並送到新阿加曼德給他。','','到凜風峽灣的新阿加曼德找瘟疫使者提林加斯特。','','','','',0), +(11280,'zhTW','龍胃炎','等等,那讓我想到一個點子!假定瘟疫是因為散佈在蛋殼外面所以才殺不死這些雛龍呢?$B$B$n,我們一定得將瘟疫殖入牠們體內!$B$B我知道了!我這裡有一些染疫肉塊。將肉塊拿到餘燼窩巢,讓牠們吃掉!$B$B不,我們想得太狹隘了。我們來讓一隻在天空中飛翔的元龍降落下來吃掉肉塊。$B$B沒錯!$B$B站在肉塊附近並觀察接下來發生的事。沒錯,牠可能會攻擊你,不過這就是進步的代價。','新阿加曼德的瘟疫使者提林加斯特要你使用提林加斯特的染疫肉塊去吸引一隻元龍降落,並觀察牠吃肉塊的反應。','','到凜風峽灣的新阿加曼德找瘟疫使者提林加斯特。','觀察元龍瘟疫效果','','','',0), +(11282,'zhTW','恐懼的一課','等你像葛司一樣經歷過許多次的戰鬥之後,你會知道,打擊敵人最好的方法就是讓他們怕死怕得要命!$B$B但這些維酷人一點都不害怕。你殺死一個,另一個又衝上來...比起前一個吼得更大聲,武器也更大一把。$B$B唯一讓維酷人害怕的方法就是殺死維酷人中最壯最壞的傢伙。$B$B越過封鎖去和那些溫特斯考恩作戰吧,直到維酷英雄出現!然後殺死他們,把女王的旗幟插在他們的屍體上。讓他們學會什麼叫做恐懼!','葛司要你去殺死『放血者』兀夫、『災害』歐立克和古拿‧索瓦德森然後把被遺忘者旌旗插在他們的屍體上。在被遺忘者封鎖線附近殺死那些維酷人直到他們出現。','','到凜風峽灣的復仇升降梯找葛司中士。','刺穿『災害』歐立克的屍體','刺穿『放血者』兀夫的屍體','刺穿古拿·索瓦德森的屍體','',0), +(11283,'zhTW','貝爾海姆死亡人數統計','他們維酷人不斷不斷的從西邊的城鎮中湧來,看都看不到邊!$B$B葛司有個主意,你到城鎮「裡面」殺掉溫特斯考恩人。「馬上」他們就不會再來了!','葛司中士需要你去貝爾海姆殺掉16名溫特斯考恩維酷族人。','','到凜風峽灣的復仇升降梯旁找葛司中士。','貝爾海姆死亡人數統計','','','',0), +(11284,'zhTW','隔壁的雪人','如果哨兵不願意幫我,你願意嗎?我是橋那邊礦坑的工頭。我的手下正在為了提供探險隊用來挖通灰白之丘通道的武器而進行採礦。$B$B但有隻巨大的雪人入侵了礦坑,擋住了我們要開通的隧道!我們試著對牠大喊或是拿煙燻牠,但全都沒用。$B$B也許你可以用城鎮附近雪地中的霜角山羊肉做成一餐,把牠從睡眠中喚醒?拜託?我們束手無策了!','威德瓦堡壘的工頭寇畢要你去打倒碎角。','','到凜風峽灣的威德瓦堡壘找工頭寇畢。','','','','',0), +(11285,'zhTW','燒盡貝爾海姆!','殺死溫特斯考恩的人可能還不夠,也許多燒一些他們的房子吧!呃...還有他們的橋。我們應該把整個市鎮燒光才能確保安全!$B$B拿著這把火炬到貝爾海姆,前往西方,然後把舉目所見「全部」燒光!這就能好好教訓他們一頓。','葛司中士要你前去貝爾海姆,並使用葛司的火炬燒毀1間溫特斯考恩居所、1間溫特斯考恩瞭望塔、1座溫特斯考恩橋樑以及1間溫特斯考恩兵營。','','到凜風峽灣的復仇升降梯旁找葛司中士。','燒毀溫特斯考恩居所','燒毀溫特斯考恩瞭望塔','燒毀溫特斯考恩橋樑','燒毀溫特斯考恩兵營',0), +(11288,'zhTW','閃耀的聖光','<愛力士一面喘息,一面試著開口說話。>$B$B我是銀白十字軍的特使,身負著神聖的職責。$B$B我們的部隊在瘟疫之地傷亡慘重,藉由黎明曙光淨化了這個神器,使之再次恢復純淨。為了喚醒神器我們死了許多的同伴。$B$B還有機會...還有時間。$B$B神器被丟入逝者之穴,就在我們下方深處,由殘酷的亡者所守護。$B$B<愛力士的身體流閃著令人目眩的光芒。>$B$B聖光。將會。保護。你。','俄特加德墓窖的『誓縛』愛力士要你去取回神聖法器。$B$B這是個有時間限制的任務。','','到凜風峽灣的俄特加德墓窖找『誓縛』愛力士。','','','','',0), +(11289,'zhTW','受榮耀的指引','<愛力士微笑著。>$B$B榮耀歸諸聖光。你辦到了!$B$B<愛力士咳嗽。>$B$B拿著神器回到瓦爾加德。埃盧隆‧真刃領主等著它的回歸。$B$B朋友,帶著榮耀而戰。永遠。榮耀。$B$B<愛力士斷了氣。>','將神聖法器交還給瓦爾加德的埃盧隆‧真刃領主。','','到凜風峽灣的瓦爾加德找埃盧隆·真刃領主。','','','','',0), +(11295,'zhTW','展開進攻','似乎沒有人對維酷人有任何深入的瞭解。我們的紀錄上顯示他們已經好幾個世紀不曾活動。但他們現在卻在這裡,在我們要對付阿薩斯的時候。$B$B你所帶回來的地圖顯示了一件事,如果我們的部隊想要在北裂境有任何進展的話,我們就得打敗他們。$B$B我們之中最優秀的士官,一位名為葛司的憎惡體負責監督整個封鎖線。協助他對貝爾海姆展開先發制人的攻擊。如果維酷人進攻的話,他們一定會從那邊開始。','和封鎖線的葛司中士談談,他就在凜風峽灣的復仇臺地西邊的升降梯附近。','','','','','','',0), +(11299,'zhTW','審判競技場','你或許在收集石板的時候已經看過迪剛恩被囚禁的房間了。就沿著這條走廊,然後走下樓梯。迪剛恩就在樓梯底部的房間,牢牢地鎖著!$B$B下去那邊並且找到他。也許你有辦法從他口中問出密碼。','前往俄特加德墓窖的審判競技場,找到迪剛恩。','','','','','','',0), +(11300,'zhTW','審判競技場中的慘敗','如果你擊敗了其他的鬥士,歐路夫就會出現。這大概是我們取回密碼的唯一方法。穿上一雙好靴子,我們得要在審判競技場忙上一會兒了。如果你真的取回密碼,把它拿給墓窖入口的葛羅倫費德。$B$B我?別擔心我!我們只差一點就能找到人類血緣中失落的環節了!','擊敗審判競技場的鬥士們,然後面對『暴力』歐路夫。擊敗歐路夫然後取回上古密碼。$B$B將上古密碼交給俄特加德墓窖入口的葛羅倫費德。','','到凜風峽灣的俄特加德墓窖找葛羅倫費德。','','','','',0), +(11303,'zhTW','伏擊','貝爾海姆的維酷人已經被徹底擊敗,無庸置疑。但他們的領袖依舊躲在鎮上不肯放棄。$B$B葛司派出黎戴爾和他手下的刺客在西北方進行伏擊。你去和黎戴爾談談看要如何把維酷酋長引出來。然後你們把他宰了。你要確實地殺死他。','在黎戴爾的埋伏處和黎戴爾談談。','','','','','','',0), +(11304,'zhTW','新阿加曼德','我擔心我們在復仇臺地的設備並不是最好的。畢竟這裡是個軍事哨站。$B$B我要你把這瓶菌種帶給新阿加曼德的首席瘟疫使者哈里斯,沿著路經過貝爾海姆往南,然後再往西。他們那邊的設備比較好 - 他會知道該怎麼做。$B$B動作要快,$n。我們的敵人越來越多也越來越強。我們需要發展出實際能用的武器來對抗他們!','把黎珊達的菌種帶給首席瘟疫使者哈里斯,他在凜風峽灣西部的新阿加曼德。','','到凜風峽灣的新阿加曼德找首席瘟疫使者哈里斯。','','','','',0), +(11305,'zhTW','特製的配方','我們持續噴灑維酷人的村莊已經一個禮拜了,可是那些混蛋就是不會死。$B$B面對現實吧,$n,到目前為止,我們的瘟疫已經作用在人類、矮人、狗、牲畜...你想得到的都有了。隨著菌種適應越來越多宿主,雜質也就隨之增加。我們所需要的,是專為維酷人生理所製的菌種。$B$B霍葛萊的酋長在我們接管該處之後就逃之夭夭了;你可以在西邊找到他。身為一位掠龍部族的族長,他的血液很理想。','從索瓦爾德的身上得到掠龍族王之血,他就在索瓦爾德營地中,並將血液交給新阿加曼德的首席瘟疫使者哈里斯。','','到凜風峽灣的新阿加曼德找首席瘟疫使者哈里斯。','','','','',0), +(11306,'zhTW','進行高溫攪拌','到目前為止,你做得很好,$n。我願意教你一些進階的技術,使你能對這場瘟疫有更深的認識。$B$B拿著這個空瓶子,裝滿我左手邊大鍋中的鮮血。並且把它調進我右手邊瘟疫樣本裡面,直到你獲得了安定的混合物為止。','用維酷血液之鍋的血裝滿空的藥劑師燒瓶,接著將維酷血液瓶混進哈瑞斯的瘟疫樣本中,直到你獲得了安定的化合物為止。$B$B任務完成以後,向首席瘟疫使者哈里斯回報。','','到凜風峽灣的新阿加曼德找首席瘟疫使者哈里斯。','','','','',0), +(11398,'zhTW','這是個天譴裝置','你剛剛摧毀的天譴生物手上抓著這個裝置。這個裝置上鑲著一顆珠寶,很像是天譴水晶頂端的那個。$b$b當然,藥劑師安娜塔西亞會很樂意看一看這個。','將天譴裝置交給藥劑師營地的藥劑師安娜塔西亞。','','到凜風峽灣的藥劑師營地找藥劑師安娜塔西亞。','','','','',0), +(11399,'zhTW','關閉那些護盾','注意看控制器的底部這邊。我猜你如果靠那些天譴水晶夠近,你應該可以使用控制器關閉他們的護盾。如果他們的護盾失去作用,那應該可以輕而易舉地摧毀這些東西。$B$B你有足夠的勇氣進行這件事嗎,$n?如果你能關閉那些護盾並且摧毀水晶,我可以保證會有可觀的報酬。$B$B你應該不會拒絕減少天譴軍的數量吧,尤其用魚人做成的那些?','藥劑師營地的藥劑師安娜塔西亞要你摧毀3個天譴水晶。','','到凜風峽灣的藥劑師營地找藥劑師安娜塔西亞。','摧毀天譴水晶','','','',0), +(11415,'zhTW','兄弟的背叛','霧行在我夢裡出現過!如果你是他的朋友,你就是我的朋友。$B$B直到上一次月圓之前,我一直是狼王。直到那頭詭異的白座狼,賈爾沃,從北方來到此地以後,挾著那些曾是我兄弟的狼群幫助,很快的當上了座狼首領。牠的行為令人感覺不太自然。$B$B如果你要幫忙,首先你一定要殺掉背叛我的傢伙。$B$B畢歐莫夫在一個兩腳的叫做鋼鐵之門的西北邊狩獵。另外去東南邊尋找瓦爾格,西矛哨塔附近。$B$B他們不會被你的模樣給愚弄的。','巫牙要求你殺掉背叛他的座狼,畢歐莫夫和瓦爾格。成功以後,在偽裝的情況下向巫牙回報,他就在裂木森林裡。$B$B如果你遺失了你的座狼偽裝,向賢者霧行要一個替代品。','','到凜風峽灣的裂木森林找巫牙。你需要座狼偽裝。','','','','',0), +(11417,'zhTW','雌鷹之眼','賈爾沃將他自己隱藏在一道邪惡的魔法之後。沒有人可以看到他,除非他想要讓你看到。不過,也許有個機會可能可以讓我們看到他。$B$B我的敵人,那隻大鷹,猛禽之鷹,傳說擁有可看到所有東西的雙眼。如果你去奪得她的雙眼,那麼你就一定能夠看到賈爾沃。$B$B猛禽之鷹將她的巢築在一座瀑布下,就在人稱為斯考恩的維酷領地西南方。只要你碰觸她巢裡的蛋,她就會從天而降來殺你。$B$B去取得她的眼睛。','巫牙要你去取得雌鷹之眼。完成後穿上偽裝,回到裂木森林去找牠。$B$B如果你不知為何失去了座狼偽裝,就回去找賢者霧行再要一個。','','到凜風峽灣的裂木森林找巫牙。你需要座狼偽裝。','','','','',0), +(11422,'zhTW','兒子的三叉戟','<從他在石頭上製造出的抓痕看來,你辨認出幾個符號:一個三叉戟,一個屍化魚人,太陽,一條沈船,還有一個代表你的粗略形狀。>$B$B<苦思這個魚人想要傳達的意思。顯然他要你去寒凜海岸取得一隻三叉戟,不過太陽圖樣很難懂。直到你了解他指得是他的兒子。>$B$B<他的兒子被轉變為屍化魚人了!他要你去沉船的附近找到他的兒子,並將他的三叉戟帶回來。>','老冰鰭要你去取得腐鰓的三叉戟。將東西帶回他那位於寒凜海岸的小島上給他。','','到凜風峽灣的寒凜海岸找老冰鰭。','','','','',0), +(11428,'zhTW','守護者凋葉','你一直都是我們最好的朋友和盟友,$n。還有一件事我一定得請你幫忙。$B$B你已經看過扭曲林地和住在那裡的野獸腐化的情況。這些黑心的守護者將會一直從林地的水及土中繁衍出這些憎惡體,除非我們起身反抗。$B$B這些黑心守護者中最強大的那位叫做守護者凋葉。去殺了他,$n,並開啟恢復林地的方法,就像你曾經挽救了我的姐妹一樣。','冰凍林地的露麗兒要你去殺了守護者凋葉。','','到凜風峽灣的冰凍林地找露麗兒。','','','','',0), +(11434,'zhTW','被遺忘的寶藏','我透過專精那些海賊不在意的財寶而致富,像是藝術品、古董或是收藏家的寶貝。$B$B許多年前黑色康拉德的艦隊在南方沉沒。所有的黃金和珠寶都被潛水伕撈走了,但兩件古老的聖物還在藏在海底。一件是博物館級的阿曼尼花瓶,另一個則是雄鷹雕像。$B$B幫我把這兩個東西拿回來,我可以拿別的海賊寶藏回報你。我還可以給你一點東西讓你的水底冒險容易一些。','無賴角的帥哥泰瑞要你從南方的沉船中帶給他1個阿曼尼飾瓶和1個雄鷹刻像。','','到凜風峽灣的無賴角找帥哥泰瑞。','','','','',0), +(11455,'zhTW','錢的氣味','使我們海賊出名的事情有很多,但是衛生可不在其中。許多海賊船上的老鼠比人還要多上個五六倍。$B$B也難怪我們入島不久後,所有的熊都得了狂犬病。長話短說,頭目要牠們全死光。$B$B事情就是這樣,我從暴風城中得知了一種野熊麝香的香味配方。我們殺了熊,再賣掉麝香。我給咱們找到了一個大好的生意機會。你覺得如何?','凜風峽灣,無賴角的帥哥泰瑞要你在附近從狂暴棕熊身上取得4個野熊麝香。','','到凜風峽灣的無賴角找帥哥泰瑞。','','','','',0), +(11456,'zhTW','餵飽倖存者','我們巨牙海民大多以漁獲作為糧食。當需求提高的時候,我們偶爾也會狩獵陸地動物。$B$B附近的伊斯考村最近被海賊所攻擊,倖存者持續地湧入。$B$B我們的漁獲最多只能支撐這一週,島上有許多鍬牙,而他們身上的肉十分豐富。$B$B請幫助我的同胞,狩獵那些大型野獸,並且把牠們的肉帶回來。','卡瑪廓的長者阿推克要你從群矛之島的海島鍬牙身上取得6個海島鍬牙肉。','','到凜風峽灣的卡瑪廓找長者阿推克。','','','','',0), +(11457,'zhTW','卡瑪廓備戰','依斯里魯克,戰爭之靈,族人們描述他是一頭銀色的雄鷹。故事中訴說著依斯里魯克如何和一百隻座狼對抗,拯救他的幼禽。$B$B如今,輪到我們了,同樣要對抗我們的敵人,救出我們的同胞。我們需要製造新的武器。霜翼奇美拉的角既鋒利又能方便地做成矛的尖端,而牠們就棲息在島上積雪的地方。把你所能找到最優質的角帶給我吧。','長者阿推克需要你取得3根奇美拉角。','','到凜風峽灣的卡瑪廓找長者阿推克。','','','','',0), +(11458,'zhTW','為伊斯考復仇','斯里魯克的圖騰已經準備好了,$n,為此我該好好答謝你。我們必須暫時拋開和平手段,對那些攻擊我們的土地與族人的敵人進行反擊。$B$B那些掠奪伊斯考的海賊奴隸販子,發狂似的將所有的俘虜全部屠殺。前往伊斯考的東部執行這場復仇。拿著這把號角,當你需要協助的時候,用它呼喚我的同胞。','長者阿推克需要你去伊斯考殺掉8名北海奴隸販子,當你需要協助的時候吹響卡瑪廓號角。','','到凜風峽灣的卡瑪廓找長者阿推克。','','','','',0), +(11459,'zhTW','賽吉恩說','是這樣嘛,老兄,你要我幫你找出幾個宰了船員的膽小鬼叛徒?$B$B朋友,你得先把呱呱帶給我才行啊,這樣我才能告訴你誰是壞蛋,老兄。錯,錯,是呱呱告訴你。你要來這裡,靠自己的眼睛找出來才行。$B$B還有把切切帶來這裡嘿,小丑。滾唄,朋友。','回到帥哥泰瑞身邊,請他解釋賽吉恩說了些什麼。','','','','','','',0), +(11461,'zhTW','DEPRECATED ','','','','','','','','',0), +(11463,'zhTW','北海海賊','過去的幾周中海賊對補給船隻的攻擊持續增加。我們僱用了一個哥布林間諜來協助我們的探員滲透進入可疑的海賊中。$B$B這一群北海掠劫者在加爾文暗礁的無賴角一帶活動。我們對他們了解有限,但我們知道希爾瓦娜斯想要他們領袖的人頭。$B$B你擁有很高的評價,$N.如果你接下這個任務,我們就可以讓軍隊的注意維持再對抗阿爾薩斯的部隊上。你願意幫忙嗎?','找到格瑞希克斯·斷紡,他在嚎風峽灣的西南邊海岸,加爾文暗礁的最北端。','','','','','','',0), +(11464,'zhTW','賭債','我聽說你替泰瑞做了一些事情。我是希望能有一些可信賴的人出現。$B$B是這樣,海賊都喜歡賭博。但是呢,往往都不愛付賭債。$B$B如果你對幫我收集一些銅板有興趣的話,我倒是很樂意分你一份。$B$B我們可以從簡單一點的開始。『銀月』哈利是個有點古怪的傢伙,收集了一大堆昂貴的血精靈小飾品在他的帳篷裡 - 不過每次見到我的時候,都老愛裝出一副破產的模樣。去拿回我的黃金吧。','無賴角的塔廬克要你去拿回『銀月』哈利的欠款。','','到凜風峽灣的無賴角找塔廬克。','','','','',0), +(11466,'zhTW','傑克喜歡他的飲料','我們下一個顧客,傑克‧亞當斯,可不像哈利那麼好打發。他通常一整天都和朋友在喝酒,全都是強悍的海賊。這次不要使用武力,免得弄得太難看。$B$B看你有沒有辦法利用他的飲酒習慣。一個人在喝醉前能喝的酒也就這麼多。$B$B說不定某個酒吧女侍能幫上忙。等他醉倒的時候,看你有沒有辦法伸手摸進他的口袋,拿走屬於我的東西。','塔廬克要你去拿回傑克‧亞當斯的欠款,他就在凜風峽灣的無賴角。','','到凜風峽灣的無賴角找塔廬克。','','','','',0), +(11467,'zhTW','死人的賭債','你或許聽過黑色康拉德,他是這一帶最有名的海賊。$B$B嗯,他和我賭過一把,而且他也沒付錢。$B$B我很想把帳收回來,但問題是...這傢伙死了。$B$B我原本是打算將這筆帳給刪掉,但當我看到這個...$B$B<塔廬克攤開了群矛之島的地圖,東北邊的高原上有著一個X。>$B$B他把財寶藏在巨牙海民的島上。我要你去拿到它。如果讓那個爛貨沒付錢就逃過了,我一定會遭天譴的。','無賴角的塔廬克要你尋找黑色康拉德的寶藏,在群矛之島東北角的高原上,就在伊斯考的北方。','','到凜風峽灣的無賴角找塔廬克。','','','','',0), +(11469,'zhTW','清潔肥皂','是呀,我得在瘋子喬納回來前,把甲板打掃得一塵不染。但我沒辦法靠著我的手和膝蓋辦到!$B$B問題是,我們的肥皂用完了。雖然這比較算是你的問題而不是我的,夥伴。既然你是菜鳥,我有特別任務要交給你。$B$B這個島上的西北海岸,那邊有一大堆海獅。在那些浮冰你會找到它們的老大,大羅伊。把他的油脂帶回來,我就可以把它變成你從所未見的超棒肥皂!','史加斗‧霜首要你去拿大羅伊的油脂作為他魔法清潔肥皂的主要材料。等你拿到之後,回到無賴角東邊的海賊船找她。','','到凜風峽灣的無賴角找史加斗·霜首。','','','','',0), +(11471,'zhTW','魚兒上勾','我知道你為什麼在這,$n。你是被派來殺掉我們的首領,喬納‧斯德林。$B$B我想要提供我的協助。喬納的領導地位威脅著我們的行動。$B$B同時攻擊部落和聯盟的艦隊?簡直是自殺。巨牙海民只要一離開這種氣候環境就會迅速死去,還想把他們賣作奴隸?真是場災難。$B$B喬納的藏身處就在西邊的一處洞穴裡。把他的望遠鏡帶來給我當作證明,在我接手領導後第一個行動就會是停止攻擊你們的盟友。','無賴角的安妮‧波恩要你將喬納‧斯德林的望遠鏡帶給她。','','到凜風峽灣的無賴角找安妮·波恩。','','','','',0), +(11473,'zhTW','叛徒潛伏','我們的第二把交椅,安妮‧波恩,最近有些偏執。她似乎很肯定我們之中有人滲透進來,你相信嗎?$B$B不管怎樣,我們有個蠢人也會用的法子可以來判斷這些謠言。看到了嗎,那邊的老賽吉恩是個可靠的巫醫。他的家族可以追溯到祖爾...呃咳咳。$B$B告訴他我們需要他的預言技巧。我得先警告你,$n,我們之中也只有一兩個人聽得懂賽吉恩在說什麼。','和無賴角的賽吉恩談談。','','','','','','',0), +(11476,'zhTW','切切和呱呱','這裡的海賊...我們有一些獨特的講話方式。賽吉恩有...許多不同的特殊講話方式...全都混在一起。$B$B我只知道他想要一隻青蛙和一把小刀。$B$B你或許可以從『銀月』哈利那邊弄到便宜的小刀。至於青蛙,鎮上到處都是,隨便抓一隻,然後把刀子一起拿給他。$B$B我痛恨處在那隻小動物的情況下,如果你知道我在講什麼的話。','從『銀月』哈利那邊拿到一把閃亮小刀,然後抓一隻無賴蛙。把這些交給無賴角的賽吉恩。','','到凜風峽灣的無賴角找賽吉恩。','','','','',0), +(11479,'zhTW','『鴉腿』丹','呱呱在講話,碰友。『鴉腿』丹就那邊那條遠遠的船上。$B$B最好跟緊那個爛咖,老兄。告訴他咱不是給他搞好玩的。你把他浸龍骨之後就去跟泰瑞講。','去挑戰『鴉腿』丹,他就在無賴角的其中一條船上。完成之後和帥哥泰瑞談談。','','到凜風峽灣的無賴角找帥哥泰瑞。','','','','',0), +(11480,'zhTW','見見副司令','你為我們做得所有事並未被忽略,$n。我們的副司令,可愛的安妮‧波恩,對你到目前為止所做的事印象深刻,想要會一會你。','與無賴角的安妮‧波恩談談。','','','','','','',0), +(11527,'zhTW','慈悲號上的叛變','哎,我們出了點問題,兄弟。我的砲手叛變了!我的船員得一面在甲板上給索洛夫一點顏色瞧瞧,一面還得應付底下叛亂的砲手。$B$B你得下去對付那些老水手,並且把船尾大砲要用的火藥粉拿來。$B$B等你填充好大砲,索洛夫就死定了,而戰利品也手到擒來!','船長艾爾利斯要你從船艙中拿回5個桶裝火藥粉。他就在凜風峽灣的慈悲姐妹號之上。','','凜風峽灣然後登上慈悲姊妹號找船長艾爾利斯。','','','','',0), +(11529,'zhTW','索洛夫的戰利品','我的船員已經把大砲裝填妥當,就等著你啦,兄弟。它就躺在船尾甲板,就在船的另一頭。快就位,等到索洛夫進入視線的時候就開火!$B$B等我們把那個旱鴨子給打下來,你就要去替我們收取戰利品,你也知道我們沒辦法離開這艘該死的船!把戰利品帶給我,你也可以分到一份 - 盾牌...','使用大砲殺死索洛夫,取得索洛夫的戰利品。把索洛夫的戰利品還給慈悲姐妹號的船長艾爾利斯。','','凜風峽灣然後登上慈悲姊妹號找船長艾爾利斯。','','','','',0), +(11530,'zhTW','阿薩瑞特之盾','這是你的盾牌。我希望它不會詛咒你,像它詛咒我和我的船員一樣。你不必急著回家,不過你也不能待在這裡...我很確定有人對於拿回這個東西很感興趣。$B$B好啦,現在帶著這個東西滾下我的船吧!','將阿薩瑞特之盾還給卡瑪廓的歐弗斯,他在凜風峽灣的遠古升降梯。','','去凜風峽灣的遠古升降梯找卡瑪廓的歐弗斯。','','','','',0), +(12566,'zhTW','幫助冬蹄營地','我是坦卡族的遠偵斥候納尼克,冬蹄營地的酋長派我出來尋找對抗維酷的盟友。他們聚集在我們村落的西方和南方,雖然我們每死一個,就殺死他們十個,但我們撐不了多久了。$B$B藥劑師史凱利斯答應要派出勇敢的$c們來西北邊幫助我們。你會協助我的人民抵擋維酷的襲擊嗎?$B$B沿著西北方的路走,越過河川,進入山邊的丘陵前往冬蹄營地。','與冬蹄營地的灰燼圖騰酋長交談。','','','','','','',0), +(11153,'zhTW','突破封鎖線','我們的船隻全沉了!我們需要你的幫助來突破設在破碎海峽的海賊封鎖線!$B$B帶著這些榴散彈,然後從哈洛梅瑟『借給』我們的飛艇搭個便車。他會帶你飛過那些海賊流氓的船隻,你可以給他們一點好看!$B$B如果你沒辦法把他們炸成碎片,我怕我們就永遠也無法突破封鎖線了。','帶著派特洛夫的榴散彈然後把它們往海賊多的地方丟,殺死或摧毀25個封鎖線海賊以及10個封鎖線火砲。一旦你完成行動,向鎮西要塞的投彈手派特洛夫回報。','','到凜風峽灣的鎮西要塞找投彈手派特洛夫。','','摧毀封鎖船的火炮x10','','',0), +(11155,'zhTW','又是鍬牙湯?','現在我們牲畜都離奇失蹤了,我們最好盡快重新補給,否則在我們對付這周圍的野獸之前就要先餓死了!$B$B由於我負責要餵飽這群人,所以我需要你前往東方幫我找一些肉回來。除此之外,我還想找人幫我們煮些柔軟的鍬牙肉。$B$B要小心那些雄鹿…牠們的脾氣不太好!','主廚黑壺要你帶6塊鍬牙肉,回到鎮西要塞交給她。','','到凜風峽灣的鎮西要塞找主廚黑壺。','','','','',0), +(11157,'zhTW','邪惡窩巢','$n,除了你之外我信不過別人來處理這件事。我要消滅東南方燃燒森林中的元龍蛋和元龍幼龍!$B$B自從我們抵達此地,餘燼窩巢就一直在起火,一定有某種邪惡的魔法在作用。而且最近居然還有擴散的現象。我的手下告訴我,如果我們不盡快處理這件事,幾週之後我們就要被火焰四面包圍了!$B$B去那裡掃除那些元龍蛋和元龍幼龍以解除我們的威脅。','消滅15個元龍蛋和15隻元龍幼龍,然後向亞當斯隊長回報,他就在凜風峽灣的鎮西要塞。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','摧毀元龍蛋','','','',0), +(11167,'zhTW','新種瘟疫','就在阿薩斯將我們扭曲成這種可悲的存在之後不久,皇家藥劑師學會致力於創造出我們自己的瘟疫。一種能吞噬所有血肉的瘟疫:活人、死人或是不死生物。$B$B我們已經成功研發出這種瘟疫,而我們就是來到此地要將它傳播給天譴軍團。$B$B聯盟攔截了船隻,上面有我們從幽暗城實驗室送來的最新菌種。前往東南方的沉船地點,搶救你看到所有的容器。','復仇臺地的藥劑師黎珊達,要你從東南方的沉船中回收10個完好的瘟疫容器。','','到凜風峽灣的復仇臺地找藥劑師黎珊達。','','','','',0), +(11168,'zhTW','摻入混合物','我有種感覺我們的瘟疫感染力,多少被漫長的船期所影響了。現在需要一種強力的毒素來強化這株菌種的效力。$B$B海灘上的螃蟹是棕色外殼的潮行蟹的遠親。那種較小的熱帶種產出一種足以讓巨魔昏倒的麻痺毒。$B$B而我們都知道東西越大就越好!本地種的腺體越大,產出的毒素按理說也就越強。幫我帶一些回來!','從巨型潮行蟹的身上收集3具巨型毒素腺體,交給藥劑師黎珊達,她就在凜風峽灣的復仇臺地上。','','到凜風峽灣的復仇臺地找藥劑師黎珊達。','','','','',0), +(11170,'zhTW','海上測試','我們剛剛才聽說聯盟部隊將要派出援軍。沒有比現在更好的時機了!$B$B我們正好需要測試的目標,而這些北方艦隊的後備軍人將會非常適合!$B$B帶著這些瘟疫瓶,然後和蝙蝠管理員卡蜜兒談談。告訴她你需要徵召一隻騎乘蝙蝠來協助我們。$B$B一旦你抵達海上,將這些瓶子丟向增援艦隊。我等不及要看結果了!','和蝙蝠管理員卡蜜兒交談,然後騎上一隻蝙蝠去攔截聯盟的援軍。一旦抵達艦隊上空,使用瘟疫之瓶去感染16個北方艦隊預備兵。','','到凜風峽灣的復仇臺地找藥劑師黎珊達。','感染北方艦隊預備兵','','','',0), +(11182,'zhTW','根本原因','世界萬物處於一種自然的平衡,唯有當受到與自然和諧不同調的干擾時,平衡才會被打亂。$B$B你殺死那些幼龍和飛龍的努力都是白費功夫。讓魔法燃燒樹林不停擴張的元兇是那些最近才甦醒的維酷人和他們的主人,史克德‧龍裔。$B$B如果你想要在手上沾染鮮血,我建議你從他們開始。你可以在餘燼窩巢的南邊找到他們的巢穴。','殺死5名掠龍管理員和史克德‧龍裔。等你完成之後,向餘燼窩巢的餘燼窩巢古樹回報。','','到凜風峽灣的餘燼窩巢找餘燼窩巢古樹。','','','','',0), +(11187,'zhTW','法師中尉瑪歷斯特','這實在太可惡了!那些元龍正在攻擊要塞!$B$B那種野獸應該要在你處理牠們的幼獸時就予以驅逐。$B$B你有好好處理牠們,對吧?$B$B$n,現在需要直接的行動。和我的顧問,法師中尉瑪歷斯特談一談。他會幫助你抓住這些煉獄生物。','亞當斯隊長要你去和他的顧問,法師中尉瑪歷斯特談談,他就在鎮西要塞。','','','','','','',0), +(11188,'zhTW','兩個錯誤...','現在我們已經激怒了那些餘燼窩巢的元龍,他們很有可能加強對要塞的攻勢,這樣可不太好。我最討厭一個錯誤還牽扯到另一個,但顯然我們現在沒得選擇,非得毀滅這些生物不可。一個令人懊悔的行動,但人生不如意事,十有八九。$B$B帶著我的魔杖。我已經增長了它的射程,雖然它的傷害可能還比不上給他們一拳。但終究,它只是要引起元龍的注意。','鎮西要塞的法師中尉瑪歷斯特交代你摧毀3隻元龍。','','到凜風峽灣的破碎海峽找法師中尉瑪歷斯特。','','','','',0), +(11190,'zhTW','一個尺寸可不是全部適用','$g小夥子:小姑娘;,哪個天才把我們的火砲做成非標準的尺寸?現在我們得特製砲彈才能發射這些勞什子的鬼東西!$B$B我想拜託你去外頭把我們發射過的砲彈找回來。我相信這些愚蠢的傢伙應該會把砲彈射得到處都是,南方和東方應該很多。$B$B<砲手張開手比畫了一下砲彈大概的大小。>$B$B這絕對比我們重做新的快上不少。','砲手伊利要你收集10顆鎮西砲彈,然後回到鎮西要塞交給他。','','到凜風峽灣的鎮西要塞找砲手伊利。','','','','',0), +(11199,'zhTW','向斥候諾雷斯回報','$n,既然那些可惡的原生生物已經搞定了,我來交付你其他的任務。$B$B我的斥候向我回報了一些南邊被遺忘者的可疑行蹤,看來,他們對維酷小鎮霍葛萊圖謀不軌。$B$B我需要你私下接管那兒調查的任務,和斥候諾雷斯談談他發現了些什麼,然後從那裡開始著手進行工作。$B$B他最後回報地是餘燼矛塔,就在霍葛萊的西方。','亞當斯隊長要求你向餘燼矛塔的斥候諾雷斯回報。','','','','','','',0), +(11202,'zhTW','任務:永燃之焰','自從有記憶以來那些被遺忘者就一直在圖謀不軌,那些裝滿爛泥的瘟疫槽就是其中一部份。$B$B請容我說一句,$g先生:女士;,我們應該要在他們能使用這些之前把它給全毀了。我自己從餘燼窩巢準備了一大捆火炬。這些東西可以燒上幾天幾夜!$B$B拿去,我想你一定比我更擅長摧毀那些東西。','餘燼矛塔的斥候諾雷斯,要你使用永燃火炬摧毀霍葛萊周圍的四個瘟疫槽。','','到凜風峽灣的餘燼矛塔找斥候諾雷斯。','摧毀西南部藥劑罐','摧毀西北部藥劑罐','摧毀東北部藥劑罐','摧毀東南方的瘟疫槽',0), +(11218,'zhTW','危險!炸彈!','$n,隊長指派我一個任務,而我需要你的幫忙。$B$B一些我的探險者協會朋友,在北邊低語峽谷挖掘東西的時候發瘋了,他們攻擊任何想要進去的人。$B$B隊長只擔心供應要塞的礦石。幸運的是,我有能夠搞定這件事情的東西。$B$B進去那兒,炸掉礦石,把所有你找到的寶石帶回來。你知道嗎,經營這個地方可不便宜!$B$B但我得警告你,那種礦石很怪!','利用鋼環防呆火藥來收集6枚低語峽谷礦石碎片以及18顆低語峽谷寶石,然後交給鎮西要塞的賽波‧鋼環。','','到凜風峽灣的鎮西要塞找賽波·鋼環。','','','','',0), +(11221,'zhTW','來自戰場的報告','我們在北裂境的任務就是摧毀阿薩斯。聯盟只不過是個妨礙,只要找到他們的蹤影我們就應該擊垮他們。$B$B我們摧毀了他們最東部的艦隊,但生還者卻在遺棄水岸架設起防禦的木柵,就在南方不遠處。我們的部隊早該擊敗他們,但是我們卻低估了他們的求生意志。去找到戰場上的軍官,黑暗遊俠利雅娜以及亡靈哨兵拉薩爾,讓他們兩個人報告情況。','和戰場上的黑暗遊俠利雅娜以及亡靈哨兵拉薩爾交談,他們就在復仇臺地南方的浴血谷。等你完成之後,向高階執行官安賽姆回報。','','到凜風峽灣的復仇臺地找高階執行官安賽姆。','聆聽拉薩爾的報告','聆聽利雅娜的報告','','',0), +(11307,'zhTW','實地測試','既然我們有了專為維酷人特製的新瘟疫菌種,就該在霍葛萊測試樣本。如果一切都照計畫進行,他們應該會立刻灰飛煙滅,因為他們的體內全都會被瘟疫吞噬殆盡!$B$B霍葛萊就在此地的北方。我們的瘟疫使者也已經把先前的瘟疫菌種準備好在那邊了 - 應該不難辨認。','前往霍葛萊,對10個染疫掠龍維酷人使用瘟疫噴霧劑。然後向首席瘟疫使者哈里斯回報。','','到凜風峽灣的新阿加曼德找首席瘟疫使者哈里斯。','對染疫維酷人噴灑瘟疫','','','',0), +(11308,'zhTW','打掃時間','像我這樣一個重視實效的人,在此宣佈我們的研究成功。畢竟,什麼樣的軍隊不會因為低階士兵彼此反目而停止進攻呢?$B$B我會儘快將我們的成功消息捎給復仇臺地。但首先,我要你幫忙清理乾淨我們的實驗場所。$B$B去找『鋼鋸』潔妮幫你做一具特製的憎惡體。有爆炸性力量的憎惡體,你懂吧。','和新阿加曼德的『鋼鋸』潔妮聊聊。','','','','','','',0), +(11309,'zhTW','工作所需','哈里斯想要進行爆破,嗯?沒錯,我幫的上忙。$B$B不過,你得替我弄來一些材料。我不能把我的精選零件用在會爆炸的玩意上面。$B$B首先,我需要鍬牙韌帶…比人類的好用多了。$B$B我還需要一磅的肉。那個叫安東的傢伙有批肉好便宜,他在西邊的道路來回走動。','新阿加曼德的『鋼鋸』潔妮要你收集6條鍬牙韌帶和1磅新鮮的肉塊。','','到凜風峽灣的新阿加曼德找『鋼鋸』潔妮。','','','','',0), +(11310,'zhTW','警告:待組裝','嗯,拿去吧!我們的朋友將會有點...不安定。所以我建議你到霍葛萊以前,不要把他組合起來。$B$B等你到那兒以後,盡可能在自爆前集中多一點維酷人吧。$B$B成功以後,不管剩下什麼都帶來給我吧,屍塊我總是用得到!','在霍葛萊中使用憎惡體配件工具,利用無腦的憎惡體組圍捕染疫維酷人。殺死至少20個維酷人後,向新阿加曼德的『鋼鋸』潔妮回報。','','到凜風峽灣的新阿加曼德找『鋼鋸』潔妮。','殲滅染疫維酷人','','','',0), +(11327,'zhTW','任務:取回包裹','幹得好,我們需要一些瘟疫材料。$B$B我知道!$B$B在你摧毀那些大缸的時候,我剛好去偵察了一個從新阿加曼德被維酷人抓到霍葛萊的藥劑師。可憐的傢伙。$B$B$n,我敢賭任何東西,他身上一定有會些材料。你覺得你能進入霍葛萊把他的包裹拿回來嗎?','斥候諾雷斯要去霍葛萊取回藥劑師的包裹。一旦你完成任務,回到餘燼矛塔向他報告。','','到凜風峽灣的餘燼矛塔找斥候諾雷斯。','','','','',0), +(11328,'zhTW','任務:被遺忘者的情報','沒錯,所以我想你應該回去要塞,把這東西拿給派比‧錯鼻。她差不多算是個業餘鍊金師,但我們也只有她了。$B$B有一件關於派比的事情要提醒你;她酷愛喝她的酒。因此,你大概得在旅店中找到她「沉醉喝酒的氣氛裡」。$B$B我相信她知道該怎麼做的。','斥候諾雷斯要求你將藥劑師的包裹送給鎮西要塞的派比‧錯鼻。','','到凜風峽灣的鎮西要塞找派比‧錯鼻。','','','','',0), +(11330,'zhTW','當然...有用!','瞧,即刻瘟疫機器!$B$B不過我見鬼的不想把這東西試在自己身上。而且我也知道你不想成為我的實驗目標!$B$B喔,我有…我有個點子!$B$B我們抓到了一個維酷囚犯,就關在要塞底下的囚牢裡。你何不拿著這瓶我裝好了的混合物去給那個巨人喝哩…嗝?!','鎮西要塞的派比‧錯鼻建議你把她的派比的特殊混合物給掠龍維酷囚犯服下,並且觀察服用後的結果。','','到凜風峽灣的鎮西要塞找派比‧錯鼻。','將派比的混合物交給維酷囚犯服下','','','',0), +(11331,'zhTW','你跟他說...嗝!','情況嗝是這樣的。我不會帶著這嗝消息去告訴隊長。我是個業餘鍊金師,這嗝不是我的工作,而且我在放假!$B$B更嗝況,他脾氣超嗝爛的...而且你跟他比較熟!$B$B所以,進要塞去告訴他。我相信他一定可以理性地看待整件事...嗝。$B$B<派比轉身繼續喝酒。>','派比‧錯鼻拖著你要你把被遺忘者瘟疫的壞消息告訴亞當斯隊長。前往凜風峽灣的鎮西要塞拜訪他。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','','','','',0), +(11332,'zhTW','任務:毀掉瘟疫!','皇家藥劑師學會企圖改進一種新的瘟疫,要讓我們融化成一團?!$B$B我絕對不能讓它發生!$B$B快去中庭和格銳爾‧礦錘談談。他會準備一隻獅鷲獸和炸彈給你。我要你把新阿加曼德的瘟疫槽全炸成碎片!','亞當斯隊長命令你丟5顆炸彈擊中新阿加曼德的瘟疫槽。完成任務之前不要回到鎮西要塞找他。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','擊中瘟疫槽','','','',0), +(11333,'zhTW','進入靈體世界','探險者協會也許可以透過他們的考古發現挖掘歷史的片段,中將或許能藉由武力得知一些此時的資訊,然而真相只有精靈知道。$B$B透過適當的藥劑我可以看見靈體世界。那裡存在著北裂境的過去、現在與未來。$B$B如果你還想知道更多,我會需要我的試劑袋。它掉在匕鞘海灣底部的沉船中,就在東邊不遠。','瓦爾加德的『智者』索拉利亞思要你去尋找試劑袋。','','到凜風峽灣的瓦爾加德找『智者』索拉利亞思。','','','','',0), +(11343,'zhTW','依米倫的回響','靈魂世界已經落入巫妖王的統治中。由純粹的惡夢所創造出來的可怕生物如今看管著元素的國度。我感應到這些華爾琪在守護著一個駭人的秘密。$B$B我已經太老也太虛弱了,無法承受另一趟旅行。你一定要代我前去,$n。$B$B帶著這個薰香爐到龍顱村,使用它來進入靈魂世界。找出東北方的大型房舍!無論如何,避開華爾琪,免得被永遠困在他們的世界中。','『智者』索拉利亞思要你在處於靈魂世界時去搜查龍顱村,找到有關龍顱的秘密相關資訊。','發現龍顱村的秘密','到凜風峽灣的瓦爾加德找『智者』索拉利亞思。','','','','',0), +(11344,'zhTW','尼弗瓦的苦痛','我們只知道維酷人最近才出現在北裂境。那為什麼,我們卻在15,000年前的幻象中看見維酷人?如果維酷人之前就出現在北裂境,我們就早該要知道了。$B$B你必須要進入尼弗瓦,要進入那邊你需要前往東北方,穿過龍顱村,走那條穿過水壩的道路。尼弗瓦在峽灣的高崖之上。$B$B等你抵達尼弗瓦之後使用薰香爐,然後看你能找到什麼線索。','『智者』索拉利亞思要你在靈體世界時搜索尼弗瓦,收集關於尼弗瓦秘密的情報。','發現尼弗萊瓦的秘密','到凜風峽灣的瓦爾加德找『智者』索拉利亞思。','','','','',0), +(11420,'zhTW','償還之途','兩週前我們的首席工程師弄來了一台維酷魚叉獵槍 - 就是他們用來把我們船隻擊沉的玩意兒。在研究那台獵槍之後,他打算做一本魚叉操作手冊。$B$B但不幸的是,他被綁架到北邊的龍顱村。我們最後終於找到了他,但重傷垂危而且手冊也不見了。他死前的遺言說手冊遺落在俄特加德墓窖中,在龍顱村的西北邊。幫我把手冊拿回來!','守衛隊長索芮克希望你去找回魚叉操作手冊,他就在凜風峽灣的瓦爾加德。','','到凜風峽灣的瓦爾加德找守衛隊長索芮克。','','','','',0), +(11421,'zhTW','火力全開...','我們要趁著維酷部隊混亂的時候給予他們更多打擊!帶著魚叉控制裝置前往尼弗瓦,並且鎖定最北邊的魚叉砲塔,就在村子的懸崖邊。$B$B到了那邊之後,指揮一個蓋在建築平臺上的維酷魚叉獵槍。用魚叉獵槍對龍顱村降下一場災難!摧毀長屋、船塢、貯藏設施以及任何維酷人派來阻擋你的防禦者!$B$B如此一來,匕鞘海灣將會成為一個更安全的港口!','凜風峽灣的冰錘中尉希望你摧毀掠龍長屋、掠龍船塢、掠龍貯藏設施和8個掠龍防衛者。$B$B等到任務完成,將魚叉控制裝置還給他。','','到凜風峽灣找冰錘中尉。','掠龍長屋被摧毀','掠龍船塢被摧毀','掠龍貯藏設施被摧毀','摧毀掠龍倉庫',0), +(11424,'zhTW','盾丘','我的工作在戰爭時應該是非常簡單的事。到處都有可利用的屍塊。$B$B然而,事情沒那麼簡單。這些知識分子製造了所有類型的殺人瘟疫,並且把它們送往敵鎮,然後污染了大部分的資源。$B$B不過,還有一個地方,那裡還有可利用的樣本。南邊的盾丘,是一處古老的維酷埋葬地,裡頭的活屍尚未受到任何的瘟疫感染 - 不管是被我們還是被巫妖王污染。去幫我取得一些骨頭,我會好好答謝你的。','『鋼鋸』潔妮需要你帶給她5個上古維酷骸骨,可以在新阿加曼德的南方的盾丘中,從再活化的維酷族身上找到。','','到凜風峽灣的新阿加曼德找『鋼鋸』潔妮。','','','','',0), +(11426,'zhTW','找出裝置','別擔心,$n;我們將會循線得到十分重要!十分驚人的結果!你只需要相信我,然後照我的話去做。$B$B為了計畫的第二步,我們需要拿到手冊上提到的裝置。我確信那些龍顱村負責操作魚叉獵槍的維酷人身上可能會有那個東西。你可以在村子東邊找到他們,就在長屋的碼頭那邊。','守衛隊長索芮克要你把魚叉控制裝置帶來給他,他就在凜風峽灣的瓦爾加德。','','到凜風峽灣的瓦爾加德找守衛隊長索芮克。','','','','',0), +(11427,'zhTW','會見冰錘中尉...','你看到那些位於東北峭壁的維酷建築嗎?維酷叫那個地方為尼弗瓦。用來攻擊我們護衛艦的魚叉,大部分都是來自那裡。$B$B嘿,你知道嗎?該是以牙還牙的時候了,$n。我要你帶著這個魚叉控制裝置去見冰錘中尉,他就躲藏在尼弗瓦西北邊的一棟維酷建築中。$B$B等你準備好,我會讓你坐上一隻獅鷲獸,迅速前往冰錘所在的地點!','守衛隊長索芮克要你去將魚叉控制裝置交給駐守在尼弗瓦外的冰錘中尉。','','到凜風峽灣的科德洛斯島找冰錘中尉。','','','','',0), +(11429,'zhTW','放下,揮舞!','我不打算將此任務交給某些未經考驗的廢物手中。$B$B現在,如果你想要對我證明你已經擁有完成此任務的能力,你得去完成以下我所說的事情。$B$B帶著這面戰鬥軍旗,接著前往北邊的貝爾海姆。一抵達貝爾海姆,就去找城鎮的中心,並將旗子放下。擊退所有想要弄倒我們珍貴旗幟的維酷混蛋,一旦你建立了聯盟的威勢後,就回來找我!','凜風峽灣的冰錘中尉要你將聯盟旌旗放置在貝爾海姆,然後保護旌旗免於攻擊者攻擊。$B$B萬一你沒死,就將聯盟旌旗帶回去給冰錘中尉。','保衛聯盟軍旗','到凜風峽灣找冰錘中尉。','放置聯盟旌旗','','','',0), +(11430,'zhTW','魚叉大師亞瓦思','你在貝爾海姆的表現頗為優秀,$n。在你出發前,稍做休息一下,在尼弗瓦那還有工作得完成。$B$B我們已經找到負責用魚叉攻擊我們護衛艦的維酷了 - 名為亞瓦思。你可以在東南邊的尼弗瓦懸崖上,那棟主魚叉建築中找到他。$B$B找到他,為了他對聯盟所犯下的罪行處死他!$B$B讓我感到驕傲,$n!','凜風峽灣的冰錘中尉要你去殺了尼弗瓦的魚叉大師亞瓦思。','','到凜風峽灣找冰錘中尉。','','','','',0), +(11432,'zhTW','沉睡的巨人','我無意間聽到你和雷瓦瑞爾神父的談話。請容我指出他讓你做的還不夠多。$B$B你必須要處理那些在夏勒布隆底下的喚醒之廳中沉睡的維酷人!$B$B我毫不懷疑那些喚醒他們的儀式是他們沒落的原因。我猜想那些死靈領主應該會有些裝置你可以讓那些維酷人提早脫離沉睡的狀態。$B$B而這樣的分離對那些維酷人而言將會十分致命。','法師中尉瑪歷斯特要你殺死5個冬眠的維酷人。等你完成之後回到鎮西要塞向他回報。','','到凜風峽灣的破碎海峽找法師中尉瑪歷斯特。','','','','',0), +(11433,'zhTW','沉睡的巨人','我無意間聽到你和主母安卡的談話。無意冒犯,但她讓你做的還不夠多。$B$B你必須要處理那些在夏勒布隆底下的喚醒之廳中沉睡的維酷人!$B$B我毫不懷疑那些喚醒他們的儀式是他們沒落的原因。我猜想那些死靈領主應該會有些裝置你可以讓那些維酷人提早脫離沉睡的狀態。$B$B而這樣的分離對那些維酷人而言將會十分致命。','阿喉塔‧白霜要你殺死5個冬眠的維酷人。等你完成之後回到冬蹄營地向他回報。','','到凜風峽灣的冬蹄營地找阿喉塔·白霜。','','','','',0), +(11436,'zhTW','衝浪時刻','掌舵渡過凜風峽灣的峭壁真的叫人神經衰弱!我利用維酷族技術和矮人的精巧裝置找出了一種解決方法。只需要小小的修改和良好的調整,我發明了冰錘的魚叉控制器!當然它還沒有測試過,但這不就是你的存在價值嘛!$B$B帶著這個控制器去尼弗瓦的大槍那邊,用這個把你自己射進瓦爾加德。向索芮克回報你的勝利吧。噢,對了,你可以保留那個控制器。','使用尼弗瓦的大型維酷魚叉獵槍把你自己射進瓦爾加德。向守衛隊長索芮克回報你對維酷人的勝利。','完成魚叉衝浪','到凜風峽灣的瓦爾加德找守衛隊長索芮克。','','','','',0), +(11443,'zhTW','匕鞘灣潛水','嗨...嗯...有事嗎?你在這裡這裡做什麼?$B$B我?...喔...呃,你知道...我在...嗯...我在整理這個地方!是凱勒親自下的命令!他跟我說,「哈利,我要你穿上潛水裝,去搜尋匕鞘海灣沉船中『我們』的東西...」$B$B話說,也許你可以幫我個忙,在這個海灣中有各式各樣的好東西,呃,我是說補給品。去那邊幫我把所有你找到的東西帶來。你可以用這個潛水頭盔,免得你缺氧而死。','匕鞘海灣底部的哈洛德‧拉格銳思要你收集10個沃爾加德補給木箱。','','到凜風峽灣的匕鞘海灣找哈洛德·拉格銳思。','','','','',0), +(11460,'zhTW','贏得信賴','馴鷹活動的第一步也是最重要的一步就是馴鷹者與$g他:她;的鳥兒之間的聯繫。主人必須要贏得鳥兒的信賴!$B$B<海達戈指著他腳邊籠子中的獵鷹。>$B$B想要贏得牠們的信賴,首先要滿足牠們的胃。$B$B這些被稱為峽灣石隼的鳥兒,主要是吃小蟲。峽灣上那些鬆動的岩石是小蟲最佳的生活地點。找一隻小蟲來餵飽籠子中的獵鷹。','海達戈要你找一隻峽灣幼蛆來餵飽他腳邊籠子中的獵鷹,他就在凜風峽灣的探險者協會前哨。','給岩石獵鷹餵食','到凜風峽灣的探險者協會前哨找『馴鷹者大師』海達戈。','','','','',0), +(11465,'zhTW','被洗劫的商隊','我率領了一支商隊從瓦爾加德出發,但遭到掠龍氏族的攻擊。我是突襲中唯一的倖存者。不幸的是,我沒辦法取回那些運來的峽灣火雞。這是你嘗試第一次石隼狩獵的好機會。$B$B<海達戈遞給你一個籠子。>$B$B帶著獵鷹籠前往西方,順著營地的路走下去。用獵鷹抓到那些跑掉的火雞。等你完成任務之後,再回來找我。$B$B記得要餵那些獵鷹!','海達戈要你使用訓練過的石隼來抓回5隻峽灣火雞,他就在凜風峽灣的探險者協會前哨。$B$B一旦你完成任務請帶著籠子回報。','','到凜風峽灣的探險者協會前哨找『馴鷹者大師』海達戈。','','','','',0), +(11468,'zhTW','獵鷹對隼鷹','你感受到你們的親密關係了嗎,$n?我想你確實感受到了你和獵鷹之間逐漸成形的聯繫了。如果我告訴你,時候到了你就能夠透過獵鷹的眼睛視物,你會相信嗎?哎呀,這就是馴鷹的最高境界。$B$B不過首先你得打更多獵!這隻猛禽得要更加磨練牠的反射能力。派牠去對付一個更強悍的對手!這個區域的峽灣隼鷹在我們四周的樹頂築了巢。牠們就是你的下一個目標!','凜風峽灣,探險者協會前哨的海達戈要你使用訓練過的石隼去捕抓10隻峽灣隼鷹。$B$B完成任務後,帶著籠子回去找海達戈。','','到凜風峽灣的探險者協會前哨找『馴鷹者大師』海達戈。','','','','',0), +(11470,'zhTW','鳥群間沒有榮譽存在','你顯然已經準備好鷹獵活動的下一步了,$n。$B$B帶著你那隻訓練過的石隼到東邊,前往維酷位於石牆升降梯附近的鷹巢。你可以派出你的石隼去從巢中偷出隼鷹蛋。牠的窩就在巢穴周遭峭壁的偏僻地區。找出那些鷹巢並使用你的石隼搜尋所有的蛋!$B$B留意那些峽灣隼鷹族母,$n。如果你被攻擊了,使用你的石隼脫逃和滑翔技能逃走!','海達戈要你使用訓練過的石隼來抓回8個峽灣隼鷹蛋,他就在凜風峽灣的探險者協會前哨。$B$B等你完成任務後,帶著籠子回去找海達戈。','','到凜風峽灣的探險者協會前哨找『馴鷹者大師』海達戈。','','','','',0), +(11474,'zhTW','高聳峭壁上的問題','如往常一般,真正的工作總是留待我和我的組員。還好麥克索夫的團隊沒有白白犧牲。他們所發現的密碼將可協助我們破壞我們在這裡發現的東西 - 那東西就是每次我們都能再回去的東西!該死的鐵矮人像裂縫一般在各處出現,現在還企圖掩埋掉這些地點!你能相信嗎?這些混蛋想要將我們的發現埋葬掉!$B$B無論如何,去找那邊的渥特談談。他會告訴你怎麼開始。','與渥特談談。','','','','','','',0), +(11475,'zhTW','完成工作的工具','我已經研究這個停止運作的傀儡好一陣子了,$n。我想我可以製造一個可供一人乘坐的複製品。這個點子應該可以騙過那些鐵矮人,讓我們得以進入巴爾古恩。$B$B現在我沒辦法使用一把錘子跟火鉗就做出東西來。我需要我的工具!很不幸的是在鐵矮人第一次攻擊時,我將那些工具留在伊瓦德遺跡後方了。去替我取得我的工具!$B$B伊瓦德遺跡就在遙遠的東北方。','凜風峽灣,探險者協會前哨的渥特要你去取回他的建造工具。','','到凜風峽灣的探險者協會前哨找渥特。','','','','',0), +(11482,'zhTW','職責所在','聽我說,$r。$b$b你的任務是回到艾澤拉斯。所有的人手都應該立刻往太陽之井高地報到。$b$b我想我沒有更多的訊息可以分享給你,除了這個:$b$b你將和奧多爾一起執行這次的任務。在你抵達之後和一名叫做雷索爾的德萊尼談談。$b$b顯然目前的狀況讓我們把彼此的歧見先放到一邊,並一同作戰。$b$b做好準備吧,朋友。情況聽來很緊急。','撒塔斯城,占卜者階梯的戴斯瑞司‧擊日者希望你立刻回到艾澤拉斯,到太陽之井向雷索爾報到。','','','','','','',0), +(11488,'zhTW','魔導師平臺','歡迎來到太陽之井,$c。你最好儘快習慣這裡的事態,並且隨時準備貢獻自己的一切力量……要知道,這裡太需要你的貢獻了!$b$b我?對,我這裡確實有些事情需要別人幫忙處理,不過我還不清楚你是否已經準備好了。$b$b我們有一位線人當前正潛伏在魔導師平臺內,為我們收集情報。但是這幾天以來我們一直沒有收到他的報告,我對此非常擔心。$b$b魔導師平臺就在東邊那塊高地之上。他給我們提供的情報非常重要。$b$b你能幫我們處理這件事嗎,$r?','破碎殘陽基地的主教拉雷索爾要求你轉至魔導師平臺,尋找血精靈間諜塔雷斯的蹤跡。','','','','','','',0), +(11567,'zhTW','科瓦迪爾的上古盔甲','我當時就在運送盔甲的船上。我們才登上船要返航的時候就受到被遺忘者驅逐艦的攻擊。$B$B他們強登上船,把所有東西掠奪一空,然後就鑿沉了船隻。$B$B這是我最後一次看見那套盔甲。如果你要的話,你可以搭乘我的轟炸機從無賴角前往那些驅逐艦停泊的可怕小島。跟我的女人艾朗雅談談,她就在外頭。她會帶你們上轟炸機。$B$B如果你找到了那個東西,你最好別把它帶回來!','找到科瓦迪爾的上古盔甲,然後把它交給凜風峽灣的卡瑪廓的歐弗斯。','','去凜風峽灣的遠古升降梯找卡瑪廓的歐弗斯。','','','','',0), +(11568,'zhTW','歸於平靜','<歐弗斯遞給你一個背袋。>$B$B包包中是你發現的那些神器。找出這些物品當初被偷走的盾丘墓塚,位置就在東南邊,並且將神器放回去。希望這樣能使那些在我們狩獵地作祟的靈魂平靜下來。$B$B堅強點,$n...','在盾丘被洗劫的墓塚使用一包維酷神器,歸還伊蘇鐸夫的冰凍心臟、阿薩瑞特之盾、風暴之怒法杖和科瓦迪爾的上古盔甲。$B$B完成後回到遠古升降梯找卡瑪廓的歐弗斯。','','去凜風峽灣的遠古升降梯找卡瑪廓的歐弗斯。','歸還阿薩瑞特之盾','歸還風暴之怒法杖','歸還伊蘇鐸夫的冰凍心臟','歸還科瓦迪爾的上古盔甲',0), +(11572,'zhTW','回去找阿推克','回到卡瑪廓去找長者阿推克。必須要向他和我的同胞警告這個從大海中逼近的毀滅。$B$B<歐弗斯顫抖著。>$B$B使用遠古升降梯去找他。拜託請快一點!','把壞消息告訴在卡瑪廓的長者阿推克。','','','','','','',0), +(11573,'zhTW','卡瑪廓的歐弗斯','你好,旅行者。我是卡魯耶克的浪克-長牙。就是你們所說的巨牙海民。我和我的夥伴最近被派來調查我們狩獵小道上的奇怪事件。當我們靠近那個叫做盾丘的墓地,我們遭到了不死生物的攻擊。我很幸運地逃到這個營地來,但我不確定歐弗斯怎麼了。$B$B我們在東南懸崖邊的遠古升降梯那分散了。你能幫我去找找他嗎?','去凜風峽灣的遠古升降梯尋找卡瑪廓的歐弗斯。','','','','','','',0), +(12481,'zhTW','罵上加傷','維酷人在這件事情上很精明,幸好我已經準備好了更多的花樣。$B$B他們的領袖,畢雍,是個暴躁的傢伙。我們已經把他們的語言拼湊成一段侮辱語,推測應該相當下流。內容大約是關於他母親跟一頭畜生...我們也不太確定。$B$B帶著這張紙,然後對他唸出來。等他開始追著你跑,就把他引回這裡。我們保證他無法活著走出去。','對貝爾海姆的畢雍‧海格德森唸出維酷人的侮辱語,然後將他引回黎戴爾的埋伏處,幫忙殺了他。','','到凜風峽灣的黎戴爾的埋伏處找黎戴爾。','辱罵畢雍·海格德森','擊敗畢雍·海格德森','','',0), +(12482,'zhTW','對付尼弗瓦','我們在等候復仇臺地的援軍來對尼弗瓦發動攻擊。然而,如果我們能早一點佔領它,就能讓我們取得對聯盟的優勢。$B$B進入城鎮中,看你能否確認他們的數量。','遊俠隊長艾瑞依爾要你去尼弗瓦殺死5個掠龍戰士、4個掠龍符文先知以及4隻掠龍巡狩獵犬。','','到凜風峽灣的鬼刃崗哨找遊俠隊長艾瑞依爾。','','','','',0), +(11448,'zhTW','探險者協會前哨','這根本就是一連串的密碼胡扯!就算有這份密碼我也沒有辦法搞清楚那些石板內容是頭還是尾。大家都知道,密碼學不是我的強項。$B$B你要把密碼和石板帶給我們的密碼學家,史坦華。不幸的是,我已經兩週沒有聽到史坦華的消息了。他帶了二十個科學家前往峽灣東南部的挖掘現場之後,我就再也沒聽過他的消息。我能做的就是請那邊的馬概先用他的飛行器載你一程。','到凜風峽灣的探險者協會前哨,將麥克索夫的包裹交給史坦華。','','到凜風峽灣找史坦華。','','','','',0), +(11224,'zhTW','趕回騾群','我聽說北方的低語峽谷發生了一些不好的事情。探險者協會的不少人都去了那個地方,有人說他們因為他們的發現而發了瘋。$B$B但這都改變不了他們帶走了我們大多數騾子和裝備的事實。我不要失去這些騾子!$B$B如果你到那附近,剛好有遇上我的騾子的話,就走過去舉起手來威嚇牠們。牠們肯定就會乖乖回來。','探險者艾比蓋兒要你對10隻被遺棄的運貨馱騾使用/舉手,然後回到鎮西要塞向她回報。','','到凜風峽灣的鎮西要塞找探險者艾比蓋兒。','召回被遺棄的運貨馱騾','','','',0), +(11227,'zhTW','讓牠們吃烏鴉','高階執行官要我利用我的狗來找出敵人的斥候,但我得告訴你,這些瘟疫獵犬如果沒被餵飽是那裡都不會去的。$B$B如果軍方無法瞭解這些野獸很挑嘴,那他們也不能期待這些獵犬在戰場上會有什麼用,牠們根本不碰部隊給我的那些垃圾。$B$B你看來好像還挺閒的,你何不帶一隻狗去西邊獵烏鴉?那些烏鴉肉對我們來說是不怎麼樣,但我的狗狗都很喜歡!','龐提烏斯,復仇臺地的狗籠管理者要你使用瘟疫獵犬鐵籠來召喚一隻飢餓的瘟疫獵犬,用峽灣烏鴉的烏鴉肉來餵飽牠們。那些烏鴉就在復仇臺地的西邊。','','到凜風峽灣的復仇臺地找龐提烏斯。','餵食瘟疫獵犬','','','',0), +(11228,'zhTW','冰封地獄...','如果弗塔根覺得他派來防衛港口的這群綠鰓小矮子可以堅持很久的話,他很快就得重新再想一遍了。$B$B<麥凱諾檢視你的裝備,然後揚了揚眉。>$B$B不過,你也許會幹的比較好。$B$B守住這個港口的重要性怎麼說也說不完;加上那些滿天飛的怪物,使得這裡的情況每況愈下。$B$B去西北邊向海軍中將凱勒報到,讓他知道你是來大幹一場的。','與瓦爾加德港口的海軍中將凱勒談談。','','','','','','',0), +(11229,'zhTW','風行者艦隊','我們在遺棄水岸的東邊停泊著風行者號,女王復仇號以及忘卻號。將這些指令送到艦隊的指揮官,哈克船長手中,他們要負責摧毀聯盟的火砲。$B$B去找我們的蝙蝠管理員,卡蜜兒談談,要求前往艦隊的位置。要快點,$n,我們花費在對抗聯盟的每分每秒都是我們原本可以用來對抗阿薩斯的時間。','與復仇臺地的蝙蝠管理員卡蜜兒談談,並取得前往風行者號的路線。回報給船上的哈克船長。','','','','','','',0), +(11230,'zhTW','埋伏!','按理說這應該跟郊遊差不多。他們的部隊又飢又累,帶著傷而且裝備破爛。但不知道怎麼,我們居然一頭撞進他們的陷阱。$B$B我們靠近南方的暗礁以尋求掩護,卻被那些聯盟狗立刻包夾。$B$B我很抱歉的說,如果你想要用我們的火砲對任何東西發射的話,你恐怕得先幫我們把船給搶回來。','風行者號上的哈克船長要你殺死15個北方艦隊海員。','','到凜風峽灣的風行者號找哈克船長。','','','','',0), +(11231,'zhTW','鑰匙與牢籠','隊長或許不在意,但這事我們可多少知道一些,維酷人正在北方的夏勒布隆進行一種叫做「喚醒」的可惡儀式。$B$B他們用活人獻祭以補充他們不潔儀式的能量!$B$B$C,你一定要阻止這件事情!不管什麼人或什麼東西被關在籠子,你都要去把他們給放出來。我想那些維酷人會有鑰匙。$B$B聖光知道我們最不需要的,就是有越來越多那些奇怪的維酷人出現,更糟糕的是,他們有可能會喚醒一些更邪惡的東西!','雷瓦瑞爾神父要你收集足夠的夏勒布隆鐵籠鑰匙,去釋放10個夏勒布隆囚犯。等你完成之後回到鎮西要塞向神父報告。','','到凜風峽灣的鎮西要塞找雷瓦瑞爾神父。','釋放夏勒布隆囚犯','','','',0), +(11232,'zhTW','指引方向','我們應該有辦法殺出一條路回到我們的槍砲邊。不幸的是,能見度太差強人意了,所以你得從地面替我們將目標標示出來。$B$B帶著這些煙霧照明彈,到西邊被聯盟佔領的遺棄水岸去,沿著北邊的牆壁使用它們來標示火砲的位置。$B$B等清出一條通道給地面部隊後,就盡快去通知利雅娜。我們可以照顧好自己的。','在遺棄水岸北邊牆壁的聯盟火砲處使用煙霧照明彈。完成任務後回到浴血谷回報黑暗遊俠利雅娜。','','到凜風峽灣的浴血谷找黑暗遊俠利雅娜。','標記東面的火炮','標示西邊火砲','','',0), +(11233,'zhTW','痛下殺手','你已經在戰場上證明你的能力,$n。你非常有可能將局勢扭轉成對我們有利了。$B$B我現在有個非常重要的任務要指派給你。我不確定我們暴露的弱點能堅持多久,所以我們一定得利用出其不意這項優勢。$B$B我要你利用我們攻擊時所造成的混亂,混進去敵方刺殺他們的首領。依照階級來看,他們分別是:上尉歐斯特、中尉西里尼和士官羅利克。祝你好運,$c。','復仇臺地南邊的黑暗遊俠利雅娜要你去遺棄水岸殺了上尉歐斯特、中尉西里尼和士官羅利克。','','到凜風峽灣的浴血谷找黑暗遊俠利雅娜。','','','','',0), +(11234,'zhTW','回報安賽姆','接下來讓我們傳話回去給老安賽姆。勝利雖然發生得不如預期的早,不過總比永遠都沒有來得好。告訴他解決掉這些離群者最多只花費掉我們幾小時。$B$B榮耀歸於女妖之王!','回報給高階執行官安賽姆,他就在凜風峽灣的復仇臺地。','','','','','','',0), +(11235,'zhTW','對付夏勒布隆','現在我們有另一個問題。活著回來的斥候告訴我維酷人正在他們北方的要塞中幹些見不得人的勾當。$B$B他們把那個地方叫做夏勒布隆,真是奇怪的名字。$B$B但這不重要,重要的是你要去那個地方把那些該死的東西給清理一番,然後看看你能不能查出他們在搞什麼鬼。$B$B我知道我能仰賴你,$n。','亞當斯隊長要你去殺死15個夏勒布隆戰士、8個夏勒布隆符文使和8個夏勒布隆守眠者。完成之後,再回到鎮西要塞向他報告。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','','','','',0), +(11239,'zhTW','侍奉聖光','你的作為已經成為了典範,$n,不過還有某件事一直困擾著我:天譴軍團。$B$B聖光無法接受他們的存在,我們也沒辦法接受。我希望這個要求對你來說不會太過份,不過我要你往北回到夏勒布隆,並摧毀那個邪惡巢穴中不潔的天譴軍團!記得也要查探夏勒布隆底下的喚醒之廳。$B$B淨化即是救贖的關鍵,孩子。為我們帶來榮耀吧!','殺死10隻不滅的看守者、4頭駭人的恐獸以及2隻腐爛的活屍。結束以後,將成功的消息告訴鎮西要塞的雷瓦瑞爾神父。','','到凜風峽灣的鎮西要塞找雷瓦瑞爾神父。','','','','',0), +(11240,'zhTW','發狂者的首領','喔,夥伴,我真的不想這麼說,但是當你不在的時候,上尉對那個地方熱切的關心起來。$B$B看來他想要讓我那個年老的探險者協會首領死掉。我猜我們得集合成一隻防衛隊前往肅清他們的餘黨,上尉想要他們的人頭落地,如同過去一樣。$B$B幫我個忙好嗎?回到低語峽谷並解決掉史盔吉‧獵像者。在我的記憶中,我推測他應該在洞穴裡的西北角落。','殺掉史盔吉‧獵像者,然後回到鎮西要塞回報賽波‧鋼環。','','到凜風峽灣的鎮西要塞找賽波·鋼環。','','','','',0), +(11241,'zhTW','火的蹤跡','謝謝你幫我脫離這場混亂,$n。我一點也不想知道那些聯盟的卑鄙小人打算對我做什麼。$B$B讓我們離開這裡,看看我們有沒有辦法向他們討回公道。那是營火嗎?','護送藥劑師漢尼斯逃出遺棄水岸。完成這個任務後,回報給藥劑師黎珊達。她就在凜風峽灣的復仇臺地。','營救藥劑師哈恩斯','到凜風峽灣的復仇臺地找藥劑師黎珊達。','','','','',0), +(11243,'zhTW','如果瓦爾加德陷落...','如果瓦爾加德陷落了,我們深入北裂境的主要補給線將會不再存在。這樣的話,我們全都成為巫妖王的僕從就只是時間問題了。我對你瞭解不多,但我在艾爾文還有妻子和三個小孩。而且要是我連一場戰鬥都沒打就倒下,那我可真該死了。$B$B此地的情勢危急,我們用得上所有你召集來的幫手。到前門去打敗那些入侵的怪物,協助守衛保護這座城市!','海軍中將凱勒要你殺死12個掠龍入侵者或掠龍座狼。他就在凜風峽灣的瓦爾加德港口。','','到凜風峽灣的瓦爾加德找海軍中將凱勒。','','','','',0), +(11244,'zhTW','拯救那些救援者','我們到這裡已經一個月了,而那些畸形的巨人毫無預警地出現。我們對這樣的攻擊幾乎毫無防備,為了我們的自滿付出了沉重的代價。我們損失了整個考古隊,還有一些鎮民被綁架帶去遺跡。之後我們就一直處於守勢。$B$B更糟糕的是,我們派去救援的斥候被維酷人用魚叉攻擊,就在瓦爾加德北方的森林中等死。清除那些魚叉,救出我們的斥候!','海軍中將凱勒要你拯救8個被刺穿等死的瓦爾加德斥候。他就在凜風峽灣的瓦爾加德港口。','','到凜風峽灣的瓦爾加德找海軍中將凱勒。','拯救瓦爾加德斥候','','','',0), +(11248,'zhTW','行動:斯考恩之怒','$n,我現在一定要請求你接下一個非常冒險,非常危險,只有你才有辦法完成的工作。$B$B維酷的堡壘,斯考恩,就在東邊的邊境。我的斥候通知我那些「巨人」準備好要攻擊我們,而我的軍力四散在峽灣各地,所以我手邊沒有足夠的人手可以憑武力拿下該處。$B$B反之,你得使用你的小聰明。我已經派了一位瞭解細節的士官到前線去。在斯考恩將這個指揮徽記亮出來,他就會現身並聽從你的指揮。','亞當斯隊長要你在斯考恩使用鎮西指揮徽記,然後與鎮西士官談談。','','','','','','',0), +(11251,'zhTW','接棒人','雖然代價頗高,但我們終究完成了這個地點的調查。$b$b目前的消息並不樂觀,幾乎所有人都被殺死或是被俘虜了。只有幾個經驗豐富的守衛沒事。$b$b斥候們已經盡力了。你一定得繼續我們未完成的工作。$b$b我聽到東北邊的山丘上有一些衝突的聲響。去看看發生了什麼事,$c。我們只希望能有人逃過一劫,能告訴我們一些足以對抗敵人的資訊。','斥候維樂利要你調查從龍顱村東北邊傳來的戰鬥聲響。','','','','','','',0), +(11253,'zhTW','嗅出敵人','現在這個無賴的肚子已經餵飽了,或許會比較願意合作。這是牠的鍊子,等你準備好了就把牠從籠子裡面放出來吧。$B$B我不知道安賽姆期待你會找到什麼,但是別放過這條狗帶給你的任何線索。','在復仇臺地的瘟疫獵犬鐵籠附近使用瘟疫獵犬之鍊,然後在瘟疫追蹤獵犬所帶你去的地點尋找線索。','','','','','','',0), +(11254,'zhTW','龍皮地圖','看得仔細一點,卷軸顯然是一張非常詳細的峽灣地圖。許多村莊的地點還描繪了一些像是部族徽記的圖案。$B$B復仇臺地的地點則標上了一個不成比例的大骷髏。$B$B這張地圖想必對高階執行官安賽姆來說很有軍事價值。','把龍皮地圖交給復仇臺地的高階執行官安賽姆。','','到凜風峽灣的復仇臺地找高階執行官安賽姆。','','','','',0), +(11255,'zhTW','龍顱囚犯','這場戰鬥尚未結束,$n。如果那座村子中依舊有我們的同胞存活,就得有人去把他們給救出來。$B$B<海軍中將凱勒對你點點頭。>$B$B前往北方,並且進入龍顱村。進入之後尋找我們的同胞。如果他們被囚禁的話,你需要想個辦法把他們給救出來。$B$B或許他們會有進一步的消息,能說明我們到底在和什麼戰鬥。','海軍中將凱勒要你去解救3個被俘虜的瓦爾加德囚犯。他就在凜風峽灣的瓦爾加德港口。','','到凜風峽灣的瓦爾加德找海軍中將凱勒。','被俘虜的瓦爾加德囚犯獲救','','','',0), +(11256,'zhTW','拿下斯考恩!','$n,維酷族的堡壘,斯考恩,就在南邊。那兒的奇特巨人最近甦醒過來,並且開始向外擴張,無所不用其極的攻打我們。$B$B探子來報,他們將在這裡對我們發動攻勢,但我軍的力量不足與對抗他們。因此,我們將準備前往北方,到較為安全的地方去。$B$B我請求你運用你的機智為我們爭取一些時間。我派了一名勇士,他將告訴你詳情。在斯考恩亮出這枚紋章,他就會現身,並且盡一切力量幫助你。','灰燼圖騰酋長要求你在斯考恩使用冬蹄紋章,與冬蹄勇者交談。','','','','','','',0), +(11263,'zhTW','對付夏勒布隆','活著回來的遠偵斥候通報我,維酷人在西邊他們的主堡中被喚醒了。$B$B那是個叫做夏勒布隆的禁區,遠偵斥候告訴我,維酷人正在舉行一場奇怪的儀式。$B$B我們不能讓儀式繼續下去。$B$B你願意繼續幫助我們嗎?你能夠在他們完成任何儀式,向我們攻擊之前,幫我們殺掉夏勒布隆的維酷人嗎?','灰燼圖騰酋長要求你殺掉15名夏勒布隆戰士、8名夏勒布隆符文使和8名夏勒布隆守眠者。事成之後,回到冬蹄營地向他回報。','','到凜風峽灣的冬蹄營地找灰燼圖騰酋長。','','','','',0), +(11273,'zhTW','人類同盟','當那些怪物攻擊我們時,我們離考古學大突破只有一步之遙!很不幸的,我是唯一回到瓦爾加德的人。現在我不知道我的組員到底是生是死,但是我們一定得找到那些在洞裡發現的神器!$B$B如果你要進入龍顱村,你可以留意一下我的隊員嗎?如果有機會可以重新找回那些資訊,我們一定得追蹤下去!$B$B先把普爾羅伊找出來。他是我在逃離前最後一個看到的人。','在龍顱村尋找普爾羅伊。','','','','','','',0), +(11274,'zhTW','齊德可能死了','給撿到這本日誌的人:$B$B這些嗜血的混蛋佔領了龍顱廢墟。他們到底想要什麼,或是他們為何而來,全都是謎。不管怎樣,只要那些畜生還在附近,神器就不安全。$B$B齊德和我在躲藏時有了新的發現:一個可以解譯石板的密碼!很不幸的是,齊德和我在昨晚深夜失散了。密碼在他身上。石板則在葛羅倫費德和迪剛恩那。位置不明...$B$B去找齊德。$B$B-普爾羅伊','在龍顱村搜尋齊德。','','','','','','',0), +(11276,'zhTW','還有兩個...','齊德身上的密碼沒有符號。在仔細搜查過後,你發現了一些髒亂的文字:$B$B「墓窖內的葛羅和迪。身上有密碼跟石板。」$B$B或許你應該前往北邊的墓窖,搜找葛羅倫費和迪剛恩。橫越座狼穴的橋會引領你前往進入墓窖的通道。','到俄特加德墓窖搜找葛羅倫費德。','','','','','','',0), +(11290,'zhTW','掠龍戰鬥計畫','雖然我們沒找到多少關於因格瓦下落的資訊,但我們得知了雅尼思居住在龍顱村的洞穴裡,位在狼穴的旁邊。$B$B從獲救士兵身上匯集的情報指出,雅尼思保護著掠龍戰鬥計畫。$B$B我需要你回到龍顱村,將這些計畫找出來。把擋在你面前的維酷族人殺光–包括雅尼思!','海軍中將凱勒要你把掠龍戰鬥計畫帶給他。他就在凜風峽灣的瓦爾加德港口。','','到凜風峽灣的瓦爾加德找海軍中將凱勒。','','','','',0), +(11291,'zhTW','前往鎮西要塞!','<海軍中將凱勒捲起了戰鬥計畫。>$B$B我們已經取得所有保住瓦爾加德需要的資訊。你一定得把這些戰鬥計畫送去西側峽灣峭壁邊的鎮西要塞。去找飛行管理員助理,艾米廬‧冬風談談。她可以讓你搭上一隻獅鷲獸前往鎮西。$B$B一旦你抵達那裡,去找亞當斯隊長。他是那裡的負責人。亞當斯會知道怎麼處理這些計畫。','帶著掠龍戰鬥計畫前往凜風峽灣的鎮西要塞交給亞當斯隊長。','','到凜風峽灣的鎮西要塞找亞當斯隊長。','','','','',0), +(11292,'zhTW','掠奪弱者','很高興見到你。我來自灰白之丘,前來與你的同伴進行交易。我的族人在灰白之丘有一個很大的前哨站,你往北邊去時最好去拜訪一下。$B$B我已經在這附近的林地和雪地設置好陷阱了。有了這些陷阱抓到的動物肉及毛皮,我將擁有大量的貨物可以與鎮民進行交易。$B$B如果你願意幫忙從陷阱收回獵物的話,我可以讓你分紅。不過要當心,你不會是當地唯一的掠奪者。','威德瓦堡壘的陷捕者傑桑要你帶8個受困的獵物給他。','','到凜風峽灣的威德瓦堡壘找陷捕者傑桑。','','','','',0), +(11329,'zhTW','我什麼都願意嘗試!','只要我活著的一天,我就再也不想看到另外一桶醃魚了!沒日沒夜就是把桶子裝滿,但總是有空的桶子要我裝!$B$B我好希望我沒有把所有納特‧帕格的魚餌用光。真的,就跟魔術一樣有效呢。可是,現在如果我一個小時釣到一條魚就算幸運了!$B$B我聽說北地刺鬚魚可以當很棒的魚餌,但是誰會瘋到潛進冰冷的湖底、砍掉水裡的植物一根一根的找呢?不是我就對了…但是,也許,我是說也許啦,我可以說服你去…','威德瓦堡壘的克里斯多夫‧斯洛安要你帶5條北地刺鬚魚給他。','','到凜風峽灣的威德瓦堡壘找克里斯多夫·斯洛安。','','','','',0), +(11406,'zhTW','一切都要準備好','當遠征軍向北推進,亞當斯隊長會希望所有東西都已經在威德瓦堡壘準備好了。斥候和工匠要準備在山丘間攀爬的裝備和補給。$B$B隊長最有名的就是他的臭脾氣,所以我想要派人前去檢查準備的情況。威德瓦堡壘就在東北方的遠處,在斯考恩之後,就在霜雪覆蓋的區域靠近灰白之丘的邊界。去那邊找吉爾‧葛瑞斯特,確定他已經把一切都準備好了。','和威德瓦堡壘的吉爾‧葛瑞斯特談談。','','','','','','',0), +(11472,'zhTW','傳遞心意...','北海海賊將群島間的公海獅首領,大羅伊給殺死了。他們這麼做只是為了用牠來製作肥皂清理船隻!$B$B<安努尼亞克嘆氣。>$B$B現在海獅們都不交配了。去幫我協助牠們重新繁殖。$B$B你可以在東南方的雙水之濱找到公海獅。他們很愛吃海島東方和西方的美味暗礁魚。$B$B帶上這張網子,收集至少一打的魚 -- 可能還要更多,然後把公海獅引過海峽到母海獅身邊。','對暗礁公海獅丟擲美味的暗礁魚好將牠引往一隻暗礁母海獅。一旦你幫助牠們找到真愛,就回到卡瑪廓找安努尼亞克。','引導雄性暗礁海獅來到雌性暗礁海獅身邊','到凜風峽灣的卡瑪廓找安努尼亞克。','','','','',0), +(11477,'zhTW','非我族群?','小聲點,$r。這些鐵矮人反應很快的。別讓挖掘的行動愚弄了你。那些鋼皮的怪物才沒有在挖東西哩!先生,沒錯,正好相反,他們在掩埋這個地方!不管是為了什麼理由,他們都不想要讓人發現這個地方。$B$B是什麼樣的矮人會掩埋古代聖物還有挖掘場地?我來告訴你是那一種:就是你可以不顧後果隨意屠殺的那種!進去裡面把他們全殺光!','凜風峽灣,伊瓦德遺跡的多尼要你去殺了10個鐵符文摧毀者,5個鐵符文苦力以及2個鐵符文賢者。','','到凜風峽灣的伊瓦德遺跡找多尼。','','','','',0), +(11478,'zhTW','遠方的前哨...','我知道你還沒去過南邊的探險者協會前哨拜訪我的兄弟們。你為何不幫幫多尼的忙,將這則訊息傳送給史坦華。他會很有興趣聽到有關鐵矮人活動的消息。$B$B就像我說的,坐上坐騎,往南方前進。你會在抵達巴爾古恩前先看到前哨。','將多尼的信傳送給探險者協會前哨的史坦華。','','到凜風峽灣找史坦華。','','','','',0), +(11483,'zhTW','我們可以重建它','工具?有了。材料?沒有。$B$B如果我們要建造這個東西,你得給我材料。$B$B優先中的優先,$n。我需要從尼弗瓦拿到一個大桶,好來做成骨骼結構,然後從瓦爾加德那邊拿一些黑鐵鑄塊,還要從貝爾海姆那邊取得工業力量之繩。$B$B尼弗瓦和貝爾海姆是西北邊的維酷村鎮。瓦爾加德在匕鞘海灣,也在西北邊。和馬概先談談好取得鑄塊。等你全都搞定,他會把你送回這裡。','凜風峽灣的探險者協會前哨的渥特要你帶給一個大桶、工業力量之繩和黑鐵鑄塊。','','到凜風峽灣的探險者協會前哨找渥特。','','','','',0), +(11484,'zhTW','我們擁有技術','儘管一件機械的基本結構是很重要,但我們也不應該低估一樣傀儡的外觀。如果我們要欺騙那些鐵矮人,那麼複製體就一定要很精確!$B$B這一點我是辦得到。$B$B帶給我從這個區域的鍬牙身上取來的新鮮的鍬牙毛皮,還有從西北方的尼弗瓦或貝爾海姆的維酷人身上取來的鋼質肋材。','凜風峽灣、探險者協會前哨的渥特要你帶給他一張新鮮的鍬牙毛皮和鋼質肋材。','','到凜風峽灣的探險者協會前哨找渥特。','','','','',0), +(11485,'zhTW','鐵符文傀儡與你:火箭跳躍','好吧,$n;到了該你爬進去這個東西內部並學著操作它的基本功能了。當你準備好,上工作臺,我會讓你進入傀儡內坐定。$B$B你的首要課程就是學會使用傀儡的傳送系統。你會注意到鐵矮人在挖掘地點附近設置了特別的符文雕像。他們的傀儡就是使用那些符文雕像充電並進行點對點飛行。去試試我立在這裡的符文雕像看看。','凜風峽灣,探險者協會前哨的渥特要你對鐵符文雕刻使用鐵符文傀儡的火箭跳躍能力。$B$B一旦完成任務後,你可以點選寵物視窗選擇解散來取消傀儡。','掌握火箭跳功能','到凜風峽灣的探險者協會前哨找渥特。','','','','',0), +(11489,'zhTW','鐵符文傀儡和你:收集資料','你在操作傀儡的工作當中最重要的部分就是收集資料。我已經放置了一個鐵矮人聖物在遠處的貨車上。那是一顆懸浮,閃著電光的灌能水晶。$B$B上工作臺去,我會將你置入傀儡。一旦你回到駕駛座,使用傀儡的資料收集技能取得測試資料。','凜風峽灣的探險者協會前哨的渥特要你在接近鐵矮人聖物時使用鐵符文傀儡收集資料的技能。$B$B一旦完成任務後,你可以點選寵物視窗選擇解散來取消傀儡。','','到凜風峽灣的探險者協會前哨找渥特。','收集測試資料','','','',0), +(11501,'zhTW','來自東邊的消息','鎮西衛得知道在這裡發生的事,$n。我要你本人將這個消息帶給亞當斯隊長。$B$B只要你準備好了,通知我,我會將你塞進傀儡裡進行最後一趟飛行。這趟飛行將會帶你到鎮西要塞,不過比較可能會在飛程中被擊毀就是了。$B$B很榮幸能...','與鎮西要塞的亞當斯隊長談談。','','','','','','',0), +(11504,'zhTW','亡者重生!','東邊的道路是巨牙海民主要的狩獵小徑。至少曾經是...$B$B近來,回到卡瑪廓的獵人們宣稱死者已經復活,並出外尋找鮮血!那就是我和我兒子前來這裡的原因。長者阿推克要我們在懸崖這找出解決方法。$B$B你會願意在我們需要時幫助我們嗎?我在尋找願意前往盾丘冒險犯難的英雄,就在此地的東南邊。在被褻瀆的墳地中尋找線索,並將你的發現帶回來給我。','凜風峽灣內卡瑪廓的歐弗斯中,位於遠古升降梯的歐弗斯要你去找出芬吉爾的線索,洛丁的線索,還有伊蘇鐸夫的線索。','','去凜風峽灣的遠古升降梯找卡瑪廓的歐弗斯。','','','','',0), +(11507,'zhTW','長者阿推克和卡瑪廓','<歐弗斯捆起了你帶給他的線索。>$B$B我的人民在與北海掠劫者的戰爭中遭到了殘酷的侵略。如果有任何巨牙海民能夠幫助我們完成導正海賊的錯誤,這人一定會是卡瑪廓的長者阿推克。你必須馬上將這些線索交給他。$B$B要前往卡瑪廓你一定得使用我前面的遠古升降梯。搭乘升降梯直通卡瑪廓找到長者阿推克。','凜風峽灣的卡瑪廓的歐弗斯要你將歐弗斯的包裹送到卡瑪廓給長者阿推克。','','到凜風峽灣的卡瑪廓找長者阿推克。','','','','',0), +(11508,'zhTW','格瑞希克斯‧斷紡','這些海賊小偷們在南邊的無賴角設置了港口。不幸的是,他們使用了許多致命的防護措施來強化他們的營地。$B$B有個人或許能夠幫助我們滲透無賴角。$B$B最近,一個海賊傭兵,叫做格瑞希克斯‧斷紡,來到我們的村子裡尋求食物及庇護。他給了我們有關敵人的資訊作為交換,並將我們錯誤的攻擊計畫給了他們。去他的船上找他,就在西南方的岸邊。','去找格瑞希克斯‧斷紡談談。','','','','','','',0), +(11509,'zhTW','街頭「信用」','這些北海掠劫者皆對格瑞希克斯又敬又怕。我在想他們賞識我的特殊天賦,並嫉妒我那艘驚人的船。你只需要跟著我的船艙服務員,阿路,他會把你當成...自己人一樣的照顧你。$B$B等你準備好要出發,就跟阿路談談,他會帶你到無賴角去。$B$B喔對了,你會想要先跟『銀月』哈利談談。他手中有更多他們偷過的物品資料。只是在他旁邊說話要小心點。他是個怪胎...瘋狂迷戀血精靈。','與無賴角的『銀月』哈利談談有關不見的維酷神器。','','','','','','',0), +(11510,'zhTW','『史酷朵斯』','喬納‧斯德林在發瘋之後的第一件事就是拿走我珍貴的辛多雷占卜水晶,然後拿去餵給了我的剋星,虎鯨『史酷朵斯』。$B$B那個該死東西的名字可不是我取的。我只知道她在無賴角東南方的船隻邊徘徊。殺死那隻發育過度的金魚,割開她的胃把我漂亮的辛多雷水晶給找回來。$B$B完成了這件事,我們就可以來談談生意。','無賴角的『銀月』哈利要你從虎鯨『史酷朵斯』的身上取回辛多雷占卜水晶。','','到凜風峽灣的無賴角找『銀月』哈利。','','','','',0), +(11511,'zhTW','風暴之怒法杖','這些神器受到了詛咒,$r,你一定是瘋了才會想要尋找它們。我知道每一個和這些東西接觸的人,不是瘋了就是被殺死。$B$B就舉法杖為例,最後一次我聽見它,就是載著這根法杖的船隻被遺棄,留在群矛之島的海岸上腐爛,就在北方不遠。$B$B如果你真的想要那玩意兒,就去檢查船上的貨物吧。$B$B不管你做什麼,都絕對不要把法杖帶回來這裡!還有,離阿巴督爾遠一點!他會把你的心臟給挖出來。','找到風暴之怒法杖,然後把它交給凜風峽灣的卡瑪廓的歐弗斯。','','去凜風峽灣的遠古升降梯找卡瑪廓的歐弗斯。','','','','',0), +(11512,'zhTW','伊蘇鐸夫的冰凍心臟','有人說喬納原本就腦筋不太正常,但我知道真相。是因為那個心臟。那個該死的冰凍心臟!從他把那個東西從墳墓中拿出來時就看出他的改變。我看到血液在他的血管中結冰...是那個時候他才真正瘋了。$B$B他離開我們,在小島的北方挖了一個自己的洞穴。我聽說他把心臟丟在他的熊穴之中。太微小,太遲了...$B$B要是你敢把心臟帶回這裡來,我一定親手把你給殺了!','找到伊蘇鐸夫的冰凍心臟,然後把它交給凜風峽灣的卡瑪廓的歐弗斯。','','去凜風峽灣的遠古升降梯找卡瑪廓的歐弗斯。','','','','',0), +(11519,'zhTW','失落的阿薩瑞特之盾','如果你仔細的聽,你會聽見從東北方傳來的砲火聲。那是船長艾爾利斯的船艦,慈悲姐妹號。問題是,艾爾利斯和他的船員們大概一個月之前就被殺了。$B$B<哈利點點頭。>$B$B幽靈船...$B$B如果你想要知道關於盾的消息,就去問艾爾利斯吧。$B$B慈悲姊妹號每五分鐘停泊在這裡與索洛夫水岸之間的小島上一次,收集更多的靈魂成為他們的船員。那一帶的靈魂總是不虞匱乏...','登上慈悲姊妹號,與船長艾爾利斯交談。','','','','','','',0), +(24795,'zhTW','白銀誓盟的勝利','儘管菈娜薩爾女王對你冷嘲熱諷,你還是復原了奎爾德拉,$n。長久以來,取回奎爾德拉一直是我們的夢想。$B$B白銀誓盟與所有辛多雷欠你一份感恩之情。$B$B因為你是一個$c,劍刃似乎認為你缺乏劍術訓練,所以並沒有跟你產生連結。既然這樣,它的下一個主人會在哪裡呢?也許銀白十字軍可以找到合適的人。到北邊的銀白聯賽場地,以白銀誓盟的名義把劍交給審判者瑪瑞爾‧真心。','到銀白聯賽場地,把復原的奎爾德拉交給審判者瑪瑞爾‧真心。','','','','','','',0), +(24798,'zhTW','奪日者的勝利','為了奪日者的榮耀,奎爾德拉終於復原了! $B$B部落的所有人都將慶祝你成為了英雄,$n。$B$B因為你是一個$c,劍刃似乎認為你缺乏劍術訓練,所以並沒有跟你產生連結。既然這樣,它的下一個主人會在哪裡呢? 這使我難掩失望之情,因為我希望他會是個傑出的辛多雷。讓我們尋求一下銀白十字軍的建議吧。到北邊的銀白聯賽場地,以白銀誓盟的名義把劍交給審判者瑪瑞爾‧真心。','到銀白聯賽場地,把復原的奎爾德拉交給審判者瑪瑞爾‧真心。','','到銀白聯賽場地的銀白亭閣找審判者瑪瑞爾·真心。','','','','',0), +(24799,'zhTW','奪日者的勝利','為了奪日者的榮耀,奎爾德拉終於復原了! $B$B部落的所有人都將慶祝你成為了英雄,$n。$B$B因為你是一個$c,劍刃似乎認為你缺乏劍術訓練,所以並沒有跟你產生連結。既然這樣,它的下一個主人會在哪裡呢? 這使我難掩失望之情,因為我希望他會是個傑出的辛多雷。讓我們尋求一下銀白十字軍的建議吧。到北邊的銀白聯賽場地,以白銀誓盟的名義把劍交給審判者瑪瑞爾‧真心。','到銀白聯賽場地,把復原的奎爾德拉交給審判者瑪瑞爾‧真心。','','到銀白聯賽場地的銀白亭閣找審判者瑪瑞爾·真心。','','','','',0), +(24801,'zhTW','奪日者的勝利','為了奪日者與部落的榮耀,奎爾德拉終於復原了!這對我們對抗巫妖王所付出的努力而言是一大賜福。$B$B等你從太陽之井歸還之後,奪日者的領袖大法師埃薩‧奪日者邀請你見他一面。帶著奎爾德拉儘快前往達拉然的紫羅蘭城塞,$n。大法師希望能夠親自恭賀你!','到達拉然紫羅蘭城塞,把復原的奎爾德拉交給大法師埃薩‧奪日者。','','','','','','',0), +(24595,'zhTW','淨化奎爾德拉','我承認,我曾經懷疑你是否真的重鑄了奎爾德拉,而且我也沒想到薩洛瑞安的亡魂會在出現在你面前。你無法了解修復奎爾德拉對我以及我的族人代表著什麼意義。$B$B如同當初的承諾,我會讓你進入太陽之井,而你也會在裡面見到銀月城的領袖。把劍帶去太陽之井的房間,然後把它浸泡在井水中。一但劍刃復原了,就帶著它回到奎爾德拉之眠找卡拉迪斯‧亮矛。','把受污染的奎爾德拉浸泡在太陽之井中。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','','到寒冰皇冠的奎爾德拉之眠找卡拉迪斯·亮矛。','','','','',0), +(24596,'zhTW','淨化奎爾德拉','太陽之井和奎爾德拉流浪的終點正等待著你,$n。$B$B你會發現奎爾薩拉斯的攝政王洛索瑪‧塞隆和大博學者洛摩斯站在一起。請提防他們,別讓他們的政治陰謀陷害了你。$B$B反言之,把焦點一直放在你的任務上。將奎爾德拉浸泡在太陽之井中來完成復原劍刃的工作,然後回到奎爾德拉之眠,把劍刃拿給米拉連恩‧日炎看。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','把淬鍛的奎爾德拉浸泡在太陽之井中。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','','到寒冰皇冠的奎爾德拉之眠找米拉連恩·日炎。','','','','',0), +(24598,'zhTW','淨化奎爾德拉','太陽之井和奎爾德拉流浪的終點正等待著你,$n。$B$B你會發現奎爾薩拉斯的攝政王洛索瑪‧塞隆和大博學者洛摩斯站在一起。請提防他們,別讓他們的政治陰謀陷害了你。$B$B反言之,把焦點一直放在你的任務上。將奎爾德拉浸泡在太陽之井中來完成復原劍刃的工作,然後回到奎爾德拉之眠,把劍刃拿給米拉連恩‧日炎看。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','把淬鍛的奎爾德拉浸泡在太陽之井中。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','','到寒冰皇冠的奎爾德拉之眠找米拉連恩·日炎。','','','','',0), +(24562,'zhTW','前往太陽之井','帶著奎爾德拉盡快前往太陽之井,$n。相信烏瑟的話吧,他說只要這把劍仍受巫妖王的邪惡所影響,你遲早會喪失操控它的權力。你必須前往奎爾達納斯之島,尋找太陽之井的入口,你可以在那裡淨化這把劍。$B$B守衛不會讓你進入太陽之井高地,但是你可以去認識一下赫杜倫‧亮翼,在那裡視察守衛的人。','在奎爾達納斯之島的太陽之井高地入口處與赫杜倫‧亮翼談話。','','到奎爾達納斯之島的晨星村找赫杜倫·亮翼。','','','','',0), +(24563,'zhTW','薩洛瑞安‧曦尋者','你就是跟米拉連恩‧日炎合作的人嗎?我知道一個方法,可以讓我們測試劍刃。$B$B如果你清楚這把劍的來歷,你就會回想起,它曾經是薩洛瑞安‧曦尋者在抵抗天譴軍團入侵太陽之井時的佩劍。他拼死奮戰為同袍爭取準備的時間,而他倒下的地方如今稱作死亡之痕。你可以在這座小島上的死亡之痕最南邊找到他的遺骸。去那個地方看看,如果他的亡魂給你祝福的話,我就會允許你進入太陽之井。','尋找薩洛瑞安‧曦尋者的遺骸,並取得他的祝福以使用奎爾德拉。','','到奎爾達納斯之島的晨星村找赫杜倫·亮翼。','取得薩洛里安的祝福','','','',0), +(24564,'zhTW','淨化奎爾德拉','太陽之井和奎爾德拉流浪的終點正等待著你,$n。$B$B你會發現奎爾薩拉斯的攝政王洛索瑪‧塞隆和大博學者洛摩斯站在一起。請提防他們,別讓他們的政治陰謀陷害了你。$B$B反言之,把焦點一直放在你的任務上。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。然後將奎爾德拉浸泡在太陽之井中來完成復原劍刃的工作。然後回到奎爾德拉之眠,把劍刃拿給米拉連恩‧日炎看。','把淬鍛的奎爾德拉浸泡在太陽之井中。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','','到寒冰皇冠的奎爾德拉之眠找米拉連恩·日炎。','','','','',0); + +-- +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(11986,'zhTW','破損的日誌','這本破損、沾滿污泥的日誌經歷過了不少日子。匆匆翻過書頁,你發現許多筆記、圖示與地圖。$B$B作者的手寫字跡有種模糊的熟悉感,但你直到發現了布萊恩‧銅鬚你才認出來。$B$B這本冊子的後半部,包含了最近的才寫的內容,已經被扯掉了。書頁落在戰場上,除非找到完整的書頁,否則誰也不知道布萊恩最後到底發現了什麼。','找回8頁失蹤日誌紙頁,將它們和不完整的日誌黏合起來,然後將完整的日誌交給西部荒野民兵團駐營的多杉‧深掘。','','到灰白之丘的西荒兵團駐營找多杉·深掘。','','','','',0), +(11988,'zhTW','符刻拱心石','布萊恩的日誌中提到,他使用一種符刻拱心石來啟動他所發現的金屬板中的重要符文。沒有那個拱心石,金屬板只比廢鐵好一些。$B$B在布萊恩最後一次進入時,他寫到鐵矮人防衛者搶走了他的拱心石,並且打破了它,然後分別保管。在我們能解讀符文金屬板之前,我們必須要找到碎片。任何鐸爾莫丹或附近建築中的矮人都有可能帶著碎片。','西部荒野民兵團駐營的多杉‧深掘要你帶給他5個符刻拱心石碎片。','','到灰白之丘的西荒兵團駐營找多杉·深掘。','','','','',0), +(12054,'zhTW','日誌解讀','沃塔克是對的 -- 我們不能放過這個機會。$B$B幸好,我知道一個辦法可以翻譯這個布萊恩的日誌。$B$B紅牙熊怪的薩滿就聚集在營地南邊的心之血聖壇,他們會種植一種叫做精靈之息的草藥。他們使用以秘方製作的薰香來尋求先祖靈魂的智慧。$B$B去找一個『獨眼』格朗姆巴德的薩滿。他應該會帶著草藥去向厄索克做出奉獻。','帶一小截精靈之息給歐尼克瓦營地的賢者帕努納。','','到灰白之丘的歐尼克瓦營地找賢者帕努納。','','','','',0), +(12058,'zhTW','符文預言','布萊恩的日誌內容還包括了鐵矮人符號文字的簡介。我把這些簡介刻在一顆拱心石上,這可以幫助你瞭解雕在符文板上的文字。$B$B日誌的字裡行間顯示,布萊恩正在追查他的族人起源的線索。不要漏掉在他的最後抵達地點的任何線索。$B$B回到此地東北的鐸爾莫丹,站在每一塊石板的前面,使用拱心石辨認出上面的內容。我們不能讓聯盟先找到他。','歐尼克瓦營地的賢者帕努納需要你解讀這三塊符文板。','','到灰白之丘的歐尼克瓦營地找賢者帕努納。','解讀第一段預言','解讀第二段預言','解讀第三段預言','',0), +(12068,'zhTW','自塵土而來的聲音','<德拉庫魯將預言者之眼放在他的眉心,先祖之心擱在他的胸口。>$b$b我們很接近了,老兄,非常接近了...$b$b德拉克瑞銘碑是唯一殘存下來的東西,沒有人知道銘碑有多古老,也沒有人知道銘碑上寫的是什麼,但只要德拉庫魯有了心和眼,我就看得懂了。你可以在東邊德拉齊金的地穴深處找到銘碑,等你找到了銘碑,從神諭者和保衛者的身上拿走神聖魔精,你就可以在地穴裡面召喚我了。他們會很自豪能為此喪命的。','德拉庫魯要你從德拉齊金遺跡中,找到德拉克瑞銘碑,並且從德拉克瑞神諭者和保衛者身上取得5個神聖魔精。然後在遺跡的德拉庫魯的火盆使用德拉庫魯藥劑召喚他的影像。','','到灰白之丘的德拉齊金遺跡找德拉庫魯的影像。','','','','',0), +(12073,'zhTW','重擊鐵矮人','聯盟並不是唯一在灰白之丘的對抗我們的勢力,除了東北方的鐸爾莫丹被一群石巨人圍攻,鐵矮人牢牢地掌握著東部海岸。$B$B身經百戰的戰士會對敵人的痛處攻擊,如果我們忽略了鐵矮人在鐸爾莫丹的弱點,那我們就是呆子。不要對鐵矮人手下留情,把擋在你前面的統統殺光。$B$B這些「鐵之子」將會知道部落的恐怖。','殺死任意10位防衛鐸爾莫丹的鐵矮人,並且向歐尼克瓦營地的斥候沃塔克回報。','','到灰白之丘的歐尼克瓦營地找斥候沃塔克。','殺掉鐵矮人防衛者','','','',0), +(12074,'zhTW','權衡之下的盟友','遠在東北邊的鐵矮人舊都鐸爾莫丹,遭到了一群神秘的石巨人和土靈圍攻。$B$B這些泰坦的造物為何彼此征伐遠超出我所能理解的程度,也超出了部落感興趣的範圍。但這是一個削弱雙方共同敵人的機會。$B$B前往鐸爾莫丹,找出那位名叫「庫倫」的人,他統領了巨人和土靈大軍。和他分享共同的目標,利用他的力量擊潰這些鐵矮人。','和山丘上俯瞰整座鐸爾莫丹的庫倫交談。','','','','','','',0), +(12082,'zhTW','嘟–答–嘟–噠!','聽著,孩子。這不是你該來玩耍的地方。$b$b我正要闖出這裡,跟緊我,我來帶你出去。','護送哈里遜從德拉齊金遺跡逃脫,接著和哈克爾營地的哈克爾交談。','哈里森保護你逃到安全地帶。','到灰白之丘的哈克爾營地找哈克爾。','','','','',0), +(12113,'zhTW','很高興認識你...的肉!','$c,你好哇!在火堆邊挨著我坐下吧,嗄?$b$b我樂意分你一點好吃的溫暖大餐,可惜我啥都沒有。我在這裡等一個朋友前來,不然我就會自己去找點吃的了。$b$b這樣吧,你看來什麼都沒有,就是時間多,這附近又有很多的肉,你要不要幫我個忙,弄些肉過來?','哈克爾營地的哈克爾需要你從暮嚎徘徊者身上收集10塊多筋座狼肉,以及長蹄牧者身上收集10塊鍬角排。','','到灰白之丘的哈克爾營地找哈克爾。','','','','',0), +(12114,'zhTW','復仇療法','食人妖...我恨透他們啦!<哈克爾啐了一口口水。>$b$b我有一次被一群那該死的混帳給捉了...就差那麼一點點我的頭就被他們給縮了!$b$b我的朋友告訴我把這件事放到腦後,人要大步向前,但是我就是覺得不對勁。$b$b你想知道要怎麼讓我開心一點嗎,$r?只要看到成堆的食人妖屍體多到擋住陽光我就開心了!如果你能讓這件事成真,我有很多金子等著花呢。','哈克爾營地的哈克爾要你去德拉齊金遺跡外,殺10名德拉克瑞保衛者和10名德拉克瑞神諭者。','','到灰白之丘的哈克爾營地找哈克爾。','','','','',0), +(12116,'zhTW','膽子要大...','你好,$c。你真是個好人,願意留下來聽卡拉茲講古。$b$b多年來,卡拉茲一直聽命於這些靈魂,完成他們的請求,而心力交瘁。$b$b近來,許多哭喊聲從這些廢墟中傳出來,尋求他們無法得到的平靜。$b$b如果你願意幫助這些古老的靈魂,進入地穴,收集屬於這些受折磨的靈魂生前的物品。','哈克爾營地的卡拉茲要你進入德拉齊金遺跡,並收集5罐德拉克瑞臟器罈。','','到灰白之丘的哈克爾營地找卡拉茲。','','','','',0), +(12120,'zhTW','德拉克古歐的木槌','腐化...$b$b在你把這些瓶子拿來之前,克拉茲就已經感覺到了。腐化讓上古德拉克瑞之靈充滿了痛苦,讓他們得不到安息。$b$b克拉茲不會騙你,$c。要淨化這個區域需要很重大的犧牲,但我們晚點再談。$b$b這裡的活人之中有人握有淨化的關鍵。找出德拉克古歐,然後把他的木槌帶回來給克拉茲。','哈克爾營地的克拉茲要你殺死德拉齊金遺跡外頭的德拉克古歐,然後帶著德拉其金木槌回來。','','到灰白之丘的哈克爾營地找卡拉茲。','','','','',0), +(12121,'zhTW','另一頭見','這些德拉克瑞食人妖只懂得用野蠻的敵意跟你相處。你不欠他們什麼。確實很少人能夠完成卡拉茲今天要求你做的事。$b$b要淨化這個地方,並且讓這些靈魂獲得永恆的安息,你就得投身死亡之中。$b$b墓穴中有人在等著你 - 在另一個世界裡。他有我們想知道的情報,$n。$b$b用木槌敲響銅鑼。腐化此地的靈魂必定會將你送到靈魂世界去。$b$b卡拉茲等著你回來。','哈克爾營地的卡拉茲要你用德拉齊金木槌敲響德拉齊金遺跡外面的銅鑼。等到你被殺死後,就能夠進入遺跡並且與剛裘的靈魂交談。','','到灰白之丘的德拉齊金遺跡找剛裘交談。','被督軍吉納拉克殺死','','','',0), +(12128,'zhTW','與瑞加爾聯繫','在軍隊試圖穿越鐸爾莫丹的興奮之中我差點就忘了瑞加爾和他的小組還在勘察員崗哨。$B$B我派了瑞加爾和他的助理,以及一個登山家的朋友去丹亞戈附近建立了一個小哨站,就在東風水濱的南端。$B$B他們是去調查南方丘陵區鐵矮人的蹤跡的,但我至今都沒有收到任何報告。如果你要去那一帶的話,能夠找找他們嗎?','與勘察員崗哨的瑞加爾‧斷眉交談。','','','','','','',0), +(12129,'zhTW','完美的設計圖','鐵矮人毫不隱瞞他們正在準備打仗的事實。有這些巨人、魔像、以及閃電元素,他們等於擁有高於西部荒野民兵團的科技優勢。如果兵團在北邊沒有快點找到通道的話,鐵矮人就會突襲他們。$B$B我們得把矮人擋在這裡,我剛好找到了方法。丹亞戈充滿了不停製造出戰爭魔像的符文鐵匠。他們各自帶著不同零件的設計圖,所以你得尋找拼湊出所有部分。','把完整的戰爭魔像藍圖交給勘察員崗哨的瑞加爾‧斷眉。','','到灰白之丘的勘察員崗哨找瑞加爾·斷眉。','','','','',0), +(12130,'zhTW','可以盜用的時候為什麼要動手製造?','我們有藍圖了,可是沒有零件的話什麼都不能做!我們沒有鑄造廠,更沒有原料,但是在丹亞戈有一大堆的零件。$B$B你的工作?幫這些零件找新家。$B$B它們應該散佈在符文鐵匠工作的建築物裡,我想,當你偷拿他們的手工成品的時候他們會有些暴躁,這也是無可厚非的。你能帶來越多零件,我們就能把魔像做的越好。','把8個戰爭魔像零件交給勘察員崗哨的瑞加爾‧斷眉。','','到灰白之丘的勘察員崗哨找瑞加爾·斷眉。','','','','',0), +(12134,'zhTW','莎夏的狩獵','這東西...這詛咒...侵襲了銀溪鎮和季至村...從人們之中製造出野獸來。$B$B我父親試著要警告他們,但他們全聽信了魔狼教。$B$B他們現在已經完全迷失了,該是時候殺了他們...這也是為了他們好。','莎夏要你去季至村殺死12個季至獵人。','','到灰白之丘的白松貿易站找莎夏。','','','','',0), +(12137,'zhTW','老兄,冷靜點','老兄,就像預言說的,有個$r$c會使我們的靈魂安眠。我們等得可久了!$b$b德拉克瑞人成了失落的一族,好勇鬥狠,他們忘記了曾經擁有過神聖情操,所以他們現在得付出代價。$b$b可是,我們沒做錯事還是遭受苦難,老兄。這片地方必須要有人淨化,而只有活人能辦得到。$b$b以你之身再次加入,並糾正過往的污點吧。從我附近的箱子裡面拿走雪花,讓我的弟兄們睡著。把他們的殘留物拿給你的靈魂嚮導,他知道接下來要怎麼做。','剛裘需要你到德拉齊金遺跡裡,從他的箱子中收集永眠之雪。$b$b對上古德拉克瑞之靈上使用雪花,將德拉克瑞靈魂粒子帶給哈克爾營地的卡拉茲。','','到灰白之丘的哈克爾營地找卡拉茲。','','','','',0), +(12152,'zhTW','吉納拉克的末路','很高興見到你是活著回來的一員,許多經過死者之徑的人無法回來和我們聊聊旅程。$b$b當你不在這兒的時候,卡拉茲見到了一個影像,揭露了接下來要做的事情。$b$b地穴中的某處藏著一個神聖的祭品。用你先前蒐集的遺物所塑造的靈魂之塵,對著這個祭品使用。$b$b注入能量的祭品將會給墮落的督軍帶來死亡,並解放苦難中的靈魂。$b$b願靈魂指引你的行動,$n。','哈克爾營地的卡拉茲要你在德拉齊金遺跡裡面收集神聖德拉克瑞祭品,並且對其使用德拉克瑞靈魂之塵。你必須在哈克爾營地外的鑼使用注入能量的德拉克瑞祭品。','','到灰白之丘的哈克爾營地找卡拉茲。','摧毀督軍吉納拉克','','','',0), +(12158,'zhTW','穴石礦坑','我已經打算派出我的手下去檢查穴石礦坑。不過目前還沒有機會,我們忙著處理西邊的部落,還有東邊的鐵矮人。$B$B可是,如果是都蒙特派你來的,至少我可以指點你正確的方向。$B$B你可以在西北邊找到礦坑的入口,就在離這裡不遠處。看你覺得是否可以搶救那裡的運作。我們確信在遠郡重新開始運作前都可以使用額外的資源。','調查穴石礦坑內的線索,就在西部荒野民兵團駐營的西北邊。','','','','','','',0), +(12159,'zhTW','無法安息之魂','<派特洛夫看起來非常的困擾,他呼吸粗重,目光緊張地在礦坑四周飄移。>$B$B我的同伴...我們必須讓他們的靈魂安息!我殺了又殺,可是...可是他們就是會活過來!$B$B我有一瞬間想到一個方法,可是我真的做不到。$B$B也許你可以替我做這件事?拿著這個提燈,用它把他們的屍體燒掉,以防他們再爬起來。$B$B我之後再回答你的問題,先幫幫我的朋友!','穴石礦坑的派特洛夫要你用礦工提燈燒掉八個穴石礦工的屍體。','','到灰白之丘的穴石礦坑找派特洛夫。','礦工安息','','','',0), +(12160,'zhTW','來自往日的名字','成功了!成功了!我的弟兄們終於能安息了...$B$B我會待在這裡完成任務。我們穴石礦工總是會完成任務––我們永不放棄!$B$B這也是為何以阿魯高為誡。我們不會妥協的,懂嗎?我們不會信奉魔狼教的!','返回格里安‧斯托曼上尉之處,他在西部荒野民兵團駐營。','','','','','','',0), +(12161,'zhTW','『瞎子』魯巫娜','嘿,我無意間聽到你和隊長的交談,但是你要曉得...在北裂境,事情恐怕不會那麼簡單。$B$B不要以為某某人已經送了命,事情就此和他沒有關連。$B$B此處的西南方,靠近沃達希爾小徑,住著一個名叫『瞎子』魯巫娜的盲女。大家都說,他能和死者交談,並且可以看穿過去和未來。$B$B雖然我沒有把你的故事聽完,但感覺上,她就是你所要的答案。','到沃達希爾小徑附近,魯巫娜的營地中和『瞎子』魯巫娜交談。','','','','','','',0), +(12164,'zhTW','獵狼時刻','那麼,是時候了,$n。阿魯高一定得被擊敗。$B$B帶幾個值得信賴的人一起去血月島。就在東方的外海。$B$B我們要迅速攻擊他們。解決阿魯高的士官們 -- 輪到阿魯高那混蛋的時候我會和你們會合。','白松貿易站的莎夏要你前往血月島殺死榭拉斯、凡爾廉、破喉以及阿魯高之影。','','到灰白之丘的白松貿易站找莎夏。','擊敗阿魯高之影','','','擊敗阿魯高之影',0), +(12165,'zhTW','陰謀策劃','勘察員洛卡決定要幫助我們了。他意圖策劃利用鐵矮人的力量對付鐵矮人自己。$B$B我得承認,我們的新「朋友」比我先前所認為的有遠見多了。他的正確判斷認為,我們的數量過少不應做正面攻擊。$B$B前往丹亞戈,那是一片冰天雪地的東南方,從鐵符文鐵匠的身上將戰爭魔像的藍圖奪走。將組合好的藍圖交給洛卡,我們就能知道他的計畫是否有價值。','將拼湊好的戰爭魔像藍圖交給勘察員洛卡,他就在歐尼克瓦營地裡。','','到灰白之丘的歐尼克瓦營地找勘察員洛卡。','','','','',0), +(12183,'zhTW','搜身','如果勘察員韋拉那所說屬實,只有部份鐵矮人允許向洛肯聯繫,那麼一定是那些監督者才有這項特權。$B$B我們得把你弄進去,看看他們究竟在搞什麼鬼,但這可不容易。第一步呢,就是要準備一件像樣的制服給你。$B$B其次,再來為你的化妝傷腦筋。$B$B找到一個丹亞戈的監督者,宰了他,把他的制服帶回來。如果上面有血跡,那也只有怪你自己了。','帶一件監督者制服給勘察員崗哨的巡山人基立安。','','到灰白之丘的勘察員崗哨找巡山人基立安。','','','','',0), +(12184,'zhTW','留下倩影','既然有了制服,我們要蒐集足夠的資訊來完成你的偽裝。$B$B瑞加爾帶著這台攝像機,紀錄他的小隊的發現,但是我的腦袋裡有別的用法。我要你去丹亞戈,捕捉鐵矮人的模樣。$B$B想當然爾,你的模特兒不會乖乖配合,所以你得,欸...征服他先。事成之後,把攝像機和影像一起帶回來給我。','利用齊里安的攝像機紀錄8位丹亞戈的鐵矮人影像,然後向勘察員崗哨的巡山人基立安回報。','','到灰白之丘的勘察員崗哨找巡山人基立安。','捕捉鐵矮人的影像','','','',0), +(12195,'zhTW','意外的訪客','最近一次出發的狩獵隊,不只帶回了獵物。$B$B他們碰上一名負傷的矮人,從鐵矮人的要塞丹亞戈逃出來,他可能知道一些能夠用來對付咱們宿敵的資訊,但是在這之前,我們得先讓他退燒才行。$B$B在附近森林中出沒的覆銀成鹿,牠們的角一直以來都用來做成治療的膏藥。如果你能多帶些角回來,我能便能試試這些膏藥能不能讓我們的「訪客」醒過來。','把5根成年鹿角帶給歐尼克瓦營地的『刀疤』托邁克。','','到灰白之丘的歐尼克瓦營地找『刀疤』托邁克。','','','','',0), +(12196,'zhTW','從頭開始','我沒那麼多閒工夫自己鑄造零件,可是位於東南方丹亞戈的鑄造場正日以繼夜的量產魔像零件。$B$B我想,你應該回去那裡,根據這張藍圖,把零件收集好給我。$B$B這些零件遍佈在鐵矮人符文鐵匠工作的建築物理面。$B$B$n,請快一點,托邁克看起來就要藉故發火了!','把8個戰爭魔像零件交給歐尼克瓦營地的勘察員洛卡。','','到灰白之丘的歐尼克瓦營地找勘察員洛卡。','','','','',0), +(12197,'zhTW','我們要能量','嗯,我們有了魔像的外殼,但是對托邁克來說,這還不夠好。他根本不瞭解這些東西不會自己兜在一塊兒,然後奇蹟似地自己動起來!我們需要電池來啟動它。$B$B當我還在丹亞戈的時候,我注意到符文鐵匠杜拉爾和符文鐵匠卡索恩是製作電池的人。我需要從他們身上各拿一個電池,來替我們的魔像充能。$B$B你可以在丹亞戈中央樓層的工坊中找到這兩位符文鐵匠。','把杜拉爾的能量電池和卡索恩的能量電池交給歐尼克瓦營地的勘察員洛卡。','','到灰白之丘的歐尼克瓦營地找勘察員洛卡。','','','','',0), +(12198,'zhTW','...也許還沒好','魔像的電池已經充能,足以讓它以最低效率運作,但是啟動作戰系統,還需要更多的能量。$B$B好消息是,丹亞戈的外緣有許多的閃電哨兵巡邏,我們可以借助它們的能量替魔像的武器系統充能。$B$B把魔像帶在身邊,靠近這些哨兵,當哨兵死掉之後,它就會吸收這些能量。','從10個閃電哨兵上替你的戰爭魔像充能,然後向歐尼克瓦營地的勘察員洛卡回報。','','到灰白之丘的歐尼克瓦營地找勘察員洛卡。','充能等級','','','',0), +(12199,'zhTW','打倒鐵族長','既然魔像已經完全充滿能量了,咱們就可以用它來對付丹亞戈的首領。$B$B根據我對丹亞戈的首領「鐵族長怒錘」的觀察,他總是被一個魔像用護盾貼身保護著,讓他免受傷害。$B$B我們可以擾亂那具名叫鐵砧的魔像,讓它降下這面護盾。利用你那具魔像的電磁脈衝能力就能完成這項工作。$B$B族長就待在丹亞戈頂端的主要工廠裡面,監督著下層產品進度。','利用戰爭魔像的能力,擊敗鐵族長怒錘,接著向歐尼克瓦營地的『刀疤』托邁克回報。','','到灰白之丘的歐尼克瓦營地找『刀疤』托邁克。','','','','',0), +(12201,'zhTW','監督者的分身','聽起來洛肯才是鐵矮人迅速整軍的幕後主使。$B$B只有最高位階的鐵矮人才能接近他的身邊,所以,我們要把你喬裝成一個監督者,好讓你知道那裡究竟發生了什麼事情。$B$B我有個計畫,不過需要一些物資補給。$B$B在丹亞戈找到一名鐵符文監督者,殺掉他,把他的制服帶回來。','將一件監督者制服帶給歐尼克瓦營地的斥候沃塔克。','','到灰白之丘的歐尼克瓦營地找斥候沃塔克。','','','','',0), +(12202,'zhTW','留下倩影','我們要把工作完成,把你跟那些討人厭的鐵矮人弄成同一個德性。$B$B最好的方法就是根據真的鐵矮人大頭照來製作偽裝。$B$B當托邁克的狩獵小隊發現了那個倔強的勘察員,他們把他手上的攝像機奪走了。我想現在我們有機會使用到了。$B$B把攝像機帶去丹亞戈,殺幾個鐵矮人,把他們的樣子用這個機器記錄下來。樣本照夠了,你再把攝像機帶回來。','使用洛卡的攝像機紀錄8位丹亞戈鐵矮人的影像,然後向歐尼克瓦營地的斥候沃塔克回報。','','到灰白之丘的歐尼克瓦營地找斥候沃塔克。','捕捉鐵矮人的影像','','','',0), +(12203,'zhTW','洛肯的命令','我把你的監督者偽裝所需的所有零件都準備好了。穿上去的時候別吐出來,為了要逼真,我花了不少工夫在上面。$B$B把偽裝工具帶去東南方的丹亞戈,偽裝你自己,前往城市寬廣的中央區最東邊的建築物。$B$B在那裡,你應該可以看見一個族長和監督者聽取洛肯命令的平臺。在偽裝的情況下啟動它,盡你所能的蒐集情報。','把你自己偽裝成鐵符文監督者,攔截洛肯的訊息,然後回報給歐尼克瓦營地的斥候沃塔克。','','到灰白之丘的歐尼克瓦營地找斥候沃塔克。','收到洛肯的訊息','','','',0), +(12204,'zhTW','以洛肯之名','鐵矮人是北裂境最兇猛也最主要的敵人之一,不論我們到哪,他們嘴上總掛著洛肯的名字和我們奮戰。$B$B我們必須知道這個洛肯是誰,他的目的何在。當地人也許會幫忙。$B$B前往東北方的紅木貿易站,有個人名叫休‧格雷斯,兜售著他的貨物。更向東去,瑟希斯遺跡裡面,你可以找到一個名叫葛夫洛克的石巨人。從他們口中打聽洛肯的消息。他們一定知道一些有用的消息。','和休‧格雷斯及葛夫洛克聊聊關於洛肯的消息,並向歐尼克瓦營地的斥候沃塔克回報。','','到灰白之丘的歐尼克瓦營地找斥候沃塔克。','詢問休·格雷斯','詢問葛夫洛克','','',0), +(12327,'zhTW','出竅體驗','啊,你尋求的是過去的景象。你是個睿智的$r。$B$B每次有人來算命的時候,他們總是問我關於未來的問題。當你到了我這年紀,你就會發現探知過去通常更有用。$B$B窺看我的水晶球吧。讓我們看看我們能得知些什麼。','在魯巫娜的水晶球旁飲用輕靈藥水,觀看過去的幻象。','往日的景象','到灰白之丘的魯巫娜的營地找『瞎子』魯巫娜交談。','','','','',0), +(12328,'zhTW','魯巫娜的要求','我不會要你付錢來換取我的服務,因為我可以預見你的行動是必要的,而且今天你獲知的事情將會成為一切的關鍵。$B$B然而,我要你為我收集一種藥劑。從東北方的食蕨巨蛾身上收集輕靈粉末。替我做完這件事之後我就會替你準備一種藥水,帶你去你想目睹的事件所在的時空。','『瞎子』魯巫娜要你取得4把輕靈粉末。','','到灰白之丘的魯巫娜的營地找『瞎子』魯巫娜。','','','','',0), +(12329,'zhTW','命運與巧合','這世間有兩類人,$n。其中一類相信巧合,而另外一類則否。$B$B在我失去視力的那一天,我獲得了預知的能力。我想你可以猜到我是哪一類人。$B$B今天稍早,一個名叫莎夏的年輕女子與你看見了同樣的畫面。你會想跟她談談的。$B$B你可以在正東方的白松貿易站找到她,就在往季至村的路上。','與白松貿易站的莎夏交談。','','','','','','',0), +(12330,'zhTW','逼安那托利開口','我妹妹就在這裡某處,但是這混帳死也不肯說。$B$B他看起來不太在意自己的死活,但是我有主意。我認識安那托利的老婆,塔迦納,打從魔狼教來這之前就認識她了–她是個養馬的。$B$B拿著這枝鎮定飛鏢,活逮住她,我們需要她當作對付安那托利的籌碼。$B$B一旦救出我妹妹,我會幫你把躲在這一切之後的黑手揪出來。','白松貿易站的莎夏需要你拿著鎮定飛鏢,對著季至村的塔迦納使用。把塔迦納帶回白松貿易站。','將塔特亞娜帶回白松商棧','到灰白之丘的白松貿易站找莎夏。','','','','',0), +(12411,'zhTW','守護妹妹的誓言','$n,我懇求你,我曉得你正在追蹤阿魯高的行跡,以父親的記憶發誓,我將幫助你逮到他。$B$B但是,我得求你...安雅是無辜的,我們不能留她和那些野蠻生物在一起。$B$B幫我救出我妹妹,當你對付阿魯高的時候,就能擁有我的協助。$B$B我清楚安那托利口中的巢穴在哪裡,就在山丘的另外一頭。快出發,我妹妹命在旦夕。','去暮嚎之穴尋找安雅的下落,就在季至村的附近。','','','','','','',0), +(12412,'zhTW','敵人之友','我猜你跟我想的都是同一件事:聯盟將會在灰白之丘被擊潰。$B$B這裡有太多木材、礦石、獵物以及戰略要衝,我們不可能放棄這裡的戰線。$B$B到目前為止,我們的計畫都很成功...但是,有件事,會給敵軍關鍵性的幫助。$B$B遙遠的東邊,林邊崗哨中,當地的陷捕者尋求加入聯盟的陣營。在他們有任何機會加入之前,殺光他們。','征服堡的征服者克蓮娜需要你去殺死8名銀溪獵人,以及他們的首領,弗拉戴克。他們就在林邊崗哨中。','','到灰白之丘的征服堡找征服者克蓮娜。','','','','',0), +(12414,'zhTW','準備馬匹','上尉斯托曼把我們的騎四…七士…,阿反正就是騎馬的,統統派去風險海灣打仗了。$B$B會在這裡紮營的原因呢,就是為了東北邊巨礫之丘到這附近滿滿都是跑來跑去的高地野馬。上尉叫我負責把他們抓起來。$B$B你肯幫忙嗎?我有棍子,我有線,營地附近還長滿了野生胡蘿蔔。拔幾根胡蘿蔔,拿棍子一起使用,引誘這些野馬,然後把他們騎回這。','將5匹高地野馬騎回侍從派西身邊,他就在西部荒野民兵團駐營中。','','到灰白之丘的西荒兵團駐營找侍從派西。','帶回高地野馬','','','',0), +(12415,'zhTW','嚇唬馬匹','聯盟的「西部荒野民兵團」就駐紮在遙遠的北邊,鐸爾莫丹的附近。他們愚蠢到分散兵力挑戰我們對風險海灣的控制權,而且他們缺乏騎兵的情形下出發。$B$B他們目前正試著捕捉並馴服那些在西部荒野民兵團駐營以及巨礫之丘附近閒晃的高地野馬。我們一定要在他們補充他們的坐騎以前阻止他們。拿著這個東西,然後丟在馬匹的附近好讓牠們跑走。','驚嚇15匹高地野馬,並回報給索羅克‧風暴之怒,他就在歐尼克瓦營地。','','到灰白之丘的歐尼克瓦營地找索羅克·風暴之怒。','驚嚇高地野馬','','','',0), +(12425,'zhTW','『瞎子』魯巫娜','這些陷捕者的事情有可能比我們估計的還要重要。$B$B如果他們不是站在聯盟那一方,就很有可能是和天譴軍團一夥的,那就代表著麻煩。$B$B不過,我們先前的努力可能有了成果。我們的斥候回報說在跟丟之前。我們的前俘虜與某個占卜師見了面。$B$B我幾乎可確定,如果我們能夠再次找到她,她會帶我們到他們的領導者身邊去。去找『瞎子』魯巫娜,然後看看你能查出些什麼。','到沃達希爾小徑附近,魯巫娜的營地與『瞎子』魯巫娜交談。','','','','','','',0), +(12430,'zhTW','征服之淵:致死方休','我就跟你直說了,小子。下個參賽者是個謀殺犯。$B$B真的就是謀殺犯。$B$B他本來上週就要被處刑了,但他只用左手就絞死了劊子手,所以克蓮娜的守衛把他轉交給我。$B$B你可以跳過這個傢伙,我不會怪你的。','在征服之淵中擊敗霍葛倫‧地獄斬,然後找布齊‧維爾占談話取得你的獎賞。','擊敗霍爾格雷·地獄之斧','到灰白之丘的征服堡找布齊‧維爾占。','','','','',0), +(12431,'zhTW','征服之淵:攤牌時刻','你一定讓克蓮娜覺得很煩心。她和高耿娜互罵了一陣,現在她要你立刻到征服之淵裡報到。$B$B有謠言說那是場致死方休的戰鬥!這對你來說是個壞消息,不過對我們的生意來說是個天大的好消息!$B$B不管怎麼說,你都不可能逃過命運...最好快點進去了結這件事。','在征服之淵中擊敗克蓮娜。','','到灰白之丘的征服堡找高耿娜說話。','','','','',0), +(12483,'zhTW','燉幻光菇','嘿,你有空的時候,何不幫老皮格蒙做點事?我有個朋友會做一種超棒的燉菜 - 你絕對沒吃過這麼好吃的東西!$B$B他想要這附近出產的幾種食材。在西南邊的遺跡和北邊的營地就找的到了。$b$b怎麼樣,老兄?','花崗岩之泉的皮格蒙要你去德拉克辛遺跡收集5個幻光雪菇和5個冰蛇之眼,以及從札布哈拉克收集5個甜根。','','到灰白之丘的花崗岩之泉找皮格蒙。','','','','',0), +(12763,'zhTW','重點移轉','雖然我們這裡的需要非常迫切,來自北邊大地的消息也不容忽視。$b$b我剛剛接到來自銀白十字軍的消息。天譴軍團的軍隊似乎全集結在那裡,打算進犯祖爾德拉克。$b$b想也知道,$n,如果真的是這樣的話,那我們在這的奮鬥都將成為白費。你一定要去那裡援助十字軍,擊退巫妖王的軍隊。$b$b等你準備好出發時,與邁基談談。','斥候沃塔克要你前往祖爾德拉克向聖光止境的瑞安娜中士回報。$b$b歐尼克瓦營地的邁基‧冬風會提供你交通工具。','','','','','','',0), +(12770,'zhTW','資源調度','聽著,$c!$b$b你不會待在這裡太久的。雖然我們需要有能力的$c待在軍中,但北邊的麻煩讓我們這裡的問題相較之下簡直跟暴風城仲夏遊行沒有兩樣。$b$b看來天譴軍把主力集中起來,全力向祖爾德拉克推進。如果他們得逞了,我們就會遭到包圍。$b$b你可以把在這裡的事情都做完,但接下來就該前往聖光止境了。如果你需要運輸工具,就和山繆說吧。$b$b解散。','格里安‧斯托曼要你向聖光止境的瑞安娜中士報到,位於祖爾德拉克之中。$b$b你可以與山繆‧克里爾布克談話,他會送你去聖光止境。','','','','','','',0), +(11993,'zhTW','符文預言','我們沒有時間可以浪費了!現在我們結合了符刻拱心石 -- 嗯,大部分的 -- 就可以解讀布萊恩在逃跑前所研讀的文獻。$B$B我們不知道他是否研讀過三個金屬板,但我們可以假設他已經取得足夠的資訊,讓他前往下一個目的地。$B$B在每一塊金屬板之前,使用拱心石解讀文獻。布萊恩也許就靠我們了!','西部荒野民兵團駐營的多杉‧深掘要你解讀三塊符文板。','','到灰白之丘的西荒兵團駐營找多杉·深掘。','解讀第一段預言','解讀第二段預言','解讀第三段預言','',0), +(11998,'zhTW','動之以情','讓我們的部隊能最快前往寒冰皇冠的方法,就是透過上古鐵矮人城市鐸爾莫丹之下的隧道網。$B$B布魯嘉‧石聽和他的探險者協會成員大概會不太爽,不過命令就是命令。$B$B要是你能帶給他一桶紅木貿易站的陷捕者,休‧格雷斯所賣的私釀酒,事情會好談一些,貿易站就在東南方靠近林線的地方。$B$B那個傢伙腦袋有點不太正常,不過在這裡你找不到比他更好的私釀酒了。','帶給布魯嘉‧石聽一桶嚎爽私釀酒,他就在西部荒野民兵團駐營。','','到灰白之丘的西荒兵團駐營找布魯嘉·石聽。','','','','',0), +(12002,'zhTW','戰鬥中的弟兄','我希望格里安知道我在戰鬥開始的時候就把我的手下撤離了鐸爾莫丹。在這裡穩定下來之前,我們不可能挖掘任何東西。$B$B你看起來像是個勇敢的人,而且你也有斯托曼的信任。$B$B鐸爾莫丹就在我們的東北邊,而在我們的土靈弟兄和鐵矮人造物之間的戰鬥依舊激烈。盡量幫助我們的弟兄,我會開始想辦法找出我們該如何完成鐸爾莫丹的測量。','殺死10個符刻戰鬥魔像然後向西部荒野民兵團駐營的布魯嘉‧石聽回報。','','到灰白之丘的西荒兵團駐營找布魯嘉·石聽。','','','','',0), +(12003,'zhTW','發掘隧道','我搜尋鐸爾莫丹隧道系統入口的第一個地點就是偏遠的建築群。$B$B當我帶著我的手下離開時,那些鐵矮人防衛者似乎正在建築中安置難民。在你探索的時候請務必小心。$B$B任何隧道入口都有可能會通往那些建築。我不確定斯曼托希望我們找些什麼,但我很懷疑鐵矮人會任由我們這樣調查。','西部荒野民兵團駐營的多杉‧深掘希望你去探索鐸爾莫丹的北部建築、東部建築和南部建築。','','到灰白之丘的西荒兵團駐營找布魯嘉·石聽。','調查北部建築','調查東部建築','調查南部建築','',0), +(12010,'zhTW','歐隆德的命運','當我們開始挖掘這座城市時,我派了勘測員歐隆德去檢查鐸爾莫丹中隧道的穩定性。當戰鬥開始我們撤退的時候,我沒有看到他逃出來,我擔心他還被困在城市之中。$B$B如果我們想讓一支軍隊通過鐸爾莫丹的話,我們需要他收集的資料。要是隧道在我們的兵團頭上塌下來的話,斯托曼和他的上司一定會把我的皮給扒下來!','在鐸爾莫丹中尋找勘測員歐隆德。','','','','','','',0), +(12014,'zhTW','穩若泰山?','歐隆德的筆記指出,他攜帶了一台名叫可攜式地震儀的裝備,可是現在哪兒都找不到。$B$B調查紀錄顯示,他在鐸爾莫丹的坑道中完成了所有的讀數記載,除了一條標有「外露東部坑道底」的坑道以外。$B$B最後一條紀錄記載歐隆德躲在水底下的時候遭到地下蛇頸龍的攻擊。這些生物可能把他的裝備搶走了。在你讀取最後的讀數以前,你必須把它找到。','拿回可攜式地震儀,並使用它讀取鐸爾莫丹的數據。最後向西部荒野民兵團駐營的布魯嘉‧石聽回報。','','到灰白之丘的西荒兵團駐營找布魯嘉·石聽。','','','','',0), +(12026,'zhTW','破損的日誌','這本破損、沾滿污泥的日誌飽經風霜。匆匆翻過書頁,你發現許多用矮人語寫成的筆記、圖示與地圖。$B$B你唯一能辨識出來的文字,是字句結尾處,布萊恩‧銅鬚潦草的簽名。$B$B這本冊子的後半部,包含了最近的才寫的內容,已經被扯掉了。某個人覺得這本筆記很重要,所以才摧毀了它。也許從戰場中收集這些遺失的書頁,可以讓你找到一些線索。','找回8頁失蹤日誌紙頁,將它們和不完整的日誌黏合起來,然後將完整的日誌交給歐尼克瓦營地的賢者帕努納。','','到灰白之丘的歐尼克瓦營地找賢者帕努納。','','','','',0), +(12042,'zhTW','先祖之心','多年的秘密,終於在我面前顯露啦!$b$b<德拉庫魯從預言者之眼窺伺著。>$b$b啊,$n,我的天命是很偉大的。你運氣好認識我。$b$b瞧,我看見了,老兄!還有先祖之心,這實在太簡單了...你去那個哥布林屍體的附近,就在不遠的東邊,可以找到那顆心。靠近那條有棵斷樹的河流旁,有個房間,他就在裡面。$b$b動作快點,老兄,要在別人找到之前動手!','德拉庫魯要你去藍天伐木地最高處的房間找到先祖之心。','','','','','','',0), +(12070,'zhTW','重整部隊','鐵之子使用他們的符文奴役了我許多的兄弟,用他們來突破鐸爾莫丹的圍城。我希望我們不必與他們作戰,但我們沒有選擇。$B$B我的巨人無法支撐太久這樣的攻擊。$B$B我對這片土靈裂片灌注了祝福的力量,以協助我們的盟友。帶著這個參與北方巨礫之丘的戰鬥,並且用這來穩定並且強化我們的同伴。$B$B殺死所有阻礙你的鐵矮人。','在巨礫之丘的戰鬥中使用大地裂片來重整灰白之丘巨人,殺死阻礙你的鐵矮人,然後向庫倫回報,他就在可以俯瞰鐸爾莫丹的山丘上。','','到灰白之丘的巨礫之丘找庫倫。','鼓舞灰熊丘陵巨人','殺死鐵符文復仇者','','',0), +(12081,'zhTW','葛夫洛克','沒有你的幫助,我們無法扭轉鐸爾莫丹的情勢。這座古老的城市長久以來一直都是這些土與石族勢力的戰場。我唯一的祈求就是最後能將戰事弭平。$B$B鐵矮人仍舊能利用他們的魔法捕捉並奴役我們的弟兄,葛夫洛克正在尋找出拯救符文巨人的方法,你可以在一處被稱為「瑟希斯遺跡」的群島上找到他,位置就在離東風水濱中央到南方的海面上。','和瑟希斯遺跡的葛夫洛克交談。','','','','','','',0), +(12093,'zhTW','強制符文','即使庫倫攻打鐸爾莫丹的同時,鐵矮人仍將他們的魔法作用在我們的同胞身上。從地上召喚出我們的同胞,使用符文束縛他們,這些鐵之子強迫他們向石之子作戰。$B$B他們使用強制符文沿著東風水濱,把受奴役的巨人送到北方的戰場上。$B$B找出四個強制符文,破壞它們迫使他們的監督者現身–這些監督者正是控制每顆符文的編織者。只要沒了這些監督者,符文一點用也沒有。','瑟希斯遺跡的葛夫洛克要你去打敗監督者德沃、監督者寇爾甘、監督者羅克利和監督者布魯農,好讓四個強制符文失去效力。','','到灰白之丘的瑟希斯遺跡找葛夫洛克。','','','','',0), +(12094,'zhTW','潛在的力量','雖然支配符文具有強制性,我們還是有個機會能解放這些符文巨人。$B$B我會給你一片石頭,自從我被創造以來它就一直是我的一部份。如果適當地注入能量,它就能用來解放那些被束縛的巨人。$B$B在鐵之途和森林邊緣之間的能量之地上,也就是你們稱為地脈交叉點的地方,有兩個遠古石頭地標。另外一個在遺跡南方盡頭的島嶼上。到各個石頭處把碎片充能,然後回來找我。','到第一塊遠古之石、第二塊遠古之石、以及第三塊遠古之石替葛夫洛克裂片充能,然後返回瑟希斯遺跡找葛夫洛克。','','到灰白之丘的瑟希斯遺跡找葛夫洛克。','從第一塊遠古巨石吸取能量','從第二塊遠古巨石吸取能量','從第三塊遠古之石中抽取能量','',0), +(12099,'zhTW','終獲自由','你所灌滿的碎片應該足以用來打破束縛我兄弟的符文魔法。$B$B帶著它,沿著東風水濱前往北邊找到符文巨人。釋放石頭中儲藏的能量並觀察結果。$B$B如果有效的話,符文巨人應該會回復神智不再服從鐵矮人。要是石頭失效的話,巨人會在被削弱的狀態下攻擊。但是,我們有什麼選擇呢?如果我們不去嘗試的話,他們永遠會毫無希望的被奴役著。','使用葛夫洛克的符文破壞者釋放四個符文巨人,然後向瑟希斯遺跡的葛夫洛克回報。','','到灰白之丘的瑟希斯遺跡找葛夫洛克。','釋放符文巨人','','','',0), +(12105,'zhTW','深入黑暗','這本日誌是由一個銀溪鎮的居民米克哈爾所寫的。內容詳細紀錄了一個組織的到來,被稱作『魔狼教』的暗影信徒。$B$B村民起初並不情願信奉這個教派,但是它的支持者逐漸遍佈村民之中。$B$B出於不安,米克哈爾把他的女兒莎夏從銀溪鎮送走,並且嘗試勸導其他的村民。$B$B米克哈爾在最後一行字提到,一場與鎮長召開的會議,討論穴石礦坑中不明的現象。','將米克哈爾的日誌帶給琥珀松小屋的都蒙特中尉。','','到灰白之丘的琥珀松小屋找都蒙特中尉交談。','','','','',0), +(12109,'zhTW','向格里安‧斯托曼報到...又來了','西部荒野的士兵被送往東部,前去尋找通往北地的路徑。他們的次要目標是確保戰略資源點,所以我確定他們不會介意調查該座礦坑。$B$B找到遠在東北方的西部荒野民兵團駐營,以及格里安‧斯托曼。如果你在西部荒野待過一陣,你應該會對他有印象。別忘了提醒他是我派你去的。$B$B如果你能為國王宣示一座可供開採的礦坑主權,他一定會很開心的。','和西部荒野民兵團駐營的格里安‧斯托曼交談。','','','','','','',0), +(12162,'zhTW','季至村','','','','','','','','',0), +(12163,'zhTW','暗藏邪惡','','','','','','','','',0), +(12231,'zhTW','熊神的後裔','灰白之丘的熊怪,可能受到與沃達希爾的疫病相同的肆虐。他們被牽連進最近一場血腥的部族戰爭,就在數年的和平共處之後。$B$B他們所護衛的東方聖壇,正是厄索克後裔的老家。$B$B如果這股墮落之力已經影響了熊怪,可能的理由是他們之間的血脈,寇荻安與歐爾嵩仍然沒有受到傷害。$B$B如果原因是如此,找出他們,聆聽他們說什麼。','征服堡的風先知灰角要求你和怒牙聖壇的歐爾嵩,以及心之血聖壇的寇荻安交談。','','到灰白之丘的征服堡找風先知灰角。','奧索恩的故事','寇荻安的故事','','',0), +(12236,'zhTW','熊神厄索克','該來的還是會來,$n。如今,我們將得以證實所付出的努力是否能完成我們的目標,抑或只是白忙一場。$B$B帶著這些灰燼,尋找寇荻安跟你提過的熊怪,圖爾‧怒掌,就在厄索克之穴的附近。那個洞穴在灰喉鎮的北邊。$B$B說服圖爾幫助你,達成你所需要的一切協助。$B$B一旦你擊敗了熊神,在他的軀體上使用這些灰燼。$B$B即便他的巨大形體被摧毀,靈魂還是必須被保存下來。','位在征服堡的風先知灰角要你找到厄索克之穴附近的圖爾‧怒掌,在他的協助之下擊潰厄索克。達成任務之後,在厄索克的屍身上使用淨化過的沃達希爾灰燼。','','到灰白之丘的征服堡找風先知灰角。','淨化厄索克','','','',0), +(12241,'zhTW','摧毀樹苗','熊怪的行為必須被阻止,$n。要是整件事的尾聲是以受到污染作結,那麼,我們的努力也不會有意義。$B$B樹苗一定要被摧毀,它們是這黑暗力量的根源。拿著這根火炬,點燃被腐化的樹苗,並將灰燼帶來給我。$B$B一旦以烈火淨化完成,我會以我自身的力量驅除樹苗上的腐化物。你需要這些灰燼淨化支配厄索克身上的邪惡力量。','征服堡的風先知灰角需要你拿著嫩綠火炬,使用它燒盡沃達希爾樹苗。將沃達希爾灰燼交給風先知灰角。','','到灰白之丘的征服堡找風先知灰角。','','','','',0), +(12247,'zhTW','厄索克的子嗣','唯一能肯定的,那就是灰白之丘的熊怪們帶有某種墮落物質。在多年的和平共處之後,部落戰爭在他們之中爆發。$B$B殘存下來的僅有他們視為神祇信奉的熊,但也難逃被污染的命運。$B$B厄索克的兩名子嗣,歐爾嵩、寇荻安分別居住在怒牙聖壇和心之血聖壇,分別在灰喉鎮的東南方和南方。$B$B看他們是否願意告訴你這兒發生了什麼事。','琥珀松小屋的祭師賽苓需要你和怒牙聖壇的歐爾嵩、心之血聖壇的寇荻安交談。','','到灰白之丘的琥珀松小屋找祭師賽苓。','歐爾嵩的故事','寇荻安的故事','','',0), +(12248,'zhTW','沃達希爾樹苗','遠古時代的德魯伊們看來有著極佳的理由來摧毀沃達希爾,而我們不能讓熊怪復植沃達希爾。$B$B另外,樹苗所蘊含的魔力決定了拯救厄索克之靈的關鍵。$B$B拿著這根火炬,燒盡樹木。其位置就在灰喉鎮的中央,沃達希爾的老舊樹幹中。$B$B將沃達希爾灰燼帶來給我,希望一旦用火焰淨化過後,我們能利用它的魔力潔淨厄索克之靈的黑暗污染。','琥珀松小屋的祭師賽苓需要你拿著嫩綠火炬,使用它燒盡沃達希爾樹苗。將沃達希爾灰燼交給祭師賽苓。','','到灰白之丘的琥珀松小屋找祭師賽苓。','','','','',0), +(12249,'zhTW','熊神厄索克','是時候了,$n。帶著這些灰燼,尋找寇荻安跟你提過的熊怪。如果他動身尋找厄索克,他一定在厄索克的巢穴附近,灰喉鎮的北邊。$B$B你會需要他的協助,你是無法獨力擊敗厄索克的。$B$B當你打敗厄索克之後,使用這些灰燼來淨化他的靈魂,屆時才知道我們的努力是否會付諸流水。','琥珀松小屋的祭師賽苓要你找到厄索克之穴附近的圖爾‧怒掌,在他的協助之下擊潰厄索克。達成任務之後,在厄索克的屍身上使用淨化過的沃達希爾灰燼。','','到灰白之丘的琥珀松小屋找祭師賽苓。','淨化厄索克','','','',0), +(12250,'zhTW','沃達希爾種子','我們必須阻止沃達希爾再度被種下。如果熊怪能復植沃達希爾一次,那麼就會有第二次。$B$B快去灰喉鎮,就在灰白之丘的正中央,取得沃達希爾種子,我會確保每顆種子都能被確實的摧毀。','琥珀松小屋的祭師賽苓要求你前往灰喉鎮拾取8顆沃達希爾種子。','','到灰白之丘的琥珀松小屋找祭師賽苓。','','','','',0), +(12279,'zhTW','大胃熊','感謝上天你回來了,瘸子!我很擔心葛薩爾妲,我怕我又要孤零零一個人了。$B$B我煮了好多吃的,但是葛薩爾妲一口都沒動。$B$B她喜歡吃東風水濱的魚,就在東邊。我討厭那些魚,但是她很挑食。六條完整的魚應該可以讓她開心好一陣子。$B$B現在,快去...呃...反正你也跑不快,伙計。總之,你不會想要讓女孩子等太久吧?','帶回6條北地鮭魚給位在紅木貿易站的休‧格雷斯。','','到灰白之丘的紅木貿易站找休·格雷斯。','','','','',0), +(12288,'zhTW','潰不成軍!','就是你,$c!幫幫我!$b$b我們正不斷失去寶貴的生命!有太多受傷的士兵在等著我照料,如果不能治癒我們的士兵,我們只得全體撤出灰白之丘!$b$b帶著止血帶,對戰場上的傷者使用。$b$b$n,要快!他們就要送命了!','藍天伐木地的奧瑪納需要你對10名受傷的爭鬥者使用恢復止血帶。','','到灰白之丘的藍天伐木地找奧瑪納。','治療受傷的爭鬥者','','','',0), +(12289,'zhTW','落井下石','這是聯盟黑暗的一日。許多善良的士兵在此死去或是等死。唯一值得欣慰的是,他們英勇奮戰,和許多敵人同歸於盡。$b$b我等大多數的主力投入了對風險海灣的戰事,我們只得單獨面對這場風暴。此處的資源對聯盟來說重要性不言可喻,同時也會對部落勢力的消長有關鍵的影響。我們絕對不能失敗!$b$b快去,$n,趁他們還在舔傷口的時候發動攻擊,為你死去的同志復仇,讓我們的希望不滅!','士官赫茲曼需要你解決15名藍天伐木地的部落成員或玩家。','','到灰白之丘的藍天伐木地找士官赫茲曼。','消滅部落成員','','','',0), +(12292,'zhTW','當地人的支援','我們與部落在灰白之丘已戰成了僵局。我們的勢力相差無幾,而所有的跡象都指出雙方只能夠僵持不下。$B$B直到今天早晨。本地的陷捕者們請求了我們的協助。顯然部落拿走了某個屬於他們的東西...某種聖物。$B$B我們幫他們把這玩意拿回來,然後他們就會為我們效力。朝征服堡西方的常青貿易站前進,然後尋找一個雪松木箱。','琥珀松小屋的都蒙特中尉要你前往常青貿易站取得雪松木箱。','','到灰白之丘的琥珀松小屋找都蒙特中尉。','','','','',0), +(12293,'zhTW','完成約定','我們拿到了陷捕者們想要的東西。現在該把他們拉到我們這一方了。$B$B把這個箱子交給北邊白楊崗哨裡叫做伊凡的陷捕者。$B$B如果一切順利,本地的護林者很快就會成為國王軍隊的斥候了。','將雪松木箱帶去給白楊崗哨的伊凡。','','到灰白之丘的白楊崗哨找伊凡。','','','','',0), +(12294,'zhTW','暫時性的條約','非常好,$n。你的人按照約定完成了交易。$B$B告訴都蒙特我們會兌現我們的約定。','向琥珀松小屋的都蒙特中尉回報。','','','','','','',0), +(12295,'zhTW','外交行動','好幾週以來,我們一直嘗試要和陷捕者們交涉,但直到你找到那個破爛的箱子以前,都沒有任何的進展。$B$B這對我們在銀溪鎮的特使來說應該是個好消息。我們一週前派了杜卡過去,而他最新的一封信說他沒有任何的進展。$B$B前往銀溪鎮,並且幫助他進行外交工作。走西北方的那條路,過幾條橋之後就到了。','與銀溪鎮的特使杜卡交談。','','','','','','',0), +(12296,'zhTW','生死一線','噢,這場大屠殺...$b$b我參加過許多戰鬥,$c,而這場戰鬥血腥的程度超越我看過的任何一場。我們與部落的戰鬥遠比從前激烈。在這北裂境,要不他們,要不是我們 - 要不活,要不就死。$b$b如果我們要在此地再多活一天,我們就得要照顧傷者。我一個人救不了那麼多。$b$b我準備了一些特別的繃帶,好讓你能夠幫助我。拿一份繃帶,然後去照顧那些還沒死於傷口之下的人們。','藍天伐木地的雷安娜要你使用恢復繃帶照料10個受傷的西荒步兵。','','到灰白之丘的藍天伐木地雷安娜。','治療西荒步兵','','','',0), +(12299,'zhTW','北方的待客之道','見到你真好。讓我們以老式的獵殺部落來慶賀我們的盟約。$B$B你會在城鎮外頭的征服堡找到一些掠奪者,就在這兒的西邊。你何不去那裡獵殺那些骯髒的生物?$B$B讓我們看看我們的新盟友能不能以實際行動來支撐他們的大話。','銀溪鎮的瑟傑要你殺死八個征服堡掠奪者。','','到灰白之丘的銀溪鎮找瑟傑。','','','','',0), +(12300,'zhTW','堅毅試煉','好吧,朋友。你幫了我們一兩個小忙,但這並沒有測試出一個人真正的勇氣。$B$B在這一帶,如果你沒有披上自己獵物的皮,都不能算是一個真正的獵人。$B$B<瑟傑拔出他自己的剝皮刀遞給你。>$B$B這些攻擊我們城鎮的獸人混蛋,他們的領袖叫做斷骨;你可以在西北邊的營地找到他。$B$B沒錯,你要去剝那個混帳的皮。','在銀溪鎮的西北邊找出斷骨中士,並且通過堅毅試煉。','','到灰白之丘的銀溪丘找被俘虜的陷捕者。','堅毅試煉','','','',0), +(12302,'zhTW','警告的話語','謝謝你幫助我,$n。我的名字是莎夏。聽著,我一定得離開這個鬼地方。$B$B派你來這裡的人...我的人民...他們變了。他們不再是好人...而且他們想要把你變成...變成他們的一份子。$B$B...他們派你來進行的這個...「試煉」只不過是個開始。$B$B去銀溪鎮的西北端看看。你會找到一些令你感興趣的東西。$B$B祝你好運...不要相信任何人。','前往銀溪鎮的西北邊緣。','','','','','','',0), +(12307,'zhTW','禍狼根','你聽過禍狼草嗎?那是種恐怖的植物...會摧毀我們的即將收成的作物。$B$B我們花了整整一個星期把它們砍掉,但這些草根又開始發芽了。$B$B這看起來雖然不像是一件緊急的事情,但這種植物再長出來可真的會是...一場災難。如果你在村子附近找到的話,你能夠幫忙拔除它們嗎?','銀溪鎮的卡特加要你拔除8個禍狼根。','','到灰白之丘的銀溪鎮找卡特加。','','','','',0), +(12308,'zhTW','逃離銀溪鎮','你...你不是他們的一份子?快點!放我出去!$B$B我們必須立刻前往琥珀松小屋!一旦都蒙特中尉發現這些傢伙究竟是什麼人,這個城鎮會被徹底摧毀!','打開木籠,然後幫助獲釋的聯盟斥候逃離銀溪鎮。當你抵達琥珀松小屋之後,向都蒙特中尉報告。','','到灰白之丘的琥珀松小屋找都蒙特中尉。','逃離銀溪鎮','','','',0), +(12310,'zhTW','快速反應','我們的反應必須迅速,確實。我們要教訓這些野蠻人別妨礙我們。$B$B我們的斥候已經發覺銀溪陷捕者所遺留下的東西…你懂的,有些舉動只會欲蓋彌彰。很顯然,他們封鎖了前往東南方的道路…也許他們要阻止我們前往。$B$B前去林邊崗哨解決他們。據報,他們的首領名字叫弗拉戴克…搞定他。','都蒙特中尉要你去林邊崗哨殺死弗拉戴克,以及7名銀溪獵人。','','到灰白之丘的琥珀松小屋找都蒙特中尉。','','','','',0), +(12314,'zhTW','和柔納船長一併擊沉!','部落的軍隊已經蓄勢待發衝破我們的防線,如果我們再不行動,風險海灣就會被他們所拿下了。在港灣的部落軍隊聽命於柔納船長,她人遠在海灣另一頭的船艦。$B$B如果妳能擊敗她,部落的進攻將會退縮,我們也能將港口拿下。當心點,$n,柔納可是個兇猛的鬥士。你會需要一些人手來打敗她,或者是,如果你擁有一台修復的伐木機,你可以使用它來幫上一些忙。','殺死柔納船長,並回報給風險海灣的佛里曼男爵。','','到灰白之丘的風險海灣找佛里曼男爵。','','','','',0), +(12315,'zhTW','粉碎澈水艦長!','每次推進,我們的人就會遭遇新的聯盟援軍。簡直就像是他們的指揮官算準了我的每一步似的!$B$B現在偉大的澈水艦長該去死了。他在海灣遠處的聯盟驅逐艦上指揮他的部隊。$B$B這會是場硬仗,$n。帶幾個值得信賴的朋友,或者你有鑰匙開動那些修復的伐木機,用它把澈水開腸剖肚!不管你用哪種方法,他都非死不可!','殺死澈水艦長,然後向風險海灣的卡茲嘉將軍報告。','','到灰白之丘的風險海灣找卡茲嘉將軍。','','','','',0), +(12316,'zhTW','死守海灣!','我們不能讓部落控制風險海灣。這個港口對於我們在灰白之丘以及其他地方的行動來說是不可或缺的。$B$B斯托曼上尉已經帶領剩餘的西部荒野民兵團往東搜尋穿越山脈的道路,所以我們沒有後援軍力了。$B$B去戰場上,$n,然後殺死部落派來的征服堡狂戰士。殺到他們一個不剩。聯盟必須得到這個港口!','擊敗10個部落成員或玩家,然後向風險海灣的斯圖亞特中尉回報。','','到灰白之丘的風險海灣找斯圖亞特中尉。','殺死風險海灣的部落成員','','','',0), +(12317,'zhTW','死守海灣','這該死的西部荒野民兵團是個比我們預期中更強悍的對手。雖然他們人數很少,卻驍勇善戰,但我們沒有時間慢慢耗了。$B$B征服者克蓮娜的命令是盡快佔領港口。你必須打破這僵局,$n。找出敵人的海軍士兵然後殺到他們停止抵抗為止。這樣我們才能夠握有港口的控制權。$B$B動作快點,我不想讓征服者克蓮娜等太久。','擊敗10個聯盟成員或玩家,然後向風險海灣的百夫長卡格朗姆回報。','','到灰白之丘的風險海灣找百夫長卡格朗姆。','殺死風險海灣的聯盟成員','','','',0), +(12323,'zhTW','把他們燻出來','還有許多膽小的風險投資公司員工躲在風險海灣中央的建築物裡。我必須把手頭上每個人都派去跟部落作戰,但我們也不能允許那些風險投資公司的離群者繼續在那些建築物裡紮營。$B$B也許我們能「說服」他們向他們的船隻移動。帶上這個煙霧彈,然後用它來把那些離群者從他們的農舍、鋸木廠或獸欄裡面燻出來。記得不要太靠近,他們可能會咬人的。','使用煙霧彈來把20個風險投資公司離群者從建築物驅逐出去,然後向士官當尼報告。','','到灰白之丘的風險海灣找士官當尼。','燻出風險投資公司離群者','','','',0), +(12324,'zhTW','把他們燻出來','這個港不止有大批流著鼻涕的聯盟懦夫出沒,更糟糕的是,還有許多風險投資公司的員工躲在那些建築裡面。他們不值得我們浪費時間去殺,而且反正我手邊也沒有多餘的戰士可用。$B$B也許我們可以「說服」他們向他們的船隻移動。帶著這個煙霧彈,然後用它把那些離群者從農舍、鋸木場或獸欄裡燻出來。記得不要太靠近;天知道他們身上染有什麼疾病。','用煙霧彈把20個風險投資公司離群者從建築物驅逐出去,然後向石衛士狂暴圖騰報告。','','到灰白之丘的風險海灣找石衛士狂暴圖騰。','燻出風險投資公司離群者','','','',0), +(12413,'zhTW','銀溪之戰','數小時之前,那些陷捕者充其量不過就是些農夫,被逼著加入聯盟的部隊。$B$B現在他們變成了別的東西...一個不確定因素。我討厭不確定。前去灰白之丘的北方,他們村子銀溪鎮外頭的丘陵,協助我們的人手擊潰這些陷捕者。','征服堡的征服者克蓮娜需要你殺死8名銀溪防衛者,你可以在銀溪丘上找到他們。','','到灰白之丘的征服堡找征服者克蓮娜。','','','','',0), +(12426,'zhTW','DEPRECATED ','','','','','','','','',0), +(12802,'zhTW','我心與你同在','<德拉庫魯的聲音在你的腦海中縈繞。>$b$b嘿,老兄!預言者之眼太棒啦!我已經用它觀察你,發現你拿到那顆心了!還不賴...$b$b你現在只要把它帶回德拉克托通道,我的火盆那裡就好了,對你來說很輕鬆的。$b$b還有,你一定要在石台那喝下我的藥劑來召喚我。這回你需要混入一些絕望魔精才能發揮效用。','德拉庫魯需要你把先祖之心帶給他,就在德拉克托通道中。$b$b你要收集5個絕望魔精才能在那裡使用藥劑。','','','','','','',0), +(12981,'zhTW','熱與冷','當你凝視著鐵砧的時候,你回想起最近所做的事情,尤其是將這個神器帶來此處的那件事。$b$b你突然想到你能做些什麼了。在東邊,悶燒的廢金屬散落在地面上…都是此地戰鬥的殘留物。$b$b如果能夠將之冷卻收集起來,霜巨人就能夠得到足夠的金屬,而且也能夠清理掉戰爭留下的垃圾。','你要前往霜域湖,殺死易怒的亡魄,然後在斐雍之砧對著悶燒的廢金屬使用寒冰精華。接著,你必須收集6個冰凍鐵碎塊並回到丹尼弗蘭的斐雍之砧處。','','到風暴群山的丹尼弗蘭的遠古寒冬山谷找斐雍之砧。','','','','',0), +(12985,'zhTW','鑄造頭部','你好,$r。$b$b既然你仍舊想要取得我們人民的信任,裘庫姆王覺得有項工作很適合你。$b$b我設計了另外一樣神器,能夠讓我們的堡壘獲得霍迪爾的祝福。我幾乎已經收集到所有需要的原料了。唯一缺少的就是我們死去敵人的眼睛。$b$b帶著這個工具,然後從散落在原野的鐵巨人屍體上面收集眼睛。','丹尼弗蘭的尼約梅爾德要你去霜域湖,在死亡的鐵巨人身上使用鑽石尖端之鎬,收集8個風鑄之眼之後帶回去給他。','','到風暴群山的丹尼弗蘭的遠古寒冬山谷找尼約梅爾德。','','','','',0), +(11981,'zhTW','找到庫倫!','土靈戰士的石頭表面布滿了裂痕與鑿痕。儘管不會流血,你還是可以感覺到那個戰士即將要死去。$B$B一個嘶啞而低沉的聲音從垂死戰士的口中傳出。$B$B「找到...庫倫...你一定要找到...庫倫。」$B$B當你詢問他庫倫是誰或是什麼時,他只是無助地看著你。$B$B「我們的...領袖...他站在俯瞰鐸爾莫丹的山丘...指揮我們。請...告訴他...我們無法拿下...城市...」','和庫倫交談,他就在可以俯瞰鐸爾莫丹的山丘上。','','','','','','',0), +(11985,'zhTW','進入缺口','如果我們無法打倒鐸爾莫丹內部的防衛者,鐵矮人就可以堅守下去。土靈只能勉強控制那些由鐵之子所建造的傀儡,但他們無法攻入城市。$B$B隧道縮窄得太快,我的巨人們根本無法使用,所以我們沒有多少選擇。你願意進入城市中,殺死他們的指揮者嗎?','在可以俯瞰鐸爾莫丹的山丘上的庫倫要你殺死鐵族長阿爾古姆。','','到灰白之丘的巨礫之丘找庫倫。','','','','',0), +(11984,'zhTW','把籠子裝滿','老霸德也有過輝煌的日子。$b$b但自從我們在鬼魂之地以來,他就對我們一點用也沒有了。我們得自己想辦法謀生,以現在來說就是把食人妖賣給出價最高的買家。$b$b幸運的是,我們最近找到了霸德的用處。他的身分讓他可以跟本地的食人妖打交道,所以我們教了他一些把戲,以便讓我們獲利。$b$b你自己去看。跟霸德聊聊,帶他去德拉克辛遺跡西南邊,當他逮到食人妖的時候馬上使用這個籠子。','花崗岩之泉的山米爾要你對著被霸德擊昏的寒冰食人妖使用賞金獵人的籠子。','','到灰白之丘的花崗岩之泉找山米爾。','活捉寒冰食人妖','','','',0), +(11990,'zhTW','幻象之瓶','一步一步來,老兄,有些準備工作要做。$b$b沒人告訴我他們要把我關多久,你需要一罐強猛的藥劑我們才能保持聯繫。$b$b你走狗運啦,我剛好知道那東西!材料又剛好都在附近。$b$b我要那邊那個食人妖小子身上的瓶子,北邊湖裡的水蘊草,還要一些海茲伍灌木葉。$b$b快去快去,老兄,他們就要把我拖走啦!','花崗岩之泉的德拉庫魯要你帶給他1個水晶瓶、1片水蘊草藻葉和3片海茲伍灌木葉。','','到灰白之丘的花崗岩之泉找德拉庫魯。','','','','',0), +(11991,'zhTW','呈交翻譯','有一套傳說中的神器,為了保衛德拉克薩隆要塞而被創造出來,失傳了千年之久。$b$b大多數的人認為這些神器只是傳說,但是德拉庫魯很清楚,老兄!$b$b我差一點就能發現神器在哪,卻在解讀象形文字的時候被逮了。你得把我的靈魂召喚回去那裡,我才能夠把它讀完!$b$b去德拉克辛遺跡的火盆使用我的藥劑,遺跡就在西南方而已。你得摻入我弟兄的冰凍魔精,我雖然不忍看到我的弟兄被殺害,但是這可是為了更偉大的未來而做的犧牲。','德拉庫魯需要你從德拉克辛遺跡的德拉克瑞食人妖身上獲得5個冰凍魔精,然後在德拉庫魯的火盆上使用藥劑。','','','','','','',0), +(12007,'zhTW','犧牲是必要的','我知道了,老兄!$b$b就在北邊,札布哈拉克的通靈塔之上,有個石像頭鑲著紅寶石眼睛。其中一顆紅寶石就是那個預言者之眼!把它帶到火盆來,然後喝下我的藥劑。$b$b當然,要讓我的藥劑作用,又會需要一些魔精 - 這次得從督軍辛波身上取來。他就躲在札布哈拉克的小屋裡。$b$b殺死辛波是件可恥的事,老兄,但他立下血誓要守護德拉克薩隆,而他卻失敗了。如今他的魔精至少可以讓我們重新奪回德拉克薩隆。','德拉庫魯要你將預言者之眼帶給他,就在札布哈拉克的德拉庫魯的火盆處。$b$b你必須收集辛波的魔精,以便在火盆上使用德拉庫魯的藥劑。','','到灰白之丘的札布哈拉克找德拉庫魯的影像。','','','','',0), +(12029,'zhTW','燒烤天譴軍','<嗝>...要把這些臭屍體給全燒了,省得他們又在那邊走來走去。$b$b老爹總是說,比殺死一隻食人妖還糟糕的事情,就是殺死他兩遍。$b$b嗯,<嗝>...說到天譴軍,除非我們把杵在北邊的那些食人妖減少一些個數量,否則我們是進不去的。$b$b你何不把我的烈酒拿來,給這些混蛋一點顏色瞧瞧?','花崗岩之泉的麥客要你前往德拉克薩隆,使用他的烈酒去燒20個極餓的天譴食人妖。','','到灰白之丘的花崗岩之泉找麥客·菲爾森。','燃燒天譴食人妖','','','',0), +(12170,'zhTW','黑河爭奪戰','在我們到來之後,風險投資公司很快放棄了營運。很顯然地他們害怕我們會對他們貪婪的小藏身所不利。$B$B在他們滾蛋之後,他們的伐木營地變得炙手可熱。我們的戰爭機器是頭飢餓的猛獸...要是沒有補充我們的補給品,我們到不了寒冰皇冠。$B$B很不幸,聯盟那邊跟我們的想法一樣,所以我們一定要確保只有我們得利。前去伐木營地,幫我們對抗聯盟人渣。','狼騎兵隊長克羅恩要你去黑河伐木營地,殺死10名聯盟成員或玩家。','','到灰白之丘找狼騎兵隊長克羅恩。','殺死黑河的聯盟','','','',0), +(12175,'zhTW','銀灰座狼皮','老兄,我們來聊聊吧。如果你的工作是幫整個部落大軍整裝,那你會需要一大堆的狼皮!$B$B征服者克蓮娜,她是這裡的老大,她給我了一個很短的時限,要是我沒辦法在一週內將她的軍團軍備搞定,她就要我去跟洞裡的熊摔角。$B$B幫幫我,我不會虧待你的。我需要灰霧獵食者的皮。$B$B你可以在北邊幾處發現牠們在獵取雄鹿,老兄,記得啊,我不會虧待你的!','征服堡的皮革商人朱尼克需要你從灰霧獵食者身上取得3張銀灰座狼皮,牠們出沒在北邊的樹林裡。','','到灰白之丘的征服堡找皮革商人朱尼克。','','','','',0), +(12176,'zhTW','窮則變變則通','克蓮娜,她希望用座狼皮打造她所有的裝備。但是,要供應她所有的部隊,座狼皮是絕對不夠的。永遠也不可能。$B$B那些座狼––老兄,牠們很瘦!要是你願意保密的話...那我們也有對策。$B$B沃德盧恩的東邊,有著跟巨魔一樣肥的灰熊。牠們的巨大皮革––我們可以拿來用!$B$B快去,$g兄弟:姊妹;。克蓮娜可不是以她有耐心聞名的。','皮革商人朱尼克需要你帶給他6張灰熊毛皮。','','到灰白之丘的征服堡找皮革商人朱尼克。','','','','',0), +(12177,'zhTW','越描越灰','啊,我們遇到了小麻煩。灰熊皮…老兄,是褐色的!$B$B想…快想啊!$B$B我知道啦,老兄!就是啊:灰色就是黑色和白色摻在一起變成的。你給我一些煤炭和麵粉,把他們攪碎撒在皮革上。不會有人發現的!$B$B鐵匠有賣熔煉用的煤塊,然後你可以在物資供應者手上拿到麵粉。','帶1塊煤塊和5包簡易麵粉給皮革商人朱尼克,他在灰白之丘的征服堡裡。','','到灰白之丘的征服堡找皮革商人朱尼克。','','','','',0), +(12178,'zhTW','交貨給克蓮娜','完成啦,老兄。把這些皮革拿給克蓮娜,看看能不能通過測驗。$B$B為了你和我,希望克蓮娜啥都不會發現。','將一捆獸皮拿給征服堡的克蓮娜。','','到灰白之丘的征服堡找征服者克蓮娜。','','','','',0), +(12190,'zhTW','跟我的小朋友問好','哈克爾看到這些上選的材料以後,一定會自願掏出金塊的。剩下就是把東西帶給他了。$b$b他就在東方邊境處紮營,靠近鬧鬼的德拉齊金遺跡。$b$b在我搞定這些屍體之前,你應該可以到得了那裡...除非,你對屍體防腐比較感興趣?','皮格蒙要你將哈克爾的原料,帶給哈克爾營地的哈克爾。','','到灰白之丘的哈克爾營地找哈克爾。','','','','',0), +(12207,'zhTW','沃達希爾的傾圮','久遠之前,強大的德魯伊在此處的東北栽植了一株巨木。$B$B該株巨木被稱為沃達希爾,也就是承繼了諾達希爾的...世界之樹。沒有人知道原因,但就在樹木完全長成以後,德魯伊們決定必須毀掉它。$B$B自從我們抵達這裡以來,$n,大地就不斷對我傾訴。她苦楚的哭號從沃達希爾殘株倒下的地方傳來。$B$B腐化的軟泥怪在該處遊蕩,帶給我一些軟泥怪的樣本,好讓我們開始治療這片土地。','征服堡的風先知灰角需要你前往沃達希爾之枝、沃達希爾之心與沃達希爾之淚三處,從混亂軟泥怪身上獲得6件黏液樣本。','','到灰白之丘的征服堡找風先知灰角。','','','','',0), +(12208,'zhTW','食人妖獵捕手','混帳廢物!$b$b他們本來可以輕鬆解決的。我們伸出了和平之手,他們唯一要做的事情就是讓我們通過德拉克薩隆,然後我們也能讓他們好過。$b$b然而,他們不肯,這些驕傲的小小寒冰食人妖決定要來硬的。總之,他們不但要被痛宰,我們依舊要經過他們珍貴的要塞前去祖爾德拉克。$b$b我們和一幫人定了約定,幫我們運送俘虜的食人妖。如果你有意參與行動,和山米爾聊聊吧。你可以在這裡的西北方發現他,札布哈拉克的正南方。','士官蘇爾金告訴你和花崗岩之泉的山米爾交談。','','','','','','',0), +(12212,'zhTW','倉庫補貨','早啊,$c。$b$b中尉大人提過,倉庫被部落洗劫,使得我們的糧食補給嚴重不足。$b$b不用說,我們要讓這些惡棍付出代價,但是首要我們得專注在補足倉庫。我的手下盡力在做了,但是為了要扭轉劣勢,我們需要每個成員貢獻出力量。$b$b你可以在本地的成鹿身上取得鹿肉。祝你狩獵愉快!','琥珀松小屋的護林者大師安德豪爾需要你殺死高角成鹿,並收集8塊多汁鹿肉。','','到灰白之丘的琥珀松小屋找護林者大師安德豪爾。','','','','',0), +(12213,'zhTW','竄出的黑暗','有些東西...黑暗的東西...侵襲了沃達希爾。就在德魯伊們決定摧毀世界之樹之後,它中空的殘枝依然生長著盤根,直入地底。$B$B我需要你前去東北邊殘破樹幹的三處地方,盡你所能的深入地底。$B$B一旦你下到裡面,使用這顆寶珠,讓該區域環繞的能量對它留下痕跡。這會散發出些許光亮,看清沃達希爾發生了何事,並且瞭解為什麼它無法成為一株世界之樹。','征服堡的風先知灰角需要你前往沃達希爾之枝、沃達希爾之心與沃達希爾之淚三處,在其地表之下深處使用地卜者寶珠。','','到灰白之丘的征服堡找風先知灰角。','在沃達希爾之心下方使用寶珠','在沃達希爾之臂下方使用寶珠','在沃達希爾之淚底下使用寶珠。','',0), +(12215,'zhTW','不是你死,就是我亡!','好像我們的問題不夠多似的...$b$b除了食物危機之外,我們發現還必須與本地的座狼爭搶食物。情況越發惡劣,我擔心要是我們再不趕緊解決這個狀況,很快我們就沒東西獵了。$b$b搜索這座森林,$r。殺光所有你找到的灰霧。報告指出他們群聚在西邊河流的南岸。','琥珀松小屋的護林者大師安德豪爾希望你找出並殺掉6個灰白之丘的灰霧獵食者。','','到灰白之丘的琥珀松小屋找護林者大師安德豪爾。','','','','',0), +(12216,'zhTW','從後面上!','我們辛苦工作了那麼久,總該有所回報,但我們離目標還遠的很。我們需要比現在更多的肉,顯然光靠本地的雄鹿數量是不夠的。$b$b我怕我們需要你將轉向更危險的獵物身上–灰熊,同時也是這個地名的由來。牠們數量龐大,在溪邊覓食魚群。$b$b別大意,$c!','琥珀松小屋的安德豪爾需要你從灰白之丘的灰熊身上收集8塊灰熊腰肉。','','到灰白之丘的琥珀松小屋找護林者大師安德豪爾。','','','','',0), +(12217,'zhTW','鷹眼','$n,我們已經確定部落是如何刺探出我們隱藏的存糧了。$b$b原來是他們將視覺連結到翱翔在林間上空,這些絲毫不會起人疑竇的老鷹上,利用老鷹的視力,他們便能有效得窺伺我們的一舉一動。$b$b奉中尉之命,我們得獵殺這些高貴的鳥兒,以阻止我們的敵人。','琥珀松小屋的安德豪爾需要你殺死5隻帝王雄鷹,並向他回報。','','到灰白之丘的琥珀松小屋找護林者大師安德豪爾。','','','','',0), +(12219,'zhTW','衰退的世界樹','我的祖先曾經在灰白之丘的中央栽植了一棵樹。$B$B它被稱作沃達希爾,本來是要成為新世界樹的。$B$B為了某個早已被人們所遺忘的理由,在世界樹完全長成之後,祖先們決定摧毀它。它巨大的枝幹在此地的北方分岔成三個方向。$B$B樹幹觸碰到地面的部份,邪惡的軟泥怪開始蔓延地表。帶給我黏液樣本,如此才能開始我的研究,大地才能被治癒。','琥珀松小屋的祭師賽苓需要你前去沃達希爾之枝、沃達希爾之心、和沃達希爾之淚三處,混亂軟泥怪身上獲得6份黏液樣本。','','到灰白之丘的琥珀松小屋找祭師賽苓。','','','','',0), +(12220,'zhTW','黑暗的影響','當沃達希爾倒下的時候,它中空的殘枝依然生長著盤根,直入地底。$B$B我要你前往北方,樹幹碎裂的三處地方,盡你所能的深入地底。你會在灰喉鎮的西邊找到這些地方。$B$B一旦你下到裡面,使用這顆寶珠,複印該區域環繞的能量。如果我們要治療這片大地,首先就得找出世界樹當年倒下的原因。','琥珀松小屋的祭師賽苓需要你前往沃達希爾之枝、沃達希爾之心與沃達希爾之淚三處,在其地表之下深處使用地卜師寶珠。','','到灰白之丘的琥珀松小屋找祭師賽苓。','在沃達希爾之心底下使用寶珠','在沃達希爾之枝底下使用寶珠','在沃達希爾之淚底下使用寶珠','',0), +(12222,'zhTW','縛火者的秘密','就當我們要擊退部落的時候,靠近南邊海岸,掠龍族人在他們沃德盧恩的村內進行徵兵。$B$B村子裡最強的戰士被授予火焰灌注咒符,使他們有控制強大、野蠻的元龍之力。如果我們能控制其中一隻元龍,也許我們能利用牠解決沃德盧恩所構成的威脅。$B$B掠龍縛火者製造出咒符,同時灌注力量進去。殺掉他們,拿走咒符。','帶3條火焰灌注咒符給琥珀松小屋的護林者崔克。','','到灰白之丘的琥珀松小屋找護林者崔克。','','','','',0), +(12223,'zhTW','削弱敵軍','南方沃德盧恩村發生了一連串的騷動。族長特沃德‧艾利克森以及他的侍衛正在準備出征。這片荒野上,我們大多數的人都在對抗部落的詭計,琥珀松將會非常脆弱。$B$B旅行至沃德盧恩,很靠近南方的海岸,讓掠龍族人曉得我們不是好欺負的。$B$B殺掉那些侍衛,多多益善。讓他們想想,在這個與部落衝突的時刻,進犯我們是不智的。','殺死12名掠龍侍衛,返回琥珀松小屋的護林者崔克那裡。','','到灰白之丘的琥珀松小屋找護林者崔克。','','','','',0), +(12242,'zhTW','沃達希爾種子','我們必須保證沃達希爾不會再長出來了。熊怪一定已經收穫了它的種子。$B$B快去灰喉鎮,就在灰白之丘的正中央,拾取所有你舉目所見的種子,我會確保每顆種子都能被確實的摧毀。','征服堡的風先知灰角要求你前往灰喉鎮拾取8顆沃達希爾種子。','','到灰白之丘的征服堡找風先知灰角。','','','','',0), +(12244,'zhTW','伐木機維修','聽著,夥伴,捲起袖子拾起扳手如何?還有活兒要幹啊!他們需要翻修這些伐木機,並運往風險海灣,而且,這件事昨天就要完成了...$b$b沒有扳手?那你到底會什麼?還不如和底下的那些呆瓜一樣跟部落玩耍!$b$b既然你在這裡,你看看有沒有辦法把一兩台壞掉的伐木機帶上來修理。小心點,他們的邊緣很利的!','藍天伐木地的辛尼普斯需要你帶3台壞掉的伐木機給他。','','到灰白之丘的藍天伐木地找辛尼普斯。','伐木機送達','','','',0), +(12246,'zhTW','可能的關聯性','居住在東邊的熊怪比起以前我們所認識的更加具侵略性與兇殘。我方的勢力數度與之交手,倖存者總是提到從他們屍體上流下來的黝黑、黏稠的物質。$B$B牠們的狀況可能與沃達希爾殘株上發現的污染源相關聯。$B$B帶給我熊怪血液的樣本,你可以在遙遠的東邊,怒牙聖壇和心之血聖壇找到牠們。','琥珀松小屋的祭師賽苓需要你從心之血聖壇和怒牙聖壇的熊怪身上獲取8瓶瘋狂熊怪之血。','','到灰白之丘的琥珀松小屋找祭師賽苓。','','','','',0), +(12255,'zhTW','沃德盧恩的族長','既然你奪取了火焰灌注咒符,並且削弱了沃德盧恩的防禦,那麼,我們就能攻擊他們的首領,族長特沃德‧艾利克森。$B$B族長最心愛的坐騎,是一頭難以駕馭的元龍,名喚烈焰使者。牠被栓縛在沃德盧恩的西半部,然而,有了這條咒符,應該有足夠的時間,可以操控他對抗族長。$B$B一旦你將烈焰使者納入你的控制,在沃德盧恩塔頂搜出族長的蹤跡,不要留情的殺掉他。','利用烈焰使者擊敗族長特沃德‧艾利克森,然後向琥珀松小屋的護林者崔克回報。','','到灰白之丘的琥珀松小屋找護林者崔克。','','','','',0), +(12256,'zhTW','縛火者之秘','即使聯盟的懦夫攻擊我們的據點,但東南方沃德盧恩的掠龍維酷哨站仍在繼續準備戰爭。維酷人和我們所面對過最強的敵人相比,還差得遠呢,但是我們得在他們真正給我們造成威脅之前,徹底消滅他們。$B$B他們之中最強的鬥士才能駕駛元龍作戰,縛火者製造出了威力強大的咒符,來控制這些野獸。你需要殺掉他們,奪走咒符,使我們的計畫成功。','帶3個火焰灌注咒符給征服堡的士官納茲格寧姆。','','到灰白之丘的征服堡找士官納茲格寧姆。','','','','',0), +(12257,'zhTW','展現實力','東南方沃德盧恩的維酷村落正在為戰爭作準備。沃德盧恩的族長沒辦法湊出一支龐大的軍隊,但是在我們的軍力這麼分散的狀況下還是很有風險。$B$B我們不能讓族長跟他的部下有機會攻擊,所以我們必須主動迎敵。如果你真的是個部落的$c,你會很高興有這個機會能展現我們的實力。$B$B殺掉那些侍衛,告訴那些掠龍者不該看輕部落!','殺死12個掠龍侍衛,然後回去找征服堡的士官納茲格寧姆。','','到灰白之丘的征服堡找士官納茲格寧姆。','','','','',0), +(12259,'zhTW','沃德盧恩的族長','有了這些灌注了火焰的符咒,我們終於可以挑戰族長了。$B$B他最喜愛的坐騎是一隻叫做烈焰使者的凶暴元龍。牠被鐵鍊綁在沃德盧恩的西部,但你應該可以利用符咒的力量操控牠來對付族長。$B$B一旦你控制了烈焰使者,就去沃德盧恩的塔頂找出族長並利用烈焰使者來消滅他。','利用烈焰使者擊敗族長特沃德‧艾利克森,然後向征服堡的士官納茲格寧姆回報。','','到灰白之丘的征服堡找士官納茲格寧姆。','','','','',0), +(12268,'zhTW','拼湊零件','喔!這真是一團糟!$b$b哥布林工程學真的是留了一堆爛攤子,相信我。你看看!光是它能動就是個奇蹟了。$b$b你會幫我個忙吧?要將它修改成能操作的規格的話,我需要幾個齒輪,扣鏈齒輪,以及彈簧。你應該毫無困難的就能在鉅木場四周找到它們。','藍天伐木地的籽擊要你去收集4個溝槽齒輪、3個凹槽扣鏈齒輪和2個高壓彈簧。','','到灰白之丘的藍天伐木地找籽擊。','','','','',0), +(12270,'zhTW','鋸開聯盟','讀我的唇語,$c - 我要那些伐木機!同樣重要的是 - 我要他們脫離聯盟的掌握!$b$b他們一直整修那些伐木機,然後用它們來對付我們在風險海灣的弟兄。現在我要讓他們嚐一嚐自己的手段!$b$b你看到伐木機,就搶過來!你看到聯盟的人渣搭乘的伐木機,就宰掉他們然後搶過來!搶到一台之後,就把它開過來我這裡,然後我們再來處理它。$b$b解散!','藍天伐木地的葛列克要你奪取三台伐木機給他。','','到灰白之丘的藍天伐木地找葛列克。','伐木機送達','','','',0), +(12280,'zhTW','維修工作','明天中午以前要二十台伐木機!$b$b誰安排的這個時程啊?一定是從來沒有拼湊過這些垃圾桶的傢伙,才會這樣搞...$b$b如果要湊到那個數目,就得找個幫手。幫我個忙,我就跟你分享我的佣金–很公平吧?$b$b我需要齒輪、扣鏈齒輪和彈簧。它們就散落在伐木機附近的地上。','藍天伐木地的盧爾茲要你去收集4個溝槽齒輪、3個凹槽扣鏈齒輪和2個高壓彈簧。','','到灰白之丘的藍天伐木地找盧爾茲。','','','','',0), +(12284,'zhTW','讓他們動彈不得','這裡的災情慘重,$r。$b$b唯一的好消息是兵力得以補充。我請求更多的援兵,但我軍的運兵船卻被困在了風險海灣。看來如今只能靠我們自己了。$b$b無論情況再怎麼糟,我們「必須」堅守此地!這裡的珍貴資源對部落在北裂境的成功經營舉足輕重。$b$b在援軍抵達之前,我們一定要讓聯盟動彈不得。快去那裡,讓他們無暇他顧!','指揮官巴茍克要你刺殺15名藍天伐木地的聯盟成員或玩家。','','到灰白之丘的藍天伐木地找指揮官巴茍克。','消滅聯盟成員','','','',0), +(12422,'zhTW','戰術性赦免','聽著,$n。我要你謹慎而迅速的行動。$B$B克蓮娜的一個高階士官在銀溪鎮外面抓到了一位被流放的陷捕者。如果按照他們一貫的行事作風,在今天傍晚以前囚犯就會被處決掉。$B$B我們不能讓這件事發生。你知道的,這囚犯的特徵與米克哈爾在日誌中描述的大女兒符合。$B$B如果我們放走她,然後跟蹤她,她將會帶領我們找到控制著陷捕者的人。把這封信帶去給她。','把赦免信交給銀溪丘上被俘虜的陷捕者。','','到灰白之丘的銀溪丘找被俘虜的陷捕者。','','','','',0), +(12423,'zhTW','米克哈爾的日誌','從你收集到的資訊看來,這本日誌是由一名叫做米克哈爾的銀溪鎮居民所寫的。$B$B這是由某種變體的人類通用語所寫成的。也許你該把它帶回去給征服者克蓮娜。','把米克哈爾的日誌帶去給征服堡的征服者克蓮娜。','','到灰白之丘的征服堡找征服者克蓮娜。','','','','',0), +(12424,'zhTW','高耿娜','這本書是用人類的豬言狗語寫的。這得立刻燒掉$B$B把它交給我的姊妹高耿娜,別浪費我的時間。','把米克哈爾的日誌交給征服堡的高耿娜。','','到灰白之丘找高耿娜交談。','','','','',0), +(12427,'zhTW','征服之淵:熊摔角!','所以說你對戰鬥有興趣,啊?好吧,克蓮娜已經禁止了所有入伍的士兵參加鬥技場戰。不過你呢,我的朋友,技術上來說是一個自由的戰鬥員,所以不算在禁令裡面。$B$B很棒的漏洞,嗯?$B$B總而言之,如果你有興趣的話,我可以先讓你從某隻沒價值的爛熊開始出道。我甚至可以讓你帶朋友下場!','在征服者之淵中擊敗鐵皮,然後找布齊‧維爾占談話取得你的獎賞。','擊敗鐵皮','到灰白之丘的征服堡找布齊‧維爾占。','','','','',0), +(12428,'zhTW','征服之淵:瘋熊怪之戰','你還不賴。真的不賴。$B$B你覺得你可以打得過熊怪嗎?那來隻特大號北裂境熊怪怎麼樣?$B$B很好很好。帶上你的隊友,去場子裡吧。讓我們給這些傢伙一場精采表演...也許我們這趟可以賺更多的銅板。','在征服之淵中擊敗托格‧雷電圖騰,然後找布齊‧維爾占談話取得你的獎賞。','擊敗托爾格·雷霆圖騰','到灰白之丘的征服堡找布齊‧維爾占。','','','','',0), +(12429,'zhTW','征服之淵:鐵與血','在這種地方能找到個真正的鬥士真好...我們過去幾週來都只有一些囚犯和關在籠子裡的野獸。人們都覺得無聊了,你懂吧?$B$B總之,你的下一個挑戰是從鐸爾莫丹偷出來的一座純正鐵魔像...你覺得你能擊倒它嗎?','在征服者之淵中擊敗鏽血,然後找布齊‧維爾占談話取得你的獎賞。','擊敗鏽血','到灰白之丘的征服堡找布齊‧維爾占。','','','','',0), +(12432,'zhTW','乘著紅色火箭','嘿,$r!給我把你那身懶骨頭滾來這裡!$b$b聯盟有艘運木船就在東北方。既然我們得不到他們的木材,那我們只有一件事好做–毀掉木材!$b$b港口尾端的哥布林有幾枚魚雷已經蓄勢待發,他也有燃料,全都在北邊那艘停著的哥布林船隻上面。$b$b取得一些燃料,控制一枚魚雷,駕駛它攻擊船艦。$b$b稍息後解散,稍息!','風險海灣燈塔中的戈洛科將軍要你摧毀聯盟的運木船隻。$b$b戈洛科將軍只有當部落勢力拿下燈塔之後才會出現在該處。','','到灰白之丘的風險海灣找戈洛科將軍。','摧毀聯盟運木船艦','','','',0), +(12433,'zhTW','尋找溶劑','呃啊!又來了,又一塊墊圈報銷了...$b$b每次只要這種事發生,潤滑劑就會在所有的零件上流淌得到處都是。要是沒有溶劑,光是清理就要花上好幾個小時。$b$b你知道嗎,$r,在碼頭上風險投資公司的接駁船中,有種很棒的火箭燃油–他們好像叫它元素115吧。那種油可以作成絕佳的溶劑。$b$b拿一罐來,我可以提供麻煩你的獎勵。','風險海灣中,部落基地的葛特需要你帶一罐元素115給他。','','到灰白之丘的風險海灣找葛特。','','','','',0), +(12436,'zhTW','額外收入','你好,$c。你會發現在這征服堡,我們買賣克蓮娜要我們買賣的東西...而且是以克蓮娜要我們買賣的價格。$B$B這都是些令人發悶的生意。我想賺一點錢,同時餵飽咱們的蠻兵。你何不去獵捕一些雄鹿,然後拿些鹿肉來給我?$B$B這附近有無數的鹿,所以我只要你拿最好的肉來。','征服堡的補給官羅克芮要你從附近的高角成鹿身上取來5塊多汁鹿肉。','','到灰白之丘的征服堡找補給官羅克芮。','','','','',0), +(12437,'zhTW','乘著紅色火箭','$n,聽好了。這場戰爭不僅爭奪戰略上的優勢,同時還有資源上的領先。$b$b我有一個任務可以扭轉目前面對此處部落的劣勢。$b$b港口尾端有幾枚魚雷,我們可以利用它擊沉西北邊部落的運木船。$b$b你必須從北邊哥布林停泊的船上取得一些燃料,再將魚雷射向他們的運輸艦!','風險海灣燈塔的指揮官豪瑟需要你摧毀部落的運木船隻。$b$b指揮官豪瑟只有當聯盟勢力拿下燈塔之後才會出現。','','到灰白之丘的風險海灣找指揮官豪瑟。','摧毀部落運木船','','','',0), +(12443,'zhTW','尋找溶劑','呃啊!又來了,又一塊墊圈報銷了...$b$b每次只要這種事發生,潤滑劑就會在所有的零件上流淌得到處都是。要是沒有溶劑,光是清理就要花上好幾個小時。$b$b你知道嗎,$r,在碼頭上風險投資公司的接駁船中,有種很棒的火箭燃油–他們好像叫它元素115吧。那種油可以作成絕佳的溶劑。$b$b拿一罐來,我可以提供麻煩你的獎勵。','風險海灣中,聯盟基地的巴爾玻芬克需要你帶一罐元素115給他。','','到灰白之丘的風險海灣找巴爾玻芬克。','','','','',0), +(12444,'zhTW','黑河前哨戰','風險投資公司正在離開灰白之丘的路上。他們以前把這裡當作是轉運木材的地點,但是狀況對他們來說變得過於危險。$B$B他們棄置的營地如今炙手可熱,而且我們非常清楚不能讓部落染指這個地方。$B$B黑河伐木營地是本區三個伐木地中最小的,但是我們仍然需要它。完成你分內的工作,防衛部落大軍,任何他們奪走的木材都將會被製成武器,在別處用來對付我們。','斥候隊長卡特需要你去黑河伐木營地殺死10名部落成員或玩家。','','到灰白之丘找斥候隊長卡特。','殺死黑河的部落','','','',0), +(12451,'zhTW','前往歐尼克瓦營地','當我們建築征服堡的時候,我派了斥候沃塔克和我們東方的坦卡雷盟友接觸。他們駐紮在前往歐尼克瓦營地,就在灰白之丘的最東邊,越過灰喉鎮的地方。$B$B前去該地,聽取沃塔克的報告,提供他,以及當地酋長你的援助。你對征服堡的貢獻是所有人的模範,同時,我知道沃塔克會感謝你的幫助的。','和歐尼克瓦營地的斥候沃塔克交談。','','','','','','',0), +(12453,'zhTW','上空的窺伺','他們要我提供協助對抗聯盟大軍。目前的情況,我軍與對方勢均力敵,而我們極力找尋優勢。$B$B在這附近翱翔於山巔林間的帝王雄鷹將會是我們極佳的斥候選擇。帶著這根銀色的羽毛,將我的目光與牠們連結在一起。$B$B只要能看到敵人的一舉一動,便能獲得我們所需的戰略優勢。你將會發現大量的雄鷹出沒在東方的山地中。','風先知灰角要你在6隻灰白之丘的帝王雄鷹身上使用銀羽。','','到灰白之丘的征服堡找風先知灰角。','連結帝王雄鷹的目光','','','',0), +(12468,'zhTW','征服者的工作','部落是一具雄偉的戰爭機器,而你只不過是個齒輪。$B$B我負責替這台機器確保燃料。如果我死了,這機器就會失靈。$B$B木材、礦石、水...這裡都有,而且我們都想要。而聯盟也是。$B$B在我們對付那些人類雜碎之前,我們必須鞏固對西方區域的控制。$B$B跟士官納茲格寧姆討論消滅如何沃德盧恩的維酷族;要是你能證明你不是個徹底的廢物的話,我們會再派給你更進一步的工作。','與征服堡的士官納茲格寧姆交談。','','','','','','',0), +(12484,'zhTW','天譴烤肉','呃。$b$b綑綁那些不幸的食人妖讓我的心好痛,可是我的背更痛!$b$b幫老皮格蒙一把,把屍體拖到麥客那裡去。$b$b如果不把他們燒掉,要不了多久他們又會爬起來亂晃。','花崗岩之泉的皮格蒙要你把一具乾縮食人妖屍體帶去給麥客‧菲爾森,然後放進火裡。','','到灰白之丘的花崗岩之泉找麥客·菲爾森。','焚燒乾縮屍塊','','','',0), +(12487,'zhTW','前往征服堡,但要小心!','我從我們在灰白之丘的基地接到援助請求。我派你去見征服者克蓮娜。$B$B<高階執行官揮了揮手上一捆的羊皮紙,彷彿這樣可以比較不在意上面寫了些什麼。>$B$B她也試圖要守護此地的所有自然資源以及其他事物。但你在她身邊要小心點。有謠言說就算以獸人的標準而言,她都太過具有侵略性了。$B$B沿著路往東,然後轉往東南。越過龍脊支流的橋樑,然後再從常青貿易站往東走。','向征服者克蓮娜自我介紹,她就在灰白之丘的征服堡。','','','','','','',0), +(11989,'zhTW','休戰?','注意一點,老兄。$b$b德拉庫魯縮皺過的$r人頭多到我都記不清了 - 就算我記得,我也數不了那麼多。多虧我被關在這個籠子裡,否則名單上的倒楣鬼恐怕又要多一個了。$b$b不過事情就是這樣,也許我們應該把彼此的歧見先放到一邊,嗯?$b$b德拉庫魯知道很多事情,老兄。一些可以幫助你在此地的事情。$b$b<德拉庫魯用獠牙在掌心劃了一道,然後把手伸出籠子外。>$b$b你覺得怎麼樣,老兄...休戰?','花崗岩之泉的德拉庫魯要你在他籠子附近使用粗鈍的雕刻刀,然後再和他交談。','','到灰白之丘的花崗岩之泉找德拉庫魯。','與德拉庫魯締結血契','','','',0), +(12038,'zhTW','燒烤天譴軍','你在發什麼呆,$c?那些天譴食人妖可不會自殺死掉!$b$b你知道怎麼玩的。去德拉克薩隆的北邊...拿這些烈酒遠遠地往那些天譴軍頭上丟...<嗝>。然後等著看他們燃燒吧。','花崗岩之泉的麥客要你使用他的烈酒燒掉30個極餓的天譴食人妖。','','到灰白之丘的花崗岩之泉找麥客·菲爾森。','燃燒天譴食人妖','','','',0), +(12210,'zhTW','獵食人妖季!','就是你,$r!有事情還沒做完之前不要杵在那裡!$b$b德拉克薩隆要塞是前往祖爾德拉克最直接的道路,我們『務必』攻下它以確保聯盟行進時的安全。但是在我們湊齊發起突擊的人數之前,我們只要削減寒冰食人妖的數量並且收集情報就夠了。$b$b這樣一直下去,我們就能招募一群暴徒來幫我們捕捉食人妖,並且將他們送去審問。前往西北方,和花崗岩之泉的山米爾交談,他會告訴你更多的訊息。','琥珀松小屋的都蒙特中尉需要你與花崗岩之泉的山米爾交談。','','','','','','',0), +(12225,'zhTW','嗯...琥珀種子!','當一股撲鼻的核果香味吸引了你注意到這桶種子時,你的胃開始咕嚕嚕的叫。$b$b顯然某個貼心的人留下了這頓佳餚任人取用,讓疲憊的旅人重振精神。你滿懷感激的拿走了剩下的幾顆核果,狼吞虎嚥了起來。$b$b這些種子並沒有讓你失望。你餓得還想多吃幾顆,於是出發去找這些種子的來源...','和護林者大師安德豪爾交談,他就在琥珀松小屋。','','','','','','',0), +(12226,'zhTW','一路暢通到底','$r,我們得快點!我可不能冒險讓這些珍貴的種子被消化掉。「馬上」把它們給弄出來。$b$b到西邊河岸採收一些黑根草,我會為你調配一些瀉藥,這樣應該會有所作用。$b$b快點去!別忘了,這是你自找的...','琥珀松小屋的安德豪爾需要你帶給他5株黑根莖。','','到灰白之丘的琥珀松小屋找護林者大師安德豪爾。','','','','',0), +(12227,'zhTW','我可幫不了你','好了,$r。這是黑根草的汁。$b$b一喝見效,所以麻煩你到廁所之後再喝下去。$b$b把種子還給我!','琥珀松小屋的安德豪爾需要你飲用安德豪爾的黑根沙,並且利用附近的廁所將消化一半的琥珀種子取回來。','','到灰白之丘的琥珀松小屋找護林者大師安德豪爾。','','','','',0), +(12229,'zhTW','可能的關聯性','不久以前,我們派遣了一支遠征隊前往被瘋狂熊怪攻擊的東方。生還者描述殺死其中一隻熊怪時,他的身軀流淌出一種黑色黏稠的物質。$B$B千年以來,這個區域的熊怪都很溫和,也許熊怪的異常行為與我們調查出的黑暗能量有關聯。$B$B帶給我熊怪血液的樣本,你可以在東邊怒牙聖壇和心之血聖壇找到他們。','征服堡的風先知灰角需要你從怒牙聖壇和心之血聖壇的熊怪身上獲取8瓶瘋狂熊怪之血。','','到灰白之丘的征服堡找風先知灰角。','','','','',0), +(12511,'zhTW','我們在灰白之丘的軍隊','當我們專注於防守溫特加德的領土和解決憤怒之門的事件時,來自遙遠的西部荒野的部隊也正在灰白之丘與艱苦的環境和充滿敵意的居民奮戰,希望能夠找出一條進入寒冰皇冠的替代道路。$B$B駐紮在琥珀松小屋的都蒙特中尉正在徵召身強體壯,願意冒生命危險,協助開拓這片陌生荒野的民眾。你願意挺身面對這個挑戰嗎?','前往灰白之丘西邊的琥珀松小屋向都蒙特中尉回報。','','','','','','',0); + +-- +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(12851,'zhTW','騎上熊背','考驗正等著你,女人!$b$b你擁有英后之心嗎?還是只會整天哭哭啼啼?$b$b上了戰場,你就會知道答案。$b$b你可以對你的母親,姊妹,甚至對你自己撒謊,但戰場會揭露出一個人最真實的一面。$b$b當你準備好了以後,騎上冰牙,然後投入戰場。你必須從她的背上,對我們的敵人降下死亡之雨。','布倫希爾達村的布瑞嘉娜,要你騎上冰牙到遠古寒冬山射擊7隻冰霜座狼以及15個冰霜巨人。','','到風暴群山的遠古寒冬山谷找布瑞嘉娜。','灼燒冰霜座狼','灼燒冰霜巨人','','',0), +(12854,'zhTW','跟隨布萊恩的足跡','自從在灰白之丘找到了布萊恩的日誌以來,我們只有發現過另外一個布萊恩的線索。有一封神秘的信寄到了鐵爐堡的探險者協會,沒有任何關於寄出地點的訊息。上頭只寫著我們應該要與布萊恩在他的營地碰面,然後協助他進行搜索。$B$B我只知道那個營地應該位於此地的東北方,越過伯爾之息河谷,坐落於泰坦之途的某些遺跡處。','從布萊恩的營地取得粗麻包裹的信箋,然後交還給霜堡的考古學家安多林。','','到風暴群山的霜堡找考古學家安多林。','','','','',0), +(12855,'zhTW','嗅出犯人','布萊恩便箋上的口吻暗指他想要把某個東西與便箋埋在一起,也許是某種包裹。你確定你只找到這個?$B$B好吧,我讓你帶上一條冰霜獵犬。牠們被霜誕族用來進行追蹤。把牠帶去毀壞的營地,然後讓牠嗅出布萊恩的味道。$B$B牠至少會帶你找到下落不明的那些東西,如果我們運氣夠好,甚至還可以找到布萊恩本人。','在廢棄營地使用冰霜獵犬項圈,追蹤拿走布萊恩所有物的傢伙。當你回收了物品,就使用通訊裝置聯絡你聯絡的到的人。','','使用通訊設備,並且與你可以聯絡上的任何人通話。','追蹤竊賊','','','',0), +(12856,'zhTW','冰冷之心','在戰場上光榮赴死會為我們全體帶來榮耀。然而,被凍結在冰塊裡承受無盡的嘲諷則否…$b$b你要飛往冰霜巨人的城市,丹尼弗蘭,就在遠古寒冬山谷的東邊,然後解救幾條我方被俘虜的元龍。有了他們的幫助,你就可以將我們的姊妹從冰凍的束縛中解放出來,帶領三位姊妹平安返家。$b$b小心那些巨人的木棒,否則你也會落入俘虜的行列中。','救出3條被俘虜的元龍和9位布倫希爾達囚犯。','','到風暴群山的遠古寒冬山谷找布瑞嘉娜。','解救布倫希爾達囚犯','釋放元龍','','',0), +(12858,'zhTW','謎團的拼圖','感謝聖光,有人終於收到我的訊息。現在我終於脫離鐵矮人的掌握了,我想要請你們幫忙。我有獲得諾甘農拱心石的線索。諾甘農拱心石是守護奧杜亞檔案庫的鑰匙,但是泰坦將它分成兩半,藏起來。$B$B其中一塊,拱心石的殼,藏在北海岸的發明者圖書館,就在奧杜亞南方。所以你要做的第一件事情就是從圖書館守衛者身上拿回通行圓盤的碎片。','收集六片發明者圓盤的碎片,將它們組成發明者圓盤。','','用布萊恩的通訊器聯絡布萊恩·銅鬚。$B$B要是你遺失了布萊恩的通訊器,跟霜堡的考古學家安多林談話。','','','','',0), +(12860,'zhTW','資料探勘','你組成的那個圓盤…是空的!那個奸詐的彌米爾一定把東西藏在別的地方了。找找看發明者的圖書館;你在那裡有看到資料庫嗎?$B$B也許那就是你拿圓盤要做的事情。嘗試用它靠近那些資料庫。或許它會檢索,然後重新存取資料。等你嘗試之後,再聯絡我,讓我知道你找到了什麼。在此同時,我會去找另一半的鑰匙。','用發明者圓盤檢索7份在資料庫裡的隱藏資料。','','','取得隱藏資料','','','',0), +(12871,'zhTW','來自探險者協會的援助','真有趣。我在外殼上並沒有看到任何鎖定的結構。這代表我們要做的不僅僅是找到另外一部份,然後組合成拱心石就好。$B$B把外殼拿去霜堡,給遠征隊的領導者拉格努斯看。等他佩服完了,應該就能夠靠著外殼推敲出核心的樣子,也許還能讓冰霜矮人幫忙找它。$B$B我去查查看能否找出結合兩個部分的方法。當我們都有了進展再碰頭。','帶著諾甘農之殼去霜堡找拉格努斯。','','到風暴群山的霜堡找拉格努斯。','','','','',0), +(12874,'zhTW','霜誕的熱情','我很樂意提供我的居所與家園給需要幫助的旅行者,但是我不願強迫我的人民加入你們的行動。$B$B這樣吧...我的子民都是貨真價實的戰士。在霜誕矮人成年的時候,他必須在戰鬥中證明自己的本事。他必須向我們證明他不會被體型的差距給打敗。$B$B向我證明你跟我的子民一樣強悍勇猛,我就會讓他們聽你說話或是為你作戰。跟南邊懸崖的弗尤林談談,他會讓你進行測驗。','霜堡的約格‧風暴之心要求你與弗尤林‧霜眉交談,取得坐騎,並進行你的挑戰。','','到風暴群山的霜堡找約格·風暴之心。','','','','',0), +(12875,'zhTW','經驗老到的嚮導','我不知道這個核心藏在哪裡,但是你知道嗎,既然我說過要幫忙了,我就會幫忙。$B$B有個名叫德洛‧霜握的隱士就住在北邊的洞穴裡...就在山谷中。因為附近人跡罕至的緣故,我們都有點偏離了泰坦,但德洛仍舊堅守老路子...他看照著泰坦最珍惜的地方,而且經常提到看守者克里圖思。$B$B你一定可以在洞穴的深處找到他的...告訴你是我派去的,他會幫助你。','找出德洛‧霜握。','','','','','','',0), +(12876,'zhTW','不速之客','我們的斥候在北邊的山谷看見了鐵矮人。我聽說風暴之心國王派你去見德洛,我承認我有點擔心他。$B$B如果你路上有看到鐵矮人的話,替我又快又狠地放倒他們,好嗎?我想他們不清楚我們的確切位置,也不知道我們是怎麼過來的,所以我想,讓他們繼續弄不懂比較好。','霜堡的弗尤林‧霜眉要你殺死10個風鑄入侵者。','','到風暴群山的霜堡找弗尤林·霜眉。','殺死風暴冶煉入侵者','','','',0), +(12877,'zhTW','孤獨看守者','我一直都找不到核心...但我經常和看守者者克里圖思談話,他的疏忽讓他放鬆了戒備,洩漏出許多消息。你可以在東邊的山脈找到克里圖思,就在足跡冷原,他一直在看守著造物者動力核心,核心很可能就在那裡,但你得要靠克里圖思幫忙。$B$B鐵矮人也在這裡找東西...很有可能也是在找核心。他們拿走了我的戒指。找到他們的領導者,把戒指拿回來,然後向克里圖思出示戒指,讓他知道是我派你去的。','從鐵矮人監控者身上取回霜握的璽戒,然後帶去足跡冷原找克里圖思。','','到風暴群山的足跡冷原找克里圖思。','','','','',0), +(12878,'zhTW','隱藏的聖物','你不在的期間,我很榮幸地與那位矮人,布萊恩‧銅鬚談過話。這位矮人表達了他尋找拱心石的意圖,而我很滿意,因為他的理由很充分...我相信拱心石就是為了這個矮人而存在的。$B$B諾甘農之核位於東南方的嚴寒陵寢。負責守護它的是遠古的寒冰生物,他們不會喜歡你的拜訪的。贏過那些守衛,帶著我的祝福取得拱心石吧,$r。','足跡冷原的克里圖斯,向你提供了關於找到諾甘農之核的資訊。','','','','','','',0), +(12879,'zhTW','霜誕國王之怒','<當你從箱子中取出核心的時候,你聽到沉重的腳步聲從走道裡朝你跑來。遠處傳來微弱的戰鬥聲。>','把諾甘農之核帶回去給足跡冷原的克里圖斯。','','到風暴群山的足跡冷原找克里圖思。','','','','',0), +(12881,'zhTW','銅須兄弟','','','','','','','','',0), +(12885,'zhTW','奧杜亞的流亡者','風暴群山是個複雜的地方,可只是泰坦遺跡而已。住在那裡的人面對的是洛肯跟他的爪牙們。$B$B他將他最喜愛的僕人們,鐵矮人,放在那裡對抗所有岩石生物。他將土靈逐出奧杜亞,強迫他們遷居石崖避難所,就在發明者圖書館的西邊山面上。石崖跟他的兄弟被鐵矮人圍困在那裡。找到他們,幫助他們,$n。','跟石崖避難所的『塑岩者』石崖談話。','','','','','','',0), +(12886,'zhTW','德拉坎舍試煉','這就是了。你通過了所有海茲競技的考驗...幾乎所有。你是我們姊妹中最好也最勇猛的。最後的試煉近在眼前。德拉坎舍試煉,一個考驗著海迪尼爾戰士的價值跟靈魂的真正試煉。你要以你自己,你的飛龍坐騎,再加上一根帶鍊魚叉來和二十個姊妹競爭。$B$B不要手下留情。沒有人期待你這麼做。','用海迪尼爾魚叉打敗10個風暴神殿的海茲競技飛龍騎兵。','','在圓柱裝飾上使用海迪尼爾魚叉來退出德拉坎舍。回到風暴群山的風暴神殿找風暴之塔。','擊敗海茲競技龍騎士','','','',0), +(12888,'zhTW','廢料E號','這張卡片讓使用者能操控廢料機器人E號上的操控面板,讓機器人能夠重新開始它維修的任務。$B$B廢料E號看起來應該是在發明者圖書館的內部。這張卡片上寫了機器人上壞掉的元件和系統。如果有適當的元件,它就能重新上工。','將廢料E號操作卡、4把鈷藍螺栓、5個過載電容器帶到發明者圖書館裡的廢料E號。','','到風暴群山的發明者圖書館找廢料E號。','','','','',0), +(12889,'zhTW','原型控制臺','型號:廢料E號。$B$B任務目標:當守護者彌米爾不在時,維持發明者圖書館的控制臺和資料庫的運作。$B$B啟用時間:489日。$B$B概要資料狀況:未知。$B$B現在任務:修復原型控制臺。','控制發明者圖書館內的原型控制臺。','','','','','','',0), +(12895,'zhTW','失蹤的銅鬚','我們離開之前,我收到斥候沃塔克收集的資料,關於這個布萊恩‧銅鬚。毫無疑問,從他的資料上可以發現這個布萊恩已經從灰白之丘往風暴群山出發了。在我們失事之前,我看到南邊有個營地,就在過了足跡冷原,可以看到伯爾之息河谷的地方。$B$B要是布萊恩不在那裡,就去搜搜營地和周圍,看看有沒有那個該死的矮人去了哪裡的線索。把你找到的東西帶回來。','在布萊恩的營地裡搜尋粗麻包裹的信箋,將它交給葛羅姆亞什失事地的博克塔‧血怒。','','到風暴群山的葛羅姆亞什失事地找博克塔·血怒。','','','','',0), +(12900,'zhTW','製作鞍具','所以說你想要騎熊?嗯,如果你能奮鬥到這一步,一定有人覺得你有資格參加海茲競技。$B$B總之一步一步來,我們首先得替你做個鞍座。$B$B你可以在南邊的懸崖處找到散居的雪人。他們的毛皮很堅韌,厚度又正好適合。帶一些毛皮給我,我就會讓你開始學習如何做個熊騎士。','布倫希爾達村的艾絲翠德‧畢優利塔要你取得3塊冰鬃雪人毛皮。','','到風暴群山的布倫希爾達村找艾絲翠德·畢優利塔。','','','','',0), +(12909,'zhTW','鼻子知道','為了要追蹤布萊恩,我們需要具備敏銳嗅覺與優秀追蹤能力的生物。飛艇沒有任何獵犬,但我想我應該找得到替代品。$B$B在墜毀之後,我派了卡莉希去東邊的山裡獵點東西來吃。她的大貓,霜齧,擁有高超的雪地追獵本領。告訴她她得和夥伴至少分開一陣子。她可以自個兒打獵,但是我們沒有別的辦法能追蹤布萊恩‧銅鬚了。','到葛羅姆亞什失事地東面的山腳下與卡莉希交談。','','','','','','',0), +(12910,'zhTW','嗅出犯人','這次就照博克塔的意思作,但我希望他將來會補償我。不要這樣看我。雖然博克塔負責指揮沒錯,但沒有人可以命令獵人。$B$B「把那頭野獸弄走,」他總是說,「叫牠別再吼了。」$B$B然後當他需要的時候又突然改變態度。下次他再抱怨,我就叫霜齧咬他一下。別擔心,她追蹤獵物的表現會很出色的。當她找出目標之後,你就得自己對付鐵矮人,布萊恩,或者你找到的任何東西。','騎上霜齧,然後騎向布萊恩的便箋上殘留氣味的源頭。然後回收布萊恩的通訊器,用它跟布萊恩‧銅鬚聯絡。','','使用布萊恩的通訊器與布萊恩·銅鬚通話。','找到氣味的源頭','','','',0), +(12913,'zhTW','說獸人語啊,老兄!','<布萊恩開始瘋狂地比著手勢,混亂地說著他的母語。>$B$B(矮人語)Ruk MogOth red a mogoth ta eft Thros-garE Haldir.$B$BKha gor ruk khaz ta ke ruk hrim eft thros-am-kha ruk kost-um havar go kost.$B$BA modoss hine ruk bergum eft thros-am-kha ga eft Haldir ke loch Thon we lo gefrunon ta mitta.$B$B Gar Ruk dagUm loch angor-magi ta har ruk!$B$B<一小段時間之後,你瞭解到這樣的對話一點意義都沒有。也許葛羅姆亞什失事地的薩滿,摩特哈‧風誕知道要怎麼做。>','與葛羅姆亞什失事地的摩特哈‧風誕談談。','','','','','','',0), +(12915,'zhTW','修補圍籬','如果我想從我兄弟的手中奪過造物者神殿,我就得跟老盟友重修舊好。$b$b也許藉著消滅一個共通的敵人,能夠使我稍微修補我和霜巨人的友誼。$b$b斐雍帶著鐵巨人包圍了丹尼弗蘭。你必須在斐雍之砧擊敗他,就在此處東方遠處。削弱他的軍力,讓霍迪爾之子邁向勝利。$b$b帶著這個符咒,$n。用它來召喚我的土靈幫助你。','風暴神殿的索林姆要求你到丹尼弗蘭東邊的斐雍之砧,殺死斐雍與5個鐵巨人。$b$b使用索林姆的大地符咒,可以召喚他的土靈與你一同作戰。要發動符咒,必須準備斐雍之砧附近所產的花崗岩巨石。','','到風暴群山的風暴神殿找索林姆。','殺死斐雍','殺死雷鑄鐵巨人','','殺死風暴冶煉鐵巨人',0), +(12917,'zhTW','以風之聲交談','我想我們應該無法期待能夠很輕易的找到布萊恩,我們運氣沒那麼好。如果我們能弄懂布萊恩在說什麼,也許你就可以說服他告訴你他的位置。$B$B風的力量在群山中很強,也許可以提供我們很大的幫助。一個學識淵博的薩滿可以透過風聽懂世界上的各種語言。$B$B在西北邊的雪迅平原上,你可以找到由風所構成的存在,風暴馭乘者。捕捉他們的聲音,然後把聲音帶來給我。','把5個風之聲帶去給葛羅姆亞什失事地的摩特哈‧風誕。','','到風暴群山的葛羅姆亞什失事地找摩特哈·風誕。','','','','',0), +(12920,'zhTW','追上布萊恩','你在等什麼?感謝摩特哈,語言的藩籬已經被打破了。與布萊恩‧銅鬚聯絡,然後找出他躲在哪裡,還有他到底在追蹤什麼。$B$B也許我們還能從這場災難中搶救點什麼。','使用布萊恩的通訊器與布萊恩‧銅鬚通訊,與他交談,然後和葛羅姆亞什失事地的博克塔‧血怒交談。$B$B如果你弄丟了布萊恩的通訊器,去找葛羅姆亞什失事地的摩特哈‧風誕談談。','','到風暴群山的葛羅姆亞什失事地找博克塔·血怒。','與布萊恩交談','','','',0), +(12922,'zhTW','精煉之火','在它滲著水氣的外層之下,這塊金屬閃動著奇異的光芒。$b$b不過首先,你認為先把上頭的熔渣在斐雍的鐵砧燒掉才是謹慎的作法。$b$b正當你思索著在這冰凍的荒原裡要上哪找火源的時候,一個火焰亡魄走過了你面前...','你必須從霜域湖的沸騰亡魄身上收集10個狂烈火花,然後在斐雍之砧使用它們。','','到風暴群山的丹尼弗蘭找斐雍之砧。','','','','',0), +(12924,'zhTW','鑄成同盟','<自從你見到索林姆以來,他首度微笑。>$b$b一切都開始有種命中注定的味道了,$r。$b$b你找到的東西,是我盔甲殘餘的殘片,在哀戚中我拋下它,丟給了元素。只有霍迪爾之子能夠重鑄它,因為原先盔甲就是他們製造出來的。$b$b也許你已經為他們做的夠多了,多到足以軟化他們對我的痛恨。去找他們的國王,裘庫姆,假使他還活著的話。$b$b設法晉見他,請求他的協助。','你要去丹尼弗蘭,請求裘庫姆王允許重鑄索林姆之甲。完成他的任務之後,你要去找丹尼弗蘭的尼約梅爾德談話。','','到風暴群山的丹尼弗蘭的遠古寒冬山谷找尼約梅爾德。','將斐雍之砧帶到丹尼弗蘭','將弗約恩之砧帶到丹尼芬雷','','',0), +(12925,'zhTW','畸形','巫妖王曾三次派使者前來,三次都立即被我們肢解分屍了。$B$B我們在華爾基倫的姊妹並不像我們一樣堅定的信奉傳統教條,所以接受了天譴軍。現在她們不再從野外捕捉飛龍,而是在天譴軍帶來的瘟疫與疾病中培育牠們。$B$B取走華爾基倫海迪尼爾所攜帶的冰霜之油,然後用在你找到的任何染疫龍蛋上。謠傳那些龍蛋都被保存在一座惡臭的荒疫之池中。','布倫希爾達村的賽拉‧克微蕭要求你,前往華爾基倫並從華爾基倫野心家身上取得冰霜之油瓶。使用冰霜之油摧毀30個染疫元龍蛋。','','到風暴群山的布倫希爾達村找賽拉·克微蕭。','','','','',0), +(12926,'zhTW','拼圖的碎片','我們看過鐵矮人帶著他們的傀儡與布萊恩稱做土靈的那種石頭生物作戰,鐵矮人一方還有他們的巨人盟友。想辦法聯絡布萊恩,然後盡你所能地協助他。記住任何能夠幫助我們對付鐵矮人與背後主人的訊息。','使用布萊恩的通訊器聯絡布萊恩‧銅鬚,了解下一步該做的事。','','使用布萊恩的通訊器聯絡布萊恩·銅鬚。$B$B如果你弄丟了布萊恩的通訊器,去找葛羅姆亞什失事地的摩特哈·風誕對話。','','','','',0), +(12927,'zhTW','資料探勘','你組裝好的圓盤…是空白的!守護者彌米爾,建造這座圖書館的工匠,一定把資訊藏到別的地方去了。到發明者圖書館找找;你有沒有看到資料庫?$B$B也許這就是圓盤的用途。試著靠近資料庫使用圓盤,也許它是被設計成能夠從資料庫下載儲存資料的東西。當你嘗試過了以後,就再次聯絡我,讓我知道你發現了什麼。在此同時,我會試著追蹤另一半的檔案庫鑰匙。','使用發明者圓盤從資料庫取得7份隱藏資料。','','使用布萊恩的通訊器聯絡布萊恩·銅鬚。$B$B如果你弄丟了布萊恩的通訊器,去找葛羅姆亞什失事地的摩特哈·風誕對話。','取得隱藏資料','','','',0), +(12928,'zhTW','諾甘農之殼','發明者圓盤資料傳輸中。$B$B圓盤資料傳輸完畢。$B$B緊急伽瑪射線措施準備中。$B$B緊急伽瑪射線措施準備完成。請以充能圓盤啟動諾甘農之殼管理員梅查頓。一旦您的身分確認完成,管理員會立刻給您諾甘農之殼。$B$B祝您擁有愉快的千年。','從管理員梅查頓那取回諾甘農之殼。','','使用布萊恩的通訊器聯絡布萊恩·銅鬚。$B$B如果你弄丟了布萊恩的通訊器,去找葛羅姆亞什失事地的摩特哈·風誕對話。','','','','',0), +(12929,'zhTW','奧杜亞的土靈','曾經建造、維持並居住在奧杜亞的土靈在洛肯奪走這座城市的時候都被放逐了。從那時候開始,他的鐵矮人追隨者就鍥而不捨地攻擊那些流亡土靈。$B$B他們避居在一幢老舊的泰坦建築中,現在稱之為石崖避難所,位於發明者圖書館西邊的山面上。石崖與他的手足努力地阻止鐵矮人踏平他們的避難所,但他們撐不了多久了。找到他們,幫助他們,$n。','與石崖避難所的『塑岩者』石崖交談。','','','','','','',0), +(12930,'zhTW','稀有的土壤','這些鐵錘用來敲鑿岩石,而不是鐵矮人的日子,現在看來似乎很遙遠。我們從奧杜亞被驅逐出來,使得我們之中的弱者死去,而最強的工匠都成了戰士。$B$B隨著鐵矮人步步進逼,就連最強的戰士都會死去。$B$B我們沒辦法幫助傷者,除非我們能夠補充附上法術的土壤。我們過去曾在西北邊的峭壁開採這種土壤,但是僵持的戰火使我們抽不出身補充存貨。你願意幫忙嗎?','使用土靈採礦鎬採取7堆附魔土壤。將附魔土壤與5張霜紋布帶去給石崖避難所的『塑岩者』石崖。','','到風暴群山的石崖避難所找『塑岩者』石崖。','','','','',0), +(12931,'zhTW','反擊','避難所的防衛者盡其所能地削弱了鐵矮人的攻勢,但是我們還是一點一點的被逼退。我的手下很堅強,但他們還是會疲勞。要是沒有援軍的話,被徹底擊敗只不過是時間上的問題而已。$B$B你願意借出你的能力來幫助避難所嗎?這樣將會大大提高防衛者的士氣,並且為他們 -- 還有我 -- 帶來反擊的希望。$B$B殺死你在避難所外遇見的任何風鑄矮人,或是他們的創作物。','『塑岩者』石崖要你殺死10個風鑄進攻者,然後回到石崖避難所向他回報。殺死風鑄劫掠者或風鑄劫奪者都可以。','','到風暴群山的石崖避難所找『塑岩者』石崖。','殺死風暴冶煉進攻者','','','',0), +(12937,'zhTW','解救倒下者','避難所的防衛者相當英勇,但是他們沒法在鐵矮人的猛攻下支持太久。$B$B多虧了你收集來的泥土,我可以製造繃帶,以治癒傷兵及陣亡的戰士。我們治好越多防衛者,我們就能支持越久。$B$B帶著這些膏藥,到避難所外面,治療負傷和倒下的土靈防衛者。盡你所能地讓他們重回戰場,$n。對我們來說,每增加一個傷兵都是不能承受的損失。','使用脈流糊藥治療8個倒下的土靈防衛者,然後回到石崖避難所找『塑岩者』石崖。','','到風暴群山的石崖避難所找『塑岩者』石崖。','治癒倒下的土靈防衛者','','','',0), +(12942,'zhTW','斬下她們的黑翼','叛徒。我們海迪尼爾討厭她們。$B$B華爾基倫的居民該受的懲罰已經拖了太久了。在我們對索林姆保持忠誠的時候,她們卻成了巫妖王的走狗!$B$B她們把受到他恩賜的人稱為華爾琪。他們用長滿羽翼的雙翅飛行,就像鷹身人一樣。$B$B你可以在西北邊遠方找到華爾基倫,在風暴神殿的後方。殺死那些長翅膀的母狼,姊妹。殺死她們,我就會用我珍藏的物品來獎勵你。','布倫希爾達村的『復仇』伊娃要你去華爾基倫殺死12個初生的華爾琪。','','到風暴群山的布倫希爾達村找『復仇』伊娃。','','','','',0), +(12953,'zhTW','燒吧,華爾基倫,燒吧','這個箱子裝滿了燃燒魚叉。你想起在外頭有看到魚叉獵槍與乾草堆。$B$B伊娃也許會感激你的額外努力並給予你適當的獎勵。','使用華爾基倫魚叉獵槍燒毀6個乾草堆','','到風暴群山的布倫希爾達村找『復仇』伊娃。','縱火','','','',0), +(13056,'zhTW','君子復仇,十年不晚','我該現在對你坦白,$n。事實上,我想請你幫我一個忙。$B$B這些鼠輩永遠動不了我一根寒毛,但是我的風蛇,席莎,卻被我所見過最卑鄙的一頭座狼給殺了。$B$B別擔心我,只要知道這頭座狼的鼻息不再,我就能得到些許安慰。你可以在洞穴深處找到他。','追蹤者瓦爾吉要你殺死吉摩拉克獸穴裡的吉摩拉克。','','到風暴群山的吉摩拉克獸穴找追蹤者瓦爾吉。','','','','',0), +(13057,'zhTW','造物者殿堂','是時候了,$n。我準備要面對洛肯了。$B$B讓我們前往造物者殿堂,挑戰我兄弟的部隊。那個傻瓜會後悔他惹火了我。','到造物者殿堂的東南邊緣找索林姆,造物者殿堂就在丹尼弗蘭的西北方。','','','','','','',0), +(13058,'zhTW','改變風的吹向','終於,我們備齊了所有必須的條件,足以糾正北風精靈和其爪牙造成的錯誤。你已將博識之錘與風暴之蹄的年代和形體同調。$B$B現在帶著錘子前往西北方平原上的生命神殿。運用博識之錘,扮演風暴之蹄的角色。以風暴之蹄的身分面對北風精靈,但是,請記住為了回復時間線,當北風精靈弱化的時候,風暴之蹄一定得死去。$B$B這一刻,你得把握機會,用元素烈怒號角摧毀北風精靈。','運用博識之錘回到過去,並以風暴之蹄的身分面對北風精靈。當風暴之蹄落敗時,拾起落下的元素烈怒號角,殺掉北風精靈。然後將其歸還給坦卡羅營地的札倫陶。','','到風暴群山的坦卡羅營地找札倫陶。','時間線已回復舊觀','','','',0), +(13062,'zhTW','洛莉拉的臨別禮物','你是個很棒的盟友,$n。現在你要面對真正的考驗。你將會需要技巧、勇氣、以及些許的運氣。$B$B<洛莉拉將一小束頭髮綁在你的頭髮上。>$B$B你現在不會失敗了。跟『仲裁者』格瑞塔談談。她會送你上路。','與布倫希爾達村的『仲裁者』格瑞塔交談。','','','','','','',0), +(13063,'zhTW','野人獻曝','你完成了眾人所不能之舉,我的姐妹。不論是憑藉你的強韌和勇氣,或僅僅是因為運氣。$b$b回到村子裡去,找到艾絲翠德‧畢優利塔。告訴她你的成果。但話先說在前頭,她或許會覺得沒什麼大不了。','布瑞嘉娜要你前往布倫希爾達村,並與艾絲翠德‧畢優利塔對話。','','','','','','',0), +(13064,'zhTW','兄弟反目','希芙?是你嗎?$b$b不?一個$r?等等...$b$b就這樣吧!我的小希芙,她的影像折磨我太久了。不過,也是時候替她復仇,並將榮耀帶至她的回憶裡了。$b$b我的兄弟將付出代價!','索林姆要你聆聽他的故事。','','到風暴群山的風暴神殿找索林姆','聽取索林姆的故事','','','',0), +(13415,'zhTW','圖書館裡的控制臺','諾甘農之殼已唾手可得,$n。帶著發明者圓盤進入圖書館。裡面應該有個控制臺,你可以用發明者圓盤啟動它。我猜想除了諾甘農之殼,彌米爾在那裡應該藏了更多東西。那裡儲藏的結構圖,應該可以讓鐵爐堡的工程師忙上個好幾年!$B$B無論如何,使用圓盤以取回諾甘農之殼。但願彌米爾沒有在我們的路途上放上更多障礙。','將發明者圓盤,帶至發明者圖書館裡的發明者圖書館控制臺。','','到風暴群山的發明者圖書館找發明者圖書館控制台。','','','','',0), +(13416,'zhTW','圖書館裡的控制臺','諾甘農之殼已唾手可得,$n。帶著發明者圓盤進入圖書館。裡面應該有個控制臺,你可以用發明者圓盤啟動它。我猜想除了諾甘農之殼,彌米爾在那裡應該藏了更多東西。那裡儲藏的結構圖,應該可以讓鐵爐堡的工程師忙上個好幾年!$B$B無論如何,將圓盤帶去控制臺。但願彌米爾沒有在我們的路途上放上更多障礙。','將發明者圓盤,帶至發明者圖書館裡的發明者圖書館控制臺。','','到風暴群山的發明者圖書館找發明者圖書館控制台。','','','','',0), +(13423,'zhTW','衛冕','每個人都對你的表現印象深刻,姊妹。但是不要放鬆了戒心!每個迷於聲名的挑戰者都將會上前挑戰你的海茲戰后頭銜。$B$B給這些傲慢自大的傢伙一點教訓,讓她們見識一下你的戰后本色。','布倫希爾達村的『仲裁者』格瑞塔要求你擊敗六個挑戰者。','','','','','','',0), +(13424,'zhTW','重返深淵','要保持最好的騎術,你就得每天與其他海迪尼爾切磋。$B$B返回尖牙之淵,把你的技術展現給她們看。她們會很感激像你這樣高超的人將她們擊敗的。','布倫希爾達村的『仲裁者』格瑞塔要你到尖牙之淵使用冰喉族母韁繩,然後擊敗6頭海茲競技戰熊。','','','','','','',0), +(13425,'zhTW','那些畸形非死不可','只對你的同伴展現你的本領是不夠的。你也必須對抗我們的敵人,親愛的姊妹。$B$B華爾基倫的那些叛徒還在養殖染疫的元龍,不停嘲弄我們的龍騎傳統。$B$B搶走他們持有的冰霜油,然後凍毀那些可恨的染疫龍蛋。','布倫希爾達村的『仲裁者』格瑞塔要你前往華爾基倫,從華爾基倫野心家身上取得冰霜之油瓶。使用冰霜之油瓶摧毀30個染疫元龍蛋。','','到風暴群山的布倫希爾達村找『仲裁者』格瑞塔。','','','','',0), +(13426,'zhTW','札倫陶,見證者','我們似乎不是唯一來到這個地方的訪客。信差傳來一封名叫札倫陶的牛頭人所留下來的訊息,上頭說他前去拜訪一座名為坦卡羅營地的坦卡族村落。信上寫的有點隱晦,不過看起來札倫陶似乎是為了研究一個坦卡族的傳奇歷史而來到風暴群山。$B$B去會會他,$n,看看他所知的一切是否對我們有所幫助。從他的描述看來,坦卡羅位於東方的遠處,在造物者殿堂的後方,丹尼弗蘭的北邊。','與坦卡羅營地的札倫陶交談。','','','','','','',0), +(12956,'zhTW','希望的火花','很顯然,這不只是一塊普通的金屬而已。$B$B它不像任何你所熟悉的礦石,質地既堅硬又不容易斷裂,而且遠比看起來輕的多,而且就算冷卻了也還發著光。$b$b靠近一點看,你發現在金屬的表面下閃耀著索林姆的符文...','你要把精煉微光礦石帶去給風暴神殿的索林姆。','','到風暴群山的風暴神殿找索林姆。','','','','',0), +(12957,'zhTW','風鑄奴隸','鐵矮人在西南方,雪迅平原的西側的山丘上挖了一個礦坑。他們利用被俘虜的機械地精,也就是守護者彌米爾的僕從們來替他們採礦。$B$B我不知道這些機械地精是從哪裡來的,也不知道他們自由了以後會做什麼,但也許我們能夠得到他們的幫助。$B$B前往冰凍礦坑,$n,然後將他們從奴役中解放出來。問問他們願不願意與我們一同對抗鐵矮人的暴行。','石崖避難所的『塑岩者』石崖要你釋放6個被俘虜的機械地精,並殺死3個風鑄監工。','','到風暴群山的石崖避難所找『塑岩者』石崖。','嘗試解救被俘虜的機械地精','','','',0), +(12964,'zhTW','黑暗礦石','雪迅平原西方的冰凍礦坑,那裡的風鑄鐵矮人建了一座以奴隸運作的礦坑。$B$B它在戰線後方遠處,所以我們一直無法察探那裡的狀況,但我的斥候回報,說他們看過那裡運出一車又一車黑色,病態的礦石。','把5個黑暗礦石樣本帶去給石崖避難所的『塑岩者』石崖。','','到風暴群山的石崖避難所找『塑岩者』石崖。','','','','',0), +(12965,'zhTW','洛肯的賜禮','負責指揮風鑄鐵矮人的傢伙叫做符文先知瓦杜然。雖然我從來沒有看過他們,但相傳他的主人,也就是奪取了奧杜亞的守護者洛肯,據說把強大的泰坦神器賜給了瓦杜然。$B$B這就能夠解釋我的手下從風鑄戰士身上所見到的力量與殘暴是從何而來了。$B$B瓦杜然的基地,尼達維里爾就坐落在西南邊,過了雪迅平原的地方。前往該處,$n,消除他的力量。毀掉洛肯給他的賜禮,幫我們削弱洛肯追隨者的力量。','破壞洛肯之怒、洛肯之力與洛肯之恩賜,然後返回石崖避難所向『塑岩者』石崖回報。','','到風暴群山的石崖避難所找『塑岩者』石崖。','摧毀洛肯之怒','摧毀洛肯之力','摧毀洛肯之恩賜','',0), +(12966,'zhTW','你不會看漏的','<裘庫姆耐心地聆聽你的請求,然後在開口回答之前謹慎地思考了一番。>$b$b所以斐雍的死是你的傑作?$b$b雖然你在我們急需幫助的時候伸出了援手,但是要和索林姆重修舊好,還需要許多努力。$b$b至於此刻,我會允許尼約梅爾德重鑄多年前我們贈與風暴之王的盔甲。就當它是你幫我們對抗斐雍的酬勞吧。$b$b尼約梅爾德被派去回收斐雍之砧,你應該可以在那裡找到他。','丹尼弗蘭的裘庫姆國王要你去斐雍之砧找尼約梅爾德。','','','','','','',0), +(12967,'zhTW','與元素作戰','思諾利曾是我國的驕傲。一位強大的戰士,用他的棍棒擊敗了許許多多的敵人。$b$b我們尊敬他,但他已經不再是那個思諾利了。年紀大了,使他的感覺變得遲鈍,力量也衰退了。但他仍舊和從前一樣驕傲,絕不肯錯過任何一場戰鬥。$b$b說到戰鬥,我們正在冷卻斐雍之砧,好把它帶回去。殘存的火焰亡魄還在持續抵抗。請幫思諾利重現他往日的榮耀吧,$r。引導他對付他的敵人。','尼約梅爾德要你陪伴思諾利到斐雍之砧去,並幫助他殺死10個沸騰亡魄。','','到風暴群山的斐雍之砧找尼約梅爾德。','殺死沸騰亡魄','','','',0), +(12968,'zhTW','優爾達的愚行','一切都是那個女巫起的頭,『颶語者』優爾達來到了我們的村子。她竟敢污衊我們高貴的傳統,滔滔不絕地講出巫妖王那些劇毒的承諾。$B$B她離開的時候身上理應插了一把劍的,不過她的魔法很強悍,所以她逃掉了。$B$B去華爾基倫最大的建築物找她,然後讓她知道不該戲弄我們。','布倫希爾達村的『復仇』伊娃要你去華爾基倫殺死『颶語者』優爾達。','','到風暴群山的布倫希爾達村找『復仇』伊娃。','','','','',0), +(12969,'zhTW','那是你的哥布林嗎?','我相信那就是你在找的那個綠色小傢伙。如果我是你,我會在海迪尼爾人把他劈成兩半之前插手阻止。$B$B你在海茲競技的時候到來,所以所有的參加者必定得要接受你的挑戰。沒有什麼能夠阻止你把你綠色的朋友給帶走。','挑戰艾格奈塔‧泰斯多達以拯救奇夫‧嘶炫。成功之後回去找布倫希爾達村的『巫婆』洛莉拉。','','到風暴群山的布倫希爾達村找『巫婆』洛莉拉。','','','','',0), +(12970,'zhTW','海茲競技','不知道你注意到沒有?在第一場格鬥中,擊敗你的海迪尼爾對手,你就獲准參加了海茲競技-海迪尼爾間的盛大格鬥賽事,優勝者可以獲得侍於索林姆身側的榮耀。$B$B海茲競技令我感到猶如身陷囹圄般的痛苦,我希望參加賽事,但是我的年華已逝,身體也羸弱得無法成為海迪尼爾的鬥士。$B$B如果你願意傾聽,我倒是為你量身訂做了一套計畫。','聆聽『巫婆』洛莉拉的計畫。','','到風暴群山的布倫希爾達村找『巫婆』洛莉拉。','聆聽『巫婆』洛莉拉的計畫','','','',0), +(12971,'zhTW','接受所有挑戰','我就直說吧。好消息是,因為你擊敗了艾格奈塔,在下一輪比賽中,你將是場上的焦點。$B$B壞消息是,你的對手也都是第一輪中的優勝者。別奢望輕易過關。','布倫希爾達村的『巫婆』洛莉拉,要求你擊敗6個挑戰者。','','到風暴群山的布倫希爾達村找『巫婆』洛莉拉。','','','','',0), +(12972,'zhTW','你需要一頭熊','你已在海茲競技的第一回合裡獲勝了。為了使戰技更上一層樓,你需要一頭自己的戰熊。$B$B不幸地,海迪尼爾不可能平白送給任何人。你必須在真正以性命相搏的戰鬥中取得勝利-而非競技場上的比手畫腳。$B$B布倫希爾達的海迪尼爾正涉入一場戰爭,敵人是霍迪爾之子,索林姆過去的盟友。和村外的布瑞嘉娜對話,藉此了解你可以如何幫助他們,並在戰鬥中證明你自己。','與布倫希爾達村外的布瑞嘉娜對話。','','','','','','',0), +(12973,'zhTW','銅鬚兄弟','成功了!我們終於拿到拱心石了...它好美啊!我曾經多次環遊世界,但這東西又再次喚起了我的不安與興奮。不過,我想現在不是呆呆的站著看的時候了,我們得快點逃出去。$B$B跳上我的飛行器,在出去的路上幫忙掩護我!','陪同布萊恩‧銅鬚,搭乘其飛行器前往霜堡。','與布萊恩·銅須一起回到冰霜堡。','到風暴群山的霜堡找維洛格‧冰吼。','','','','',0), +(12975,'zhTW','紀念','索林姆一定告訴過你,使我們分道揚鑣的那場悲劇。$b$b這是在雷殞之地發生的,就在東北方。那裡有座冰凍的化石,還有許多靈魂徘徊,都不斷的使人想起那黑暗的一天。$b$b如果要我的子民原諒索林姆,就一定得把那些形象給換掉。我們一定得建造一座紀念碑,為我們的人民帶來心靈的平靜。$b$b前往該處,$r。收集在那一天粉碎的霍迪爾號角碎片。','丹尼弗蘭的裘庫姆王要求你,去雷殞之地收集8個號角碎片。','','到風暴群山的丹尼弗蘭找裘庫姆王。','','','','',0), +(12976,'zhTW','給逝者的紀念碑','把這些碎片帶去找尼約梅爾德。他會用這個聖物的殘片建造一個偉大的紀念碑。$b$b願它能夠撫平我的子民這些年來所背負的傷痛,治癒傷痕。$b$b願它的存在能夠帶領我們邁向新的時代,再次站在索林姆身側奮戰。$b$b去吧,$c,尼約梅爾德在等著你。','裘庫姆王要你把霍迪爾號角碎片送去給丹尼弗蘭的尼約梅爾德。','','到風暴群山的丹尼弗蘭的遠古寒冬山谷找尼約梅爾德。','','','','',0), +(12977,'zhTW','霍迪爾的呼喚','你為丹尼弗蘭的巨人做了一件無與倫比的事。沒有你的幫助,這座紀念碑就不會存在。$b$b你靜靜的想著它的宏偉,心中充滿了某種感覺。這些感覺使你心中浮現想法與影像...以及一種急迫感。$b$b感覺消逝了以後,你已經明白要怎麼做了。雷殞之地無法安息的靈魂一定要得到解脫。$b$b在你出發的時候,你發現手中握著一把靈體號角。','在雷殞之地對5個尼弗蘭祖先與5個不安的霜誕鬼魂的屍體吹響霍迪爾號角。','','到風暴群山丹尼弗蘭的霍迪爾號角。','解放尼弗蘭祖先','解放不安息的霜誕矮人','','',0), +(12978,'zhTW','面對風暴','我曾像石崖一樣,在奧杜亞擔任守護者的工匠。但隨著洛肯叛變,我將鐵錘轉向了新的敵人。$B$B當我們有多餘人手的時候,我會帶領小隊襲擊尼達維里爾,好減輕防衛者的負擔,但是現在我們的戰線已經瀕臨崩潰了。$B$B你已經證明了自己是個有能力的戰鬥員,也是個可靠的盟友。也許你願意帶著我們的旌旗,然後對西南方雪迅平原後面的鐵矮人要塞,尼達維里爾發動攻擊。','石崖避難所的布魯爾‧鐵禍要你殺死10個尼達維里爾的風鑄者。你可以殺死風鑄勇士、風鑄魔導師或是風鑄戰爭魔像。','','到風暴群山的石崖避難所找布魯爾·鐵禍。','殺死尼達維裡爾的風暴冶煉者','','','',0), +(12979,'zhTW','黑暗護甲','與其他魔像的防禦裝備比起來,這塊護甲片既厚又大。檢驗了魔像的屍體之後,你發現這個厚甲片,似乎是事後加工裝上的。$b$b為什麼鐵矮人要在他們的魔像上,加裝這種多餘又大小不合的護甲?$b$b也許布魯爾‧鐵禍能夠檢驗一些從戰爭魔像上取下的護甲片,他就能夠得到答案。','把4塊黑暗護甲樣本帶去給石崖避難所的布魯爾‧鐵禍。','','到風暴群山的石崖避難所找布魯爾·鐵禍。','','','','',0), +(12980,'zhTW','護甲的秘密','這塊護甲片的外觀令人困惑,但我們得盡可能地從中查出資訊來。這可能是瓦杜然的陰謀。$B$B他下了很大的功夫採掘、精鍊、鍛造與測試這塊金屬。$B$B在東方,山地的北面,有座建築物名叫彌米爾工坊。它已經荒廢了一段時間,但如果我們運氣夠好,應該還有些侍者能夠運作。把護甲片帶去那裡,盡可能地查出資訊來。','將黑暗護甲片帶去彌米爾工坊,要求侍者托克檢驗它。當你完成了以後,回到石崖避難所找布魯爾‧鐵禍。','','到風暴群山的石崖避難所找布魯爾·鐵禍。','調查護甲片','','','',0), +(12983,'zhTW','最後一頭','從我有記憶以來,我們最好的熊就都是來自東邊的凜冬洞窟。$B$B也許這樣的時光終於到了盡頭。凜冬洞窟被一群貪婪的蟄猛巨蟲攻陷了,野生的熊也全部絕跡。$B$B但如果你能夠找到倖存的熊族母,我向你保證,她絕對比任何眷養長大的熊還要驍勇善戰。$B$B帶著這個鞍座去凜冬洞窟,並拯救一頭倖存的族母。祝你好運。','布倫希爾達村的艾絲翠德‧畢優利塔,要你拯救一頭凜冬洞窟的冰喉族母。','','到風暴群山的布倫希爾達村找艾絲翠德·畢優利塔。','成功解救冰喉族母','','','',0), +(12984,'zhTW','『風暴降生』瓦杜然','我們別無選擇,$n。你在彌米爾工坊所得知的訊息意味著我們必須在瓦杜然完成他的新武器並使用它之前趕緊行動。$B$B即使是此刻,避難所的防衛者也在努力奮戰,替我們爭取時間對付『風暴降生』瓦杜然。$B$B你必須越過西南方的雪迅平原前往尼達維里爾,然後找出瓦杜然,與他作戰。但你不必孤軍奮戰。帶著這支戰爭號角,當你準備好要面對他的時候就吹響這號角。布魯爾跟我會加入戰鬥幫助你。','找到『風暴降生』瓦杜然後,使用石崖的戰爭號角。擊敗『風暴降生』瓦杜然,然後返回石崖避難所向『塑岩者』石崖報告。','','到風暴群山的石崖避難所找『塑岩者』石崖。','','','','',0), +(12986,'zhTW','泰坦的命運','諾甘農之核不在這裡。我不確定你為何尋找它,$r,我也不確定你真的瞭解,你所追求的物品有什麼用途。$B$B在我進一步協助你之前,我希望你能夠先幫助我。我最近吸收了一些關於看守者索林姆的知識。他的地位遭到挑戰,而命運尚未明朗。這使我感到很困惑,因為我並不認識其他的看守者。用這個資料庫來檢查他們位於東北方的神殿,然後把資訊帶回來給我。','足跡冷原的克里圖斯要你前往發明神殿、凜冬神殿、生命神殿以及秩序神殿,使用資料庫來檢驗每個區域。','','到風暴群山的足跡冷原找克里圖思。','調查發明神殿','調查凜冬神殿','調查生命神殿','調查秩序神殿',0), +(12987,'zhTW','放置霍迪爾之盔','頭盔已經鑄造好了。$b$b你的付出絕不會被忽視,小傢伙。雖然還有很多事得辦,但我們霍迪爾之子很感激你所做的一切。$b$b為了回報你,我把將頭盔獻給國王和兄弟的機會讓給你。$b$b飛到我面前的冰柱頂端,並且把這個石板上的字念給我們的人民聽。$b$b享受這份殊榮吧,$c。在你之前從未有外來者得到過同樣的榮耀!','尼約梅爾德要你飛到丹尼弗蘭北邊冰柱的頂端,並使用宣言石板。','','到風暴群山的丹尼弗蘭的遠古寒冬山谷找尼約梅爾德。','展示霍迪爾之盔','','','',0), +(12988,'zhTW','摧毀熔爐!','我先前愚蠢的認為瓦杜然在那維爾搖籃的計畫,就是南邊那個巨大的工地,只不過是為了紀念「守護者」洛肯的殘忍而建造的怪紀念碑。$B$B現在我們知道真相了,那是用來對付我們以及我們盟友的武器。我們不能讓這個鐵巨像完成,$n,否則那就會是避難所的末日。$B$B前往那維爾搖籃,找出風鑄工匠所使用的電光熔爐,然後把它們破壞掉。','用石崖的炸彈摧毀北方電光熔爐、中央電光熔爐以及南方電光熔爐,然後回到石崖避難所向『塑岩者』石崖回報。','','到風暴群山的石崖避難所找『塑岩者』石崖。','損壞北方電光熔爐','損壞中央電光熔爐','損壞南方電光熔爐','',0), +(12989,'zhTW','滑溜的黑暗','這些邪惡的蟄猛巨蟲已經佔領了凜冬洞窟的大半部分。牠們是卑劣的生物...洛肯的孩子,專門吸吮索林姆殘渣的兄弟。$B$B身為索林姆的僕人,那些渣滓我們見一個殺一個。你會在村外東邊找到那個洞窟。','艾絲翠德‧畢優利塔要你到布倫希爾達村東邊的凜冬洞窟殺死8隻極餓的蟄猛巨蟲。','','到風暴群山的布倫希爾達村找艾絲翠德·畢優利塔。','','','','',0), +(12991,'zhTW','打擊他們的弱點','石崖妨礙那維爾搖籃那些鐵矮人的計畫很不錯,我也有我自己的點子。只要沒有工匠,建造鐵巨像的進度就會停擺。$B$B那維爾搖籃就在屏護著避難所的這座山丘的南邊。去那裡殺掉所有擋路的風鑄工藝師。他們也許跟從前的我們相去不遠,但他們建造的武器卻會威脅到我們全部的人。','殺死10個風鑄工藝師,然後返回石崖避難所找布魯爾‧鐵禍。','','到風暴群山的石崖避難所找布魯爾·鐵禍。','','','','',0), +(12993,'zhTW','巨大的威脅','你延緩了鐵巨像的進度,做的很好,但我擔心我們不過是讓鐵矮人更加堅定完成這項武器的意志罷了。$B$B即使是現在,他們也不斷的把新的勞力送進來,然後交由監督者壓榨他們。也許我們終究無法阻止他們完成巨像。如果事情往這個方向發展的話,我們就得弄清楚我們到底要對抗什麼東西。回去那維爾搖籃,到南邊找出詳述巨像攻防能力的文件。應該在底層的帳篷與熔爐附近。','取得巨像攻擊設計說明書與巨像防禦設計說明書,然後帶去給石崖避難所的『塑岩者』石崖。','','到風暴群山的石崖避難所找『塑岩者』石崖。','','','','',0), +(12994,'zhTW','間諜獵人','你與丹尼弗蘭居民的密切往來帶來了意想不到的發現。$b$b舉例來說,你發現你似乎聽的懂獸母的喉音吼聲和尖銳的叫聲…至少你是這麼想的。$b$b她似乎感覺到要塞外頭有危險,要你去處理。$b$b她用前掌將繞在脖子上的鐵鍊解下,丟在你腳前。當你撿起鍊子的時候,你注意到上頭還連著一根飽經風霜的利牙…','你必須到遠古寒冬山谷擊敗3個風鑄間諜。$b$b在死去座狼的屍體旁使用以太座狼之牙可以召喚一頭以太霜座狼使隱藏的敵人暴露行蹤。當你除去了山谷中的間諜以後,回到丹尼弗蘭找冰霜座狼獸母。','','到風暴群山的丹尼弗蘭找冰霜座狼獸母。','殺死風暴冶煉滲透者','','','',0), +(12996,'zhTW','熱身','你很幸運,姊妹。像這樣的熊族母已經絕跡好些年了。$B$B如果你缺乏騎乘的技巧,一頭好熊也不會為你帶來太多好處。$B$B我要讓你在齊爾加瑞克身上練習一些技巧。他是我們抓過最大隻的雪人,所以你得小心點。如果被他痛扁了一頓,只要走開就好了...我們把他綁起來可是有理由的。','布倫希爾達村的艾絲翠德‧畢優利塔要你用戰熊族母韁繩來擊敗齊爾加瑞克。','','到風暴群山的布倫希爾達村找艾絲翠德·畢優利塔。','擊敗齊爾加瑞克','','','',0), +(12997,'zhTW','進入深淵','打敗拴住的對手是一回事。和不被束縛的熊騎兵戰鬥,又是完全不同的另外一回事。$B$B去尖牙之淵,運用一切你所學過的技能,擊敗你的對手。祝你好運,我的姐妹。$B$B榮耀與你同在,你會成功的。','布倫希爾達村的艾絲翠德‧畢優利塔要求你,在尖牙之淵裡使用戰熊族母韁繩,擊敗6頭海茲競技戰熊。','','到風暴群山的布倫希爾達村找艾絲翠德·畢優利塔。','','','','',0), +(12998,'zhTW','風暴之芯','根據你從那維爾搖籃取回的文件看來,這座鐵巨像只剩下一個關鍵部分沒有完成 -- 那就是風暴之芯。$B$B沒有了它,鐵巨像的武器就遠比設計中來的弱。如果我們可以避免監督者那維爾取得核心,我們就有機會擊敗那座巨像!$B$B你所找到的文件指出核心位於奧迪斯,位於南邊遠方的一座泰坦設施。它的入口位於一座俯視伯爾之息河谷的高峰南方。','石崖避難所的『塑岩者』石崖要你前往奧迪斯,阻止監督者那維爾取得風暴之芯。','嘗試在督工納維爾之前找到風暴之心','到風暴群山的石崖避難所找『塑岩者』石崖。','嘗試確保風暴之芯的安全','','','',0), +(13001,'zhTW','打造霍迪爾之矛','時候到了,小$c。群星早已預言了這天的到來。$b$b偉大的霍迪爾親自賜給我預示,向我顯現了製造一柄至高神器的秘密,那就是霍迪爾之矛。$b$b我們一定得聽令!如果我們未能收到這項賜禮,末日一定接踵而來。$b$b我召喚你來協助我進行這項神聖的任務。$b$b越過峽谷,進入凜冬洞窟,從冰坑中收集永霜裂片,然後從洞窟外的長毛象身上收集毛皮。','丹尼弗蘭的博學者蘭德維爾要你從凜冬洞窟的深處收集3個永霜裂片,以及從遠古寒冬山谷的堅忍的長毛象身上取得3個堅忍的長毛象皮革。','','到風暴群山的丹尼弗蘭找博學者蘭德維爾。','','','','',0), +(13003,'zhTW','屠龍高手','霍迪爾之矛所代表的是戰鬥中的英勇。$b$b他的存在本身就為所有進入丹尼弗蘭的人注入了對榮耀的深切渴求。事實上,光是待在它附近,就讓你非常想要測試一下自己的實力。$b$b看了看地平線,你的視線在一頭野生巨龍飛過的時候牢牢盯緊了牠。$b$b決定了。在你跟牠之間,註定只有一個能夠看見明天的太陽...','你要用霍迪爾之矛在遠古寒冬山谷挑戰一頭野生巨龍。一旦與牠接觸,你就得與之奮戰,至死方休。','','到風暴群山的丹尼弗蘭找霍迪爾之矛。','殺死野生巨龍','','','',0), +(13005,'zhTW','土靈誓約','許多年來我忽視了我的職責,沉溺於失敗與自憐之中。$B$B但勇敢的土靈卻不然。他們以生命守護造物者殿堂的誓言依舊維持不輟。$B$B即使在此刻,他們也勇敢無私地與腐敗的鐵矮人奮戰,等待扭轉局面的時機到來。$B$B而時機,已經到來了。我們要集合殘存的土靈防衛者,率領他們取得光榮的勝利。吹響群山號角,將他們召來你的身邊,奪回造物者殿堂吧。','造物者殿堂的索林姆要你用群山號角召來土靈,擊敗20個鐵矮人與7個鐵哨兵。','','到風暴群山的造物者殿堂找索林姆。','殺死鐵哨兵','殺死鐵矮人襲擊者','','',0), +(13006,'zhTW','油光煥發','當你靠近頭盔的時候,你注意到嚴寒的環境已經在神器的表面產生了影響。現在看起來只是薄薄的一層冰,但顯然將會把頭盔整個吞噬掉。$b$b為了不讓你辛勤努力的成果白費,你決定找出解決的方法。$b$b就在你打算出發的時候,頭盔的眼睛閃爍了一下,凜冬洞窟的影像進入了你心中。','你要進入丹尼弗蘭西方的凜冬洞窟,並收集5份黏性油。然後回到丹尼弗蘭將油使用在霍迪爾之盔上。','','到風暴群山的丹尼弗蘭找霍迪爾之盔。','','','','',0), +(13007,'zhTW','鐵巨像','我們沒能阻止鐵巨像竣工,$n,這代表我們沒有別的選擇,只能與它作戰了。$B$B布魯爾已經策劃了一個能夠攻擊巨像唯一弱點的計畫。$B$B不管巨像的護甲有多厚,遇上酸液時仍舊十分脆弱。使用雪迅平原北端的寶珠控制一隻蟄猛巨蟲,然後利用它來對付鐵巨像。如果你對於駕馭這些生物有需要幫忙,請找旁邊的馭蟲者談談。','用被馴服的蟄猛巨蟲擊敗鐵巨像,然後返回石崖避難所向『塑岩者』石崖回報。','','到風暴群山的石崖避難所找『塑岩者』石崖。','','','','',0), +(13009,'zhTW','新的開始','我們的人民是否能夠再次愛戴索林姆仍舊是件不確定的事。$b$b如果別的東西都不行的話,也許這套盔甲能夠讓他想起那些日子,當時我們還榮耀地並肩而立,所向無敵。','尼約梅爾德要你把重鑄護甲帶去風暴神殿給索林姆。','','到風暴群山的風暴神殿找索林姆。','','','','',0), +(13010,'zhTW','克洛米爾,風暴之錘','在我奪回造物者神殿的家園之前,還剩下一樣工作。$b$b一定得找到克洛米爾。$b$b在那命運之日,我以全部的力量與憤怒將它擲向大地。隨即產生了一場巨大的爆炸。$b$b許多年來我一直以為失去了它,但是我一定得確認才行。$b$b回到裘庫姆王那兒,問問他是否知悉任何有關戰錘的下落。','索林姆要你與丹尼弗蘭的裘庫姆王談話,並瞭解他對克洛米爾知道多少。','','到風暴群山的風暴神殿找索林姆。','瞭解克洛米爾的下落','','','',0), +(13011,'zhTW','解決喬克塔','蟄猛巨蟲是需要盡快處理的棘手生物。要是讓牠們有生存空間,牠們就會像野兔一樣繁殖,像野火一樣蔓延。$b$b西南方的凜冬洞窟出現了牠們的蹤跡。不趕緊殺死母蟲的話,牠們就會在我們的地盤上落地生根。$b$b她抗拒不了食物的誘惑。帶著這把小刀,從牠們洞穴裡的熊屍上切一塊腹肉,然後把肉放在靠近她的坑洞附近。趁她進食的時候殺了她。','丹尼弗蘭的裘庫姆王要你去凜冬洞窟殺死喬克塔。','','到風暴群山的丹尼弗蘭找裘庫姆王。','','','','',0), +(13034,'zhTW','英雄與他的見證','當我開始在北裂境旅行的時候,我造訪了北風凍原,並初次見到坦卡牛頭人。馴風者巴拉告訴我關於風暴之蹄的傳說,以及他和族人的古老敵人,北風精靈之間的戰鬥。$B$B我來到風暴群山,想要更深入地研究這位英雄,但很奇怪的是,坦卡羅的人民似乎完全不知道這個人。$B$B也許營地的紀錄能夠告訴我們更多。找出遍布在營地的歷史卷軸,然後閱讀其中的資訊,再告訴我你發現了什麼。','坦卡羅的札倫陶要你去閱讀第一部歷史卷軸、第二部歷史卷軸與第三部歷史卷軸。','','到風暴群山的坦卡羅營地找札倫陶。','閱讀第一部歷史卷軸','閱讀第二部歷史卷軸','閱讀第三部歷史卷軸','',0), +(13035,'zhTW','洛肯的走狗','對造物者殿堂發動的攻擊可不是我兄弟的無心之作。他派了一整團的鐵矮人和他手下最強的幾個副官來。$B$B使用群山號角召喚土靈與你並肩作戰,然後擊敗洛肯的僕人。$B$B你會在北邊的塑造者大廳中找到那個巨人,伊森弗士德。其他人則在造物者殿堂的更深處,西北邊樓梯的後方。','索林姆要你殺掉塑造者大廳裡的伊森弗士德、造物者殿堂裡的『風誕』哈雷孚尼爾、『符文工匠』杜隆恩。','','到風暴群山的造物者殿堂找索林姆。','','','','',0), +(13037,'zhTW','風暴之蹄的回憶','當青銅龍軍團贈與我永生,讓我走上見證之道的時候,諾茲多姆將博識之錘交給了我。$B$B博識之錘對你所見所聞的反應,代表此處的時間遭到扭曲;而將時間線回復為真實樣貌,就是我們的責任。$B$B我們必須找到它。浮冰霜淵位於西北方,那是古代的坦卡羅戰士墓場。尋覓迅矛酋長的靈魂,他是風暴之蹄的兄弟。詢問他對於他的兄弟與北風精靈之間的戰鬥,他還記得些什麼。','與浮冰霜淵的迅矛酋長交談,然後回去找坦卡羅營地的札倫陶。','','到風暴群山的坦卡羅營地找札倫陶。','詢問迅矛酋長的回憶','','','',0), +(13038,'zhTW','扭曲時間','這裡,坦卡羅勇士之墓,被認為是個寧靜致遠、免於一切恐懼之處。$B$B然而,一支莫名的力量入侵了浮冰霜淵,驚動了沉睡的靈魂、玷污了我在世時的回憶。$B$B這猶如我們的功績與記憶,正自史冊中抹去。$B$B在世時,這枚圖騰能代表我的威信,而今,它是我和這世界間最後的聯結。帶著它吧,用它安撫受驚的魂魄,為這片墓地再次帶來寧靜,然後將它送還坦卡羅營地。','以酋長的圖騰使四個浮冰裂隙合攏,然後,將圖騰帶給坦卡羅營地的札倫陶。','','到風暴群山的坦卡羅營地找札倫陶。','關閉浮冰裂隙','','','',0), +(13046,'zhTW','餵食安格林','安格林的飢餓是個傳奇。$b$b即使是死了,他的表情依然表現出飢餓的渴望。僅僅是盯著他瞧,也會讓你的胃咕嚕咕嚕地蠕動起來。$b$b這意味著他終其一生都不會飽足,而世上也沒有他不吃的東西。你想知道是否有方法可以填飽這個老國王。$b$b正當你在思考的時候,安格林頭上的一枚冰凍巨齒突然落向他唇邊的鬍鬚,並彈進你的手心當中。','你要拿5隻虛實的蟄猛巨蟲餵食安格林,然後回到丹尼弗蘭的安格林的冰凍之影前。$b$b你必須前往遠古寒冬山谷,並以安格林之牙對付遊蕩的蟄猛巨蟲。一旦牠們變得虛實不定,你得和牠們戰鬥,直到牠們被削弱為止。','','到風暴群山的丹尼弗蘭的霜域湖找貪求無厭的安格林。','安格林的靈魂感到飽足','','','',0), +(13047,'zhTW','清算','洛肯殺了我老婆,離間我和我的追隨者,使我們彼此交惡。他奪走了我的一切,但是今天...局勢將變。$B$B今天我們將收回神聖的土地。今天,我們將反擊。今天...洛肯必死。$B$B和我在智慧神殿附近的橋上碰頭,就在奧杜亞的西南方。我將和他作決一死鬥。$B$B我需要你作為見證,但是你不需要幫助我,這是私人恩怨。$B$B此事一了,請通知裘庫姆,冰霜巨人之王。他是個值得信賴的朋友,並且知道該怎麼做。','在智慧神殿附近和索林姆碰面。向丹尼弗蘭的裘庫姆報告戰鬥的結果。','見證清算之戰','到風暴群山的丹尼弗蘭找裘庫姆王。','','','','',0), +(13273,'zhTW','追尋核心','有了諾甘農之殼在手,只剩下鑰匙的另一半部需要去找了,幸運地,我已讓探險者協會努力追尋諾甘農之核的下落。$B$B發明者圖書館的東南方遠處、在一個往北丹尼弗蘭的斜坡上有一個背負吾名的營地。許多搜尋第二半部鑰匙的協會成員們正駐紮在那兒。將他們編制的地圖與筆記都帶回來給我,我們應該可以用那些資料來找出另外一半鑰匙的下落。','在布萊恩營地找出勘察員克羅娜的筆記與勘察員索林的地圖。','','使用布萊恩的通訊器聯絡布萊恩·銅鬚。$B$B如果你弄丟了布萊恩的通訊器,去找葛羅姆亞什失事地的摩特哈·風誕對話。','','','','',0), +(13274,'zhTW','核心的守護者','勘察員索林的筆記指出諾甘農之核目前正被一個名叫艾桑的哨兵看守著,彌米爾的創造物之一。$B$B索林提到艾桑守護的穹殿在這些日子被叫做「洛肯的交易地」。$B$B洛肯,嗯?土靈曾經提過他。$B$B穹殿據說位於被摧毀的探險者協會營地西南方,圓形入口坐落在山邊眺望著遠古寒冬山谷。$B$B找到這個艾桑並從他手上取得核心,當然如果你們打起來的話我不會太意外。','取得諾甘農之核。','','使用布萊恩的通訊器聯絡布萊恩·銅鬚。$B$B如果你弄丟了布萊恩的通訊器,去找葛羅姆亞什失事地的摩特哈·風誕對話。','','','','',0), +(13285,'zhTW','打造鑰匙','啊哈!就是它:發明神殿,守護者彌米爾自己的寶座!當然,那兒就是結合兩個半部鑰匙的地點。$B$B根據勘查員們的筆記,發明神殿位於造物者殿堂西側的最高點之一。這意味著它大致位於葛羅姆亞什失事地東邊。$B$B我會在神殿與你會合然後我們再將兩個部份合而唯一。','布萊恩‧銅鬚要你在發明神殿與他會合並且結合諾甘農之殼與諾甘農之核。一旦你協助布萊恩‧銅鬚之後便回報給葛羅姆亞什失事地的博克塔‧血怒。','','到風暴群山的葛羅姆亞什失事地找博克塔·血怒。','協助布萊恩完成拱心石','','','',0), +(13559,'zhTW','霍迪爾的祭禮','','','','到祖爾德拉克找立勒賀夫。','','','','',0), +(12818,'zhTW','清理','直接講重點...瑞基特要我組裝一些更強力的地雷,但是我的零件快不夠用了。$B$B在城鎮的西邊,你可以找到上一艘火箭雪橇的殘骸...瑞基特在替它加油的時候可能有點太興奮了,但是也許我早該想到不能把噴嘴放的太靠近排氣孔。活到老,學到老啊,嗯?$B$B在雪橇的殘骸附近應該有很多多餘的零件...你何不去那裡趕跑那些拾荒者,然後替我搶點殘骸來呢?','K3的吉爾‧炫臼想要10塊燒焦的殘骸。','','到風暴群山的K3找吉爾·炫臼。','','','','',0), +(12819,'zhTW','危機四伏','該死!我的工具在哪裡?我不久前才看到它們在這的啊。$B$B噢!也許我在西邊佈雷的時候把它們忘在那裡了。這可真有點不方便。如果你能去幫我把它們拿來的話我會很感激的。但你得小心你的腳步...你應該能走我走出來的那條路進去吧。$B$B喔,不要想用飛的進去...我機靈地架設了會把所有飛行物打下來防空塔台,它們可不會分辨目標的。','K3的吉爾‧炫臼希望能從他的地雷區取回炫臼的工具。','','到風暴群山的K3找吉爾·炫臼。','','','','',0), +(12820,'zhTW','精巧的手法','我等這些地雷等了一輩子!好吧,至少也等了好幾天。為什麼他花了那麼多時間?$B$B我們現在的困境是這樣,朋友...那裡有一大票的猛瑪象人 -- 你知道的,又黑又毛,而且長的奇醜 --牠們熱切地想要奪下K3。$B$B這可不會成真。$B$B我們在東北邊的路徑上設立了一些防禦。但很遺憾的是,我們的雷射塔能量有限...這就是地雷派上用場的時候了!去那兒把牠們給炸上天吧!','K3的瑞基特要求你,在迦姆之禍用強化地雷抵擋12個來自迦姆的攻擊者。迦姆入侵者與雪盲跟隨者,都算在目標之內。','','到風暴群山的K3找瑞基特。','殺死迦姆攻擊者','','','',0), +(12821,'zhTW','能量爆發','工兵小隊準備好啦!$B$B意思是說,享樂的時刻到啦!$B$B只剩一件事情阻擋著我們全面進攻迦姆而已!我派了一個信差到他的後方建立傳送器…而且成功了…但他卻回來拿傳送器運作所需的能量電池。傳送器還是沒運作…也就是說能量電池沒能抵達目的地。$B$B我要你去迦姆之禍的另一頭把能量電池找出來。找到以後,把電池帶去更東邊的迦姆高崗,然後啟動傳送器。','K3的瑞基特要你找出傳送器能量電池並用它來啟動迦姆高崗的傳送平臺。','引導加姆傳送器','到風暴群山的K3找瑞基特。','','','','',0), +(12822,'zhTW','不知恐懼為何物','現在我們打開了傳送器,我的計畫有點複雜...包含了許多面向,而且配合得天衣無縫。還得做好後勤準備!還要招募部隊!大概也得花上好幾個禮拜的時間!$B$B哈哈,我派你去那裡待了一陣,對吧?你獲派這個任務啦,小鬼。跳過傳送器,然後跟他們幹上一架!我們的工兵會支援你...他們將無路可逃。','K3的瑞基特要你殺死6個迦姆看守者與8個雪盲誓徒。','','到風暴群山的K3找瑞基特。','','','','',0), +(12823,'zhTW','天衣無縫的計畫','嘿你好!你是來加入突擊的對吧?$B$B我有項特別任務要給你...我們要把整個洞穴炸垮在牠們頭頂上!在牠們的洞穴後方,你可以找到霜膽的祭壇。偷溜進去把這個硬盒裝爆裂物裝在祭壇附近。$B$B一旦炸藥裝置好了,你得在附近待上一陣子,確定霜膽上鉤,然後快點逃出來!天知道要是爆炸了洞穴可以撐的了多久!','迦姆高崗的基諾,要你把硬盒裝爆裂物裝置在霜膽的祭壇附近,然後殺死托爾瑪‧霜膽,在洞穴坍塌壓垮你之前逃出去。','','到風暴群山的迦姆高崗找基諾。','裝設爆裂物','','','',0), +(12824,'zhTW','傑出的爆破專家','你有雙飛毛腿啊孩子!謝謝你幫忙處理那些炸彈...我想測試那項發明好久了!$B$B去告訴瑞基特我們現在在猛瑪象人前有掩護了...我的工兵會把剩下來的壞蛋都清光。$B$B謝啦!','回去K3找瑞基特。','','','','','','',0), +(12825,'zhTW','表達謝意','','用迷你飛機神風特攻豺狼人領袖。','','','','','','',0), +(12826,'zhTW','輕微不穩定','看起來不錯!$B$B不,不是說你 - 是說我的新地雷。你有點太自滿了,不是嗎?另一方面,我,絕對是才華洋溢的!我的智力可沒有人能比得上。$B$B我們在談什麼?哦對,我的新地雷!全新,而且更加進化...不管瑞基特想用來做什麼用途都可以。$B$B做個好$G孩子:女孩;,把它交給瑞基特,好嗎?她就在那兒...這應該是段史詩般的旅程,我很確定。不過小心點,她有些瘋瘋癲顛的。','把吉爾的強化地雷送去給K3的瑞基特。','','到風暴群山的K3找瑞基特。','','','','',0), +(12827,'zhTW','回收乾糧再利用','嘿,嘿!你是新面孔!要不要幫瑞基特一個忙啊?$B$B我們有個預料外的問題...存糧不足。我知道,我知道...我們早該預料到有這麼一天,但你不懂。我們原本只是想要帶著工兵分隊迅速的在這邊繞一圈,就這樣,所以通常咱們不擔心長期食糧問題。但老K3似乎越來越熱鬧了。$B$B簡單的解決方案?西邊有個豺狼人營地,附近有些豺狼人在亂晃,有些到處在拾荒。能不能幫忙弄點他們的乾糧來?','K3的瑞基特,要你從附近的野生山丘豺狼人身上,回收16份風乾的豺狼人口糧。','','到風暴群山的K3找瑞基特。','','','','',0), +(12828,'zhTW','豐沛的靈感','哇!那東西可真是噁心。不是要替豺狼人的品味說話,只是不管他們吃的是什麼,至少是...可以吃的東西吧?$B$B讓我們更進一步地活用創意...$B$B托爾在城鎮北邊有個炸藥配給器...就在那個大洞穴的入口處附近,你不會看漏的。我相信她應該是要用那些炸藥來採礦什麼的,但我有個更好的點子。$B$B去拿一個炸藥來,然後扔向附近的長毛象...牠們大多分佈在西邊。收集那些肉,然後把肉帶回來。','K3的瑞基特要你拿一個U.D.E.D,然後用它把一頭長毛象炸碎,接著帶回8個營養的長毛象肉塊。','','到風暴群山的K3找瑞基特。','','','','',0), +(12829,'zhTW','上前線','嗨呀!我叫托爾。我要前往K3礦工作業的地點...我馬上就要去了!$B$B這個洞窟裡有好多毛骨悚然的東西。我想我們進去之前可以把蜘蛛的數量減少一點 - 你覺得怎麼樣?','晶網洞窟外面的托爾‧滾鉗要你殺死12隻晶網蜘蛛。','','到風暴群山的晶網洞窟找托爾·滾鉗。','殺死晶網蜘蛛','','','',0), +(12830,'zhTW','重新獲得礦石','我們要進去了!$B$B我們抵達的時候,裡頭有些極地狗頭人...然而他們的採礦行動似乎碰上了某種不幸的阻礙。這不打緊 - 反正我們很快就要接手礦坑了。$B$B我派了幾個礦工進去採取礦石樣本,好讓我用來校正器材,但是他們卻沒有回來。$B$B你不介意代替他們進去幫我弄點樣本出來吧?極地狗頭人可能抓了幾個礦工,不過我猜他們現在多半是死了。','晶網洞窟外面的托爾‧滾鉗,要你取回5個不純淨的薩鋼礦石樣本。','','到風暴群山的晶網洞窟找托爾·滾鉗。','','','','',0), +(12831,'zhTW','只忘一半','喂...我胃裡好像有個螺旋槳一樣。$B$B我想我走得動,但是從我在洞穴後方被某個生物咬了一下之後我就覺得身體裡面有個很糟糕的東西。那玩意比其他蜘蛛都來的大...而且色彩鮮豔。$B$B瑞基特可能可以替我做出解毒劑,但是她會需要咬我的那玩意身上的毒囊。你願意幫我找到它嗎?我不覺得托爾會來幫忙。$B$B我會躺在這裝死,希望他們不會來煩我。','晶網洞窟中受傷的哥布林礦工要你從冰尖爬行者身上取得冰尖毒囊。','','到風暴群山的雪盲丘找受傷的哥布林礦工。','','','','',0), +(12832,'zhTW','苦澀的啟程','喂 - 謝謝你!我以為我就要變成蜘蛛的點心了。也許我說的有點太早了 - 讓我們逃出這裡吧!$B$B當你準備好要出發了就跟我說一聲...但是請快點。','護送受傷的哥布林礦工離開晶網洞窟,然後與K3的瑞基特交談。','護送受傷的地精礦工轉至K3。','到風暴群山的K3找瑞基特。','','','','',0), +(12833,'zhTW','存貨過多','又見面啦!你沒有像其他的冒險者一樣落跑啊?好吧,你真是個惹人愛的傢伙,不是嗎?我才正懷疑是不是我聞起來怪怪的還是怎樣?$B$B我們需要一點幫助,你的經驗正好可以派上用場。記得那些猛瑪象人嗎?顯然那個洞窟沒有完全倒塌...還有一小撮苟活著。基諾還說什麼有他就搞定了。$B$B幸虧,吉爾做的地雷數量遠超過所需。這個給你!','K3的瑞基特要求你,在迦姆之禍用強化地雷抵擋來自迦姆的攻擊者。迦姆入侵者與雪盲跟隨者,都算在任務目標的攻擊者內。','','到風暴群山的K3找瑞基特。','殺死迦姆入侵者','','','',0), +(12834,'zhTW','不是雨,也不是雪,也不是爆炸的飛機','','對巨人測試冷天氣炸彈。','','','','','','',0), +(12835,'zhTW','全部長大','','對巨人測試長大的蟄猛巨蟲','','去找。','','','','',0), +(12836,'zhTW','表達謝意','我正好知道一項工作,很適合急著表現的菜鳥!我們有個豺狼人的麻煩...你甚至可以說是個豺狼人流行病!討厭的生物。他們不斷地湧出,現在已經跑到了我們的門口,偷我們的東西!真是難以相信。$B$B事情全都是因為他們的領袖,瘤皮而起,也會因為他結束。我要你去處理「結束」的部分...一路前往西邊雪盲丘的營地,去拜訪他。$B$B當我說「拜訪他」的時候,其實就是婉轉地在說「將他凌遲至死」。瞭嗎?瞭吧!','K3的瑞基特要你殺死瘤皮。','','到風暴群山的K3找瑞基特。','','','','',0), +(12837,'zhTW','貨在托爾那','','向托爾回報','','','','','','',0), +(12841,'zhTW','巫婆的交易','你一定是來找那個綠色的小囚犯…我們也許可以互相幫忙。$B$B你沒辦法靠蠻力把那隻哥布林弄出去的,至少沒辦法活著弄出去,嗯。$B$B在我的族人之中,他們叫我依爾克凡,幻術士。如你所見,海迪尼爾把我囚禁在這裡。$B$B如果我能夠拿到我的符文,我就可以讓你不被發現地潛入他們之中。礦坑更深處有個來回巡邏的監督者,名叫塞拉。我的符文在她手上。幫我把符文拿回來,然後我們再來談談。','凋落礦坑的『巫婆』洛莉拉要你從監督者塞拉手上把依爾克凡符文拿回來。','','到風暴群山的凋落礦坑找『巫婆』洛莉拉。','','','','',0), +(12843,'zhTW','他們把男人抓走了!','你得幫幫我們!當我們遠征到山裡架設發射塔的時候被襲擊了。$B$B他們看起來很像維酷人,但皮膚是藍色的,而且表面還覆著霜…而且全是女性!他們把遠征隊的男人全都抓走了,放過我們女性。求求你,$n!我想他們應該被關在希弗爾達村,就是那個能俯瞰K3的村子。','格雷徹‧嘶炫要你前往希弗爾達村並拯救5個哥布林囚犯。','','到風暴群山的K3找格雷徹·嘶炫。','釋放哥布林囚犯','','','',0), +(12844,'zhTW','裝備回收','拜託你,$n。當海迪尼爾帶走我們的男人的時候,他們也把我們的裝備全都給拿走了。當然,把人救回來是比較重要的,但假如你找到了我們的裝備,能帶回來給我們的話,我們也會非常感激你的。$B$B你可以在我們的上方找到他們的村子,就在北方。','格雷徹‧嘶炫要你到K3北邊的希弗爾達村收集8份K3裝備。','','到風暴群山的K3找格雷徹·嘶炫。','','','','',0), +(12846,'zhTW','一個哥布林都不能少','我們的孩子們都回來了...謝謝你,$n!嗯...還有一個還沒。$B$B根據其他人的說法,我的兄弟奇夫還在那兒。顯然他們把囚犯都送去某個礦坑工作了。去那兒看看能不能找出些線索來。','在希弗爾達村的北部找出凋落礦坑的入口,然後找出關於奇夫‧炫嘶所在位置的線索。','','','','','','',0), +(12853,'zhTW','華麗登場!','嘿,老兄!$B$B你喜歡刺激的樂子和爆炸秀嗎?誰不愛呢?我知道有個適合你的地方。下到豪華的K3去,他們永遠都在想鬼點子,好讓所有的事物變成煙火秀!聽起來超刺激的,不是嗎?如果你想一同享樂的話,馬上下去,然後跟吉爾‧炫臼談談!$B$B放棄同意書:前述之「刺激的樂子」必須以某些體力勞動作為加入條件。','到風暴群山的K3找吉爾‧炫臼談談。','','','','','','',0), +(12862,'zhTW','最後一招','所以啦...我不覺得,我們有辦法在山脈裡建立一個起降據點。$B$B相信我,我不是很容易就放棄的人...但夾在這些結凍的引擎、惡劣的女維酷人、領域觀念超強的龍,還有一堆壞蛋之間,真的就是沒辦法。$B$B但可不代表你得放棄!我們無法建立起降據點,跟沒辦法把你送進去是兩回事...只要你願意,單程票倒是很簡單。$B$B<瑞基特對著附近的火箭點點頭。>','與瑞基特對話,並利用瑞基特的D16傳送推進裝置,深入風暴群山。','','','','','','',0), +(12863,'zhTW','致謝','啊!謝謝你到這裡來$G小子:小女孩;。$B$B從你圓睜的雙眼和顫抖的雙手看來,我敢大膽地推測你是新來的。聽起來讓你見見我們親切的地主會是個好主意。$B$B我們有些多餘的醫療補給品...老實說,我們沒料到能夠擁有這麼舒適的據點。去把這個箱子拿給那邊的格洛梭,如果你願意的話,再幫他一把。我們實在受到很多照顧接待,因此不希望他們認為我們不知感激。','把醫療補給箱交給霜堡的格洛梭‧硬鬚。','','','','','','',0), +(12864,'zhTW','消失的斥候','既然你來幫忙,我有件事情要麻煩你。$B$B我們的幾個斥候拖延了很久還沒有回來。這山地環境很嚴苛...但這幾個小子應該早有準備才對。$B$B前往東方...搜索伯爾之息河谷沿途以及伯爾瀑布...他們應該是在那個方向。如果你找到任何跡象,立刻把消息帶回來給我。我們在此地有一些敵人 - 如果他們之中有人升高了敵意,咱們最好早點收到警告。','霜堡的格洛梭要求你,搜索伯爾之息河谷與伯爾瀑布,尋找失蹤霜誕斥候的蹤跡。','找到失蹤的斥候','到風暴群山的霜堡找格洛梭‧硬鬚。','','','','',0), +(12865,'zhTW','忠誠的夥伴','新人!你好啊!你有時間的話,我有些工作要交代你。$B$B此地東去就是足跡冷原...是個鳥不生蛋的地方,但是,那裡聚集著一群犀牛。我們的小鳥對犀牛肉情有獨鍾,但是獵捕犀牛其實滿危險的,因為那一帶還有不少元龍的巢穴。$B$B如果你夠機靈的話,去獵些犀牛肉,帶到這附近的群山裡,填飽棲息在那裡的老鷹吧。','在霜堡的弗尤林‧霜眉要求你,獵取8片新鮮寒冰犀牛肉,並用來餵飽鎮上的風暴頂雄鷹。','','到風暴群山的霜堡找弗尤林·霜眉。','餵食風暴頂雄鷹','','','',0), +(12866,'zhTW','擊退來犯者','該死的鷹身人。我們把他們打到投降好幾次了,多到我都記不清…然後每打一次他們就會安分一陣子。這次我還以為他們會安分久一點。$B$B顯然沒有。$B$B他們的記憶力雖然不會存留太久,但如果能夠削減他們的數量,他們就會退回去。前往北方跟東方的山谷替我清掉一票鷹身人,怎麼樣?','霜堡的格洛梭‧硬鬚要你殺死8個霜羽尖嘯者以及8個霜羽女巫。','','到風暴群山的霜堡找格洛梭·硬鬚。','','','','',0), +(12867,'zhTW','偷嬰賊','數週之前,如果你抬頭往上看,你會看到幾十隻漂亮的雄鷹在空中盤旋。現在,就算有也寥寥無幾。牠們現在幾乎整天都待在巢裡,因為那些鷹身人一直在偷取牠們的蛋。$B$B這些鷹身人似乎養成了愛吃老鷹肉的習慣...這些病態的妖婦把蛋帶在身邊,等到孵化出來才吃掉雛鳥。前往山谷的北邊或東邊那找出那些蛋並且蛋給拿回來,我會把帶它們回鷹巢。','霜堡的弗尤林‧霜眉要你帶回15顆風暴頂鷹蛋。','','到風暴群山的霜堡找弗尤林·霜眉。','','','','',0), +(12868,'zhTW','西拉納‧冰嘯','這個西拉納‧冰嘯聽起來像是那個在背後煽動鷹身人攻擊的傢伙。如果我們把她解決掉,我想他們的攻擊就持續不了多久了。$B$B我們的一名風暴騎兵宣稱看見她在西北邊的山上徘徊,把這個妖婦找出來並宰了她。讓我們解決這一切吧。','霜堡的格洛梭‧硬鬚要你殺死西拉納‧冰嘯。','','到風暴群山的霜堡找格洛梭·硬鬚。','','','','',0), +(12869,'zhTW','逼人太甚','你當時跟洛肯一起在場,不是嗎?鐵矮人抓走了元龍的育母,維拉努斯。那些龍對此感到非常不開心…變得非常具有攻擊性。$B$B他們入侵了風暴頂雄鷹的領土,導致全面開戰,現在是時候回報牠們的恩情了。我們現在就出發,去足跡冷原把那些龍殺得片甲不留。$B$B風暴之心國王把這柄戰錘交給我 - 好好使用它,然後記得交還給我。','霜堡的弗尤林‧霜眉要求你,騎乘一頭風暴頂雄鷹,並前往足跡冷原殺死16隻風暴巔巨龍。','','到風暴群山的霜堡找弗尤林·霜眉。','','','','',0), +(12870,'zhTW','遠古聖物','哎呀你好哇!$B$B在你出發去進行你偉大的任務與冒險之前,我可以拜託你幫個小忙嗎,$G小子:小女孩;?$B$B這山脈中藏著滿滿的聖物和漂亮的小東西…對探險者協會來說簡直就是美夢成真啊。如果你碰巧找到這些寶藏,然後帶來給我,我會萬分感激的。我甚至可以跟你分享我的麥芽酒!相信我,$G小子:小女孩;,這是筆划算的交易!','把10個奧杜亞聖物帶去給霜堡的洛克‧銳頦。','','到風暴群山的霜堡找洛克·銳頦。','','','','',0), +(12905,'zhTW','殘酷的米歐瑞德','那麼我們就一言為定,$n。你把我弄出這堆鎖鍊外,我就幫你找到你的綠色小朋友。$B$B負責管理這座礦坑的海迪尼爾名叫殘酷的米歐瑞德 -- 這個稱呼其來有自。$B$B告訴他你是被派來幫忙的。聽從她的命令,直到她信任你並且把我的鐐銬鑰匙交給你為止。','與殘酷的米歐瑞德交談,她就在凋落礦坑裡。','','','','','','',0), +(12906,'zhTW','紀律','讓你從單純的事情開始做起吧。在礦坑裡替我們工作的男性維酷人並不是自願的...單純只是出於對刀刃的恐懼。$B$B每隔一小段時間他們之中總會有人喪失動機。找出不合作的維酷人,然後叫他們去工作。$B$B帶著這把紀律節杖。你去造成他們痛苦,而不是造成死亡。嗯,至少大多數時候是這樣啦。','凋落礦坑的殘酷的米歐瑞德要你對6個精疲力竭的維酷人使用紀律節杖。','','到風暴群山的凋落礦坑找殘酷的米歐瑞德。','整肅精疲力竭的維酷','','','',0), +(12907,'zhTW','殺一儆百','每個作用力都會產生相對的反作用力,姊妹。當我們對男性施加壓力的時候,產生的反作用力就是最近謠傳的叛亂。$B$B這些鬍子豬儸賤民背後的煽動者叫做賈爾赫。宰掉他...確定其他的男性都有目睹他的末日。他們得搞清楚,我們是不會容忍反抗的。','凋落礦坑的殘酷的米歐瑞德要你殺死賈爾赫。','','到風暴群山的凋落礦坑找殘酷的米歐瑞德。','','','','',0), +(12908,'zhTW','某個囚犯','你毫不手軟。你在這一帶會混的很好。$B$B我有另外一個任務要給你。有個維酷女囚犯變的比我預期中的還要令人困擾。$B$B她竟然有膽宣稱自己有權參加海茲競技 -- 我們比試力量與戰鬥本領的神聖競賽。$B$B這是解開她鐐銬的鑰匙。盡可能做得乾淨俐落點。再怎麼說她雖然不是我們族人,也是個女性。','拿著米歐瑞德的鑰匙去凋落礦坑找『巫婆』洛莉拉。','','到風暴群山的雪盲殿堂找『巫婆』洛莉拉。','','','','',0), +(12921,'zhTW','轉換舞台','太棒了。東邊盡頭有個出口通往布倫希爾達村。沿著那條路走,我會在那裡跟你會合。$B$B不能被人看到我們一起行動,這樣才不會有人懷疑你在幫助我。我會用法術來偽裝我的外表。不要擔心,$r -- 我們很快就會找到你的朋友了。','到布倫希爾達村與『巫婆』洛莉拉會合。','','','','','','',0), +(12923,'zhTW','','','','','','','','','',0), +(13000,'zhTW','緊急措施','群山中的寒氣非常的嚴酷。不過一兩天,我們就把墜毀殘餘的木頭通通給燒光了。$B$B我們在東方的洞穴裡看見了一些座狼。我要你找到這個洞穴,並且把毛皮弄來。聽起來也許沒差多少,但這可是凍死和活著看到明天太陽的差別。$B$B座狼並不會單獨狩獵,所以我要給你一顆閃光彈。當你被數量壓倒的時候,這應該能幫你爭取一點時間。','血衛士洛嘉要你去東邊的吉摩拉克獸穴,並取得6張座狼毛皮。','','到風暴群山的葛羅姆亞什失事地找血衛士洛嘉。','','','','',0), +(13048,'zhTW','時間錯置','博識之錘可以幫助我們修復時間線的損壞,但是我們得先知道歷史是從哪裡開始崩壞的。$B$B根據迅矛酋長和你在浮冰霜淵的發現,我們了解了,時間的扭曲,大約是從風暴之蹄過世的前後開始。$B$B現在,你得動身前往營地北方的嚎風谷,視察那裡的墓地,確保北風精靈的爪牙都已被消滅。博識之錘將和風暴之蹄時代的神器起反應,並將歷史調和至正確的時間。','利用坦卡遺蹟上的博識之錘,將時間調和至風暴之蹄的時代。當博識之錘與6個當時的遺蹟有所共鳴,便將它還給坦卡羅營地的札倫陶。','','到風暴群山的坦卡羅營地找札倫陶。','博識之錘調和至風暴之蹄的時代','','','',0), +(13049,'zhTW','英雄的武器','並非所有營地裡的記錄皆已腐朽。我的人馬協助我,找到這些可以忠實反映時間線的文獻。$B$B村中的長老,將風暴之蹄風光地葬在北方嚎風谷的谷底。$B$B那兒大多數的勇士皆已殞滅,他們的軀體被竊取,成了北風精靈的戰利品。去嚎風谷吧,或許你可以在風暴之蹄的子孫那兒,找到他的矛頭與盔甲,讓它們重見天日吧。','將風暴之蹄的長矛及鎖甲恢復原狀,並將它們帶回給坦卡羅營地的札倫陶。','','到風暴群山的坦卡羅營地找札倫陶。','','','','',0), +(13050,'zhTW','維拉努斯','若我要對我哥哥的部隊發動襲擊,我得想個必勝的法子才行。$B$B我在許久前的蠻荒年代釋放了我的座龍。維拉努斯相當高貴、莊嚴,是她子嗣們真正的領袖。$B$B要找到她不是件容易的事,但也非斷不可行,她已過盛年,不再行育母繁衍的職責,只能孤獨地獨守她的老巢。$B$B從她在布倫希爾達附近的其他巢穴,帶回些蛋給我吧。我有個主意了。','風暴神殿的索林姆要你從布倫希爾達村附近的山巔帶回5顆小元龍蛋。','','到風暴群山的風暴神殿找索林姆。','','','','',0), +(13051,'zhTW','非法入境','維拉努斯自負的程度,簡直前所未見。她仍然老神在在地待在老巢中,防止其他年輕元龍鳩佔鵲巢。$B$B將你之前帶來的蛋,放在她的巢中。她的巢在此地東南方,一座小丘之上。$B$B嗯,我應該可以牢牢控制住她-在她暴怒地撕裂你之前。希望如此。','將偷來的元龍蛋放在育母之巢的頂部,然後返回風暴神殿,與索林姆會面。','','到風暴群山的風暴神殿找索林姆。','引出維拉努斯','','','',0), +(13054,'zhTW','失蹤的追蹤者','基於道義,在派你去座狼洞之前,我必須警告你,前一回我們派去的人,至今尚未回來。$B$B我們已做了最壞的打算,但或許他仍然活著。若你找到他,並協助他回來,我們將非常感激你-追蹤者瓦爾吉是我們僅有而寶貴的獵人。','在吉摩拉克獸穴內尋找追蹤者瓦爾吉,獸穴的位置,在葛羅姆亞什失事地的東南方。','','','','','','',0), +(13055,'zhTW','洞穴中的解藥','見到友善的面孔真好。搞不好是最後一次了吧。$B$B我還來不及逃走,就一頭蟄猛巨蟲用毒刺螫了我一下。老兄,我可以感覺到我的身體漸漸麻木。$B$B我需要一個毒腺來製作解毒劑,還有一些山洞裡的洞穴蘑菇…它們能延緩毒性。$B$B請快點,我沒有多少時間了。','在吉摩拉克獸穴裡的追蹤者瓦爾吉,要求你替他採得1個蟄猛巨蟲的毒素腺體和8個洞穴蘑菇。','','到風暴群山的吉摩拉克獸穴找追蹤者瓦爾吉。','','','','',0), +(13060,'zhTW','最後一招','所以啦...我不覺得,我們有辦法在山脈裡建立一個起降據點。$B$B相信我,我不是很容易就放棄的人...但夾在這些結凍的引擎、惡劣的女維酷人、領域觀念超強的龍,還有一堆壞蛋之間,真的就是沒辦法。$B$B但可不代表你得放棄!我們無法建立起降據點,跟沒辦法把你送進去是兩回事...只要你願意,單程票倒是很簡單。$B$B<瑞基特對著附近的火箭點點頭。>','和瑞基特對話,並利用瑞基特的D16傳送推進裝置深入風暴群山。','','','','','','',0), +(13061,'zhTW','為榮耀準備','這就行了。現在我會替你照顧你的熊,你不需要她了。你的下一個挑戰,就是偉大的德拉坎舍試煉。$B$B向你的朋友道別,把身後事處理好,因為你要不是凱旋而歸...就是永遠回不來了。','與布倫希爾達村的『巫婆』洛莉拉交談。','','','','','','',0), +(13422,'zhTW','維護紀律','你完成了別人做不到的事。但你萬不能就此停歇。$B$B你必須讓其他人看看何謂真正的力量與奉獻。$B$B凋落礦坑中許多維酷男工非常的不合群,必須讓他們再次學習什麼叫做紀律。讓他們看看,姐妹...讓他們看看不服從的下場是什麼。','布倫希爾達村的『仲裁者』格瑞塔要你對6個疲憊的維酷人使用紀律權杖。','','到風暴群山的布倫希爾達村找『仲裁者』格瑞塔。','整肅精疲力竭的維酷','','','',0), +(12882,'zhTW','遠古聖物','歡迎來到群山。$B$B在你踏上你所策劃的偉大旅途之前,我有個小小的請求。在這山脈中,散落著來自奧杜亞的遠古聖物和寶藏。大多數都落在此地的生物手裡。$B$B將你找到的帶回來給我,我就會給你豐厚的報酬。我甚至可以讓你分享我的烈酒。','把10個奧杜亞聖物交給葛羅姆亞什失事地的歐拉特‧酒膽。','','到風暴群山的葛羅姆亞什失事地找歐拉特·酒膽。','','','','',0), +(13053,'zhTW','尋找倖存者','格萊奇·菲茲巴克想要用我的飛行器去尋找探險隊的倖存者。她似乎覺得他們是被當成囚犯關在了北面的村莊裡。$B$B現在唯一的問題是,我沒有副駕駛員。如果你願意幫這個忙,我很願意教你一兩招。$b$b你覺得怎麼樣,$N?就這麼說定咯?','幫助紮克·沃布維奇完成試飛。','試飛','到風暴群山的伯爾瀑布找『誠實』麥克斯。','','','','',0), +(13420,'zhTW','永霜','這塊冰曾歷經巨大的壓力、長期深埋地底,經過大自然的魔法所催化。以上種種所造成的影響,竟然使得這塊冰不再融化。$b$b由於對這樣的現象所知甚少,你決定把一塊樣品帶回丹尼弗蘭,確信那兒一定有人會具備更深入的見解。','你即將返回丹尼弗蘭詢問考德爾有關這塊永霜的訊息。','','','','','','',0), +(13421,'zhTW','牢記永霜!','','','','到風暴群山的丹尼弗蘭找考德爾。','','','','',0), +(11900,'zhTW','檢查讀數','我本來希望奧核之心的衝擊能夠被侷限在這個區域,但根據最近的報告,顯然波動已經影響了整個艾澤拉斯,地質不穩定的情況幾乎是指數性飆升!$b$b我需要有人在我研究解決之道時,隨時監控奧核之心。$b$b我在凜懼島周圍安置了檢測儀器,偽裝成瑪里苟斯的占卜寶珠。一個就在奧核之心的裂溝附近,另外三個則藏在山谷四周的裂縫中。去察看每一個然後向我回報讀數。','隘境之盾的大法師貝瑞那德希望你去收集他設在凜懼島的儀器的數據。','','到北風凍原的隘境之盾找大法師貝瑞那德。','讀取奧核之心地質數據','讀取南部凜懼島數據','讀取北部凜懼島數據','讀取西部凜懼島數據',0), +(11919,'zhTW','獵龍','藍龍開始在他們的飛龍身上劃上神秘的符文。我一定要知道它們的意義。$b$b<瑞洛拉茲拿長矛劃開自己的手,在矛尖沾上他的血。>$b$b帶著這個,然後對他們使用長矛。等待他們被制服,然後效果解除之前把他們帶回來找我。$b$b他們的雛龍在西北方邊緣的山谷活動。','瑞洛拉茲要你使用瑞洛拉茲之矛來制服一隻奧核雛龍,然後帶回隘境之盾給他。','','到北風凍原的隘境之盾找瑞洛拉茲。','捕獲奧核雛龍','','','',0), +(11969,'zhTW','發動陷阱','我們能贏得這個機會大半都靠著你的努力,$n。$b$b只有你最適合去展開對瑪里苟斯的攻擊行動。$b$b帶著這個燃信,然後在奧核之心的西北部使用它來點燃火源信號。凱瑞史卓莎會在那裡指示你下一步的行動。','瑞洛拉茲要你在凜懼島的火源信號使用瑞洛拉茲的燃信。','','到北風凍原的隘境之盾找瑞洛拉茲。','引出瑪裡苟斯','','','',0), +(11946,'zhTW','凱瑞史卓莎','我...自由了?$b$b我原本注定要在空無的深淵中永遠流浪,但現在卻獲救了?你無法想像我有多感激你,凡人。$b$b我拒絕服從瑪里苟斯的意志,於是他就把我束縛在這個監牢之中,然後再把它打成碎片。就算一千年過去,我也不會忘記你的恩情。$b$b或許,我之後能有辦法報答你。但現在,我們必須把注意力集中在瑪里苟斯身上。我現在很虛弱,而有太多事情得要做了。$b$b我需要你的幫助,$n。','使用增強的秘法監牢召喚凱瑞史卓莎,並和她交談。','','','','','','',0), +(11951,'zhTW','誘餌與攻擊','在我被俘虜的時候,我學到了很多關於瑪里苟斯的事情。命運讓我們現在可以利用這些知識來對付他。$b$b這裡有一隻強大的藍龍,薩拉苟莎,在奧核之心的高處盤旋。她是守護巨龍的護衛也同時是他的伴侶。如果任何嚴重的威脅產生,她就會警告他的主人。$b$b被俘虜的時候我在薩拉苟莎手上吃了很多苦頭,現在該是她死去的時候了。但首先,我們得設下一個完美的誘餌...','凱瑞史卓莎要你從凜懼島四周收集10個晶化法力裂片。$b$b如果你弄丟了增強的秘法監牢,和隘境之盾的瑞洛拉茲談談。','','到北風凍原的凜懼島找凱瑞史卓莎交談。如果你弄丟了增強的秘法監牢,和隘境之盾的瑞洛拉茲談談。','','','','',0), +(11957,'zhTW','薩拉苟莎的下場','使用你找來的法力水晶,我做了這個能量聚合體。$b$b薩拉苟莎是個貪吃的傢伙。她不可能抵抗這樣的誘惑。其中蘊含著大幅削弱她的魔法。接下來就只能期待她沒有識破我們的陷阱...$b$b做好準備,$n,等你準備好面對薩拉苟莎再告訴我。','凱瑞史卓莎要你使用能量聚合體來引誘薩拉苟莎,然後擊敗她。','','到北風凍原的凜懼島找凱瑞史卓莎。如果你弄丟了增強的秘法監牢,和隘境之盾的瑞洛拉茲談談。','','','','',0), +(11967,'zhTW','召集紅龍','瑪里苟斯一定注意到有些事情不對勁。$b$b我瞭解他,他的注意力很片段。我相信等他知道他最珍愛的薩拉苟莎發生了什麼事,我一定可以把他從他安全的領域中引誘出來。$b$b盡快帶我去找瑞洛拉茲,$n。他必須要召集所有他指揮的龍群來面對瑪里苟斯。','凱瑞史卓莎請你帶她去隘境之盾找瑞洛拉茲。','','到北風凍原的隘境之盾找瑞洛拉茲。','','','','',0), +(11918,'zhTW','基本訓練','這是一場戰爭,凡人,而我們就是長矛的尖端。$b$b你對這塊土地或當前局勢的看法與我們眼前的戰爭相比根本是微不足道。我們面對的是守護巨龍瑪里苟斯和他整個藍龍軍團。你只需要知道,如果他獲勝了,那麼這個世界將不復存在。$b$b我們在此地的數量稀少,而我們所對抗的敵人卻數量龐大。我們的死亡是必然的結果,我們最終的成功也只是拖延我們的敵人。$b$b去吧。在我想到要如何運用你之前,替自己找點事情做。','隘境之盾的瑞洛拉茲要你去殺死10隻凜懼島織法者。','','到北風凍原的隘境之盾找瑞洛拉茲。','','','','',0), +(11931,'zhTW','破解密碼','我感覺到這裡的飛龍身上有一個明顯的特質,但是覆蓋在他們身上的符文含意依舊困擾著我。$b$b沒有聖典,我將需要更多時間來解譯這些符文。$b$b離這裡不遠處有一個祈倫托背叛者,卡列拉斯,他手中可能有我想要的書冊複印版。他的手下握有我進行翻譯時所需要的符文。$b$b動作快點,凡人。瑪里苟斯的力量隨著時間流逝而更加強大。','隘境之盾的瑞洛拉茲要你去從審判官卡列拉斯身上取得蒼藍聖典,並從他的凜懼島縛法者身上取得3個幻光符文。','','到北風凍原的隘境之盾找瑞洛拉茲。','','','','',0), +(11936,'zhTW','醞釀策劃','我們的目標十分簡單。繼續隱藏避免被瑪里苟斯發現,觀察他的龍群,並且盡可能地阻撓他的行動。為此,我有事情要託付給你。$b$b藍龍將他們的龍蛋產在奧核之心的底部。暴露在如此巨大的秘法能量之下,一定會加快孵化的速度,也沒有人知道這會對他們的子嗣產生什麼影響。$b$b不過我並不算查清楚那究竟會產生什麼樣的影響。殺死那邊的龍人,然後用他們的冰凍的斧頭打破龍蛋。','隘境之盾的瑞洛拉茲要你殺死凜懼島龍人,然後使用他們的冰凍的斧頭去打破5顆藍龍蛋。','','到北風凍原的隘境之盾找瑞洛拉茲。','摧毀龍蛋','','','',0), +(11940,'zhTW','獵龍','我需要更多的雛龍來繼續研究符文對他們身體的改變。$b$b它們能在西北方山谷的邊緣找到...$b$b<瑞洛拉茲拿長矛劃開自己的手,在矛尖沾上他的血。>$b$b帶著這個,然後對他們使用長矛。等待他們被制服,然後效果解除之前把他們帶回來找我。','瑞洛拉茲要你使用染血的長矛來制服一隻奧核雛龍,然後帶回隘境之盾交給他。','','到北風凍原的隘境之盾找瑞洛拉茲。','捕獲奧核雛龍','','','',0), +(12118,'zhTW','前往默亞基港','$R,消息從默亞基港的船上傳來,今早發生了嚴重的事情!$B$B你幫了我們很多忙。你要不要考慮從昂紐沛搭船前往廣大的龍骨荒野呢?$B$B看情況,長者科納尼肯定需要你的協助。','前往龍骨荒野的默亞基港,並與長者科納尼交談。','','','','','','',0), +(12117,'zhTW','前往默亞基港','$R,消息從默亞基港傳來,今早發生了嚴重的事情!$B$B你幫了我們很多忙。你要不要考慮從昂紐沛搭船前往廣大的龍骨荒野呢?$B$B看情況,長者科納尼肯定需要你的協助。','前往龍骨荒野的默亞基港,並與長者科納尼交談。','','','','','','',0), +(12079,'zhTW','重踏地面','你好,小傢伙。我不知道什麼樣的瘋狂理由帶你來到水晶之鉗,但我歡迎你的到來。$b$b這些冰蟲...這些蟄猛巨蟲養成了吃我兄弟的胃口。我想在作戰時期你不會覺得我們同族很友善,但如果你是來幫忙處理蟲子問題的話,我會聽你說的。$b$b如果我們想要拿回洞窟的話,就得先清理這些峽谷中的蟄猛巨蟲餵食者。加入我們的戰鬥,$r!','潛入水晶之鉗北端的洞穴,替『無敵』寇恰殺死8隻冰心蟄猛餵食者。','','到龍骨荒野的水晶之鉗找『無敵』寇恰。','','','','',0), +(12062,'zhTW','\r\n羞辱寇仁·恐酒','寇仁·恐酒就在隔壁房間裡,激怒黑鐵矮人,再發動一次攻擊。擊敗他!$B$B去找寇仁,挑起一場戰鬥。告訴他,他的啤酒連豬都不喝。$b$b你說了之後,就準備好打架吧。上一個侮辱他釀的酒的傢伙...變成了兇暴野豬的晚餐。','與寇仁·恐酒交談。','','','','','','',0), +(12051,'zhTW','偷一些羽毛','這些鷹身人一直在拖慢我們賺錢的速度!把她們殺光。','替鏽鼻崗哨的納孚殺死20名鷹身人,她們就出沒在鏽鼻崗哨的西北邊。','','到龍骨荒野的鏽鼻崗哨找納孚。','冷風鷹身人','','','',0), +(12016,'zhTW','誘餌','我很肯定...我們遠古的水中宿敵,『獵物玩弄者』吐烏格瓦已經回來了。我們必須設下陷阱對付他,就你跟我。$B$B吐烏格瓦有一個弱點,就是他的胃。有一種肉是他絕對無法抗拒的。$B$B『雙巨螯』,蟹族之母,齊里厄雅。就在西南邊的環礁一帶的海域遊蕩。你必須去拜訪她,並且帶回她的肉來。','取得『雙巨螯』之肉,並且把它交給默亞基港的突凱亞。','','到龍骨荒野的默亞基港找突凱亞。','','','','',0), +(12011,'zhTW','大海問題的徵兆','這個螃蟹陷阱顯然被某種巨大的東西所破壞,似乎比附近的鯊魚還大。$B$B或許默亞基港的漁夫突凱亞,可能會知道?','回到默亞基港詢問突凱亞關於破爛的螃蟹陷阱。','','','','','','',0), +(11916,'zhTW','地獄吼的勇士','你面對了眼前一切的挑戰,把它們全都踩在腳下。這全是因為你,$n,部落才能在北裂境站穩腳跟。$B$B但我們的工作才剛開始。我們必須要前往寒冰皇冠,我們必須要粉碎它的高牆!$B$B你的下一個任務是在東方,坦卡雷村。我們的坦卡族盟友現在處一個悲慘的困境中,迫切需要援助。向獸欄管理員德寇特‧狼伴確認你的旅程,然後前往坦卡雷尋找冬風酋長。','前往坦卡雷村拜訪冬風酋長。','','','','','','',0), +(11912,'zhTW','為莓發狂','噢!能看到一個新面孔真叫人鬆了一口氣。我都開始以為我們已經被遺忘了。$b$b我們的補給線好幾天前就被切斷了,而事情看起來 - 嗯,很絕望。老實說,我從一開始就認為這是個自殺任務。$b$b我本來就不適合這樣的戰亂生活,更別提這刺骨之寒!我寧可回到達拉然去研究那些古文獻。$b$b總而言之,我們的食物補給幾乎用盡了。拜託,不管你收集到什麼都請交給我。','隘境之盾的圖書管理員瑟菈要你從凜懼島的霜莓叢收集10個霜莓。','','到北風凍原的隘境之盾找圖書管理員瑟菈。','','','','',0), +(11914,'zhTW','守護秘密','我們能存在此地全是靠著保持隱匿。要是護盾失效,哪怕只有一會兒,瑪里苟斯的手下都會逮到我們。$b$b我在此地的職責之一就是恢復那些戰法師的法力以免他們集中力渙散。但隨著我們失掉了補給線,我被迫勉強湊合行事。$b$b我用得上你的協助,$n。$b$b就在奧核之心附近,秘法巨蛇以大量的魔法能量為食。只要打敗它們,它們會留下一種我用得上的法力精華。','隘境之盾的圖書管理員瑟菈要你殺死奧核之心附近的秘法巨蛇,並且收集5個奧核法力精華。','','到北風凍原的隘境之盾找圖書管理員瑟菈。','','','','',0), +(11910,'zhTW','古樹的秘密','很顯然這個區域的不穩定已經對本地的生物造成影響。$b$b我對冰川古樹以及他們最近的適應性變化有特殊的興趣。我懷疑他們轉變成為『咒縛』古樹的情況,可能會有著我們目前困境的線索。$b$b為了我的研究,我需要這兩者的樣本。行動要快...','隘境之盾的大法師貝瑞那德希望你從凜懼島的古樹身上收集3個冰川裂塊和3個咒縛裂塊。','','到北風凍原的隘境之盾找大法師貝瑞那德。','','','','',0), +(11893,'zhTW','元素的力量','我一直努力想告訴那些傻傻的哥布林,他們的機器是不可靠的。$B$B元素的力量才是深層而不變的。當我完成了學徒訓練,我將可以使用它們完整的力量。而我目前所知道的,就足以幫助我們的朋友菲奇司。$B$B帶著這個風魂圖騰,放置在村子西邊的那些蒸汽狂怒者附近。圖騰會吸取那些被殺死元素的能量。把充能完畢的圖騰還給我,我來處理剩下的事情。','坦卡雷村的杜然‧霜蹄希望你使用風魂圖用收集10個蒸汽狂怒者的能量。','','到北風凍原的坦卡雷村找杜然·霜蹄。','收集能量','','','',0), +(11683,'zhTW','墜毀的亡域','我們只能夠推測西邊那個墜毀的亡域裡面還滿是天譴軍。$B$B當你到塔爾拉瑪斯去的時候,$c,我要你殺死你在亡域和周邊的池子找到的巫妖王僕從。','到塔爾拉瑪斯和膿瘡之池去摧毀任意20個天譴軍,然後,向垂死獸穴南方的賢者高臺回報。','','到北風凍原找賢者高臺。','摧毀塔爾拉瑪斯的天譴軍','','','',0), +(11713,'zhTW','偵察坑道口','嘶軸派出了一隊空中偵察隊前去勘測位於水泉原野南部的奈幽蟲族坑道口,不過他們還沒回來。我沒辦法再繼續呆等著他們的訊息,所以我需要有人前去查看這些坑道口。$B$B我了解當中所牽涉的危險,所以相對地我會好好酬謝你。帶著這個地圖,並記錄下所有你在坑道口所發現的重要訊息。','嘶軸簡易機場的艾伯奈‧嘶鍊要你使用水泉原野地圖去紀錄南部坑道口,西北部坑道口,以及東北部坑道口的位置。','','到北風凍原的嘶軸簡易機場找艾伯奈·嘶鍊。','標記南部蟲孔的位置','標記東北部蟲孔的位置','紀錄西北部坑道口的位置','',0), +(11715,'zhTW','供給工程的燃料','我計畫建造一部機器瓦解天譴軍團用來部署奈幽蟲族的管道,不過由於主抽取鑽井架發生故障,我們得用別的方法來替裝置收集燃料。$B$B在東南方往水泉原野的方向走,在主鑽井架外有許多沸騰的小油池。如果你可以從這些油池中收集到足夠的油,我能製造出天然的燃料供給機器動力。$B$B只要將收集器安置在油井附近,機器就會自行吸取並將油儲存於本體的油槽中。','嘶軸簡易機場的艾伯奈‧嘶鍊要你使用可攜式原油收集器收集8個油桶。','','到北風凍原的嘶軸簡易機場找艾伯奈·嘶鍊。','油桶收集完成','','','',0), +(11716,'zhTW','不可思議的血孢','我們正在見證這裡某種令人驚奇的東西,$r。一整個從未被發現過的生態圈就在離我們不遠的地方生長!我推測血孢植物就是讓這個生態環境如此活躍的主因。$B$B我已經從附近的雄種血孢植物身上收集了一些花粉,但還缺少授粉需要的雌種受體。你可以在我們周遭的偌大植物群附近找到它們。$B$B當心它們的守護者!那些狗頭人可不會輕易的放棄這些血孢植物!','北風凍原,血孢平原的血法師羅瑞斯要你去取回10個血孢心皮。','','到北風凍原的血孢平原找血法師羅瑞斯。','','','','',0), +(11717,'zhTW','花粉來源','很明顯!血孢飛蛾就是該對這些植物體授粉負責的對象。一定是這些飛蛾的內部系統中發生了什麼引發它們進行授粉行為。現在一切都合理了,$n。那就是為什麼狗頭人沒殺了這些飛蛾,反而不遺餘力地保護它們的原因!那些愚蠢的小鼠輩們全都知情!$B$B好吧,我們只需要取得我們份內的飛蛾授粉就好!你意下如何呢?以科學為名義幫我去取一些回來?','北風凍原,血孢平原的血法師羅瑞斯要你去取回5個血孢蛾花粉。','','到北風凍原的血孢平原找血法師羅瑞斯。','','','','',0), +(11718,'zhTW','長毛象外皮機器人','我調整了一台老舊機器人的骨架,讓它能夠產生夠強的地震好塌陷那些隧道,但這些機械經不起北裂境嚴寒的摧折。$B$B我想到的解決方法是使用本地長毛象的厚毛皮來隔絕低溫。它們就在簡易機場南方的平原活動,靠近水泉原野附近。幫我帶足夠數量的毛皮回來,好讓我可以完成機械。接下來我們就可以用它來對付奈幽蟲族了!','嘶軸簡易機場的艾伯奈‧嘶鍊要你帶給他6張厚長毛象皮。','','到北風凍原的嘶軸簡易機場找艾伯奈·嘶鍊。','','','','',0), +(11719,'zhTW','一個適合測試的對象','<羅瑞斯仔細觀察你,就像是在估算什麼一樣。>$B$B我們已經有了這個授粉的血孢花,卻沒人測試過它的效果。哎呀,或許你會有興趣將它擦在你的皮膚上讓我觀察一下嗎?反正,能發生什麼糟糕的事呢?$B$B你別擔心,$n!拿著這個樣本,並將它全部擦在你的臉上。','北風凍原,血孢平原的血法師羅瑞斯要你使用受粉的血孢花並讓她觀察結果。','使用血孢花','到北風凍原的血孢平原找血法師羅瑞斯交談。','','','','',0), +(11720,'zhTW','侵略甘默斯','地獄吼指派力角和我進行這個位於戰歌堡南方前線,令人怯步的猛瑪象人試驗任務。隨同我們前來的是一整排經驗豐富的部落士兵。我們首次對臨近的猛瑪象人獸穴突襲結果十分的失敗,整隊的士兵被巢穴的防衛者消滅。我們是唯一倖存者...$B$B我們不是科學家或是研究員。我們是部落的士兵,就像你一樣。執行任務的士兵不能失敗...$B$B現在就去找力角始祖談談。','與北風凍原,血孢平原的力角始祖談談。','','','','','','',0), +(11721,'zhTW','『折磨者』甘默斯拉','猛瑪象人生性驕傲,與獅子極為相似:一個或兩個雄性領導可以與許多個雌性擁有子嗣。以西邊猛瑪象人獸穴,甘默斯的例子來說,甘默斯拉就是頭目。甘默斯拉操控著猛瑪象人的數量,因此一定得殺掉甘默斯拉以避免猛瑪象人的暴動。$B$B帶著這一袋壓碎的血孢花進入甘默斯。使用袋中的粉末削弱甘默斯拉,然後殺了他!帶著他的頭顱來給我作為證明。','殺了甘默斯拉,將甘默斯拉的頭顱帶回北風凍原的血孢平原交給力角始祖。','','到北風凍原的血孢平原找力角始祖。','','','','',0), +(11722,'zhTW','甘默斯戰利品','我們無法將這場部落的勝利佔為己有,$n。因為冒險不顧生命進行血孢試驗的是你,而最後終結甘默斯拉的也是你。$B$B回到戰歌堡替我們增光,並將甘默斯拉的頭顱交給地獄吼大人。','將甘默斯拉的頭顱交給戰歌堡的卡爾洛斯‧地獄吼。','','到北風凍原的戰歌堡找卡爾洛斯·地獄吼。','','','','',0), +(11723,'zhTW','部署搖震器','看吧,這台機械將會拯救我們免於奈幽蟲族的威脅!$B$B<艾伯奈一邊介紹完成的機器人一邊流露出驕傲的光彩。>$B$B拿著這個遙控器,前往水泉原野的奈幽蟲族坑道口最南邊。使用遙控器啟動搖震器5000型。剩下的它自己會動手。$B$B要是它製造的震動引來了奈幽蟲族頭目的注意也不足為奇。事實上,這會是個消滅奈幽蟲族防衛的大好機會。','嘶軸簡易機場的艾伯奈‧嘶鍊要你使用搖震器5000型去破壞奈幽蟲族的通道並擊敗克萊克希斯克領主。','','到北風凍原的嘶軸簡易機場找艾伯奈·嘶鍊。','部署搖震器5000型','部署地震器5000型','','',0), +(11724,'zhTW','巨大蛾蛋捲?','這顆蛋顯然對某人很重要,附近的屍體可以證明。你注意看這顆蛋的話會發現它已經被貼上送往血孢平原的貨物,由血法師羅瑞斯照料的標籤。就在東邊!$B$B取得蛋並將它帶給等待的血法師。','帶著這顆發光的巨蛋到北風凍原的血孢平原交給血法師羅瑞斯。','','到北風凍原的血孢平原找血法師羅瑞斯。','','','','',0), +(11725,'zhTW','尋找駕駛員尾旋','我應該要親自飛這一趟的。並不是我信不過尾旋,恰恰相反。真見鬼了,他是我合作過最棒的飛行好手。$B$B不,這應該是我的職責來領導這樣重要的任務。$B$B我派我們最快的飛行中隊跟著尾旋去收集奈幽蟲族的情報,他們最近在水泉原野的中部活動。$B$B最後一次回報的時候,他的中隊正停留在南方的水池邊,就在奈幽蟲族坑道口的西邊。$B$B找到尾旋,$n。','在水泉原野上尋找『尾旋』艾基‧榫栓。','','','','','','',0), +(11726,'zhTW','有點辣','自從飛機失事之後,狼群就在四處翻找殘骸,我很怕他們會吃掉任務的膠捲。$B$B我有個計畫來回收那些膠捲,但我需要你的幫助才能成功。$B$B南方與東方的氾濫平原有一種叫做戈洛克的生物。他們使用有毒的香料來保存食物,那會讓所有其他生物感到不適。如果你能從蒸汽噴射者或戈洛克蹣跚者身上收集到足夠的香料包,我就能做個狼餌。','沸水之池的『尾旋』艾基‧榫栓要你收集4個戈洛克香料包。','','到北風凍原的沸水之池找『尾旋』艾基·榫栓。','','','','',0), +(11728,'zhTW','狼便便','不管你要做什麼,千萬不要自己吃了餌食。只要把餌食放在那些沾染油污的狼附近。如果他們真的餓到吃下膠捲,他們只要一聞到餌食就會立刻跑過來。$B$B接來你只需要靜靜的等待時間處理,然後你就可以搜索那些,呃...膠捲的副產品。$B$B我應該要提供你特殊的工作用狼便便夾,但是我把它忘在簡易機場了。我怕你得...呃...用傳統一點的手法處理。','沸水之池的『尾旋』艾基‧榫栓要你收集8個微縮膠捲。','','到北風凍原的沸水之池找『尾旋』艾基·榫栓。','','','','',0), +(11729,'zhTW','超音波式螺絲起子','你剛卸下的部分有個東西在它的機械內部。$B$B這看起蠻複雜的…簡易機場的人應該會有興趣看一看這玩意兒。譬如說卡芙緹‧顛鏈?','將超音波螺絲起子交給嘶軸簡易機場的卡芙緹‧顛鏈。','','到北風凍原的嘶軸簡易機場找卡芙緹·顛鏈。','','','','',0), +(11730,'zhTW','主人與僕從','終極工具就是這把超音波式螺絲起子。它能夠對機械產品為所欲為!$B$B回到池子中拆解掉梅卡佐德的機器人。接著你就可以對它們的殘體使用螺絲起子,我打賭他們將會轉向我們這邊,至少短時間內會是這樣。$B$B我很確定這對機械地精一點用都沒有,所以就放過他們吧。$B$B喔,如果你想要從機器人身上拿點什麼的話,你會想要在使用螺絲起子前先下手!','使用超音波式螺絲起子重新設定15個機器人,接著回去嘶軸簡易機場找卡芙緹‧顛鏈。$B$B記得要先拾取再進行重設。','','到北風凍原的嘶軸簡易機場找卡芙緹·顛鏈。','重新設定機器人','','','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_01' WHERE sql_rev = '1647383101536190010'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_02.sql b/data/sql/updates/db_world/2022_03_18_02.sql new file mode 100644 index 000000000..1d694526e --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_02.sql @@ -0,0 +1,627 @@ +-- DB update 2022_03_18_01 -> 2022_03_18_02 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_01'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_01 2022_03_18_02 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647383682932560234'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647383682932560234'); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(13384,'zhTW','永恆之眼的審判','現你既已能夠進入聚源虹膜,也該是時候將鑰匙發揮真正的作用了。$B$B儘管我也希望生擒瑪里苟斯,但情勢似乎不容許我們這麼做。事情到了這個關頭,其餘的守護巨龍者認為『織法者』必須...被制裁。$B$B<卡薩斯的最後一句話帶著些許的不安。>$B$B$n,前往永恆之眼,迎戰瑪里苟斯並將魔法之心帶回來。','卡薩斯,位於龍骨荒野的龍眠神殿頂端,要你帶著魔法之心回去。$B$B這個任務適用普通難度、10人的永恆之眼副本。','','到龍骨荒野的龍眠神殿找卡薩斯','','','','',0), +(13385,'zhTW','永恆之眼的英雄審判','現你既已能夠進入聚源虹膜,也該是時候將鑰匙發揮真正的作用了。$B$B儘管我也希望生擒瑪里苟斯,但情勢似乎不容許我們這麼做。事情到了這個關頭,其餘的守護巨龍者認為『織法者』必須...被制裁。$B$B<卡薩斯的最後一句話帶著些許的不安。>$B$B$n,前往永恆之眼,迎戰瑪里苟斯並將魔法之心帶回來。','卡薩斯,位於龍骨荒野的龍眠神殿頂端,要你帶著魔法之心回去。$B$B這個任務適用英雄難度、25人的永恆之眼副本。','','到龍骨荒野的龍眠神殿找卡薩斯。','','','','',0), +(9120,'zhTW','科爾蘇加德的墮落','骨匣是納克薩瑪斯主人所留下來全部的遺物。你最好是摧毀骨匣以防巫妖再次形成。幸好,你很少聽信內心的理智。$B$B聖光之願的某人會為此給予你極大的獎勵。誰在乎科爾蘇加德再生至全能力量?','將克爾蘇加德的護符匣帶往東瘟疫之地聖光之願禮拜堂。','','','','','','',0), +(13606,'zhTW','芙蕾雅的符印','如果我猜得沒錯,芙蕾雅的符印恐怕更麻煩。$B$B根據大資料庫的記錄,符印的精華與她的三個古老僕從相連,亮葉、鐵枒和石木。若是這三個長者受到傷害,就會危急符印的完整性。$B$B但放過這些長者,就表示你們在面對芙蕾雅時,她會更加強大。$B$B我能說什麼呢,$n,這是個兩難的抉擇。','奧杜亞大資料庫的勘察員多倫要你取得芙蕾雅的符印。$B$B想知道更多關於如何取得芙蕾雅的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員多倫。','','','','',0), +(13607,'zhTW','星穹渾天儀','聽著,$g小夥子:小姑娘;!艾澤拉斯的命運就取決於此。$B$B我們唯一的機會就是即時趕到星穹渾天儀,找到這個艾爾加隆,並且阻止他把任何訊息傳回去給他的泰坦主人。$B$B找到星穹渾天儀,然後把你找到的所有資料都帶回來。我們或許還有點時間應付艾爾加隆的到來。','奧杜亞大資料庫的勘察員多倫要你找到通往星穹渾天儀的入口。','找到天文臺的入口','到奧杜亞找勘察員多倫。','','','','',0), +(13609,'zhTW','霍迪爾的符印','霍迪爾的符印可不容易取得。你不光是得擊敗霍迪爾本人,你還得在他毀掉存放符印的箱子之前打敗他!$B$B如果需要更多資料可以去大資料庫控制臺查詢。那個東西擁有的資料比全世界所有圖書館加起來都還多!','奧杜亞大資料庫的勘察員多倫要你取得霍迪爾的符印。$B$B想知道更多關於如何取得霍迪爾的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員多倫。','','','','',0), +(13610,'zhTW','索林姆的符印','索林姆已經不再是原本那個人了,$n。他受到了一種黑暗的影響。$B$B有一種邪惡的東西偽裝成他死去的妻子,希芙。$B$B你不能讓那個冒充者的法術控制他。要是這樣的話,他符印的位置可能就永遠沒人知道了!$B$B你得要讓他回復理智,而且動作要快。$B$B跟先前一樣,大資料庫控制臺會告訴你所有殘酷的細節...你不會喜歡的。','奧杜亞大資料庫的勘察員多倫要你取得索林姆的符印。$B$B想知道更多關於如何取得索林姆的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員多倫。','','','','',0), +(13611,'zhTW','彌米倫的符印','彌米倫真是個聰明的傢伙。他的整個住處都連結在某種自毀裝置上。$B$B要是你想拿到他的符印,你們就得很不幸地與自毀裝置比賽誰的動作快。如果有需要的話,可以向大資料庫控制臺查詢更多資料。','奧杜亞大資料庫的勘察員多倫要你取得彌米倫的符印。$B$B想知道更多關於如何取得彌米倫的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員多倫。','','','','',0), +(13821,'zhTW','英雄:芙蕾雅的符印','如果我猜得沒錯,芙蕾雅的符印恐怕更麻煩。$B$B根據大資料庫的記錄,符印的精華與她的三個古老僕從相連,亮葉、鐵枒和石木。若是這三個長者受到傷害,就會危急符印的完整性。$B$B但放過這些長者,就表示你們在面對芙蕾雅時,她會更加強大。$B$B我能說什麼呢,$n,這是個兩難的抉擇。','奧杜亞大資料庫的勘察員洛倫要你取得芙蕾雅的符印。$B$B想知道更多關於如何取得芙蕾雅的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員洛倫。','','','','',0), +(13822,'zhTW','英雄:霍迪爾的符印','霍迪爾的符印可不容易取得。你不光是得擊敗霍迪爾本人,你還得在他毀掉存放符印的箱子之前打敗他!$B$B如果需要更多資料可以去大資料庫控制臺查詢。那個東西擁有的資料比全世界所有圖書館加起來都還多!','奧杜亞大資料庫的勘察員洛倫要你取得霍迪爾的符印。$B$B想知道更多關於如何取得霍迪爾的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員洛倫。','','','','',0), +(13823,'zhTW','英雄:索林姆的符印','索林姆已經不再是原本那個人了,$n。他受到了一種黑暗的影響。$B$B有一種邪惡的東西偽裝成他死去的妻子,希芙。$B$B你不能讓那個冒充者的法術控制他。要是這樣的話,他符印的位置可能就永遠沒人知道了!$B$B你得要讓他回復理智,而且動作要快。$B$B跟先前一樣,大資料庫控制臺會告訴你所有殘酷的細節...你不會喜歡的。','奧杜亞大資料庫的勘察員洛倫要你取得索林姆的符印。$B$B想知道更多關於如何取得索林姆的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員洛倫。','','','','',0), +(13824,'zhTW','英雄:彌米倫的符印','彌米倫真是個聰明的傢伙。他的整個住處都連結在某種自毀裝置上。$B$B要是你想拿到他的符印,你們就得很不幸地與自毀裝置比賽誰的動作快。如果有需要的話,可以向大資料庫控制臺查詢更多資料。','奧杜亞大資料庫的勘察員洛倫要你取得彌米倫的符印。$B$B想知道更多關於如何取得彌米倫的符印,請詢問大資料庫控制臺。','','到奧杜亞找勘察員洛倫。','','','','',0), +(24545,'zhTW','聖潔與墮落','賦予你此次使命與我的想法背道而馳,$r,感覺此事會因你喪命而劃下句點。$b$b不過別在意我的看法,來進行這件重要的事情吧,我會提供你所需的知識以及資源來助你一臂之力。$b$b你必須回到霜之哀傷洞窟找出『聖光報復』,那把被阿薩斯所遺棄的錘子。用薩鋼來重鑄它,再用巫妖王旗下的憎惡體身上的酸性血液刻蝕其表面,就能為我們的行動奠定基礎。','在冰冠城塞中,把『聖光報復』、25個原始薩鋼、『腐臉的酸性血液』以及『膿腸的酸性血液』放置在大領主莫格萊尼的符文熔爐。$B$B『腐臉的酸性血液』與『膿腸的酸性血液』只能在25人模式的冰冠城塞中取得。','','到冰冠城塞找符文熔爐。','','','','',0), +(24547,'zhTW','眾魂宴','暗影之鋒是每個$c最渴望獲得的終極神兵。$b$b你對力量的渴望是否得到滿足了,$r?$b$b<你感受到莫格萊尼銳利的目光。>$b$b我覺得沒有。所以我要給你最後的警告...$b$b你正在進行一個非常險惡的任務。把持你內心的渴望,如果你心存惡念,你的性命,你靈魂的全部,將會被剝奪殆盡。$b$b你手上的武器仍只是一個空殼,尚未發揮出它應有的全部力量。','大領主達瑞安‧莫格萊尼要你進入冰冠城塞,使用暗影之鋒殺死50名巫妖王的爪牙。你只能在10人或25人模式副本中吸取靈魂。','','到冰冠城塞內找大領主達瑞安·莫格萊尼。','眾魂餵養了暗影之鋒','','','',0), +(24548,'zhTW','破碎的王座','巫妖王的王座曾經是囚禁他的牢獄。那是基爾加丹親自用扭曲虛空中找來的冰晶所製成的。其唯一的目的就是要禁錮急欲報復的耐祖奧之靈魂。$b$b當阿薩斯用霜之哀傷敲開了冰晶之牢,他釋放出耐祖奧的靈魂,然後讓他的靈魂與自己的靈魂合而為一。從那次撞擊中產生的裂片,如今散落在整個城塞。$b$b我需要巫妖王最強大的部下身上持有的碎片,來把力量封印在你的鋒刃之中。','大領主莫格萊尼要你去收集50個暗影冰晶裂片。$B$B暗影冰晶裂片只能在25人困難模式中取得。','','找大領主達瑞安·莫格萊尼。','','','','',0), +(24549,'zhTW','影之哀傷...','','大領主莫格萊尼要你把暗影之鋒交給他。','','','','','','',0), +(24743,'zhTW','暗影之鋒','','','','','','','','',0), +(24748,'zhTW','巫妖王的末日','影之哀傷;一把嶄新的武器已經邁入這世界歷史的長河之中,並且在無與倫比的宿命之中重生。$b$b佩帶這把武器讓你肩負了重大的責任,而且進攻的號角即將響起。$b$b帶著這把傳說神兵向敵人邁進吧。為那些在殘酷戰役中喪命的無數英雄報仇雪恨。讓他們受難的靈魂安息。$b$b把自己武裝起來,$c,讓影之哀傷完成它被創造出來的使命吧。','大領主莫格萊尼要你去冰冠城塞殺掉巫妖王。','','找大領主達瑞安·莫格萊尼。','擊敗巫妖王','','','',0), +(24749,'zhTW','穢邪之能','在你的武器發揮它所有潛能之前,必須賦予它象徵性的力量。首先就是穢邪之力。$b$b你得找出一個名為普崔希德教授的人,並且殺掉他,但是這不是你主要的目標。你必須使用他的資源來對付他。$b$b想辦法吸收他的突變泥漿。利用這些穢物來為你的武器灌輸穢邪之力。事成之後,我才會交代你下一個任務。','大領主莫格萊尼要你為暗影之鋒注入穢邪威能,並且殺掉普崔希德教授。$B$B此任務只能夠在25人模式的冰冠城塞中完成。','將邪惡能量灌注到影鋒之中,然後殺死普崔塞德教授。','找大領主達瑞安‧莫格萊尼。','','','','',0), +(24756,'zhTW','血魄之能','你的武器已經準備好要接受血魄的力量了。$b$b你必須迎戰菈娜薩爾女王,並且用肉身承受住她血魄之鏡的攻擊。這種力量會促使暗影之鋒開始啜飲最靠近它的生物之血。這個生物可能會是你,$r。$b$b一但鋒刃甦醒之後,就讓女王的狂亂嗜血佔據你的身體,並餵食它三次以順從其渴求,隨後就用極盡羞辱的方式殺掉女王$b$b當巫妖王等待他的宿命降臨時,希望她的尖叫聲會刺痛他的雙耳。','大領主莫格萊尼要你為暗影之鋒注入血魄的力量,並且擊敗菈娜薩爾女王。$B$B此任務只能夠在25人模式的冰冠城塞中完成。','使用鮮血灌注影鋒後擊敗蘭娜瑟爾。','找大領主達瑞安‧莫格萊尼。','','','','',0), +(24757,'zhTW','冰霜之能','暗影之鋒已經準備好要接受最後一次灌能了。$b$b敵人的坐騎,辛德拉苟莎必須倒下。但是在她倒下之前,你必須承受住4次冰霜吐息攻擊,而且不能倒下。$b$b一但失去那條龍,就沒有東西能夠插手你跟巫妖王之間的對決了。','大領主莫格萊尼命令你去殺掉辛德拉苟莎,並且在佩帶暗影之鋒的期間,承受4次冰霜吐息攻擊。$B$B此任務只能夠在25人模式的冰冠城塞中完成。','為影鋒注入冰霜之力後殺死辛達苟薩。','找大領主達瑞安‧莫格萊尼。','','','','',0), +(24815,'zhTW','擇你所向','','','','','','','','',0), +(24819,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(24820,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(24821,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(24822,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(24823,'zhTW','毀滅之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24826,'zhTW','復仇之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24828,'zhTW','毀滅之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24829,'zhTW','毀滅之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24832,'zhTW','復仇之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24833,'zhTW','復仇之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24839,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(24844,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(24912,'zhTW','強化儀式','','','','','','','','',0), +(25246,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(25247,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(25248,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(25249,'zhTW','改變心意','','','','找『懺悔者』歐姆斯。','','','','',0), +(11252,'zhTW','進入俄特加德!','聽著,小鬼。我已經幹掉了我份內數量的敵人 - 甚至連你的份都解決了。你要知道...$b$b那些維酷人在戰鬥中毫不畏懼。他們甚至渴望能犧牲戰死。靠著他們的數量和這樣的兇殘,我們死定了 - 無庸置疑。$b$b他們只在意一件事,就是因格瓦的名號。我不瞭解他們為什麼這麼努力想要獲得因格瓦的讚揚,但如果能扳倒他,肯定會對他們的士氣造成嚴重的打擊。$b$b那麼,我們或許還有一絲機會...','防衛者摩丹要你去殺死住在俄特加德深處的『盜掠者』因格瓦。$b$b然後把他的頭交給海軍中將凱勒。','','到凜風峽灣的瓦爾加德找海軍中將凱勒','','','','',0), +(11262,'zhTW','因格瓦非死不可!','我們整個隊伍就只剩我還活著。$b$b這些維酷人是無情的戰士。他們的人數佔有優勢,戰略兇狠無比,我們唯一的希望就是打倒他們的領袖,然後祈禱這會造成他們的指揮系統大亂。$b$b對方的領袖叫做因格瓦,把他的頭顱給我帶來!','黑暗遊俠瑪拉請求你殺死俄特加德要塞的『盜掠者』因格瓦。','','到俄特加德要塞裡面找黑暗遊俠瑪拉。','','','','',0), +(11272,'zhTW','有待解決的宿怨','這個精靈王子還以為自己可以任意進出我的國土,侮辱皇后,屠殺百姓,拍拍屁股然後走人?他以為我們會在俄特加德的部落增員發動攻擊時袖手旁觀?$B$B門都沒有。$B$B你得進入俄特加德然後殺掉他。我要阿薩斯知道我們已經來了,而且我們不是鬧著玩的。$B$B事情完成後向俄特加德要塞的黑暗遊俠瑪拉回報,她會了結剩餘零星的事務。','高階執行官安賽姆要你進入俄特加德要塞並殺掉凱雷希斯親王。','','回俄特加德要塞找黑暗遊俠瑪拉說話。','','','','',0), +(11905,'zhTW','拖延不可避免的毀滅','艾澤拉斯的地脈被修改導向了奧核之心。$b$b秘法能量的匯流已經開始在不同空間之間扯開一條裂隙。$b$b我阻止不了這一切,但我已經找到了一個方法可以減緩它。$b$b帶著這個進入奧核之心,然後在形成中的裂隙旁啟動它。','奧核之心內戰爭法師凱特林的影像要你在形成中的裂隙旁啟動間次元重製器。','','到奧核之心找戰爭凱特林的影像。','拖遲間次元裂隙','','','',0), +(11911,'zhTW','激長','我在這裡短短時間學到的東西,遠遠超過我幾十年的研究。$b$b這些古樹暴露在難以形容的巨大秘法能量下。它明顯地將他們轉變為...別的東西。$b$b我十分確信他們的蛻變有最後一個階段。幫我找來一些關於他們最後階段的證據。','奧核之心內戰爭法師凱特林的影像要你從結晶保衛者身上收集5個秘法裂塊。','','到奧核之心找戰爭凱特林的影像。','','','','',0), +(11973,'zhTW','戰俘','瑪里苟斯讓凱瑞史卓莎成為他的伴侶!$b$b我們不能讓這種事發生。$B$B$r,你必須盡全力使她免於遭受此種命運。','戰爭法師凱特林要你釋放凱瑞史卓莎。','','到奧核之心找戰爭凱特林。','讓凱瑞史卓莎安息','','','',0), +(12037,'zhTW','搜救行動','獸人…他們就是不聽 - 嗝。你知道我在說什麼嗎,$r?$B$B庫賽爾已經跟我們在一起好幾年了。還以為她已經知道我們怎麼做事的。吸引蠢蛋進行危險的工作,然後等一切安全之後再收穫成果。有這麼難明白嗎?$b$b她就是不懂...她完全沒耐心,擅自離開,把事情全攬進自己的手上。說不定現在已經死了,但我覺得不跟著她事情很不妙,我又不敢自己一個人做 - 嗝。$b$b你怎麼說,老兄?','花崗岩之泉的麥客要你進入德拉克薩隆,找出庫賽爾發生了什麼事。','','','','','','',0), +(12238,'zhTW','淨化德拉克薩隆','德拉克薩隆很快就會從邪惡的不死生物中淨化,回復到原本高貴的樣子。為了報答你的幫助,要塞裡面最珍貴的寶藏就是你的了,老兄!$b$b爬到塔頂之後,你必須最後一次召喚我過去,而我將完成儀式。$b$b哎呀,召喚我照例需要一些材料。從要塞的倖存者身上收集一些魔精吧。','德拉庫魯需要你在德拉克薩隆的火盆上使用德拉庫魯的藥劑。你需要五個耐久魔精才能使用德拉庫魯的藥劑。','','','','','','',0), +(13094,'zhTW','他們不知羞恥嗎?','大法師貝瑞把關於奧輿全覽圖的研究借給了我。那是一份瑪里苟斯亟欲拼湊起來的地圖。$B$B我犯了一個錯誤,那就是與來此補充物資的部落冒險者小隊談起這件事...現在那本研究不見了!$b$b一定是被他們給偷走了。拜託,幫我把書找回來。','戰爭法師凱特林的影像要你取回貝瑞那德的研究。','','到奧核之心找戰爭凱特林的影像。','','','','',0), +(13095,'zhTW','他們不知羞恥嗎?','大法師貝瑞把關於奧輿全覽圖的研究借給了我。那是一份瑪里苟斯亟欲拼湊起來的地圖。$B$B我犯了一個錯誤,那就是與來此補充物資的聯盟冒險者小隊談起這件事...現在那本研究不見了!$b$b一定是被他們給偷走了。拜託,幫我把書找回來。','戰爭法師凱特林的影像要你取回貝瑞那德的研究。','','到奧核之心找戰爭凱特林的影像。','','','','',0), +(13096,'zhTW','蓋爾達拉必須付出代價','你有看到嗎,老兄?$b$b那一定是我一生中看過最糟糕的事情了。偉大的阿卡利 - 就在我眼前被殺害。太可怕了...$b$b我發過誓不能介入這裡的事情。我的工作只是觀察而已。但是這實在忍無可忍!蓋爾達拉一定要付出代價!$b$b進入剛德拉克,把他找出來。替阿卡利之死復仇,再回來找我,老兄。','杜布拉金的托爾瑪要你到剛德拉克殺死蓋爾達拉。','','到祖爾德拉克的杜布拉金找托爾瑪。','殺死蓋爾達拉','','','',0), +(13098,'zhTW','為了後代子孫','剛德拉克已經完了,老兄。$b$b歷史就在咱們眼前重演啦。當食人妖背叛了自己的神明時,就注定要面臨末日了。這只是時間的問題而已。$b$b如果我們能夠清楚的紀錄這些事件,也許就能避免後世子孫重蹈覆轍。$b$b如果你夠勇敢,就進入剛德拉克,找找有什麼線索可以告訴我們德拉克瑞帝國怎麼會走到今天這一步。','杜布拉金的撰史者巴琪妮要你進入剛德拉克收集6個德拉克瑞歷史石板。','','到祖爾德拉克的杜布拉金找撰史者巴琪妮。','','','','',0), +(13108,'zhTW','不擇手段!','不論以什麼方法,洛肯都該死。$b$b即使是要和他一起被五馬分屍,他都要為他卑鄙的行為付出代價。$b$b你該去找他,擊敗他的榮耀將歸於你。$b$b將他吐露過無數謊言的舌頭帶來見我,你將得到我的賜福與感激。','丹尼弗蘭的裘庫姆王要求你,進入雷光大廳並擊敗洛肯。帶回洛肯之舌給裘庫姆。','','到風暴群山的丹尼弗蘭找裘庫姆王。','','','','',0), +(13109,'zhTW','一山容不得二虎','我該坦率地告訴你,小$r。我的子民變了,已不再像與索林姆結盟時一般。$b$b作為他們的王,我所求無多,不過是他們的心再次歸順,還有與風暴之王的友誼能歷久彌新。你擊敗斐雍這件事,為我們踏出了第一步。我需要你為我們踏出另一步...$b$b在雷光大廳,有個甚至比斐雍更加強大的敵人,正虎視眈眈地威脅著我們的存在。渥克瀚和我們是勢不兩立的,不是他死,就是我亡,沒有第三種結果。','丹尼弗蘭的裘庫姆王要求你,前往雷光大廳,並擊敗渥克瀚。','','到風暴群山的丹尼弗蘭找裘庫姆王。','擊敗渥克瀚','','','',0), +(13111,'zhTW','獨一無二','聽著,老兄。$b$b就第一眼而言,這看來不過就是另一個古老的故事-食人妖藉由毀滅他們原應敬仰的種族,獲得了禁忌的力量。$b$b如果這個傳說是真的,應該還有某些和德拉克瑞有關的有趣玩意殘留下來。如果我聽到的是真的,剛德拉克內應該有尊特別的魔像-一尊獨一無二的魔像!$b$b你想要一趟刺激的冒險嗎,老兄?幫我從剛德拉克帶回那魔像的一部分,好讓我研究研究。','杜布拉金的撰史者巴琪妮要求你,進入剛德拉克,並撿回一塊德拉克瑞巨像的碎片。','','到祖爾德拉克的杜布拉金找撰史者巴琪妮。','','','','',0), +(13124,'zhTW','負隅頑抗','瑪里苟斯與他的手下日益壯大。最近我們有批突襲隊遭到俘虜並被關在奧核之眼中。$b$b我們一定得設法救援他們!貝加瑞斯塔茲與他的夥伴對我們來說非常重要。','瑞洛拉茲要你去奧核之眼並解救貝加瑞斯塔茲與他的同伴。','','','','','','',0), +(13126,'zhTW','共同戰線','從這裡開始,要靠我們合作無間才能夠前進。$b$b在我們的上方,瓦羅斯躲進了一道無法穿透的護盾之中。要找到他的話,你就一定得消滅構築護盾的離心傀儡。$b$b我們每個人都能夠提供我們所屬軍團的飛龍給你們騎乘。你必須靠著這些飛龍的幫助才能夠對付瓦羅斯。','貝加瑞斯塔茲要你摧毀10具離心傀儡,除去瓦羅斯的護盾。然後你必須擊敗瓦羅斯‧雲行者。','','到奧核之眼中找貝加瑞斯塔茲的影像。','摧毀離心傀儡(10)$B 任務目標: 擊敗瓦羅斯·雲行者','擊敗瓦羅斯·雲行者','','',0), +(13127,'zhTW','法師領主厄隆','我們與我們的目標之間,只剩下一個阻礙了。他的名字叫厄隆。$b$b他在上方守衛著第三環。小心他的強力咒法,朋友。$b$b擊敗他。讓他為背叛付出代價!','貝加瑞斯塔茲要你擊敗奧核之眼中的法師領主厄隆。','','到奧核之眼中找貝加瑞斯塔茲的影像。','擊敗法師領主厄隆','','','',0), +(13128,'zhTW','飛翼與祈禱','面對伊瑞茍斯的時候到了。$b$b他能夠直接啜飲瑪里苟斯的魔力泉源 - 從他負責保護的地方抽取能量。$b$b然而,擊敗了法師領主,也解放了飛龍的完整力量。只要巧妙的運用,一定能夠擊敗伊瑞苟斯。','貝加瑞斯塔茲要你殺死奧核之眼的伊瑞苟斯。','','到奧核之眼中找貝加瑞斯塔茲的影像。','擊敗地脈守護者伊瑞茍斯','','','',0), +(13129,'zhTW','鬥智遊戲','<庫賽爾從短衫上割下了長長一條布料交給你。>$b$b來,$r,拿著。把它浸在『召喚者』諾沃司所留下的殘骸中。$b$b我們得找出到底是什麼讓那些天譴軍如此激動。','庫賽爾要你對『召喚者』諾沃司的屍體使用庫賽爾的短衫碎片,然後將腐液玷污的布料帶回去德拉克薩隆要塞給她。','','到德拉克薩隆要塞找庫賽爾。','','','','',0), +(13131,'zhTW','我箱子裡的垃圾','看看這個!我的箱子從未如此空虛。$b$b我的同伴妄想獨吞所有的戰利品,現在瞧他們怎麼了!一堆白骨,就是這樣的下場!$b$b聽著,再往前一點有一大票財寶,而且我敢打包票,不是受詛咒的那種。$b$b幫我弄回來,我會分你一些油水的,小子。','俄特加德之巔的布瑞格要求你,找到5個黯淡的銀錠、3顆閃光的小珠、2只黃金高腳杯以及1尊碧玉雕像。','','到俄特加德之巔找布瑞格·細柄。','','','','',0), +(13132,'zhTW','我將復仇!','我是因為幸運才逃過一劫,沒淪落至我同伴那樣的下場。$B$B在慌忙逃跑的過程中,我被擊倒在地,從那時候開始就頭昏昏的,抬頭剛好看到最前頭的那個人轉身。$b$b那個大傢伙身邊圍著一大票衛兵,口中都在讚頌著依米倫...殺掉他的話,我的同伴就能重獲自由也說不一定?','俄特加德之巔的布瑞格要求你,殺掉依米倫王。','','到俄特加德之巔找布瑞格·細柄。','殺死依米倫王','','','',0), +(13149,'zhTW','驅散幻影','恆龍軍團似乎藉由欺騙阿薩斯王子來擾亂歷史。$b$b若能讓他相信,所有的穀物都沒被瘟疫污染,那麼他就不會做出肅清斯坦索姆的關鍵決定。$b$b對任何可疑的穀物箱使用秘法干擾器。','克羅米要求你,在斯坦索姆的往日,對可疑的箱子使用秘法干擾器,然後在其入口附近和她交談。','','到斯坦索姆的抉擇找克羅米。','驅散染疫的穀箱','','','',0), +(13151,'zhTW','護送皇室','阿薩斯馬上就要面臨是否要孤注一擲的難題,並且做出重大的決定。$b$b我必須徵召你,在王子的斯坦索姆抉擇行動中隨侍在側。$b$b你必須確保阿薩斯安全穿過斯坦索姆,並且擊敗瑪爾加尼斯!','克羅米要求你,在斯坦索姆的抉擇中,隨侍於阿薩斯身側。瑪爾加尼斯被擊敗以後,回頭找她交談。','','到斯坦索姆的抉擇找克羅米。','擊敗瑪爾加尼斯','','','',0), +(13158,'zhTW','謹慎行事','聽我說,$r。$B$B紫羅蘭監獄最近發生了一起事變,這引起了我的注意。似乎藍龍軍團正準備對達拉然發動一次全面的進攻!$B$B我要你立即轉至監獄,去找典獄官奧圖拉斯。他會告訴你整個事件的細節。$B$B還有,你要盡可能謹慎地處理這件事。不到萬不得已的情況下,我並不想讓這件事引起達拉然居民的恐慌。我說得夠清楚了吧?$B$B好了,現在就出發吧!','羅寧希望你轉至達拉然的紫羅蘭監獄,與典獄官奧圖拉斯談一談。','','','','','','',0), +(13167,'zhTW','狙殺逆王','逆王阿努巴拉克,以阿茲歐-奈幽,這個一度光榮輝煌的地底王國作為根據地。$b$b自他叛變以來,他已使我們的家鄉墮落成卑鄙污穢之地。他統率著一支不死奈幽蟲族的軍隊,如同其領導者,也都出賣了靈魂來服侍巫妖王。$b$b為逆王的統治畫下一個句點吧,$c。這對我們雙方的子民都好。$b$b若你能夠達成過往眾人所辦不到的事,就將阿努巴拉克的軀殼帶來見我。','那金之淵裡的『排除者』齊力克斯交付給你一個任務,要你擊敗阿茲歐-奈幽的阿努巴拉克。然後將阿努巴拉克的裂殼帶回給齊力克斯。','','到龍骨荒野的那金之淵找『排除者』齊力克斯。','','','','',0), +(13182,'zhTW','別忘了那些蛋!','遍佈於阿茲歐-奈幽,天譴奈幽蟲族總是小心翼翼地孵育將孵化的蛋,這是牠們數量迅速滋長的原因。$b$b若能清除掉不死生物玷污過,用以鳩佔鵲巢的敗壞蟲蛋,對牠們的洞穴而言是件好事。$b$b當你探索那一度是阿茲歐-奈幽的廣袤地帶,一定要清理我們古老家園中,任何你看到的天譴蛋。','那金之淵裡的『排除者』齊力克斯,要你進入阿茲歐-奈幽並摧毀6個奈幽天譴蛋。','','到龍骨荒野的那金之淵找『排除者』齊力克斯。','摧毀奈幽天譴蛋','','','',0), +(13187,'zhTW','無面者','在對抗不死生物的戰爭中,隨著家園一寸一寸地淪陷,我的子民也愈發絕望。$b$b那些被稱為無面者的生物,我們只知道他們曾不慎觸怒了古老神衹的意旨。$b$b總而言之,我們無法同時與這些強大的敵人兩面作戰。$b$b也許借助你的幫助,我們終於可以打敗無面者。','先知伊須特要你殺死信使沃菈齊及其身邊的三個忘卻者。','','回安卡罕特找先知伊須特。','摧毀忘卻者','擊敗信使沃菈齊','','',0), +(13190,'zhTW','好時光的一切','安卡罕特,我們的故鄉...$b$b我夢想著,終有一天,我們會逐退佔據古老家園的死亡與黑暗。為了使夢想成真,我有個削弱敵人士氣的計畫。$b$b他們珍貴的看守者必須被燒死!$b$b帶回他們的屍體,放在城市深處的火盆上。軀體焚燒過的氣味會存留於空氣中,提醒我們的敵人,他們的弱點。$b$b要當心,$c!他們的不死軀體非常脆弱,而且會迅速地毀壞。','那金之淵裡的『排除者』齊力克斯要求你,帶回一具安卡哈看守者的屍體,安放在安卡罕特的安卡罕特火盆上。$b$b此任務只能於英雄模式下完成。','','到龍骨荒野的那金之淵找『排除者』齊力克斯。','焚燒安卡哈看守者的屍體','','','',0), +(13204,'zhTW','惡臭磨菇','一朵畸形的磨菇-似乎是剛從蠻穴野獸惡臭又滿布分泌物的屍塊上掉下來的磨菇。檢視它時,你被中人欲嘔的惡臭薰得差點昏過去。$b$b你想知道,是否這是奈幽蟲族的盤中美味。將這黏涕涕的噁心玩意放進你的背包,你決定要找出真相...','你必須在安卡罕特的蠻穴野獸身上,採集6朵怪誕菌菇,並送去給那金之淵裡的『排除者』齊力克斯。','','到龍骨荒野的那金之淵找『排除者』齊力克斯。','','','','',0), +(13205,'zhTW','撤除武裝','從我身邊拿走它,$g小夥子:小女孩;,這些維酷武器真是齷齪!$b$b我親自觸碰了它們的邊緣,其中有某種古怪。令人迷惑地勻稱、邪惡的鋒利刃口,全然是種致命武器。$b$b潛進他們的堡壘,若沒有意外的話,弄來些他們的武器。$b$b底限是:越少維酷人在附近揮舞斧頭越好。','防衛者摩丹要你進入俄特加德要塞,並偷走5件維酷武器。','','到凜風峽灣的龍顱村找防衛者摩丹。','','','','',0), +(13206,'zhTW','撤除武裝','我們應該好好研究這些野蠻人武器中的奧妙!$b$b如果你曾目睹,他們是如何輕易地把我的同袍大卸八塊,你就會了解我的急迫感。$b$b搜索那地方,帶回他們的武器,能拿多少就拿多少。','黑暗遊俠瑪拉要求你,從俄特加德要塞偷走5件維酷武器,然後送回她手中,她會在俄特加德要塞中等候。','','到俄特加德要塞裡面找黑暗遊俠瑪拉。','','','','',0), +(13207,'zhTW','石之大廳','嗯哼,在這裡看到其他冒險者是蠻令我驚訝的。$b$b如果我的研究正確,這裡一定有值得探尋的巨大發現!$b$b如果你可以讓我無後顧之憂,我倒是很歡迎有你與我作伴。','布萊恩‧銅鬚要求你和他一道尋找石之大廳裡的秘密。','','到石之大廳找布萊恩·銅鬚。','布萊恩的探險完成','','','',0), +(13241,'zhTW','泰彌亞在你的未來預見了依米亞狂戰士!','依米倫王的戰士就擋在汝與指日可待的勝利之間。$B$B汝將前往凜風峽灣深處,名為俄特加德之巔的要塞。余無法更加強調,汝輩能了結依米亞狂戰士,是如何地重要。$B$B若未能達成,將致汝輩之毀滅。$n!','達拉然的大法師泰彌亞要求你,殺掉7個依米亞狂戰士。','','到水晶之歌森林找大法師泰彌亞。','','','','',0), +(13243,'zhTW','泰彌亞在你的未來預見了恆龍密探!','由於恆龍軍團之危害,時間線岌岌可危。若無汝的干預,時間將四分五裂!$B$B汝必須穿越時空,前往時光之穴內的斯坦索姆的抉擇。$B$B洞察所有可能往事之意圖,令余頭痛欲裂,但余可預見,殺死這些恆龍密探為汝之第一要務。$B$B唯有除去所有恆龍,真實歷史方能存留,現在與未來亦不為之擾動。','達拉然的大法師泰彌亞預見你必須殺死4頭恆龍密探。','','到水晶之歌森林找大法師泰彌亞。','','','','',0), +(13245,'zhTW','死亡證明:劫掠者因格瓦爾','我要你去召集一支隊伍,轉至烏特加德城堡。你要去找到並殺死劫掠者因格瓦爾,否則他就會帶領維庫人的部隊去攻擊附近的聯盟和部落城鎮。$B$B解決他之後,把他的斧子拿來作為憑證。我並不是不相信你,只是小心謹慎一點總沒錯。','達拉然的大法師蘭達洛克要你將掠奪者的戰斧交給他。$B$B該任務必須在英雄難度下完成。','','到水晶之歌森林的凋落樹林找大法師朗達拉克。','','','','',0), +(13248,'zhTW','死亡證明:伊米隆國王','烏特加德之巔的伊米隆國王是巫妖王的支持者。單憑這一點,我們就該殺了這個維庫人。$B$B如果讓他吹響號角,將伊米亞、尤爾丁等部落的領袖都召集起來,維庫人就會成為天災軍團中最強的一支部隊!$B$B現在就看你的了,$N,你一定要阻止他。將他脖子上的墜飾帶回來給我,以此證明伊米隆的威脅已經徹底解除了。','達拉然的大法師蘭達洛克要你將已故女王的飾物交給他。$B$B該任務必須在英雄難度下完成。','','到水晶之歌森林的凋落樹林找大法師朗達拉克。','','','','',0), +(13249,'zhTW','死亡證明:預言者薩隆杰','德拉克薩隆要塞曾經是德拉克瑞王國的驕傲。如今卻淪為巫妖王的墊腳石,來毀滅祖爾德拉克,以便偷取食人妖眾神之力的力量。$B$B但假使我們能夠擊敗他們的領袖,預言者薩隆杰,或許便能遏止源源不竭的天譴食人妖妖援軍。至少,這能讓祖爾德拉克的銀白十字軍少點負擔。$B$B擊敗預言者後將他的附魔提基像帶回來給我。','達拉然的大法師朗達拉克要求你,帶回一個預言者的附魔提基像。$B$B這個任務只能在英雄難度中完成。','','到水晶之歌森林的凋落樹林找大法師朗達拉克。','','','','',0), +(13254,'zhTW','死亡證明:阿努巴拉克','天災蛛魔對我們的部隊是一個巨大的威脅。$B$B雖然我們飄浮在天空中時是很安全的,但是如果我們將落到地面上,就要擔心那些亡靈蛛怪會從艾卓-尼魯布鑽出來攻擊我們。$B$B如果能讓它們陷入混亂,對大家都有好處。去殺死它們的前任國王,地穴領主阿努巴拉克。他也是巫妖王的得力助手之一。$B$B把阿努巴拉克的王冠帶回來……它已經不再戴著那東西了。','達拉然的大法師蘭達洛克要你將阿努巴拉克的王冠交給他。$B$B該任務必須在英雄難度下完成。','','到水晶之歌森林的凋落樹林找大法師朗達拉克。','','','','',0), +(24461,'zhTW','重鑄劍刃','我們不能坐視奎爾德拉如今殘破且淪喪的模樣。帶著殘缺的劍身以及破損的劍柄,前往冰冠城塞的薩倫之淵。$B$B巫妖王在那裡使喚奴隸採集、加工以及轉換薩鋼礦。這些灌能的薩鋼錠就是我們重鑄奎爾德拉所需的材料。$B$B你必須收集灌能的薩鋼錠並且奪取鍛造大師之錘,然後將這些東西帶到鍛造大師的鐵砧去重鑄劍刃。','取得5個灌能薩鋼錠與鍛造大師之錘,並且利用它們製作出重鑄的奎爾德拉。','','到冰封大廳找卡拉迪斯·亮矛。','','','','',0), +(24480,'zhTW','倒影大廳','你已經重鑄和淬鍊完劍刃了,但它依然紋風不動的插在劍鞘之中,完全未展示出它應有的力量。你說這把劍在引導著你,似乎它擁有自我的意志?$B$B你敢把它帶去它所欲之處嗎?這把劍不該如此沉寂與執著,但我擔心若你不將它帶往所欲之處,我們永遠無法查出原因。帶著它前往冰冠城塞裡的倒影大廳,但是請保持警覺!我會在冰封大廳等著你。','把淬鍛的奎爾德拉帶去倒影大廳裡的劍息之地。','','到冰封大廳找卡拉迪斯·亮矛。','把奎爾德拉帶去倒影大廳','','','',0), +(24500,'zhTW','巫妖王之怒','真是令人難以置信,在阿薩斯的王座上,我們或許有可能擊敗他。如果巫妖王真的被擊敗了,那麼誰又該成為下一個巫妖王呢?$B$B雖然局勢仍未明朗,不過你必須找到珍娜,即時逃離巫妖王的魔爪。','找出珍娜‧普勞德摩爾女士並且逃離倒影大廳。','','到眾魂熔爐的後方找珍娜·普勞德摩爾女士交談。','逃離巫妖王','逃離巫妖王','','',0), +(24506,'zhTW','進入冰凍城塞','$C!快來這邊,我有話要跟你說!$B$B我的女王,希瓦娜斯‧風行者女士,她在冰冠城塞的戰鬥中發現了一個洞穴,可以進入一個稱之為眾魂熔爐的地方。她在離開之前吩咐過我,要找出勇猛的戰士來支援她。我覺得你就是適當的人選。$B$B從熔爐的入口進去找她吧,$c。','從冰冠城塞的側牆進入薩倫之淵,然後去找希瓦娜斯‧風行者女士。','','','','','','',0), +(24507,'zhTW','入城之徑','他們強迫被俘虜的我方士兵在礦區工作。$B$B殺掉俘虜他們的人,釋放那些士兵,$c...當我們挑戰天譴領主提朗紐斯的時候,我們會需要他們的援助。','釋放15名部落奴隸並且殺掉鍛造大師加弗羅斯。','','到加弗羅斯的平臺附近找葛剛·鐵顱交談。','釋放部落奴隸','','','',0), +(24511,'zhTW','受苦靈魂的回聲','用這麼少的人手潛入城中相當冒險,但是如此罕見的機會絕對不能錯過。$B$B往遠方的那頭清出一條路,鞏固好薩倫之淵的入口。我們必須佔領那個地方,才能讓我們的人員進入城內。','殺掉布朗吉姆以及靈魂吞噬者以控制薩倫之淵的入口。','','到眾魂熔爐的後方找希瓦娜斯·風行者女士交談。','','','','',0), +(24559,'zhTW','重鑄劍刃','我們不能坐視奎爾德拉如今殘破且淪喪的模樣。帶著殘缺的劍身以及破損的劍柄,前往冰冠城塞的薩倫之淵。$B$B巫妖王在那裡使喚奴隸採集、加工以及轉換薩鋼礦。這些灌能的薩鋼錠就是我們重鑄奎爾德拉所需的材料。$B$B你必須收集灌能的薩鋼錠並且奪取鍛造大師之錘,然後將這些東西帶到鍛造大師的鐵砧去重鑄劍刃。','取得5個灌能薩鋼錠與鍛造大師之錘,把它們跟奎爾德拉的殘塊組合起來,並且製作出重鑄的奎爾德拉。','','到冰封大廳找米拉連恩·日炎。','','','','',0), +(24561,'zhTW','倒影大廳','你已經重鑄和淬鍊完劍刃了,但它依然紋風不動的插在劍鞘之中,跟一般的劍沒什麼兩樣。你說這把劍在引導著你,似乎它擁有自我的意志?$B$B你敢把它帶去它所欲之處嗎?這把劍不該如此沉寂與執著,但我擔心若你不將它帶往所欲之處,我們永遠無法查出原因。帶著它前往冰冠城塞裡的倒影大廳,但是請保持警覺。我會在冰封大廳等著你。','把奎爾德拉帶去倒影大廳裡的劍息之地。','','到冰封大廳找米拉連恩·日炎。','把奎爾德拉帶去倒影大廳','','','',0), +(24682,'zhTW','薩倫之淵','快點,通過傳送門!我會去另一頭找你。','在薩倫之淵的入口內側與希瓦娜斯‧風行者女士會合。','','','','','','',0), +(24712,'zhTW','逃離深淵','我們必須經由主要的道路穿過洞窟,前往提朗紐斯所在的高地。$B$B在那裡,他不得不與我們決一死戰,好阻止我們進入城塞本體。$B$B出發吧,$c。當你迎戰提朗紐斯的時候,我與我的同伴將會與你們並肩作戰。','殺掉天譴領主提朗紐斯。','','到薩倫之淵後方,找希瓦娜斯·風行者女士交談。','','','','',0), +(24713,'zhTW','霜之哀傷','繼續前進,劍就在不遠處了。$B$B我需要一點時間,派遣我的黑暗遊俠返回飛船上。在糧食不足的情況下,我可不想毫無預警地被逮住-我們需要他們能提供的任何協助。$B$B去吧,我會在倒影大廳跟你會合。','在倒影大廳裡面與希瓦娜斯‧風行者女士會合。','','','','','','',0), +(24802,'zhTW','巫妖王之怒','真是令人難以置信,在阿薩斯的王座上,我們或許有可能擊敗他。如果巫妖王真的被擊敗了,那麼誰又該成為下一個巫妖王呢?$B$B雖然局勢仍未明朗,不過你必須找到希瓦娜斯,即時逃離巫妖王的魔爪。','找到希瓦娜斯‧風行者女士,逃離倒影大廳。','','到倒影大廳後方,找希瓦娜斯·風行者女士交談。','找到希瓦娜斯·風行者','逃離巫妖王','','',0), +(10704,'zhTW','闖入亞克崔茲的方法','你發現的阿塔莫水晶中鑲有一則訊息。奈薩斯王子哈拉瑪德已經提供我們關於對抗風暴要塞非常重要的資訊。$B$B他告訴我們他們將一把鑰匙分為兩片裂片,兩者合一時可開啟要塞的亞克崔茲衛星。$B$B一半由波塔尼卡的一位古老生物叫扭曲分裂者所持有。另一半由麥克納爾裡的操縱者帕薩里歐擁有。$B$B將兩個裂片帶來給我,我會將他們合成亞克崔茲鑰匙。','阿達歐派你去取得亞克崔茲鑰匙的頂部和底部裂片。將它們帶回去給他,他會將他們合成亞克崔茲鑰匙後交給你。','','到撒塔斯城的陰鬱城找阿達歐。','','','','',0), +(9767,'zhTW','了解你的敵人','打敗敵人不僅僅需要你比敵人擁有更強的力量或更多的數量。勝利是由你對敵人弱點的瞭解,對敵人計畫的解析,對敵人行為模式的認知而來的。$B$B我們都非常瞭解納迦,但對於他們運用魔法的方式卻仍然十分陌生。$B$B我希望能瞭解一下盤牙水庫中那些納迦所使用的水占術,給我帶回一本他們的法術書吧。','從盤牙水庫內的納迦身上獲得一本Coilfang Spellbook,將其帶給贊加沼澤內塞納裡奧庇護所的Ashyen。','','到贊格沼澤找艾斯炎。','','','','',0), +(10705,'zhTW','先知烏達羅','我希望你在我告訴你那些從我的爪牙手上取來的好幾片卡拉伯爾勳章都只是複製品時不要太震驚。$B$B<阿卡瑪打開他的手掌給你看一個完全相同的勳章。>$B$B我的死亡誓言者跟我盡可能的守住這個秘密不讓伊利丹知道。不過我們還是會懷念那最後的一片。$B$B烏達羅到我的夢裡宣稱他已找到了那最後的一片勳章。糟糕的是他正被凱爾薩斯監禁在風暴要塞的亞克崔茲裡。去找到他並看看他到底知道些什麼。','到風暴要塞的亞克崔茲找到先知烏達羅。','','','','','','',0), +(11007,'zhTW','凱爾薩斯和綠焰光球','你身邊的空氣發出了嗡嗡聲 - 一種溫和的嗡嗡聲。那魯已經知道你的勝利。也許它們就是你被迫從凱爾薩斯‧逐日者還在抽動的遺體上撿起這個球體的原因。它到底隱藏了什麼秘密?$B$B也許撒塔斯城的阿達歐會知道。','將綠焰光球交給撒塔斯城的阿達歐。','','','','','','',0), +(10946,'zhTW','灰舌偽裝','歐蘭的犧牲對我們的打擊很大。我真不該叫他犧牲自己的生命。但是該發生的已經發生了。$B$B如果我們想欺騙伊利丹,給他局勢安定的錯覺,我們必須聽從他的命令 - 至少現在必須這麼做。$B$B我有一支龐大的灰舌部族軍隊,但是 - 不屬於死亡誓言者 - 沒有人可以相信。$B$B你必須要完成伊利丹的命令。帶著這頂風帽;它蘊含著魔法的力量。任何看到你殺死凱爾的鳳凰---歐爾的人都會認為你是我的一名手下。','前往風暴要塞並且戴上灰舌風帽殺死歐爾。完成任務後回到影月谷找阿卡瑪。','灰舌的計謀','','','','','',0), +(10947,'zhTW','古老的神器','伊利丹的焦點已經轉向凱爾薩斯,這都要感謝你。是時候該我們行動了。$B$B預兆告訴我一個神器將會在我們的最後一戰中幫忙我們 - 一個被人稱為凜冬的巫妖所佩帶的骨匣。可惜的是自從他在海加爾山戰役被擊敗之後,骨匣的力量就消失了。$B$B然而,應該有方法可以取得這個神器。傳說中艾澤拉斯有一處由青銅龍守衛的地方...一處過去與現在的交會處。你將會在那裡找到我們要尋找的東西。','前往塔納利斯的時光之穴並且進入海加爾山戰役。進入之後,擊敗瑞齊‧凜冬並且將時間定相骨匣交給影月谷的阿卡瑪。','','到影月谷的典獄官監牢找阿卡瑪。','','','','',0), +(10888,'zhTW','那魯的試煉:瑪瑟里頓','在你被那魯認可之前,你必須通過四次考驗。$B$B只剩一個障礙了,凡人。召集一支軍隊並且前往地獄火堡壘深處的瑪瑟里頓巢穴。一路殺進密室的中心,並毀滅那邪惡的腐敗者!','撒塔斯城的阿達歐要你殺死瑪瑟里頓。','','到撒塔斯城的陰鬱城找阿達歐。','','','','',0), +(11385,'zhTW','懸賞:尋日導魔師','風又再對瑪頓恩低語,隸屬於尋日者的導魔師今天就得被殺死。$B$B你可以在風暴要塞的波塔尼卡中找到他們。$B$B你想要賞金的話,就殺死那些導魔師。','虛空巡者瑪頓恩要你殺死6名尋日導魔師。完成之後回到撒塔斯陰鬱城找他領取賞金。','','到泰洛卡森林找虛空巡者瑪頓恩。','','','','',0), +(11386,'zhTW','懸賞:帕薩里歐的投映器','我一直以為操縱者帕薩里歐使用魔法將他的影像在外域各處投射。很顯然我錯了。$B$B我最近的一個客人告訴我,血精靈使用一種特殊的機械裝置來和凱爾薩斯王子的投影溝通。就我所知,他們是從虛空風暴的薩希斯反叛者那邊取得的。$B$B我的客戶想要那個投映器。你何不去拜訪一下帕薩里歐?他就在風暴要塞的麥克納爾。','風之貿易者札令姆要你取得帕薩里歐的投映器。帶到撒塔斯的陰鬱城交給他以換取賞金。$B$B這個任務只能在英雄難度中完成。','','到泰洛卡森林找風之貿易者札令姆。','','','','',0), +(11387,'zhTW','懸賞:風暴要塞-熔爐毀滅者','有些機械構裝生物在麥克納爾之中,瑪頓恩被告知它們必須被毀掉。$B$B前往風暴要塞,把那些風暴要塞-熔爐毀滅者給毀掉。$B$B然後你可以回來領取你的賞金。','虛空巡者瑪頓恩要你殺死5名風暴要塞-熔爐毀滅者。完成之後回到撒塔斯陰鬱城找他領取賞金。','','到泰洛卡森林找虛空巡者瑪頓恩。','','','','',0), +(11388,'zhTW','懸賞:史蓋力司卷軸','今天的客人想找樣真的很罕見的東西。$B$B傳說先驅者史蓋力司是上古諸神的僕人。還說他有著一個巨大的卷軸記載著他們要如何支配宇宙生命的指示。$B$B目前的這位買家希望$g他:她;能親自摸摸那個卷軸,當然$g他:她;是讀不了上頭的文字的。$B$B到風暴要塞的亞克崔茲,把東西拿來給我,好嗎,$c?','風之貿易者札令姆要你取得史蓋力司卷軸。帶到撒塔斯的陰鬱城交給他以換取賞金。$B$B這個任務只能在英雄難度中完成。','','到泰洛卡森林找風之貿易者札令姆。','','','','',0), +(11389,'zhTW','懸賞:亞克崔茲哨兵','亞克崔茲的哨兵們陷入瘋狂了。裡面的囚犯們行為全都失控了,而其他的守衛會攻擊想幫忙的人。$B$B瑪頓恩聽見了虛空之風中的細語。它說消滅那些哨兵們。$B$B完成這項任務的話,今天的賞金就屬於你的了。','虛空巡者瑪頓恩要你解決5個亞克崔茲哨兵。完成之後回到撒塔斯的陰鬱城找他領取賞金。','','到泰洛卡森林找虛空巡者瑪頓恩。','','','','',0), +(11384,'zhTW','懸賞:扭曲分裂者的剪枝','不久之前,一個卡多雷的女德魯伊交給我一項任務。當然,還有不少的金幣!$B$B顯然達納蘇斯方面希望能夠讓一個名為扭曲分裂者的秘法古樹復原。那棵巨樹現在陷入了恍惚或是腐化中,我不是很確定,但你可以在風暴要塞的波塔尼卡深處找到它。$B$B她說他們只需要一小段剪枝來讓它重新生長。','風之貿易者札令姆要你取得扭曲分裂者的剪枝。帶到撒塔斯的陰鬱城交給他以換取賞金。$B$B這個任務只能在英雄難度中完成。','','到泰洛卡森林找風之貿易者札令姆。','','','','',0), +(11116,'zhTW','納魯的試煉:瑪瑟裡頓','想要證明你自己擁有獲得風暴鑰匙的資格,你必須首先完成四個試煉。$B$B現在,你只需要跨越最後一個障礙了,凡人。聚集一支軍隊,轉至地獄火堡壘深處,在瑪瑟裡頓的巢穴中殺出一條血路,進入中央的密室,殺死那個邪惡的腐蝕者!$B$B完成了這個任務,你就將獲得風暴鑰匙。','沙塔斯城的阿達爾要求你殺死瑪瑟裡頓。','','到地獄火半島找阿達歐。','','','','',0), +(13430,'zhTW','那魯的試煉:瑪瑟里頓','在你被那魯認可之前,你必須通過四次考驗。$B$B只剩一個障礙了,凡人。召集一支軍隊並且前往地獄火堡壘深處的瑪瑟里頓巢穴。一路殺進密室的中心,並毀滅那邪惡的腐敗者!','撒塔斯城的阿達歐要你殺死瑪瑟里頓。','','到撒塔斯城的陰鬱城找阿達歐。','','','','',0), +(24553,'zhTW','淨化奎爾德拉','我承認,我曾經懷疑你是否真的重鑄了奎爾德拉,而且我也沒想到薩洛瑞安的亡魂會在出現在你面前。你無法了解修復奎爾德拉對我以及我的族人代表著什麼意義。$B$B如同當初的承諾,我會讓你進入太陽之井,而你也會在裡面見到銀月城的領袖。把劍帶去太陽之井的房間,然後把它浸泡在井水中。劍刃就會與你產生連結。當連結產生以後,就帶著它回到奎爾德拉之眠找卡拉迪斯‧亮矛。','把淬鍛的奎爾德拉浸泡在太陽之井中。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','','到寒冰皇冠的奎爾德拉之眠找卡拉迪斯·亮矛。','','','','',0), +(24594,'zhTW','淨化奎爾德拉','太陽之井和奎爾德拉流浪的終點正等待著你,$n。$B$B你會發現奎爾薩拉斯的攝政王洛索瑪‧塞隆和大博學者洛摩斯站在一起。請提防他們,別讓他們的政治陰謀陷害了你。$B$B反言之,把焦點一直放在你的任務上。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。然後將奎爾德拉浸泡在太陽之井中來完成復原劍刃的工作。然後回到奎爾德拉之眠,把劍刃拿給米拉連恩‧日炎看。','把受污染的奎爾德拉浸泡在太陽之井中。當你準備好進入太陽之井高地的時候,請找一名太陽之井守望者談話。','','到寒冰皇冠的奎爾德拉之眠找米拉連恩·日炎。','','','','',0), +(24796,'zhTW','白銀誓盟的勝利','儘管菈娜薩爾女王對你冷嘲熱諷,你還是復原了奎爾德拉,$n。長久以來,取回奎爾德拉一直是我們的夢想。$B$B白銀誓盟與所有辛多雷欠你一份感恩之情。$B$B等你從太陽之井歸還之後,白銀誓盟的領袖凡蕾莎‧風行者邀請你見她一面。帶著奎爾德拉前往達拉然,她會在紫羅蘭城塞等候著你,$n。','到達拉然的紫羅蘭城塞,把復原的奎爾德拉交給凡蕾莎‧風行者。','','到寒冰皇冠的奎爾德拉之眠找卡拉迪斯·亮矛。','','','','',0), +(24800,'zhTW','奪日者的勝利','為了奪日者與辛多雷的榮耀,奎爾德拉終於復原了! $B$B銀月城的所有人都稱頌你成為了英雄,部落的所有人也這麼認為。$B$B等你從太陽之井歸來之後,奪日者的領袖大法師埃薩‧奪日者想邀請你見他一面。帶著奎爾德拉儘快前往達拉然的紫羅蘭城塞,$n。大法師希望能夠親自恭賀你!','到達拉然紫羅蘭城塞,把復原的奎爾德拉交給大法師埃薩‧奪日者。','','到達拉然的紫羅蘭城塞找大法師埃薩·奪日者。','','','','',0), +(10948,'zhTW','囚禁的靈魂','你一定覺得很奇怪為什麼我要繞了一大圈隱瞞我真正的意圖。為什麼我不公開的支持那魯呢?$B$B我的真正本體-也就是我的靈魂-被伊利丹囚禁在黑暗神廟。伊利丹可以隨時殺死我...直到現在!這個骨匣將使我重新獲得靈魂的控制權。$B$B是時候了,$n。我會率領瑪翼夫和我的死亡誓言者到伊利丹的門階。$B$B和阿達歐談談,告訴他我們的計畫。如果我們能團結一致就能衝破伊利丹的防線。','前往撒塔斯城告訴阿達歐關於阿卡瑪的請求。','','','','','','',0), +(10949,'zhTW','進入黑暗神廟','<阿達歐在你面前製造了一個影像,顯示一個那魯站在黑暗神廟外面與德萊尼復仇者以及血精靈博學者戰鬥的景象。你馬上察覺到這就是阿卡瑪在等待的機會。>','前往影月谷的黑暗神廟,在入口處與希瑞談話。','','','','','','',0), +(10957,'zhTW','灰舌的救贖','當伊利丹獲得破碎者的擁戴時,阿卡瑪是我們之中最有智慧的一個人。他知道公開對抗背叛者會讓我們的種族滅絕。$B$B因此他在最高機密的情況下密謀策劃了這重要的一刻。失敗會造成大災難...不只是對阿卡瑪,不只是對破碎者,而是對整個外域。和伊利丹這麼親近的人沒有一個能對他造成這樣可怕的打擊。$B$B幫助阿卡瑪釋放他的靈魂,他就能讓你進入伊利丹的聖所。','擊敗黑暗神廟中阿卡瑪的陰影來幫助阿卡瑪奪回他的靈魂。完成後回到先知卡奈那裡。','','到黑暗神廟找先知卡奈。','','','','',0), +(10958,'zhTW','尋找灰舌','<當你抬頭看著希瑞,你的精神變的集中,意志變的堅定。你在這裡的任務還沒完成;你必須回去黑暗神廟找到阿卡瑪的追隨者。>$B$B<阿卡瑪的成功與否影響很多事情。>','在黑暗神廟裡找到阿卡瑪的死亡誓言者。','','','','','','',0), +(10959,'zhTW','背叛者之死','等伊利丹的副官被擊敗,阿卡瑪就能衝破伊利丹的聖所之門。只要阿卡瑪這麼做你就準備好帶著軍隊進入。$B$B我們仍然不清楚瑪翼夫發生什麼事,但是就算沒有她我們也要繼續前進。$B$B希望你的軍隊足以應付這個任務。伊利丹不會樂於見到阿卡瑪。','先知卡奈要你擊敗黑暗神廟裡的伊利丹。','','到黑暗神廟找先知卡奈。','','','','',0), +(13429,'zhTW','替阿卡瑪製造混亂','<希瑞的身上閃爍著光芒,身邊的奧多爾與占卜者部隊等待希瑞下達命令。希瑞的部隊準備逼退伊利丹的部隊,替阿卡瑪製造一場騷動。那魯等待著你提出開戰的請求。>','在希瑞的手下製造混亂的時候護送阿卡瑪和瑪翼夫進入影月谷的黑暗神廟。','幫助阿卡瑪和瑪維進入黑暗神殿。','到影月谷的巴瑞廢墟找希瑞。','','','','',0), +(236,'zhTW','為石毀車補給燃料','$n!你也差不多該出現了。戰鬥也許已經結束了,但我們還得準備下一場戰鬥。前往冬握湖東南的火焰熔爐,然後取回幾個永恆餘燼。$B$B我們把這些餘燼和煤炭混合,用來驅動石毀車和攻城機具。$B$B喔,如果你碰巧在那裡碰上了部落的傢伙,不要猶豫,殺了他們並奪取他們的餘燼。我們可不能讓他們在下一場戰鬥佔上優勢。','冬握堡壘的攻城大師斯托哈德要你前往火焰熔爐,從部落玩家身上取回10個永恆餘燼。','','到冬握湖找攻城大師斯托哈德。','','','','',0), +(13153,'zhTW','保衛勇士','$n,見到你真好。戰鬥暫時沉靜了下來,我們應該加緊腳步以備齊物資。我的研究指出,近來在冰川瀑布被殺害的士兵,他們所穿的護甲被灌注了一股巨大的能量。部落正在那一帶蒐集護甲。$B$B馬上前往冰川瀑布,殺掉任何你遇到的部落成員。將他們灌能的護甲帶回來給我。$B$B如果你不能找到任何部落成員,你大概會找到一副被元素殺害的冒險者護甲。','冬握堡壘的巫女凱拉娜要你前往冰川瀑布,從部落玩家身上收集10件灌魔部落護甲。','','到冬握湖找巫女凱拉娜。','','','','',0), +(13154,'zhTW','龍骨與箭頭','元龍實在是妙不可言!好吧,至少他們的骨頭是!我曾經以龍骨製的箭頭裝備我們的弓箭手。不幸地,在安格拉薩的大屠殺後,在龍骨荒野上幾乎不可能找到龍骨。$B$B然而,冬握湖西緣的暗影森林中,仍有著多得足以淹沒我們的龍骨。$B$B前往暗影森林,帶回任何你所找到的龍骨碎片!$B$B部落也在那一帶收集龍骨碎片。殺光他們!','冬握堡壘的弓箭商藍道夫要你前往暗影森林,從部落玩家身上取得10個龍骨箭袋。','','到冬握湖找弓箭商藍道夫。','','','','',0), +(13156,'zhTW','罕見的草藥','我的媽,這裡有夠冷!令我想起阿古斯星上終年風雪的卡里諾斯山脈。無論如何,這裡的冰霜風雪,會讓我們的士兵著涼的。$B$B前往冬握堡壘西南方的生命冷原,帶回10的部落草藥包給我。我會將它們磨成抵禦寒冷用的草藥。$B$B曾有人目擊部落也在那一帶採集草藥。別猶豫,不要留下任何活口,然後取回草藥!','冬握堡壘的隱士泰莎要你前往生命冷原,從部落玩家身上取得10個部落草藥袋。','','到冬握湖找隱士泰莎。','','','','',0), +(13177,'zhTW','以其人之道,還治其人之身','歡迎來到冬握堡壘,$n。你的任務很簡單。擊敗十個部落菁英。現在,去吧!為聯盟帶回勝利!','冬握堡壘的指揮官桑奈希要求你殺掉10個部落成員。','','到冬握湖找指揮官桑奈希。','殺死部落成員','','','',0), +(13178,'zhTW','趕盡殺絕!','歡迎來到冬握堡壘,$n!督軍卡爾洛斯下了一道命令:趕盡殺絕!$B$B讓十個最強悍的聯盟成員倒下後,回來找我。','冬握堡壘的指揮官達多許要求你殺掉10個聯盟成員。','','到冬握湖找指揮官達多許。','殺死聯盟成員','','','',0), +(13179,'zhTW','以其人之道,還治其人之身','歡迎來到冬握湖,$n。你的任務很簡單,擊敗十個部落的精英。去吧!為聯盟帶來勝利!','冬握湖的指揮官桑奈希要求你殺掉10個部落成員。','','到冬握湖找指揮官桑奈希。','殺死部落成員','','','',0), +(13180,'zhTW','趕盡殺絕!','歡迎來到冬握湖,$n!督軍卡爾洛斯下了一道命令:趕盡殺絕!$B$B讓十個最強悍的聯盟成員倒下後,回來找我。','冬握堡壘的指揮官達多許要求你殺掉10個聯盟成員。','','到冬握湖找指揮官達多許。','殺死聯盟成員','','','',0), +(13181,'zhTW','冬握之捷','指揮官桑奈希的腳下堆了這麼多的部落屍體,他一定很滿意,但是對驍勇遠征軍而言,控制冬握才是最重要的目標。你得確保我們能徹底控制冬握湖。$B$B不過,你別想只靠你的盟友做這些骯髒的事情來不勞而獲。如果你在戰鬥結束後還沒有到達徵召的第二級官階就別回來。','在冬握戰場中獲勝,並向冬握湖的戰術軍官阿布拉米斯回報。你必須參與戰鬥才能擁有勝利的榮耀。','在冬擁湖取得勝利','到冬握湖找戰術軍官阿布拉米斯。','','','','',0), +(13183,'zhTW','冬握之捷','雖然達多許必定會為我們痛宰敵人感到滿意,但掌控冬握堡壘才是我們的最終目的。不擇手段也要確保冬握湖是我們的。$B$B然而,你別想只靠你的盟友做這些骯髒的事情來不勞而獲。如果你在戰鬥結束後還沒有到達徵召的第二級官階就別回來。','在冬握戰場中獲勝,並向冬握湖的戰術軍官科伊瑞斯回報。你必須要參與戰鬥才能擁有勝利的榮耀。','在冬擁湖取得勝利','到冬握湖找戰術軍官科伊瑞斯。','','','','',0), +(13185,'zhTW','突破重圍','我聽到他們了!聯盟就要來了。摧毀三部聯盟攻城器,然後回來找莫普。','冬握堡壘的莫普中尉要你摧毀3台聯盟攻城器械。','','到冬握湖找莫普中尉。','摧毀聯盟攻城器','','','',0), +(13186,'zhTW','突破重圍','這城堡被部落軍隊包圍,只是時間上的問題了。摧毀3台他們的攻城裝置,然後向我回報。','冬握堡壘的資深爆破兵勒茍索要你摧毀3台部落攻城器械。','','到冬握湖找資深爆破兵勒茍索。','摧毀部落攻城器','','','',0), +(13191,'zhTW','為石毀車補給燃料','為了部落,$n!雖然戰鬥就要結束,我們還是得為聯盟的下一波攻勢做好準備!去冬握東南邊的火焰熔爐取回十個永恆餘燼。$B$B這些餘燼混合煤塊後可以作為石毀車和攻城機具的燃料。$B$B我聽到報告,聯盟豬玀沒日沒夜地採集餘燼。殺光他們,奪走他們的餘燼!如果他們已經遺棄了那區域,做好準備,和那一帶的火元素戰鬥,直到你找到餘燼為止!','冬握堡壘的攻城鐵匠重蹄要你前往火焰熔爐,從聯盟玩家身上取得10個永恆餘燼。','','到冬握湖找攻城鐵匠重蹄。','','','','',0), +(13192,'zhTW','護衛城牆','嘿,老兄。這地方搞得我皮皮挫的啦,你不暸的嗎?$B$B路上好多孤魂野鬼。我想弄個咒毒防護結界,但是我需要一些靈魂,老兄。別的我不要,只有強悍勇士的靈魂能用。$B$B冬握東邊有個冰川瀑布,那裡的特別性質能夠淬鍊出我要的靈魂。在那裡幹掉聯盟,搞不好他們就有我要的東西。$B$B帶回那些傢伙的護甲。如果沒有聯盟在那,可能就是被元素先下手了,老兄。','冬握堡壘的咒毒大師符金要求你,從冰川瀑布取回10套灌能的護甲。','','到冬握湖找咒毒大師符金。','','','','',0), +(13193,'zhTW','龍骨與箭頭','為什麼給我裝備弓箭手的工作?我是個詩人,不是遊俠!好吧,抱怨也沒用。$n,我需要龍骨以製造箭頭。$B$B前往冬握西邊的暗影森林。從最近的一次戰鬥後開始,聯盟也在那個區域採集龍骨。殺掉他們並拿走龍骨。$B$B如果失敗的話,你也可能很幸運地從那一帶的靈魂弄到龍骨。我聽說他們喜歡將活的獵物弄死,然後串在龍骨上。','冬握堡壘的維耶隆‧炎羽中尉要你前往暗影森林,從聯盟玩家身上取得10個龍骨箭袋。','','到冬握湖找維耶隆·炎羽。','','','','',0), +(13194,'zhTW','以玫瑰治療','在戰火稍事歇息之際,或許有人會相信和平的曙光就要降臨於斯。然而令人沮喪,這並非吾輩命運之歸宿。$B$B前往冬握湖西南部的生命冷原。我需要生於當地的玫瑰,用以製造治療創傷的藥膏。$B$B不幸地由於聯盟的濫採,玫瑰已變得駭人地稀少。殺掉生命冷原上的聯盟成員,從他們身上取走草藥袋。$B$B如果此舉不成,或許鞭笞者身上也會有。','原獵者穆法特要你前往生命冷原,從聯盟玩家身上取得10個聯盟草藥袋。','','到冬握湖找原獵者穆法特。','','','','',0), +(13195,'zhTW','罕見的草藥','我的媽,這裡有夠冷!讓我想起阿古斯星上風暴圍繞的卡里諾斯山脈。無論如何,這裡的冰霜風雪會讓我們的士兵著涼的。$B$B前往冬握堡壘西南方的生命冷原,把10個部落草藥袋帶回來給我。我會將它們磨成抵禦寒冷用的草藥。$B$B曾有人目擊部落也在那一帶採集草藥。別猶豫,不要留下任何活口,然後取走他們的草藥袋!$B$B你或許也能在那個地區的鞭笞者身上找到草藥袋。','冬握湖的隱士泰莎要你前往生命冷原,從部落玩家身上取得10個部落草藥袋。','','到冬握湖找隱士泰莎。','','','','',0), +(13196,'zhTW','龍骨與箭頭','元龍實在是妙不可言!好吧,至少他們的骨頭是!我曾經以龍骨製的箭頭裝備我們的弓箭手。不幸地,在安格拉薩的大屠殺後,在龍骨荒野上幾乎不可能找到龍骨。$B$B然而,冬握湖西緣的暗影森林中,仍有著多得足以淹沒我們的龍骨。$B$B前往暗影森林,帶回任何你所找到的龍骨碎片!$B$B部落也在那一帶收集龍骨碎片。殺光他們!','冬握湖的弓箭商藍道夫要你前往暗影森林,從部落玩家身上取得10個龍骨箭袋。','','到冬握湖找弓箭商藍道夫。','','','','',0), +(13197,'zhTW','為石毀車補給燃料','$n!是你該現身的時候了。我們很可能會在這場戰鬥中吃鱉,所以最好儘早開始為下回準備!去冬握湖東南部的火焰熔爐取回一些永恆餘燼。$B$B這些餘燼混合煤塊後可以作為石毀車和攻城機具的燃料。$B$B噢,還有,如果你在那裡遇到部落,別猶豫,殺光他們,奪走他們的餘燼。我們一定要阻止他們繼續佔據要塞!','冬握湖的攻城大師斯托哈德要你前往火焰熔爐,從部落玩家身上取得10個永恆餘燼。','','到冬握湖找攻城大師斯托哈德。','','','','',0), +(13198,'zhTW','保衛勇士','$n,見到你真好。我們應該加緊腳步以準備下一波對要塞的攻勢。我的研究指出,近來在冰川瀑布被殺害的士兵,他們所穿的護甲被灌注了一股巨大的能量。部落正在那一帶蒐集護甲。$B$B馬上前往冰川瀑布,殺掉任何你遇到的部落成員。將他們灌能的護甲帶回來給我。$B$B如果你找不到任何部落成員,也許可以在那裡找到被元素生物殺害的冒險者所遺留下來的護甲。','冬握湖的巫女凱拉娜要你前往冰川瀑布,從部落玩家身上取得10件灌魔部落護甲。','','到冬握湖找巫女凱拉娜。','','','','',0), +(13199,'zhTW','龍骨與箭頭','為什麼給我裝備弓箭手的工作?我是個詩人,不是遊俠!好吧,抱怨也沒用。$n,我需要龍骨以製造箭頭。$B$B前往冬握西邊的暗影森林。從最近的一次戰鬥後開始,聯盟也在那個區域採集龍骨。殺掉他們並拿走龍骨。$B$B如果失敗的話,你也可能很幸運地從那一帶的靈魂弄到龍骨。我聽說他們喜歡將活的獵物弄死,然後串在龍骨上。','冬握湖的維耶隆‧炎羽中尉要你前往暗影森林,從聯盟玩家身上取得10個龍骨箭袋。','','到冬握湖找維耶隆·炎羽。','','','','',0), +(13200,'zhTW','為石毀車補給燃料','為了部落,$n!雖然戰鬥就要平息,我們還是得為奪回要塞做好準備!去冬握東南邊的火焰熔爐取回十個永恆餘燼。$B$B這些餘燼混合煤塊後可以作為石毀車和攻城機具的燃料。$B$B我聽到報告,聯盟豬玀沒日沒夜地採集餘燼。殺光他們,奪走他們的餘燼!如果他們已經遺棄了那區域,做好準備,和那一帶的火元素戰鬥,直到你找到餘燼為止!','冬握湖的攻城鐵匠重蹄要你前往火焰熔爐,從聯盟玩家身上取得10個永恆餘燼。','','到冬握湖找攻城鐵匠重蹄。','','','','',0), +(13201,'zhTW','以玫瑰治療','許多勇士在戰鬥中倒下,但若缺乏妥善的照料,會有更多人死於負傷。$B$B前往冬握西南方的生命冷原。我需要生於當地的玫瑰,用以製造治療創傷的藥膏。$B$B不幸地,由於聯盟的濫採,玫瑰已變得駭人地稀少。殺掉生命冷原上的聯盟成員,從他們身上取走他們的草藥袋。$B$B若此舉不成,或許一兩個鞭笞者身上會有。','冬握湖的原獵者穆法特要你前往生命冷原,從聯盟玩家身上取得10個聯盟藥草袋。','','到冬握湖找原獵者穆法特。','','','','',0), +(13202,'zhTW','大禍臨頭','嘿老兄。看到聯盟那些傢伙了嗎?他們躲在自己的堡壘裡,看來倒挺安逸的。$B$B看來他們過得太爽了點,對吧?我想惡搞一下那地方,但是我需要一些靈魂,老兄。不過我可不是巫毒符不挑,我只要可以勝任工作的強悍勇士靈魂。$B$B冬握東邊的冰川瀑布有某種特質,可以淬鍊出我要的靈魂。作掉那裡的聯盟成員,也許他們有我們需要的東西。$B$B帶回那些小傢伙的護甲。如果那裡沒有聯盟成員,或許是被元素先下手為強了,老兄。','冬握湖的咒毒大師符金要你前往冰川瀑布,從聯盟玩家身上取得10件灌能聯盟護甲。','','到冬握湖找咒毒大師符金。','','','','',0), +(13222,'zhTW','護衛攻城行動','向前向中看齊,$n!我們就要展開對冬握堡壘的攻擊。那些部落畜生以為可以懦弱地躲在城牆之後?嗯哼,我不認為!我們將讓他們見識到地精科技的威力,並且粉碎他們的城牆!$B$B然而,最具威力的攻城器具也需要人手操作。操作或護衛一台攻城載具,直到它摧毀三座部落建築。','冬握湖的資深爆破兵勒茍索要你駕駛或保護一個攻城器,讓其順利摧毀三個建築物。$B$B士兵階級以上的玩家可於哥布林工坊建造攻城器。','','到冬握湖找資深爆破兵勒茍索。','護衛攻城載具','','','',0), +(13223,'zhTW','護衛攻城行動','討厭的聯盟不會佔領要塞太久的。莫普將粉碎他們的城牆,但是莫普得待在營地裡。莫普希望他可以粉碎想破壞部落石毀車的聯盟成員。$B$B你,$n!你來做莫普的工作。保護3台進攻聯盟建築的攻城載具。聯盟不會想到你會保護石毀車。讓聯盟知道莫普有多聰明!','冬握湖的莫普中尉要你保衛或駕駛一台攻城載具,讓其順利摧毀三座聯盟建築物。$B$B有階級的部落玩家可於哥布林工坊建造攻城器。','','到冬握湖找莫普中尉。','護衛部落攻城載具','','','',0), +(13538,'zhTW','南方破壞工作','冬握河的南邊有三座哨塔正在吸取堡壘的能量!$B$B摧毀影景哨塔、焰望哨塔或冬際哨塔,然後回來找我。記得,只有攻城載具才能破壞哨塔,所以要確保他們不受部落的攻擊!','摧毀影景哨塔、焰望哨塔或冬際哨塔,然後向冬握湖的戰術軍官阿布拉米斯回報。','','到冬握湖找戰術軍官阿布拉米斯。','摧毀三座南部哨塔的其中一座','','','',0), +(13539,'zhTW','推倒哨塔','或許聯盟已經打到家門口了,但一個真正的戰術家眼光看得更遠。$B$B「攻其不備,出其不意。」$B$B$n,我需要你越過冬握河,去摧毀南方三座哨塔中的一座。我們的術士回報說那些哨塔正在吸收能量,我們可以使用那些能量來強化部隊。$B$B一旦你摧毀了其中一座哨塔,就回來找我。','摧毀影景哨塔、焰望哨塔或冬際哨塔,然後向冬握湖的戰術軍官科伊瑞斯回報。','','到冬握湖找戰術軍官科伊瑞斯。','摧毀一座冬握湖的南部哨塔','','','',0), +(24476,'zhTW','淬鍊劍刃','奎爾德拉的碎塊終於接合好了,整把劍現在已回歸完整的面貌,但在淬鍊之前仍無法用於戰鬥之中。這把磨損的薩鋼劍刃相當脆弱,只要擊中任何東西就會立刻粉碎。$B$B在冰冠城塞深處的眾魂熔爐是一個可以安心淬鍊劍刃的地方。帶著奎爾德拉到靈魂吞噬者的住所尋找爐缸。把劍刃放進爐缸中淬鍊,然後把它帶來冰封大廳給我。','去眾魂爐缸淬鍊重鑄的奎爾德拉。','','到冰封大廳找卡拉迪斯·亮矛。','','','','',0), +(24560,'zhTW','淬鍊劍刃','奎爾德拉的碎塊終於接合好了,整把劍現在已回歸完整的面貌,但在淬鍊之前仍無法用於戰鬥之中。這把磨損的薩鋼劍刃相當脆弱,只要擊中任何東西就會立刻粉碎。$B$B在冰冠城塞深處的眾魂熔爐是一個可以安心淬鍊劍刃的地方。帶著奎爾德拉到靈魂吞噬者的住所尋找爐缸。把劍刃放進爐缸中淬鍊,我會在冰封大廳等著你。','去眾魂爐缸淬鍊重鑄的奎爾德拉。','','到冰封大廳找米拉連恩·日炎。','','','','',0), +(13059,'zhTW','為瓦苟復仇','我一直向劍之女神祈禱,祈求擊倒敵人的那一天到來。伊爾斯卡族長必須為他對我的所作所為付出代價!$B$B我曾是『強者』烏弗蘭族長手下的勇士,但在英靈殿的一場權位之戰中,伊爾斯卡以黑魔法偷襲我,使我落敗並淪落至此。$B$B你可以在苦難之環底下,找到族長和他的戰士。代表我挑戰他並擊敗他吧!$B$B讓他承受和我一樣的痛苦!','地下大廳的貝索德‧費格要你在苦難之環丟下他的劍,挑戰伊爾斯卡族長並且殺死他。','','到寒冰皇冠的地下大廳找貝索德·費格。','使用貝索德之劍進行挑戰','','','',0), +(13312,'zhTW','鐵牆壁壘','鐵牆壁壘眺望著逝往英雄山谷,在奧多薩的西側、稱霸著四面八方的週遭。只要壁壘還未攻下我們根本無法越雷池一步。駐防者是邪惡的葛林克爾與他詛咒神教的爪牙們。$B$B只要你能削弱葛林克爾的力量,至少我們的軍隊就多少能在進軍時與之抗衡。拿著這個歪曲符文,在壁壘盡頭葛林克爾的寶珠旁釋放符文之力,應該多少能夠引起這個召喚師的注意。','擊敗邪惡的葛林克爾然後回報奧格林之錘上的寇爾提拉‧亡織者。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','','','','',0), +(13313,'zhTW','阻礙空中偵察','聯盟不知道怎麼地在逝往英雄山谷與寒冰皇冠上空弄來了一隊偵察機,就在奧多薩的西側的開闊區域。$B$B我們不允許就這樣被佔了上風,首席工程師銅爪已經供應了我們絕佳的武器來對付這項威脅-他把他的新飛彈命名為SGM-3。他向我保證絕對彈無虛發,快去利用這新武器讓我們扳回一城!','使用SGM-3飛彈擊落6艘破天者號偵察戰鬥機,然後向奧格林之錘上的空奪者寇姆‧黑疤回報。','','到寒冰皇冠的奧格林之錘找空奪者寇姆·黑疤。','擊落破天者號偵查戰鬥機','','','',0), +(13315,'zhTW','暗中偵察','一切都在計畫之中。我們策劃了一連串完美的計畫來奪下死亡之門。傷亡雖是必然, 但最終的勝利將屬於我們-咬緊牙關對付那些愛管閒事的部落...$b$b不論如何,我們的下一個需要關切的目標是荒寂之門。飛往那兒並試著熟悉敵人的據點。$b$b當你回來我會再給你進一步指示。','破天者號上的薩沙理安要你飛往荒寂之門,偵察門的南、中、北、西北區域。','','','前往奧多薩南部','前往奧多薩中部','前往奧多薩北部','前往奧多薩西北部',0), +(12806,'zhTW','全速前往高地!','有些人說,我們最重要的任務並非巫妖王,而是徹底毀滅血色突襲軍。我個人覺得很愚蠢,但我又有什麼資格評斷呢?$B$B死亡高崗就在西南方遠處,俯瞰著斷崖絕壁下的海洋。你會在那裡找到指揮統領艾睿特在親自監督毀滅突襲軍的行動。$B$B<男爵清了清喉嚨。>$B$B你要全速趕去那裡向他報到。他特別要求要見你。','到寒冰皇冠的死亡高崗找指揮統領艾睿特回報。','','','','','','',0), +(13316,'zhTW','寇普雷薩的守衛者','寇普雷薩,又稱驚怖之門。將是阻止我們進攻冰冠城塞最後一道防線。就在鐵牆壁壘的南方,焚焰地與冰川的後方。但當我們的軍隊行軍至此必定早已筋疲力竭。$B$B我們必須事先削弱它的防禦,否則軍隊很有可能就在此瓦解。$B$B這個要塞駐守著巫妖王最可怕與最狂熱的手下。盡你的全力毀掉這些守衛,那麼或許我們還有一線希望。','奧格林之錘上的寇爾提拉‧亡織者要你殺掉5個恐慌先驅者與 5個寇普雷薩守護者。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','','','','',0), +(12807,'zhTW','至今的故事...','我們有很多事情得做,但首先,我想我們得先來個短暫的講習。$B$B我們死亡騎士和我們的血色老友有段精采的過去,而他們現在像白癡一樣地在西北方的港口裡舒適的休息著。$B$B當你準備好要聽故事的時候,就再次和我談話。我會為你啟蒙。','在死亡高崗聽取指揮統領艾睿特的故事。','傾聽高級指揮官埃雷特的故事。','到寒冰皇冠的死亡高崗找指揮統領艾睿特交談。','','','','',0), +(13318,'zhTW','舉手之勞','詛咒神教掌控著荒寂之門,是嗎? 這並不意外。$b$b找點樂子的時候到了。你提到在門的南端有些新教徒加入。他們幾乎都會攜帶著一個特別的道具-一種幻術寶珠。$b$b這東西通常被教徒用來偽裝,讓他們潛入、滲透或混進他們的敵人。$b$b殺了這群傻瓜直到你取得寶珠, $c,然後用在征服者身上。','破天者號上的薩沙理安要你從奧多薩的惡劣新兵身上取得幻術寶珠,然後在3個黑暗征服者身上使用它。','','到寒冰皇冠的破天者號找薩沙理安。','黑暗征服者變得步履蹣跚並隨之倒下','','','',0), +(12810,'zhTW','水中之血','在突襲軍港口的部隊因為獅鷲騎士的增援而實力大增。你需要一隻坐騎才能對付他們。但首先,我們需要一些材料來準備儀式。$B$B要著手進行儀式我們會需要大量的血液。$B$B<指揮統領把手指向西北方。>$B$B在港口底下有個相當豐富的來源...鯊魚。在沒有把囊袋裝滿血液之前別回來找我。','死亡高崗的指揮統領艾睿特要你用血囊裝滿10隻極餓的大白鯊的鮮血。','','到寒冰皇冠的死亡高崗找指揮統領艾睿特。','從極餓的大白鯊取得血液','','','',0), +(12813,'zhTW','從他們的屍體上復甦!','多麼仁慈...我們的指揮統領多麼的大方啊。他身處花朵與陽光之中,而我的心中卻只充滿著仇恨。$B$B光是結束他們可悲的性命還不夠...我要他們受到羞辱...受到貶低。$B$B還有什麼比被轉變成自己最痛恨的東西更令人啞口無言的呢?把全副身心都奉獻出來,只為了消滅一樣東西,然後,最後卻變成了它?$B$B多哀傷啊。$B$B把這份酊劑帶去西北邊的突襲軍港口。用在那些僵直的屍體上,然後看著接下來發生的一切;但記得避開教堂。','死亡高崗的瑟塔爾‧暗癒者給了你暗癒者的酊劑。把它用在10具突襲軍港口的血色突襲軍屍體上。','','到寒冰皇冠的死亡高崗找瑟塔爾·暗癒者。','轉化血色突襲軍屍體','','','',0), +(12814,'zhTW','你會需要一頭獅鷲獸','有什麼比用他們自己的獅鷲獸來對付他們更適合的呢?前往突襲軍港口,從獅鷲騎士死僵的手中奪取韁繩。$B$B把牠帶回來這裡,送去給烏佐‧喚死者。他會讓牠們進行適當的轉變,然後給你進一步的指示。','將一頭突襲軍獅鷲獸送到死亡高崗的烏佐‧喚死者手中。','','到寒冰皇冠的死亡高崗找烏佐·喚死者。','將突襲軍獅鷲獸送到烏佐·喚死者手中','','','',0), +(12815,'zhTW','禁航區','既然你有了骸骨獅鷲獸,我要你每天把它帶到底下,在突襲軍港口上空製造一個禁航區。$B$B我得承認,老兄,我一點也不介意你是否用骸骨獅鷲獸殺死他們的獅鷲騎士,但是我猜如果你真的要這麼做,你會發現這樣比較輕鬆就能接近他們。$B$B還有,骸骨獅鷲獸可以讓你使用許多方便的把戲。','死亡高崗的烏佐‧喚死者要你殺死10個突襲軍獅鷲騎士。','','到寒冰皇冠的死亡高崗找烏佐·喚死者。','','','','',0), +(13069,'zhTW','把他們射成刺蝟','卓頓海姆擁有空中防禦,包括元龍騎兵和魚叉獵槍。他們將其集中部署在北面和西面 - 防線上最脆弱的地方。$B$B我們就是要以子之矛,攻子之盾!$B$B<跳躍者以單眼緊盯著你,並且瘋癲地格格笑著。>$B$B前往西南方的英靈殿,奪下峭壁上的魚叉獵槍,哪一邊都行。解決掉那些元龍和上面的騎兵。把他們都射成刺蝟!','暗影穹殿的跳躍者要求你,使用卓頓海姆速射魚叉,射下15頭卓頓海姆元龍和騎乘其上的騎兵。','','到寒冰皇冠的暗影穹殿找跳躍者。','射下卓頓海姆元龍和騎兵','','','',0), +(13071,'zhTW','暗邪愛看煙火秀!','暗邪喜歡火!暗邪也愛元龍!$B$B<憎惡體興奮地拍著手。>$B$B小$n,去卓頓海姆的尼約達村偷一頭元龍。讓牠在卓頓海姆製造美麗的煙火秀吧!','暗影穹殿的暗邪要求你,偷走一頭尼約達元龍,並利用牠在卓頓海姆區域內焚燬8棟維酷建築。$B$B不過,巴拉加德堡壘因為材質的緣故無法焚燬。','','到寒冰皇冠的暗影穹殿找暗邪。','焚燬維酷建築','','','',0), +(13319,'zhTW','切斷指揮鍊','根據你的報告以及我對神教的印象,他們在每個駐紮點都派駐了一名監督者來調度各個行動。$b$b我相信也許解決掉這些指揮者的效果非常有限,但至少能拖延他們的行動並讓他們調度失衡,這對我們目前的處境已經非常值回票價。$b$b解決掉那些監督者以後再回來找我。','破天者號上的薩沙理安要你前往奧多薩擊敗監督者菲德里斯、監督者薩夫林、監督者維拉傑與監督者杰昆。','','到寒冰皇冠的破天者號找薩沙理安。','殺掉監督者菲德裡斯','殺掉監督者傑昆','殺掉監督者維拉傑','殺掉監督者薩夫林',0), +(13321,'zhTW','重新測試','這樣應該就行了!$b$b那些邪惡的教徒還想把更多靈魂放進他們的噁心果汁? 我說我們就幫他們一把!$b$b來把這乾了 - 別擔心,我已經稀釋過了…我幾乎敢保證這唯一的效果是當你殺掉一個教徒以後,這能幫你找出他的靈魂精華。$b$b等你蒐集到一定的量,就把那坨扭曲惡靈的苦痛糾結凝塊扔進任何一個鍋子$b$b讓他們嚐嚐自食惡果的滋味!','破天者號上的首席工程師栓鉗要你將苦痛糾結凝塊丟進奧多薩的一個大鍋中。','','到寒冰皇冠的破天者號找首席工程師栓鉗。','消滅苦痛糾結凝塊','','','',0), +(13328,'zhTW','擊破碎片','在寇普雷薩之頂,巫妖王的爪牙豎立了3座水晶,驚怖、絕望與苦難裂片。他打算等我們的人馬一接近寇普雷薩的城牆,就要將水晶的力量釋放來毀滅我們。$B$B若這些能量完全釋放,水晶將會癱瘓每個人的心靈並注入極大的痛苦與恐懼。到時候天譴軍團便能如入無人之境般地進行屠殺。$B$B找出這些水晶然後摧毀它們,將殘餘的裂片帶回來給我,我們絕對不能讓巫妖王重塑這些武器!','將破損的驚怖裂片、破損的絕望裂片、破損的苦難裂片,帶回來給奧格林之錘上的寇爾提拉‧亡織者。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','','','','',0), +(13329,'zhTW','驚怖之門','焚焰地,是前往寇普雷薩必經之路,坐落在鐵牆壁壘之南,巫妖王的精銳組織了堅固的防線來鎮守堡壘。$B$B由一群死亡騎士領頭的骷髏劫奪者軍團擋住了去路。我擔心縱使擊敗了劫奪者,天譴軍團恐怕會輕易地讓他們復生,再次進攻。$B$B我想了個法子來阻止這情況,但我不能保證會奏效。拿著這些溶劑淋在劫奪者的遺骸上把它們融掉。','奧格林之錘上的寇爾提拉‧亡織者希望你用烈性酸液來溶解6個骷髏劫奪者的屍體。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','溶解骷髏劫奪者的屍體','','','',0), +(13330,'zhTW','受選者的血','那些維酷族相當受到巫妖王的重用,自稱依米亞,他們在寒冰皇冠中央地帶建立了一個屬於他們的城市。在我們進攻冰冠城塞之前尚需許多準備,而我們目前正面對的其中一項,就是進攻這些自稱「受選」於巫妖王的維酷。$B$B前往他們的城市依米海姆,在他們的地盤上擊敗他們。讓他們明白誰才是這兒無庸置疑的強者。','奧格林之錘上的戰爭使者戴沃斯‧里歐特要求你,到依米海姆殺掉20個維酷族。','','到寒冰皇冠的奧格林之錘找戰爭使者戴沃斯·里歐特。','殺死依米海姆維酷人','','','',0), +(13331,'zhTW','別讓聯盟重見天日','這些聯盟還真是有夠難纏,我承認,但這改變不了什麼。帶著這些SGM-3然後再次擊落任何你看到的破天者號偵察戰鬥機。$B$B雖然我懷疑那些蠢蛋什麼時候才能理解,總之我們的飛彈還很多,就打到他們清醒為止。去逝往英雄山谷上空擊落那些戰鬥機,就在奧多薩的西側。沒將它們全部都打成殘骸不要回來見我。','使用SGM-3飛彈擊落6艘破天者號偵察戰鬥機,然後向奧格林之錘上的空奪者寇姆‧黑疤回報。','','到寒冰皇冠的奧格林之錘找空奪者寇姆·黑疤。','擊落破天者號偵查戰鬥機','','','',0), +(13332,'zhTW','架起路障','當我們的兵力進推超過奧多薩後,他們將較容易遭到從鐵牆壁壘與來自開闊冰川下的敵軍攻擊。$B$B我們既沒有時間也沒有多餘的物資來建造防禦工事,但我們可以放置一些路障來協助我們的弟兄遮蔽火焰與分散天譴軍的攻勢$B$B拿著這個路障裝置前往逝往英雄山谷,在奧多薩的西側。尋找我設置的標記並用這個裝置在那建構你的路障。','破天者號上的薩沙理安要你使用柵欄構築工具包建造八座路障。','','到寒冰皇冠的破天者號找薩沙理安。','建造路障','','','',0), +(13334,'zhTW','染血的旌旗','在寒冰皇冠的逝往英雄山谷區域,往奧多薩的西側,天譴軍尋求了已逝的亡靈來對抗我們。天譴將領們喚醒了山谷的亡者並將其注入了可怕的力量與憤恨。冰冠區域裡由天譴將領們攜帶的旌旗就是這股力量的來源。殺掉執旗者,你便能衰弱他們率領的那些邪化戰士們。$B$B只有你,能幫我們解決這個困境,並在我們的主力能夠進軍前測試抵抗勢力。','破天者號上的薩沙理安要你殺掉5個天譴執旗者、5個天譴轉化者、20個轉化的英雄。','','到寒冰皇冠的破天者號找薩沙理安。','','','','',0), +(13336,'zhTW','受選者的血','那些自稱依米亞的維酷人相當受到巫妖王的重用,他們在寒冰皇冠中央地帶建立了一個屬於他們的城市。在我們進攻冰冠城塞之前尚需許多準備,而我們目前正面對的一樣就是進攻這些自稱「受選」於巫妖王的維酷人。$B$B前往他們的城市依米海姆,在他們的地盤上擊敗他們。讓他們明白誰才是這裡無庸置疑的強者。','破天者號上的上尉騎士德羅許要你到依米海姆殺掉20個維酷族。','','到寒冰皇冠的破天者號找上尉騎士德羅許。','殺死依米海姆維酷人','','','',0), +(13337,'zhTW','鐵牆壁壘','鐵牆壁壘眺望著逝往英雄山谷,在奧多薩的西側、稱霸著四面八方的週遭。只要壁壘還未攻下我們根本無法越雷池一步。駐防者是邪惡的葛林克爾與他詛咒神教的爪牙們。$B$B只要你能削弱葛林克爾的力量,至少我們的軍隊就多少能在進軍時與之抗衡。拿著這個歪曲符文,在壁壘盡頭葛林克爾的寶珠旁釋放符文之力,應該多少能夠引起這個召喚師的注意。','擊敗邪惡的葛林克爾然後回報破天者號上的薩沙理安。','','到寒冰皇冠的破天者號找薩沙理安。','','','','',0), +(13338,'zhTW','寇普雷薩的守衛者','寇普雷薩,又稱驚怖之門。將是阻止我們進攻冰冠城塞的最後一道防線。坐落在焚焰地與冰冠後方、鐵牆壁壘的南側。但當我們的軍隊行軍至此必定早已筋疲力竭。$B$B我們必須事先削弱它的防禦,否則軍隊很有可能就在此瓦解。$B$B這個要塞駐守著巫妖王最可怕與最狂熱的手下。盡你的全力毀掉這些守衛,那麼或許我們還有一線希望。','破天者號上的薩沙理安要你殺掉5個恐慌先驅者與 5個寇普雷薩守護者。','','到寒冰皇冠的破天者號找薩沙理安。','','','','',0), +(13340,'zhTW','聯合作戰','我們需要更多的部隊投入依米海姆。$B$B任何稍微有頭腦的戰士都會告訴你絕對不能輕視維酷人。在依米海姆的戰況似乎更加深了這個論點。截至目前,維酷人意圖展現肆無忌憚的力量,似乎要證明著巫妖王的眼光沒有看錯。$B$B地面指揮官蘇加正在監督著進攻。城市本身位於寒冰皇冠的中央-蘇加的部隊駐紮在冰冠邊緣,城市的北側。','向依米海姆北側冰冠邊緣的地面指揮官蘇加報到。','','','','','','',0), +(13342,'zhTW','不只是蟲子','好啦,$g朋友:小姐;,是時候安置點蟲子了。$b$b別緊張,我不是說真的蟲子,但同樣可以達到目的。$b$b在奧多薩的北部,詛咒神教的虛無召喚者奴役了一些惡魔爪牙。使用節杖來從被奴役的爪牙的屍體上吸取一些黑暗物質,然後用在他們的召喚水晶來讓我們的小間諜現身。$b$b直到它被發現之前,黑暗信差都會作為我們的眼睛,暗中地偵察敵人的一舉一動。','破天者號上的薩沙理安要你在奧多薩蒐集5個黑暗物質來召喚黑暗信差。','','到寒冰皇冠的破天者號找薩沙理安。','召喚黑暗信差','','','',0), +(13345,'zhTW','需要更多資訊','詛咒神教雖是出了名的成事不足、敗事有餘,但這次似乎不太一樣...$b$b或許是事關巫妖王讓他們熱血沸騰。但無論如何,他們看似前所未有地自信。我們得抽絲剝繭地找出到底這股自信的來源是什麼。$b$b我想關鍵應該在那些神教研究員身上。找出他們所為何來,然後向我回報。','破天者號上的薩沙理安要你在奧多薩的神教研究員身上蒐集3頁詛咒神教研究,然後編成詛咒神教論文。','','到寒冰皇冠的破天者號找薩沙理安。','','','','',0), +(13346,'zhTW','別讓邪惡伺機喘息','這些傻瓜這次還真的歪打正著了,而且極有可能阻礙我們的計畫!$b$b這一區的領袖,雅路麥斯,在儀式中犧牲自己讓他的僕從引導能量注入他的靈魂。$b$b如果讓他持續修練,很快他們就能將他們主子的靈魂轉化成一股強大的對手。$b$b蒐集雅路麥斯的心臟、顱骨、權杖與長袍然後在雅路麥斯的殘骸結合。$b$b快點,$r! 在他尚未變得太過強大之前摧毀他!','破天者號上的薩沙理安要你在奧多薩擊敗飛升的雅路麥斯。','','到寒冰皇冠的破天者號找薩沙理安。','擊敗飛昇的雅路麥斯','','','',0), +(13091,'zhTW','身為水駭體的藝術','我洞穴外的水閘,運用了許多維酷魔法中仍然未解的基本原理。我要教你一點小把戲,讓你好好地玩弄這些單細胞生物一會兒,然後利用他們在卓頓海姆引起一場浩劫!<被女妖寄生的維酷人在空中演練了魔法,並以巨大的手指,觸碰你的額頭。>$B$B去吧,打開門進入水閘去。你將會看到一個水駭體,好好地運用它,摧毀我們的敵人!','尼約達村的骸骨女巫要你操控一隻水駭體,在卓頓海姆一帶,以其殺害10個維酷人。$B$B定義上合格的維酷人指卓頓海姆沉睡看守者、卓頓海姆戰士、默約丁水魔導師、尼約達女矛侍、和英靈殿瓦苟。','','到寒冰皇冠的尼約達村找骸骨女巫。','在操控水駭體時殺害卓頓海姆的維酷人','','','',0), +(13092,'zhTW','解讀骸骨','操控這種生物的一個好處是,我可以使用她所有的能力。作為一個骸骨女巫及符文解讀者,她擁有占卜並決定他人命運的能力。$B$B<骸骨女巫不懷好意地笑著。>$B$B幸虧我就擁有影響解讀結果的能力。$B$B將你在卓頓海姆殺害的維酷人骸骨帶來給我,我將用來占卜你的命運,並允許你自己決定它。','尼約達村的骸骨女巫指示你,收集15份維酷骸骨。','','到寒冰皇冠的尼約達村找骸骨女巫。','','','','',0), +(13093,'zhTW','解讀骸骨','','','','到寒冰皇冠找骸骨女巫。','','','','',0), +(13348,'zhTW','毫無意義','你懂了嗎?你這些軍隊去對抗王子的部隊根本就是去增加對方的人數。$B$B當然我不期望你了解…你大概會落得跟其他人的下場一樣。我看你最好還是回去找剛剛派你來那些人吧。他們可能已經在擔心你了。','向奧格林之錘上的寇爾提拉‧亡織者回報。','','','','','','',0), +(12838,'zhTW','情報收集','我得要知道血色突襲軍今天在策劃些什麼。你要替我執行這項任務。$B$B飛往突襲軍港口,然後從他們的軍備箱裡面偷出文件來。箱子一定有上鎖,所以你得要用你想的到的辦法從血色突襲軍成員身上把鑰匙弄來。','死亡高崗的野牛‧厲禍要你收集5份突襲軍情報文件。','','到寒冰皇冠的死亡高崗找野牛·厲禍。','','','','',0), +(13349,'zhTW','霜育之源','我們必須加緊攻勢。別讓天譴軍團有機會喘息。$B$B辛德拉苟莎之殞就在逝望山谷之東。詛咒神教就在那一帶活動,受巫妖王的不死維酷僕從們嚴密監督,伺機而動。$B$B那是個含有強大能量的地區,也算是藍龍軍團墳場。可怕的霜育冰龍就是自這些藍龍遺骸中長成。$B$B攻擊此地應該能對敵人的冰霜巨龍兵源造成重創。你願意試試嗎,$n?','奧格林之錘上的寇爾提拉‧亡織者要你在辛德拉苟莎之殞殺掉5個巨龍復生者、8個教徒墮落者以及3個維酷死靈領主。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','','','','',0), +(12839,'zhTW','上將的偉大計畫','起初這些筆記看起來就像是你在找的其他資料一樣。但,迅速讀過內容之後你發現不是這麼回事。$B$B這封信上寫著韋斯溫上將就在島上的某處,但他目前仍然隱藏著自己的行蹤。他談到一個就快降臨的光榮之日,到時候血色突襲軍將會先解決巫妖王,然後再洗淨整個世界,為艾澤拉斯帶來秩序。$B$B統領指揮會想看看這封信的!','將上將的信箋交給死亡高崗的指揮統領艾睿特。','','到寒冰皇冠的死亡高崗找指揮統領艾睿特。','','','','',0), +(12840,'zhTW','絕對機密','如果真的有人知道上將在哪裡,一定就是他在突襲軍港口的船長們了。$B$B<統領指揮摩擦著他的雙手。>$B$B威辛頓和哈特弗德,如果我沒記錯的話。去把情報逼問出來,然後了結他們的小命。$B$B我要知道上將到底藏在哪裡!','死亡高崗的指揮統領艾睿特要你從威辛頓船長和哈特弗德船長口中逼問出情報來。','','到寒冰皇冠的死亡高崗找指揮統領艾睿特。','逼問並殺死威辛頓船長','逼問並殺死哈特弗德船長','','',0), +(12847,'zhTW','第二次機會','我聽說過他們的大教堂裡有個大主教,但是我完全沒想到他們是把蘭格瑞給復活起來,又讓他晉升了!赤紅大教堂有重兵駐防,而且只有一個出入口,所以你得找些幫手。$B$B我們還是得弄清楚上將在哪裡,但這次我們絕不依賴運氣!$B$B帶著這個裝置。一旦你殺死了大主教,就可以用它來開啟一道傳送門讓我通過。$B$B我要直接從他的靈魂上把答案逼出來!我們一定會把海軍上將韋斯溫找出來的!','殺死大主教蘭格瑞,然後在他的屍體旁召喚艾睿特之門。等指揮統領艾睿特訊問完大主教的靈魂之後,在赤紅大教堂與他交談。','','到寒冰皇冠的死亡高崗找指揮統領艾睿特。','召喚艾睿特之門','召喚埃雷特之門','','',0), +(13106,'zhTW','黑色守望','天譴軍團有個稱作血肉作坊的後勤設施,專門生產憎惡體和血肉巨人。如果我們能破壞它,就能使巫妖王軍隊的一個重要部分停擺。$B$B我已派黑騎兵亞爾利去了那一帶。她在山脊上建立了一個稱作黑色守望的小基地,可以俯瞰血肉作坊和寇普雷薩之西。我被通知,銀白十字軍也派了人前去協助行動,然而黑騎兵知道怎麼做。找到她並協助她。','到寒冰皇冠的黑色守望和黑騎兵亞爾利談話。','','','','','','',0), +(13117,'zhTW','他們打哪來的?','巫妖王的部屬,在血肉作坊中日以繼夜地生產憎惡體和血肉巨人。$B$B不僅如此,越來越多的骷髏建造者,也如潮水般湧出,他們工作的進度不斷加快。$B$B如果我們不能儘早察覺他們打哪來的,還有他們如何能工作得如此迅速,我們就會被敵人的大軍給淹沒。往東南方搜尋看看,試圖找出這些骷髏的來源。','調查血肉作坊東南方的召喚祭壇,然後向黑色守望的黑騎兵亞爾利回報。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','召喚祭壇已調查','','','',0), +(13119,'zhTW','摧毀祭壇','所以他們正在祭壇上召喚工人與戰士嗎?$B$B他們就是我們的首要目標。召喚大師應該會有根法杖,好讓他啟動傳送門。如果你能殺死召喚大師,並奪下法杖,你就能使傳送門超載,然後摧毀祭壇。$B$B就這麼對付那四個祭壇,一旦它們都被摧毀,回來向我回報。','殺掉召喚大師札洛德,並使用他的召喚法杖摧毀四座召喚祭壇。完成之後,回到黑色守望,向黑騎兵亞爾利回報。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','摧毀第一召喚祭壇','摧毀第二召喚祭壇','摧毀第三召喚祭壇','摧毀第四召喚祭壇',0), +(13120,'zhTW','死亡凝視','血肉作坊是個龐大的設施,我們很難面面俱到地了解裡面發生的所有事。幸好,我有個計畫。$B$B<雅爾利從披風的口袋裡取出一顆寶珠,並遞給你。>$B$B這是顆死亡凝視寶珠。透過它,我們可以觀察到天譴軍團的一舉一動,然後決定最好的進攻方案。$B$B將這些寶珠安置在三個重點區域的臺座上 - 西南邊的憎惡體實驗室與血肉巨人實驗室,還有西邊遠處,綠色熔爐的周圍區域。','將死亡凝視寶珠安置於憎惡體實驗室寶珠座、血肉巨人實驗室寶珠座和熔爐區寶珠座,然後回黑色守望向黑騎兵亞爾利回報。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','在憎惡體實驗室安置寶珠','在血肉巨人實驗室安置寶珠','寶珠已被安置在熔爐區','',0), +(13121,'zhTW','透過另一隻眼','如果我們打算要進行下一步,我們一定要利用巫妖王的工具來反制他。$B$B越過山脈往西南方去,就是庫爾加拉要塞。卓頓海姆的神諭者就躲在其中,接收主人的命令並且透過巫妖王之眼來窺探偵察。$B$B你要對付的就是那顆眼睛。雖然無法用它來穿透冰冠城塞的帷幕,但你還是可以用它來觀察其他地方,讓我們知道哪裡才是最好的進攻路線。','尼約達村的骸骨女巫賦予你新的任務,要利用巫妖王之眼收集情報。','','到寒冰皇冠的尼約達村找骸骨女巫。','為骸骨女巫收集到情報','','','',0), +(13351,'zhTW','暗中偵察','一切都在計畫之中。我們策劃了一連串完美的計畫來奪下死亡之門。傷亡雖是必然, 但最終的勝利將屬於我們-咬緊牙關對付那些愛管閒事的聯盟...$b$b不論如何,我們的下一個目標是奧多薩:荒寂之門。飛往那兒並試著熟悉敵人的據點。$b$b當你回來我會再給你進一步指示。','奧格林之錘上的寇爾提拉‧亡織者要你飛往荒寂之門,偵察門的南、中、北、西北區域。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','前往奧多薩南部','前往奧多薩中部','前往奧多薩北部','前往奧多薩西北部',0), +(13352,'zhTW','舉手之勞','詛咒神教掌控著荒寂之門,是嗎? 這並不意外。$b$b找點樂子的時候到了。你提到在門的南端有些新教徒加入。他們幾乎都會攜帶著一個特別的道具-一種幻術寶珠。$b$b這東西通常被教徒用來偽裝,讓他們潛入、滲透或混進他們的敵人。$b$b殺了這群傻瓜直到你取得寶珠, $c,然後用在征服者身上。','奧格林之錘上的寇爾提拉‧亡織者要你從奧多薩的惡劣新兵身上取得幻術寶珠,然後在3個黑暗征服者身上使用它。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','黑暗征服者變得步履蹣跚並隨之倒下','','','',0), +(13353,'zhTW','舉手之勞','看樣子又有許多新血加入了詛咒神教。你知道該怎麼做...$b$b在門的南部區域,新加入的教徒正被訓練著,他們幾乎都會攜帶著一個特別的道具-一種幻術寶珠。$b$b這東西通常被教徒用來偽裝,讓他們潛入、滲透或混進他們的敵人。$b$b殺了這群傻瓜直到你取得寶珠,然後用在征服者身上。','奧格林之錘上的寇爾提拉‧亡織者要你從奧多薩的惡劣新兵身上取得幻術寶珠然後用在3個黑暗征服者身上。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','黑暗征服者變得步履蹣跚並隨之倒下','','','',0), +(13354,'zhTW','切斷指揮鍊','從你的報告與我對神教的印象裡,他們在每個駐紮點都派駐了一個監督者來協調各個行動。$b$b我相信也許解決掉這些帶頭的效果非常短暫,但至少能拖延他們的戰術並破壞一點平衡,這對我們目前的處境已經非常值回票價。$b$b解決掉那些監督者以後再回來找我。','奧格林之錘上的寇爾提拉要你前往奧多薩擊敗監督者菲德里斯、監督者薩夫林、監督者維拉傑與監督者杰昆。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','殺掉監督者菲德裡斯','殺掉監督者傑昆','殺掉監督者維拉傑','殺掉監督者薩夫林',0), +(13355,'zhTW','重製失敗','我從這兒都能嗅到鍋子的臭味,但這不是瘟疫之鍋。$b$b想加入神教的信徒都會被強迫喝下一種遺忘劑,將他們的意志奪去並變成巫妖王永遠的奴隸。$b$b有人說這藥劑裡面包含著被殘忍地折磨後屠殺的受害者靈魂,但我從未成功的重製這樣的藥劑...$b$b將這個瓶子裝滿分別從門的西北區域的三個大鍋取出的樣本,然後拿給首席工程師銅爪。','奧格林之錘上的寇爾提拉‧亡織者要你利用隔離之瓶從3個教徒的大鍋帶回樣本給首席工程師栓鉗。','','到寒冰皇冠的奧格林之錘找首席工程師銅爪。','收集藍色樣本','收集綠色樣本','收集暗色樣本','',0), +(13356,'zhTW','重新測試','這樣應該就行了!$b$b那些邪惡的神棍還想把更多靈魂放進他們的噁心果汁? 我說我們就幫他們一把!$b$b來把這乾了-別擔心,我複製了很多…我幾乎敢保證這唯一的效果是當你殺掉一個教徒以後幫你找出他的靈魂菁華。$b$b等你蒐集到一定的量,就把那坨扭曲惡靈的苦痛糾結凝塊扔進任何一個鍋子$b$b讓他們嚐嚐自食惡果的滋味!','奧格林之錘上的首席工程師銅爪要你將苦痛糾結凝塊丟進奧多薩的一個大鍋中。','','到寒冰皇冠的奧格林之錘找首席工程師銅爪。','消滅苦痛糾結凝塊','','','',0), +(13357,'zhTW','重新測試','那些邪惡的教徒還想把更多靈魂放進他們的噁心果汁裡? 我說我們就幫他們一把!$b$b來把這乾了 - 別擔心,我複製了很多...我幾乎敢保證這唯一的效果就是當你殺掉一個教徒以後,這會幫你找出他的靈魂菁華。$b$b等你蒐集到一定的量,就把那坨扭曲惡靈的苦痛糾結凝塊扔進任何一個鍋子$b$b讓他們嚐嚐自食惡果的滋味!','奧格林之錘上的首席工程師銅爪要你將苦痛糾結凝塊丟進奧多薩的一個大鍋中。','','到寒冰皇冠的奧格林之錘找首席工程師銅爪。','消滅苦痛糾結凝塊','','','',0); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(13358,'zhTW','不只是蟲子','好啦,$g朋友:小姐;,是時候安置點蟲子了。$b$b別緊張,我不是說真的蟲子,但同樣可以達到目的。$b$b在奧多薩的北部,詛咒神教的虛無召喚者奴役了一些惡魔爪牙。使用節杖來從被奴役的爪牙的屍體上吸取一些黑暗物質,然後用在天譴召喚水晶來讓我們的小間諜現身。$b$b直到它被發現之前,黑暗信差都會作為我們的眼睛,暗中地偵察敵人的一舉一動。','奧格林之錘上的寇爾提菈要你在奧多薩蒐集5個黑暗物質來召喚黑暗信差。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','召喚黑暗信差','','','',0), +(13359,'zhTW','龍殞之地','藍龍一族全數都在此隕落。但現在,一個接著一個,他們被「他」的僕從召回。$B$B他親手將最年長的一些復生。帶回一些幼龍的骨塵給我。我將告訴你他是如何辦到的。','辛德拉苟莎之殞的米希阿斯‧薩爾奈,請你取得6個幼龍骨塵。','','到寒冰皇冠的辛德拉苟莎之殞找米希阿斯·薩爾奈。','','','','',0), +(13360,'zhTW','揭曉之時','你有好多問題,$n。你是唯一能看到我的人,因為你曾經碰過某個原本是「他」的物品…你想得起來嗎?但我不能就這樣告訴你…那樣「他」會非常生氣。他已經不只是一個王子了…他變成了國王!$B$B到白骨之廷跟我碰面,就在冰冠城塞的北方,你可以自己看看。','到白骨之廷找米希阿斯‧薩爾奈談話。','','','','','','',0), +(13361,'zhTW','王子與獵手','在王子變成國王以前。他打了好多好多仗...但唯一的一次,他差點送了命。$B$B那場戰鬥就在這裡。在你讓我展示事情的經過以後,你就全部都了解了。$B$B找一塊染血之石然後把它撿起來。然後你就會看到一切的經過...','白骨之廷的米希阿斯‧薩爾奈要你尋找一個染血之石然後完成王子的宿命。','','到寒冰皇冠的白骨之廷找米希阿斯·薩爾奈。','王子的宿命','','','',0), +(13362,'zhTW','最沉重的負荷','現在你知道你要對付的是什麼,$n。一個沒有痛覺...不會後悔...喪失人性的敵人。一個為達目的不擇手段的敵人。$B$B這顆心就是他的弱點而現在他知道你發現了。$B$B如果你還要回去,你最好帶些幫手。他不會再就這樣毫無防備了。','回報奧格林之錘上的寇爾提菈。','','','','','','',0); + +-- +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(13363,'zhTW','銀色的十字軍','如你所說的傳言確實流傳在死亡騎士間。我一直以為故事會更...象徵性一點。$B$B我們得警告其他人,但必須非常小心。一旦巫妖王獲悉我們的舉動,他一定會將心臟移往他處-我們不會再得到此般的機會了$B$B聯盟與部落都曾經被詛咒神教滲透過。而黯刃騎士團則太接近天譴軍團。$B$B我們得與提里奧‧弗丁和他的銀白十字軍談談。','與十字軍之巔的大領主提里奧‧弗丁談談。','','','','','','',0), +(13364,'zhTW','提里奧的決斷','就在今晨,我的斥候才告訴我詛咒神教的一行人,正由冰冠城塞帶著一件聖物前往黑暗大教堂。$B$B現在我知道那應該就是阿薩斯的心臟...保存著他最後剩下的一丁點人性。$B$B這是聖光給我們的預兆。只要這聖物尚存在,就表示阿薩斯‧米奈希爾有朝一日還能找回他的人性!$B$B到教堂入口見我。記得帶上教徒侍僧兜帽-我們要喬裝進去。','十字軍之巔的提里奧‧弗丁要你取得,並帶著教徒侍僧兜帽到黑暗大教堂入口見他,就在冰冠城塞的西北邊。','','到寒冰皇冠的十字軍之巔找大領主提里奧·弗丁。','提裡奧的決斷','提裡奧的嘗試','','',0), +(13365,'zhTW','不只是蟲子','詛咒教徒已經發現了你的上個信差,$r。$b$b但在消息尚未證實前,持續監視他們的每一步格外重要。$b$b在奧多薩使用節杖來從被奴役的爪牙的屍體上吸取一些黑暗物質,然後用在天譴召喚水晶來讓我們的小間諜現身。$b$b直到它被發現之前,黑暗信差都會作為我們的眼睛,暗中地偵察敵人的一舉一動。','奧格林之錘上的寇爾提菈要你在奧多薩蒐集5個黑暗物質來召喚黑暗信差。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','召喚黑暗信差','','','',0), +(13366,'zhTW','需要更多資訊','詛咒神教雖是出了名的成事不足、敗事有餘,但這次似乎不太一樣。$b$b或許是事關巫妖王讓他們熱血沸騰。但無論如何,他們看似前所未有地自信。我們得抽絲剝繭地找出到底這股自信的來源是什麼。$b$b我想關鍵應該在那些神教研究員身上。找出他們所為何來,然後向我回報。','奧格林之錘上的寇爾提拉要你在奧多薩的神教研究員身上蒐集3頁詛咒神教研究,然後編成詛咒神教論文。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','','','','',0), +(13367,'zhTW','別讓邪惡伺機喘息','這些傻瓜這次還真的歪打正著了,而且極有可能阻礙我們的計畫!$b$b這一區的領袖,雅路麥斯,在儀式中犧牲自己讓他的僕從引導能量注入他的靈魂。$b$b如果讓他持續修練,很快他們就能將他們主子的靈魂轉化成一股強大的對手。$b$b蒐集雅路麥斯的心臟、顱骨、權杖與長袍然後在雅路麥斯的殘骸結合。$b$b快點,$r! 在他尚未變得太過強大之前摧毀他!','奧格林之錘上的寇爾提拉,要你在奧多薩擊敗飛升的雅路麥斯。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','擊敗飛昇的雅路麥斯','','','',0), +(13368,'zhTW','別讓邪惡伺機喘息','是雅路麥斯...我能夠感應到,他的力量又增強了。顯然他的爪牙又重新開始對他灌注能量。如果他得到足夠的休養,很快地他就會變成一個可怕的威脅。$b$b回到他在奧多薩北部的處所。蒐集雅路麥斯的心臟、顱骨、權杖與長袍然後在雅路麥斯的殘骸結合。$b$b快點,$r! 現在還來得及摧毀他!','奧格林之錘上的寇爾提拉,要你在奧多薩擊敗飛升的雅路麥斯。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','擊敗飛昇的雅路麥斯','','','',0), +(13373,'zhTW','激進科學的好處','我把我們的綠外線科技應用在每架徵招轟炸機上;應該能讓你順利度過第一次前往敵方領空的任務!去找利基·棘扭弄架轟炸機,然後飛進轟炸地!$B$B機上應該都配有炸彈、火箭筒與護盾。保持護盾的能量然後對轟炸地上的那些天譴軍團投彈。達成目標後再回來找我,後續還有任務等著你。','偏激工程師泰茲菈要你殺掉40個轟炸地步兵、8個轟炸地隊長與15個石像鬼伏擊者。','','到寒冰皇冠的奧多薩:荒寂之門找偏激工程師泰茲菈。','','','','',0), +(13374,'zhTW','炸翻天!','$N,你將要在僅有綠內光保護的情況下,深入敵佔區。只有最好的飛行員才能接到這種任務!$B$B去向裡茲爾再要一架轟炸機。你要駕駛它飛過失落希望之穀。這次的任務要同時對付空中和地面目標,所以你一定要注意觀察,並保證護盾充滿能量!$B$B祝你好運!','邊緣技師塔茲拉要你殺死轟炸場步兵、石像鬼伏擊者、霜巢斥候,並摧毀天災戰車。','','到寒冰皇冠的轟炸地找偏激工程師泰茲菈。','','','','',0), +(13376,'zhTW','長途轟炸:失落希望之穀!','$N,戰爭還在繼續。幸運的是,我們存儲了充足的炸彈和火箭!新一輪的轟炸又要開始了——這次轟炸任務的航線很長,你要飛過轟炸場,進入失落希望之穀。再去領一架綠外線轟炸機,把那些天災軍團炸成碎片吧!','邊緣技師塔茲拉要你去殺死50個轟炸場步兵、20只石像鬼伏擊者和12條霜巢斥候,並摧毀12架天災戰車。','','到寒冰皇冠的奧多薩:荒寂之門找偏激工程師泰茲菈。','','','','',0), +(13378,'zhTW','首席技師考伯克拉','與首席技師考伯克拉談談。','與首席技師考伯克拉談談。','','','','','','',0), +(13379,'zhTW','綠色科技','你應該去見一見塔茲拉。嗯,你真的應該去見見她。她掌握了一種被稱為“綠外線”的新波長。她可以使用這種光波在天災軍團的眼皮底下隱藏行跡!距離之近,足夠轟炸他們了!$B$B我會給你綠外線視界,這樣你就可以找到她了。她就藏身在荒涼之門奧爾杜薩上面。去吧,去吧……我知道她一直在為那些急著上西天的英雄提供幫助!我是說……急著把天災軍團送上西天!$B$B另外,$N,聯盟剽竊了我們的技術,他們的隱形機場也在附近。你要繞開那座插著聯盟旗幟的圓頂!','與邊緣技師塔茲拉談一談。','','','','','','',0), +(13380,'zhTW','委以重任','綠外線技術可以讓我們在天災軍團的鼻子底下大搖大擺地行動!而且,我們把這種技術應用到了專門製造的轟炸機上……但不是為了隱藏它們,完全不是那麼回事!我們用綠外線技術來保護它們!$B$B去向卡倫·諾爾要一架轟炸機,然後飛到轟炸場上空……用它的護盾和炮臺保護自己,並使用投彈器攻擊天災軍團。好好練習一下,然後再回來找我。我還有很多更重要的任務要交給你呢!','吉普利·基羅赫斯要你去殺死40個轟炸場步兵、8個轟炸場軍官和15只石像鬼伏擊者。','','到寒冰皇冠的奧多薩:荒寂之門找碁伯里·基羅赫茲。','','','','',0), +(13381,'zhTW','目標是什麼?','穿好你的幸運襪子吧,$n,然後念一遍你最喜歡的祈禱詞。這個新任務就像遠房親戚的拜訪一樣考驗智慧和毅力!$B$B去向卡倫·諾爾再要一架轟炸機。你要駕駛它飛過轟炸船,進入失落希望之穀上空。這次的任務的目標更多,要同時對付空中和地面目標。所以你一定要將護盾充滿能量,並裝填好彈藥,$n!我等著你勝利歸來!','吉普利·基羅赫斯要你殺死轟炸場步兵、石像鬼伏擊者、霜巢斥候,並摧毀天災戰車。','','到寒冰皇冠的奧多薩:荒寂之門找碁伯里·基羅赫茲。','','','','',0), +(13852,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的佛立金‧輪扳要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找佛立金·輪扳。','','','','',0), +(13382,'zhTW','長途轟炸:失落希望之穀','戰爭還在繼續!我有新指令要下達給你。這次轟炸任務的航線很長,你要飛過轟炸場,進入失落希望之穀——你準備好了之後,就去向卡倫領一架轟炸機,對那些天災軍團狂轟濫炸一番吧!','吉普利·基羅赫斯要你去殺死50個轟炸場步兵、20只石像鬼伏擊者和12條霜巢斥候,並摧毀12架天災戰車。','','到寒冰皇冠的奧多薩:荒寂之門找碁伯里·基羅赫茲。','','','','',0), +(13133,'zhTW','尋找遠古英雄','快點,$n,去西南方的先祖大廳!$B$B裡面你會找到休眠的默約丁。喚醒他們,直到你找到伊斯卡德。找到他之後,對他使用這個護符,並將他帶回來見我。$B$B現在馬上出發。我可沒時間讓你浪費!','尼約達村的骸骨女巫要求你,帶回伊斯卡德。','','到寒冰皇冠的尼約達村找骸骨女巫。','將伊斯卡德帶給骸骨女巫','','','',0), +(13134,'zhTW','讓他們血濺五步','沒有保持肢體機能用的血液,和用以保存肉體的防腐液,天譴軍團就無法製造他們的血肉怪物。如果我們能切斷這兩者的補給,他們的軍隊就會崩解,而我們也就可以輕易地摧毀這些玩意。$B$B在他們組裝血肉巨人和憎惡體的實驗室中,你可以找到裝著防腐液的大缸與盛裝鮮血的大型寶珠。摧毀它們,並讓任何膽敢阻擋你的人都倒下!','黑色守望的黑騎兵亞爾利要求你,摧毀5個盛裝防腐液的缸子,以及5個血魄寶珠。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','粉碎血魄寶珠','摧毀盛裝防腐液的水缸','','',0), +(13136,'zhTW','鋸齒裂片','你從一名食屍鬼的屍體中,拔出了這塊鋸齒狀的尖利裂片。金屬的刃口並不平整,表示它要不就是由生手煉鑄而成,要不就是由一塊更大的部份碎裂出來。$B$B你想起,在血肉作坊與食屍鬼對陣時,曾看過類似的碎片嵌在他們的屍體上,這讓你不禁想知道,碎片的製造者,究竟為何如此大費周章。若你收集一些類似的碎片,並帶給十字軍歐拉金‧山瑞斯,或許他會有些想法。','將10片鋸齒裂片,帶給黑色守望的十字軍歐拉金‧山瑞斯。','','到寒冰皇冠的黑色守望找十字軍歐拉金·山瑞斯。','','','','',0), +(13383,'zhTW','吉普利·基羅赫斯','地精們幸運地發現了一種新能量。他們管這種能量叫“綠外線”。怎麼說呢……如果這些瘋子發現了一種新的金子,而它居然不是綠的,那我都能變成獨眼食人魔了。$B$B我要你去找吉普利·基羅赫斯。他在荒涼之門奧爾杜薩上空的一座規模隱形聯盟機場上,領導著綠外線的逆向工程研究。我會給你綠外線視界,這樣你就可以找到他了。到插著聯盟旗幟的那座圓頂上去吧——但是如果你飛到部落的機場附近的話,你就會遇到大麻煩了,而且還是綠色的麻煩。','首席技師波爾維克要你轉至荒涼之門奧爾杜薩上空的聯盟隱形機場,並與吉普利·基羅赫斯談一談。','','','','','','',0), +(13386,'zhTW','趁隙突破','我有個有趣的任務要交給你,$n。假定你有興趣接受挑戰的話。$B$B我們得知冰冠城塞下方有一個缺口。我們的工程師研究了建築結構,並推定它是一個結構上的弱點。$B$B我們已經派了一些人手,帶著我們「借來」的薩鋼炸彈前往該處,由坎達爾上尉指揮。$B$B只要略施援手,我們就可以給天譴軍一記迎頭重擊。你怎麼說,$n?','與冰冠城塞底下的坎達爾上尉交談。','','','','','','',0), +(13137,'zhTW','不名譽戰鬥','在西南方最高的山頂上,戰傷尖塔俯視著卓頓海姆。這裡是維酷人的聖地,就進行光榮戰鬥的地點偏好而言,其重要性僅次於英靈殿。$B$B我們應該在那上面觀賞不名譽戰鬥。$B$B召集你的夥伴飛往尖塔。當你準備好了,點燃你的火源信號,我將以伊斯卡德的面目出現。$B$B我們將進行戰鬥,你將會嬴,而瓦德瑪卓必定會前來觀看這場戰鬥!','尼約達村的骸骨女巫要求你,在戰傷尖塔上擊敗伊斯卡德。','','到寒冰皇冠的尼約達村找骸骨女巫。','在戰鬥中擊敗伊斯卡德','','','',0), +(13392,'zhTW','重返地表','你該走了。我身後有個傳送門。它將帶你回到地表。$B$B我們會再見。「他」還在找你。$B$B等「他」找到你只是遲早的事。','回到破天者號上的薩沙理安身邊。','','','','','','',0), +(13138,'zhTW','我熔...熔化了!','<歐拉金以著盔甲的一手,握住一片裂片。>$B$B施加足夠力量的話,它足以刺穿盔甲。我們必須查明它的原料,和巫妖王使用它的意圖。$B$B去東邊,緊鄰冰冠城塞的瑪里庫立斯。根據我們僅有的一點情報,那裡充斥著鎔鍊與鍛造用的器具。帶這些裂片過去,在瑪里庫立斯底部的開放熔爐中鎔鍊它。一旦它被鎔鍊並重鑄,我們就能辨明它的成分。','使用瑪里庫立斯熔爐下層附近的鋸齒裂片袋。將熔化的金屬錠帶回給黑色守望的十字軍歐拉金‧山瑞斯。','','到寒冰皇冠的黑色守望找十字軍歐拉金·山瑞斯。','','','','',0), +(13394,'zhTW','別太認真','你要用這玩意對付天譴軍團?我想你大概贏不了。$B$B我相信你能摧毀大概上百…甚至上千個天譴軍,但還是沒用的。至少在這個情況沒有用。$B$B等你玩夠了再來北邊找我,那兒有個老舊的駐軍營地。我會讓你了解你真正要面對的敵人。','利用翻新的石毀車在逝望山谷摧毀150隻被分解的食屍鬼、20名霜顱法師、2名骸骨巨人。完成後與第一軍團前線營地的米希阿斯‧薩爾奈對話。','','到寒冰皇冠的逝望山谷找米希阿斯·薩爾奈。','','','','',0), +(13395,'zhTW','詛咒軍團','你大概以為你很厲害--打敗這些不死生物,用你的戰爭機器壓碎他們的骸骨。$B$B但這跟創造他們的力量比起來微不足道。$B$B我曾經看過王子殿下親自表演。我可以示範給你看...如果你想的話。','第一軍團前線營地的米希阿斯‧薩爾奈要求你,喚起100名食屍爪牙,以讓它們加入軍隊。','','到寒冰皇冠的逝望山谷找米希阿斯·薩爾奈。','喚起食屍爪牙','','','',0), +(13140,'zhTW','瑪里庫立斯的符文鐵匠','關於你取得的那些裂片,唯一可能的產地就是瑪里庫立斯。它是巫妖王金屬工業的所在地,就在寇普雷薩的東邊。$B$B令人困惑的是,無論是組合憎惡體和血肉巨人,或者召喚骷髏僕役,都不需要這些金屬。找到在瑪里庫立斯底層工作的骷髏符文鐵匠,並弄來他們正在加工的板子。我們必須知道,為什麼會在血肉作坊裡發現這些金屬。','帶回5塊符文薩鋼板給黑色守望的十字軍歐拉金‧山瑞斯。','','到寒冰皇冠的黑色守望找十字軍歐拉金·山瑞斯。','','','','',0), +(13397,'zhTW','辛德拉苟莎之殞','你真的天生適合這行,$n。你瞧,通常當我指派任務給其他士兵。他們完成的機率大概一半一半,至於回來的機率...呃,大概要再少一點。$B$B但是你,永遠是使命必達。就像地精鐘錶一樣精準!$B$B總之呢,我還有任務給你。辛德拉苟莎之殞,就在山谷東邊。那邊有許多的教徒正蠢蠢欲動,更別提冰霜巨龍的紛擾。我要你去給我教訓那些傢伙。$B$B我討厭那些教徒。','破天者號上的薩沙理安要你在辛德拉苟莎之殞殺掉5個巨龍復生者、8個教徒墮落者以及3個維酷死靈領主。','','','','','','',0), +(13142,'zhTW','女妖的復仇','這一刻終於到來了,$n。你和你的朋友必須挑戰巴拉加德堡壘的領主,卓頓海姆的主宰者,共主巴拉加德。$B$B在卓頓海姆西南邊,登上堡壘的頂端,你會看到一支號角。吹響它。讓你的挑戰之聲在一片平靜中迴響。$B$B巴拉加德將不得不面對你。而我...容我自稱,瓦德瑪卓將在當場判定挑戰的勝敗。$B$B<被女妖附身的維酷人發出了怒吼。>','尼約達村的骸骨女巫要求你,挑戰並擊敗共主巴拉加德,以作為她的復仇。','','到寒冰皇冠的尼約達村找骸骨女巫。','','','','',0), +(13398,'zhTW','龍殞之地','藍龍一族全數都在此隕落。但現在,一個接著一個,他們被「他」的僕從召回。$B$B他親手將最年長的一些復生。帶回一些幼龍的骨塵給我。我將告訴你他是如何辦到的。','辛德拉苟莎之殞的米希阿斯‧薩爾奈,請你取得6個幼龍骨塵。','','到寒冰皇冠的辛德拉苟莎之殞找米希阿斯·薩爾奈。','','','','',0), +(13143,'zhTW','生力軍','首先,我在東方的壁壘看見一些輕盈潛獵者。在我們和阿薩斯決裂前,牠們曾為我們所役,牠們是你可以找到最好的斥候...只需要支配之眼的一點刺激。$B$B飛上去,找到一個潛獵者,先打倒牠,然後用這個黯刃符印收服牠。牠會認得符印,我保證。將牠帶至此處東北方的岩石頂端,牠會知道怎麼來找我的。','苦難高崗上奸詐的維瑞希要求你,將一個已收服的輕盈潛獵者,帶回至苦難高崗東北方的岩石堆頂端。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','帶回順服的輕盈潛獵者','','','',0), +(13399,'zhTW','揭曉之時','你有好多問題,$n。你是唯一能看到我的人,因為你曾經碰過某個原本是「他」的物品…你想得起來嗎?但我不能就這樣告訴你…那樣「他」會非常生氣。他已經不只是一個王子了…他變成了國王!$B$B到白骨之廷跟我碰面,就在冰冠城塞的北方,你可以自己看看。','到白骨之廷找米希阿斯‧薩爾奈談話。','','','','','','',0), +(13144,'zhTW','一石二鳥','血肉作坊憎惡體實驗室裡的工人,已經完成了一些他們的作品。目前,那些生物仍被拴在實驗室週遭的柱子上,但如果我們沒有任何作為,他們就會加入巫妖王的軍隊。$B$B骸骨堆中伸出的緊握之手散佈於血肉作坊週遭。這些骸骨的手都已被火焰之力附魔。找到這些骷髏,解放它們,將它們帶往憎惡體的成品附近,然後就有好戲可看了!','黑色守望的黑騎兵阿爾利要求你,以燃燒的骷髏摧毀3個被禁錮的憎惡體。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','焚毀被禁錮的憎惡體','','','',0), +(13400,'zhTW','王子與獵手','在王子變成國王以前。他打了好多好多仗...但唯一的一次,他差點送了命。$B$B那場戰鬥就在這裡。在你讓我展示事情的經過以後,你就全部都了解了。$B$B找一塊染血之石然後把它撿起來。然後你就會看到一切的經過...','白骨之廷的米希阿斯‧薩爾奈要你尋找一個染血之石然後完成王子的宿命。','','到寒冰皇冠的白骨之廷找米希阿斯·薩爾奈。','王子的宿命','','','',0), +(13145,'zhTW','邪鄙堡','我們必須了解敵人。$B$B使用支配之眼來控制輕盈潛獵者,並偵察整個區域。我之前飛行時注意到幾個地方,希望你特別靠近去偵察的:東北方的俯瞰處、東南方的工作區域、中心附近的大熔爐、西南方的祭壇區域。$B$B潛獵者跳躍的距離很長,而且從高處落下時不會受傷 - 利用這項優勢,在壁壘之間高低穿梭。','苦難高崗上奸詐的維瑞希要你利用一隻輕盈潛獵者來偵察瑪里庫利斯。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','探查犧牲祭壇','探查血熔爐','探查冰結瞰台','探查符文工坊',0), +(13401,'zhTW','最沉重的負荷','現在你知道你要對付的是什麼,$n。一個沒有痛覺...不會後悔...喪失人性的敵人。一個為達目的不擇手段的敵人。$B$B這顆心就是他的弱點而現在他知道你發現了。$B$B如果你還要回去,你最好帶些幫手。他不會再就這樣毫無防備了。','回報破天者號上的薩沙理安。','','','','','','',0), +(13146,'zhTW','慷慨大放送','我們必須引起某些混亂...任何可以使死亡騎士離開領導者身邊的混亂。如果我們殺掉他們的爪牙,我猜他們會對日常運作提高警戒。$B$B憎惡體是簡單的獵物,行動遲緩、容易預測、還有最重要的,愚蠢。利用他們對潛獵者的信任,把他們拖到散佈在建築區域裡的天譴炸彈附近。你將可以在他們搞清楚發生什麼事情之前就把炸彈給點燃。','苦難高崗上奸詐的維瑞希要求你,利用輕盈潛獵者的鐵鍊,拖曳天譴炸彈到4個瑪里庫利斯的笨拙殘暴者身邊。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','送出天譴炸彈禮物','','','',0), +(13402,'zhTW','提里奧的協助','這不是我第一次聽到有關阿薩斯這顆心臟的故事...一直以為這是某些人編來吹噓的故事。$B$B我們必須立刻行動。不幸地,我們必須秘密進行。$B$B阿薩斯的眼線遍佈四周,如果他發現,那我們的計畫就會付諸流水。$B$B我們必須尋求白銀十字軍的協助。那裡每個聖騎士都是由提里奧親手挑選。如果說有哪處尚未被教徒滲透,那就是他們。','與十字軍之巔的大領主提里奧‧弗丁談談。','','','','','','',0), +(12891,'zhTW','我有個點子,但首先...','當我還在,嗯哼,巫妖王的底下服務時,我們常常用一種叫做最高統治節杖的東西讓比較聰明的天譴軍聽話。$B$B我需要你幫我製作新的一枝。$B$B不過幸運的是,所有需要的材料都隨手可及:教徒節杖、憎惡體之鉤、魂屍之繩、還有一把天譴精華。$B$B這應該不難,$c。','暗影穹殿的史力弗男爵要你收集一把教徒節杖、一個憎惡體之鉤、一條魂屍之繩、還有五個天譴精華。','','到寒冰皇冠的暗影穹殿找史力弗男爵。','','','','',0), +(13147,'zhTW','速配達人','瓦苟和較次等的不死爪牙間最主要的不同之處在於,瓦苟仍然保留了足夠的心智,使他們對被奴役一事感到不齒。沒有任何瓦苟樂意和骷髏或食屍鬼一同工作。$B$B我們就是要利用這一點,利用這必然的仇恨,使這些有心理障礙的瑪里庫立斯陰影蠻卒與其他不死生物內鬥。這應該會減緩他們的生產,並使死亡騎士不得不介入處理。$B$B這其實滿簡單的 - 在這些蠻卒接近次等不死生物時,對他們丟石頭。','苦難高崗上奸詐的維瑞希要求你,在瑪里庫立斯利用輕盈潛獵者,當陰影蠻卒接近較低等的不死生物時,對其丟擲石頭。引起5場打鬥後返回。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','挑起工人的內鬥','','','',0), +(13403,'zhTW','提里奧的決斷','就在今晨,我的斥候才告訴我詛咒神教的一行人,正由冰冠城塞帶著一件聖物前往黑暗大教堂。$B$B現在我知道那應該就是阿薩斯的心臟...保存著他最後剩下的一丁點人性。$B$B這是聖光給我們的預兆。只要這聖物尚存在,就表示阿薩斯‧米奈希爾有朝一日還能找回他的人性!$B$B到教堂入口見我。記得帶上教徒侍僧兜帽-我們要喬裝進去。','十字軍之巔的提里奧‧弗丁要你取得,並帶著教徒侍僧兜帽到黑暗大教堂入口見他,就在冰冠城塞的西北邊。','','到寒冰皇冠的十字軍之巔找大領主提里奧·弗丁。','提裡奧的決斷','提裡奧的嘗試','','',0), +(12892,'zhTW','這是有趣的遊戲','黯刃騎士團要拿下西北邊的暗影穹殿。我在他們的隊伍中有一個線民,他需要幫忙。$B$B首先第一步就是遮斷巫妖王的視覺。他用一個名叫窺探之眼的裝置監視整個區域,那眼睛就飄浮在穹殿的頂端。$B$B我們的哥布林準備了一些對付他的東西。破壞「眼睛」了以後,去找穹殿中的史力弗男爵。他偽裝成仍受巫妖王的控制的樣子。','破壞窺探之眼,然後向暗影穹殿的史力弗男爵回報。','','到寒冰皇冠的暗影穹殿找史力弗男爵。','毀滅窺探之眼','','','',0), +(13404,'zhTW','短程行動:轟炸場','這只是個小任務,目標是轟炸場一帶,不過作為熱身還是很不錯的。你準備好了嗎?','吉普利·基羅赫斯要你去殺死50個轟炸場步兵、10個轟炸場軍官和20只石像鬼伏擊者。','','到寒冰皇冠的奧多薩:荒寂之門找碁伯里·基羅赫茲。','','','','',0), +(12893,'zhTW','解放你的心靈','暗邪,夜林女士跟跳躍者會對巫妖王的戰爭很有幫助,要是他們能掙脫他所施加的意志束縛。這就是最高統治節杖的用處。$B$B你可以在往東邊跟西邊的墓穴前的岩架上找到他們,還有在上頭墓穴附近的岩架。節杖是用在他們的屍體上的。$B$B起飛吧。馬上就可以讓他們加入我們!','暗影穹殿的史力弗男爵要求你,在暗邪、夜林女士與跳躍者的屍體上使用最高統治節杖。','','到寒冰皇冠的暗影穹殿找史力弗男爵。','解放暗邪','解放夜林女士','解放跳躍者','',0), +(13406,'zhTW','乘著綠光前進:轟炸地','準備暖個身進行個短程任務嗎?你應該已經接到指令,你的轟炸機已經準備就緒了。','偏激工程師泰茲菈要你殺掉50個轟炸地步兵、10個轟炸地隊長與20個石像鬼伏擊者。','','到寒冰皇冠的奧多薩:荒寂之門找偏激工程師泰茲菈。','','','','',0), +(12896,'zhTW','如果無法感化他','像光禍將軍這樣的死亡騎士,與巫妖王的意志聯繫太過緊密,除非在極端特殊的狀況下,是無法被解開的。$B$B將軍本人待在穹殿裡監督著新武器的製作。只要你去擾亂他在北邊熔爐的武器架,我保證他會親自前來。我會派暗邪,夜林女士跟跳躍者進去幫你。$B$B如果我們要攻陷暗影穹殿的話,光禍將軍一定得死!','擊敗光禍將軍,然後回到砲艇,破天者號向薩沙理安回報你的成功。','','到寒冰皇冠的破天者號找薩沙理安。','','','','',0), +(13152,'zhTW','探訪博士','所以,他們一直都在再活化聖所中,將薩鋼裂片嵌入食屍鬼體內?我們應該在這些食屍鬼被部署出來對付我們的部隊前阻止這件事。$B$B在血肉作坊的血肉巨人實驗室一帶,找到再活化聖所的入口。在那裡,食屍鬼的幕後黑手,賽伯諾克博士保留了他作品中最可怕的一件,補釘。解開他的鎖鍊,幫助他完成對博士的復仇。讓他的傑作成為毀滅他的原因。','黑色守望的黑騎兵阿爾利,要你在再活化聖所中,摧毀束縛補釘的金屬樁,並協助他完成對賽伯諾克博士的復仇。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','釋放補釘','協助補釘殺害賽伯諾克博士','','',0), +(12897,'zhTW','如果無法感化他','像光禍將軍這樣的死亡騎士,與巫妖王的意志聯繫太過緊密,除非在極端特殊的狀況下,是無法被解開的。$B$B將軍本人待在穹殿裡監督著新武器的製作。只要你去擾亂他在北邊熔爐的武器架,我保證他會親自前來。我會派暗邪,夜林女士跟跳躍者進去幫你。$B$B如果我們要攻陷暗影穹殿的話,光禍將軍一定得死!','擊敗光禍將軍,然後回到砲艇,奧格林之錘向寇爾提拉‧亡織者回報你的成功。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','','','','',0), +(12898,'zhTW','暗影穹殿','聽起來,你做得非常好。你也替黯刃騎士團製造了三個重要的盟友。$B$B<薩沙理安望向地平線的另一端。>$B$B你應該要往回走。現在史力弗男爵與其他的死亡騎士應該奮力地在暗影穹殿抵擋天譴軍之力。$B$B我相信他們會需要你的協助的。','回到暗影穹殿向史力弗男爵報告。','','','','','','',0), +(12899,'zhTW','暗影穹殿','聽起來,你做得非常好。你也替黯刃騎士團製造了三個重要的盟友。$B$B<寇爾提拉看著地板上的地圖。>$B$B你應該要往回走。現在史力弗男爵與其他的死亡騎士應該奮力地在暗影穹殿抵擋天譴軍之力。$B$B我相信他們會需要你的協助的。','回到暗影穹殿向史力弗男爵報告。','','','','','','',0), +(13155,'zhTW','奸詐的維瑞希','我聽到了一些謠言,有關近來瑪里庫利斯和阿薩斯死亡騎士的新動向,但我認為這不過是為了填補防務的空缺。不過,這些數字顯示他也試圖爭取一場勝利。$B$B我們不久前才派出最優秀的人才前往瑪里庫利斯 - 奸詐的維瑞希。你應該可以在瑪里庫利斯西方的苦難高崗上找到他,就在白骨之廷之中。$B$B進去的路上別太引人注目了。','到寒冰皇冠的苦難高崗上找奸詐的維瑞希報到。','','','','','','',0), +(13160,'zhTW','慘不忍睹','石像鬼是偵察的理想人選,從空中發動攻擊時也相當致命,但是他們有個顯著的弱點。大部分的石像鬼,必須以石化的狀態休息很長的時間,好維持能使笨重身軀飛行的能量。$B$B當我透過你操控的斥候之眼凝視,我注意到東邊和南邊的牆裡,有一大群冰膚哨兵正處在休眠的狀態。讓潛獵者跳上他們的岩架,趁他們睡眠時一網打盡。','苦難高崗上奸詐的維瑞希要你使用輕盈潛獵者的投擲技能,摧毀12個睡眠中的冰膚哨兵。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','摧毀冰膚哨衛','','','',0), +(13161,'zhTW','穢邪騎士','是時候斬除他們的首腦了。$B$B我曾經在洛基爾身邊待過好一陣子。他的穢邪技巧比我認識的每一個死亡騎士都好,他也同樣地殘忍無情。$B$B當洛基爾在自己的地盤上戰鬥時,他的力量最為強大。很不幸地,我們別無選擇也無法顧慮那麼多,你只能靠自己了,盡量避免和他的不死爪牙交鋒,然後竭盡全力取得勝利。$B$B敏捷靈活是關鍵,$c,還有切莫低估他。','苦難高崗上奸詐的維瑞希要你殺死穢邪騎士洛基爾。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','','','','',0), +(13162,'zhTW','冰霜騎士','莎菲…莎菲是個不太一樣的死亡騎士。她會讓你沉浸於甜言蜜語之中,你在她身上嗅不出一絲邪惡的氣息。趁你鬆懈之時,她就會出其不意地作掉你,臉上甚至還帶著笑容。$B$B我相信你能擊敗莎菲,但別過分自信。她的長處,就是令她的敵人錯估形勢,處於致命的懈怠中,然後以漫天蓋地的冰霜攻擊粉碎對手。$B$B別放鬆你的戒心,也別小看她。','苦難高崗上奸詐的維瑞希要你殺死冰霜騎士莎菲。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','','','','',0), +(13418,'zhTW','備戰','嘿你!$B$B你看來就像個明理機靈的人。我們正在寒冰皇冠僱用更多有才幹的傢伙。$B$B你也許已經聽聞了傳言,說我們在冰川上吃了敗仗,但我得好好澄清。我們正要發動攻勢,自艾澤拉斯最知名,也是我們最先進的工程學成就,破天者號上發動。部落不會給我們喘息的機會,阿薩斯也不會。$B$B若你已準備好要出發,向我報到。','與軍官凡‧羅森對話,以取得在寒冰皇冠登上破天者號的通行許可,然後向提督賈斯汀‧巴特勒報到。','','','','','','',0), +(13163,'zhTW','血魄騎士','貝洛克是我所見過中極少數可以成為死亡騎士的維酷人之一,這多半要歸功於他的殘忍嗜血。若你能夠擊敗他,就算是替我們除去了一個心腹大患。$B$B和他戰鬥時,盡量和你的同伴保持距離。他會抽取你的生命能量為其所用,所以你必須儘可能地阻撓他使用這項技能。$B$B我對你有信心。你要確定他的死亡。','苦難高崗上奸詐的維瑞希要你殺死血魄騎士貝洛克。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','','','','',0), +(13419,'zhTW','備戰','嘿你!$B$B你看來就像個明理機靈的人。我們正在寒冰皇冠僱用更多有才幹的傢伙。$B$B聯盟的渣滓們莽莽撞撞地闖進了寒冰皇冠,結果當然是一敗塗地。我們則是蓄精養銳,靜候適當的時機。很快地,我們就要從最先進的工程學成就,名震艾澤拉斯的奧格林之錘上,發動真正的攻勢。聯盟不會給我們喘息的機會,阿薩斯也是。$B$B若你已準備好要出發,向我報到。','與空奪者克朗對話,以取得在寒冰皇冠登上奧格林之錘的通行許可,然後向空奪者寇姆‧黑疤報到。','','','','','','',0), +(13164,'zhTW','血禍的命運','隨著苦難大軍的騎士不斷死去,現在正是除去其領袖 - 歐貝茲‧血禍的大好時刻。$B$B莫格萊尼在你出任務時來找過我,他告訴我歐貝茲的藏匿處。就在冰冠城塞正下方有個很大的深穴 - 你可以在其門外找到歐貝茲。$B$B我們已派遣一些黯刃騎士的菁英前往 - 集結夥伴並投入戰鬥吧。血禍的死期到了。','苦難高崗上奸詐的維瑞希派遣你去殺死歐貝茲‧血禍。','','到寒冰皇冠的苦難高崗找奸詐的維瑞希。','','','','',0), +(13168,'zhTW','臨別禮物','看看我們找到了什麼...支配之眼。神教通常會盡其所能地確保這些東西的安全,但我猜,當我們在他們的家中大開殺戒時,他們並沒有退路。$B$B支配之眼,能賦予使用不同力量的任何種族能力,精準地控制一隻不死爪牙。如同你能想像的,用在笨拙的食屍鬼和骷髏身上,將非常有效。$B$B介意嘗試一下嗎?用支配之眼,控制一隻被俘的幽影吧。','暗影穹殿的凱力多斯‧血刃要求你,使用支配之眼以控制一個被俘虜的幻象看守者。','控制一隻幻象觀察者','到寒冰皇冠的暗影穹殿找凱力多斯·血刃。','','','','',0), +(13169,'zhTW','不死生物的忠實朋友','如同往常,西南方薩鋼礦場裡的不死生物老是讓他們的瘟疫獵犬挨餓,好讓牠們更具攻擊性。利用幽影靠近牠們並餵飽其中幾隻,我保證牠們在酒足飯飽之後,只要他們的主人不在附近,就完全不會甩你。$B$B餵飽牠們以前千萬不要靠近。你的幽影匿蹤可騙不過牠們的鼻子。','暗影穹殿的凱力多斯‧血刃要求你,利用幻象看守者餵飽18隻飢餓的瘟疫獵犬。','','到寒冰皇冠的暗影穹殿找凱力多斯·血刃。','餵飽飢餓的瘟疫獵犬','','','',0), +(13170,'zhTW','弱者才需要榮耀','一般來說,食屍鬼是很脆弱的東西,西南方薩鋼礦場裡的哨兵更是無一例外。利用一隻幽影,我相信你可以偷偷地溜進去,並無聲無息地放倒他們的監視者。$B$B在合理的時間內,儘可能地除掉你所遇到的所有監視者...不久我們將發動進攻,我希望敵人能盡量地被削弱。','暗影穹殿的凱力多斯‧血刃希望你去暗殺20個不安的監視者。','','到寒冰皇冠的暗影穹殿找凱力多斯·血刃。','暗殺不安的監視者','','','',0), +(13171,'zhTW','從何而來','我比較關心的是沿這條路走往西南方的薩鋼礦場。他們正開採出數量龐大的礦石,而我希望了解,他們究竟用來建造什麼。要達到這個目的,我們將先從削弱對方的防禦下手。$B$B我注意到,有一系列水晶散佈在那據點的週遭,我假定它們是某種防禦的設施,類似通靈塔之類的。利用幻象看守者摧毀你找到的任何水晶。','暗影穹殿的凱力多斯‧血刃,派遣你去排除10個天譴牽制水晶。','','到寒冰皇冠的暗影穹殿找凱力多斯·血刃。','排除天譴水晶','','','',0), +(12938,'zhTW','公爵','你得集中注意力,$n。我們只不過是勉強守住暗影穹殿而已。如你所見,我們徹底惹火了巫妖王。$B$B<男爵咯咯地笑著。>$B$B我要你去跟蘭克洛公爵談談。他現在負責者揮此地。你可以在穹殿的建築物找到他。$B$B別讓他等太久。','與暗影穹殿的蘭克洛公爵交談。','','','','','','',0), +(12939,'zhTW','榮耀挑戰','首先,第一步得要在卓頓海姆裡面一個叫做蠻荒岩臺的地方進行。就在西邊的山上。$B$B岩臺上的維酷戰士們總是在進行拳鬥,由他們族長指派的人選教導他們戰鬥的技藝。$B$B我要你帶著這面旗幟去挑戰他們。讓我們以「僅僅一個$r」的技藝打擊他們的士氣,如何?$B$B<公爵咧嘴微笑,腐爛的牙齒在穹殿的微光中閃爍。>','暗影穹殿的蘭克洛公爵要你用挑戰旗幟挑戰並擊敗6個默約丁戰鬥員。','','到寒冰皇冠的暗影穹殿找蘭克洛公爵。','挑戰並擊敗默約丁戰鬥員','','','',0), +(12943,'zhTW','暗影穹殿敕令','『強者』烏弗蘭族長坐在他的大廳裡控制著整個蠻荒岩臺。我研究過他,這位族長是個有耐性的維酷人,滿腦子都是策略與征戰。他也偏好待在後方,不想過度涉入戰鬥之中。$B$B我要他死!$B$B我已經寫下一道敕令。站在族長面前,把它大聲唸出來。$B$B<公爵富饒興味地抬起眉毛。>$B$B這應該...至少會讓他焦躁起來。','暗影穹殿的蘭克洛公爵命令你在『強者』烏弗蘭族長面前朗讀暗影穹殿敕令,然後殺了他。','','到寒冰皇冠的暗影穹殿找蘭克洛公爵。','','','','',0), +(12949,'zhTW','取得鑰匙','$C,鐐銬鑰匙就掛在外頭那個講師賀洛迦的脖子上。$B$B你只需要讓他的腦袋與脖子分家,就可以拿到鑰匙了對吧?','烏弗蘭大廳裡被搶劫的維倫要你取得維倫鎖鍊的鑰匙。','','到寒冰皇冠的暗影穹殿找被搶劫的維倫。','','','','',0), +(12951,'zhTW','通知男爵','你現在最要緊的事情就是返回暗影穹殿告訴史力弗男爵我失敗了。$B$B你要知道,我不是唯一一個被這些維酷惡魔俘虜的人。我的整個死亡騎士分隊都被抓了。$B$B我早該在陷阱發動之前就察覺的,但現在覆水難收,抱怨也沒有用對吧?$B$B在你也被抓住之前快點走吧!我們回頭見。','與暗影穹殿的史力弗男爵交談。','','','','','','',0), +(12955,'zhTW','消滅競爭者','呣呣咈呣咈咈咈...$B$B<跳躍者清了清喉嚨。>$B$B抱歉噢。有的時候很難聽懂我在講什麼。你知道的。$B$B我得再提一下,如果你哪天經過蠻荒岩臺,就是西邊山脈再過去那兒時,你記得消滅那兒的競爭者。$B$B具體地說呢,我要你去找席格芮‧冰誕、忠誠的埃弗睿、奧努祖與汀基‧芯哨單挑並且讓他們在維酷面前出醜。','暗影穹殿的跳躍者要你去單挑並擊敗席格芮‧冰誕,忠誠的埃弗睿,奧努祖,以及汀基‧芯哨。','','到寒冰皇冠的暗影穹殿找跳躍者。','擊敗席格芮·冰誕','擊敗忠誠的埃弗睿','擊敗奧努祖','擊敗汀基·芯哨',0), +(12982,'zhTW','黯刃囚犯','現在我回來了,我確信男爵會想要我救回我的手下。我看得出來他們只是勉強守住這裡而已。巫妖王的軍隊差不多要突破防線了,若沒有被俘虜的那群死亡騎士,我們不可能守得住。$B$B你能再幫助我一回嗎,$n?$B$B回到卓頓海姆,並且把他們放出籠子外。$B$B不管你要怎麼做,給我弄開那些該死的鎖。那些維酷人身上應該有鑰匙。$B$B不管怎樣,把我的手下給救出來!','暗影穹殿裡被搶劫的維倫,要你釋放8名黯刃囚犯。你可以在整個卓頓海姆區域找到關著囚犯的籠子。','','到寒冰皇冠的暗影穹殿找被搶劫的維倫。','釋放黯刃囚犯','','','',0), +(12992,'zhTW','打死那些該死的維酷人!','卓頓海姆的那些臭維酷人欠打!$B$B$n打死他們!','暗影穹殿的暗邪要你在卓頓海姆區域殺死15個維酷人。','','到寒冰皇冠的暗影穹殿找暗邪。','殺死卓頓海姆維酷人','','','',0), +(12995,'zhTW','留下我們的記號','我們得從許多不同方面來攻擊卓頓海姆的維酷人。蠻力當然是一種好方法,但我偏好更有智慧的手法。$B$B我要你去削弱他們的士氣。$B$B我的手下替你打造了幾支旌旗。我要你把這些旌旗拿去插在倒下的維酷人屍體上。$B$B讓這些旌旗不斷提醒他們,他們要面對的威脅可遠比巫妖王的怒氣來的直接。','暗影穹殿的史力弗男爵,要你將15枝黯刃旌旗插在卓頓海姆區域找到的維酷人屍體身上。','','到寒冰皇冠的暗影穹殿找史力弗男爵。','將黯刃旌旗插進維酷人的屍體','','','',0), +(12999,'zhTW','骸骨女巫','你記得夜林女士,對吧?她一定記得你。她就是你打破巫妖王對暗邪和我的控制時,也一併「拯救」的那個女妖,既孤獨又憤怒。$B$B她現在去了卓頓海姆並附身在他們的骸骨女巫身上。她想要從維酷人內部製造混亂。$B$B她要求你去找她。你會在尼約達村南邊的洞穴中找到她,就在卓頓海姆內部的西南方。','與尼約達村洞穴中的骸骨女巫交談。','','','','','','',0), +(13172,'zhTW','混亂之源','好用的工具,不是嗎?削弱他們的防禦這件事幹得真好,$c。現在我們可以推動主要的攻勢了。$B$B計畫很簡單 - 我們將摧毀一切會動的玩意,混到裡頭去,然後在一團混亂中偷取情報。$B$B準備好了就告訴我,我會讓一頭骷髏獅鷲獸與你同行。','暗影穹殿的凱力多斯‧血刃,派遣你去哀泣礦場並屠殺80個不死生物。和他對話,以取得一頭骷髏獅鷲獸協助你進行突襲。','','到寒冰皇冠的暗影穹殿找凱力多斯·血刃。','殺死哀泣礦場不死生物','','','',0), +(13173,'zhTW','騷動之中','我們已經弄到了不少工人。他們會很有用的。$B$B我要你用眼睛控制其中一個工人返回挖掘場。現在整個營地都陷入了混亂,他們肯定會把當成你在襲擊中走散的工人,你不會露餡的。$B$B你要找出工廠的負責人並動手幹活。如果夠幸運的話,我們很快就能發現那些邪鐵的去向。我會通過眼睛關注你的。','','','','','','','',0), +(13174,'zhTW','騷動之中','打斷他們的運作只是計畫的一部分。另一個重要的目的是找出薩鋼究竟送去了哪裡。我們知道其中一些目的地,但是薩鋼的產量讓我覺得這背後有個更大的計畫。$B$B當你在礦場時,留意任何可以找到的文件。若你騎乘獅鷲獸去的話,你可以在幹完壞事後隨時跳下來。','暗影穹殿的凱力多斯‧血刃要你取回一份哀泣礦場文件、一份哀泣礦場帳本、一份哀泣礦場地圖和一份哀泣礦場日程表。','','到寒冰皇冠的暗影穹殿找凱力多斯·血刃。','','','','',0), +(13175,'zhTW','重獲控制','','','','','','','','',0), +(13176,'zhTW','準備交貨','','','','','','','','',0), +(13184,'zhTW','持久的用處','','','','','','','','',0), +(13211,'zhTW','以火淨化','天譴軍團將我們倒下的弟兄轉化成食屍鬼或骷髏,或肢解他們的軀體以製造憎惡體,回過頭來對付我們。這一切必須被阻止!$B$B為了保衛家園和同胞而倒下的弟兄都是英雄,他們不該落得如此可悲的命運。再者,我們實在無法承受在戰場上與他們干戈相向的痛苦。帶著這把火炬前往血肉作坊,燒掉任何你在再活化聖所與憎惡體實驗室裡找到的屍體。','黑色守望的十字軍歐拉金‧山瑞斯要求你,以歐拉金的火炬焚毀7具膿瘡屍體。','','到寒冰皇冠的黑色守望找十字軍歐拉金·山瑞斯。','焚毀膿瘡屍體','','','',0), +(13212,'zhTW','他被大卸八塊了','因為十字軍歐拉金被綁架,在對血肉作坊的最終攻擊即將來到之際,銀白十字軍卻是群龍無首。雖然對我而言,他和其他十字軍並無二致,但是十字軍們可不是這麼想。$B$B我實在不喜歡在這件事上浪費時間,但我別無選擇。我們英勇的十字軍勇士大概已經被肢解,要用來製造憎惡體了。下去血肉作坊,宰掉和我方戰鬥的肥胖恐獸,找回歐拉金的軀體。','找回歐拉金的軀幹、歐拉金的雙腳、歐拉金的左手、和歐拉金的右手,帶回給黑色守望的黑騎兵阿爾利。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','','','','',0), +(13213,'zhTW','英靈殿之戰','我看到、聽到了許多事,$n,自你擊敗共主巴拉加德以來,發生了些很重要的事:英靈殿之戰需要你!$B$B你可以在北方找到戰場。現在和你的夥伴一起出發吧,找到華爾琪蓋爾維孚。她在英靈殿將提供給你的挑戰者必定需要幫助。$B$B祝你好運。','與英靈殿裡的蓋爾維孚對話。','','','','','','',0), +(13214,'zhTW','英靈殿之戰:已逝的英雄','若你認為你準備好了,我剛好有場可以讓你一展身手的比賽。$B$B另一組外來者認為,他們已準備好要接受英靈殿的嚴苛挑戰。他們恃傲而來,但最終和其他人亦無二致。$B$B若你自視不凡--自恃擁有可與傳奇戰士匹敵的技巧與經驗--那麼,請接受挑戰。','英靈殿的蓋爾維孚向你挑戰,在一場戰鬥中擊敗六名死去的英雄:艾德雷斯、『半魂』蓋內斯、賈卓斯、瑪蘇德、里希和塔拉。$B$B若你成功,跟在英靈殿南緣俯瞰的『殘酷』吉雍納交談。','擊敗墮落英雄','到寒冰皇冠的英靈殿找『殘酷』吉雍納。','','','','',0), +(13215,'zhTW','英靈殿之戰:『黑暗大師』齊特瑞司','許多種族不遠千里而來,只為了在英靈殿裡證明他們自己的實力。有些甚至是從地底下的世界來的。$B$B『黑暗大師』齊特瑞司就是其中一人。$B$B來自地底深處,瘋狂支配之處,齊特瑞司要求和奇人異士在環中決鬥。而你就是不二人選。$B$B你敢面對這個奈幽夢魘嗎,$r?','英靈殿的蓋爾維孚向你挑戰,要你擊敗『黑暗大師』齊特瑞司。$B$B若你成功,跟在英靈殿南緣俯瞰的『殘酷』吉雍納交談。','擊敗黑暗主宰西塔利克斯','到寒冰皇冠的英靈殿找『殘酷』吉雍納。','','','','',0), +(13216,'zhTW','英靈殿之戰:席格芮‧冰誕回來了','你的一個老仇家回來了:席格芮‧冰誕。也許你還記得在蠻荒岩臺上擊敗她的往事?$B$B沒關係,她一定記得你。她堅持要給她個再次證明自己的機會。$B$B就我個人而言,這是另一個復仇的機會,但對這裡同樣也有好處。$B$B我就將場子留給你了,$n。你願意再次面對席格芮‧冰誕嗎?','英靈殿的蓋爾維孚向你挑戰,要你擊敗席格芮‧冰誕。$B$B若你成功,跟在英靈殿南緣俯瞰的『殘酷』吉雍納交談。','擊敗齊格莉德·冰魂','到寒冰皇冠的英靈殿找『殘酷』吉雍納。','','','','',0), +(13217,'zhTW','英靈殿之戰:卡納基!','你能走到這一步,真的相當了不起,$n,但是接下來你在英靈殿中得面對的,是遠遠超出你想像的巨大恐懼。$B$B我該警告你馬上回頭。卡納基是巫妖王邪惡心腹打造而成的龐然血肉怪物。$B$B我不覺得你和你的朋友有所勝算。不過,你有權決定。','英靈殿的蓋爾維孚向你挑戰,要你擊敗卡納基。$B$B若你成功,跟在英靈殿南緣俯瞰的『殘酷』吉雍納交談。','擊敗卡納基','到寒冰皇冠的英靈殿找『殘酷』吉雍納。','','','','',0), +(13218,'zhTW','英靈殿之戰:死擊族長','你的技術已引起卓頓海姆維酷人的注意,$n。巴納霍格族長對你有很大的興趣,而且堅持要當你的下一個對手。$B$B如果你認為卡納基很可怕,那你大可以回家去了。巴納霍格族長的外號是「死擊」。我想你應該猜得到這名號從何而來的。$B$B你願意接受族長的挑戰嗎?','英靈殿的蓋爾維孚向你挑戰,要你擊敗『死擊』巴納霍格族長。$B$B若你成功,跟在英靈殿南緣俯瞰的『殘酷』吉雍納交談。','擊敗巴納霍格領主','到寒冰皇冠的英靈殿找『殘酷』吉雍納。','','','','',0), +(13219,'zhTW','英靈殿之戰:最後的挑戰','我擔心你的勝利終將導致你的毀滅,$n。$B$B<要是華爾琪的臉色能更白的話,你會覺得她一臉慘白。>$B$B關於你在英靈殿中的勝利,聲名已遠播至冰冠城塞,擾動了一個你絕對不想面對的敵手。$B$B值此非常時刻,薩杜瓦爾親王已在趕往此處的路上。吉雍納警告你該逃離此地,我實在不能不認同。$B$B你怎麼想?他已在途中。你要在最後一場戰鬥中,面對這個血腥親王嗎?','英靈殿的蓋爾維孚向你挑戰,要你擊敗薩杜瓦爾親王。$B$B若你成功,跟在英靈殿南緣俯瞰的『殘酷』吉雍納交談。','擊敗薩杜瓦爾王子','到寒冰皇冠的英靈殿找『殘酷』吉雍納。','','','','',0), +(13220,'zhTW','將歐拉金拼湊回來','我們實在沒時間將歐拉金的軀體拼在一起。幸好,天譴軍團提供你一個作縫補活的好地方。$B$B在血肉作坊的血肉巨人實驗室附近,有個再活化聖所。在那一帶找個絲線捲、一把醫生的切割刀。將歐拉金的軀體帶去聖所裡的大實驗室,然後幹活吧。','取得一個絲線捲、以及醫生的切割刀,帶往再活化肉塊聖所,試著利用歐拉金的殘骸將其再活化。一旦工作完成,向黑色守望的黑騎兵阿爾利回報。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','復活十字軍歐拉金·山瑞斯','','','',0), +(13228,'zhTW','破碎前線','什麼戰鬥?!那支部隊進行的是偵察任務!$b$b還有聯盟的消息是怎麼一回事 - 你確定他說的是聯盟嗎?$b$b聽我說,$n!我得知道發生了什麼事,現在!$b$b馬上前往該地,找到解答!搜遍戰場並尋找生還者 - 線索 - 什麼都好!','搭乘著奧格林之錘的寇姆‧黑疤要求你,前往破碎前線並詢問垂死的狂戰士,以了解發生的事。','','到寒冰皇冠的奧格林之錘找空奪者寇姆·黑疤。','詢問垂死的狂戰士','','','',0), +(13229,'zhTW','我還沒死!','聖光對我微笑。我還沒死於這活生生的夢魘中,但若我不能逃脫,天譴軍團將殺了我,並肢解我的軀體以作為他們『工作』的原料。$B$B我無法獨力做到這件事,$c,除非借助你的幫助,我才能活下來再次對抗天譴軍團。$B$B在天譴軍團的劊子手了結我以前,你能幫助我幫逃出去嗎?','護送卡瑪洛斯神父至安全之處,並向奧格林之錘上的凱爾坦修士回報。','護送卡瑪洛斯神父逃離險境','到寒冰皇冠的奧格林之錘找凱爾坦修士。','','','','',0), +(13230,'zhTW','替我復仇!','我聽到他們的聲音,$g兄弟:姐妹;...$b$b聯盟傷兵的哀鳴呻吟...那令我實在不舒服...$b$b完成我們未竟的事業,$c。不要手下留情...不要留下任何一個活口。$b$b為...為了部落...','垂死的狂戰士要求你在破碎前線上殺死5個垂死的士兵。完成後,向奧格林之錘上的空奪者寇姆‧黑疤回報。','','到寒冰皇冠的奧格林之錘找空奪者寇姆·黑疤。','殺死垂死的聯盟士兵','','','',0), +(13231,'zhTW','破碎前線','什麼?!不...!我們承受了多少的痛苦,只為了維持這回攻擊的低調。部落怎麼可能知道的?裝備...人力...全軍覆沒了嗎?不可能的!$b$b我們在寒冰皇冠的戰略,其關鍵在於比部落先奪下那道門。我們必須盡快重新整備,然後發動另一波攻勢。$b$b查看戰場,搜尋所有的生還者。檢討從這場悲劇中得到什麼教訓。$b$b還有,為了將臨的戰鬥,你得打點妥當,$n,我們必須兩面作戰...','破天者號上的提督賈斯汀‧巴特勒要求你,去破碎前線訊問一個垂死的士兵,並回報給他。','','到寒冰皇冠的破天者號找提督賈斯汀·巴特勒。','訊問垂死的士兵','','','',0), +(13232,'zhTW','給我個痛快!','他們嘲弄我們 - 就算是躺在這裡等死,也還在嘲弄我們...$b$b拜託,$g兄弟:女士;...別讓他們的哀鳴成為我最後聽見的聲音...$b$b給我個痛快吧...讓我從痛苦中解脫...進...入聖光。$b$b找到我的夥伴...給他們同樣的了結。$b$b別留給天譴軍團...任何喚醒我們的機會!$b$b我求你...','破碎前線上一個垂死的士兵要求你,殺死5個垂死的士兵,並向提督賈斯汀‧巴特勒回報。','','到寒冰皇冠的破天者號找提督賈斯汀·巴特勒。','殺死垂死的士兵','','','',0), +(13233,'zhTW','絕不留情!','如同我告訴過你的。他們不過是在虛張聲勢。$b$b如同往常地,部落再次蔑視我們視為珍愛及神聖的一切事物。他們該以生命償付違逆聖光的罪過。$b$b無一例外。$b$b想想一個不被他們玷污的世界,$n。想像我們孩子所能享受的歡愉。想想我們後代對你回憶的敬仰,當他們知道是你帶給他們安穩的幸福。$b$b現在去吧,讓夢想成真!','破天者號上的提督賈斯汀‧巴特勒要你在寒冰皇冠殺掉15個部落玩家。','','到寒冰皇冠的破天者號上找提督賈斯汀·巴特勒。','','','','',0), +(13234,'zhTW','叫他們付出代價!','時機來臨了!$b$b我們已經忍受了自以為是的聯盟太久!我們袖手旁邊這世界的軟弱與絕望也太久了。$b$b現在,我們將終止這份恥辱!現在,我們讓他們嚐嚐什麼叫恐懼!現在,我們將榮耀帶給部落!$b$b在寒冰皇冠這裡,我們要碾碎聯盟!$b$b去吧,$c,追捕他們!碾碎他們。讓他們生不如死!','空奪者寇姆‧黑疤要你在寒冰皇冠殺掉15個聯盟玩家。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','','','','',0), +(13235,'zhTW','血肉巨人鬥士','你在破壞血肉作坊與清除巫妖王的爪牙這件事上做得很好。現在,所有殘餘的部隊,必須一起對付血肉作坊最龐大的成品 -- 名為莫比達斯的血肉巨人。$B$B這可不會是場輕鬆的遊戲,不過,暗影穹殿派了瑪葛瑞弗‧達卡和一些援軍。和他在血肉作坊西邊的最高點碰頭。一旦你準備好進行攻擊,告訴他,他會讓他的部隊加入戰鬥。','在血肉作坊的西端,與瑪葛瑞弗‧達卡交談與莫比達斯接戰的事宜。擊敗莫比達斯以後,向黑色守望的黑騎兵阿爾利回報。','','到寒冰皇冠的黑色守望找黑騎兵亞爾利。','','','','',0), +(13236,'zhTW','詛咒軍團','你大概覺得自己很厲害 -- 打敗這些不死生物,用你的戰爭機器壓碎他們的骸骨。$B$B但這跟創造他們的力量比起來微不足道。$B$B我曾經看過王子殿下親自表演。我可以示範給你看...如果你想的話。','第一軍團前線營地的米希阿斯‧薩爾奈要求你,喚起100名食屍爪牙,以讓它們加入軍隊。','','到寒冰皇冠的逝望山谷找米希阿斯·薩爾奈。','喚起食屍爪牙','','','',0), +(13237,'zhTW','刺探','當你的指揮官由於他對聯盟敵人的嫌惡因而分散注意力時,你可以投靠我,並協助我堅定地面對真正的敵人 - 巫妖王及他的爪牙。$b$b為了把握任何能在城塞中擊敗他的希望,你的人馬必須把守住每道大門。$b$b現在,專注在你的第一要務上。回到前線,並刺探他們的防禦狀態。尋找任何可讓我們趁隙而入的弱點。$b$b我會等你的回報,$c。','奧格林之錘上的寇爾提拉‧亡織者要你前往破碎前線並擊敗5隻笨重的憎惡體,5位毒惡的死靈法師,與5位暗影菁英。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','殺死笨重的憎惡','殺死邪惡通靈師','殺死暗影菁英','',0), +(13238,'zhTW','有什麼好料的?','哥布林!超忙碌的小工作狂...$b$b聽著,$n。我們的工程師銅爪堅持,要我看某樣他弄到的有用玩意。$b$b我實在沒有心情忍受他的碎碎念。上回我對他打招呼,結果他竟然對我嘮叨了一個小時。我差點沒把他踢下辛德拉苟莎之殞!$b$b你代替我去敷衍他一下。讓我知道他是不是真的弄到什麼鬼玩意。','奧格林之錘上的空奪者寇姆‧黑疤要求你,與首席工程師銅爪交談。','','','','','','',0), +(13239,'zhTW','烈不烈','從哪開始呢...嗯哼,你一定知道我是這艘船的首席工程師,我也經手過所有的情報 - 對,對,這是真的,我最近注意到你在南方目擊冰霜巨龍的報告,而我也相信,我已經發展出一套對付他們很有效的方案...現在你得走幾步路,不過基本上,你要打造一個沒穿護甲的假人,在上面用這溶劑塗上一大塊,然後趕快找個掩蔽!$b$b...你還在聽嗎,$r?','首席工程師銅爪要求你,在破碎前線上使用銅爪的烈性油,以吸引3頭霜育天爪。$b$b為了使用烈性油,你必須在戰場上收集一個白骨堆、一頂被遺棄的頭盔、和一副被遺棄的盔甲。','','到寒冰皇冠的奧格林之錘找首席工程師銅爪。','進行戰地測試','','','',0), +(13258,'zhTW','大好機會','我們最近得到了一份概要,指出了冰冠城塞的弱點。它圖文並茂地描繪了突破其防線的方式。$B$B上面記載的圖示指出,有個深入地底數百呎的孔道。我們還不明白它的功用,但是根據我們的偵察活動,它顯然對天譴軍團相當重要。$B$B去冰冠城塞底下找克瑞佳中士,她負責帶領對城塞的攻擊行動。','在冰冠城塞下,和克瑞佳中士交談。','','','','','','',0), +(13260,'zhTW','引薦','儘管我們不該放過任何打擊聯盟的機會,我們也不該忘記天譴軍團。$b$b接下來的幾個星期,我們的數量並不足以在這冰河上發動像樣的攻勢,但我們不會停止對其防務的刺探。$b$b我已向派駐在此的死亡騎士建議讓你也加入行動。畢竟,有誰比他們更了解這些敵人呢?$b$b容我介紹,寇爾提拉‧亡織者。','空奪者寇姆‧黑疤要求你,和奧格林之錘上的寇爾提拉‧亡織者對話。','','','','','','',0), +(13261,'zhTW','烈不烈','哇呼!成功啦!當然我怎麼可能懷疑自己超乎自然的天才,只是我不太確定應該期待多大的爆炸 - 這麼說吧,我很高興你的眉毛沒有燒焦。我現在只要讓老寇看看你砸那些龍。他只得升我當...當...比首席工程師還高的官兒!你再拿一批那玩意兒然後回去前線,我去叫老寇來...$b$b等什麼?出動啊!','首席工程師銅爪,要你在破碎前線使用銅爪的烈性油,以吸引3隻霜育天爪。$b$b為了使用烈性油,你必須先從戰場上取得被遺棄的頭盔、被遺棄的盔甲與骨堆。','','到寒冰皇冠的奧格林之錘找首席工程師銅爪。','完成實際試驗','','','',0), +(13262,'zhTW','炸翻它!','隨著現在這情況發展下去,局勢很可能會失去控制。我們這樣做吧,$n。$B$B我需要個人,幫我點燃那些炸彈的引信,看來就是你了。','點燃附近薩鋼炸彈堆的引信。','','','','','','',0), +(13263,'zhTW','一觸即發','在你點燃引信的同時,你發現引線燃燒的速度遠比你想像的快。$B$B這些炸彈馬上就要爆炸了,而你唯一能做的就是向坑洞撲倒,並且祈禱不要摔死。','注意不要被落下的殘骸擊中。','','','','','','',0), +(13264,'zhTW','有夠討厭!','憎惡體...$b$b可以是很難纏的敵人。我曾經不只一次看過他們逆轉整個戰局。很少人能理解,他們也可以是很可靠的戰友。$b$b他們不太思考。如果你知道他們製造的秘密,你就能夠賦予他們一些基本的指令而他們完全不會質疑你。$b$b算你好運,我知道這些秘密。$b$b這個裝置可以重新活化那些被你擊敗的憎惡體殘骸。拿著它,並學著用他們反擊那些死亡之門的天譴軍團。','奧格林之錘上的寇爾提拉‧亡織者要你使用憎惡體再活化工具包創造再活化的憎惡體,並用來殺掉15隻冰結食屍鬼、15隻邪惡的魂屍、15個復活的聯盟士兵。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','炸死冰結食屍鬼','炸死邪惡的魂屍','炸死復活的聯盟士兵','',0), +(13271,'zhTW','黑暗中的聲音','這物體一點也不像水晶,倒像某種組織,包覆著一層冰。$B$B當你碰觸到的那個瞬間,手便因突如其來的劇痛痙攣,你感覺到你的手似乎被劃了一刀卻沒有任何傷痕,正當你納悶著的當下,你聽到了一個小男孩的聲音從附近傳來。$B$B『你真的不應該那麼做。』','在納茲安那克:遺忘深淵中調查,找出那個附近聲音的來源。','','','','','','',0), +(13275,'zhTW','快躲起來','你真的不該碰它。但現在你碰了,他一定會出來找你。$B$B而且他一定會找到你,除非你躲起來。$B$B如果你還想活命,快幫我把無面者的血帶來。','米希阿斯‧薩爾奈要你取得3個無面者之血。','','到寒冰皇冠的納茲安那克:遺忘深淵找米希阿斯·薩爾奈。','','','','',0), +(13276,'zhTW','有夠討厭!','你知道怎麼做的,$c。$b$b拿著這個工具包,並使用從憎惡體身上取得的內臟來製作你專屬的憎惡體,然後命令他們去攻擊門口的那些敵軍。$b$b當我們在突襲入口時,你的作為將會大大地強化這項策略。','奧格林之錘上的寇爾提拉‧亡織者要你使用憎惡體再活化工具包創造再活化的憎惡體,並用來殺掉15隻冰結食屍鬼、15隻邪惡的魂屍、15個復活的聯盟士兵。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','炸死冰結食屍鬼','炸死邪惡的魂屍','炸死復活的聯盟士兵','',0), +(13277,'zhTW','抵抗巨人族','當對抗天譴軍隊的地面作戰開始白熱化,我們更不能忽略入口本身。$b$b城牆附近的血肉巨人能夠投擲巨石與大冰塊,對他們的敵軍步兵造成毀滅性的傷害,集結你的兵力並消滅這些巨人族。知己知彼、百戰百勝。$b$b還有,給我帶回點他們的背脊,如果我的記憶還正確,我應該還有點小秘訣可以傳授給你。','奧格林之錘上的寇爾提拉‧亡織者要你從默德雷薩的膿創恐獸身上取得5份膿汁之脊。','','到寒冰皇冠的奧格林之錘找寇爾提拉·亡織者。','','','','',0), +(13481,'zhTW','讓我們離開這裡!','聖光對我微笑。我還沒有死在這場活生生的夢魘中,不過如果我不逃出去,天譴軍團會因為我在「使用」它們在這邊的成果而把我撕成碎片。$B$B但我一個人逃不了,$c,我需要你的幫助,如果我能逃出去就能再次對抗天譴軍團。$B$B你願意幫我逃出去,從天譴軍的屠夫手上救我一命?','護送卡瑪洛斯神父至安全之處,並向奧格林之錘上的凱爾坦修士回報。','護送卡瑪洛斯神父逃離險境','到寒冰皇冠的奧格林之錘找凱爾坦修士。','','','','',0), +(13482,'zhTW','讓我們離開這裡','聖光對我微笑。我還沒有死在這場活生生的夢魘中,不過如果我不逃出去,天譴軍團會因為我在「使用」它們在這邊的成果而把我撕成碎片。$B$B但我一個人逃不了,我的孩子,我需要你的幫助,如果我能逃出去就能再次對抗天譴軍團。$B$B你願意幫我逃出去,從天譴軍的屠夫手上救我一命?','護送卡瑪洛斯神父至安全之處,並向破天者號上的虔誠的亞柏薩倫回報。','護送卡瑪洛斯神父逃離險境','到寒冰皇冠的破天者號找虔誠的亞柏薩倫。','','','','',0), +(14095,'zhTW','鑑定屍體','一顆從死亡的海怪身上找到的完整牙齒相當罕見。十字軍銀曦一定會想看看的。','把海怪牙交給十字軍銀曦來作為勝利的證明。','','到寒冰皇冠的銀白聯賽場地找十字軍銀曦。','','','','',0), +(14080,'zhTW','阻止侵略者','科瓦迪爾,可怕的維酷劫掠者,攔截了我們的船隻並屠戮了北方一座島上的巨牙海民,把島更名為赫魯斯加臺地。如果他們在那邊打穩基礎,毫無疑問我們將會是他們下一個目標。$B$B十字軍的軍力全都用在對付天譴軍了,所以我們必須保護聯賽場地。從這裡向北飛抵島上並在科瓦迪爾人毀滅任何東西之前處理掉他們。','銀白聯賽場地的娜拉希‧雪曦要你去殺掉10個科瓦迪爾人。','','到寒冰皇冠的銀白聯賽場地找娜拉希·雪曦。','殺死科瓦迪爾人','','','',0), +(14108,'zhTW','逮住海怪!','奪日者和白銀誓盟派遣船隻前往北邊的赫魯斯加臺地和科瓦迪爾人交戰,但他們被科瓦迪爾的劫掠艦隊中途攔截,且自顧不暇。更糟糕的是,科瓦迪爾人找出了召喚潛伏在北海深海中恐怖海怪的方法。如果我們想保住船上的人,就必須要驅離海怪,並且中斷科瓦迪爾的召喚儀式。$B$B十字軍,拿著這些長矛,銀白角鷹獸將會帶你前往戰場。','十字軍銀曦要你騎上銀白角鷹獸,對北海海怪投擲8支烈焰之矛並解決6個維酷深海呼喚者。$B$B你可以在聯賽場地的銀白十字軍帳篷外面找到銀白角鷹獸。','','到寒冰皇冠的銀白聯賽場地找十字軍銀曦。','對北海海怪投擲矛','','','',0), +(14136,'zhTW','海上救援','科瓦迪爾在北方的小島,赫魯斯加臺地上設立了據點。我們派遣埃薩斯‧火鷹船長前往該區,但他們遇上了正朝聯賽場地而來的科瓦迪爾劫掠艦隊!火鷹號正遭受劫掠者的攻擊,且人數居於劣勢。盡速前往該地,讓那些科瓦迪爾人瞭解攻擊奪日者是件多麼愚蠢的計畫。$B$B火鷹號的位置介於聯賽場地與北邊的赫魯斯加臺地之間,海劫者航道的西側。','銀白聯賽場地的『血漬』吉拉納要你殺掉登上火鷹號的8個科瓦迪爾狂戰士及3個科瓦迪爾魚叉手。','','到寒冰皇冠的銀白聯賽場地找『血漬』吉拉納。','','','','',0), +(13828,'zhTW','精通近戰','聯賽競技的核心就是騎乘近戰。拿起這把長槍,然後騎上亭閣外圈養的奎爾多雷戰駒。$B$B一旦你騎上坐騎,就去找傑倫‧鎖木。他就在聯賽場地的北部邊緣,志士競技場的東邊。傑倫會教你該怎麼樣使用防禦,確保你在近距作戰時的安全。','裝備你的長槍,騎上亭閣外的奎爾多雷戰駒。跟傑倫‧鎖木談談並以戳刺擊中近戰標靶5次,然後回去找銀白聯賽場地的秘法師泰利斯那。','','到寒冰皇冠的銀白聯賽場地找秘法師泰利斯。','對近戰標靶使用戳刺','對近戰標靶使用戳刺','','',0), +(13829,'zhTW','精通近戰','聯賽競技的核心就是騎乘近戰。拿起這把長槍,然後騎上亭閣外圈養的奪日者陸行鷹。$B$B一旦你騎上坐騎,就去找傑倫‧鎖木。他就在聯賽場地的北部邊緣,志士競技場的東邊。傑倫會教你該怎麼樣使用防禦,確保你在近距作戰時的安全。','裝備你的長槍,騎上亭閣外的奪日者陸行鷹。跟傑倫‧鎖木談談並以戳刺擊中近戰標靶5次,然後回去找銀白聯賽場地的博學者艾狄恩‧日谷那。','','到寒冰皇冠的銀白聯賽場地找博學者艾狄恩·日谷。','對近戰標靶使用戳刺','對近戰標靶使用戳刺','','',0), +(14090,'zhTW','戈莫克要他的極地狗頭人','我的兩名部下在試著囚禁猛瑪象人『穿刺者』戈莫克時被殺了,而那隻生物仍舊怒氣沖沖。牠因為最愛的極地狗頭人不在身邊而嚎叫了好幾個小時。$B$B如果銀白十字軍不希望在大競技場使用這隻怪物,我會親手殺掉牠。也許是該帶給這隻野獸一些玩具的時候了。帶著這個網子去風暴群山東南邊的迦姆之禍。就在K3的東北。捕捉一些極地狗頭人並向聖光祈禱你抓到正確的那隻。','使用加重的網子捕捉8隻雪盲跟隨者,並帶給銀白聯賽場地的莎薇娜‧識歌。','','到寒冰皇冠的銀白聯賽場地找莎薇娜·識歌。','捕捉雪盲跟隨者','捕捉雪盲追隨者','','',0), +(13835,'zhTW','精通破盾','你需要學會如何打破一個對手的防禦,才能在騎乘作戰中獲勝。拿起這把長槍,騎上亭閣外圈養的奎爾多雷戰駒。$B$B一旦你騎上坐騎,就去找瓦利斯‧逐風者。他就在聯賽場地的北部邊緣,志士競技場的東邊。瓦利斯會教你該怎麼樣使用遠距破盾攻擊,讓遠距標靶變得脆弱。','裝備你的長槍,騎上亭閣外的奎爾多雷戰駒。跟瓦利斯‧逐風者談談並且對2個脆弱的遠程標靶使用破盾,然後回去找銀白聯賽場地的斥候夏琳卓雅。','','到寒冰皇冠的銀白聯賽場地找斥候夏琳卓雅。','對脆弱的遠距標靶使用破盾','對脆弱的遠距標靶使用破盾','','',0), +(14092,'zhTW','勇士的早餐','現在大競技場完成了,銀白十字軍要我們幫忙尋找能與勇士對戰的生物。$B$B巨型蟄猛巨蟲有著最奇怪的進食特性;牠們吃自己同類的蛋會長得特別強壯,而深地蟄猛巨蟲的蛋是最好的。$B$B帶著這個鼓到風暴群山中央的足跡冷原,然後在那邊的雪堆附近敲鼓。鼓聲會引出深地蟄猛巨蟲。殺了牠們,收集牠們的卵囊並帶回聯賽場地。','取得4份蟄猛巨蟲卵囊並帶給銀白聯賽場地的提洛斯‧曦奔。','','到寒冰皇冠的銀白聯賽場地找提洛斯·曦奔。','','','','',0), +(13837,'zhTW','精通衝鋒','你在坐騎戰鬥時最強力的攻擊就是衝鋒。拿起這把長槍,騎上亭閣外圈養的奎爾多雷戰駒。$B$B一旦你騎上坐騎,就去找魯根‧鋼腹。他就在聯賽場地的北部邊緣,志士競技場的東邊。魯根會教你該怎麼樣使用衝鋒,並且教你一些基本戰略。','裝備你的長槍,然後在亭閣外的獸欄騎上圈養的奎爾多雷戰駒。去和魯根‧鋼腹談談,並且衝撞2個脆弱的衝鋒標靶,然後回來找銀白聯賽場地的阿凡瑞斯‧迅擊報告。','','到寒冰皇冠找阿凡瑞斯·迅擊。','對脆弱的衝鋒標靶使用衝鋒','對脆弱的衝鋒標靶使用衝鋒','','',0), +(13838,'zhTW','精通破盾','你需要學會如何打破一個對手的防禦,才能在騎乘作戰中獲勝。拿起這把長槍,騎上亭閣外圈養的奪日者陸行鷹。$B$B一旦你騎上坐騎,就去找瓦利斯‧逐風者。他就在聯賽場地的北部邊緣,志士競技場的東邊。瓦利斯會教你該怎麼樣使用遠距破盾攻擊,讓遠距標靶變得脆弱。','裝備你的長槍,然後在亭閣外的獸欄騎上圈養的奪日者陸行鷹。去和瓦利斯‧逐風者談談,並且衝撞2個脆弱的衝鋒標靶,然後回後找銀白聯賽場地的加拉西雅‧明曦報告。','','到寒冰皇冠的銀白聯賽場地找加拉西雅·明曦。','對脆弱的遠距標靶使用破盾','對脆弱的遠距標靶使用破盾','','',0), +(13839,'zhTW','精通衝鋒','你在坐騎戰鬥時最強力的攻擊就是衝鋒。拿起這把長槍,騎上亭閣外的圈養奪日者陸行鷹。$B$B一旦你騎上坐騎,就去找魯根‧鋼腹。他就在聯賽場地的北部邊緣,志士競技場的東邊。魯根會教你該怎麼樣使用衝鋒,並且教你一些基本戰略。','裝備你的長槍,然後在亭閣外的獸欄騎上圈養的奪日者陸行鷹。去和魯根‧鋼腹談談,並且衝撞2個脆弱的衝鋒標靶,然後回後找銀白聯賽場地的艾瑪瑞爾‧日誓報告。','','到寒冰皇冠的銀白聯賽場地找艾瑪瑞爾·日誓。','對脆弱的衝鋒標靶使用衝鋒','對脆弱的衝鋒標靶使用衝鋒','','',0), +(14096,'zhTW','庫爾,看看你這次幹得好事','十字軍庫爾又讓自己陷入麻煩了,不過這次可不只他一個人。當他發現有些教徒在聯賽場地西邊的亡頌者之望紮營時,庫爾召集了一些志士發動一次突襲。$B$B在沒有增援的情況下,庫爾和他的跟隨者輕易的被俘虜了。除非我們進行救援,不然神教一定會將囚犯當作祭品。任何一個教徒都有可能帶著黑色牢籠的鑰匙。找到鑰匙並釋放庫爾及被俘虜的志士們。','從亡頌者之望救出『魯莽』庫爾和4位被俘虜的志士,然後回去找銀白聯賽場地的娜拉希‧雪曦。','','到寒冰皇冠的銀白聯賽場地找娜拉希·雪曦。','拯救『魯莽』庫爾','拯救被俘虜的志士','','',0), +(14101,'zhTW','多廷‧赫魯斯加','科瓦迪爾,這些海上的維酷人劫掠了船隻和岸邊的居民,屠戮了北方海峽那端一座巨牙海民的島。他們的首領,多廷‧赫魯斯加,打算控制這整片海域。$B$B若他的勢力壯大,我們的船隻和軍艦就永無安寧之日了。我們將被孤立在此而對巫妖王束手就擒。$B$B拿著這個奪來的科瓦迪爾戰爭號角到赫魯斯加臺地東北邊的巨牙海民雕像之環,使用它來挑戰科瓦迪爾的首領。','銀白聯賽場地的高階十字軍艾德拉要你去擊敗多廷‧赫魯斯加。','','到寒冰皇冠的銀白聯賽場地找高階十字軍艾德拉。','','','','',0), +(13846,'zhTW','為理念捐款','最好最佳的勇士每天都會來禮拜堂聆聽銀白告解者的教誨。$B$B你應該看看她是如何鼓舞他們的,$n。他們不僅僅是為銀白十字軍奮戰,更是為理念捐了很多錢。$B$B也許你也想捐獻一點?','和侍從亞緹談談並為銀白十字軍的理念捐贈10金。','','','','','','',0), +(14102,'zhTW','喚霧者伊格瓦','科瓦迪爾回到了北裂境的海岸,若不加以制止,他們將會截斷我們的援軍以及後勤補給。他們的其中一員,喚霧者伊格瓦,居住在赫魯斯加臺地西邊的洞穴中。他在那裡操縱著霧來隱蔽科瓦迪爾及他們操控的海中怪獸。$B$B拿著這個符咒,前往聯賽場地北邊海峽彼端的赫魯斯加臺地。找到喚霧者的洞穴並使用符咒讓他現形。','銀白聯賽場地的高階十字軍艾德拉要你去殺掉喚霧者伊格瓦。','','到寒冰皇冠的銀白聯賽場地找高階十字軍艾德拉。','','','','',0), +(13847,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在進行突襲敵人在冰冠城塞中堡壘的準備。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的約瑟夫‧霍雷上尉要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找約瑟夫·霍雷上尉。','','','','',0), +(13592,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用他們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的馬庫斯‧巴羅威爵士要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找馬庫斯·巴羅威爵士。','','','','',0), +(14104,'zhTW','『刀疤』歐諾夫','『刀疤』歐諾夫在科瓦迪爾中是以劫掠和俘虜船隻聞名的可怕劫掠者。他和船員駕駛博爾之怒攻擊我們的船隻並竊奪我們的貨物。$B$B歐諾夫和他的部下也是屠戮巨牙海民並把島改名為赫魯斯加臺地的傢伙。他的船停泊在島上港口的東端。將這面旌旗插在船上,宣告你擄獲了他的船,進而挑釁他出來和你一戰。','銀白聯賽場地的高階十字軍艾德拉要你去殺掉『刀疤』歐諾夫。','','到寒冰皇冠的銀白聯賽場地找高階十字軍艾德拉。','','','','',0), +(13593,'zhTW','暴風城驍士','歡迎,勇士。我已經聽過你不少的戰鬥表現。你打算要加入暴風城聯賽代表隊嗎?$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得暴風城勇士的頭銜時,你的侍從將能攜帶我們的旌旗進入戰鬥。','如果你想成為一位暴風城驍士,再去和傑科布‧亞雷瑞斯元帥談談。','','','','','','',0), +(14105,'zhTW','亡頌者凱洛斯','詛咒神教為了目睹我們的毀滅而又增強了他們的勢力。他們在聯賽場地西邊山脊的亡頌者之望據點越來越堅強茁壯。$B$B殘忍的亡頌者凱洛斯和他的部下鞏固了他們的所在地並準備釋放所有神教的武器。$B$B我的部下已經準備好與驍士們一同保衛聯賽場地,但我需要一個像你,$n,一樣的勇士來引領我們的行動以減緩攻勢。找到亡頌者凱洛斯並殺了他。','銀白聯賽場地的高階十字軍艾德拉要你去殺掉亡頌者凱洛斯。','','到寒冰皇冠的銀白聯賽場地找高階十字軍艾德拉。','','','','',0), +(13851,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的卡拉菈‧跌酒要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找卡拉菈·跌酒。','','','','',0), +(14107,'zhTW','逝往者的命運','銀白十字軍並不是第一個在寒冰皇冠對抗巫妖王的勢力。我們的敵人正在讓那些逝去的靈魂來對抗我們。$B$B他們遊蕩在逝往英雄山谷,聯賽場地的西南方,奧多薩與鐵牆壁壘之間。那個區域散亂著毀棄的靈魂水晶,被天譴軍團用來控制那些靈魂。收集那些靈魂水晶並和這個聖光祝福聖物一起使用來給予那些靈魂安息的祝福。這些英雄們理當早日獲得安息。','十字軍銀曦要你讓6位陣亡英雄之靈獲得安息。','','到寒冰皇冠的銀白聯賽場地找十字軍銀曦。','祝福陣亡英雄之靈','','','',0), +(13600,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','把德拉克瑪之刃帶給銀白聯賽場地的傑科布‧亞雷瑞斯元帥。','','到銀白聯賽場地找傑科布·亞雷瑞斯元帥。','','','','',0), +(13854,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的蘭妮要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找蘭妮。','','','','',0), +(13855,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的愛芮‧尋星者要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找愛芮·星尋者。','','','','',0), +(13856,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的莫菈‧座狼姊妹要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找莫菈·座狼姊妹。','','','','',0), +(14112,'zhTW','雪人到底該吃什麼?','十字軍抓住了一隻叫作冰嚎的雪人。他將會成為大競技場對戰的成員之一,而我們被要求幫忙訓練及看護他。$B$B十字軍應該不會喜歡用奪日者的屍塊餵食這隻野獸的建議。這隻生物偏好鯊魚肉,所以我要你飛去停在北方海峽的銀刃號。從船上拿一籃新鮮的肉餌,然後撒在水中來吸引鯊魚過來。','銀白聯賽場地的莎薇娜‧識歌要你帶3片北海鯊魚肉給她。','','到寒冰皇冠的銀白聯賽場地找莎薇娜·識歌。','','','','',0), +(13857,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的嘎尤要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找嘎尤。','','','','',0), +(13858,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的安卡‧爪蹄要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找安卡·爪蹄。','','','','',0), +(13603,'zhTW','名劍配勇士','精心淬鍊磨利的鋼劍如今已經不流行了。其他的戰士都在使用附魔的刀刃,我在這方面可是輸了他們一大截,但還是有機會的。$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就混雜在灰木湖畔那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會長疣。','取得灰木古劍,並帶給銀白聯賽場地的傑科布‧亞雷瑞斯元帥。','','到寒冰皇冠的銀白聯賽場地找傑科布·亞雷瑞斯元帥。','','','','',0), +(13616,'zhTW','凜冬之鋒','詛咒那個打斷我配劍的死亡騎士!$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死它並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的傑科布‧亞雷瑞斯元帥要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找傑科布·亞雷瑞斯元帥。','','','','',0), +(13625,'zhTW','學習駕馭','聯賽中大部分的比賽都需要比賽者在戰鬥中妥善地駕馭坐騎。為了讓你熟習騎乘作戰,我們在聯賽場地北區的各處都放置了練習用的假人。$B$B到亭閣外的獸欄去,就在主競技場旁邊。從長槍架上拿把長槍,然後騎上奎爾多雷戰駒。讓你自己熟習它們的作戰方式並且擊敗三種不同的訓練假人。','以戳刺擊中近戰標靶5次,對2個脆弱的遠程標靶使用破盾,對2個脆弱的衝鋒標靶使用衝鋒。然後回到銀白聯賽場地找斥候夏琳卓雅。$B$B如果你弄丟了長槍,你可以從任何一個靠近白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找斥候夏琳卓雅。','對近戰標靶使用戳刺','對脆弱的遠程標靶使用破盾','對脆弱的衝鋒標靶使用衝鋒','',0), +(13627,'zhTW','幫我盜伐一些木材','過來點。不,別太近。我們不想引起過多的注意,對吧?$B$B大競技場所需要的木材超過了我們的儲備物資,我可不要付錢去買那些從灰白之丘運來的木材。在水晶之歌森林的西部邊緣,靠近巨偉之樹的附近,長了一些年輕的水晶之歌橡木。$B$B正好可以提供我們建築與搭架用的板材。帶上這把斧頭,用它砍倒那些樹再把它們劈成木板,但別讓人看見!','把12個亂劈的木板帶給銀白聯賽場地的貝索‧爆栓。','','到寒冰皇冠的銀白聯賽場地找貝索·爆栓。','','','','',0), +(13634,'zhTW','銀松的黑騎士?','我想你應該聽過那個叫做黑騎士參賽者的惱人謠言。據說任何預定要和他比賽戰鬥的人全都遭遇不測。$B$B當然,我們沒有任何證據,但調查一下這位騎士也無傷大雅。$B$B他自稱來自銀松森林的瓦爾甘牧場。那是一個在洛丹米爾湖西岸的小牧場。你能去拜訪那個牧場讓我們知道他故事的真相嗎?','調查黑騎士的說詞,然後帶著你的發現回到銀白聯賽場地去找十字軍萊達菈。','','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','','','','',0), +(13859,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的安妮拉‧修倫要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找安妮拉·修倫。','','','','',0), +(13860,'zhTW','在敵人的大門前','在我們準備好參加聯賽的同時,銀白十字軍軍團也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王的爪牙。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的管理者德瑞齊要你去殺掉15個骨衛步卒、10個骨衛斥候以及3個骨衛中尉。','','到寒冰皇冠的銀白聯賽場地找管理者德瑞齊。','','','','',0), +(13861,'zhTW','冰冠城塞前的戰鬥','在我們一些人為了聯賽而忙碌的同時,我們的兄弟也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王手下的指揮官。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的『純淨者』埃卓克要你去殺掉3個骨衛指揮官。','','到寒冰皇冠的銀白聯賽場地找『純淨者』埃卓克。','','','','',0), +(13862,'zhTW','冰冠城塞前的戰鬥','在我們一些人為了聯賽而忙碌的同時,我們的兄弟也在準備突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的銀白戰騎,再去毀滅巫妖王手下的指揮官。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的『純淨者』埃卓克要你去殺掉3個骨衛指揮官。','','到寒冰皇冠的銀白聯賽場地找『純淨者』埃卓克。','','','','',0), +(13863,'zhTW','冰冠城塞前的戰鬥','在某些十字軍準備聯賽的同時,他們也派出了其他人去突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王手下的指揮官。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的克羅科‧天譴剋星要你去殺掉3個骨衛指揮官。','','到寒冰皇冠的銀白聯賽場地找克羅科·天譴剋星。','','','','',0), +(13864,'zhTW','冰冠城塞前的戰鬥','在某些十字軍準備聯賽的同時,他們也派出了其他人去突襲敵人在冰冠城塞中的堡壘。$B$B在寒冰皇冠西南的白骨之廷,有一些勇敢的十字軍已經在寇普雷薩南方設立了前線營地。裝上你的長槍並騎上在營地裡圈養的競賽戰騎,再去毀滅巫妖王手下的指揮官。$B$B不用畏懼成群的骨衛步卒,$n,戰騎的馬蹄能輕易的踐踏他們。','銀白聯賽場地的克羅科‧天譴剋星要你去殺掉3個骨衛指揮官。','','到寒冰皇冠的銀白聯賽場地找克羅科·天譴剋星。','','','','',0), +(14140,'zhTW','阻止侵略者','科瓦迪爾,可怕的維酷劫掠者,攔截了我們的船隻並屠戮了北方一座島上的巨牙海民,把島更名為赫魯斯加臺地。如果他們在那邊打穩基礎,毫無疑問我們將會是他們下一個目標。$B$B十字軍的軍力全都用在對付天譴軍了,所以我們必須保護聯賽場地。從這裡向北飛抵島上並在科瓦迪爾毀滅任何東西之前處理掉他們。','銀白聯賽場地的『血漬』吉拉納要你去殺掉10個科瓦迪爾人。','','到寒冰皇冠的銀白聯賽場地找『血漬』吉拉納。','殺死科瓦迪爾','','','',0), +(14141,'zhTW','戈莫克要他的極地狗頭人','我的兩名部下在試著囚禁猛瑪象人『穿刺者』戈莫克時被殺了,而那隻生物仍舊怒氣沖沖。牠因為最愛的極地狗頭人不在身邊而嚎叫了好幾個小時。$B$B如果銀白十字軍不希望在大競技場使用這隻怪物,我會親手殺掉牠。也許是該帶給這隻野獸一些玩具的時候了。帶著這個網子去風暴群山東南邊的迦姆之禍。就在K3的東北。捕捉一些極地狗頭人並向聖光祈禱你抓到正確的那隻。','使用加重的網子捕捉8隻雪盲跟隨者,並帶給銀白聯賽場地的提洛斯‧曦奔。','','到寒冰皇冠的銀白聯賽場地找提洛斯·曦奔。','捕捉雪盲跟隨者','捕捉雪盲追隨者','','',0), +(14142,'zhTW','庫爾,看看你這次幹得好事','十字軍庫爾又讓自己陷入麻煩了,不過這次可不只他一個人。當他發現有些教徒在聯賽場地西邊的亡頌者之望紮營時,庫爾召集了一些志士發動一次突襲。$B$B在沒有增援的情況下,庫爾和他的跟隨者輕易地被俘虜了,庫爾如今被囚禁在營地內平台上的牢籠裏。除非我們進行救援,不然神教一定會將囚犯當作祭品。任何一個教徒都有可能帶著黑色牢籠的鑰匙。找到鑰匙並釋放庫爾及被俘虜的志士們。','從亡頌者之望救出『魯莽』庫爾和4位被俘虜的志士,然後回去找銀白聯賽場地的『血漬』吉拉納。','','到寒冰皇冠的銀白聯賽場地找『血漬』吉拉納。','拯救『魯莽』庫爾','拯救被俘虜的志士','','',0), +(14143,'zhTW','被劫的腿肉補給','銀白十字軍派遣了一艘載著陸行鳥肉及其他補給品的快艇來給聯賽場地的我們,但它一直沒有抵達。斥候回報說看見快艇被科瓦迪爾人所攻擊,那是一群可怕的海上維酷劫掠者。$B$B他們屠殺了船員並把貨物帶去一座叫做赫魯斯加臺地的島上。如果你往北方看去,可以看見它籠罩在迷霧之中。你能幫我們取回那些被偷的貨物嗎?沒有那些陸行鳥腿,我們很快就會斷糧。','取回10份被偷的陸行鳥腿給銀白聯賽場地的『血漬』吉拉納。','','到寒冰皇冠的銀白聯賽場地找『血漬』吉拉納。','','','','',0), +(14144,'zhTW','聖光的憐憫','我聽從告解者帕爾璀絲的教誨,我必須告訴你,她說的話讓我省思許多。與十字軍並肩作戰是不夠的;我們必須接手他們的任務。$B$B北海岸外就是赫魯斯加臺地,來自海上的科瓦迪爾侵襲了這個古老的巨牙海民聚落,並屠殺了村民。拿著這本書並在村民屍體旁為死者頌禱儀式。這可以讓他們的靈魂脫離迷霧的束縛並獲得安息。','使用告解者的祈禱書對8個被殺的托利克村民執行最後的儀式,然後回去找銀白聯賽場地的『血漬』吉拉納。','','到寒冰皇冠的銀白聯賽場地找『血漬』吉拉納。','執行最後的儀式','','','',0), +(14145,'zhTW','雪人到底該吃什麼?','十字軍抓住了一隻叫作冰嚎的雪人。他將會成為大競技場對戰的成員之一,而我們被要求幫忙訓練及看護他。$B$B十字軍應該不會喜歡我們拿白銀誓盟的成員來餵食這隻野獸的建議。這隻生物偏好鯊魚肉,所以我要你飛去停在北方海峽的赤曦號。從船上拿一籃新鮮的肉餌,然後撒在水中來吸引鯊魚過來。','銀白聯賽場地的提洛斯‧曦奔要你帶3片北海鯊魚肉給他。','','到寒冰皇冠的銀白聯賽場地找提洛斯·曦奔。','','','','',0), +(13643,'zhTW','死者的故事','這顆水晶將會揭露三名聯賽參賽者的死亡真相。帶著它前往聯賽場地東邊的墓地,在溫德爾‧貝爾弗爵士、洛瑞安‧日炎和康歐‧鐵握的墳墓前使用它。$B$B如果這些人真的遭到謀殺,並且與黑騎士有關,那我們一定得要阻止他再次行動。仔細留意水晶的訊息,$n,我們一定要確認這些死亡是不是意外。','在溫德爾‧貝爾弗爵士、洛瑞安‧日炎和康歐‧鐵握的墳墓前使用先知水晶,找出他們的死因,然後向十字軍萊達菈回報。','','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','調查溫德爾·貝爾弗爵士的死亡真相','調查洛里安·日炎的死亡真相','調查康歐·鐵握的死亡真相','',0), +(13663,'zhTW','黑騎士的命令','我們一定要查出誰派黑騎士來參加聯賽,他的主人又能從殺死參賽者中獲得什麼好處。$B$B祈倫托表示願意在這件事情上提供協助。$B$B帶著這個附魔韁轡到黑騎士在聯賽場地東側的營地,用它來控制黑騎士的獅鷲獸。韁轡的魔法會強迫獅鷲獸帶你到他主人的所在。仔細搜索然後把你發現的東西給帶回來。','使用附魔韁轡控制黑騎士的獅鷲獸,並騎著牠前往目的地。一旦你抵達後,找到失竊的聯賽邀請函和黑騎士的命令,然後把這些東西帶給銀白聯賽場地的十字軍萊達菈。','','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','控制黑騎士的獅鷲獸','','','',0), +(13664,'zhTW','黑騎士之死','我們必須讓黑騎士的陰謀畫上句點,並且讓那些反對我們的人明白,我們不會坐視並允許我們的勇士被謀殺。現在,他將察覺有人擋住了他的路。在光天化日之下挑戰他,他就不能拒絕或在黑暗中進行暗殺,$n。$B$B用我的銀白戰騎出賽。牠就拴在獸欄。$B$B和勇士競技場的侍從凱文談談。侍從會召喚黑騎士前來戰鬥,但你要讓為他的罪行付出代價。','擊敗黑騎士然後與銀白聯賽場地的十字軍萊達菈談話。','','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','','','','',0), +(13665,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。暴風城的百姓崇拜他們的騎士,並且希望我們能在技擊賽中獲勝。因此,所以每個人都磨練戰技等著對抗其他聯盟城市的驍士。$B$B我也建議你這麼做。$B$B到亭閣外的獸欄去,從長槍架上拿把長槍,然後騎上圈養的艾爾文戰駒,然後挑戰其他的驍士。他們就在我們帳篷外的聯盟驍士競技場。','帶3個驍士印記交給銀白聯賽場地的約瑟夫‧霍雷上尉。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找約瑟夫·霍雷上尉。','','','','',0), +(13666,'zhTW','名劍配勇士','有些勇士相信一把來自北裂境的上古武器可以在聯賽中帶來好運。而我已經同意要幫他們找到這些武器。$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就混雜在灰木湖畔那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會長疣。','取得灰木古劍,並帶給銀白聯賽場地的秘法師泰利斯。','','到寒冰皇冠的銀白聯賽場地找秘法師泰利斯。','','','','',0), +(13667,'zhTW','銀白聯賽','我們邀請你來此,與其他勇敢對抗天譴軍的人們彼此競技,來驗證你的技能與勇氣。我們之中曾有過許多歧見,然而,讓分屬於不同旌旗下的英雄們相互較勁,來準備面對我們共同敵人的時刻到了。$B$B秘法師泰利斯是白銀誓盟在聯賽中的代表,他會把你的名字登入列表並且開始你的訓練。他就在場地東北區的大型聯盟營帳中。','與銀白聯賽場地的秘法師泰利斯交談,以參加聯賽。','','','','','','',0), +(13668,'zhTW','銀白聯賽','我們邀請你來此,與其他勇敢對抗天譴軍的人們彼此競技,來驗證你的技能與勇氣。我們之中曾有過許多歧見,然而,讓分屬於不同旌旗下的英雄們相互較勁,來準備面對我們共同敵人的時刻到了。$B$B博學者艾狄恩‧日谷是奪日者在聯賽中的代表,他會把你的名字登入列表並且開始你的訓練。他就在場地東南區的大型部落營帳中。','與銀白聯賽場地的博學者艾狄恩‧日谷交談,以參加聯賽。','','','','','','',0), +(13669,'zhTW','足以匹配的武器','我們的勇者偏好北裂境這裡所生產的上古武器。$B$B我曾聽聞吟遊詩人講述旅行者將凜冬風信子獻給孤獨的少女,以換取回報之禮的故事,那些風信子只長在鐵牆水壩的流冰之上,就在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去德拉克瑪湖的燈之環,位於龍骨荒野東北邊,靠近祖爾德拉克與灰白之丘。向孤獨的少女要一把足以匹配的劍刃。','將德拉克瑪之刃帶給銀白聯賽場地的秘法師泰利斯。','','到寒冰皇冠的銀白聯賽場地找秘法師泰利斯。','','','','',0), +(13670,'zhTW','凜冬之鋒','鐵爐堡大勇士的侍從告訴我一個有趣的故事。$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死它並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的秘法師泰利斯要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找秘法師泰利斯。','','','','',0), +(13671,'zhTW','實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。向我們證明你能光榮和勇敢地面對天譴軍團,並且贏得參加聯賽的資格。$B$B前往寒冰皇冠,殺死任何目光所及的天譴軍。但要避開轟炸地,他們在那裡的數量太多了。','銀白聯賽場地的阿凡瑞斯‧迅擊要你殺死8個寒冰皇冠天譴軍。你可以殺死在轟炸地以外的任何天譴軍。','','到寒冰皇冠找阿凡瑞斯·迅擊。','殺死寒冰皇冠天譴軍','','','',0), +(13672,'zhTW','準備挑戰','當你一邊磨練志士的技巧,你也可以接受志士的挑戰。挑戰將會考驗你騎乘戰鬥的技巧,並且判別你是否準備好成為一名驍士。如果你通過挑戰,你就可以加入你主城的代表隊,成為一名驍士。$B$B等你準備好開始挑戰,可以回來找我。','帶15個志士徽印給銀白聯賽的秘法師泰利斯,表示你準備好接受志士的挑戰。','','到寒冰皇冠的銀白聯賽場地找秘法師泰利斯。','','','','',0), +(13673,'zhTW','名劍配勇士','有些勇士相信一把來自北裂境的上古武器可以在聯賽中帶來好運。而我已經同意要幫他們找到這些武器。$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就混雜在灰木湖畔那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會長疣。','取得灰木古劍,並帶給銀白聯賽場地的博學者艾狄恩‧日谷。','','到寒冰皇冠的銀白聯賽場地找博學者艾狄恩·日谷。','','','','',0), +(13674,'zhTW','足以匹配的武器','我們的勇者偏好北裂境這裡所生產的上古武器。$B$B我曾聽聞吟遊詩人講述旅行者將凜冬風信子獻給孤獨的少女,以換取回報之禮的故事,那些風信子只長在鐵牆水壩的流冰之上,就在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去德拉克瑪湖的燈之環,位於龍骨荒野東北邊,靠近祖爾德拉克與灰白之丘。向孤獨的少女要一把足以匹配的劍刃。','將德拉克瑪之刃帶給銀白聯賽場地的博學者艾狄恩‧日谷。','','到寒冰皇冠的銀白聯賽場地找博學者艾狄恩·日谷。','','','','',0), +(13675,'zhTW','凜冬之鋒','有位奧格瑪驍士告訴我一個有趣的故事。$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死他並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的博學者艾狄恩‧日谷要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找博學者艾狄恩·日谷。','','','','',0), +(13676,'zhTW','實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。向我們證明你能光榮和勇敢地面對天譴軍團,並且贏得參加聯賽的資格。$B$B前往寒冰皇冠,殺死任何目光所及的天譴軍。但要避開轟炸地,他們在那裡的數量太多了。','銀白聯賽場地的艾瑪瑞爾‧日誓要你殺死8個寒冰皇冠天譴軍。你可以殺死寒冰皇冠中除了轟炸地以外,任何地方的天譴軍。','','到寒冰皇冠的銀白聯賽場地找艾瑪瑞爾·日誓。','殺死寒冰皇冠天譴軍','','','',0), +(13677,'zhTW','學習駕馭','聯賽中大部分的比賽都需要比賽者在戰鬥中妥善地駕馭坐騎。為了讓你熟習騎乘作戰,我們在聯賽場地北區的各處都放置了練習用的假人。$B$B到亭閣外的獸欄去,就在主競技場旁邊。從長槍架上拿把長槍,然後騎上奪日者陸行鷹。讓你自己熟習它的作戰方式並且用它擊敗三種不同的訓練假人。','以戳刺擊中近戰標靶5次,對2個脆弱的遠程標靶使用破盾,對2個脆弱的衝鋒標靶使用衝鋒。然後回到銀白聯賽場地找加拉西雅‧明曦。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找加拉西雅·明曦。','對近戰標靶使用戳刺','對脆弱的遠程標靶使用破盾','對脆弱的衝鋒標靶使用衝鋒','',0), +(13678,'zhTW','準備挑戰','當你一邊磨練志士的技巧,你也可以接受志士的挑戰。挑戰將會考驗你騎乘戰鬥的技巧,並且判別你是否準備好成為一名驍士。如果你通過挑戰,你就可以加入你主城的代表隊,成為一名驍士。$B$B等你準備好開始挑戰,可以回來找我。','帶15個志士徽印給銀白聯賽場地的博學者艾狄恩‧日谷,表示你準備好接受志士的挑戰。','','到寒冰皇冠的銀白聯賽場地找博學者艾狄恩·日谷。','','','','',0), +(13679,'zhTW','志士的挑戰','你是一位認真鍛鍊的志士,$n,該是時候找個經驗老到的對手來測試你的騎乘作戰技巧了。$B$B裝備你的長槍,到亭閣外的獸欄去騎上奎爾多雷戰駒。$B$B你可以在聯賽場地北部的志士競技場中找到侍從大衛。他會確認你已經準備好戰鬥,並且召喚你的對手。$B$B祝好運,$n。願你的馬匹穩健而你的攻勢凌厲。','和侍從大衛交談以召喚你的對手。一旦你擊敗銀白驍士,回去銀白聯賽場地找秘法師泰利斯。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找秘法師泰利斯。','擊敗銀白驍士','','','',0), +(13680,'zhTW','志士的挑戰','你是一位認真鍛鍊的志士,$n,該是時候找個經驗老到的對手來測試你的騎乘作戰技巧了。$B$B裝備你的長槍,到亭閣外的獸欄去騎上奪日者陸行鷹。$B$B在聯賽場地北部的志士競技場,有個人類小孩叫做侍從大衛。他會確認你已經準備好戰鬥,並且召喚你的對手。$B$B祝好運,$n。願你的坐騎穩健而你的攻勢凌厲。','和侍從大衛交談以召喚你的對手。一旦你擊敗銀白驍士,回去銀白聯賽場地找博學者艾狄恩‧日谷。','','到寒冰皇冠的銀白聯賽場地找博學者艾狄恩·日谷。','擊敗銀白驍士','','','',0), +(13681,'zhTW','奧杜亞石塊的碎片','別說你不知道,要替這項工程準備石材真是場惡夢!許多安全的遺跡裡有成噸成噸的石頭,那些神聖到腦子有問題的聖騎士卻不肯用。說什麼那是『無價的瑰寶』。$B$B總之,唉唉叫也無濟於事。在風暴群山的足跡冷原或發明者圖書館的泰坦遺跡中,有著成山成噸的石頭。帶上我的,呃,『鑿子』,你可以把那些大石塊打碎成可用的碎片。','帶15個小型石塊堆給銀白聯賽場地的波索‧爆栓。','','到寒冰皇冠的銀白聯賽場地找波索·爆栓。','','','','',0), +(13682,'zhTW','來自上空的威脅','自從你揭發了詛咒神教的潛伏者之後,大領主提里奧‧弗丁就加倍了守衛的人數。他認為他們不可能只因為黑騎士被擊敗就停止行動。$B$B根據我們的天爪斥候回報,有一隻叫做寒冽之喉的冰霜巨龍率領了一批神教突襲隊。如果我們沒有攔截他們,聯賽就會受到他們的攻擊。斥候回報看見寒冽之喉就在西南方,在鐵牆壁壘和奧多薩之間的地區飛行。','銀白聯賽的『純淨者』埃卓克要你擊敗寒冽之喉和3個教徒投彈手。','','到寒冰皇冠的銀白聯賽場地找『純淨者』埃卓克。','','','','',0), +(13684,'zhTW','暴風城驍士','你已經證明你有資格在暴風城的旌旗下參與競賽,$n。現在,你應該去向傑科布‧亞雷瑞斯元帥自我介紹,他率領著暴風城代表隊,同時也是暴風城大勇士。他會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的傑科布‧亞雷瑞斯元帥談談,以成為一名暴風城驍士。','','','','','','',0), +(13686,'zhTW','聯盟聯賽認可標記','','','','','','','','',0), +(13687,'zhTW','部落聯賽認可標記','','','','','','','','',0), +(13696,'zhTW','銀月城驍士','你已經證明你有資格在銀月城的旌旗下參與競賽,$n。現在,你應該去向艾瑞西雅‧曦詠自我介紹,她率領著銀月城代表隊,同時也是銀月城大勇士。她會讓你在主城的名義下參加聯賽,並檢視你作為一名驍士的訓練與測驗。$B$B很榮幸和你一同合作,$n,祝你在比賽時一切順利。','跟銀白聯賽場地的艾瑞西雅‧曦詠談談,以成為一名銀月城驍士。','','','','','','',0), +(13697,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士是十分活躍的一群,帶著榮譽戰鬥吧。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的『碎顱者』莫克拉。','','到寒冰皇冠的銀白聯賽場地找『碎顱者』莫克拉。','','','','',0), +(13699,'zhTW','驍士的挑戰','你幾乎已具備代表暴風城參加技擊大賽的資格了。為了要證明你足以加入城市代表隊名單中,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到聯賽場地西側的銀白驍士競技場找侍從丹尼。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找傑科布‧亞雷瑞斯元帥。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找傑科布·亞雷瑞斯元帥。','擊敗銀白勇士','','','',0), +(13700,'zhTW','聯盟勇士標記','','','','','','','','',0), +(13701,'zhTW','部落勇士標記','','','','','','','','',0), +(13702,'zhTW','一位勇士的出現','恭喜,$n。你已經熟習了各種戰鬥,並且克服了一切挑戰。無庸置疑,你已經準備好跟我們最優秀的戰士一起對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入勇士的技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13703,'zhTW','鐵爐堡驍士','歡迎,勇士。我已經聽過你不少的戰鬥表現。你打算要加入鐵爐堡代表隊嗎?$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得鐵爐堡勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位鐵爐堡驍士,再去和菈娜‧頑錘談談。','','','','','','',0); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(13704,'zhTW','諾姆瑞根驍士','歡迎,勇士。我已經聽過你不少的戰鬥表現。諾姆瑞根代表隊能有你這樣的$c加入,一定獲益良多。$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得諾姆瑞根勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位諾姆瑞根驍士,再去和安布羅斯‧拴炫談談。','','','','','','',0), +(13706,'zhTW','達納蘇斯驍士','歡迎,勇士。我聽說了關於你的成就,如果你願意加入達納蘇斯代表隊,我們會感到很榮幸。$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得達納蘇斯勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位達納蘇斯驍士,再去和潔琳‧晚歌談談。','','','','','','',0), +(13707,'zhTW','奧格瑪驍士','所以,你成為一位勇士了?嗯,你證明了你是個夠格的戰士,我很驕傲地歡迎你加入奧格瑪代表隊。$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得奧格瑪勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位奧格瑪驍士,再去和『碎顱者』莫克拉談談。','','','','','','',0), +(13708,'zhTW','森金驍士','你好,勇士。如果你願意的話,我很樂意歡迎你加入森金的聯賽代表隊。$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得森金勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位森金驍士,再去和祖爾拓談談。','','','','','','',0), +(13709,'zhTW','雷霆崖驍士','歡迎,勇士。身為雷霆崖代表隊的大勇士,如果你願意,我們很榮幸能夠有你的加入。$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得雷霆崖勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位雷霆崖驍士,再去和魯諾克‧蠻鬃談談。','','','','','','',0), +(13710,'zhTW','幽暗城驍士','歡迎,勇士。被遺忘者代表隊總是需要更多像你一樣的$c。你要加入我們嗎?$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得幽暗城勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位幽暗城驍士,再去和亡靈哨兵威瑟瑞談談。','','','決定成為一名暴風城侍從','','','',0), +(13711,'zhTW','銀月城驍士','所以,你成為一位勇士了?嗯,你證明了你是個夠格的戰士,我很驕傲地歡迎你加入銀月城代表隊。$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得銀月城勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位銀月城驍士,再去和艾瑞西雅‧曦詠談談。','','','','','','',0), +(13713,'zhTW','驍士的挑戰','你幾乎已具備代表鐵爐堡參加技擊大賽的資格了。為了要證明你足以加入城市代表隊名單中,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到聯賽場地西側的銀白驍士競技場找侍從丹尼。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找菈娜‧頑錘。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','','擊敗銀白勇士','','','',0), +(13714,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士十分活躍,他們彼此會為了榮譽而爭鬥。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的菈娜‧頑錘。','','到寒冰皇冠的銀白聯賽場地找菈娜·頑錘。','','','','',0), +(13715,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士十分活躍,他們彼此會為了榮譽而爭鬥。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的安布羅斯‧拴炫。','','到寒冰皇冠的銀白聯賽場地找安布羅斯·拴炫。','','','','',0), +(13716,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士十分活躍,他們彼此會為了榮譽而爭鬥。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的克羅索斯。','','到寒冰皇冠的銀白聯賽場地找克羅索斯。','','','','',0); + +-- +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(13717,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士十分活躍,他們彼此會為了榮譽而爭鬥。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的潔琳‧晚歌。','','到寒冰皇冠的銀白聯賽場地找潔琳·晚歌。','','','','',0), +(13718,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士十分活躍,他們彼此會為了榮譽而爭鬥。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的傑科布‧亞雷瑞斯元帥。','','到寒冰皇冠的銀白聯賽場地找傑科布·亞雷瑞斯元帥。','','','','',0), +(13719,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士是十分活躍的一群,帶著榮譽戰鬥吧。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的祖爾拓。','','到寒冰皇冠的銀白聯賽場地找祖爾拓。','','','','',0), +(13720,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士是十分活躍的一群,帶著榮譽戰鬥吧。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的魯諾克‧蠻鬃。','','到寒冰皇冠的銀白聯賽場地找魯諾克·蠻鬃。','','','','',0), +(13721,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士是十分活躍的一群,帶著榮譽戰鬥吧。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的亡靈哨兵威瑟瑞。','','到寒冰皇冠的銀白聯賽場地找亡靈哨兵威瑟瑞。','','','','',0), +(13722,'zhTW','驍士的任務','在你的驍士訓練中,你有機會與其他城市代表隊的驍士互相切磋。儘管驍士的戰鬥不算是標準賽事的一部份,你還是可以從中學到關於對手的戰鬥方式與弱點等珍貴的經驗。$B$B驍士是十分活躍的一群,帶著榮譽戰鬥吧。$B$B持續地以驍士的身分進行訓練,直到你的能力足以擊敗你最強的對手,然後帶著你所贏得的徽印來找我。','帶25個驍士徽印給銀白聯賽場地的艾瑞西雅‧曦詠。','','到寒冰皇冠的銀白聯賽場地找艾瑞西雅·曦詠。','','','','',0), +(13723,'zhTW','驍士的挑戰','你幾乎已具備代表諾姆瑞根參加技擊大賽的資格了。為了要證明你足以加入城市代表隊名單中,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找安布羅斯‧拴炫。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找安布羅斯·拴炫。','擊敗銀白勇士','','','',0), +(13724,'zhTW','驍士的挑戰','你幾乎已具備代表艾克索達參加技擊大賽的資格了。為了要證明你足以加入城市代表隊名單中,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找克羅索斯。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找克羅索斯。','擊敗銀白勇士','','','',0), +(13725,'zhTW','驍士的挑戰','你幾乎已具備代表達納蘇斯參加技擊大賽的資格了。為了要證明你足以加入城市代表隊名單中,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找潔琳‧晚歌。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找潔琳·晚歌。','擊敗銀白勇士','','','',0), +(13726,'zhTW','驍士的挑戰','你幾乎要準備好參加技擊大賽。為了要證明你足以肩負如此殊榮,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找『碎顱者』莫克拉。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找『碎顱者』莫克拉。','擊敗銀白勇士','','','',0), +(13727,'zhTW','驍士的挑戰','你幾乎要準備好參加技擊大賽。為了要證明你足以肩負如此殊榮,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找祖爾拓。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找祖爾拓。','擊敗銀白勇士','','','',0), +(13728,'zhTW','驍士的挑戰','你幾乎要準備好參加技擊大賽。為了要證明你足以肩負如此殊榮,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找魯諾克‧蠻鬃。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找魯諾克·蠻鬃。','擊敗銀白勇士','','','',0), +(13729,'zhTW','驍士的挑戰','你幾乎要準備好參加技擊大賽。為了要證明你足以肩負如此殊榮,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找亡靈哨兵威瑟瑞。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找亡靈哨兵威瑟瑞。','擊敗銀白勇士','','','',0), +(13731,'zhTW','驍士的挑戰','你幾乎要準備好參加技擊大賽。為了要證明你足以肩負如此殊榮,你必須要擊敗一位銀白十字軍的勇士。$B$B前往亭閣外的獸欄,裝備你的長槍並乘上坐騎。到場地西側的銀白驍士競技場找侍從丹尼交談。等你準備好之後,侍從會叫出你的對手。$B$B等戰鬥結束之後,我們再來談一談結果。','和侍從丹尼談談以召喚你的對手。一旦你擊敗銀白勇士,回到銀白聯賽場地去找艾瑞西雅‧曦詠。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找艾瑞西雅·曦詠。','擊敗銀白勇士','','','',0), +(13732,'zhTW','一位勇士的出現','恭喜,$n。你已經熟習了各種戰鬥,並且克服了一切挑戰。無庸置疑,你已經準備好跟我們最優秀的戰士一起對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13735,'zhTW','一位勇士的出現','恭喜,$n。你已經熟習了各種戰鬥,並且克服了一切挑戰。無庸置疑,你已經準備好跟我們最優秀的戰士一起對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入勇士的技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13736,'zhTW','一位勇士的出現','你已經贏得了我的尊敬以及你同伴們的敬重。你克服了一切挑戰並且展現出你對聯賽戰鬥的卓越技巧。無庸置疑,你已經準備好為了奧格瑪的榮譽對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入勇士的技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13737,'zhTW','一位勇士的出現','你已經贏得了我的尊敬以及你同伴們的敬重。你克服了一切挑戰並且展現出你對聯賽戰鬥的卓越技巧。無庸置疑,你已經準備好為了暗矛的榮譽對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入勇士的技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13738,'zhTW','一位勇士的出現','你已經贏得了我的尊敬以及你同伴們的敬重。你克服了一切挑戰並且展現出你對聯賽戰鬥的卓越技巧。無庸置疑,你已經準備好為了雷霆崖的榮譽對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入勇士的技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13739,'zhTW','一位勇士的出現','你已經贏得了我的尊敬以及你同伴們的敬重。你克服了一切挑戰並且展現出你對聯賽戰鬥的卓越技巧。無庸置疑,你已經準備好為了被遺忘者的榮譽對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入勇士的技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13740,'zhTW','一位勇士的出現','你已經贏得了我的尊敬以及你同伴們的敬重。你克服了一切挑戰並且展現出你對聯賽戰鬥的卓越技巧。無庸置疑,你已經準備好為了銀月城的榮譽對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入勇士的技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13741,'zhTW','名劍配勇士','精心淬鍊磨利的鋼劍如今已經不流行了。其他的戰士都在使用附魔的刀刃,我在這方面可是輸了他們一大截,但還是有機會的。$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就混雜在灰木湖畔那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會長疣。','取得灰木古劍,並帶給銀白聯賽場地的菈娜‧頑錘。','','到寒冰皇冠的銀白聯賽場地找菈娜·頑錘。','','','','',0), +(13742,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的菈娜‧頑錘。','','到寒冰皇冠的銀白聯賽場地找菈娜·頑錘。','','','','',0), +(13743,'zhTW','凜冬之鋒','詛咒那個打斷我配劍的死亡騎士!$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死它並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的菈娜‧頑錘要你把凜冬之鋒帶給她。','','到寒冰皇冠的銀白聯賽場地找菈娜·頑錘。','','','','',0), +(13744,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用他們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的羅洛‧穩擊要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找羅洛·穩擊。','','','','',0), +(13745,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。鐵爐堡的百姓都渴望著我們獲勝的消息。因此,每個人都磨練戰技等著對抗其他聯盟主城的驍士。$B$B我也建議你這麼做。在競技場練習的驍士就在我們的帳篷外。裝備你的長槍,到亭閣外的獸欄去,騎上圈養的鐵爐堡山羊,然後挑戰其他的聯盟驍士。','帶3個驍士印記交給銀白聯賽場地的卡拉菈‧跌酒。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠找卡拉菈·跌酒。','','','','',0), +(13746,'zhTW','名劍配勇士','精心淬鍊磨利的鋼劍如今已經不流行了。其他的戰士都在使用附魔的刀刃,我在這方面可是輸了他們一大截,但還是有機會的。$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就混雜在灰木湖畔那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會長疣。','取得灰木古劍,並帶給銀白聯賽場地的安布羅斯‧拴炫。','','到寒冰皇冠的銀白聯賽場地找安布羅斯·拴炫。','','','','',0), +(13747,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的安布羅斯‧拴炫。','','到寒冰皇冠的銀白聯賽場地找安布羅斯·拴炫。','','','','',0), +(13748,'zhTW','凜冬之鋒','這是我最後一次跟死亡騎士交手。$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死它並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的安布羅斯‧拴炫要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找安布羅斯·拴炫。','','','','',0), +(13749,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用他們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的提金‧輪扳要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找提金·輪扳。','','','','',0), +(13750,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。我們知道每個人都期待著我們在比賽中勝出,而我也不希望讓他們失望。因此,每個人都磨練戰技等著對抗其他聯盟主城的驍士。$B$B我也建議你這麼做。$B$B裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的渦輪陸行鳥,然後挑戰其他的驍士。他們就在我們帳篷外的聯盟驍士競技場。','帶3個驍士印記交給銀白聯賽場地的佛立金‧輪扳。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠找佛立金·輪扳。','','','','',0), +(13752,'zhTW','名劍配勇士','精心淬鍊磨利的鋼劍如今已經不流行了。其他的戰士都在使用附魔的刀刃,我在這方面可是輸了他們一大截,但還是有機會的。$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就混雜在灰木湖畔那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會長疣。','取得灰木古劍,並帶給銀白聯賽場地的克羅索斯。','','到寒冰皇冠的銀白聯賽場地找克羅索斯。','','','','',0), +(13753,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的克羅索斯。','','到寒冰皇冠的銀白聯賽場地找克羅索斯。','','','','',0), +(13754,'zhTW','凜冬之鋒','這是我最後一次跟死亡騎士交手。$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死它並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的克羅索斯要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找克羅索斯。','','','','',0), +(13755,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用他們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的山鐸士要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找山鐸士。','','','','',0), +(13756,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。艾克索達的人民都期待著我們在比賽中勝出。因此,每個人都磨練戰技等著對抗其他聯盟主城的驍士。$B$B我也建議你這麼做。$B$B裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的藍謎伊萊克,然後挑戰其他的驍士。他們就在我們帳篷外的聯盟驍士競技場。','帶3個驍士印記交給銀白聯賽場地的蘭妮。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠找蘭妮。','','','','',0), +(13757,'zhTW','名劍配勇士','精心淬鍊磨利的鋼劍如今已經不流行了。其他的戰士都在使用附魔的刀刃,我在這方面可是輸了他們一大截,但還是有機會的。$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就混雜在灰木湖畔那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會長疣。','取得灰木古劍,並帶給銀白聯賽場地的潔琳‧晚歌。','','到寒冰皇冠的銀白聯賽場地找潔琳·晚歌。','','','','',0), +(13758,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!我的刀刃不見了!$B$B我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的潔琳‧晚歌。','','到寒冰皇冠的銀白聯賽場地找潔琳·晚歌。','','','','',0), +(13759,'zhTW','凜冬之鋒','這是我最後一次跟死亡騎士交手。$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死它並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的潔琳‧晚歌要你把凜冬之鋒帶給她。','','到寒冰皇冠的銀白聯賽場地找潔琳·晚歌。','','','','',0), +(13760,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用他們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的依蕾絲崔亞‧刃詠要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找依蕾絲崔亞·刃詠。','','','','',0), +(14016,'zhTW','黑騎士的詛咒','在你打贏黑騎士後我想要把他的遺體丟出聯賽場地,但告解者帕爾璀絲堅持他應該被正式的埋葬。從此之後,一股黑暗的氣息在墓地徘徊不去,使得人們不敢去探視死者。$B$B你能去聯賽場地東邊盡頭的墓地一趟,看看到底發生什麼事嗎?','銀白聯賽場地的十字軍萊達菈要求你去調查黑騎士之墓。','調查黑騎士之墓','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','','','','',0), +(13761,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。達納蘇斯的人民都期待著我們在比賽中勝出。因此,每個人都磨練戰技等著對抗其他聯盟主城的驍士。$B$B我也建議你這麼做。$B$B裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的達納蘇斯夜刃豹,然後挑戰其他的驍士。他們就在我們帳篷外的聯盟驍士競技場。','帶3個驍士印記交給銀白聯賽場地的愛芮‧尋星者。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠找愛芮·星尋者。','','','','',0), +(13762,'zhTW','名劍配勇士','我聽說聯盟的勇士正在替他們的戰士尋找一把遠古兵刃。我們可不能讓他們佔有這樣的優勢$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就在灰木湖畔混在那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會感染疣症。','取得灰木古劍,並帶給銀白聯賽場地的『碎顱者』莫克拉。','','到寒冰皇冠的銀白聯賽場地找『碎顱者』莫克拉。','','','','',0), +(13763,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的『碎顱者』莫克拉。','','到寒冰皇冠的銀白聯賽場地找『碎顱者』莫克拉。','','','','',0), +(13764,'zhTW','凜冬之鋒','詛咒那個打斷我配劍的死亡騎士!$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死他並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的『碎顱者』莫克拉要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找『碎顱者』莫克拉。','','','','',0), +(13765,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用它們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的阿奇諾斯要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找阿奇諾斯。','','','','',0), +(13767,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。獲勝並不容易,但我有信心我們終將得勝。你必須要持續和你的坐騎一起練習,直到你們合作無間。$B$B這樣有助於你應付聯賽戰鬥的嚴苛情況。$B$B裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的奧格瑪狼騎,挑戰其他的驍士。他們就在我們帳篷外的部落驍士競技場。','帶3個驍士印記交給銀白聯賽場地的莫菈‧座狼姊妹。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找莫菈·座狼姊妹。','','','','',0), +(13768,'zhTW','名劍配勇士','我聽說聯盟的勇士正在替他們的戰士尋找一把遠古兵刃。我們可不能讓他們佔有這樣的優勢$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就在灰木湖畔混在那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會感染疣症。','取得灰木古劍,並帶給銀白聯賽場地的祖爾拓。','','到寒冰皇冠的銀白聯賽場地找祖爾拓。','','','','',0), +(13769,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的祖爾拓。','','到寒冰皇冠的銀白聯賽場地找祖爾拓。','','','','',0), +(13770,'zhTW','凜冬之鋒','詛咒那個打斷我配劍的死亡騎士!$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死他並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的祖爾拓要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找祖爾拓。','','','','',0), +(13771,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用它們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的暗影獵手梅齊克里要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找暗影獵手梅齊克里。','','','','',0), +(13772,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。獲勝並不容易,但我有信心我們終將得勝。你必須要持續和你的坐騎一起練習,直到你們合作無間。$B$B這樣有助於你應付聯賽戰鬥的嚴苛情況。$B$B裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的暗矛迅猛龍,挑戰其他的驍士。他們就在我們帳篷外的部落驍士競技場。','帶3個驍士印記交給銀白聯賽場地的嘎尤。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找嘎尤。','','','','',0), +(13773,'zhTW','名劍配勇士','我聽說聯盟的勇士正在替他們的戰士尋找一把遠古兵刃。我們可不能讓他們佔有這樣的優勢$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就在灰木湖畔混在那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會感染疣症。','取得灰木古劍,並帶給銀白聯賽場地的魯諾克‧蠻鬃。','','到寒冰皇冠的銀白聯賽場地找魯諾克·蠻鬃。','','','','',0), +(13774,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的魯諾克‧蠻鬃。','','到寒冰皇冠的銀白聯賽場地找魯諾克·蠻鬃。','','','','',0), +(13775,'zhTW','凜冬之鋒','詛咒那個打斷我配劍的死亡騎士!$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死他並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的魯諾克‧蠻鬃要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找魯諾克·蠻鬃。','','','','',0), +(13776,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用它們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的德恩‧狂暴圖騰要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找德恩·狂暴圖騰。','','','','',0), +(13777,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。獲勝並不容易,但我有信心我們終將得勝。你必須要持續和你的坐騎一起練習,直到你們合作無間。$B$B這樣有助於你應付聯賽戰鬥的嚴苛情況。$B$B裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的莫高雷科多獸,挑戰其他的驍士。他們就在我們帳篷外的部落驍士競技場。','帶3個驍士印記交給銀白聯賽場地的安卡‧爪蹄。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找安卡·爪蹄。','','','','',0), +(13778,'zhTW','名劍配勇士','我聽說聯盟的勇士正在替他們的戰士尋找一把遠古兵刃。我們可不能讓他們佔有這樣的優勢$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就在灰木湖畔混在那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會感染疣症。','取得灰木古劍,並帶給銀白聯賽場地的亡靈哨兵威瑟瑞。','','到寒冰皇冠的銀白聯賽場地找亡靈哨兵威瑟瑞。','','','','',0), +(13779,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的亡靈哨兵威瑟瑞。','','到寒冰皇冠的銀白聯賽場地找亡靈哨兵威瑟瑞。','','','','',0), +(13780,'zhTW','凜冬之鋒','詛咒那個打斷我配劍的死亡騎士!$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死他並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的亡靈哨兵威瑟瑞要你把凜冬之鋒帶給他。','','到寒冰皇冠的銀白聯賽場地找亡靈哨兵威瑟瑞。','','','','',0), +(13781,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用它們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的薩拉‧喬克要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找薩拉·喬克。','','','','',0), +(13782,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。獲勝並不容易,但我有信心我們終將得勝。你必須要持續和你的坐騎一起練習,直到你們合作無間。$B$B這樣有助於你應付聯賽戰鬥的嚴苛情況。$B$BB裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的被遺忘者戰馬,挑戰其他的驍士。他們就在我們帳篷外的部落驍士競技場。','帶3個驍士印記交給銀白聯賽場地的管理者德瑞齊。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找管理者德瑞齊。','','','','',0), +(13783,'zhTW','名劍配勇士','我聽說聯盟的勇士正在替他們的戰士尋找一把遠古兵刃。我們可不能讓他們佔有這樣的優勢$B$B有個關於灰白之丘少女的古老傳說,傳說她守護著一柄強大的兵刃。據說她受到詛咒被變成了一隻青蛙,所以再也沒有人使用過那柄劍。她就在灰木湖畔混在那些青蛙之中,在灰木崗哨的東邊。傳說只有一種方法可以破除詛咒,就是一個真心的吻。在親任何東西前先擦上這個護唇膏,$n。否則,你可能會感染疣症。','取得灰木古劍,並帶給銀白聯賽場地的艾瑞西雅‧曦詠。','','到寒冰皇冠的銀白聯賽場地找艾瑞西雅·曦詠。','','','','',0), +(13784,'zhTW','足以匹配的武器','偏偏在這個時候走霉運!$B$B我的聯賽之刃不見了。我聽吟遊詩人說以前旅人會拿凜冬風信子獻給一位孤獨的少女來換取贈禮。這些風信子只長在鐵牆水壩的流冰之上,水壩則在水晶之歌森林的西北邊,與寒冰皇冠交接之處。收集那些花朵然後帶去龍骨荒野東北邊的德拉克瑪湖,靠近祖爾德拉克與灰白之丘的邊界。請和那位孤獨的少女換取一柄合適的利刃。','將德拉克瑪之刃帶給銀白聯賽場地的艾瑞西雅‧曦詠。','','到寒冰皇冠的銀白聯賽場地找艾瑞西雅·曦詠。','','','','',0), +(13785,'zhTW','凜冬之鋒','詛咒那個打斷我配劍的死亡騎士!$B$B在水晶之歌森林南部,俯瞰通往水晶之鉗的出口,你可以找到恆燃領主。殺死他並從屍體上取走永燃餘燼。$B$B然後把餘燼帶到凜風峽灣北部的冬息湖中央,用它來釋放一位冰中少女。她是一柄遠古兵刃的守護者,等待著新的配劍者來釋放她。$B$B證明你足以贏得她長久守護的武器,$n。','銀白聯賽場地的艾瑞西雅‧曦詠要你把凜冬之鋒帶給她。','','到寒冰皇冠的銀白聯賽場地找艾瑞西雅·曦詠。','','','','',0), +(13786,'zhTW','驍士的實地訓練','聯賽是一個和你的同伴彼此磨練戰技的機會,但我們不能忘記真正的敵人,天譴軍團,是不會停歇的。當你們光榮地互相切磋技藝時,你也應該要維持你的戰鬥技巧。$B$B前往逝往英雄山谷的西南邊,寇普雷薩北邊的區域。天譴軍團在該地復活陣亡的英雄,並利用它們來對付我方。擊敗這些天譴軍團的爪牙,並且讓你自己隨時準備好應付戰鬥。','銀白聯賽場地的凱希爾‧日槍要你殺死10名轉化的英雄。','','到寒冰皇冠的銀白聯賽場地找凱希爾·日槍。','','','','',0), +(13787,'zhTW','技擊大賽','技擊大賽是聯賽項目中最重要的一項比賽。獲勝並不容易,但我有信心我們終將得勝。你必須要持續和你的坐騎一起練習,直到你們合作無間。$B$B這樣有助於你應付聯賽戰鬥的嚴苛情況。$B$B裝備你的長槍,到亭閣外的獸欄去,然後騎上圈養的銀月城陸行鷹,挑戰其他的驍士。他們就在我們帳篷外的部落驍士競技場。','帶3個驍士印記交給銀白聯賽場地的安妮拉‧修倫。$B$B如果你弄丟了長槍,你可以從任何一個靠近白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找安妮拉·修倫。','','','','',0), +(13788,'zhTW','來自上空的威脅','自從你揭發了詛咒神教的潛伏者之後,銀白十字軍就加倍了守衛的人數。他們認為詛咒神教不可能只因為黑騎士被擊敗就停止行動。$B$B根據銀白十字軍的斥候回報,有一隻叫做寒冽之喉的冰霜巨龍率領了一批神教突襲隊。如果我們沒有攔截他們,聯賽就會受到他們的攻擊。斥候回報看見寒冽之喉就在西南方,在鐵牆壁壘和奧多薩之間的地區飛行。','銀白聯賽的克羅科‧天譴剋星要你擊敗寒冽之喉和3個教徒投彈手。','','到寒冰皇冠找克羅科·天譴剋星。','','','','',0), +(13789,'zhTW','和敵人一戰','大競技場位在這個世界最危險的地方,$n。這片土地是我們用鮮血和苦痛從天譴軍手中換來的,但敵人持續反擊,他們部隊的數量彷彿無窮無盡。但更糟糕的是,這批不死大軍還有著凡人支持者的協助,詛咒神教。$B$B深入寒冰皇冠,殺死你所遇到的任何一個教徒。','銀白聯賽場地的瑟利安‧破曉要你殺死15名詛咒神教的成員。你可以在寒冰皇冠任何一個地方殺死神教成員。','','到寒冰皇冠的銀白聯賽場地找瑟利安·破曉。','殺死詛咒神教成員','','','',0), +(13790,'zhTW','勇士們','身為一名勇士,你精通騎乘作戰的技巧,擊敗了各種層級的挑戰者。當聯賽開始時,那些被你擊敗的人將會加倍努力,想要一雪前恥。$B$B繼續和勇士競技場的戰士練習將會是個明智之舉。裝備你的長槍,到聯賽場地南邊的獸欄去。然後跨上你的坐騎,面對其他的勇士吧。','帶4個勇士印記交給銀白聯賽場地的露莉。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找露莉','','','','',0), +(13791,'zhTW','和敵人一戰','當我們把注意力放在這些模擬戰中,要知道我們真正的敵人依舊環伺在四周。銀白十字軍想要透過競賽找出最優秀的戰士,但我們也能知道誰從戰場上回來。讓那些聖騎士知道,就算是在聯賽準備期間,我們也願意對抗詛咒神教。$B$B前往寒冰皇冠,殺死你所遇到的任何一個教徒。他們在奧多薩和亡頌者之望人數眾多。','銀白聯賽場地的『放血者』佐爾必要你殺死15名詛咒神教的成員。你可以在寒冰皇冠任何一個地方殺死神教成員。','','到寒冰皇冠的銀白聯賽場地找『放血者』佐爾必。','殺死詛咒神教成員','','','',0), +(13793,'zhTW','勇士們','身為一名勇士,你精通騎乘作戰的技巧,擊敗了各種層級的挑戰者。你確信你會對上你先前所擊敗的人。$B$B你應該持續鍛鍊自己的技巧並且學習敵方的弱點。代表各大城市的勇士們就在獸欄附近的勇士競技場。到獸欄去,裝備你的長槍,然後跨上你的坐騎,面對其他的勇士吧。','帶4個勇士印記交給銀白聯賽場地的伊黎芮‧夜暮。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或白銀誓盟亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找伊黎芮·夜暮。','','','','',0), +(13794,'zhTW','『純淨者』埃卓克','我已經請我在銀白十字軍的弟兄在工作時更加仔細。『純淨者』埃卓克,我們兄弟會的大勇士,負責來自各個主城的勇士訓練流程,並且協助他們通過聯賽的最後部分。$B$B請前去向他自我介紹。我相信他一定很急著要見你,並讓你能夠與艾澤拉斯最偉大的勇士們競賽。','跟銀白聯賽場地的『純淨者』埃卓克談一談。','','','','','','',0), +(13795,'zhTW','天譴剋星','黯刃騎士團領袖的代表有提過你,$c。克羅科‧天譴剋星是個令人畏懼的戰鬥高手,我相信他一定有話要跟你談談。$B$B黯刃騎士在聯賽場地的北方設置了營地,就在聯盟代表隊西邊的帳篷。','跟銀白聯賽場地的克羅科‧天譴剋星談一談。','','','','','','',0), +(13809,'zhTW','來自上空的威脅','自從你揭發了詛咒神教的潛伏者之後,大領主提里奧‧弗丁就加倍了守衛的人數。他認為他們不可能只因為黑騎士被擊敗就停止行動。$B$B根據我們的天爪斥候回報,有一隻叫做寒冽之喉的冰霜巨龍率領了一批神教突襲隊。如果我們沒有攔截他們,聯賽就會受到他們的攻擊。斥候回報看見寒冽之喉就在西南方,在鐵牆壁壘和奧多薩之間的地區飛行。','銀白聯賽的『純淨者』埃卓克要你擊敗寒冽之喉和3個教徒投彈手。','','到寒冰皇冠的銀白聯賽場地找『純淨者』埃卓克。','','','','',0), +(13810,'zhTW','和敵人一戰','大競技場位在這個世界最危險的地方,$n。這片土地是我們用鮮血和苦痛從天譴軍手中換來的,但敵人持續反擊,他們部隊的數量彷彿無窮無盡。但更糟糕的是,這批不死大軍還有著凡人支持者的協助,詛咒神教。$B$B深入寒冰皇冠,殺死你所遇到的任何一個教徒。','銀白聯賽場地的瑟利安‧破曉要你殺死15名詛咒神教的成員。你可以在寒冰皇冠任何一個地方殺死神教成員。','','到寒冰皇冠的銀白聯賽場地找瑟利安·破曉。','殺死詛咒神教成員','','','',0), +(13811,'zhTW','勇士們','身為一名勇士,你精通騎乘作戰的技巧,擊敗了各種層級的挑戰者。當聯賽開始時,那些被你擊敗的人將會加倍努力,想要一雪前恥。$B$B你應該持續鍛鍊自己的技巧並且學習敵方的弱點。代表各大城市的勇士們就在獸欄附近的勇士競技場。裝備你的長槍,然後跨上你的坐騎,面對其他的勇士吧。','帶4個勇士印記交給銀白聯賽場地的露莉。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找露莉。','','','','',0), +(13812,'zhTW','來自上空的威脅','自從你揭發了詛咒神教的潛伏者之後,銀白十字軍就加倍了守衛的人數。他們認為詛咒神教不可能只因為黑騎士被擊敗就停止行動。$B$B根據銀白十字軍的斥候回報,有一隻叫做寒冽之喉的冰霜巨龍率領了一批神教突襲隊。如果我們沒有攔截他們,聯賽就會受到他們的攻擊。斥候回報看見寒冽之喉就在西南方,在鐵牆壁壘和奧多薩之間的地區飛行。','銀白聯賽的克羅科‧天譴剋星要你擊敗寒冽之喉和3個教徒投彈手。','','到寒冰皇冠找克羅科·天譴剋星。','','','','',0), +(13813,'zhTW','和敵人一戰','當我們把注意力放在這些模擬戰中,要知道我們真正的敵人依舊環伺在四周。銀白十字軍想要透過競賽找出最優秀的戰士,但我們也能知道誰從戰場上回來。讓那些聖騎士知道,就算是在聯賽準備期間,我們也願意對抗詛咒神教。$B$B前往寒冰皇冠,殺死你所遇到的任何一個教徒。他們在奧多薩和亡頌者之望人數眾多。','銀白聯賽場地的『放血者』佐爾必要你殺死15名詛咒神教的成員。你可以在寒冰皇冠任何一個地方殺死神教成員。','','到寒冰皇冠的銀白聯賽場地找『放血者』佐爾必。','殺死詛咒神教成員','','','',0), +(13814,'zhTW','勇士們','身為一名勇士,你精通騎乘作戰的技巧,擊敗了各種層級的挑戰者。你確信你會對上你先前所擊敗的人。$B$B你應該持續鍛鍊自己的技巧並且學習敵方的弱點。代表各大城市的勇士們就在獸欄附近的勇士競技場。到獸欄去,裝備你的長槍,然後跨上你的坐騎,面對其他的勇士吧。','帶4個勇士印記交給銀白聯賽場地的伊黎芮‧夜暮。$B$B如果你弄丟了長槍,你可以從任何一個靠近獸欄或奪日者亭閣的長槍架再拿一把。','','到寒冰皇冠的銀白聯賽場地找伊黎芮·夜暮。','','','','',0), +(13820,'zhTW','爆栓兄弟','大領主交代我要盡快完成大競技場。我們已經把所有的石匠全都投入工程了,但我們很快就發現我們需要更多建築材料。我雇用了一些哥布林,貝索‧爆栓和他的兄弟,波索。$B$B他們在聯賽場地東南邊監督工程。和貝索談談,看看他們兄弟兩個需要怎樣的幫忙才能弄到我們要的建材。','跟銀白聯賽場地的貝索‧爆栓談談。','','','','','','',0), +(14017,'zhTW','黑騎士的命運','你說屍體被神教教徒偷走了?他們會去的地方我想只有一個,亡頌者之望,聯賽場地西邊高崗的營地。$B$B不管那些教徒想幹什麼,我們都得阻止他們。看來我聽到的傳言是真的,那個惡名昭彰的寇勒醫生一定是神教成員並以在此磨練他的技藝。在神教營地尋找高台或祭壇,殺了醫生,尋找他進行計畫的證物,並且用任何方法來阻礙他的工作。','在亡頌者之望攔截寇勒醫生的指示,然後回去找銀白聯賽場地的十字軍萊達菈。','','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','','','','',0), +(14074,'zhTW','被劫的腿肉補給','銀白十字軍派遣了一艘載著陸行鳥肉及其他補給品的快艇來給聯賽場地的我們,但它一直沒有抵達。斥候回報說看見快艇被科瓦迪爾人所攻擊,那是一些可怕的海上維酷劫掠者。$B$B他們屠殺了船員並把貨物帶去一座叫做赫魯斯加臺地的島上。如果你往北方看去,可以看見它籠罩在迷霧之中。你能幫我們取回那些被偷的貨物嗎?沒有那些陸行鳥腿,我們很快就會食物短缺。','取回10份被偷的陸行鳥腿給銀白聯賽場地的娜拉希‧雪曦。','','到寒冰皇冠的銀白聯賽場地找娜拉希·雪曦。','','','','',0), +(14076,'zhTW','勇士的早餐','現在大競技場完成了,銀白十字軍要我們幫忙尋找能與勇士對戰的生物。$B$B巨型蟄猛巨蟲有著最奇怪的進食特性:牠們吃自己同類的蛋後會長得特別強壯,而深地蟄猛巨蟲的蛋是最好的。$B$B帶著這個鼓到風暴群山中央的足跡冷原,然後在那邊的雪堆附近敲鼓。引出深地蟄猛巨蟲,殺了牠們,然後收集牠們的卵囊。','取得4份蟄猛巨蟲卵囊並帶給銀白聯賽場地的莎薇娜‧識歌。','','到寒冰皇冠的銀白聯賽場地找莎薇娜·識歌。','','','','',0), +(14077,'zhTW','聖光的憐憫','我聽從告解者帕爾璀絲的教誨,我必須告訴你,她說的話讓我省思許多。與十字軍並肩作戰是不夠的,我們必須接手他們的任務。$B$B北海岸外就是赫魯斯加臺地,來自海上的科瓦迪爾人侵襲了這個古老的巨牙海民聚落,並屠殺了村民。拿著這本書並在村民屍體旁為死者頌禱儀式。這可以讓他們的靈魂脫離迷霧的束縛並獲得安息。','使用告解者的祈禱書對8個被殺的托利克村民執行最後的儀式,然後回去找銀白聯賽場地的娜拉希‧雪曦。','','到寒冰皇冠的銀白聯賽場地找娜拉希·雪曦。','執行最後的儀式','','','',0), +(14200,'zhTW','啟動郵件標記','','','','','','','','',0); + +-- +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(12546,'zhTW','開闢','是時候了,$n。伊提米迪安是泰坦所創造出來的東西之中最具毀滅性的武器,而我非常不想在我的土地上將它釋放出來。$B$B然而,我們的選擇並不多。我們的敵人逼我做出這個決定。泰坦的憤怒將會淨化一切。','前往休拉薩盆地的雪崩地並且使用終末符文來部署伊提米迪安。用他殺死200名天譴部隊、『血肉塑形者』拜西厄斯、千塚的烏格雷希和海爾思康。$B$B當你完成任務之後,和休拉薩盆地的芙蕾雅交談。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','消滅天譴軍爪牙','','','',0), +(12548,'zhTW','伊提米迪安','是時候了,$n。甬道之門七個世紀以來第一次被啟動。通過它前往我們的最後希望所在的場所。$B$B讓我們終結想要將不死的污穢帶進這純淨之地的人吧。讓我們釋放伊提米迪安。','穿過休拉薩盆地南端的甬道之門,在另一端尋找被稱作伊提米迪安的武器。','','','','','','',0), +(12559,'zhTW','甬道之門充能 - 造物者棲所','是時候了。讓我們啟動甬道之門。$B$B你可以在盆地西緣的造物者棲所找到第一個開關。$B$B小心一點,$n。過去泰坦們曾經利用棲所來觀察祂們的創造物。許多石像僕從仍然在守衛那個地方。','雨頌者急湍的芙蕾雅化身要你前往造物者棲所並使用啟動開關γ。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','啟動開關γ','','','',0), +(12561,'zhTW','信任問題','這絕不該發生。不死的力量蹂躪了生命的搖籃!$B$B如果你不是來消滅巫妖王的爪牙,那就請你立刻離開吧。不要妨礙我克盡我的職責,這會招致我的憤怒。','在失落之地摧毀6具荒疫污染屍體和10個骨鐮劫毀者以贏得芙蕾雅的信任。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','','','','',0), +(12570,'zhTW','幸運的誤解','對不起!我並不是故意要害你惹上麻煩的!$B$B<受傷的神諭者恍惚的盯著你看了一陣。>$B$B你救了我!我們謝謝你。我們要回村子去了,你也一起來吧...你可以跟我們待在一起!小狗人反正很壞。$B$B你準備好了就讓我知道吧,好嗎?','護送受傷的雨頌神諭者回到雨頌者之篷然後與高階神諭者蘇‧楔交談。','護送受傷的雨聲神諭者返回雨聲樹屋','到休拉薩盆地的雨頌者之篷找高階神諭者蘇-楔交談。','','','','',0), +(12571,'zhTW','叫壞蛇滾開','我們在小狗人來之前就一直在這裡了。這是非常神聖的地方-我們不離開。$B$B你好像很厲害,但我們還是讓拉富跟著你防止意外。你懂我們在想什麼。$B$B那條蛇一直試著吃掉我們的寶寶。跟拉富一起去瀑布附近阻止它好嗎?尤其是東北方瀑布邊那條大的。','雨頌者之篷的高階神諭者蘇-楔要你殺了毒尖與10條大王眼鏡蛇。$B$B如果你弄丟了拉富的蟲子袋,去雨頌者之蓬找高階神諭者蘇-楔談談。','','到休拉薩盆地的雨頌者之蓬找高階神諭者蘇-楔。','','','','',0), +(12572,'zhTW','神喜歡亮晶晶的東西','蘇-楔說我們跟你走。你要乖喔,好嗎?$B$B喔噢!我們知道了!我們如果給聖壇帶回更多祭品,就可以讓蘇-楔很開心!我們不用走遠,村子附近總是能挖出東西來...只要找找泥土裡面會發光的東西就好了。$B$B走吧!走吧!給祭壇更多祭品!','收集拉富挖出來的6個物品然後帶回去給高階神諭者蘇-楔,他就在雨頌者之篷。$B$B如果你搞丟了拉富的蟲子袋,去和雨頌者之蓬的高階神諭者蘇-楔聊聊。','','到休拉薩盆地的雨頌者之蓬找高階神諭者蘇-楔。','','','','',0), +(12573,'zhTW','締造和平','我們有個很棒的主意。你跟小狗人本來是朋友,他們也許會聽你的。$B$B我們想要你去西南方,河流匯成瀑布之處,然後把我們的提議拿給薩滿,維克吉克。告訴小狗人我們不想打架,告訴他我們會好好相處。$B$B你是好$r。我們相信你會好好做。','雨頌者之篷的高階神諭者蘇-楔要你將和平的提議交給薩滿維克吉克,接著將他的回應帶回來。$B$B如果你弄丟了拉富的蟲子袋,去和雨頌者之蓬的高階神諭者蘇-楔談談。','將議和禮物交給薩滿祭司維克伊克','到休拉薩盆地的雨頌者之篷找高階神諭者蘇-楔。','','','','',0), +(12574,'zhTW','這麼快就回來?','<高階神諭者蘇-楔在開口之前凝視著你的額頭好一陣子>$B$B蘇-綱要人幫忙。我們猜他們又被小狗人攻擊了。$B$B我們派你和賈露特去幫忙...沿著西邊的河流去霧語避難所。照著蘇-綱說的做...小狗人使壞的話就揍他們的鼻子,他們不喜歡。$B$B<高階神諭者蘇-楔在你離開的時候又盯著你的額頭看。>','前往霧語村,並且與喚霧者蘇-綱交談。$B$B如果你弄丟了賈露特最愛的水晶,去找雨頌者之蓬的高階神諭者蘇-楔談談。','','','','','','',0), +(12575,'zhTW','丟失的霧語寶藏','有些小狗人跑來敲碎偉大霧石的藍水晶!好多雨跟閃電跟壞事...對偉大霧石來說藍色是錯誤的水晶!笨蛋小狗人。$B$B在閃電之後,小狗人偷走我們在海湖找到的寶藏。我們要把寶藏拿回來獻給偉大的霧石!霧石在小狗人胡搞之後很生氣!$B$B拿走它的人叫做塔塔...不對,提克塔...不對不對...塔提克,對了,就是塔提克!他往北邊的營地去了。去把寶藏拿回來!','殺掉督軍塔提克,然後把霧語寶藏帶回去給霧語避難所的喚霧者蘇-綱。$B$B如果你弄丟了賈露特最愛的水晶,去找雨頌者之蓬的高階神諭者蘇-楔談談。','','到休拉薩盆地的霧語避難所找喚霧者蘇-綱。','','','','',0), +(12576,'zhTW','強迫手段','自從小狗人來了以後我們都對他們很好,但他們只會使壞。$B$B我們不怪他們笨–因為不會造成多大傷害。但現在他們跑來聖壇搗亂。神聖的祭壇不容許胡搞。偉大之石自從偉大的神創造我們就在這兒了。$B$B我們不知道如果偉大霧石受傷了要怎麼辦。快到他們北邊的營地去...阻止小狗人,別讓他們再回來!','替霧語避難所的喚霧者蘇-綱,殺死8隻狂心持矛者和6隻狂心拾荒者,完成後向喚霧者蘇-綱回報。$B$B如果你弄丟了賈露特最愛的水晶,去雨頌者之蓬找高階神諭者蘇-楔談談。','','到休拉薩盆地的霧語避難所找喚霧者蘇-綱。','','','','',0), +(12577,'zhTW','回家囉!','你是個好乾皮。霧語者安全了,寶藏安全了,而且小狗人不會來煩我們了。$B$B你回去雨頌者之蓬跟蘇-楔說你做的好。','回到雨頌者之蓬。','','','','','','',0), +(12578,'zhTW','憤怒的戈洛克','我以為你沒辦法及時趕回來,然後再次出發,但我錯了。我派了穆斗去找附近的苔行者朋友們,因為他們不來參拜聖壇。他們的村子在東邊,山脊上面,斷柱子的東北方。$B$B你和穆斗一起去!他是超聰明的雨頌者...你好好聽他說話。','前往苔行者村,抵達後與穆斗交談。$B$B如果你失去了穆斗的壓力球,去找雨頌者之蓬的高階神諭者蘇-楔談談。','抵達苔行村。','找穆斗交談。如果他不在身邊,就使用穆斗的壓力球來召喚他。','','','','',0), +(12579,'zhTW','苔行者聖壇的活血水晶','我一直都懷疑那些巨柱就是此地氣候特異以及沒有不死生物的原因...這稍微證實了我的想法。$B$B不久之前,有一聲巨大的爆炸聲從活血之柱倒下的地方傳來。而苔行者這帶的天氣幾乎立刻就變了...開始下起雪這種從沒見過的東西。$B$B他們成功的藉由把活血水晶帶去偉大苔石來阻止下雪,也許如果我們照著做,就能夠稍微逼退不死生物。','穆斗要你收集10個活血裂片,但是不要靠近石柱內的洞窟。$B$B如果你弄丟了穆斗的壓力球,去找雨頌者之蓬的高階神諭者蘇-楔談談。','','找穆斗交談。如果他不在身邊,就使用穆斗的壓力球來召喚他。','','','','',0), +(12580,'zhTW','苔行者救星','雖然機會微乎其微,但可能苔行者還沒有全部死去...而且至少他們不該被這樣屠宰。$B$B讓我們為這場屠殺復仇,並看看是否還能救的回其中的幾個。','穆斗要你去苔行者村拯救6名苔行受害者,雖然他們之中可能早就死了而無法拯救。$B$B如果你弄丟了穆斗的壓力球,去雨頌者之蓬和高階神諭者蘇-楔談談。','','到休拉薩盆地的雨頌者急湍找穆斗交談。','拯救苔行者受害者','','','',0), +(12581,'zhTW','英雄的負擔','也許那些水晶終將會把不死生物驅離,但是還有一件事情必須要做。$B$B我們得找到這些不死生物的領導者,把它殺掉,確保那些卑鄙的傢伙不會再度進犯。如果我的懷疑是對的,他應該就在倒下的柱子中的某處...就在破碎裂片中。$B$B一路被拖到那裡去的屍體也暗示同一個地方。$B$B我會把裂片放上苔石,然後把消息傳給蘇-楔...在這期間你得去尋求其他的幫助。','殺死『無心者』阿楚依思。$B$B穆斗沒有辦法陪你進行這項任務。','','在破碎裂片中尋找阿楚依斯的骨匣。','','','','',0), +(12582,'zhTW','狂心勇士','','','','','','','','',0), +(12595,'zhTW','搜尋更大的獵物','好吧,$n,不論是狩獵犀牛、豹還是鱷魚,你都證明了你的獵人特質。對於遠征隊的某些成員來說,這樣已經足以測試他們的狩獵技巧,但對其他人而言,譬如說像我,只會想追求更大的挑戰。$B$B多里安‧龍巡者前往了北方越過了惡潮湖,在那邊建立了一個營地。他聽到有種巨大原始飛龍的謠言。想像一下那會是個什麼樣的獵場!去拜訪一下多里安,看看他是不是真的這麼好運。','到休拉薩盆地的多里安營地找多里安‧龍巡者交談。','','','','','','',0), +(12603,'zhTW','磨利你的爪子','原始飛龍已經佔據了北方和東方大部分的區域,我甚至在這裡就可以感覺到他們吐息的熱度。在我們能挑戰最強的飛龍之前,我們最好先對付那些較弱的傢伙來測試我們的技巧。$B$B但別鬆懈你的警戒,那些野獸可以活生生地吞下一個人。等你更熟悉那些飛龍的戰術之後,再回來找我,我會告訴你下一步。','殺死6隻原始飛龍然後和多里安前哨的多里安‧龍巡者交談。','','到休拉薩盆地的多里安前哨找多里安·龍巡者。','','','','',0), +(12605,'zhTW','確保誘餌','我們可不打算像個白癡一樣地揮舞著手臂來引起育母斯莉薇娜的注意,但如果我們夠聰明的話,就應該可以引誘她來和我們戰鬥。我們也能夠弄到更多,呃,我小小計畫的飼料。<多里安瞥了狹嘶一眼。>$B$B但現在還不需要擔心那些。只要去營地的東邊還有東北邊找一些原始飛龍蛋就好。去把那些蛋打破,挖出那些雛龍。等育母知道我們做了什麼之後,她就毫無選擇只能對付我們。','把6隻原始雛龍帶給多里安前哨的多里安‧龍巡者。','','到休拉薩盆地的多里安前哨找多里安·龍巡者。','','','','',0), +(12608,'zhTW','教徒入侵','<看來芙蕾雅的化身是對的。在活血之柱倒下之前不死生物確實無法進入休拉薩盆地--他們因此利用了詛咒神教的活人部下。>$B$B<你最好警告她關於巫妖王還有活人部下在休拉薩盆地中這件事。>','到雨頌者急湍與芙蕾雅的化身交談。','','','','','','',0), +(12611,'zhTW','七倍奉還','巫妖王的部下愚蠢地踏入了至高無上的生命之力所統御的大地。他們所造成的傷害將會七倍奉還在他們身上。$B$B名叫薩爾葛倫‧荒疫使者的怪物必須直接為腐化這片土地負責;你可以在正北方找到他。帶著這個禦符,用它來把死亡的力量反射回他身上。讓天譴軍團見識生命的力量能夠戰勝一切。','芙蕾雅的化身要你使用芙蕾雅之禦將薩爾葛倫‧荒疫使者的死亡箭七倍反彈回去以擊敗他。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','','','','',0), +(12612,'zhTW','傾倒之柱','泰坦們形塑了此地的所有生命,滋育他們,使他們不受束縛地生長。$B$B環繞盆地的五支水晶柱,散發出純粹的生命能量。正常的情況下,天譴軍團是無法入侵盆地的,但其中一根水晶柱卻被毀了。$B$B前往活血之柱,試圖釐清發生過什麼事。照理說,沒有不死生物能夠靠近那些支柱,所以留心那些活物入侵者。你可以在正南方找到支柱的殘骸。','前往活血之柱,尋找它被破壞的線索。','','','','','','',0), +(12613,'zhTW','甬道之門充能-造物者瞰臺','我們不能在這時候停止,$r。你已經觸動了第一個開關,但還有一個。$B$B泰坦建造了第二個制高點來觀察他們的造物。你會在東邊找到它,在山脈的高處。$B$B拉下監控所內的啟動開關θ,甬道之門就會打開。','芙蕾雅的化身要你前往休拉薩盆地東方的造物者瞰臺,然後使用啟動開關θ。','','到休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','啟動開關θ','','','',0), +(12617,'zhTW','滅絕入侵者','我是泰坦之女,芙蕾雅的具現存在之一。我就是生命守護者 -- 我留在這裡以保護這塊土地免受天譴軍團的威脅。$B$B但我從沒預料到巫妖王居然派出自願的活人僕從來執行他的計畫。$B$B我大可輕易地親手粉碎那些教徒,但我必須要全力對付那些不死大軍並且保護我盆地的剩餘部分。$B$B去吧,$n。將我的憤怒傳達給那些傲慢無禮的入侵者。','雨頌者急湍的芙蕾雅化身要你前往西北邊的死亡之手駐營,並殺死8個教徒滲透者。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','','','','',0), +(12620,'zhTW','生命守護者之怒','我們動作不夠快,$n。那些雜碎教徒已經抵達了微光之柱而且著手準備摧毀它,我可以感覺得到。$B$B我們沒多少時間了。在微光之柱頂端吹響這個號角,藉由水晶來引導我的力量。$B$B我們會讓那些雜碎知道少對泰坦的創造物胡搞。','雨頌者急湍的芙蕾雅化身要你在微光之柱的頂端使用芙蕾雅的號角。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','生命守護者之怒','','','',0), +(12621,'zhTW','芙蕾雅的契約','教徒的問題已經處理了,但天譴軍的入侵卻沒有減緩。情況越來越危機了,$n。$B$B現在還剩下最後一個手段。但在我揭露更多之前,我必須要確認我能完全地相信你。','聽芙蕾雅的化身要說什麼。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','芙蕾雅的契約','','','',0), +(12660,'zhTW','毀滅武器','巫妖王的走狗竟敢帶毀滅性的武器進入我的領地。我無法忍受這種事。$B$B去北邊,到他們的前哨銷毀他們用來破壞這塊大地的武器。我們不能讓天譴軍團再污染這聖地的一分一毫了。','芙蕾雅的化身要你前往西北方的死亡之手駐營摧毀4個不穩定爆裂物。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','摧毀不穩定爆裂物','','','',0), +(12691,'zhTW','古舊的石箱','這個石箱似乎被鎖住了。看起來似乎有個巨大的石頭鑰匙孔。$B$B也許附近的守衛身上會有鑰匙。','從附近的休拉薩守護者身上取得巨型石頭鑰匙然後帶到造物者瞰臺的古舊石箱處。','','到休拉薩盆地的造物者瞰臺找古舊石箱。','','','','',0), +(12696,'zhTW','空中監視','你幫助威斯重架飛行器,這件事做得很好。$B$B如果你想進一步幫助我們,現在有個奇怪的異常氣象正從東北方逐漸逼近。我已經派了位駕駛員在處理這件事了,但我想他可能會需要一位副駕駛。$B$B如果你想要幫忙的話,你可以飛去湖畔起降場。告訴維克是我派你去的。','卡爾微特教授要你飛到湖畔起降場與駕駛員維克交談。','','','','','','',0), +(12699,'zhTW','難堪的插曲','在我們出發之前得先解決一個小問題。懂嗎,我好像找不到飛行器的鑰匙。$B$B我幾乎把每個地方都找遍了...也許你可以幫我一把。我還沒找過的地方就只剩下湖裡而已了。$B$B我甚至可以把我自己的氣瓶給你。雖然氣瓶裡面的空氣不多了,但是還能讓你呼吸個幾口。','在大河之心的湖水中尋找維克的鑰匙串。','','到休拉薩盆地的湖畔起降場找駕駛員維克。','','','','',0), +(12703,'zhTW','卡爾塔克的衝撞','你就是偉大的巫妖獵人,吭?有個這麼強的狂心盟友加入戰鬥真好。也許你甚至強到可以召喚卡爾塔克。$B$B西南邊的卡爾塔克堡正在進行大戰。去殺死附近的大舌頭,直到你拿到一份好的神諭者血。把血帶回祭壇召喚卡爾塔克來吃好吃的大舌頭大餐。$B$B如果你值得尊敬,卡爾塔克就會進入你的身體...有了卡爾塔克的力量,你可以殺死很多火觸大舌頭。$B$B去大開殺戒吧,獵人!','將純淨的神諭者之血樣本帶到卡爾塔克的祭壇,召喚出卡爾塔克。只要有卡爾塔克分享力量的幫助,替卡爾塔克堡的薩滿賈克杰克殺死附近50個炫觸戈洛克。','','到休拉薩盆地的卡爾塔克堡找薩滿賈克杰克。','殺死炫觸戈洛克','','','',0), +(12705,'zhTW','泰坦的意志','小狗人持續攻擊炫觸...我們得對抗他們,否則他們就會攻擊別的神諭者。$B$B你是我們的好朋友,所以我們給你特別的榮耀。偉大的諸神很久以前留下了保護者守衛祭壇...它現在還在,但聖壇沒被侵擾它就不知道大事不妙。$B$B小狗人有對祭壇不好的水晶...去殺小狗人,然後找到壞水晶,帶去祭壇:這樣蘇-侯魯就知道要幫忙了。$B$B如果蘇-侯魯帶你進入他的身體,你不要害怕。他很強,所以會保證你安全。','從炫觸避風港附近的獾狼怪身上取得一塊受污染的水晶,並帶往偉大閃電石召喚蘇-侯魯。在蘇-侯魯所分享的力量幫助下,殺死50個附近的狂心獾狼怪,然後向偉大閃電石附近的喚雷者蘇-邁特回報。','','到休拉薩盆地的炫觸避風港找喚雷者蘇-邁特交談。','殺死狂心攻擊者','','','',0), +(12726,'zhTW','風與水之歌','聆聽了風暴,是嗎?風暴工匠沙洲迴響著古老的歌...風與水之歌。$B$B吞噬掉颱風與風暴之子的偉大暴風雨。拿這個鼓去演奏他的歌...演奏駭風的歌。$B$B幫忙用風與水餵養他,讓暴風雨繼續下去。','蘇-睨要你到風暴工匠沙洲用暴風雨之鼓幫助駭風吞噬3個風暴亡魄和3個水漾之靈。','','到休拉薩盆地的雨頌者之蓬找神諭者蘇-睨。','吞噬水漾之靈','吞噬風暴亡魄','','',0), +(12732,'zhTW','心臟血液的力量','總有一天,瑞傑克會成為偉大的戰士。血液和天火將會使瑞傑克變強。你很快就會見識到。瑞傑克給你瓶子,你拿去西邊遠方日觸之柱的頂端,然後把水裝進瓶子裡。$B$B然後去盆地的北端,白骨原野北邊的岩臺。你去找血爪族母然後殺掉牠。拿走牠的心臟之血。$B$B你把心臟之血和水混合在一起,拿給瑞傑克。瑞傑克喝下它,就會變強。','將一份日觸心臟血液交給狂心之丘的瑞傑克。','','到休拉薩盆地的狂心之丘找瑞傑克。','','','','',0), +(12734,'zhTW','瑞傑克:第一滴血','瑞傑克剛剛成為狂心部族最年輕的戰士。爸爸給了瑞傑克一把強大的劍,要用來打敗狂心部族的敵人,但是傳統習慣說要先把劍沾血。老戰士通常都這麼做。你替瑞傑克做這件光榮的事好嗎?$B$B拿這把劍,插進所有狂心敵人的屍體中:西南邊的黃蜂和硬拳,還有大舌頭。也許還要沾霧語者的血,在西北方遠處,靠近惡潮湖的地方。','用狂心之丘黃蜂、硬拳衝鋒者、3個霧語族的成員的屍體讓瑞傑克之刃飲血。不論是霧語神諭者或霧語戰士都可以。當你完成了任務之後,回去狂心之丘找瑞傑克。','','到休拉薩盆地的狂心之丘找瑞傑克。','劍刃沾上硬拳衝鋒者的血','劍刃沾上硬拳衝鋒者的血','劍刃沾上霧語成員的血','',0), +(12735,'zhTW','淨化之歌','休拉薩的土地是純淨的。巨柱群保護了這片大地幾百年。$B$B水,則不夠純淨,因為它是從休拉薩外面來的...從海洋、湖泊、以及河流而來。水有的時候會帶來不好的靈魂-必須淨化的靈魂。$B$B你把這個排鐘拿到惡潮湖、冬握河、還有大河之心去彈奏。它會讓壞靈魂生起氣來...然後你得殺了它們。','雨頌者之蓬的蘇-睨要你在惡潮湖、冬握河、還有大河之心彈奏淨化排鐘,然後殺死污染水源的邪惡靈魂。','','到休拉薩盆地的雨頌者之蓬找神諭者蘇-睨。','','','','',0), +(12736,'zhTW','冥思之歌','你當然沒有戈洛克聰明!你只是頭腦簡單的$r。$B$B但你也不是毫無希望!你表現出你的學習能力了。也許水晶可以把你變聰明,就像水晶把我們變聰明了一樣!$B$B我教你能夠清靜心靈的歌。你到水晶旁邊演奏歌曲,然後水晶就會讓你的腦袋更好...沒辦法跟戈洛克一樣好,但是會比你現在好。活血之柱已經斷了,但其他的柱子還是好的!','雨頌者之蓬的蘇-睨要你在微光之柱、日觸之柱、苔光之柱和擎天之柱的頂端使用冥想長管笛。','','到休拉薩盆地的雨頌者之蓬找神諭者蘇-睨。','在微光之柱冥想','在苔光之柱冥想','在擎天之柱冥想','在日觸之柱冥想',0), +(12737,'zhTW','豐饒之歌','風暴是一種毀滅性的力量。風暴會燒掉樹。風暴會淹掉房子。$B$B但如果你知道正確的曲子,風暴也可以是一種生命的力量。在造物者棲所上面的風暴工匠沙洲,你可以找到一些小土堆。這些土堆很肥沃--裡面有種強力的種子。他們一直在等待一首正確的歌曲。$B$B你帶著這個號角,然後為它們演奏這首歌。','雨頌者之蓬的蘇-睨要你前往造物者棲所西北邊的風暴工匠沙洲,並在8堆濕潤的肥沃土堆附近演奏豐饒號角。','','到休拉薩盆地的雨頌者之蓬找神諭者蘇-睨。','演奏豐饒之歌','','','',0), +(12741,'zhTW','暴風的力量','笨大舌頭以為對雲唱歌就可以給他們帶來力量。瑞傑克來告訴這些大舌頭怎麼取得力量,去搶!$B$B西北邊遠方,有個很大、很平坦的地方,大舌頭管它叫「風暴工匠沙洲」。瑞傑克確定你只能像鳥一樣用飛的才能到達那裡。$B$B瑞傑克聽說在這個沙洲有強大的風和水之力。為了他們做的壞事殺死他們,然後把它帶去大舌頭的「暴風雨聖壇」,在沙洲西邊。瑞傑克會等你帶著終極的力量回來。','收集3個季風精華和3個風暴精華,然後帶去暴風雨聖壇。帶著暴風雨的真實力量回去狂心之丘找瑞傑克。','','到休拉薩盆地的狂心之丘找瑞傑克。','','','','',0), +(12758,'zhTW','英雄的頭盔','瑞傑克在遙遠的風暴工匠沙洲聽到有關巨合金人的傳說。你可以在西北方,就在盆地邊緣外找到它。$B$B想像一下瑞傑克把巨合金人的頭當作頭盔。讓瑞傑克勢如破竹!讓瑞傑克力量強大!$B$B你去幫瑞傑克拿,不過合金頭可能不是那麼容易就可以跟合金身體分開。或許可以在日觸之柱附近的詐咧挖掘場裡從小綠人和他們朋友那拿到鐵炸彈?用炸彈把合金身體跟頭分開,然後帶來給瑞傑克。','從詐咧挖掘場的風險投資公司裝置上取得風險投資公司爆裂物,使用它們來取得風暴看守者的頭顱。將風暴看守者的頭顱帶到狂心之丘交給瑞傑克。','','到休拉薩盆地的狂心之丘找瑞傑克。','','','','',0), +(12759,'zhTW','戰爭工具','賽匹克說你或許是他見過最棒的戈洛克獵人了...除了賽匹克之外。西南邊的大戰還在持續中 - 你去幫忙。$B$B賽匹克保留了一些最大型,最厲害的陷阱在卡爾塔克堡的藏匿處...告訴費克嘎,叫他在戰爭中使用這些陷阱,那你也就可以使用它們了。去挑選你想要的陷阱,然後殺掉許多的大舌頭。$B$B非常非常多!','從賽匹克在卡爾塔克堡的藏匿處中,取回一些陷阱。使用這些陷阱,屠殺附近50個炫觸戈洛克,然後回到卡爾塔克堡找薩滿賈克杰克。','','到休拉薩盆地的卡爾塔克堡找薩滿賈克杰克。','炫觸戈洛克','','','',0), +(12760,'zhTW','狂心的秘密力量','卡爾塔克堡的戰鬥還在持續...我想也是時候讓你知道狂心的大秘密了。$B$B我們有從家鄉帶來的莓子...它們本身沒什麼特別的,但是跟醉醉飲料混在一起喝就會讓狂心變超級強,你現在是個狂心族了...輪到你變強了。$B$B我給你一些酒,然後你就會變得超級強,然後去把所有的炫觸大舌頭打扁。','喝下狂心秘密飲料,在卡爾塔克堡附近殺死30隻炫觸戈洛克。','','到休拉薩盆地的卡爾塔克堡找薩滿賈克杰克。','炫觸戈洛克','','','',0), +(12761,'zhTW','水晶精通','炫觸依舊被小狗人攻擊...我們想,如果我們不阻止他們,他們大概就不會停手了。雖然我們有個秘密武器...我們把它送給了蘇-邁特,好讓他用來保護所有的神諭者。$B$B秘密武器是來自於大神...神聖的大神聖壇裡找到的超閃亮水晶。要小心...不要打破了。$B$B水晶就在西南方遠處,靠近炫觸避風港的地方有個聖壇,就在箱子裡。你要使用水晶幫助蘇-邁特打敗小狗人。','前往炫觸避風港並且取得水晶防護。使用水晶防護殺死附近的50隻狂心獾狼怪。$B$B等這些工作都完成,回去找炫觸避風港的喚雷者蘇-邁特。','','到休拉薩盆地的炫觸避風港找喚雷者蘇-邁特交談。','狂心攻擊者','','','',0), +(12762,'zhTW','偉大諸神的力量','我們得做些事來阻止小狗人繼續攻擊炫觸炫觸避風港。賈露特把他在大河之心某處找到的一種超級特別的水晶拿來給我...我們以前看過這種水晶,我們認為它應該可以解決我們的煩惱。$B$B這個水晶現在還沒有力量,但是如果夠靠近的話,那個露天的活血之柱應該能夠幫它重新充飽能量。一旦水晶充能完成,就去西南邊遠方的炫觸避風港利用水晶的能量讓你變的又大又強。$B$B接著是踹小狗人屁股的時間了。','利用暴露出來的活血之柱替休眠拋光水晶充能。前往炫觸避風港,用水晶給你的能量殺死30個附近的狂心獾狼怪,然後把你的成果告訴炫觸避風港的喚雷者蘇-邁特。','','到休拉薩盆地的炫觸避風港找喚雷者蘇-邁特交談。','狂心攻擊者','','','',0), +(12797,'zhTW','由甬道之門返回','你說的是事實,$r。就連我們談話的這一刻我都能夠感覺到休拉薩盆地的本質正因不死荒疫而逐漸衰弱。$B$B我已經將我的存在跟這個符文連結在一起了,$r。把它交給派你來這裡的那個人手中 -- 因為只有她的力量才能夠打開進入她領地的通道。','將終末符文帶回去休拉薩盆地交給雨頌者急湍的芙蕾雅化身。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','','','','',0), +(12803,'zhTW','自然之力','我不太確定我飛到東北邊的時候看到的是什麼,但我覺得那看起來好像是一個巨大的女人在教訓天譴軍團的樣子。$B$B我聽教授提起過什麼泰坦指派的「生命守護者」,負責看照休拉薩。我雖然算不上是泰坦史專家,但聽起來她應該很符合這個敘述。$B$B我也知道一旦天譴軍越過了失落之地的邊界進入休拉薩的其他區域,我們的遠征隊就死定了。怎麼樣,你要不要去找她,然後幫她一把?','前往介於休拉薩盆地之中,雨頌者急湍和失落之地之間的荒疫線,然後找出芙蕾雅的化身。','','','','','','',0), +(12805,'zhTW','搶救生命之力','活血之柱被巨力所擊倒,把那塊土地都翻了起來。$B$B在那破碎的裂片四周遊蕩的元素都蘊含著給予巨柱力量的生命精華。我不能眼看著這些能量被浪費掉,因為只剩下四個柱子了。$B$B前往東南方的破碎裂片,尋找活血元素。$B$B在它們殘留物上使用這個寶石來回收他們身上猛烈的能量。當這一切結束的時候,我們會需要這些能量來復原這片大地。','芙蕾雅要你去東南方的破碎裂片,在8個被摧毀的活血元素身上使用生命之力寶石。','','回休拉薩盆地的雨頌者急湍找芙蕾雅的化身。','回收活血能量','','','',0), +(13052,'zhTW','空中偵察','謝謝你幫維斯雷修好了那架飛行器。$B$B你願意再幫我們一個忙嗎?西北方有一股不尋常的氣流襲來。我已經指派了飛行員維克去偵察情況,不過他恐怕還需要一名副駕駛員。$B$B如果你覺得自己能勝任的話,就飛往湖邊著陸場去找他吧。哦,記得告訴他,是我派你去的。','卡爾維特教授要你飛往湖邊著陸場,與飛行員維克談一談。','','','','','','',0), +(12493,'zhTW','PvP測試','幫我殺掉一些對面的人!這些傢伙爛透了!我得要測試某個東西,所以就讓我們重複這行吧。我得要測試某個東西,所以就讓我們重複這行吧。我得要測試某個東西,所以就讓我們重複這行吧。我得要測試某個東西,所以就讓我們重複這行吧。我得要測試某個東西,所以就讓我們重複這行吧。','殺死十個對手。','','到塵泥沼澤的塔貝薩的農場找測試PvP任務給予者。','','','','',0), +(12520,'zhTW','犀牛專精:試煉','迫降可無法阻止老赫米特支配休拉薩所提供的精采遊戲。在營地西北的荒野中,叢林由強大的碎角犀牛所統治。你可以透過探險來證明自己,$g小夥子:小姑娘;,證明你自己有能力面對那樣強大的野獸。','殺死15隻碎角犀牛,再去向奈辛瓦里營地的赫米特‧奈辛瓦里回報。','','到休拉薩盆地的奈辛瓦里營地找赫米特·奈辛瓦里。','','','','',0), +(12522,'zhTW','需要引擎,就拿一個','她毀了...全毀了!我告訴過船長要小心對待像這樣珍貴的貨物,不過她有聽進去嗎?沒有!$B$B當船隻觸礁,我的飛行器,諾姆瑞根之靈就壞了。現在,我們根本沒有辦法遞送報告!$B$B不過還有機會,風險投資公司的怪人幫了我們一個忙。他們擊落了另一架飛行器,差不多就在東邊蒙特跳傘的那個沼澤裡。去那裡取得引擎。這可能是我們唯一的希望。','奈辛瓦里營地的威斯雷克斯‧迅鉗要你帶一部飛行器引擎給他。','','到休拉薩盆地的奈辛瓦里營地找威斯雷克斯·迅鉗。','','','','',0), +(12523,'zhTW','零件轉手','太好了,現在我們拿到了引擎,我們還需要其他的零件,好讓她能重新飛行。別擔心,我知道我在幹什麼。$B$B一個好的技工能善用各種材料完成他的作品,但我們還不需要走到這一步。$B$B總之,那些風險投資公司的蠢蛋,有一大堆挖礦機械備用零件,就散落在東北邊遠方的黃色水晶柱附近的詐咧的挖掘區。去挖一些來,然後帶來給我。','將7個風險投資公司備用零件交給奈辛瓦里營地的威斯雷克斯‧迅鉗。','','到休拉薩盆地的奈辛瓦里營地找威斯雷克斯·迅鉗。','','','','',0), +(12524,'zhTW','風險投資公司的禍事','自從我們抵達之後,風險投資公司就處處干擾我們鞏固營地與勘查地區的工作。一般來講,我們並不在乎他們在搞什麼,但他們開始攻擊我們的斥候,並且擊落我們的補給機。$B$B我們不能容忍這樣的羞辱。赫米特‧奈辛瓦里的遠征隊是來狩獵的,而狩獵將會成功。$B$B去詐咧的挖掘區,就在東北邊的水晶柱,殺死所有你看到的風險投資公司員工!','奈辛瓦里營地的戴巴爾要你去殺死15個風險投資公司的成員。你可以殺死風險投資公司惡棍或是風險投資公司挖掘者。','','到休拉薩盆地的奈辛瓦里營地找戴巴爾。','殺死風險投資公司成員','','','',0), +(12525,'zhTW','讓他再也笑不出來','如果我們想讓他的礦坑永久關閉的話,一定要讓工頭詐咧回老家,但你要小心。他的保鏢,肉派,是個高大又暴躁的巨魔,你很難不先打上一架才能見到工頭。$B$B他們兩個大概佔據著一處平臺,可以瞭望整個風險投資公司在詐咧挖掘區的營地。$B$B記得,挖掘區就在東北方日觸之柱再過去。祝好運,$n。','殺死工頭詐咧與肉派,然後回去找奈辛瓦里營地的戴巴爾。','','到休拉薩盆地的奈辛瓦里營地找戴巴爾。','','','','',0), +(12526,'zhTW','犀牛專精:追捕','很好,現在來處理這件事。我們得要找到這個當地的賢者並且和他談談。雖然他可能未必樂於提供服務。$B$B有人告訴我他就住在諾茲朗之骨附近的小屋中,就在南方過河那邊。把他找出來,向他介紹你自己,並且要求他協助我們找尋犀牛族王的下落。','在諾茲朗之骨和神諭者蘇-臘姆交談。','','','','','','',0), +(12528,'zhTW','配合','我殺的!你搶了我的獵物!$B$B<杰克傑克拿著長矛對你叫囂。>$B$B你蠢貨啊,$r。你欠了杰克傑克!你要做狂心部族的奴隸。你要替狂心部族殺死更多野獸。$B$B你要前往東北方的狂心之丘 - 你去告訴高階薩滿拉克杰克,你是新來的奴隸。$B$B快去,$r!快去,否則我再羞辱你一遍!$B$B<杰克傑克威脅地揮舞著長矛。>','到狂心之丘,以新「奴隸」的身分向高階薩滿拉克杰克回報。','','','','','','',0), +(12529,'zhTW','猩猩獵人的奴隸','你以為你是個偉大的獵人,嗯?你不是狂心,你不懂什麼叫做打獵。$B$B茍瑞格克是偉大猩猩獵人。他殺死過的猩猩甚至用爪子也算不出來。$B$B你和苟瑞格克到東邊去獵硬拳,你這個奴隸,$r。你照著苟瑞格克的話去做。','為高階薩滿拉克杰克殺死8隻硬拳採獵者和6隻硬拳衝鋒者,他就在狂心之丘上。$B$B如果你把茍瑞格克的鐐銬搞丟了,跟狂心之丘的長者哈爾凱克聊聊。','','到休拉薩盆地的狂心之丘找高階薩滿拉克杰克。','','','','',0), +(12530,'zhTW','折磨軟拳','奴隸傢伙!$B$B拉克杰克要我在殺硬拳的時候照料你。我今天很慷慨,我決定也讓你來殺一些,但不要妨礙苟瑞格克!$B$B拉克杰克還不知道,但苟瑞格克已經盯上了一隻又大又壞的硬拳獸穴之母。我們去東邊的硬拳空地用火鉗戳那些軟拳,她肯定會尖叫地跑出來!$B$B<苟瑞格克開心地搓著手。>','苟瑞格克給了你一把軟拳火鉗,用它去戳軟拳,直到硬拳獸穴之母從躲藏處出現。殺死硬拳獸穴之母,然後回到狂心之丘向高階薩滿拉克杰克回報。$B$B如果你弄丟了茍瑞格克的鐐銬,去找狂心之丘的長者哈爾凱克談談。','','到休拉薩盆地的狂心之丘找高階薩滿拉克杰克。','','','','',0), +(12531,'zhTW','秘密威脅','獅子殺手,逐雞者,新的狂心奴隸...$B$B我知道你不想一直當個奴隸,讓我告訴你該怎麼做。表現得比其他狂心獵人厲害,讓拉克杰克尊重你。$B$B在南邊河流沙地有著一隻野獸,他既殺黃蜂也殺鬃松,甚至還有獾狼怪。他叫做瑟菲克斯。你把瑟菲克斯的爪子帶給拉克杰克,或許他會讓你脫離奴隸身分。$B$B希望達吉克有好好教你,那樣的話瑟菲克斯很好對付。','在南邊河流沙地找出瑟菲克斯,殺了牠,把牠的爪子帶給狂心之丘的拉克杰克。$B$B如果你弄丟了達吉克的破舊粉筆,去狂心之丘找長者哈爾凱克談談。','','到休拉薩盆地的狂心之丘找高階薩滿拉克杰克。','','','','',0), +(12532,'zhTW','離巢!','愚蠢的苟瑞格克跌進一間雞舍,把雞給全放出來了!$B$B他們遍布山丘 - 把雞抓回來!$B$B<長者哈爾凱克把你噓走。>','替長者哈爾凱克抓住12隻逃跑雞。$B$B如果你弄丟了達吉克的破舊粉筆,去狂心之丘找長者哈爾凱克談談。','','到休拉薩盆地的狂心之丘找長者哈爾凱克。','','','','',0), +(12533,'zhTW','黃蜂獵人的學徒','拉克杰克並不蠢。或許你很擅長殺死東西,或許狂心部族可以將你變成一個真正的獵人。$B$B達吉克是所有的獾狼怪中最擅長狩獵巨蜂的,跟著達吉克去東南邊的天藍蜂巢或是去南邊的河,並且學學如何打獵。','殺死6隻天藍蜂巢黃蜂和9隻天藍蜂巢雄蜂,然後回去找高階薩滿拉克杰克。$B$B如果你弄丟了達吉克的破舊粉筆,去找狂心之丘的長者哈爾凱克聊聊。','','到休拉薩盆地的狂心之丘找高階薩滿拉克杰克。','','','','',0), +(12534,'zhTW','天藍女王','鬃松或許很危險,但往往都會遠離獾狼怪。但黃蜂卻不會害怕狂心部族...他們甚至會殺死我們的一些獵人。$B$B我知道拉克杰克希望黃蜂女王死掉,但沒有獾狼怪願意去她的蜂巢。你要去殺死黃蜂女王然後把她的刺帶回來給拉克杰克。我敢打賭拉克杰克會喜歡的。','把天藍女王的刺帶去給狂心之丘的高階薩滿拉克杰克。$B$B如果你弄丟了達吉克的破舊粉筆,去狂心之丘找長者哈爾凱克談談。','','到休拉薩盆地的狂心之丘找高階薩滿拉克杰克。','','','','',0), +(12535,'zhTW','造物的惡作劇','你是優秀的獵人,但狂心部族可以讓你變得更強。長者哈爾凱克認為你或許能進行更重要的任務。$B$B在拉克杰克派你進行重要的任務之前,你要替拉克杰克收集東西。沿著河往南,到處都是藍色水晶。拉克杰克需要很多藍色水晶。$B$B你替他拿到水晶。','狂心之丘的高階薩滿拉克杰克需要8個擎天水晶束。','','到休拉薩盆地的狂心之丘找高階薩滿拉克杰克。','','','','',0), +(12536,'zhTW','艱困騎乘','賽匹克是狂心部族最棒的獵人。賽匹克狩獵大舌頭...靠近沼澤的醜陋東西,他們總是試圖偷走所有他們能找到的東西。$B$B賽匹克準備要長途跋涉去摧毀大舌頭的聖壇,企圖把他們嚇走。我們不要再看見大舌頭出現在這個地方。$B$B東北邊的山丘上有一隻被鎖住的鱷魚 - 跟著賽匹克,然後照賽匹克的話做。','騎乘被俘虜的鱷魚前往霧語避難所,和賽匹克談話以獲得更多的指示。$B$B如果你把賽匹克的狩獵號角搞丟了,和狂心之丘的長者哈爾凱克聊聊。','抵達霧語村。','找『戈洛克獵人』賽匹克交談。如果他不在身邊的話,就使用賽匹克的狩獵號角來召喚他。','','','','',0), +(12537,'zhTW','禍不單行','嗯,那些水晶...$B$B大舌頭用水晶來強化他們的雨聖壇。賽匹克不太清楚這如何運作,但賽匹克知道如果他們用錯了水晶,雲霧和雨水就會發狂!$B$B賽匹克嘗試潛入他們的雨祭壇,不過不太順利。如果有兩個人一定更順利!$B$B帶著水晶,把水晶放在祭壇上,然後打碎它們釋放力量。賽匹克不確定會發生什麼事,所以最好站遠一點。','賽匹克要你在霧語天候聖壇前敲碎擎天水晶簇。$B$B如果你弄丟了賽匹克的狩獵號角,去找狂心之丘的長者哈爾凱克談談。','破壞霧語村的天氣祭壇','找『戈洛克獵人』賽匹克交談。如果他不在身邊的話,就使用賽匹克的狩獵號角來召喚他。','','','','',0), +(12538,'zhTW','霧並未傾聽','鬃松和黃蜂實在太無聊了!大舌頭才是唯一有樂趣的狩獵目標。$B$B我們在搞亂雨聖壇的時候,順便殺死一堆霧大舌頭。肯定讓他們不會想回到村子裡。$B$B<賽匹克自信地點點頭。>','殺死霧語避難所的12個霧語戈洛克,然後去和賽匹克交談。$B$B如果你弄丟了賽匹克的狩獵號角,去找狂心之丘的長者哈爾凱克談談。','','找『戈洛克獵人』賽匹克交談。如果他不在身邊的話,就使用賽匹克的狩獵號角來召喚他。','霧語戈洛克','','','',0), +(12539,'zhTW','踱步','很好,我們完成了!該回去了,只不過現在沒有鱷魚可以騎。$B$B如果我們往東邊去,沿著山脊的頂峰,應該會讓我們回到丘陵附近。$B$B但要小心不要走到山下,這可能會一頭撞進大舌頭的樹村。賽匹克認為他們現在不太喜歡我們。','找到路回去狂心之丘,並且和高階薩滿拉克杰克交談。','','','','','','',0), +(12540,'zhTW','服從命令','好,$g朋友:小姐;,拉克杰克有個非常重要的任務。你要去逮住追蹤者在北方河邊發現的受傷的大舌頭。$B$B這次不要帶著獵人,他們可能會想把它殺死。我想要把它藏起來,讓我可以戳戳它讓它告訴我一些事情。$B$B你去吧,把大舌頭帶回來給我。','替狂心之丘的高階薩滿拉克杰克找到受傷的雨頌神諭者。','','到休拉薩盆地的狂心之丘北方找受傷的雨頌神諭者交談。','找到受傷的雨頌神諭者','','','',0), +(12543,'zhTW','給蘇-臘姆的禮物','我們不認識你,陌生人,但我們知道你想要找東西。$B$B我們會幫你跟諾茲朗之骨談談,但你必須帶禮物來給我們。我們需要強力的大王眼鏡蛇牙才能做出我們的神諭者項鍊。$B$B去我們小屋東北方的叢生沼林找出眼鏡蛇,然後把最好的牙齒都帶回來。然後我們就讓骨頭和你講話。','將5根完整的眼鏡蛇牙帶去給諾茲朗之骨附近的神諭者蘇-臘姆。','','到休拉薩盆地找神諭者蘇-臘姆。','','','','',0), +(12544,'zhTW','諾茲朗之骨','諾茲朗之骨,神諭者蘇-臘姆將$n送去找你!$B$B我們替你準備了薰香。點燃它,然後放在諾茲朗的頭部附近,你就會聽到他的聲音。$B$B<你困惑的告訴蘇-臘姆你還沒有跟他講你的問題。>$B$B對,我們不知道,但是偉大的諾茲朗知道。不要懷疑。諾茲朗會回答你心裡的問題。$B$B去。諾茲朗不會等很久。','在諾茲朗之骨附近使用蘇-臘姆的薰香,然後帶著你得到的情報去找奈辛瓦里營地的赫米特‧奈辛瓦里。','','到休拉薩盆地的奈辛瓦里營地找赫米特·奈辛瓦里。','得知法魯恩的位置','','','',0), +(12549,'zhTW','懼刃豹專精:成為掠食者','如果你曾和赫米特一起打過獵,你就知道許多大貓都吃過他的苦頭;但是休拉薩這裡的懼刃豹可不一樣。他們能夠打倒的獵物比我看過的任何一隻貓都大。能夠撂倒這樣的一隻掠食者,就算的上是真正的獵人。$B$B如果你想證明你能應付這個挑戰的話,就去找這些懼刃豹來測試測試你自己吧。他們就棲息在營地四週的野地,以及河的南岸。','殺死15隻懼刃豹,然後回去奈辛瓦里營地找巴克‧坎特威爾。','','到休拉薩盆地的奈辛瓦里營地找巴克·坎特威爾。','','','','',0), +(12550,'zhTW','懼刃豹專精:跟蹤獵物','我聽過這裡的原住民講過一些故事,關於一隻叫做尚戈的巨大懼刃豹。我還沒發現任何證實尚戈存在的證據,但我的傷兵使我無法冒險去營地外頭尋找。$B$B如果你認為你是個敏銳的追蹤者,也許你可以找出尚戈的真相。前往營地北方的惡潮湖,然後在湖的南岸搜索腳印。','奈辛瓦里營地的巴克‧坎特威爾要你到惡潮湖附近從懼刃豹足跡中檢驗出三個尚戈的足跡。','','到休拉薩盆地的奈辛瓦里營地找巴克·坎特威爾。','檢驗尚戈足跡','','','',0), +(12551,'zhTW','鱷魚專精:磨練','我警告你,陌生人 -- 不要對撞船講出什麼評論。我已經聽遠征隊的其他人講夠了。$B$B不過,如果你想要試試你打獵的本事,你應該在那些狡詐的沼林鱷魚身上試試看你的技巧。他們在南方河流的沿岸和東邊的叢生沼林出沒。證明你可以對付他們,然後我們再來談談,獵人。','殺死15隻沼林鱷,然後向奈辛瓦里營地的戴巴爾回報。','','到休拉薩盆地的奈辛瓦里營地找戴巴爾。','','','','',0), +(12556,'zhTW','犀牛專精:獵殺','現在我們知道要上哪兒找法魯恩了,只剩下與那頭野獸作戰一件事要做。你準備好要對付這頭犀牛了嗎,$n?雖然那個靈魂說了一大堆恐嚇的話,我相信關於這頭野獸的力量,它說的是真話。$B$B當你準備好要面對牠的時候,朝北方日觸之柱前進,然後在惡潮湖的東北岸尋找法魯恩。牠甚至可能會跑到微光之柱附近。把牠的角帶回來紀念你的獵殺。','把法魯恩的角帶到奈辛瓦里營地給赫米特‧奈辛瓦里。','','到休拉薩盆地的奈辛瓦里營地找赫米特·奈辛瓦里。','','','','',0), +(12558,'zhTW','懼刃豹專精:準備突襲','尚戈在等著,$n。如果你的追蹤成功的話,牠不會知道你在跟蹤牠的;你會需要這份優勢的。$B$B牠應該比盆地中其他的懼刃豹更大,更壯,而且更加凶暴。前往北方,到惡潮湖的西岸,靠近水源瀑布的地方,與尚戈作戰。成功的話,帶著牠的毛皮回來。','帶著尚戈的毛皮去找奈辛瓦里營地的巴克‧坎特威爾。','','到休拉薩盆地的奈辛瓦里營地找巴克·坎特威爾。','','','','',0), +(12560,'zhTW','鱷魚專精:謀劃','沼林鱷魚是伏擊的專家,而我想要以牠們最擅長的方式來打敗牠們。要做到這件事,我們就得幫你打造一套適合的迷彩偽裝。我們要用到河岸還有湖畔沙地上長的那些植物。$B$B砂蕨是最適合的。它就長在南邊海裂之湧附近的沙岸上,北邊的惡潮湖與惡潮瀑布,以及東邊沼林後方最大的湖,大河之心的邊緣。','帶5個砂蕨葉給奈辛瓦里營地的達巴爾。','','到休拉薩盆地的奈辛瓦里營地找戴巴爾。','','','','',0), +(12569,'zhTW','鱷魚專精:伏擊','盆地最大的鱷魚,因為牠高超的埋伏本領而被稱做「奇襲者」,牠最喜歡在大河之心的淺水裡曬太陽。那是盆地中央的大湖,就在咱們營地的東方。$B$B我要你披上我準備的偽裝,然後躲在大河之心的西南岸,然後在奇襲者現身的時候偷襲牠。如果你擊敗牠,就把牠那強而有力的顎骨帶來給我。','把奇襲者的顎骨帶去奈辛瓦里營地的給戴巴爾。','','到休拉薩盆地的奈辛瓦里營地找戴巴爾。','','','','',0), +(12589,'zhTW','後座力?什麼後座力?','你覺得你會射擊?$B$B好吧,咱們來試試看。來,我們先從好脾氣的目標開始。別擔心,這完全沒有後座力。記得不要把槍指向你沒有要射擊的目標。$B$B現在,你準備好了就瞄準老維爾海姆頭上的蘋果,然後開火吧!','使用RJR步槍,射擊幸運的維爾海姆頭上的蘋果,然後和德羅斯坦交談。','','到休拉薩盆地的奈辛瓦里營地找德羅斯坦。','射中幸運的維爾海姆頭上的蘋果','','','',0), +(12592,'zhTW','偉大獵人的挑戰','所以你確實有點獵人天份是吧。你技術還不壞,而且赫米特也沒把你趕出營地外,所以他一定是打算在狩獵中算上你一份。$B$B來場競賽怎麼樣?就你跟我兩個人。$B$B赫米特和其他人都會要求你協助他們的狩獵。在此期間,你跟我來計算一下我們對他們的目標作了多少貢獻。這可不是你一眨眼就能獲勝的東西。而且你會發現你要殺死很多種不同的生物。祝你好運!','在幫助赫米特與其同伴的過程中殺死60隻獵物。當你殺死60隻之後,回到奈辛瓦里營地和德羅斯坦比較數字多寡。','','到休拉薩盆地的奈辛瓦里營地找德羅斯坦。','殺死獵物','','','',0), +(12607,'zhTW','一個長毛象任務','在你前去挑戰育母斯莉薇娜之前,多里安想到一個妙計推薦給你和赫米特,你們可以騎在長毛象的背上來協同作戰。$B$B營地的四周都是長毛象。只要把這個轡頭套在一隻碎牙長毛象的頭上就行。只要小心那些公象就是了。牠們可能完全無法忍受這些拘束。等你找到一隻適合的長毛象之後,把牠帶回這裡來。','帶一隻碎牙長毛象給多里安前哨的狹嘶。','','到休拉薩盆地的多里安前哨找狹嘶。','把碎牙長毛象送抵','','','',0), +(12614,'zhTW','產後憂鬱','育母斯莉薇娜現在應該像是一整團咆哮的牙齒、尖刺和爪子。你偷走了她的孩子,沒有任何母親會和藹地面對這種事。$B$B雖然牠們是從蛋裡面孵出來的,但她對於那些幼獸的愛想必不遜於你母親對你的愛。$B$B她現在應該又絕望又狂暴,兩者都是赫米特喜歡獵物所處的狀態。你和他,還有那隻長毛象,應該能夠打的過她。$B$B她正在蠻荒灌木林北緣的棲所,渴望著復仇。','殺死育母斯莉薇娜,然後向多里安前哨的多里安‧龍巡者回報。','','到休拉薩盆地的多里安前哨找多里安·龍巡者。','','','','',0), +(12624,'zhTW','它可能在任何地方!','當我發現寶莉安小姐要和奈辛瓦里遠征隊一起進行這趟旅行時,我立刻就簽約成為一名甲板員。你知道,我已經計畫要娶她好幾個月了!$B$B原本一切都準備好了。我本來要在船難那天晚上向她求婚...但現在戒指不見了。我找遍了每個地方!$B$B我知道這聽來很瘋狂,但我確信訂婚戒指就在盆地的某個地方。如果不是某個風險投資公司的人偷了它,可能就是被野生動物給吃了。但它就在盆地的某處...我就是知道!','從休拉薩盆地的各種生物身上尋找黃金訂婚戒。','','到休拉薩盆地的奈辛瓦里營地找查德。','','','','',0), +(12634,'zhTW','有些人會打成檸檬汁,有些人會釀成酒','老天在這時候丟給我一車的檸檬!當船墜地的時候,我最棒的酒桶都爆開了!我們現在只剩幾瓶蘭姆酒,根本不夠整個口渴的遠征隊喝啊!$B$B我們需要弄些酒精飲料,而且要快!$B$B叢生沼林東邊的樹上好像有很多水果,但是太高了我碰不到。你去找出粗壯的爬藤,然後看看你能不能把水果從樹上搖下來。把你找到的水果都帶來給我。','把1個柳橙,2串香蕉,還有1個木瓜拿給奈辛瓦里營地的葛林布茲‧雷酒。','','到休拉薩盆地的奈辛瓦里營地找葛林布茲·雷酒。','','','','',0), +(12644,'zhTW','靜置','現在我們有了原料,我也已經叫我的助手準備好蒸餾器了。他會監控整個過程,但我需要你幫忙控制場面。你搞不好會覺得我們就只是把東西通通扔進蒸餾器裡面擺著,但你錯了。$B$B材料和加熱都要在特定的時間加入,其餘的時候又要維持壓力不變。每個狀況都只有10秒不到的時間讓你反應而已。當你準備好開始蒸餾的時候,告訴『醺醉』麥克曼努斯。','成功完成蒸餾流程,然後把做好的雷酒的叢林調酒交給奈辛瓦里營地的葛林布茲‧雷酒。','','到休拉薩盆地的奈辛瓦里營地找葛林布茲·雷酒。','','','','',0), +(12645,'zhTW','試喝','現在是找出真相的時候了!$B$B<葛林布茲咯咯笑著。>$B$B我一直都想說說看這一句。一般來說,我通常都會在宴會上公開新酒,但在這叢林的正中央可沒辦法這麼做。$B$B所以呢,咱們就把樣本拿給幾個好朋友試試,然後問問他們的評語吧。讓我看看,我們當然想聽赫米特‧奈辛瓦里的意見,然後還有海德里厄斯‧哈羅威也要。他們就在營地裡。還有,你也要搭飛行器飛到湖畔起降場去,就在盆地的中央附近,然後也讓塔瑪拉‧顛鏈嚐嚐看。','把雷酒的叢林調酒樣品交給赫米特‧奈辛瓦里,海德里厄斯‧哈羅威,以及塔瑪拉‧顛鏈,然後回到奈辛瓦里營地向葛林布茲‧雷酒回報。','','到休拉薩盆地的奈辛瓦里營地找葛林布茲·雷酒。','赫米特試喝','海德裡厄斯試喝','塔瑪拉試喝','',0), +(12651,'zhTW','湖畔起降場','當風險投資公司的麻煩發生的時候,我要求馬文‧顛鏈和他的妻子,塔瑪拉,帶著他們的飛行器到東邊的大河之心去。我要他們建立一個小營地,讓我們卸下補給品以及偵察這個區域。$B$B他們現在應該已經抵達,開始在架設營地了。大河之心位在盆地中央的河川交會處。在湖的東北岸尋找湖畔起降場。馬文說那是個最佳地點。','與湖畔起降場的塔瑪拉‧顛鏈交談。','','','','','','',0), +(12654,'zhTW','兼差獵人','當赫米特要我陪馬文來這裡的時候,我暗自期望我有機會在修理飛行器和建立營地的空檔磨練我的狩獵技巧。$B$B我想要狩獵一頭叫做匹奇的獅子。聽說他出沒在南方,靠近叢生沼林與擎天之柱北面交界之處。如果你找到那頭野獸的話,可以幫我把屍體帶回來嗎?如果謠言是真的,那麼牠會是個連赫米特都會肅然起敬的戰利品!','把匹奇的殘骸帶去給湖畔起降場的塔瑪拉‧顛鏈。','','到休拉薩盆地的湖畔起降場找塔瑪拉·顛鏈。','','','','',0), +(12658,'zhTW','我的大鵬寵物','多里安要我訓練餵食他抓到的這些幼龍,這讓我想到,我也想要自己的寵物!$B$B不,不要這些幼小的龍。我不想要一頭能夠把我手咬斷的寵物!$B$B不過,在營地東北的白骨原野,越過龍類盤據的區域,有一大群的血爪大鵬。成鳥是不可能馴服的了,但如果你從巢裡幫我拿蛋來,我可以從孵化就開始養起。','把7個大鵬蛋帶去給多里安前哨的狹嘶。','','到休拉薩盆地的多里安前哨找狹嘶。','','','','',0), +(12681,'zhTW','試劑專員','在達拉然的大法師潘塔魯斯期待我們帶著各種試劑和法器回去。本地居民似乎偏好動物的肢體。血爪大鵬的扭曲爪子是他們的最愛。$B$B我並沒有資格判斷謠言的真實性,不過我想這其中確實有些古怪。$B$B有很多大鵬棲息在東北方的白骨原野,以老長毛象的屍體為食。你願意幫我收集給大法師研究的爪子嗎?','將5個扭曲的大鵬爪帶給多里安前哨的寇爾文‧諾靈頓。','','到休拉薩盆地的多里安前哨找寇爾文·諾靈頓。','','','','',0), +(12682,'zhTW','人跡未竟之地(DEPRECATED)','並非所有的遠征隊成員都是來狩獵取樂的,我們中的一部分人還肩負著重要的研究工作。$B$B冰封的諾森德中心竟然存在這樣一片熱帶天堂——索拉查盆地真是不可思議的存在。如果我不能搞清楚這片土地的奧秘,就不配做個學者。$B$B這張地圖給你吧。','','','','','','','',0), +(12683,'zhTW','十萬火急','這個盆地中沒有比惡潮多頭蛇唾液更具有腐蝕性的東西了。我有個特製的容器,用來替大法師潘塔魯斯收集這樣的東西。現在我只需要一位勇敢的,呃...收集者。$B$B你看起來像是個強壯又愛冒險的$c。你想不想一面賺點錢,一面替達拉然辦點事呢?$B$B你只要拿著這個容器到惡潮湖去,就在西南邊。去攻擊多頭蛇,然後用容器採集他們噴灑在你身上的唾液即可。','多里安前哨的寇爾文‧諾靈頓要你採集5份多頭蛇唾液樣本並殺死5隻惡潮多頭蛇。','','到休拉薩盆地的多里安前哨找寇爾文·諾靈頓。','採集唾液樣本','','','',0), +(12688,'zhTW','設計工程災難','這些哥布林流氓和他們的手下自稱擁有這個柱子和水晶。我是來這裡探勘這些水晶和採取樣本的,但他們制服了我,不讓我回去營地。$B$B如果你幫我殺出一條路離開這裡,我們就可以給這些惡棍上一堂永難忘懷的課!','幫助工程師海里斯從詐咧挖掘場逃脫,然後到奈辛瓦里營地找赫米特‧奈辛瓦里談話。','護送工程師赫莉絲逃離斯溫蒂格林挖掘場','到休拉薩盆地的奈辛瓦里營地找赫米特·奈辛瓦里。','','','','',0), +(12689,'zhTW','神諭者之手','','','','','','','','',0), +(12692,'zhTW','巫妖獵人的歸來','好,我要回去狂心之丘告訴大家你為獾狼怪和賽匹克所做的一切。你是偉大的獵人,他們要是不同意就太笨了。$B$B回去狂心之丘和長者哈爾凱克談談...我一定會讓他第一個知道你不是叛徒。$B$B謝謝你,巫妖獵人。','返回狂心之丘,並與長者哈爾凱克交談。','','','','','','',0), +(12695,'zhTW','友善乾皮的歸來','耶!蘇-楔可能會很擔心我們!也許你先回去鎮上告訴他一切都平安?對啊,去跟蘇-楔說吧。$B$B我要去捉住死巫妖的閃亮球!-我跟你在那兒碰面!去吧去吧!我跟你在那兒碰面!','返回雨頌者之蓬,並且與高階神諭者蘇-楔交談。','','','','','','',0), +(12702,'zhTW','雞派對!','我賭你猜不到發生什麼事了。$B$B不,當然不是茍瑞格克或是雞。$B$B好吧,我騙人的,苟瑞格克又讓雞跑出來了。笨苟瑞格克和鬼叫的肚子。$B$B如果你需要任何獵人的協助,儘管跟我說...他們就在附近某處。','給狂心之丘的長者哈爾凱克逮住12隻逃跑雞。','','到休拉薩盆地的狂心之丘找長者哈爾凱克。','','','','',0), +(12704,'zhTW','取悅偉大雨石','自從苔行者被攻擊以來,我就擔心是我們對偉大雨石不夠好...也許我們太貪心。我們需要貢獻更多財寶!$B$B你上次很擅長找亮晶晶...也許你可以多找一點?你也許需要好雨頌者的幫忙。告訴我們需要誰就好。','雨頌者之篷的高階神諭者蘇-楔要你帶著一個同伴挖掘收集6個閃亮的財寶。$B$B記得向雨頌者之蓬的高階神諭者蘇-楔要你先前的同伴。','','到休拉薩盆地的雨頌者之蓬找高階神諭者蘇-楔。','','','','',0), +(12804,'zhTW','適合獵人的肉排','有些時候,一個塞滿了獵人的營地是再糟不過的地方了。他們全都忙著捕殺獵物,結果我只弄得到又硬又多筋的肉。這不會是你狩獵累了一天回家想吃到的東西。$B$B不過,幸運的是,附近有地方可以取得柔軟,多汁的肉。在營地和河川的南邊有些長頸食草者。他們就是咱們飢餓獵人的最佳食物來源。幫我帶些最棒的肉塊回來,然後我們就能夠好好款待我們的同志們。','把5塊長頸食草者肉排帶回去奈辛瓦里營地給『斬擊者』寇爾格。','','到休拉薩盆地的奈辛瓦里營地找『斬擊者』寇爾格。','','','','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_02' WHERE sql_rev = '1647383682932560234'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_03.sql b/data/sql/updates/db_world/2022_03_18_03.sql new file mode 100644 index 000000000..005a4c5ce --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_03.sql @@ -0,0 +1,326 @@ +-- DB update 2022_03_18_02 -> 2022_03_18_03 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_02'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_02 2022_03_18_03 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647383840526735676'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647383840526735676'); + +REPLACE INTO `item_template_locale` (`ID`, `locale`, `Name`, `Description`, `VerifiedBuild`) VALUES +(13704, 'zhTW', '骷髏鑰匙', '', 0), +(11000, 'zhTW', '影爐鑰匙', '', 0), +(21761, 'zhTW', '聖甲蟲保險箱鑰匙', '', 0), +(21762, 'zhTW', '大聖甲蟲保險箱鑰匙', '', 0), +(30623, 'zhTW', '水庫鑰匙', '', 0), +(30633, 'zhTW', '奧奇奈鑰匙', '', 0); + +REPLACE INTO `item_template_locale` (`ID`, `locale`, `Name`, `Description`, `VerifiedBuild`) VALUES +(13704, 'zhCN', '骷髅钥匙', '', 0), +(11000, 'zhCN', '影炉钥匙', '', 0), +(21761, 'zhCN', '圣甲虫保险箱钥匙', '', 0), +(21762, 'zhCN', '大型圣甲虫保险箱钥匙', '', 0), +(30623, 'zhCN', '水库钥匙', '', 0), +(30633, 'zhCN', '奧金顿钥匙', '', 0), +(42482, 'zhCN', '紫罗兰监狱钥匙', '', 0); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(13343,'zhTW','恆龍之謎,復甦','來的正好!或者...我們是不是才剛講過話?$B$B<克羅米覺得時間的連續性很有趣。>$B$B總之,恆龍正在追你!嗯好吧,不是現在的你。應該說,他們正在追著過去的你,過去正在守護永恆沙漏的你,你還記得對吧?$B$B那時候的你,不過已經變成現在的你了。等等,好,不管了。重點是你得回去青銅龍殿保護你自己跟沙漏以免歷史被改寫,然後你就消失了!','龍眠神殿的克羅米要求你再次回到青銅龍殿。$B$B一旦進入龍殿,將永恆沙漏放在地上並幫助過去的自己抵抗恆龍軍團。','保護永恆沙漏免遭永恆之龍的破壞。','到龍骨荒野的龍眠神殿找克羅米。','','','','',0), +(13372,'zhTW','聚源虹膜之鑰','一股強烈的魔力不斷以聲音與能量的形式,自這塊從薩菲隆爪上落下的眼狀珠寶中發散出來。對於凡人而言光是待在這塊石頭附近就感到幾近刺耳。$B$B很明顯地這樣強大的物品必須帶給巨龍之后,『生命守縛者』雅立史卓莎。前往龍眠神殿諮詢她的建議,就在龍骨荒野區域。','轉交聚源虹膜之鑰給『生命守縛者』雅立史卓莎,她就在龍骨荒野的龍眠神殿頂端。','','到龍骨荒野的龍墳荒原找『生命守縛者』雅立史卓莎。','','','','',0), +(12043,'zhTW','鏽鼻防禦','你,$c!我們南方的不死生物持續地干擾我們的工作。去把他們清理掉,行嗎?','在葛拉克朗安息地周邊的挖掘場殺死12個荒原掘地工和1個荒原監工。任務完成之後向鏽鼻崗哨的納孚回報。','','到龍骨荒野的鏽鼻崗哨找納孚。','','','','',0), +(12044,'zhTW','進貨','嘿你好啊!南邊的天譴軍團正在挖一些上古龍之類的。我原本不想管他們為什麼要這麼做,但是他們挖出了一車車的混合礦石。$b$b幫我去帶一些那種礦物回來。部落在製造這麼多武器,這玩意一定可以賣個好價錢。','從葛拉克朗安息地周邊的挖掘場收集8堆混合礦物,然後交給鏽鼻崗哨的辛克。','','到龍骨荒野的鏽鼻崗哨找辛克。','','','','',0), +(12045,'zhTW','銼冰','我從沒見過你...初來乍到水晶之鉗嗎?很高興有你的幫忙。多一雙手就多一份力量。$b$b你拿到了原料,我就能完成我的機械,然後我們可以把它賣給那些當官的,賺大錢回老家?$b$b事實上,大部分的零件我都有了,我只需要一些武器本身的原料。納孚說,北邊的元素上的鋸齒狀寒冰裂片,最適合製作我炸彈中的破片了–快去弄一些來,好嗎?','從北邊的冰元素身上收集4個寒冰爆裂碎片,帶回來交給鏽鼻崗哨的希伏利克司。','','到龍骨荒野的鏽鼻崗哨找希伏利克司。','','','','',0), +(12046,'zhTW','柔軟的彈殼','我需要為這些榴砲彈換些新的彈殼。我本來有的材料都太硬了,導致爆炸的時候,破片沒辦法飛散開來。$b$b我需要的是夠薄的動物皮革。那些西邊的蟄猛巨蟲隧掘者可以派上用場...或者是逗留在龍骨上的兀鷹。反正把你能找到的都帶給我。','從蟄猛巨蟲隧掘者、或龍骨兀鷹身上收集12張薄獸皮,牠們出沒在鏽鼻崗哨附近。當你拿到了獸皮,把它們給希伏利克司。','','到龍骨荒野的鏽鼻崗哨找希伏利克司。','','','','',0), +(12047,'zhTW','不會融化的東西','不不不!寒冰裂片統統不能用了!它們還沒造成傷害就都融化了。我再也不會相信納孚關於原料的話了。這表示我們需要其他東西當作破片。$b$b我知道了!我真聰明,用骨頭裂塊嘛。$b$b這附近到處都是蟄猛巨蟲嚼碎過的骨頭裂塊。去找找,幫我帶一些可以用的裂塊過來。','在鏽鼻崗哨東邊的龍骨中搜尋12根斷裂的大骨。','','到龍骨荒野的鏽鼻崗哨找希伏利克司。','','','','',0), +(12049,'zhTW','難以下嚥','那些部隊鐵定需要一大堆食物來填飽肚子。$B$B我來告訴你這種謹慎的$r永遠不會知道的小秘密...那些蟄猛巨蟲吃起來的口感就跟雞沒兩樣。$b$b去東邊招惹一條如山的笨重蟄猛巨蟲,你大概沒法子直接殺掉一條蟲,所以你得趁牠嘴巴大開時,把這東西丟進牠的喉嚨。盡你所能地把肉片給我拖回來。','到鏽鼻崗哨的東邊,和一頭笨重的蟄猛巨蟲戰鬥,直到牠張嘴之際,將高效爆破炸藥丟進他的喉嚨裡。當蟲爆炸以後,從地面上收集6片燒焦的蟄猛巨蟲肉帶回去給辛克。','','到龍骨荒野的鏽鼻崗哨找辛克。','','','','',0), +(12050,'zhTW','伐木','接下來,我們需要一些木材準備給所有聯盟正在建造的哨塔。南方有一些纖細的樹木,但是北方那些鷹身人築巢的樹木更加適合建築用。$b$b帶著這個。等你抵達鷹身人築巢的地區,使用控制器,我的一台伐木機會過去找你。盡量多收集一些木材。那些鷹身人絕對不會容許你砍伐牠們的老家 - 必要的話就解決牠們吧。$b$b快去吧!','在你抵達北方的鷹身人築巢地之後,使用辛克的伐木機控制裝置召來一台伐木機。從那個地區收集50捆的木材,然後回到鏽鼻崗哨去找辛克。$B$B如果你弄丟了辛克的伐木機控制裝置,去跟鏽鼻崗哨的辛克談話,再要一個新的。','','到龍骨荒野的鏽鼻崗哨找辛克。','','','','',0), +(12051,'zhTW','消滅鷹身人','那些該死的鳥人給我們製造太多麻煩了!殺光它們!','轉至諾茲拉斯哨站的西北邊,為諾茲拉斯哨站的納爾弗消滅20個鷹身人。','','到龍骨荒野的鏽鼻崗哨找納孚。','冷風鷹身人','','','',0), +(12052,'zhTW','有夠囉唆!','$C,看到沒?那就是領導攻擊的鷹身人,他們襲擊了我們要送去大門的貨物!我在冷風陵地的後方看過她。$B$B這些鷹身人一直在拖慢我們賺錢的速度!把他們殺光。','殺死冷風之女及15名冷風鷹身人,他們出沒在鏽鼻崗哨西北邊的山區中。完成之後,向納孚回報。$B$B如果你需要辛克的伐木機控制裝置,與鏽鼻崗哨的辛克談談。','','到龍骨荒野的鏽鼻崗哨找納孚。','冷風之女','冷風鷹身人','','',0), +(12075,'zhTW','精挑細選','外頭很冷,對吧,$r?寇恰不願意和我見面。看來他還有更迫切的事情–那就是從底下洞穴不斷攻擊他們的蟄猛巨蟲。說不定你可以幫我說服寇恰我其實是個好人。$b$b在北邊的洞口,我看到了一名巨人被那種蟲給吃了...我還是不懂為什麼這些蟲這麼輕易就把巨人宰了。從他的傷口採一些樣本給我吧。','從冰巨人的屍體上收集1份岩肉樣本,位置在水晶之鉗的山洞口,佐特的北邊。任務完成以後,向峽谷中央附近的佐特回報。','','到龍骨荒野的水晶之鉗找佐特。','','','','',0), +(12076,'zhTW','骯髒的事情','你帶給我的樣本只要看一眼,就可以發現某種腐蝕性唾液的明顯痕跡。很自然的假設,這種唾液跟蟲子用來掘地的成份是一樣的,這也使得這些唾液成了對付冰巨人恐怖的武器。$b$b把我的刮鏟帶著,找一隻蟲打架,當他吐口水在你身上的時候,用刮鏟把唾液刮掉帶回來給我。給我多一點–我要拿他來做藥劑的主要成份。','對你自己使用刮鏟,收集2瓶蟄猛巨蟲吐出來的腐蝕唾液。任務完成以後,把瓶子帶給水晶之鉗的佐特。','','到龍骨荒野的水晶之鉗找佐特。','','','','',0), +(12077,'zhTW','一天兩次外敷','這份藥劑應該可以抵擋他們的口水。替我拿給寇恰,好嗎?告訴他如果他願意報答這個人情,我還有很多藥源。','把佐特準備的藥劑交給『無敵』寇恰。','','到龍骨荒野的水晶之鉗找『無敵』寇恰。','','','','',0), +(12078,'zhTW','牧蟲人','那就這樣吧。如果巨人們不會前來幫助我們,也許我們可以利用這些蟲子。下面的洞窟裡,在母蟲附近一定有些幼蟲。帶著這個箱子,並且捕捉3隻幼蟲,把它們帶來給我。$b$b在交涉失敗的時候,奴役是個完美的變通手段。','進入水晶之鉗底下的洞窟,使用結實的木箱捕捉3隻蟄猛巨蟲幼蟲。在抓到幼蟲之後記得要把箱子撿起來!$B$B把被捕獲的蟄猛巨蟲幼蟲交給水晶之鉗的佐特。','','到龍骨荒野的水晶之鉗找佐特。','','','','',0), +(12080,'zhTW','超級大蟲','蟄猛巨蟲在底下的洞窟中有隻母蟲在繁殖牠們。我們叫她響鑽,這是一個從瘟疫之地來的冒險家命名的。我在牠們最初的突襲中見過她一次 - 她的身形大到足以吞噬我的年輕族人。不除掉她,這洞穴就不會落入我們手中。','進入冰心洞窟殺死響鑽。如果你還帶著的話,記得要用佐特的保護藥劑來保護你自己不受蟄猛巨蟲的噴酸傷害。$B$B當你完成任務之後向水晶之鉗的『無敵』寇恰回覆。','','到龍骨荒野的水晶之鉗找『無敵』寇恰。','','','','',0), +(12089,'zhTW','懸賞:博學者克爾多努斯','奉霸主阿格瑪之命:$B$B犯人:博學者克爾多努斯$B$B罪名:通敵$B$B該員狀況:存活$B$B博學者克爾多努斯,阿格瑪之錘的法師指揮官,以部落為名格殺勿論。$B$B克爾多努斯最後被人發現朝西南方前往月眠花園,意圖加入藍龍軍團陣營與其抗魔之役。$B$B小心接觸克爾多努斯,該員是為一強大之魔導師。$B$B一切賞金將由阿格瑪之錘之苟爾特隊長支付。','殺死博學者克爾多努斯,並向苟爾特隊長回報,他在龍骨荒野的阿格瑪之錘中。','','到龍骨荒野的阿格瑪之錘找苟爾特隊長。','','','','',0), +(12090,'zhTW','懸賞:吉甘陶','奉霸主阿格瑪之命:$B$B犯人:吉甘陶$B$B罪名:襲擊部落;「長太醜」$B$B該員狀況:存活$B$B猛瑪象人領主,吉甘陶,因涉嫌多起襲擊部落士兵與龍骨荒野軍事設施事件遭到通緝。$B$B吉甘陶最後一次被人發現於阿格瑪之錘東南方林間小路中遊蕩。$B$B相信吉甘陶持有大量軍火並且極端危險。$B$B一切賞金將由阿格瑪之錘之苟爾特隊長支付。','殺死吉甘陶,並向苟爾特隊長回報,他在龍骨荒野的阿格瑪之錘中。','','到龍骨荒野的阿格瑪之錘找苟爾特隊長。','','','','',0), +(12091,'zhTW','懸賞:懼爪','奉霸主阿格瑪之命:$B$B犯人:懼爪$B$B罪名:襲擊部落$B$B該員狀況:存活$B$B懼爪因多次攻擊往來毒怨之地的部落車隊而遭懸賞。$B$B懼爪盤據晶紅龍殿上方的懸崖,位在阿格瑪之錘東方。接近懼爪需極度小心。$B$B一切賞金將由阿格瑪之錘之苟爾特隊長支付。','殺死懼爪,並向苟爾特隊長回報,他在龍骨荒野的阿格瑪之錘中。','','到龍骨荒野的阿格瑪之錘找苟爾特隊長。','','','','',0), +(12095,'zhTW','前往龍殞營地','此地東方,在龍骨荒野的中心處,是個除了龍類遺骸和冰雪以外一無所有的平原。天譴軍團在中央凍原建立起數個營地,不斷的把復活的冰霜巨龍送去攻擊我們在憤怒之門的部隊。雖然大多數的冰龍都被洛克漢與他的巨龍獵人輕鬆解決,但其中一頭龍卻相當的麻煩。$B$B前往東北方並到龍殞營地找洛克漢,協助他和他的部下擊敗薩拉絲婥,我會大大的獎賞你!','與龍骨荒野上龍殞營地的洛克漢交談。','','','','','','',0), +(12097,'zhTW','薩拉絲婥,北方災厄','我的獵人不是死了就是被凍成冰塊了,$n。你還是要幹嗎?只要跟我說一聲,我就把那條龍再叫過來。$B$B如果你宰掉它,帶那怪獸的冰凍心臟回去阿格瑪之錘給苟爾特。他一定會好好酬謝你,老兄。','與洛克漢交談,呼喚冰霜巨龍薩拉絲婥。$B$B殺死薩拉絲婥並且把薩拉絲婥的冰凍心臟送去給阿格瑪之錘的苟爾特隊長。','','到龍骨荒野的阿格瑪之錘找苟爾特隊長。','','','','',0), +(12112,'zhTW','艱難的交涉','到頭來,你至少還有些幫助,就我經驗所及,還沒有遇過像你這樣的$r。$b$b我們這裡不需要你了。去水晶之鉗,找我哥佐特,看他需不需要你的幫忙。他試著要矇混巨人自相殘殺,這樣我們就不用動手了。他可不是以他的頭腦在家族中聞名的。','找到人在水晶之鉗中心的佐特,在鏽鼻崗哨的東北邊。','','','','','','',0), +(12124,'zhTW','警告龍后','<巨龍管理者將介紹信從你手中取走。>$B$B是...是的,我想你已經準備好覲見女王。$B$B準備好就告訴我吧,我會命這些飛龍安全地引領你到神殿的頂端。你得親自將這封信呈給雅立史卓莎女王。','將介紹信送交到龍眠神殿的『生命守縛者』龍后雅立史卓莎手上。','','到龍骨荒野的龍眠神殿找『生命守縛者』雅立史卓莎。','','','','',0), +(12150,'zhTW','隱居的符文大師','德瑞格瑪‧符標是一位猛瑪象人符文大師...稀有的品種。他通常都是獨來獨往,但也和龍骨荒野上一些強大、有影響力的猛瑪象人來往。他一定知道這個新領袖是誰。$b$b隨著天譴軍團和藍龍的問題日益嚴重,我想我們無法獲得任何額外的支援,所以我需要你從德瑞格瑪那裡用必要的手段挖出情報來。$B$B你可以在黎明之鏡上方的懸崖上找到他。','找出德瑞格瑪‧符標;在通往能俯瞰黎明之鏡懸崖的途中,有個道路旁邊的洞穴,他就在裡面。向他挑戰,使用一切手段問出猛瑪象人領袖的名字。獲得情報後向龍眠神殿的歐拉史卓莎回報。','猛獁人領袖的名字','到龍骨荒野的龍眠神殿找歐拉史卓莎。','猛瑪象人督軍之名','','','',0), +(12151,'zhTW','跋扈的督軍','我們沒有理由懷疑德瑞格瑪說的不是真話。不論是葛羅姆薩爾擊敗了你,或是你擊敗了牠,都與他無關。$b$b照著他的指引...帶著你先前交給我的號角,到蒼藍龍殿南方的火炬圈去,然後吹響號角公開宣佈你的挑戰。$B$B當『雷霆使者』葛羅姆薩爾現身的時候,殺了他,然後帶他的頭來見我。','前往蒼藍龍殿南方的火炬圈,然後吹響紋飾戰鬥號角。擊敗『雷霆使者』葛羅姆薩爾,然後把他的頭帶回去給龍眠神殿的歐拉史卓莎。','','到龍骨荒野的龍眠神殿找歐拉史卓莎。','','','','',0), +(12261,'zhTW','無處可逃','他們正從我死去的兄弟們的骸骨上汲取能量...$B$B我並不喜歡詛咒神教,但他們厚顏無恥的行為已經惹怒了我。我不會手下留情...反正我也沒有所謂的慈悲心。$B$B我要你去確保當屠殺開始的時候他們沒路可逃。把這個毀滅禦符放在龍殿的出口盡頭。守護它,直到它完全充能完成為止。','將毀滅禦符放在黑曜龍殿的出路盡頭,就在開始積雪的地方。保護禦符,直到它完全充能好為止,然後向賽瑞納爾回報。','毀滅結界充能。','到龍骨荒野的奈薩里奧之喉找賽瑞納爾。','毀滅禦符完全充能','','','',0), +(12262,'zhTW','求救無門','我們一個都不會放過。$B$B就在外面,下流的通靈師與他們的骷髏僕役使我的領地蒙羞。把他們屠殺殆盡。','在黑曜龍殿外面殺死6個燃燒深淵通靈師與10個悶燒的骷髏。一旦你完成了這項工作,向賽瑞納爾回報。','','到龍骨荒野的奈薩里奧之喉找賽瑞納爾。','燃燒深淵通靈師 ',' 悶燒的骷髏','','',0), +(12263,'zhTW','不懷好意','詛咒神教並非只是為了汲取死去龍族的力量而來。我想我知道他們的目的,但我需要你幫我證明我是對的。$B$B我會幫你覆上這個通靈師的偽裝。回到洞穴裡確認他們待在這個神聖之地究竟有何企圖。我會透過你的雙眼來觀察。$B$B小心一點,$n,如果你受到任何的傷害,這脆弱的幻象很可能就會消失。','等待賽瑞納爾幫你偽裝成燃燒深淵通靈師,然後回到奈薩里奧之喉刺探詛咒神教的動向。完成後向賽瑞納爾回報他們的意圖與細節。','發現復活熔岩之龍的場所','到龍骨荒野的奈薩里奧之喉找賽瑞納爾。','','','','',0), +(12264,'zhTW','剔除詛咒神教','身後的洞穴滿是神教殘忍暴行的證據,跟他們打交道只有一種方法...你懂該怎麼做的。','殺掉位於奈薩里奧之喉的3名燃燒深淵死靈法師,6具悶燒的傀儡以及6隻悶燒的魂屍以後,返回賽瑞納爾處。','','到龍骨荒野的奈薩里奧之喉找賽瑞納爾。','','','','',0), +(12265,'zhTW','污染污染者','就在你探勘洞窟的同時,在我們所發現的符文中,我感受到了一股巨大的魔力。我不會魯莽的讓你萃取這魔法...但最直接的方法往往是最有效的。$B$B毀掉這符文...擊碎它,同時確定教徒們將再也無法取用他們所已然聚集的力量。','標記並且擊碎8個畫在奈薩里奧之喉中地板上的死靈符文。完成後回去找賽瑞納爾。','','到龍骨荒野的奈薩里奧之喉找賽瑞納爾。','摧毀死靈符文','','','',0), +(12266,'zhTW','毀滅的故事','你可以離開了,$r。$B$B去跟納麗絲說她錯過了一場很棒的屠殺。','返回龍眠神殿,並且讓納麗絲知道賽瑞納爾的任務已經完成了。','','','','','','',0), +(12267,'zhTW','奈薩里奧之焰','現在神教的軍力被削弱而部分的能力也被剝奪,是時候打擊腐化的根源了。$B$B『凋零』羅辛正在洞穴的後方將黑龍復活成熔岩龍。前往召喚室並以...火焰淨化那些殘留下來的骸骨,這唯一的手段確保遺骸不會再被褻瀆。$B$B燃燒骸骨一定會引起羅辛的注意,確保他也被徹底毀滅。$B$B這個瓶子裡的魔法將會幫助你完成這項工作。','使用奈薩里奧之焰淨化奈薩里奧之喉後方的召喚區。一旦你引起『凋零』羅辛的注意,就殺死他,然後回到洞穴前方去找賽瑞納爾。','','到龍骨荒野的奈薩里奧之喉找賽瑞納爾。','淨化召喚區','','','',0), +(12418,'zhTW','走過燃燒之境','我還有最後一個任務要交給你,$r...一個應該能夠扭轉戰況的任務。$B$B回到神殿去,殺掉那些供給突襲軍能量的死靈法師群。只要他們死了,我們應該就可以擊退這些軍隊,並重新奪回神殿。$B$B我還需要你去找到神殿底下的腐化來源並摧毀它。$B$B我知道我的要求很多,不過如果你願意為我去做這件事的話,我們就可以贏得這場戰鬥。','從南方或北方的通道進入晶紅龍殿,並殺死6名嚴寒死靈法師,同時消滅神殿下方腐化的源頭。任務完成以後,向賽利斯塔茲回報。','','到龍骨荒野的龍墳荒原找賽利斯塔茲。','嚴寒死靈法師','晶紅腐化被淨化','','',0), +(12419,'zhTW','晶紅龍殿的命運','當你拾起胸針的時候,它的微弱光芒稍微變亮了點。$B$B卡薩斯一定會想知道妲莉雅的死亡。把胸針帶去龍眠神殿給他。','將妲莉雅‧日觸的紅寶石胸針交給卡薩斯,並且通知他妲莉雅之死。卡薩斯就在龍眠神殿的統治會議室中。','','到龍骨荒野的龍眠神殿找卡薩斯。','','','','',0), +(12447,'zhTW','黑曜龍殿','天譴軍到來。考雷斯塔茲召集他的盟友,徒勞無益地試著援救他們的晶紅龍殿。但紅龍軍團的偉大情操似乎沒有延伸到其他龍族軍團的神殿。$B$B訝異嗎?我一點也不驚訝。$B$B我的一支族裔,被派往清理黑曜龍殿中寄生的不死害蟲,要證明你比雅立史卓莎更加高貴與剛毅,你可以立刻跋涉至該處,揮舞你的刀刃。$B$B我樂見你所做的一切。','前往龍眠神殿西北方、憤怒之門正西方的黑曜龍殿。到龍殿中找賽瑞納爾,並提供你的協助。','','','','','','',0), +(12450,'zhTW','走過燃燒之境','我有最後一項任務要交付給你,$r...一個可以扭轉戰局的任務。$B$B返回龍殿,殺掉發起這場突襲的死靈法師。只要他們一死,我們就能擊退這些軍隊,最後奪回龍殿。$B$B我同時需要你從龍殿底下找出腐化的源頭,並且消滅它。$B$B我曉得已經請求你替我們做了很多,但是只要你替我們完成這件事,我們將會獲得這場戰爭的勝利。','從南方的通道進入晶紅龍殿,並殺死6名嚴寒死靈法師,同時消滅神殿下方腐化的源頭。任務完成以後,向凡加斯塔茲回報。','','到龍骨荒野找凡加斯塔茲。',' 嚴寒死靈法師','淨化晶紅腐化','','',0), +(12452,'zhTW','晶紅龍殿的命運','','將妲莉雅的紅寶石墜飾交給賽利斯塔茲,並將妲莉雅之死告訴他。','','','','','','',0), +(12454,'zhTW','生命的循環','伊瑟拉在翡翠夢境中沉睡著,同時監視著夢境與艾澤拉斯。然而,一場駭人的夢魘佔據了夢境,我擔心伊瑟拉現今已被這場夢魘所影響。$B$B近來,我請求她援助對抗天譴軍團的戰爭;天譴軍正在其他的龍殿中喚醒冰霜巨龍。但是她曲解了我的意思。$B$B取而代之的是,她告訴龍殿中的防衛者,將所有不是綠龍軍團的成員視為敵人。$B$B我需要你殺掉一些天爪,龍殿必須回歸它的平衡。','翡翠龍殿的『花園看守者』尼夏拉請求你殺死5頭翡翠天爪。','','到龍骨荒野的翡翠龍殿找『花園看守者』尼夏拉。','','','','',0), +(12456,'zhTW','艾里史卓斯的長羽','我能感覺到神殿尚未完全回歸平衡。青綠看守者已經被我們的舉動所觸怒,我感覺他聽不進我們任何理由。$B$B艾里史卓斯是一頭巨大的天爪,棲息在翡翠龍殿的南方,他同時控有整個龍殿的空中防禦,而恐怕我們得應付他的攻擊。$B$B拿著這些天爪蛻皮,並把蛻皮放在他視力所及的地面上,他會飛下來的。把他的長羽帶給我。','翡翠龍殿的『花園看守者』尼夏拉要求你取得艾里史卓斯的長羽。','','到龍骨荒野的翡翠龍殿找『花園看守者』尼夏拉。','','','','',0), +(12458,'zhTW','鞭笞者之種','我們需要更多的武器來對抗天譴軍。東南方翡翠龍殿的自然產物也許就是這個問題的解答。$B$B任何的不死生物,除了受到希瓦娜斯救贖的被遺忘者外,只要踏進龍殿一步,立刻化為灰燼。$B$B我想要測試個理論,而我需要你作為我達成這項工作的手段,年輕的$r。前去翡翠龍殿,從殿內翡翠鞭笞者的身上拿走種子。','龍眠神殿頂端的伊薩里奧斯領主要求你拿回3顆鞭笞者種子。','','到龍骨荒野的龍眠神殿找伊薩里奧斯領主。','','','','',0), +(12459,'zhTW','水能載舟亦能覆舟','既然只有三顆種子,我們必須將它們用在最佳的可能用途上。$B$B你的目標就是盤旋在葛拉克朗安息地空中的再活化冰霜巨龍,腐屍農地東邊兵營廢墟中的『邪惡』特基德、以及在遙遠東北方的辛薩卡拉中的監督者死凝。$B$B如果這些種子能徹底毀滅低等的天譴軍,那麼同樣能將大幅的削弱他們三個。事實上,這樣就足夠你自己料理他們了。','龍眠神殿頂端的伊薩里奧斯領主要求你摧毀弱化的再活化冰霜巨龍、弱化的『邪惡』特基德、以及弱化的監督者死凝。','','到龍骨荒野的龍眠神殿找伊薩里奧斯領主。','','','','',0), +(12469,'zhTW','返還派遣者','仔細檢查之後,你發現這個哥布林似乎是被派出來運送一個裝滿炸藥的包包通過荒野。附近半埋在雪中的鷹身人羽毛說明了他是怎麼遇害的。$B$B看起來,哥布林似乎是要將炸藥從東邊某處送往憤怒之門。看來沿著山脊向東走回去通知派遣者是最謹慎的作法。','沿著山脊往東走,把炸藥包送回去給鏽鼻崗哨的辛克,在龍骨荒野的北方。','','到龍骨荒野的冷風陵地找辛克。','','','','',0), +(12470,'zhTW','恆龍的秘密','東北方青銅龍殿中的時空風暴阻止了不朽生物的進入。$B$B恆龍軍團與龍殿中的守護者進行著控制權爭奪,我們一定要趁機獲取情報。$B$B你只是個凡人,你可以進入龍殿中使用永恆沙漏。保護沙漏,直到恆龍軍團的領導人現身。$B$B提醒你,恆龍軍團會盡可能阻止你的!','龍眠神殿頂端的克羅米拜託你前往青銅龍殿。一旦進入殿中,將永恆沙漏放置地上。$B$B持續保護沙漏,並將你所收集到的情報回覆給她。','保護永恆沙漏','到龍骨荒野的龍眠神殿找克羅米。','','','','',0), +(12488,'zhTW','高階執行官需要你','幸好我攔截到高階執行官羅思原本要交給霸主阿格瑪的請求。羅思到底在想什麼?$B$B<士官撕碎了手上的信。>$B$B$C,去看看高階執行官需要什麼。$B$B沿著路往東,然後穿過龍墳荒原。你會找到一條小路引領你穿過荒原往東南方去,接著你就會在山脈的南方看到被遺忘者城鎮,毒怨之地。','到龍骨荒野的毒怨之地找高階執行官羅思交談。','','','','','','',0), +(12542,'zhTW','十字軍的呼喚','$C!銀白十字軍正在招募有能力的士兵,願意放下歧見加入對抗巫妖王的部隊。你願意參加嗎?$B$B如果你有興趣的話,大膽地前往北方的聖光之託,和十字軍瓦魯思談談。$B$B聖光之託就在沉沒的食人妖都市辛薩卡拉之中,辛薩卡拉就在靠近祖爾德拉克的邊境。$B$B再會。','向十字軍瓦魯思回報,他在龍骨荒野的聖光之託。','','','','','','',0), +(12545,'zhTW','辛薩卡拉的淨化','我們從一群入侵的天譴軍手中奪下了這個上古德拉克瑞的神廟。離此不到一百步之處,就是辛薩卡拉的城市遺跡。天譴軍團的死靈法師四處亂跑,把倖存的德拉克瑞食人妖轉變成巫妖王的僕從。$B$B現在所有的一切都失去了聖光。一切都必須被淨化。$B$B<瓦魯思堅定的看著你。>$B$B一切。','聖光之託的十字軍瓦魯思要你殺死15個辛薩卡拉天譴軍。','','到龍骨荒野的聖光之託找十字軍瓦魯思。','殺死辛薩卡拉天譴軍','','','',0), +(12769,'zhTW','龍眠神殿管理者','你已經證明你值得信賴,甚至比信賴更進一步。$B$B你應該回到龍眠神殿並且和管理者,泰瑞歐斯塔茲再談一談,$n。','和龍眠神殿的泰瑞歐斯塔茲交談。','','','','','','',0), +(13375,'zhTW','聚源虹膜英雄之鑰','一股強烈的魔力不斷以聲音與能量的形式,自這塊從薩菲隆爪上落下的眼狀珠寶中發散出來。對於凡人而言光是待在這塊石頭附近就感到幾近刺耳。$B$B很明顯地這樣強大的物品必須帶給巨龍之后,『生命守縛者』雅立史卓莎。前往龍眠神殿諮詢她的建議,就在龍骨荒野區域。','轉交聚源虹膜英雄之鑰給『生命守縛者』雅立史卓莎,她就在龍骨荒野的龍眠神殿頂端。','','到龍骨荒野的龍墳荒原找『生命守縛者』雅立史卓莎。','','','','',0), +(12372,'zhTW','死守龍眠神殿','藍龍軍團竟敢靠著過量流入蒼藍龍殿的法力壯膽,進而攻打龍眠神殿!$B$B我請求你騎上我們的防衛者加入戰局,並且殺死他們的巨龍與飛龍大軍,同時攻擊龍殿中湧出的地脈法力能量,破壞它的穩定。$B$B出門東西兩邊的區域有許多龍眠防衛者,和其中一頭衛士交談,騎上牠加入戰局。$B$B沒有你的幫助,$n,我們必敗無疑。','龍眠神殿的戴伏斯塔茲要求你騎乘龍眠防衛者,殺死3隻蒼藍巨龍、5隻蒼藍飛龍,並且擾亂蒼藍龍殿。','','到龍骨荒野的龍眠神殿找艾弗薩斯塔茲領主。','擾亂蒼藍龍殿','','破壞碧藍巨龍聖地','',0), +(12435,'zhTW','向戴伏斯塔茲領主回報','我痛恨生命的逝去…任何生命的逝去。面對瑪里苟斯屠殺我們、褻瀆神殿,我絕不會坐視不管!$B$B我指派了戴伏斯塔茲領主為龍眠神殿防軍的指揮官。$B$B與托菈史卓莎交談,搭乘飛龍飛向戴伏斯塔茲。$B$B請對他伸出援手,$n,有你加入防衛龍眠神殿的行列,將會是成功對抗藍龍軍團的關鍵因素。','和龍眠神殿的戴伏斯塔茲領主交談。','','','','','','',0), +(12438,'zhTW','懸賞:克羅格‧毀誓者','公告者:伊魯希雅‧盧恩$B$B克羅格‧毀誓者,天譴軍的血肉巨人,必須為我的丈夫、小孩、與我的摯友語幕一家的死負責。具有足夠勇氣獵取這份獎金的人可以在東南方腐屍農地邊緣的懸崖找到克羅格。$B$B我要正義!殺死克羅格‧毀誓者!$B$B假使有人殺掉了克羅格‧毀誓者,我已經預先將金錢與物品交給了大領主李奧瑞克‧馮‧澤爾迪格,請他代發。$B$B請為我們復仇!','殺死克羅格‧毀誓者,然後向大領主李奧瑞克‧馮‧澤爾迪格領取賞金,他就在龍骨荒野的溫特加德要塞。','','到龍骨荒野的溫特加德要塞找大領主李奧瑞克·馮·澤爾迪格。','','','','',0), +(12441,'zhTW','懸賞:高階薩滿血掌','公佈者:德羅菲$B$B就在異法陵地之上,我的表親史克羅堤和布羅特,遭到一幫邪惡的血掌獾狼怪襲擊。我們雖然企圖脫逃,但史克羅堤和布羅特恐怕已遭不測。$B$B我要懲罰這些傢伙!是否有勇者願意冒險前往東南方,也就是龍骨荒野的邊境,異法陵地上格殺高階薩滿血掌以及他的親信?$B$B本人將提供豐渥的賞銀交付給大領主李奧瑞克‧馮‧澤爾迪格,由他發放給任何完成此任務者!','殺掉高階薩滿血掌,並回報給大領主李奧瑞克‧馮‧澤爾迪格以獲取你的獎賞;他就在龍骨荒野上的溫特加德要塞裡。','','到龍骨荒野的溫特加德要塞找大領主李奧瑞克·馮·澤爾迪格。','','','','',0), +(12442,'zhTW','懸賞:突襲軍指揮官艾尤圖斯','公告者:大領主李奧瑞克‧馮‧澤爾迪格$B$B第七軍團的部隊在溫特加德東北方的小徑上遭到突襲軍指揮官艾尤圖斯與一群沒大腦的血色突襲軍狂徒襲擊。面對此等冷血狡詐的行為必須以以暴制暴!$B$B溫特加德要求正義!到東北方的突襲營地找出突襲軍指揮官艾尤圖斯,終結他可悲的生命。$B$B我會獎賞任何接受這任務的勇者!','殺掉突襲軍指揮官艾尤圖斯,並回報給大領主李奧瑞克‧馮‧澤爾迪格以獲取你的獎賞;他就在龍骨荒野上的溫特加德要塞裡。','','到龍骨荒野的溫特加德要塞找大領主李奧瑞克·馮·澤爾迪格。','','','','',0), +(12448,'zhTW','戰火升溫','龍殿被天譴軍破壞殆盡,而龍殿的守護者,妲莉雅‧日觸,下落不明。在神殿中殞命的紅龍,如今成了扭曲的骸骨餘燼龍,將我們團團圍住,情勢危急,$r。$B$B德拉森隊長帶領了一群汝等族類的小隊,在龍殿截斷天譴軍的攻勢。$B$B幫助他...但請待在他的小隊後方。天譴軍的攻勢源源不絕,我可不希望在那些滿是創痕的山谷中失去你。','幫助德拉森隊長守護山谷,擊敗12隻嚴寒食屍鬼攻擊者、8隻嚴寒魂屍攻擊者,以及1隻嚴寒憎惡體攻擊者。事成以後,向凡加斯塔茲回報。','','到龍骨荒野找凡加斯塔茲。','','','','',0), +(12449,'zhTW','回歸大地','我還有另外一項需要注意的任務。我的兄弟們在戰鬥中殞歿,如果我們不快點行動,他們將會助長餘燼龍的數量。$B$B從南方的通道進入龍殿...這處的天譴軍應該比較薄弱。$B$B尋找從樹上掉落的晶紅橡實,並且將之種在我殞落的兄弟身旁。藉此,他們能夠帶來新生...這是吾族皆為之驕傲的命運。','從南方的通道進入晶紅龍殿,尋找晶紅橡實。對戰死的紅龍使用晶紅橡實,使他們的軀體回歸大地。任務完成以後,向凡加斯塔茲回報。','','到龍骨荒野找凡加斯塔茲。','晶紅管理者回歸大地','','','',0), +(12460,'zhTW','到晶紅龍殿報到','我們在晶紅龍殿需要你。$B$B龍群已經被藍龍和天譴軍團四面包圍了...他們一點也不比我們好過。情況似乎非常危急,但這也給了我們一個結交珍貴盟友的好機會。$B$B我派出了一個兵團來幫助紅龍對抗晶紅龍殿的天譴軍團,如果你願意作戰的話,請前往龍殿東方的山脊上找賽利斯塔茲,然後盡你所能的提供協助。','向晶紅龍殿東邊山脊上的賽利斯塔茲報到,就在龍眠神殿的西方。','','','','','','',0), +(12461,'zhTW','到晶紅龍殿報到','你即將前往晶紅龍殿。這並不是請求。$B$B龍族被藍龍和天譴軍團四面包圍...他們的狀況並不比我們好過。這種替先祖贖罪的機會並不常有。$B$B我派了一個軍團去晶紅龍殿幫助紅龍軍團對抗天譴軍團。加入他們,用你的靴子踩碎天譴軍團吧!$B$B為了部落!','向晶紅龍殿外邊山脊的凡加斯塔茲報到,就在阿格瑪之錘的東方。','','','','','','',0), +(13242,'zhTW','黑暗的騷動','黑暗的力量在騷動,$N。一場只有時空之王才可能預見的悲劇發生了。很快,悲傷與仇恨將籠罩著你的同胞。戰爭迫在眉睫。$B$B紅龍軍團已經盡了最大的努力,接下來就要靠艾澤拉斯的凡人種族了。$B$B很遺憾,你的旅程將由這場悲劇開頭。就在今天,一位父親永遠地失去了他心愛的孩子。你必須將這個悲傷的消息告訴他。找回小薩魯法爾的戰甲,將它交給薩魯法爾吧。','在戰場上收集薩魯法爾的戰甲,然後轉至北風苔原的戰歌要塞,將它交給薩魯法爾大王。','','到北風凍原的戰歌堡找薩魯法爾霸王。','','','','',0), +(12495,'zhTW','晉見龍后','我們對安格拉薩的突襲已經使天譴軍團後退了,但他們仍然屹立不搖。他們從頭頂送來冰霜巨龍,砲轟整個戰場,使得要向大門推進變成了不可能的任務。我們必須阻止冰霜巨龍,但是在我們破壞那些遠古龍族的骨骸之前,我們得要得到龍后的允許。$B$B前往東南方的龍眠神殿,尋找龍后雅立史卓莎。告訴她我們非做不可的工作,並且尋求她的指引。$B$B去吧,$n!','在龍骨荒野的龍眠神殿中找到『生命守縛者』雅立史卓莎。','','','','','','',0), +(12496,'zhTW','晉見龍后','雖然我知道你渴望摧毀所有在憤怒之門前阻擋我們的天譴軍,我們首先還是得對付盤據在上空的威脅。除非我們能夠阻止冰霜巨龍的空中轟炸,否則就沒有辦法繼續再往前推進。$B$B但在我們突擊龍族安息之地以前,我們必須先求得允許。現在冒險前往龍族的神聖大殿:龍眠神殿。到了那裡之後,就設法求見龍后雅立史卓莎。$B$B啟程吧,$n!東南方,前往龍眠神殿!','在龍骨荒野的龍眠神殿找『生命守縛者』雅立史卓莎。','','','','','','',0), +(12497,'zhTW','葛拉克朗與天譴軍團','立於敗德螺旋之頂,天譴軍團的大死靈領主安提歐克,端坐在復活的風暴巨人領主賽厄西的肩上。他由此控制著不死軍團日以繼夜地挖掘葛拉克朗巨大的骨骸。假如他們成功復活了葛拉克朗,那麼你所做的一切努力就全白費了。$B$B我雖然無法召來紅龍軍團的全部力量以幫助你的旅程,但我仍會賜給你我的祝福。立刻去和我的總管托菈史卓莎談談。','和托菈史卓莎交談,他就在龍骨荒野的龍眠神殿。','','','','','','',0), +(12498,'zhTW','乘著晶紅之翼','使用這個信號燈召來一位龍眠鎮壓者。爬上牠的背,然後向北飛往葛拉克朗安息地。到了那裡之後,指揮巨龍摧毀那些挖掘葛拉克朗的天譴軍。一旦你肅清了那個區域,飛往葛拉克朗安息地上方的敗德螺旋,消滅大死靈領主安提歐克,並且回收他用來控制巨龍的那柄鐮刀。$B$B完成這件事,並向龍后雅立史卓莎回報,她會給你英雄應得的獎賞!$B$B$n,小心那些四處遊蕩的腐爛風暴巨人!','消滅30個荒原拾荒者,並收回安提歐克的鐮刀。一旦你完成這項任務,就返回龍眠神殿向『生命守縛者』雅立史卓莎回報。','','到龍骨荒野的龍眠神殿找『生命守縛者』雅立史卓莎。','','','','',0), +(12499,'zhTW','回到安格拉薩','隨著安提歐克的死以及我們手中的鐮刀,冰霜巨龍突擊你們駐守在安格拉薩軍隊的計畫將終止。存留在龍骨荒野的巨龍將會被獵殺並摧毀,他們的骨頭將回歸大地。$B$B現在就是你進行最後進攻的時候了,$n。回到弗塔根堡通知大領主弗塔根。','與弗塔根堡的大領主伯瓦爾‧弗塔根談談,並告知他有關你戰勝天譴軍團的事。','','','','','','',0), +(12500,'zhTW','回到安格拉薩','隨著安提歐克的死以及我們手中的鐮刀,冰霜巨龍突擊你們駐守在安格拉薩軍隊的計畫將終止。存留在龍骨荒野的巨龍將會被獵殺並摧毀,他們的骨頭將回歸大地。$B$B現在就是你進行最後進攻的時候了,$n。回到柯爾克隆先鋒駐地通知小薩魯法爾。','與柯爾克隆先鋒駐地的小薩魯法爾談談,並告知他有關你戰勝天譴軍團的事。','','','','','','',0), +(12142,'zhTW','害蟲控管','啊!有隻小畜生狗頭人趁著我們忙著對付上一波龍的攻擊時跑來我們的營地搗蛋。只要咱們一沒注意,他們就會騷擾我們,我已經受夠了!$b$b你會在南邊猛瑪象人營地外圍找到那些狗頭人的藏身之處。去屠殺他們。如果猛瑪象人替他們的奴隸出頭,就把他們也給殺掉。','第七軍團前線的杜安要求你,到龍眠神殿周圍的猛瑪象人營地殺死10隻雪原極地狗頭人和3隻龍骨荒野猛瑪象人。','','到龍骨荒野的第七軍團前線找杜安。','雪原北地狗頭人','龍骨荒野猛瑪象人','','',0), +(12143,'zhTW','峽谷追擊戰','我真不敢相信!又一團該死的害蟲企圖從我們這裡偷走更多補給品。他們正沿著北邊的峽谷逃逸,追上他們,不管他們是要去找誰,都給我把他解決掉!','第七軍團前線的杜安要求你,沿著第七軍團前線東北方的峽谷追擊極地狗頭人,並且處理掉他們的領導者。','','到龍骨荒野的第七軍團前線找杜安。','','','','',0), +(12144,'zhTW','害蟲控管','喂,老兄!在上一波龍的攻擊中,其中一隻小畜生狗頭人跑來我們的營地搗蛋。只要咱們一沒注意他們就跑來煩,我已經受夠了。$b$b你在東邊的猛瑪象人營地外圍可以找到那些狗頭人的藏身之處。去把他們宰掉。如果猛瑪象人替他們的奴才出頭,就把他們也給宰了。','龍殞營地的剛朵卡尼斯要求你,到龍眠神殿週遭的猛瑪象人營地殺死10隻雪原極地狗頭人和3隻龍骨荒野猛瑪象人。','','到龍骨荒野的龍殞營地找剛朵卡尼斯。','雪原北地狗頭人','龍骨荒野猛瑪象人','','',0), +(12145,'zhTW','峽谷追擊戰','我真不敢相信!另一群該死的害蟲剛剛又想要拿走我們的補給品。他們現在正沿著峽谷逃逸,追上他們,不管他們是要去找誰,都把他給我殺掉!','剛朵卡尼斯要求你沿著龍殞營地南方的峽谷追擊極地狗頭人,並且殺掉他們的領袖。','','到龍骨荒野的龍殞營地找剛朵卡尼斯。','','','','',0), +(12146,'zhTW','擾人的暗示','號角的底部誇張的紋飾著一柄錘子和一道閃電。這號角上的某些部分看起來極端與猛瑪象人不匹配。$b$b帶著號角往南穿過泰坦之途到龍眠神殿,找出對這個隱含威脅的物品有興趣之人。','帶著紋飾戰鬥號角前往龍眠神殿,找出能評估這個潛在威脅的人。','','到龍骨荒野的龍墳荒原找歐拉史卓莎。','','','','',0), +(12147,'zhTW','擾人的暗示','號角的底部誇張的紋飾著一柄錘子和一道閃電。這號角上的某些部分看起來極端與猛瑪象人不匹配。$b$b帶著號角往東穿過泰坦之途到龍眠神殿,找出對這個隱含威脅的物品有興趣之人。','帶著紋飾戰鬥號角前往龍眠神殿,找出願意評估這個潛在威脅的人。','','到龍骨荒野的龍墳荒原找歐拉史卓莎。','','','','',0), +(12148,'zhTW','獨一無二','在猛瑪象人之中看到這樣的徽印可真奇怪...這代表有著一定的組織,真不尋常。$B$B猛瑪象人很少撇開他們天生的攻擊性彼此合作。我推測他們可能打算要掠劫一個大型營地。$b$b我很懷疑這號角就只有這麼一支,我希望你證明我是錯的。你會在蒼藍龍殿西北方的峽谷找到骨裂。去挑戰他,然後把我想知道的線索通通帶回來給我。','在蒼藍龍殿西北方的峽谷中,或峽谷附近找出骨裂,並且殺了牠。把你找到的任何證據帶回來給龍眠神殿的歐拉史卓莎。','','到龍骨荒野的龍眠神殿找歐拉史卓莎。','','','','',0), +(12149,'zhTW','強悍的猛瑪象人','猛瑪象人是種討人厭的殘暴生物...這就是為什麼我們很少看到他們集結成龐大的數量還不會彼此互相殘殺。他們之中出現了一個強大的領導者,如果我們要終止猛瑪象人的威脅就得把他解決掉。$B$B我正要開始調查。在這段時間我要你盡可能的去擾亂他們。$B$B此地東方豎立了三根火炬。在火炬附近,有三隻猛瑪象人的統治者 - 殺掉他們,爭取一些時間讓我們找出他們的領袖。','獵殺在龍眠神殿東方的血饗,冰碎,和龍牴。$B$B血饗位於龍墳荒原的東南角,就在翡翠龍殿的北邊。冰碎在黎明之鏡的北緣巡邏。龍牴在青銅龍殿西方的懸崖底下遊蕩。$B$B殺死這些猛瑪象人之後向龍眠神殿的歐拉史卓莎報告。','','到龍骨荒野的龍眠神殿找歐拉史卓莎。','','','','',0), +(12312,'zhTW','天譴軍團的秘密','這本鑲了血肉的書頁上布滿了陌生的符號和圖案,似乎是用刀子刻上去的。你完全看不懂上面所寫的內容,但你很確定不管寫了什麼,這本書一定很重要。$B$B將書拿給溫特加德墓穴外頭的騎兵德肯。','將鑲肉骨書拿給騎兵德肯,他就在龍骨荒野的溫特加德要塞中。','','到龍骨荒野的溫特加德要塞找騎兵德肯。','','','','',0), +(12319,'zhTW','書中的秘密','這會是什麼,$n?那巫妖施展在你身上的想必不是一般的詛咒!$B$B<德肯翻過書上可怕的書頁。>$B$B我甚至搞不清楚我是不是把書拿反了。我們得找出這書裡隱藏的情報!$B$B<德肯把書交還給你。>$B$B高階指揮官應該會知道要怎麼做。帶著這鑲肉骨書去找他然後告訴他這裡發生的事情。','把鑲肉骨書帶去給高階指揮官海弗德‧龍禍,他就在龍骨荒野的溫特加德要塞中。','','到龍骨荒野的溫特加德要塞找高階指揮官海弗德‧龍禍。','','','','',0), +(12320,'zhTW','了解死者的語言','帶著書,然後沿著往軍營的路前進。進了軍營之後下樓梯進入地牢。你會在監獄中找到審判官哈拉德和我們的鎮長,高佛雷。我相信高佛雷也許就是拼圖的最後一塊,而哈拉德能夠幫我們拼湊出真相。$B$B去吧!','把鑲肉骨書帶給溫特加德要塞地牢的審判官哈拉德。','','到龍骨荒野的溫特加德要塞地牢找審判官哈拉德。','','','','',0), +(12321,'zhTW','諄諄善誘','高佛雷‧古達,曾經是正直的溫特加德鎮長,如今成為了天譴軍的密探。他慢慢的、一點一點的從人類變成了不死的食屍鬼。如今,他只聽從巫妖王的命令,並且只為了侍奉他的主人而活。$B$B但是和所有的天譴軍一樣,高佛雷通曉死者的語言,並且只要適當的刺激他,他會告訴我們關於這本書所需要的資訊。$B$B一旦你聽見你想聽的,回報給前線的高階指揮官。有需要的話,我會把這裡清乾淨的。','等待審判官哈拉德的大義凜然的宣教結束,將你揭露的消息回報給高階指揮官海弗德‧龍禍,他就在溫特加德要塞中。','正義的審訊','到龍骨荒野的溫特加德要塞找高階指揮官海弗德‧龍禍。','','','','',0), +(12069,'zhTW','向坦卡大酋長回報','<班索克把牢房鑰匙交給你。>$B$B你得快一點,$n。拿這把鑰匙從阿努巴牢房裡把我父親從阿努巴監獄救出來。他自由之後,請協助他殺死阿努巴領導者,幽暗蟲王阿努貝坎。當幽暗蟲王被擊敗以後,把牠的殼敲下一塊來當作戰利品,呈給阿格瑪之錘的部落大軍。讓阿格瑪瞧瞧坦卡大酋長的力量!','用阿努巴監獄鑰匙釋放坦卡大酋長冰霧,並且幫助他擊敗幽暗蟲王阿努貝坎。$B$B拾起一塊阿努貝坎之殼的碎片,交給阿格瑪霸主。他就在龍骨荒野上的阿格瑪之錘裡。','','到龍骨荒野的阿格瑪之錘找霸主阿格瑪。','','','','',0), +(12325,'zhTW','大敵當前','你為我們對抗天譴軍的進展付出良多,$n。事實上,和你共事過的將士,他們的士氣無不大振!好夥伴,你的影響力凌駕整個溫特加德軍民之中。$B$B也因為你,如今我們將轉守為攻!將這個消息回報給奧古斯特‧敵錘公爵,他就在東方,橫越托爾森崗哨的腐屍農地。獅鷲站的獅鷲獸指揮官烏里克已經為你準備了一頭專屬的獅鷲獸,他會帶你深入敵境,快去吧!','和獅鷲獸指揮官烏里克交談,飛往托爾森崗哨。在抵達龍骨荒野的托爾森崗哨之後,向奧古斯特‧敵錘公爵回報。','','','','','','',0), +(12326,'zhTW','蒸氣坦克突襲','這是個偵搜摧毀任務。你要負責駕駛一輛坦克到腐屍農地上消滅天譴軍團的瘟疫戰車。車上配有3個第七軍團士兵。如果想要讓任務成功,一個人都不能少!$B$B你必須要靠近一輛瘟疫戰車來放下工程師。讓他們做好工作,然後再向下一台移動。當農場上的瘟疫戰車都清除了之後,朝要塞廢墟前方的墓塚移動,然後把剩下的組員放下車。和安柏‧凱許在裡頭碰面。','駕駛聯盟蒸汽坦克去摧毀6架瘟疫戰車,然後把第七軍團精英送到溫特加德墓塚。成功了之後,就與安柏‧凱許交談,他就在龍骨荒野的溫特加德墓塚。','','到龍骨荒野的溫特加德墓塚找安柏·凱許交談。','破壞瘟疫戰車','安全運送第七軍團精英','','',0), +(12102,'zhTW','尋找晶紅紫丁香','晶紅龍殿就在此地東方是很幸運的一件事。你可以在那兒找到被稱做晶紅紫丁香的花。只要有這種促進生命的植物我就可以替這個區域未受污染的動物調出一劑疫苗。$B$B前往東方的晶紅龍殿尋找紫丁香。$B$B記住:這座龍殿,就像這被詛咒的荒原中所有的龍殿一樣,都被天譴軍團給包圍了。小心一點,我們可不希望你被餘燼龍給吞了。$B$B<辛塔爾大笑。>','龍骨荒野,阿格瑪之錘的辛塔爾‧瑪雷菲爾斯醫生要你收集1個晶紅紫丁香。','','到龍骨荒野的阿格瑪之錘找辛塔爾·瑪雷菲爾斯醫生。','','','','',0), +(12104,'zhTW','向梭爾回報','<瑪雷菲爾斯醫生交給你個裝滿黑色液體的瓶子。>$B$B拿去吧,$r。把這個拿回去給那頭牛,告訴他所有的債都償清了。我們正式「扯平」。$B$B現在,在我放傑寧斯咬你之前快滾吧。','把辛塔爾的疫苗送去給阿格瑪之錘的梭爾‧鷹怒。','','到龍骨荒野的阿格瑪之錘找梭爾·鷹怒。','','','','',0), +(12111,'zhTW','野生物遊蕩之地','這個包裹裡面有幾瓶裝有辛塔爾製造的疫苗。我要你現在去附近的林子裡調查落雪麋鹿和寒地灰熊的蹤跡。等你遇到這些生物之後,找一個安全的距離,朝牠們的方向丟去。瓶子破掉會釋放出一股無嗅的氣體,並使牠們吸入觸媒。這些野獸幾乎不用直接踏進氣體的範圍內,就會被接種疫苗–最後就會得救。$B$B盡量夠替這些野獸們接種疫苗,再向我回報。','阿格瑪之錘的梭爾‧鷹怒需要你對5頭落雪麋鹿和5頭寒地灰熊使用疫苗包裹。','','到龍骨荒野的阿格瑪之錘找梭爾·鷹怒。','為落雪麋鹿接種疫苗','為寒地灰熊接種疫苗','','',0), +(12125,'zhTW','為血魄效力','吾輩過去曾用無辜者之血來餵飽符文刃的飢渴。啊,我已經無法再選擇這種作法。$B$B<寇爾提拉停下來想了一想。>$B$B我們得湊合將就一下。此地南方,在高崖上,有個巨牙海民的村落,因度雷。由於前陣子遭到藍龍軍團的混沌魔法蹂躪,因度雷的居民已經發狂了。$B$B帶著這個血魄寶石,對瘋狂的村民使用它,如果我不能取得無辜者之血,我該當得到羔羊之血!','阿格瑪之錘的寇爾提拉‧亡織者要你對發狂的因度雷村民使用血魄寶石,然後帶著充盈的血魄寶石向他回報。','','到龍骨荒野的阿格瑪之錘找寇爾提拉·亡織者。','','','','',0), +(12126,'zhTW','為穢邪效力','吾輩渴望穢邪之力。它是我們存在的本質,將死亡賜予那些膽敢嘲弄它的人!幸好有著這樣的泉源,能在我需要之時,供我汲取力量。$B$B帶著這穢邪寶石前往東方的晶紅龍殿。你會在那裡找到阿薩斯的死亡騎士,瓦倫赫公爵。在戰鬥中削弱他的決心,然後對他釋放寶石的力量。這會將他殺死,並竊走他的穢邪能量!','阿格瑪之錘的寇爾提拉‧亡織者要你對瓦倫赫公爵使用穢邪寶石,然後將充盈的穢邪寶石交還給他。','','到龍骨荒野的阿格瑪之錘找寇爾提拉·亡織者。','','','','',0), +(12127,'zhTW','為冰霜效力','這刺骨的凍寒會在死亡騎士迎戰敵人的時候保護他們。掌控冰霜之力的人將可帶來混亂與毀滅!$B$B帶著這個冰霜寶石,然後穿越龍骨荒野的開闊凍原,直到你抵達龍眠神殿東方的黎明之鏡。在彼處,你要與盤據湖泊的冰冷亡魄軍團作戰,並且奪取它們的冰霜精華。在它們虛弱的時刻使用寶石的力量,$n!','阿格瑪之錘的寇爾提拉‧亡織者要你對冰冷亡魄使用冰霜寶石,然後帶著充盈的冰霜寶石回去給他。','','到龍骨荒野的阿格瑪之錘找寇爾提拉·亡織者。','','','','',0), +(12132,'zhTW','毀滅之力','雖然你為我做了很多,但還有一件任務要麻煩你。$B$B你曉得這個世界之外還有另外一個世界,暗影世界。從那個世界,痛苦侵襲著我。在自身的惡魔之前,我毫無招架之力,而你可以終結他們的恐怖統治。你有力量,我曾經用我的雙眼見識過。$B$B進入暗影世界,勇敢面對折磨我的惡魔!$B$B只要做得到,我保證,我就會翻譯這本骨書。','龍骨荒野上,阿格瑪之錘的寇爾提拉‧亡織者需要你進入暗影世界,擊敗6隻幽暗折磨者。$B$B如果你需要再次進入暗影世界,和寇爾提拉‧亡織者交談。','','到龍骨荒野的阿格瑪之錘找寇爾提拉·亡織者。','','','','',0), +(12136,'zhTW','譯妥的骨書','$n,就是它了。我已經把書上每一頁印在上頭的內容翻譯妥當。在其中,你可以發現一列名單,全部都是橫跨整座大陸的詛咒神教成員。$B$B但是退一步說,詛咒神教的間諜網絡與運作令人訝異。$B$B再會,朋友,願這本書能為你和你的人民有所幫助。','將翻譯過的鑲肉骨書帶給阿格瑪之錘的苟爾特隊長。','','到龍骨荒野的阿格瑪之錘找苟爾特隊長。','','','','',0), +(12140,'zhTW','全體向隆諾克致敬!','就像牛頭人、被遺忘者、食人妖、還有血精靈一樣,坦卡族也需要出身己族的領導人。你救出來的那個人,隆諾克,將會成為他們的領導者。$B$B<霸主阿格瑪交給你一張羊皮紙。>$B$B我給你一份熟悉的東西 - 部落的血誓。$B$B將這份血誓交給隆諾克‧冰霧,讓他以坦卡族的領袖身分加入部落。$B$B不要讓他等太久$B$B<阿格瑪點頭。>','在阿格瑪之錘找到隆諾克‧冰霧,並讓他以坦卡牛頭人領袖的身分加入部落。$B$B當你完成任務之後,帶著部落的血誓回去找霸主阿格瑪。','','到龍骨荒野的阿格瑪之錘找霸主阿格瑪。','隆諾克·冰霧加入部落','','','',0), +(12455,'zhTW','隨風而逝','軍火空投失控了,朋友。鎮西要塞運來的彈藥被空中盤旋的冰霜巨龍給攔截了,飛行機具數秒內被撕成碎片,而貨物則隨風四散。大部分的貨物仍然在機艙上–只是遍佈腐屍農地裡。$B$B我要你回去那裡,將四散在那該死農地裡的軍品木箱子拿回來。$B$B快去!我們不可能在沒有槍枝和彈藥的情況下展開攻擊,$g老兄:大姐;!','龍骨荒野,溫特加德墓塚中的安柏‧凱許需要你拿回8件溫特加德軍火。','','到龍骨荒野的溫特加德墓塚找安柏·凱許。','','','','',0), +(12457,'zhTW','鏈砲與你','我們朝著東西兩向架起了鏈砲和路障,我方受傷的士兵們藏身在兩處房間內–盡所能的不去驚動無腦的食屍鬼。$B$B既然我們有了彈藥,我要你操縱其中一台鏈砲,並使用它為我們的士兵炸出一條路!只要你就位,從藏身處呼叫一名士兵,然後猛烈開火擊退靠近他的天譴軍!$B$B快出發吧!','龍骨荒野,溫特加德墓塚中的安柏‧凱許要你援救8名受傷的第七軍團士兵。','','到龍骨荒野的溫特加德墓塚找安柏·凱許。','拯救受傷的第七軍團士兵','','','',0), +(12462,'zhTW','搞定這件事','通往地獄的大門就在台階下面:視線可及之處充滿了天譴軍,而且每分每秒都在增加。我們所能收集到的微薄情報指出兩個天譴軍的死靈領主正在瘋狂的清空下面的兩個墓穴。在我們侵入賽爾贊的內室之前,我們得處理掉這兩個小丑,和他們從納克薩瑪斯帶來的好朋友。$B$B進入墓塚中,解決死靈領主、納克薩瑪斯恐怖衛士和納克薩瑪斯之影。','龍骨荒野,溫特加德墓塚的『災禍』約德‧冰鬚要你殺死死靈領主薩維斯,死靈領主赫魯斯,和15個納克薩瑪斯天譴部隊。','','到龍骨荒野的溫特加德墓塚找『災禍』約德·冰鬚。','殺死納克薩瑪斯天譴部隊','','殺死納克薩瑪斯天災士兵','',0), +(12463,'zhTW','一定要找到掠鬚!','謠傳有一條天譴軍挖掘的地道,連接著陵墓防腐室與墓穴,現在被賽爾贊和他的走狗發掘出來了。我最近派了我最好的盜賊掠鬚去查探真相,但卻還沒有從他那裡聽到任何消息。如果我是賭徒的話,我一定會下注賭他沒救了。$B$B我要你走下那些階梯,直接前往防腐室尋找掠鬚。不管他是死是活,他一定得到了答案。','龍骨荒野,溫特加德墓塚的安柏‧凱許要你找到掠鬚。','','','','','','',0), +(12464,'zhTW','我的宿敵','我的宿敵,大將軍阿比迪斯,也來到了北裂境。$B$B不知她怎麼辦到的,撐過了對提爾之手的攻擊,帶了一支小部隊來到北方。他們在南邊建立了新壁爐谷。$B$B雖然他們在對抗天譴軍團方面可能會很有用,但阿比迪斯本人卻是個太過精明的對手,不能放著她不管。相信我,如果我們放過他們,她會在塵埃落定之前拿劍抵著我們的喉嚨。$B$B因此,我們要除掉他們的領袖,再做我們自己的工作。提著她的頭來見我。','把大將軍的頭顱帶去給溫特加德要塞的指揮官艾利格‧黎明使者。','','到龍骨荒野的溫特加德要塞找指揮官艾利格·黎明使者。','','','','',0), +(12465,'zhTW','掠鬚的日誌','不管掠鬚的日記剩下的頁面寫了些什麼,都得把它找回來。到地道另一端的房間裡找出襲擊掠鬚的人。一定是他們把掠鬚的日誌撕碎了!$B$B當你找到遺失的頁份之後,回去找溫特加德墓塚入口處的安柏‧凱許。','回收掠鬚日誌的第四頁、掠鬚日誌的第五頁、掠鬚日誌的第六頁、以及掠鬚日誌的第七頁;然後向安柏‧凱許回報,他就在龍骨荒野的溫特加德墓塚。','','到龍骨荒野的溫特加德要塞墓塚找安柏‧凱許','','','','',0), +(12466,'zhTW','追擊冰颶:第七軍團前線','你得前往龍骨荒野北部的第七軍團前線。返回溫特加德要塞,然後從北門出去。一直往北方走,直到你碰上道路為止;接著左轉沿著路走,直到你抵達雪地線;然後持續往西方前進,直到你走上泰坦之途。沿著那條路往北走,就可以走到第七軍團前線。$B$B一旦到了那裡,就與軍團指揮官泰拉里恩交談。他會等候你的到來。$B$B還有,$n-這些時間過得很愉快。再會了。','向龍骨荒野中央,第七軍團前線的軍團指揮官泰拉里恩報到。','','','','','','',0), +(12467,'zhTW','追擊冰颶:賽爾贊的骨匣','你的冰霜巨龍就在那裡。$B$B<泰拉里恩指向西方。>$B$B她可真是個大傢伙!$B$B如果你做好了戰鬥準備,就和『巨龍引誘者』說。他會『接她過來』。一旦冰颶夠靠近了,我們會把她鍊在地上然後解決她!希望有了你的協助,我們可以幹掉她,並且替你取得那個骨匣。$B$B一旦你拿到了骨匣,返回溫特加德要塞向高階指揮官海弗德‧龍禍報告。他正在籌劃與賽爾贊的最後決戰。','從冰颶身上取得賽爾贊的骨匣,然後將它交給溫特加德要塞的高階指揮官海弗德‧龍禍。','','到龍骨荒野的溫特加德要塞找高階指揮官海弗德·龍禍。','','','','',0), +(11959,'zhTW','殺掉洛根','情勢每況愈下,而我們只能採取唯一的手段...很遺憾,洛根非死不可!$B$B他是落雪林地部族中的首領,也是一頭兇猛的獾狼怪。但也唯有如此,才能在他們不斷的進攻與掠奪糧食中獲得短暫的喘息。$B$B你可以在「血肉撕裂者」的小屋前找到他,就在林地北方的高崗上。他比他的族人大得多,你不會錯過他的。殺掉他,將他的血塗滿你全身,如此才能展現你的支配權並令他們尊敬。','將洛根之血塗抹在你身上之後,向默亞基港的長者科納尼回報。','','到龍骨荒野的默亞基港找長者科納尼。','塗抹上洛根之血','','','',0), +(12472,'zhTW','結局','歸功於你的英勇行徑,弗塔根領主下令全面進攻賽爾贊。第七軍團攻入了地穴中的召喚大廳,發現了一個看起來像是通往地獄的大門。萬事具備就只差你了。$B$B帶著骨匣,向溫特加德墓塚內的軍團指揮官約立克回報。$B$B天譴軍在要塞外頭挖了一條地道,你可以利用它迅速地找到約立克。快去吧,$n!帶領我們迎向勝利!','將賽爾贊的骨匣帶給軍團指揮官約立克,他就在龍骨荒野上的溫特加德墓塚中。','','到龍骨荒野的腐屍農地找軍團指揮官約立克。','','','','',0), +(12473,'zhTW','開頭與尾聲','每一則好的故事都有開頭跟尾聲,$n。雖然你的故事離結局還有段距離,但我敢打賭,如果它還沒成為一個傳說的話,我就受天打雷劈!當這一切都結束,不論我們發生了什麼事情,你在溫特加德的所作所為,將會成為家喻戶曉的故事流傳多年。$B$B現在,盟友,當你準備好以後,我會使用骨匣把賽爾贊騙出來。$B$B要是我們成功了,向溫特加德要塞的高階指揮官海弗德‧龍禍回報我們勝利的消息。','擊敗『幽暮使者』賽爾贊並向高階指揮官海弗德‧龍禍回報,他就在龍骨荒野的溫特加德要塞中。','擊敗黃昏使者塞爾贊','到龍骨荒野的溫特加德要塞找高階指揮官海弗德‧龍禍。','','','','',0), +(12474,'zhTW','前往弗塔根堡!','隨著納克薩瑪斯的戰爭機器在它輾過的痕跡中被擊毀,你的時刻來臨了,幫助我們在安格拉薩,憤怒之門的軍隊吧。我們的指揮基地,弗塔根堡,就在龍骨荒野北方,依山而立。弗塔根領主就在那裡等待你的造訪!快去吧,$n!$B$B從鎮北的大門出去,往北北西前進,直到你的目的地為止。$B$B願聖光保佑你!','前往龍骨荒野的弗塔根堡,與大領主伯瓦爾‧弗塔根交談。','','','','','','',0), +(12475,'zhTW','人們藏匿的秘密','當背叛發生在遺民之濱,阿薩斯王子–同行的還有穆拉丁–開始了他追尋霜之哀傷的任務。發現霜之哀傷的洞窟有可能就在附近嗎?這之中還有什麼秘密呢?雖然法球沒有回答這個問題,但是它向我顯現了其他事情。$B$B溫特加德要塞的東北方,是一座血色突襲軍的哨站。哨站中的某處有一張地圖。法球告訴我這張地圖能為我們提供很大的忙。$B$B把它帶來!','『遠識』齊利格要你將突襲軍地圖帶回來給他,他就在龍骨荒野中溫特加德要塞裡面。','','到龍骨荒野的溫特加德要塞找『遠識』齊利格。','','','','',0), +(12476,'zhTW','十字軍回歸?','溫特加德要塞的東北方有一座剛蓋好的營地,由血色十字軍–或者說–他們如今稱呼自己血色突襲軍所建造的。雖然我們還沒辦法確認為什麼他們要來北裂境,他們肯定和以前一樣危險。就在昨晚,血色突襲軍殺害了我們12名的士兵,$n,我們一定要給他們一個教訓。$B$B前去突襲營地削弱他們。','龍骨荒野,溫特加德要塞裡的最高指揮官萊諾爾‧風矛要你去突襲營地殺死20名血色突襲軍員。','','到龍骨荒野的溫特加德要塞找指揮官萊諾爾·風矛。','殺死血色突襲軍','','','',0), +(12477,'zhTW','救贖之途','「救贖之途」,你有聽說過嗎?傳說中那是一本寫有血色突襲軍大將軍阿比迪斯的預言書。你在書中可以找到血色狂熱分子的動機與目標–更別提一大堆的瘋言瘋語。$B$B前去溫特加德要塞東北方的突襲營地,從突襲軍員身上帶回來一份「救贖之途」。','將「救贖之途」交給高階指揮官海弗德‧龍禍,他就在龍骨荒野的溫特加德要塞裡面。','','到龍骨荒野的溫特加德要塞找高階指揮官海弗德·龍禍。','','','','',0), +(12478,'zhTW','霜之哀傷洞窟','他們已經標記出霜之哀傷洞窟的位置,我們不清楚為什麼血色突襲軍會對這裡感興趣,但光看就知道,洞窟附近的區域已經被重兵固守著。不過,我們還是要前進!$B$B帶著這顆占卜寶珠,往北離開小鎮,接著往西北前去血色哨點。一路往洞窟的底層殺去。到底之後,使用寶珠,將你發現的消息帶回來。','溫特加德要塞的『遠識』齊利格要你在霜之哀傷洞窟底部使用齊利格的占卜寶珠,揭開過去的秘密!','','到龍骨荒野的溫特加德要塞找『遠識』齊利格。','揭露往日的秘密','','','',0), +(12224,'zhTW','柯爾克隆先鋒駐地!','你做得很好,$g兄弟:姊妹;。你所面對的,和你所做的就像部落的英雄。阿茲歐-奈幽的天譴阿努巴眾,被你踏平!坦卡族,勇敢又強大的部落新成員,因為你使得他們加入!我們對付天譴軍的超絕武器,也因為你而通過了測試已臻完美!$B$B時候來了,就在今天–我們在憤怒之門的精英戰士需要你。薩魯法爾之子在柯爾克隆先鋒駐地等待你的前往。快走吧,朝東北方,直往憤怒之門!','向年輕的薩魯法爾回報消息,他就在柯爾克隆先鋒駐地。','','','','','','',0), +(12004,'zhTW','阻礙協議','我們需要來個一石二鳥,$c。而你就是那顆石頭。$B$B我們的兩隻鳥就是風之貿易者穆法和戈拉莫什。他們應該就在月眠花園西半邊的某處,最可能的地方就是能夠俯瞰深淵的大型兩層建築中。$B$B我希望能驗證他們的亡故,如果你願意效勞的話。','將風之貿易者穆法的殘骸和戈拉莫什的鱗片帶去繁星之眠給大法師莫德菈的影像。','','到龍骨荒野的繁星之眠找大法師莫德菈的影像。','','','','',0), +(12005,'zhTW','阻礙協議','我們需要來個一石二鳥,$c。而你就是那顆石頭。$B$B我們的兩隻鳥就是風之貿易者穆法和戈拉莫什。他們應該就在月眠花園西半邊的某處,最可能的地方就是能夠俯瞰深淵的大型兩層建築中。$B$B我希望能驗證他們的亡故,如果你願意效勞的話。','將風之貿易者穆法的殘骸和戈拉莫什的鱗片交給大法師埃薩‧奪日者的影像,位在阿格瑪之錘。','','到龍骨荒野的阿格瑪之錘找大法師埃薩·奪日者的影像。','','','','',0), +(12013,'zhTW','終結阿肯尼瑪斯','我還有最後一件事情要你去做,$r的$n。我希望你去摧毀阿肯尼瑪斯!$B$B西邊的巫士使用那個巨大的空中裝置,在我們的安息地鑽出了巨大的深穴。他們的行徑釋放了一隻畸形的怪物!$B$B我不在意這是否與活人有關,但阿肯尼瑪斯以死者的靈體為食。$B$B你必須盡快阻止這一切!','消滅阿肯尼瑪斯,然後回去找月眠花園的伊希尼歐‧月影。','','回去龍骨荒野的月眠花園找伊希尼歐·月影。','','','','',0), +(12017,'zhTW','鉤上的肉','我的朋友,時候到了:讓我們來對付吐烏格瓦!$B$B我把肉準備好了,只要你把我的鉤子當作誘餌丟進水裡,那頭野獸一定會來的。順著釣魚線下去找牠。$B$B做什麼都行,就是別被吐烏格瓦給吞了,$n!','殺掉吐烏格瓦,向默亞基港的突凱亞回報。','','到龍骨荒野的默亞基港找突凱亞。','','','','',0), +(12273,'zhTW','辱罵','是時候徹底打擊突襲軍的士氣了!$B$B我要你拿著權杖並且用在他們的四個領導者身上:軍營樓上的指揮官喬丹,東南方面海斜坡上的砲手指揮吉爾哈特,鐵匠舖的鐵匠古德曼,以及在獸欄的獸欄管理員梅瑟。$B$B用權杖支配他們,集中意志迫使他們辱罵突襲軍,然後把他們全部殺光!','高階執行官羅思指派你對指揮官喬丹、砲手指揮吉爾哈特、鐵匠古德曼,以及獸欄管理員梅瑟使用強制權杖。$B$B使用之後殺了他們,迫使他們在臨終前辱罵血色突襲軍。','','到龍骨荒野的毒怨之地找高階執行官羅思。','指揮官喬丹的辱罵與擊殺','砲手指揮吉爾哈特的辱罵與擊殺','鐵匠古德曼的辱罵與擊殺','獸欄管理員梅瑟的辱罵與擊殺',0), +(12274,'zhTW','失寵','我們需要從高階修士那裡弄來更多情報,現在我們有血鴉牧師的幻象,我想我可以讓你與他近距離談話。$B$B不幸的是,我們必須把他和他的護衛分開,否則你永遠無法從他身上得到任何的情報。$B$B<探員靠在她的鏟子上想了一會兒。>$B$B我想我知道怎麼做了!保持著偽裝,爬上修道院的頂端然後把鐘敲響。那樣應該會讓修士的護衛跑開,然後你就可以下去和他說話了。','新壁爐谷的史考莉探員要你敲響修道院的鐘,然後與高階修士談話獲取情報。','','到龍骨荒野的新壁爐谷找史考莉探員。','敲響修道院的鐘','與高階修士談過話','','',0), +(12285,'zhTW','還以顏色','$c,他們早已虎視眈眈了。我需要你潛入那裡,把血色突襲軍的頭給我砍下來!$B$B這不是件容易的事...阿比迪斯肯定被她大批的手下包圍著。$B$B把她的頭帶回來,我會確保你得到拯救毒怨之地應有的獎賞。$B$B要是失敗的話就不用回來了!','毒怨之地的高階執行官羅思命令你帶著大將軍的頭顱回來。','','到龍骨荒野的毒怨之地找高階執行官羅思。','','','','',0), +(12034,'zhTW','勝利在望...','現在只剩下兩個主要威脅在妨礙我們。一個就是納克薩瑪斯的驚懼城塞,就在東邊的遠方,漂浮於聯盟堡壘溫特加德之上。另一個就是那金之淵,阿茲歐-奈幽的不死軍團的出口。阿努巴奈幽蟲族就是從那金之淵展開突襲,並且徹底夷平了坦卡族的冰霧村。$B$B我們將會毀滅阿努巴並且封閉那金之淵。$B$B向資深士官丘科多克報告你的任務命令。','和阿格瑪之錘的資深士官丘科多克交談。','','','','','','',0), +(12033,'zhTW','從西方來的消息','<托伏斯搖了搖手,遞給你一封信。>$B$B<托伏斯壓低了聲音說。>$B$B耐心點,$n。$B$B很高興在這裡看到你,士兵!地獄吼大人果然派出了他最強的戰士來協助阿格瑪領主!$B$B<托伏斯壓低了聲音說。>$B$B讀完之後就用旁邊的火把信燒掉。','閱讀來自薩爾法魯的信,然後把它給毀了。$B$B等你完成之後再和信差托伏斯交談。','閱讀並摧毀薩魯法爾的信','到龍骨荒野的阿格瑪之錘找信差托伏斯交談。','','','','',0), +(12032,'zhTW','深海晤談','我們一定要諮詢水神歐巧諾亞的意見;只有她曉得卡魯耶克的天命將歸於何處,也唯有深淵珍珠可以將她從混沌的虛空中呼喚她現身。$B$B海岸的西南方海面上是海水之巔,上面有著一座祭壇,而珍珠就在其中。$B$B在祭壇中和海神溝通,歐巧諾亞一定能聽見你的呼喚。順著她的意思去做,免得觸怒她,並讓巨牙海民招致毀滅。$B$B如果你能活著回來,向我的秘法師回報。','透過深淵珍珠溝通,照著海神歐巧諾亞指示的去做。$B$B只要你通過了考驗,就向默亞基港的『秘法師』托阿魯回報。','服從奧卡諾婭的意志。','到龍骨荒野的默亞基港找『秘法師』托阿魯。','','','','',0), +(12290,'zhTW','陰鬱草藥劑','詛咒之靈侵擾著海岸,生前,他們是聯盟英勇而高貴的士兵,但是死後卻受到了詛咒–禁錮在這個世上直到末日來臨。如果要解救他們,則必須瞭解其痛苦的來源!$B$B前去東南邊,異法陵地上,你會發現一種名叫陰鬱草的稀有草藥。唯有陰鬱草我才能調配出藥劑,使你暫時進入那個被遺忘的世界。快去收集陰鬱草吧。','龍骨荒野黎明之境上的歐利克‧真心需要你尋回5株陰鬱草,就生長在異法陵地上。','','到龍骨荒野的黎明之境找歐利克·真心。','','','','',0), +(12291,'zhTW','遺民的故事','陰鬱草藥劑中的毒素會令你失去意識。陰鬱草的效果是如此的強大,連你的靈魂都會被欺騙,允許你暫時進入死者的世界。$B$B一旦你成為了靈體,你要和遺民之濱鬼魅般的居民交談,尋找出造成他們痛苦的原因,並返回我這裡。$B$B記得,$n,這些靈魂曾經是聯盟的士兵,請以尊重、榮耀、與高尚的態度對待他們。$B$B現在,拿著這瓶藥劑在手,向南方遺民之濱前進吧。','龍骨荒野黎明之境的歐利克‧真心需要你聆聽遺民農民、遺民步槍兵、遺民騎士和遺民步卒的故事。','','到龍骨荒野的黎明之境找歐利克·真心。','詢問遺民農民','詢問遺民步槍兵','詢問遺民騎士','詢問遺民步卒',0), +(12036,'zhTW','從阿茲歐-奈幽的深處','攻擊冰霧村的不死奈幽蟲族是從一個名為那金之淵的巨大深坑中出現。如果置之不理,那些怪物一定會在憤怒之門夾擊我們的部隊,而我們勝利的希望也就毀了。$B$B我需要有人監視那邊,$n。你要前往西方去調查那金之淵。我們要找出他們主要的出口並且封死它!幫我找出那個地點。','探索那金之淵然後將你發現向阿格瑪之錘的資深士官丘科多克回報。','探索納爾蘇深淵','到龍骨荒野的阿格瑪之錘找資深士官丘科多克。','','','','',0), +(12039,'zhTW','尤格薩倫的黑血','『憤怒之門』安格拉薩...我看過大門的金屬發出波狀的震動,彷彿它有生命一樣!我活了50年還沒有看過金屬會「呼吸」的。$B$B只有巨牙海民對它有所瞭解。他們稱它為「尤格薩倫的黑血」還要我遠離那個東西。$B$B在西邊的冰霧村外有個深坑,叫做那金之淵。我聽說這個深坑有很多這種奇怪的礦物。如果你會去那附近,你願意幫我帶點樣本回來嗎?','阿格瑪之錘的伯魯斯‧折鐵者要你收集10個尤格薩倫的黑血樣本給他。','','到龍骨荒野的阿格瑪之錘找伯魯斯·折鐵者。','','','','',0), +(12040,'zhTW','在阿薩斯體內的敵人','我們正處在一場內戰之中。我們族類最後的倖存者在世界的深處對抗滅族的威脅。巫妖王不惜一切代價想要支配整個阿茲歐-奈幽王國。不從者都被烙上天譴軍之敵的印記,並且被追殺至死。$B$B在阿薩斯體內有著我們共同的敵人...$B$B加入我們這方,並且消滅此處被玷污的阿努巴!讓阿努巴拉克親自聽聽牠們臨死痛苦的哀嚎!','『排除者』齊力克斯要求你殺死6隻阿努巴地下領主。他就在龍骨荒野的那金之淵。','','到龍骨荒野的那金之淵找『排除者』齊力克斯。','','','','',0), +(12041,'zhTW','失落的帝國','你已經證明了你願意在危急時刻協助阿茲歐帝國,而阿茲歐帝國也將會協助部落。$B$B帶著這個卷軸回去找你的領袖。裡面記錄著攻擊冰霧村的奈幽蟲族的力量與弱點。請把這個當成一種良好信念的表現 - 對你們同胞的協助。利用這些知識來擊敗阿努巴,你也是幫了我們一個大忙。$B$B再會,$r。','將齊力克斯的作戰計畫交給霸主阿格瑪,他就在東邊的阿格瑪之錘。','','到龍骨荒野的阿格瑪之錘找霸主阿格瑪。','','','','',0), +(12298,'zhTW','高階指揮官海弗德‧龍禍','<格銳爾將公文交還給你。>$B$B天歌會帶你去溫特加德,$n。我保證那會是你所搭過最快的航程。去吧!','將聯盟公文交給高階指揮官海弗德‧龍禍,他就在龍骨荒野東部的溫特加德要塞。','','到龍骨荒野的溫特加德要塞找高階指揮官海弗德·龍禍。','','','','',0), +(12301,'zhTW','真相會解放我們','齊利格多年前將這顆水晶球交給我,並且囑咐我詳細的使用說明。近五年–每當我對此所發生的事情感到憤怒、憂心或哀傷的時候–我就會專注我的意念到這顆水晶球上。$B$B直至現在我才瞭解齊利格送我這顆寶珠的原因。$B$B將我的水晶寶珠帶到遺民之濱,找到海灘上,我的舊基地廢墟的上層,並且把寶珠放置於城鎮的中央。令這些被遺民們透過我的心靈看看這個世界。','龍骨荒野中黎明之境的歐利克‧真心需要你在遺民之濱的廢墟中使用歐利克水晶寶珠,救贖這些被遺民。','拯救被遺忘的靈魂','到龍骨荒野的黎明之境找歐利克·真心。','','','','',0), +(12303,'zhTW','提供軍資金','<軍需官壓低聲音對你耳語。>$B$B$C,我需要你的幫助;我們的金庫全空了,憤怒之門的柯爾克隆先鋒駐地為了那邊的作戰把我們的錢全部拿走了。$B$B不過,我聽說東南方遺民之濱那些沉船上藏有財寶。$B$B我們非得快點做些什麼才行,否則我們很快就無法繼續對抗血色突襲軍了。你知道,戰爭很花錢的!','毒怨之地的軍需官巴特勒要你回收6個遺民寶藏。','','到龍骨荒野的毒怨之地找軍需官巴特勒。','','','','',0), +(12048,'zhTW','天譴武裝','我根本沒辦法用這些礦石做出任何該死的東西。它們根本沒辦法連接在一起!不管我怎麼努力,這些天譴金屬就是彎不過來!$B$B如果我有一些天譴武裝的樣本,或許我能夠反推出那些物品是如何製造的。$B$B冰霧村充斥著許多重裝天譴奈幽蟲族。前去那邊幫我拿些天譴武裝回來!有了你的幫助,我或許能成功地用這些礦物做出點什麼。$B$B冰霧村就在西方。','伯魯斯‧折鐵者要你收集8個天譴武裝,他就在龍骨荒野的阿格瑪之錘。','','到龍骨荒野的阿格瑪之錘找伯魯斯·折鐵者。','','','','',0), +(12304,'zhTW','海濱地產','是時候擴張毒怨之地了!$B$B我們會在時機適當的時候對付突襲軍,但我要你帶頭前往遺民之濱。那裡的房屋很有潛力,而且景觀很好!$B$B不幸地,那兒有一大群人類鬼魂,遇難的船員,和其他沒發現自己已經死亡的傢伙。$B$B清空海濱和淺灘,然後你我兩人就可以來討論怎麼在那裡蓋一座新的愜意小陵墓。','遺民之濱北邊的勘測員漢森要你殺死20個遺民鬼魂。','','到龍骨荒野的遺民之濱找勘測員漢森。','殺死遺民鬼魂','','','',0), +(12305,'zhTW','離情','$n,你令我,以及數以百計的聯盟老兵的記憶倍感榮耀。齊利格送你來此是個睿智的決定,請回到他的身邊,並將我的感激一併奉上,他會樂於聽到遺民之濱所發生的種種。$B$B我沒有準備齊利格先知那樣的禮物,但是我相信有好事情正等著你,朋友。$B$B再會了。','到龍骨荒野的溫特加德要塞找『遠識』齊利格。','','','','','','',0), +(12053,'zhTW','部落的力量','如今,坦卡族成為了我們的戰友,我們要展現團結奪回冰霧村。$B$B阿格瑪之錘的西方你就能看見冰霧村了,坐落於山腳下。前去村子挑戰阿努巴奈幽蟲族吧!將我們熱愛的部落旌旗插在冰霧村中,然後把所有膽敢靠近撕毀旌旗的蟲族消滅!$B$B讓阿努巴感受部落的真正力量!讓他們死前最後一眼所見的東西,就是我們的旌旗!','龍骨荒野上,阿格瑪之錘的資深士官丘科多克需要你在冰霧村中使用戰歌戰旗,護衛它免於攻擊。$B$B事成以後,將戰歌戰旗一併帶回來。','保衛戰歌軍旗','到龍骨荒野的阿格瑪之錘找資深士官丘科多克。','','','','',0), +(12055,'zhTW','奇怪的裝置','拿起這個奇怪的裝置之後,你才確定它本質充滿魔力。很可惜,這裝置看不出來有什麼用途。$B$B也許,拿給月眠花園以東、繁星之眠的大法師,可以告訴你它的用途也說不定?','把戈拉莫什的奇怪裝置交給繁星之眠的大法師莫德菈的影像。','','到龍骨荒野的繁星之眠找大法師莫德菈的影像。','','','','',0), +(12056,'zhTW','死亡標記:高階教徒贊古司','我親眼目擊了他的背叛!那個叛徒帶領了阿努巴進攻這座堡壘,殺掉了我手下幾個優秀的士兵。$B$B<茍爾特搖了搖頭。>$B$B他一直以來為天譴軍賣命,而我們卻什麼都不知道!還有多少像贊古司的人?我要把他們全部揪出來,揪出來以後...$B$B<苟爾特做了一個割喉的動作。>$B$B名單上的第一位就是贊古司。斥候回報他躲在西邊的那金之淵。找到他,宰掉他,把他的頭帶給我。','殺掉高階教徒贊古司,並將他的頭交給苟爾特隊長。他就在龍骨荒野上的阿格瑪之錘裡。','','到龍骨荒野的阿格瑪之錘找苟爾特隊長。','','','','',0), +(12057,'zhTW','鑲肉骨書','這本典籍由肉塊所拼湊而成,看起來正在流著血。檢查之後,你發現每頁內容滿是以血所寫成的奇怪符號。$B$B不管書頁中蘊藏的知識為何,這本書一定很重要。將它帶給阿格瑪之錘的苟爾特隊長,就在冰霧村的東方。','將鑲肉骨書交到阿格瑪之錘的苟爾特隊長手上。','','到龍骨荒野的阿格瑪之錘找苟爾特隊長。','','','','',0), +(12059,'zhTW','奇怪的裝置','拿起這個奇怪的裝置之後,你才確定它本質充滿魔力。很可惜,這裝置看不出來有什麼用途。$B$B也許,拿到月眠花園東北的阿格瑪之錘交給大法師,他可以告訴你它的用途也說不定?','把戈拉莫什的奇怪裝置交給阿格瑪之錘的大法師埃薩‧奪日者的影像。','','到龍骨荒野的阿格瑪之錘找大法師埃薩·奪日者的影像。','','','','',0), +(12060,'zhTW','投影與計畫','這是傳送裝置。如果要我猜,應該會通到西邊月眠花園空中的極濤磁針平台上面。$B$B我需要你利用這裝置去看看上面有什麼。看起來它應該雙向都能作用,你應該不用從上面跳下來才對。$B$B我想,當你傳送至極濤磁針上面以後,應該有某種儀器你可以調查一下。$B$B只要你在花園裡面,你應該在哪裡都能使用傳送器才對。','靠近並觀察月眠花園上空極濤磁針裡的投影。$B$B帶著情報,回到繁星之眠的大法師莫德菈的影像身邊。','','到龍骨荒野的繁星之眠找大法師莫德菈的影像。','調查極濤磁針上的物體','','','',0), +(12061,'zhTW','投影與計畫','這是傳送裝置。如果要我猜,應該會通到西南邊月眠花園空中的極濤磁針平台上面。$B$B$n,我需要你利用這裝置去看看上面有什麼。看起來它應該雙向來回,你應該不需要從上面跳下來才對。$B$B我認為當你傳送至極濤磁針上面以後,應該有某種儀器你可以調查一下。$B$B只要你在花園裡面,你應該在哪裡都能使用傳送器才對。','靠近並觀察月眠花園上空極濤磁針裡的投影。$B$B帶著情報,向阿格瑪之錘的大法師埃薩‧奪日者的影像回報。','','到龍骨荒野的阿格瑪之錘找大法師埃薩·奪日者的影像。','調查極濤磁針上的物體','','','',0), +(12063,'zhTW','冰霧的力量','<主母冰霧鞠躬。>$B$B很榮幸見到你,英雄。因為你的努力我的族人現在活了下來,而且有能力對抗天譴軍團。$B$B你幫了我們這麼多忙,我再次開口請求你的協助讓我很羞愧。但我還是請求你。我唯一的兒子班索克,離開此地去尋找他的父親,就是坦卡大酋長冰霧。他最後一次被看見時,他正前往西方,往冰霧村去。拜託找到班索克。如果我失去了我的兒子,我不知道該怎麼辦。','在冰霧村尋找班索克‧冰霧。','','','','','','',0), +(12064,'zhTW','阿努巴之鏈','他們將我的父親用魔法鎖鍊捆綁在冰霧村的正中央。根據我所收集到的情報來看,監獄被三名阿努巴的魔導師給控制住了–每一位魔導師各擁有一把鑰匙。$B$B搜遍冰霧村,把他們找出來。殺掉他們,拿走他們的鑰匙碎片。擁有三片碎片以後,我們就能把我父親救出來了。只要他自由...$B$B懲罰很快就會來臨的。','班索克‧冰霧要求你把阿諾克拉之鑰碎片、提法科斯之鑰碎片和席諾克之鑰碎片帶給他。他就在龍骨荒野上的冰霧村中。','','到龍骨荒野的冰霧村找班索克·冰霧。','','','','',0), +(12065,'zhTW','海灘上的節點','狩法獵人的部隊最近開始在閃耀水岸活動,就在月眠花園的南邊。我猜你可能會在海灘上發現一個守衛嚴密的節點和一個負責那個地方的指揮官。$B$B我毫不懷疑他們的隊長會在那邊安排某些人控制裝置。取得控制裝置並且對節點使用。$B$B運氣好的話,我們應該可以獲得更多訊息,知道他們到底在那邊想幹什麼。','取得地脈節點控制戒指並且對閃耀水岸的地脈節點使用,以獲得更多的訊息。$B$B然後回去找大法師莫德菈的影像,他就在繁星之眠中。','','到龍骨荒野的繁星之眠找大法師莫德菈的影像。','帶回地脈節點的資訊','','','',0), +(12066,'zhTW','海灘上的節點','狩法獵人的部隊最近開始在閃耀水岸活動,就在月眠花園的南邊。我猜你可能會在海灘上發現一個守衛嚴密的節點和一個負責那個地方的指揮官。$B$B我毫不懷疑他們的隊長會在那邊有一些個人控制裝置。取得控制裝置並且對節點使用。$B$B透過你的協助,我們應該可以獲得更多訊息,知道他們到底在那邊想幹什麼。','取得地脈節點控制戒指並且對閃耀水岸的地脈節點使用,以獲得更多的訊息。$B$B然後回去阿格瑪之錘找大法師埃薩‧奪日者的影像。','','到龍骨荒野的阿格瑪之錘找大法師埃薩·奪日者的影像。','帶回地脈節點的資訊','','','',0), +(12067,'zhTW','一封家書','你找到一封藏在她長袍襯裡中的信。上面寫著:「父親,$B$B對於我的不告而別,我很抱歉。如果你正在讀這封信,那麼我已經不在世上了。$B$B我被迫替瑪里苟斯的軍團工作,他們威脅我如敢不從,我們的家人將會遭到殺身之禍。我覺得好羞愧。$B$B如果你找到任何可以對抗他們的方法,就不要擔心我了。我欺騙了他們並且從內部破壞他們的行動。$B$B我愛你,爸爸!$B$B艾米」$B$B指揮官賽雅‧蒼鋼一定會想看看這封信!','把馬林隊長的信帶給繁星之眠的指揮官賽雅‧蒼鋼。','','到龍骨荒野的洛薩羅林地找指揮官賽雅·蒼鋼。','','','','',0), +(12071,'zhTW','空襲!','他們既然見識過部落的地面大軍的厲害,當然也要嚐嚐空中的攻擊!我要你馬上向沃爾諾克‧風怒者報告!你快去阿格瑪之錘找他。$B$B沃爾諾克已經接受你的任務簡報等著你的前往。','和阿格瑪之錘的沃爾諾克‧風怒者交談。','','','','','','',0), +(12072,'zhTW','荒獸死定了!','我想你一定看到冰霧村裡面,被製造出來的阿努巴荒獸大軍了。阿努巴正在策劃將這些怪物送到憤怒之門來對付我們。不能讓這件事發生!$B$B帶著這把信號槍前去西方的冰霧村,開槍召喚戰鬥坐騎飛下來。駕馭戰鬥坐騎毀掉那些從地面攻擊不到的荒獸!$B$B一旦你把他們的空中武力解決,回來向我領賞!','在冰霧村中使用沃爾諾克的信號槍以呼喚柯爾克隆戰鬥坐騎。騎乘柯爾克隆戰鬥坐騎殺死25頭阿努巴荒獸!$B$B任務完成後回去阿格瑪之錘找沃爾諾克‧風怒者。','','到龍骨荒野的阿格瑪之錘找沃爾諾克·風怒者。','','','','',0), +(12083,'zhTW','林地之上','我確信還有更多這種水晶體,而每一個水晶體依次引導到地脈能量。只是,我們仍舊無法確實知道他們想利用那些能量做什麼。$B$B我猜測,你可以在東南邊洛薩羅林地上方找到另外一處。如法炮製,把負責的人揪出來,把他們所有的控制裝備拿走,我相信每個節點都有同樣的控制方式。$B$B小心點,$n,林地非常的危險。','取得地脈節點控制護符並且對繁星之眠的地脈節點使用,以獲得更多的訊息。$B$B接著,向繁星之眠的大法師莫德菈的影像回報。','','到龍骨荒野的繁星之眠找大法師莫德菈的影像。','帶回地脈節點的資訊','','','',0), +(12084,'zhTW','林地之上','我確信還有更多這種水晶體,而每一個水晶體依次引導到地脈能量。只是,我們仍舊無法確實知道他們想利用那些能量做什麼。$B$B我猜測,你可以在南邊洛薩羅林地上方找到另外一處。如法炮製,把負責的人揪出來,把他們所有的控制裝備拿走,我相信每個節點都有同樣的控制方式。$B$B動作要快,$c,我感覺時間不夠了。','取得地脈節點控制護符並且對洛薩羅林地的地脈節點使用,以獲得更多的訊息。$B$B接著,向阿格瑪之錘的大法師埃薩‧奪日者的影像回報。','','到龍骨荒野的阿格瑪之錘找大法師埃薩·奪日者的影像。','帶回地脈節點的資訊','','','',0), +(12085,'zhTW','一封家書','你在他的袍子中的內襯中發現了秘藏的信件,信上寫道:$B$B「迪諾:$B$B塔辛尼讓妳失望了。如果你讀到這封信,那我已不在人世。$B$B瑪里苟斯逼我替他的軍隊做事,不然就以家人的生命作威脅。塔辛尼不會讓這件事情發生的!$B$B別擔心我,好好保護你的孩子。我耍了那些人,並且從中搗亂。$B$B我愛妳,妹妹!$B$B塔辛尼」霸主阿格瑪一定會想要看到這封信的!','將塔辛尼中尉的信件送給阿格瑪之錘的霸主阿格瑪。','','到龍骨荒野的阿格瑪之錘找霸主阿格瑪。','','','','',0), +(12092,'zhTW','強化古樹','藍龍軍團的所作所為,不是只有$r受到了衝擊,東南邊洛薩羅林地的古樹們也同樣有所影響。$B$B有些古樹被污染–盡一切所能避開他們–但是大部份還有得救。然而,林子裡的樹人看來不僅免疫大地上滲出的魔法,以及,隨著魔力出現而出沒的秘法龍鰻的影響。$B$B向樹人要他們的樹皮,餵給古樹。希望這樣足夠拯救他們。','對3個洛薩羅古樹使用行者樹皮以強化他們,然後向繁星之眠的薩瑞翠亞納回報。','','到龍骨荒野的繁星之眠找薩瑞翠亞納。','強化洛薩羅古樹','','','',0), +(12096,'zhTW','強化古樹','南方洛薩羅林地的古樹被秘法龍鰻給污染了...龍鰻從土中被喚起!$B$B那些已經被污染的古樹很危險,對我們也沒有用處,但是大部分還是有得救。很幸運,林子裡的樹人似乎對那裡發生的一切都不為所動。$B$B向樹人要一些樹皮,拿到以後餵給那些古樹。這應該有辦法強化他們。$B$B別再打擾我做事了!我得好好監視這些藥劑師才行。','對3個洛薩羅古樹使用行者樹皮以強化他們,然後向阿格瑪之錘的大地守望者格里夫回報。','','到龍骨荒野的阿格瑪之錘找大地守望者格里夫。','強化洛薩羅古樹','','','',0), +(12098,'zhTW','搜索因度雷村','我確定你能在東南方因度雷村的遺址找到下個地脈節點。問題是,我們完全沒收到那裡有節點的報告。$b$b如果可以的話,請你調查村子尋找任何節點的徵兆,或是那個區域的狩法獵人與其指揮官。$B$B如果必要的話也不要忘記進入湖中調查。','尋找因度雷村和因度雷湖的狩法獵人指揮者。','','','','','','',0), +(12100,'zhTW','遏止腐敗','死亡和疫病隨著天譴軍團而來。我們經常眺望天譴軍入侵的區域,野生動物慘遭蹂躪,最終被腐敗和傳染病毀滅。$B$B對龍骨荒野大多數的原生物種來說,一切都已經太遲了。天譴軍帶來的潰疾已經感染了這些野獸,使他們潰爛發狂。$B$B你必須冒險前往西方,到那金之淵消滅被感染的野生生物。檢查他們的屍體,找出一副製造疫苗所需的抗腐化臟器。','龍骨荒野上,阿格瑪之錘的梭爾‧鷹怒要你殺死15個被感染的野生生物,並取得抗腐內臟。','','到龍骨荒野的阿格瑪之錘找梭爾·鷹怒。','','','','',0), +(12101,'zhTW','好醫生...','我們的被遺忘者盟友把他們的藥劑師核心成員送來這裡,幫助我們摧毀憤怒之門的天譴軍團。其中一位辛塔爾‧瑪雷菲爾斯醫生,精通天譴軍團的疫病,而且知道如何抑制它的擴散。我先前和他達成了協議替野生動物製作一劑疫苗。從那時候起他就在等待這個臟器。$B$B把這個抗腐內臟送去給瑪雷菲爾斯醫生,告訴他是我要給他的。他會派你去做下一項工作。','將抗腐內臟送去給阿格瑪之錘的辛塔爾‧瑪雷菲爾斯醫生。','','到龍骨荒野的阿格瑪之錘找辛塔爾·瑪雷菲爾斯醫生。','','','','',0), +(12106,'zhTW','搜索因度雷村','我確信,你可以在東南邊因度雷村的遺跡中,尋找到下一座地脈節點。但問題是,我幾乎沒有該地的消息。$B$B我需要你前去調查那個小村落,尋找節點的跡象,還有該區的狩法獵人及其指揮官。$B$B必要時,潛進那座湖裡!','調查因度雷村中狩法獵人部隊的指揮官,以及因度雷湖。','','','','','','',0), +(12107,'zhTW','地脈的盡頭','在他袍子裡,你發現了兩樣讓你感興趣的東西。$B$B其一是條護身符,顯然就是節點的控制裝置;另外是一連串的任務指令,由一個名叫席卓葛斯的人所發佈的,最終將矛頭指回了他就是月眠花園的領導者。$B$B這張被水濡濕的牛皮紙指明,戈拉莫什將所有的狩法獵人軍力調往東邊的蒼藍龍殿。$B$B也許你應該蒐集所有的節點資訊,並且沿著龍殿西邊的岩架前去東方,進行調查。','使用地脈節點控制咒符,從因度雷湖底下的地脈節點中取得你所需的資訊。接下來往東前去蒼藍龍殿,就在龍骨荒野中央偏南的地方,從西邊的岩架調查發生了什麼事情。$B$B最後,返回繁星之眠大法師莫德菈的影像之處。','','到龍骨荒野的繁星之眠找大法師莫德菈的影像。','帶回地脈節點的資訊','已調查蒼藍龍殿','','',0), +(12110,'zhTW','地脈的盡頭','在他袍子裡,你發現了兩樣讓你感興趣的東西。$B$B其一是條護身符,顯然就是節點的控制裝置;另外是一連串的任務指令,由一個名叫席卓葛斯的人所發佈的,最終將矛頭指回了他就是月眠花園的領導者。$B$B這張既破爛又被水濡濕的牛皮紙指明,戈拉莫什將所有的狩法獵人軍力調往東邊的蒼藍龍殿。$B$B也許你應該蒐集所有的節點資訊,並且沿著龍殿西邊的岩架前去東方,進行調查。','使用地脈節點控制咒符,從因度雷湖底下的地脈節點中取得你所需的資訊。接下來往東前去蒼藍龍殿,就在龍骨荒野中央偏南的地方,從西側的岩架觀察發生了什麼事情。$B$B最後,返回阿格瑪之錘的大法師埃薩‧奪日者的影像之處。','','到龍骨荒野的阿格瑪之錘找大法師埃薩·奪日者的影像。','帶回地脈節點的資訊','已調查蒼藍龍殿','帶回地脈節點的資訊]','',0), +(12115,'zhTW','寇爾提拉與死亡的語言','有一位最近加入我們的人也許可以解讀這本書。一個名叫寇爾提拉‧亡織者的自由死亡騎士暫時駐紮在阿格瑪之錘。他曾經是阿薩斯的死亡騎士,天譴軍團的一員,也許能夠翻譯死者的語言。$B$B把這本把鑲肉骨書拿去給寇爾提拉,請他翻譯內容。','將鑲肉骨書交給寇爾提拉‧亡織者。','','到龍骨荒野的阿格瑪之錘找寇爾提拉·亡織者。','','','','',0), +(12119,'zhTW','等候謁見','$n,你必須儘快趕去龍眠神殿,並將這封信呈給管理者,泰瑞歐斯塔茲。$B$B神殿坐落在龍骨荒野的中心,順著東邊的道路直走到底,通過龍墳荒原就能抵達了。$B$B我相信管理者讀過你的介紹信之後,他會讓你晉見龍后雅立史卓莎。我們只能期盼我們還來得及。$B$B感謝你為我們做了這麼多事情。旅途平安!','將介紹信送交到龍眠神殿的泰瑞歐斯塔茲手上。','','到龍骨荒野的龍墳荒原找泰瑞歐斯塔茲。','','','','',0), +(12122,'zhTW','等候謁見','$n,你必須儘快趕去龍眠神殿,並將這封信呈給管理者,泰瑞歐斯塔茲。$B$B神殿坐落在龍骨荒野的中心,順著東邊的道路直走到底,通過龍墳荒原就能抵達了。$B$B我相信管理者讀過你的介紹信之後,他會讓你晉見龍后雅立史卓莎。我們只能期盼我們還來得及。$B$B感謝你為我們做了這麼多事情。旅途平安!','將介紹信送交到龍眠神殿的泰瑞歐斯塔茲手上。','','到龍骨荒野的龍眠神殿找泰瑞歐斯塔茲。','','','','',0), +(12166,'zhTW','伊露恩的液態火焰','$R,可以幫我個忙嗎?$B$B天譴軍移師前往北邊的冰霧村,他們所到之處,散佈污染,大地上的生物飽受折磨。$B$B接下這個瓶子,裡頭裝有月井取得的伊露恩的液態火焰。請在你找到被荒疫污染的野生動物屍體上,使用這液體淨化它們。','繁星之眠的看守者裘迪‧月歌要你使用伊露恩的液態火焰淨化6頭荒疫污染麋鹿和6頭狂暴灰熊的屍體。','','到龍骨荒野的繁星之眠找守望者裘迪·月歌。','淨化荒疫污染麋鹿的屍體','淨化狂暴灰熊的屍體','','',0), +(12167,'zhTW','殺光教徒','阿努巴教徒間接要為這些受瘟疫污染的野獸負責,而我們則必須終結這一切!$B$B從教徒服飾身上瀰漫開的濃煙滲進所有靠近他們的生物,毒害並腐化他們的周遭環境。$B$B你一定要前往北邊的冰霧村,殺掉他們。將那些受到你的攻擊,卻未受損的服飾帶回來,我會決定該如何適當地處理它們。','收集5件教徒特殊作用服裝,交給繁星之眠的看守者裘迪‧月歌。','','到龍骨荒野的繁星之眠找守望者裘迪·月歌。','','','','',0), +(12168,'zhTW','贊古司的信札','來函的背面有著一段題字:$B$B「給我最敬愛的學生:$B$B只要你信守承諾,我將授予你無法想像的妙法。$B$B若否,我會毀掉你!$B$B你永遠的$B$B高階教徒贊古司」$B$B繁星之眠的守望者無疑的對此將會很感興趣。','將贊古司的信札帶給繁星之眠的看守者裘迪‧月歌。','','到龍骨荒野的繁星之眠找守望者裘迪·月歌。','','','','',0), +(12169,'zhTW','高階教徒','我曾夢見過贊古司,但是並沒有如你所發現的內容,我並不清楚那表示什麼。而你將預見的內容清晰的帶來給我,也就是女神曾經降予我的。如今,我知道我們可以在北邊的那金之淵找到他。$B$B你知道你的目標了,$n。如果想要終結這片大地的苦楚,那麼我們一定要殺掉高階教徒!','繁星之眠的看守者裘迪‧月歌要求你殺死高階教徒贊古司。','','到龍骨荒野的繁星之眠找守望者裘迪·月歌。','','','','',0), +(12182,'zhTW','前往毒怨之地!','老兄,我有一頭特別的蝙蝠為你準備好了,是我駕駛過最快、最平穩的一頭了。牠會帶你直飛毒怨之地–豪華無比。$B$B等你降落以後,把瓶子交給首席瘟疫使者米道頓。','將荒疫採樣送到首席瘟疫使者米道頓手上。他就在龍骨荒野東方的毒怨之地上。','','到龍骨荒野找首席瘟疫使者米道頓。','','','','',0), +(12439,'zhTW','來自西方的波動','$n,又有一支勢力威脅到我們的努力成果。你得向西出發,直到繁星之眠。大法師莫德菈感受到,世界有一股魔力地脈散發出的強大波動,而我們必須立刻處理!$B$B$n,現在就出發!和溫特加德獅鷲站的羅德尼‧威爾斯交談,並且向他表明來意。他會安排一頭最快的獅鷲獸,送你到繁星之眠。到了以後,記得與大法師莫德菈說話。','與溫特加德要塞中,獅鷲站的羅德尼‧威爾斯交談,並前往龍骨荒野西方的繁星之眠。','','','','','','',0), +(12440,'zhTW','前去繁星之眠!','在你準備好以後,我會安排你搭乘最快的獅鷲獸前去繁星之眠。一旦到達該處,和大法師莫德菈交談。$B$B祝你好運,夥伴!','與大法師莫德菈的影像交談,他就在龍骨荒野西側的繁星之眠中。','','','','','','',0), +(12188,'zhTW','被遺忘者荒疫與你:如何不死','荒疫作用方式的背後細節一點也不重要,你只需要知道能夠完成當初設計出來的工作。我打算合成一種惰性的荒疫菌種。$B$B<米道頓打開了瓶子,並且深吸一口。>$B$B瞧,我的身體仍然,幾乎啦,毫無損傷。要是把荒疫和這活性觸媒混合,我們全部都會變成一大塊蠕動的黏液。$B$B南方海灘上,你可以發現聯盟士兵死掉的可悲怨靈。殺掉它們,把魂能殘渣帶給我。','龍骨荒野上,毒怨之地中的首席瘟疫使者米道頓需要你帶10個魂能殘渣給他。','','到龍骨荒野的毒怨之地找首席瘟疫使者米道頓。','','','','',0), +(12189,'zhTW','到處都是白痴!','從新阿加曼德運來的貨在上週抵達了毒怨之地,經過了簡單的測試之後送到了我的手上。這是部落的秘密武器 – 「勝利拼圖」的最後一塊。$B$B<辛塔爾嘆氣。>$B$B在知道你身邊盡是一些白痴跟無能的笨蛋之後,我真的很灰心!$B$B你一定要去毒怨之地,在龍骨荒野東部邊境附近的地方,找到一個小丑,米道頓,讓他知道我在等他的包裹。','前往毒怨之地,和首席瘟疫使者米道頓交談。','','','','','','',0), +(12200,'zhTW','翡翠龍之淚','隨著荒疫化合物的惰性樣本完成,與活化觸媒的到手,我們只剩下一個合適的空殼容納這兩樣成分,就大功告成了。$B$B此處西南,龍骨荒野的海岸邊,你可以發現翡翠龍殿。殿內你可以找到一顆硬化的綠龍淚珠殘留,我不清楚來由是什麼,但,他們在死前哭得可兇了。去查查。$B$B去翡翠龍殿收集淚珠。','首席瘟疫使者米道頓需要你收集8顆翡翠龍之淚。他就在龍骨荒野上的毒怨之地裡。','','到龍骨荒野的毒怨之地找首席瘟疫使者米道頓。','','','','',0), +(12205,'zhTW','懸賞:血色突襲軍','奉高階執行官羅思之命,所有血色突襲軍的非法組織成員都將即刻處死。$B$B絕不寬恕,同時執行本命令而遭受人類俘虜的成員都應該知曉,他們將被刺死,抑或受到更嚴重的懲罰!$B$B引述高階執行官之言:「讓雪地用他們的血染成紅色!」','殺死20名血色突襲軍成員,並將成果回報給毒怨之地的高階執行官羅思。','','到龍骨荒野的毒怨之地找高階執行官羅思。','殺死血色突襲軍員','','','',0), +(12206,'zhTW','荒疫告別式','你看過徵人海報了嗎?高階執行官究竟在想什麼?!$B$B<維琪朝四周張望,壓低聲量繼續說著。>血色突襲軍被他們的牧師復活了,這對我們來說一點也不好,更糟糕的是,復活成為天譴軍,對吧?$B$B是的,我完全同意你的看法,關於屍體我們得想想辦法。$B$B我有些東西。拿著這些我剛創造出來的荒疫,然後對著牢籠中的囚犯們試試看。$B$B不髒、不亂、也不會有敵人反擊。','毒怨之地的藥劑師維琪‧萊文要求你對血色突襲軍囚犯測試荒疫之瓶。','','到龍骨荒野的毒怨之地找藥劑師維琪·萊文。','測試荒疫之瓶','','','',0), +(12209,'zhTW','掠奪軍品','啊,很好,新面孔。你想要證明你的實力嗎,新面孔?$B$B血色十字軍中,最狂熱也最偏執的血色突襲軍,阻擋了南方的後路。如果我們要對抗他們,在短時間之內,必須要準備比我能鍛造出還要多的鎧甲與武器。$B$B我們為何不搶他們的來用呢?$B$B講白一點,「你」為何不搶他們的來用呢?','毒怨之地中的軍需官巴特勒要求你偷取8件血色突襲軍護甲與8把血色突襲軍武器。','','到龍骨荒野的毒怨之地找軍需官巴特勒。','','','','',0), +(12211,'zhTW','阻止他們復活!','我就是不懂,荒疫不是早該生效了!$B$B算了,別費神了。$B$B<藥劑師基於某種原因似乎鬆了一口氣。>$B$B雖然荒疫沒辦法在血色突襲軍身上發生效果的原因不明,但我們仍然得阻止牧師復活他們。$B$B我想到了別的點子,他們的屍體絕對防止不了這招。$B$B$n,帶著我的鼠籠,對你在新壁爐谷所遇到的血色突襲軍員屍體上放出這些老鼠。我把這些鼠輩們餓了好幾頓,牠們肯定見到什麼吃什麼!','毒怨之地的藥劑師維琪‧萊文要求你使用她的老鼠容器到新壁爐谷清理15具血色突襲軍成員的屍體。','','到龍骨荒野的毒怨之地找藥劑師維琪·萊文。','血色突襲軍屍體已被清理','','','',0), +(11958,'zhTW','不可浪費','獾狼怪一直以來是我們的天敵,但你們對大龍骨荒野的入侵,卻因為生存空間減少而迫使他們往北遷移。$B$B再加上今晨大地所發生的劇變,他們比起以往顯得更加具攻擊性。他們掠奪了我們的貨物數次...那些貨物可是我們所仰賴遠離家園的物資。$B$B作為善念與友誼的象徵,請將我們的貨物從落雪林地的獾狼怪身上奪回來。','從獾狼怪身上奪回6個被偷取的默亞基貨物。將貨物交還給默亞基港的長者科納尼。','','到龍骨荒野的默亞基港找長者科納尼。','','','','',0), +(12214,'zhTW','新鮮的馬匹','嗨,我是漢瑟爾,很高興認識你,$g先生:女士;。$B$B高階執行官跑來跟我說:「欸,漢瑟爾,我要你給我新的坐騎。」$B$B他以為恐懼戰馬打哪來的?從地上蹦出來?$B$B<悄聲道>事實上,如果你找得到馬的墳場,牠們真的可以從地上蹦出來。$B$B但是,我們沒有那種東西,所以,我們需要你做的,就是去南邊的新壁爐谷,殺掉騎士,拿走馬鞭,然後偷走他們的戰馬。$B$B將馬匹駕來給我,然後交出韁繩,如果你能的話…','毒怨之地的漢瑟爾‧包爾要求你竊取3匹突襲軍戰馬然後把韁繩交給他。','','到龍骨荒野的毒怨之地找漢瑟爾·包爾。','血色突襲軍戰馬的韁繩已送達','','','',0), +(11960,'zhTW','計畫未來','如果我們有機會存活下來,我們應該要當機立斷地對付獾狼怪。但我擔心我們過度的狂熱可能會造成他們大量的死亡。$B$B落雪林地獾狼怪也和我們一樣同樣有生存的權力。你和我要看看他們是否能把握這個機會。$B$B如果長者科納尼還沒問過你,他大概會請你出面跟他們交涉。當你前往北方的林地時,我希望你收集一些他們的小熊怪。','收集12個落雪林地小獾狼。把他們交給默亞基港的陷捕者茂伊。','','到龍骨荒野的默亞基港找陷捕者茂伊。','','','','',0), +(12218,'zhTW','把好話傳出去','在我用船帶著你和好消息給瑪雷菲爾斯醫生之前,你得先用我稍加修改過的東西來進行一個簡單的荒疫實測任務。$B$B飢餓的死屍從他們原先所在的舊溫特加德擴散開來了。從東門掠奪一台載具,駕駛它往東北方經過復仇隘口,抵達溫特加德東南邊境的雙塔。朝著遍佈該區的不死生物投下荒疫炸彈。跟我回報成果!','位在龍骨荒野,毒怨之地的首席瘟疫使者米道頓要你使用被遺忘者荒疫散佈者的荒疫炸彈摧毀30個位於腐屍農地外圍飢餓的死屍。','','到龍骨荒野的毒怨之地找首席瘟疫使者米道頓。','','','','',0), +(12221,'zhTW','被遺忘者荒疫','我準備了一份包裹必須運送給位在阿格瑪之錘的辛塔爾‧瑪雷菲爾斯醫生。裡面包含了附有製作索引的最終荒疫配方,以及反應劑的樣本。$B$B你可以在龍骨荒野的西邊找到阿格瑪之錘,看見那座黝黑、鋸齒狀金屬的獸人建築–那就是阿格瑪之錘啦。','將被遺忘者荒疫送給阿格瑪之錘的辛塔爾‧瑪雷菲爾斯醫生。','','到龍骨荒野的阿格瑪之錘找辛塔爾·瑪雷菲爾斯醫生。','','','','',0), +(12230,'zhTW','向攻城鐵匠行竊','我被賦予摧毀血色突襲軍弩砲的任務,但很不幸的,我和諸位藥劑師們對於如何使用我們的資源意見不一致,因而我沒有任何東西可以用來摧毀弩砲!$B$B東北邊就是腐屍農地。熔爐和血屍戰車旁的天譴攻城鐵匠們是破壞的專家。$B$B我們的運氣很好,他們也將炸彈放置於附近。$B$B我需要你替我拿回這些炸彈,我不管你是從地面上,或者是攻城鐵匠身上找到都可以。','毒怨之地的亡靈衛兵莫爾德要求你拿回6個攻城鐵匠炸彈。','','到龍骨荒野的毒怨之地找亡靈衛兵莫爾德。','','','','',0), +(12232,'zhTW','炸毀弩砲','終於,輪到我們對他們的攻城機具進攻了!別搞砸了。$B$B我說笑的。$B$B一點點啦。$B$B$C,用這些炸彈轟炸新壁爐谷的弩砲。$B$B我們會向皇家藥劑師學會展現我們的老方法:根本不需要策劃!','毒怨之地的亡靈衛兵莫爾德要你使用攻城鐵匠炸彈轟炸5臺新壁爐谷弩砲。','','到龍骨荒野的毒怨之地找亡靈衛兵莫爾德。','已炸毀新壁爐穀弩砲','','','',0), +(11977,'zhTW','坦卡族中的牛頭人','<瓦圖克指向東北方。>$B$B你知道嗎,她十分仁慈。如果不是你們的特使,倖存的難民早就放棄希望了。她或許並非生來就是坦卡族,但部族已經以村中長老的身分接納她。$B$B如果我沒有猜錯你的身分,請去拜訪難民營中的特使亮蹄。她正在等著你。','前往西風難民營尋找特使亮蹄。','','','','','','',0); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(11978,'zhTW','進入窪地','在我們能正式讓這些坦卡族加入部落之前,我們必須要從附近樹林出沒的阿努巴奈幽蟲族手中取回我們的武裝。前幾天夜裡由阿格瑪之錘出發的車隊被天譴軍突襲,武裝也丟失了。$B$B進入西風難民營東方的樹林,去取回那些武裝,$r。','龍骨荒野,西風難民營的特使亮蹄要你去找回10個部落武裝。','','到龍骨荒野的西風難民營找特使亮蹄。','','','','',0), +(11979,'zhTW','坦卡族與牛頭人','天譴軍團已經控制了坦卡族的首都,冰霧村!所有逃過大屠殺還活著的坦卡族目前都安置在西風難民營接受保護,就在龍骨荒野的西部邊境。$B$B地獄吼大人認為坦卡族存活的方法就是加入部落,他派出一位牛頭人特使前往那邊加強我們和冬日牛頭人的關係。前往西風難民營,去找特使亮蹄。你要協助她。','在西風難民營尋找特使亮蹄。','','','','','','',0), +(11980,'zhTW','部落的驕傲','我是獲選護送武器裝備運輸車隊的守衛之一。攻擊來得迅速而且毫無前兆。我們奮力抵抗並且殺死了幾十隻野獸,但它們實在太多了。$B$B托辛和我勉強活了下來...$B$B如果不是因為我們的傷勢,我們早就親自進入森林獵殺那些魔鬼。你願意幫助我們挽回我們的尊嚴嗎?在森林中搜索那些阿努巴奈幽蟲族並且殺光它們!為了部落!','血衛士羅奇爾要去殺死15隻阿努巴伏擊者,他就在龍骨荒野的西風難民營。','','到龍骨荒野的西風難民營找血衛士羅奇爾。','','','','',0), +(11983,'zhTW','部落的血誓','他們都準備好了,$n。這些坦卡族都願意加入部落,寧願犧牲一切也要將天譴軍團逐出這個世界。$B$B<亮蹄交給你一個印有部落徽印的卷軸。>$B$B這個卷軸中寫著部落的血誓。傳統上我們要讓我們新加入的坦卡兄弟姊妹複述其中神聖的字句。$B$B帶著這個卷軸讓坦卡族宣誓加入部落,指揮官。等你完成任務,拿著卷軸回來找我。','和西風難民營中的坦卡族交談,讓他們其中5個人宣誓加入部落。$B$B完成之後帶著部落的血誓回去找特使亮蹄。','','到龍骨荒野的西風難民營找特使亮蹄。','坦卡族宣誓加入部落','','','',0), +(12239,'zhTW','新壁爐谷中的間諜','我在血色突襲軍的隊伍中安排了一名間諜。我需要你將這些當日指令遞送給她,以便計畫下一步的襲擊。$B$B她化名史考莉探員,並且在魔法偽裝之下,看起來是個墓園管理人。$B$B拿著這個每日命令給她,並且照她說的去做。墓地就在修道院的旁邊。','將血色突襲軍每日命令交給人在新壁爐谷的史考莉探員。','','到龍骨荒野的龍墳荒原找史考莉探員。','','','','',0), +(12240,'zhTW','解決手段','在最後一批貨中,我收到了遠在老家亡靈壁壘的姊姊送來的幾桶白蟻。我為你想好了一些工作,而這些白蟻一定對你很有用處。$B$B新壁爐谷中運作的那些伐木場對我們造成了很大的問題,可是到目前為止,我們還沒辦法派人進去解決他們的伐木機工頭。$B$B我想,如果你在他珍貴的木製品上放出這些白蟻,他一定會逃跑的。$B$B準備好除掉他了嗎,$c?','毒怨之地的藥劑師維琪‧萊文要求你使用萊文家族白蟻來誘出工頭卡列基,並且把他殺掉。','','到龍骨荒野的毒怨之地找藥劑師維琪·萊文。','','','','',0), +(12243,'zhTW','水火同源','我有另外一項任務給你。$B$B我能夠轉化一部分的荒疫、調和成我那舉世知名的燃燒之水。我要你拿著水,去點燃罪人愚行號的帆!$B$B到甲板上使用,一旦點著了之後,水手們就會忙著撲滅火勢,你就有機會溜進船艙,將船長的航海指針「物歸原主」。$B$B從新壁爐谷往下、往南行,你可以在十字軍臺地上發現那艘船。找出船長室,就在甲板下方第一層,樓梯的後方。','毒怨之地的藥劑師維琪‧萊文要你用藥劑師的燃燒之水在罪人愚行號的船帆上放火。$B$B在船員忙著滅火的時候,進入船艙從船長身上取得雪利船長的航海指針。','','到龍骨荒野的毒怨之地找藥劑師維琪·萊文。','罪人愚行號的船帆著火','','','',0), +(13377,'zhTW','幽暗城之戰','在天譴之門殺害伯瓦爾和勇敢的聯盟士兵的罪魁禍首,眼下就躲藏在幽暗城的深處。$B$B瓦裡安已經帶著聯盟最強大的部隊前來支持這次行動了。加入他和普羅德摩爾女士的隊伍,與這些最偉大的聯盟勇士們並肩戰鬥!$B$B等你準備好了之後,就去告訴瓦裡安·烏瑞恩國王。','協助瓦裡安·烏瑞恩國王和吉安娜·普羅德摩爾,剿滅大藥劑師普特雷斯!$B$B成功之後,向瓦裡安·烏瑞恩國王報告。','協助瓦裡安·烏瑞恩國王','去暴風城找暴風要塞的瓦裡安·烏瑞恩國王。','','','','',0), +(11930,'zhTW','穿過越風之地','穿過越風之地的道路就在東方,這是唯一通往龍骨荒野的途徑。在你穿越凍原的途中有許多兇險在等著你。小心天譴軍團,還有他們對於這片土地野獸的影響。最近有謠傳說,我們死去的坦卡族同胞復活,攻擊往來於龍骨荒野的馬車商隊!保護你的車隊,守護那些疏散的難民!$B$B瓦圖克‧冰誕在等著你過橋,引導你進入龍骨荒野。','護送坦卡雷疏散者通過越風之地,瓦圖克‧冰誕在龍骨荒野的邊界等著你。','安全轉至龍骨荒野','到龍骨荒野找瓦圖克‧冰誕。','','','','',0), +(11929,'zhTW','坦卡雷村的陷落','我們輸了,$n。數代以來,這個地方一直是我們的家園,如今,此地不再安全。剩下的只有死亡...死亡和過去的回憶。$B$B我負責坦卡雷的撤退工作,所有殘餘的坦卡雷居民必須馬上離開前往龍骨荒野上,我們的主城冰霧。$B$B<冬風酋長指著東方。>$B$B你一定要幫助我的族人前往安全地,$n。教母托蘭努克就在村子大門的地方等著你。快!天譴軍從四面八方逼近了!','和坦卡雷村大門外的教母托蘭努克交談。','','','','','','',0), +(11864,'zhTW','任務聲明','','','','','','','','',0), +(11884,'zhTW','『犀牛王』尼達爾...','在此地之西,庫姆亞湖之上的高崖,有一隻名叫尼達爾的卑鄙生物在晃蕩著。他自稱為『犀牛王』,在荒野上狩獵那些受傷或太年幼而無法自保並抵抗尼達爾的犀牛。更糟糕的是,尼達爾還自己畜養了一隻犀牛作為他的坐騎和保鏢。$B$BD.E.H.T.A絕少會要一隻動物的小命,但尼達爾那隻腐化的犀牛必須要被處理掉...殺死他們兩個,然後再回來找我。','『獸穴看守者』基林格爾要你去殺死『犀牛王』尼達爾和他的同伴『午餐盒』,完成之後再回到北風凍原的D.E.H.T.A.駐營向他回報。','','到北風凍原的D.E.H.T.A.駐營找『獸穴看守者』基林格爾。','','','','',0), +(11673,'zhTW','快把我弄出去!','我知道他們遲早會送人來…結果卻遲了這麼久。$B$B我本來是想利用一下這些極地狗頭人的,但是他們的薩滿卡甘尼蘇卻決定不如把我做成瑪格默斯瑞卡的點心。$B$B等等…你說什麼?!你不是他們派來的?!$B$B你…你你…是說他們把我給忘了?!$B$B好吧,你在這才是要緊的事情。$B$B只要你打破這條鐵鍊,我們就一起回去機場,然後你可以告訴嘶軸我安全回去了。$B$B那當然,如果他還記得我的話。','將邦克‧電環護送到安全地點,並且向嘶軸簡易機場的嘶軸‧滿閥回報。','護送托格沃特返回安全地帶。','到北風凍原的嘶軸簡易機場找嘶軸‧滿閥。','','','','',0), +(11592,'zhTW','我們進攻!','你們獸人當中一位名為鋼顎的獸人試著抄捷徑穿越我們的墳地以節省時間。這最好不是你們部落常有的行為,$r,否則你會發現坦卡族就是你們的終點!$B$B不過,你看起來好像想要協助處理這件事。很好!$B$B鋼顎被詛咒的靈魂現在還徘徊在此地,騷擾著我們的先祖們。我們必須終結他!$B$B如果我們可以活著完成這件事,就去通知你們在北方前哨的霸主博格洛克。$B$B你有在聽我講話嗎?','幫助遠偵斥候傲蹄以及他的戰歌劫掠者在對鋼顎商隊的攻擊中存活下來,並解決掉軍隊指揮官鋼顎的靈魂。$B$B如果成功了,就回報給博格洛克前哨的霸主博格洛克。','幫助遠行者達瑪·傲蹄完成突襲。','到北風凍原的博格洛克前哨找霸主博格洛克。','','','','',0), +(11605,'zhTW','尊榮的先祖','<當你凝視這尊石雕的同時,從遙遠的方傳來聲音,在你的腦海中回盪著。>$B$B別害怕,陌生人,我是阿特那克長老,這些巨牙海民的先祖,手藝獨步一時的工匠,同時,數百年來,也是這片石礦場的守護者。$B$B這片石礦場飽經蹂躪,這也使得當先祖的靈魂降臨世間的時候,許多石雕仍未完成。你願意幫助我矯正這些錯誤嗎?$B$B首先,我得瞭解這些行於世間的先祖之名。在這些石雕附近,找出它們的標示。','冷岩礦場外的阿特那克長老需要你分辨出長者凱蘇克、長者撒加尼、還有長者塔克瑞特的石雕在何處。','','到北風凍原的冷岩礦場找阿特那克長老。','分辨出長者凱蘇克身份','分辨出長者撒加尼身份','分辨出長者塔克瑞特身份','',0), +(11607,'zhTW','迷失的靈魂','在礦場的攻擊中,在這裡工作的薩滿和工匠都陣亡了。這種暴力行為使靈魂世界陷入完全的混亂,我們無法將先祖們引導回家鄉,除非我們有方式安撫這些被殺的靈魂。$B$B這些侵略者本身沒留意到靈魂,不過他們的同伴,碧晶獵犬,感應到這些靈魂並奴役他們。$B$B去殺了這些碧晶獵犬,並使用其所留下的原始能量,將限制這些無辜靈魂的禁錮打破。','冷岩礦場外區的阿特那克長老要你去釋放3個卡斯卡拉工匠和3個卡斯卡拉薩滿的靈魂。','','到北風凍原的冷岩礦場找阿特那克長老。','釋放卡斯卡拉工匠的靈魂','釋放卡斯卡拉薩滿的靈魂','','',0), +(11609,'zhTW','撿起碎片','隨著那些被謀殺的工匠與薩滿獲得安息,我們也可以重新完成那個被攻擊打斷的儀式。你必須要扮演傳統巨牙海民薩滿的角色,你也得戴上所有需要的儀式物品。$B$B現在沒空去打造新的物品了,所以你必須要去搜索採石場,從那些受害者身上取回物品。小心處理這些物品,$n,很多東西都已經有數個世紀的歷史了。你也有可能得從入侵者的手上取回那些東西。','帶6個巨牙海民儀式物品交給阿特那克長老,他就站在冷岩礦場的外面。','','到北風凍原的冷岩礦場找阿特那克長老。','','','','',0), +(11610,'zhTW','引領先祖返家','藉由你的幫助,先祖的靈魂才能夠回到家,也就是卡斯卡拉的工匠和薩滿滿懷敬愛製成的雕像裡。為先祖們所準備的儀式在礦場遭受攻擊的過程中斷了,你必須完成祭儀。帶著你從礦場中回收的物品,站在有名牌的雕像前,然後吟誦這段頌歌。$B$B<一段陌生的語言浮現在你腦海中,而你可以毫無滯礙的覆誦它。>','阿特那克長老要你引領長者凱蘇克、長者撒加尼、還有長者塔克瑞特的靈魂到他們的石雕紀念像中。','','到北風凍原的冷岩礦場找阿特那克長老。','完成長者凱蘇克的儀式','完成長者撒加尼的儀式','完成長者塔克瑞特的儀式','',0), +(11628,'zhTW','天譴裹布','在東北方隱約可以看見恩吉拉聖城,天譴軍團在北風凍原上的基地。就在它的高牆之後,天譴軍指揮官派出他的奈幽蟲族包圍了我們。$B$B一直防守下去只會害死我的同胞,但我的顧問們卻意見紛歧。德姆只會盲目的衝鋒,賢者艾睿則偏好隱匿的行動。$B$B聖城污染了附近的土地與當地的生物。艾睿相信天譴長毛象的毛皮可以作為掩蔽,用以隱藏一個滲透者。','坦卡雷村的冬風酋長要你帶回5個天譴長毛象皮。','','到北風凍原的坦卡雷村找冬風酋長。','','','','',0), +(11630,'zhTW','惡土','透過治癒聖城外圍的荒蕪土地,賢者艾睿認為她可以製造一種披風,讓大多數的天譴軍爪牙忽略你的存在。她說,你應該可以混入其中。$B$B她最好是正確的。這是我們唯一的收集情報與策劃反擊的機會。$B$B你應該可以在要塞的南邊和西邊挖到她要的土壤。等你收集完成之後再來找我。','將8塊天譴污染土壤帶給坦卡雷村的冬風酋長。','','到北風凍原的坦卡雷村找冬風酋長。','','','','',0), +(11633,'zhTW','混入其中','賢者艾睿已經織好裹布了。帶著它前往恩吉拉聖城。在城裡披上它,就可以躲開天譴軍。這是我們刺探對方防禦工事和領導者的最佳機會。$B$B穿著披風去偵察聖城裡的三座尖塔。雖然這裹布可以讓你躲過大多數的天譴軍,如果你太靠近恩吉拉憎惡體,它們就會發現你。','坦卡雷村的冬風酋長要你到恩吉拉聖城裡穿上灌魔天譴裹布,然後偵察鮮血尖塔、苦痛尖塔、以及凋零尖塔。','','到北風凍原的坦卡雷村找冬風酋長。','偵察凋零尖塔','偵察鮮血尖塔','偵察苦痛尖塔','',0), +(11640,'zhTW','真言','在你描述的尖塔中居住著天譴軍團領導主要的部將,高階祭師。他們不只指揮著天譴軍團,還擁有鑰匙可通往上方的亡域和他們的主人。$B$B如果我們無法找到並擊敗他們的頭目,我們將被源源不絕的天譴爪牙攻陷。不管德姆有多想要與敵人開戰,我沒辦法讓我的人民失去防衛。這任務就交給你了,$n,去殺了這些高階祭師並取得他們手上的卷軸。','帶著高階祭司納菲賽特的卷軸,高階祭司塔烈卡的卷軸,和高階祭司安杜拉斯的卷軸給坦卡雷村的冬風酋長。','','到北風凍原的坦卡雷村找冬風酋長。','','','','',0), +(11641,'zhTW','英勇一擊','從一開始的時候,我就勸告過冬風酋長應該要集結我們最強大的戰士,然後對敵人的基地展開攻擊。他不願意聽從我的建議,而寧願照著賢者艾睿的計畫,在周圍鬼鬼祟祟地活動。$B$B我不要再等了。如果冬風酋長膽小得不敢派出我們的戰士應戰,或許你願意向他證明直接的攻擊也可能會成功。衝進恩吉拉聖城,所把所有阻礙你的傢伙全殺光,$n。','殺死15個恩吉拉食屍鬼和5個恩吉拉死靈法師,然後向坦卡雷村的德姆‧冰隱回報。','','到北風凍原的坦卡雷村找德姆·冰隱。','','','','',0), +(11647,'zhTW','中和大鍋','恩吉拉聖城中的瘟疫大鍋讓我十分擔憂,$n。顯然冬風酋長信任你的判斷以及你對我們敵人的瞭解。你願意在執行酋長計畫的同時,協助我處理聖城中的大鍋嗎?$B$B我準備了一根圖騰,它會攻擊並且中和大鍋中的東西。你只需要找出大鍋的位置,然後把圖騰插在附近就行了。我們每摧毀一樣天譴軍的武器,我們就離勝利更近一步。','坦卡雷村的賢者艾睿要你使用她的圖騰去中和恩吉拉聖城中的東部大鍋,中央大鍋和西部大鍋。','','到北風凍原的坦卡雷村找賢者艾睿。','淨化東部天災之鍋','淨化中部天災之鍋','淨化西部大鍋','',0), +(11909,'zhTW','打敗齒輪大師','顯然這個齒輪大師梅卡佐德並不是什麼心智正常的生物。他所提出的治療和永生只不過要把我們全都變成他的機械奴隸,他一定要被阻止!$B$B引導我的風向我傾訴,告訴我他就在東方水池中間的幫浦站頂端。$B$B他八成就在建築頂上的指揮小屋中。進入指揮小屋並研究他的東西。$B$B$n,如果我們想要存活你就必須要對抗梅卡佐德!','研究齒輪大師的手冊,並且帶著梅卡佐德的頭回到坦卡雷村向主母泰嘉報告。','','到北風凍原的坦卡雷村找主母泰嘉。','研究齒輪大師的手冊','','','',0), +(11654,'zhTW','鮮血尖塔','在你調查血瓶時,你發覺到裡面的東西似乎依舊溫熱。受害者一定才剛剛被放血,說不定還活著。$B$B天譴軍為什麼要這些鮮血?他們過去從不在意活著的囚犯。或許等你找到這些血液的來源,你就能發現天譴軍團的計畫。','調查鮮血尖塔尋找更多關於新鮮的血瓶的情報。','','到北風凍原找雪地追蹤者古魯姆。','','','','',0), +(11659,'zhTW','粉碎寶珠!','他們...抽囚犯的血...放在...那些球中。$B$B<古魯姆短暫的閉上了眼,將頭靠回來。>$B$B血...被帶上了亡域...當成血親王的食物...$B$B<古魯姆倒抽了一口氣。>$B$B答-答應我...你會...摧毀集血...之球...傳話給...朱奈克。$B$B<雪地追蹤者失去了意識。>','摧毀5個集血之球並回報坦卡雷村的雪地追蹤者朱奈克。','','到北風凍原的坦卡雷村找雪地追蹤者朱奈克。','粉碎集血之球','','','',0), +(11559,'zhTW','冬鰭交易','既然你可以和冬鰭魚人交談了,這是個好機會讓他們認識你。最好的方法就是和他們談生意。$B$B在魚人眼中最珍貴的就是蚌類,而他們唯一倖存的商人就是阿魯咕嚕咕爾。如果我是你,我會收集一些冬鰭蚌送給他當成禮物。$B$B蚌殼可以在海溝一帶找到,當然也包括冬鰭村和他們的洞窟。','收集5個冬鰭蚌,然後把它們交給冬鰭避居地的阿魯咕嚕咕爾。','','到北風凍原的微光海灣找阿魯咕嚕咕爾。','','','','',0), +(11561,'zhTW','他們!','我們在水中的兄弟姊妹現在全成了我們的敵人。他們綁架了我們的蝌蚪,把我們趕出了自己的村莊,被他們殺死的,多到我都不會數了。$B$B證明你自己,$r!遊過裂隙去殺死他們!$B$B不管新的王給你什麼樣的禮遇,只有殺死他們我們才會接受你。如果辦不到,你最好快滾,然後永遠也別回來!','冬鰭避居地的布爾格墨葛要你殺死15個冬鰭魚人。任何戰士、神諭者、濱擊者的組合都可以。','','到北風凍原的冬鰭避居地找布爾格墨葛。','殺死冬鰭魚人','','','',0), +(11564,'zhTW','多汁的虎鯨燉肉','情況是,陌生的$r,或許你在追殺虎鯨王吉爾戈。$B$B這樣很好,但如果你想要品嚐絕世珍品的燉肉的話,那你就應該把在微光海灣活動的虎鯨的多汁油脂帶回來給我。$B$B如果你想獲得與你努力相得的回報,那麼動作就要要快...我得花不少功夫來處理那個傢伙的魚身。','斬擊者布墨格伯姆要你收集7個多汁虎鯨脂。回到北風凍原的冬鰭避居地向他回報。','','到北風凍原的冬鰭避居地找斬擊者布墨格伯姆。','','','','',0), +(11569,'zhTW','鑰匙大師俄姆戈苟','我們一定要逃出這些個洞穴!有些魔法物質從上頭的凜懼島漏了進來,影響了每個人的心智。$B$B鑰匙大師俄姆戈苟在南邊的洞穴裡面。他握有打開我的牢籠鑰匙,從他身上奪過來給我,我才能打開這個牢籠逃出去。$B$B快一點!','冬鰭洞窟的葛勒格勒格勒要你拿到俄姆戈苟之鑰。','','到北風凍原的西裂峽找葛勒格勒格勒。','','','','',0), +(11570,'zhTW','逃離冬鰭洞窟','我籠子的鎖看起來並不牢固,但我還沒傻到在沒有幫助的情況下試圖逃離這裡。$B$B你願意幫我安全地逃離這個洞窟嗎?沒時間可以浪費了,$r。$B$B等我們回到避居地,讓大王知道我平安無事。他一定會好好獎勵你的。','平安地將魯格伯護送回去,然後向冬鰭避居地的莫戈莫戈大王回報這個好消息。','護送嚕呱吧呱回到安全地帶','到北風凍原的冬鰭避居地找莫戈莫戈大王。','','','','',0), +(11571,'zhTW','學習溝通','要幫忙,你必須要學會說冬鰭語。我們要靠著自然與魔法的力量來達成。$B$B拿著這個海螺貝。史卡德就住在海溝的底部,他是個空氣與水的狂怒元素。$B$B一旦打敗了她,就對她的屍體使用海螺去捕捉她的魔法蒸汽。帶著裝滿的海螺回來找我,我將會把我對冬鰭語的知識灌注給你。$B$B幸運的是,一個朋友教過我等下要對你施展的水中呼吸術。','莫戈莫戈大王給你一個海螺要你對史卡德的屍體使用。之後回到冬鰭避居地把國王的盛滿海螺交給他。','','到北風凍原的冬鰭避居地找莫戈莫戈大王。','','','','',0), +(11575,'zhTW','關鍵時刻','我已經把我記得的全告訴他們了,為什麼就是不相信我?$b$b我那時候在裂口附近採集草藥,那些傢伙就憑空出現,帶著魔法獸的黑暗巫師,我被團團包圍了!$b$b一個巨大的魔法方塊出現在我頭上。然後那個東西打開把我吸了進去。我發誓這是真的!$b$b就在它要關起來時,我的救星們騎著飛龍衝了進來 - 那真是太驚人了!那些抓住我的人亂成了一團,我才趁機逃走。$b$b我還沒感謝他們拯救了我。拜託,$c,如果你見到他們,幫我告訴他們我的感謝之意。','驍勇要塞的米吉要你前往北方的琥珀岩臺感謝那些拯救她的人。','','','','','','',0), +(11638,'zhTW','交回我的殘骸','$n,既然我的靈魂已然被釋放,你願意幫助我將我的殘骸帶給靈語者嗥牙呢?殘骸被放置在我身下的地面上。$B$B我感應到靈語者還在西方博格洛克前哨中,那是我最後看到她的所在。','將安息在先知厲行者之靈底下的先知厲行者的殘骸遞交給博格洛克前哨的靈語者嗥牙。','','到北風凍原的博格洛克前哨找靈語者嗥牙。','','','','',0), +(11637,'zhTW','卡甘尼蘇','在我那為數不多的蠻兵軍力被殺之後,我被拖行至此並獻祭般的被處死。犯下此舉的狗頭人稱作卡甘尼蘇。$B$B你雖然擊敗了他的薩滿助手,但是我的靈魂仍然被拴縛在這裡。他殺了我之後,用我的屍身製造了一尊神像,用以禁錮我在這。卡甘尼蘇藉此習得我所全部所知的薩滿之道。$B$B你必須從他身上將這尊神像奪回來,並且在我的靈魂上使用。卡甘尼蘇就在附近的洞穴裡。$B$B唯有如此方能真正解放我。','找回卡甘尼蘇的神像並且在先知厲行者的殘骸上使用。$B$B你必須將神像交給瑪格默斯中的先知厲行者之靈。','','到北風凍原的沸水之池找先知厲行者之靈。','先知厲行者獲得釋放','','','',0), +(11635,'zhTW','先知厲行者之靈','你一定要去東方的瑪格默斯。$B$B你得要潛入他們洞穴的深處。$B$B你得和先知厲行者之靈交談!','和瑪格默斯中的先知厲行者之靈交談。','','','','','','',0), +(11650,'zhTW','只要再幾樣東西...','你可能已經注意到了,我們將簡易機場建造在一處猛瑪象人洞穴的南方邊境!$B$B<卡芙緹偷偷的說了幾句挖苦嘶軸的話。>$B$B老頭子要我負責對以下的情況找出一個...呃...有創意性的解決方式:如果我們不盡快解決他們的話,他們將會來到這裡,將我們撕成一塊塊!$B$B這就是你要做的事情。我要幫我弄來這張購物清單上所有的東西。拜託了。','收集卡芙緹的工具,一個過載電容器,以及一把洛克那爾的砂粒。將這些東西送去給嘶軸簡易機場的卡芙緹‧顛鏈。','','到北風凍原的嘶軸簡易機場找卡芙緹·顛鏈。','','','','',0), +(11645,'zhTW','骯髒、發臭的極地狗頭人!','那些骯髒、發臭的極地狗頭人…他們偷走了我所有的補給品!$B$B你問什麼是極地狗頭人?就跟一般狗頭人差不多,不過他們服侍猛瑪象人,照料他們的生活。我知道,這很奇怪!$B$B有人要幫幫我嗎?我知道那些卑鄙的東西偷走了我所有的東西。是我太傻,以為在簡易機場北邊整理貨物很好很安全。$B$B幫幫我,去北邊那個愚蠢的瑪格默斯。如果你能快點把我的東西給拿回來,我可以給你現金報酬!','收集10個卡芙緹的貨物,帶回去給嘶軸簡易機場的卡芙緹‧顛鏈。','','到北風凍原的嘶軸簡易機場找卡芙緹·顛鏈。','','','','',0), +(11791,'zhTW','通知阿爾洛斯','我們必須要盡快通知阿爾洛斯將軍。我認識那位船長很久了,相信我,他是個非常小心的人。$B$B誰知道有多少教徒從其他船隻偷渡到我們在北裂境的據點?這可能是場災難。','和阿爾洛斯將軍談談,他在驍勇要塞的內堡之中。','','','','','','',0), +(11792,'zhTW','聖光的敵人','先別急著走。我不知道你怎麼想,$c,但我不太相信將軍剛剛說的話。聽起來不太可靠...好像不是他自己想講的感覺。$B$B這裡有些事不太對勁。所有我們試著合作的提案都被阻止或延後了。該是我們採取更加自主態度的時候了。$B$B如果我們想要更加了解要塞內教徒的事...或許我們應該先調查外面的教徒。$B$B情報人員回報說有一小組教徒正在協助北邊的天譴軍團。去看看他們身上是否藏有任何線索。','先驅者瓦銳恩要你去挑戰驍勇要塞的北邊,遠郡附近的教徒通靈師,並從他們身上取得教徒公報。','','到北風凍原的驍勇要塞找先驅者瓦銳恩。','','','','',0), +(11793,'zhTW','進一步的調查','我擔心這就是我必須委任間諜的原因...一個可以進行秘密工作的人。將證據帶在身上,並將它交給旅館裡的復仇者亞拉。$B$B告訴他是我派你前去,並請她保守秘密。我們並不知道誰會是替教派工作的人。','帶著教徒公報給驍勇要塞旅館裡的復仇者亞拉。','','到北風凍原的驍勇要塞找復仇者亞拉。','','','','',0), +(11794,'zhTW','獵殺開始','我已經盡可能的去了解這個邪惡的死亡教派,包括他們的神秘語言。$B$B瓦銳恩是對的。教徒們提到喬裝的間諜在驍勇要塞幾個地點:底下的碼頭,堡內的監獄,以及旅館中的廚房。$B$B拿著這個驅魔師之目。在那三個地方使用它 - 任何最近使用過教派死靈法術者都會被一圈黑暗光環覆蓋。趕在惡毒的事發生前,解決掉這些教徒們。','復仇者亞拉要你在驍勇要塞的三個地點使用驅魔師之目找到詛咒神教的成員並擊敗他們。','','到北風凍原的驍勇要塞找復仇者亞拉。','擊敗碼頭的教徒','擊敗監獄的教徒','擊敗廚房的教徒','',0), +(11702,'zhTW','莫戈莫戈大王','這聽起來有點怪,$c。不過有個魚人向我們求助!$B$B人家都叫他莫戈莫戈大王,冬鰭魚人的頭目。他和他的人民被趕出去他們的村落了,想要你去保護他們。$B$B朝西邊沿著路走,一直到你遇到峭壁為止。他就住在冬鰭避居地南側。','前往北風凍原的冬鰭避居地找莫戈莫戈大王談談。','','','','','','',0), +(11704,'zhTW','莫戈莫戈大王','這是最怪的事,$c,有個魚人在請求我們的幫助!$B$B他被稱為莫戈莫戈大王,冬鰭魚人的頭目。看來似乎他和他的人民被趕出來了,他們想要有人來保住他們的村落。$B$B那個人就是你!$B$B朝西邊沿著路走,一直到你遇到峭壁為止,你會發現冬鰭避居地,還有這個大王。往下前往極熱之池附近的岸邊。','前往冬鰭避居地找莫戈莫戈大王談談。','','','','','','',0), +(11795,'zhTW','緊急狀況協定:章節8.2,段落C','不管有沒有受傷,身為一個空軍指揮官,我負責找出並交回所有麾下陣亡駕駛員的徽記。一直以來我都和嘶軸一起飛行,我們從未忘記交回駕駛員的徽記。$B$B我的傷讓我無法離開失事殘骸的安全區域太遠,不過或許你願意幫我去取回徽記?在這段時間內,我將準備執行我身為空軍指揮官的最後職責。','從嘶軸偵察駕駛員的屍體上取得6個嘶軸駕駛員徽記,將徽記帶回沸水之池交給『尾旋』艾基‧榫栓。','','到北風凍原的沸水之池找『尾旋』艾基·榫栓。','','','','',0), +(11796,'zhTW','緊急狀況協定:章節8.2,段落D','在我返回簡易機場報告前只剩最後一件事情要做。緊急狀況協定的章節8.2,段落D提到為了不讓我們的技術落入敵方手中,要求我盡可能地破壞所有的殘骸。$B$B如果你願意幫助我完成這個最後的職責,我會將我的火把交給你。我不敢想像要是這些機器落入部落的哥布林同行手中他們將會怎麼做。','『尾旋』艾基‧榫栓要你去破壞東邊的殘骸,南邊的殘骸,以及西北邊的殘骸。','','到北風凍原的沸水之池找『尾旋』艾基·榫栓。','破壞東邊的殘骸','破壞南邊的殘骸','破壞西北邊的殘骸','',0), +(11873,'zhTW','傳遞消息給嘶軸','你願意返回簡易機場並讓嘶軸得知我將會立刻前往繳交我的正式報告嗎?我得先去處理我的飛行機器殘骸,接著就會上路了。$B$B我確定嘶軸會知道我能夠存活以及恢復都得感謝你。$B$B我只想知道如果這個老人和我們一起飛行的話,他會怎麼處理。我真想念那些日子。','回到嘶軸簡易機場並與嘶軸‧滿閥談談。','','','','','','',0), +(11585,'zhTW','地獄吼的警覺','你好,$r!歡迎來到戰歌堡。看到這樣一個傑出的部落英雄回應了使命的召喚,我的心不禁澎湃了起來!$B$B這座固若金湯的堡壘,就是部落勇猛頑強的最佳證明,我們在北裂境連番征戰才建立了這個據點,通往寒冰皇冠的路途將由此開始,跟隨地獄吼之子的領導,我們將戰無不勝!$B$B卡爾洛斯等著你的到來。$B$B不勝即亡!','向戰歌堡的卡爾洛斯‧地獄吼交談。','','','','','','',0), +(11586,'zhTW','地獄咆哮的堡壘','Throm-Ka,$r!歡迎來到戰歌要塞。看到又一個傑出的部落英雄響應使命的召喚來到這裡,我深感自豪!$B$B這座固若金湯的堡壘象徵著部落的堅定決心。經過艱苦的奮鬥,我們在諾森德建起了這座堡壘。我們將從這裡出發,最終征服冰封王座。在地獄咆哮之子的領導下,我們必將贏得勝利!$B$B加爾魯什在下麵等著你。$B$BLok\'tar ogar!','與戰歌要塞的加爾魯什·地獄咆哮談一談。','','','','','','',0), +(11591,'zhTW','向鋼顎商隊回報','那個愚蠢的無賴,鋼顎,想要帶著我們商隊的補給抄捷徑越過一處坦卡族的墓地!$B$B而我們才剛始經營和他們的關係!$B$B現在商隊躺在遺跡中,被我們所驚醒的坦卡鬼魂所攻擊。$B$B往南邊去,看你能否解決這個問題,$c。我派了蠻兵怒拳和一些其他人去幫忙。$B$B你何不去看看能幫得上什麼忙。','和鋼顎商隊的蠻兵怒拳談談。','','','','','','',0), +(11593,'zhTW','可敬的死者','我們死者應該要有個英雄般的葬禮,但我們沒辦法在坦卡族的聖地埋葬他們。$B$B我不會要你把他們的屍體拖回來這裡,但帶著這個然後深入陵墓。當你經過那些死去的商隊守衛和工人時,用火炬點燃他們。$B$B向我們的死者致敬,$c!','鋼顎商隊的蠻兵怒拳要你使用她的火炬燒掉10具死亡的商隊守衛或死亡的商隊工人的屍體。','','到北風凍原的鋼顎商隊找蠻兵怒拳','點燃死去的商隊守衛與工人','','','',0), +(11595,'zhTW','戰歌堡的防禦','地獄吼把部落的重擔扛在自己肩上。不要因為他的脾氣就妨礙了你應盡的職責,$n。$B$B<薩魯法爾點點頭。>$B$B你以為我會忘記一個奧格瑪英雄的名字嗎?我可不是每天都可以享受把奈法利安的頭插在矛尖的快樂!$B$B天譴軍團開始對這座堡壘發動攻勢。我們的士兵穩住了防線,但是迫切地需要後援。去告訴瑞茲葛,他要駐守在戰歌堡外。','向霸王瑞茲葛回報,他就在戰歌堡南邊的臨時營房。','','','','','','',0), +(11596,'zhTW','戰歌堡的防禦','不要讓地獄吼妨礙你盡一個部落士兵的職責,$r。他肩負著這片酷寒荒原上的重責大任,他領導只會有兩個結果,戰勝天譴軍團或是艾澤拉斯所有生命的滅絕。因此我們需要你的力量與智慧。$B$B天譴軍團開始對這座堡壘發動攻勢。我們的士兵穩住了防線,但是迫切地需要後援。去告訴瑞茲葛,他要駐守在戰歌堡外。','向霸王瑞茲葛回報,他就在戰歌堡南邊的臨時營房。','','','','','','',0), +(11597,'zhTW','戰歌要塞的防禦','我們似乎總是在最糟糕的情形下相遇呢,甲蟲之王。自從我們上一次見面以後,你還一直在拯救世界嗎?$B$B<薩魯法爾輕聲笑了起來。>$B$B不管我們年輕的指揮官怎麼說,諾森德非常需要你的説明。$B$B如果能有一打像你這麼強大的士兵,我們現在已經在奧格瑞瑪舒服地烤火了。$B$B去向戰歌要塞南門外的拉茲格爾大王報導吧。','向戰歌要塞南方小屋裡的拉茲格爾大王報到。','','向霸王瑞茲葛回報,他就在戰歌堡外的南方主要通道。','','','','',0), +(11598,'zhTW','奪回力石礦場','當戰歌堡由10呎厚的鋼鐵與岩石所保護,這個礦場卻脆弱無助地受到奈幽蟲族的攻擊。$B$B<瑞茲葛指向西方。>$B$B就在這個礦場後面有著幾千名名天譴軍,等待著攻擊命令。只要奈幽蟲族攻破我們的內部防線,我們就會被阿薩斯的不死軍團所淹沒。$B$B我們絕不能讓它發生 - 所以我們要反攻那些礦場內的奈幽蟲族。$B$B鮮血與雷霆將與你同在,士兵!','戰歌堡的霸王瑞茲葛要你殺死15隻奈幽巴奈幽蟲族。','','到北風凍原的戰歌堡找霸主瑞茲葛。','殺死奈幽巴','','','',0), +(11602,'zhTW','切斷來源','礦場的空中偵察回報說,奈幽蟲族把他們的蟲卵收藏在靠近基地的鷹架上。這些聰明的野獸...他們讓蟲卵放在高處保持乾燥,遠離戰鬥中心。$B$B你要回去那邊破壞他們的蟲卵。找到它們,打爛它們,毀掉它們。$B$B每毀掉一顆蟲卵就表示少了一打的奈幽蟲族來啃食我們的屍體。','戰歌堡的霸王瑞茲葛要你摧毀10個奈幽巴卵囊。','','到北風凍原的戰歌堡找霸主瑞茲葛。','摧毀奈幽巴卵囊','','','摧毀尼魯巴爾蛛卵簇',0), +(11634,'zhTW','御風者托波爾','你是個強悍的傢伙,$n。我想你的才幹更適用於其他地方 - 像是徹底解決這整個該死的問題!$B$B<瑞茲葛指向西方。>$B$B上千名天譴軍,至少四個完整大小的漂浮死亡機械,天殺的誰知道還有些什麼。$B$B但你要去找出來,並且對付他們...沒錯,你要去把那些殺到我們門口的天譴軍全給打回地獄。$B$B到戰歌堡的頂端向御風者托波爾回報。他正在等著你。','向戰歌堡的御風者托波爾回報。','','','','','','',0), +(11636,'zhTW','魔法飛毯之旅','坦克,老兄。我講的是攻城器械!我們的重裝坦克就駐紮在靠近西方海岸的卡爾洛斯臺地。我們打算交給你一台坦克,而你要使用坦克好好地教導一下那些天譴軍,什麼才是部落的正義!$B$B唯一的問題就是把你送到那裡去。我們不能讓你搭乘蠍尾獅,太冒險了。$B$B你看到那邊那個小妖精嗎!那個金髮精靈?老兄,他的名字叫做亞尼。他會把你安全地送到海岸那邊。到那邊之後就去找殲滅者葛雷克洛!','和戰歌堡的亞尼談談,安排一趟前往海岸邊的旅行。等你抵達卡爾洛斯臺地之後,和殲滅者葛雷克洛談談。','','','','','','',0), +(11642,'zhTW','坦克可不會自我修復','我們得讓這些坦克重新恢復運作!它們沒辦法自行修復。莫布可以應付這些事情。和他談談,看他需要什麼。說不定你可以在他把我逼瘋,將他砍成兩半前讓他閉嘴!','跟卡爾洛斯臺地的莫布談談。','','','','','','',0), +(11606,'zhTW','耐心正是我們不需要的美德','我們可以殺掉所有看得到的奈幽蟲族並摧毀所有找得到的卵囊,不過那些東西會一直不停的出現,直到我們炸掉他們的管道和通道為止。當然,我們無法在沒有強大軍火的情況下完成這項工作。不幸的是,我們大多數的儲備物資都被哥布林和鐵匠用在攻城坦克和軍備上。$B$B我們在力石礦場外有一堆品質頗優良的補給品 - 就在所有奈幽蟲族垃圾下面。你只要到那裡去並將東西帶來給我。','戰歌堡的軍需官侯加斯要你去取回15箱戰歌軍火。','','到北風凍原的戰歌堡找軍需官侯加斯。','','','','',0), +(11608,'zhTW','把那些蟑螂埋起來!','東、南、西、北,這些方位是你應該要留心的。在這力石礦場中圍繞著這座堡壘的,是四個地點完美的奈幽巴坑道口。$B$B<侯加斯遞給一個包裹。>$B$B小心謹慎地處理這個包裹,$n。一個失手,你可能就會變成碎肉。$B$B包裹裡面是一些爆鹽深水炸彈。前往每個奈幽巴坑道口,然後在中心點安置深水炸彈。如果一切順利的話,隧道就會坍塌。$B$B快去吧!','戰歌堡的軍需官侯加斯要你使用爆鹽深水炸彈包裹來摧毀南方、東方、西方和北方的奈幽巴坑道口。','','到北風凍原的戰歌堡找軍需官侯加斯。','摧毀南方奈幽巴坑道口','摧毀東方奈幽巴坑道口','摧毀西方奈幽巴坑道口','摧毀北方奈幽巴坑道口',0), +(11611,'zhTW','被天譴軍抓走','<莫吐斯長嘆一口氣。>$B$B苦工啊...我們可以張貼一份告示讓奈幽巴免費取用大餐了嘛。$B$B懂嗎,苦工的問題是:(一)他們比泥還扶不上牆;而且(二)他們比痲瘋地精還要不堪一擊。想當然爾,他們第一個被天譴軍抓走!$B$B懂吧,這讓我陷入了窘境,沒有苦工,勞力工作就停頓了。沒有苦工就沒有建設。$B$B找出我的苦工,救出他們,$r。如果他們還活著,你可以在織起的網子裡找到他們,就在力石礦場裡面。','戰歌堡的工頭莫吐斯要你將5名戰歌苦工救出來。','','到北風凍原的戰歌堡找工頭莫吐斯。','釋放戰歌苦工','','','',0), +(11614,'zhTW','沒說出口的事實','我們奉瓦里瑪薩斯之命前來這裡!巡影者的任務很簡單:暗中偵察。嗯,另外帶點刺殺意味的暗中偵察。$B$B我的一位專業探員失蹤了。我有好幾天沒聽到他的消息,讓我不禁擔心起最糟的狀況。不,不是死亡!死亡還比較好。我擔心他也許逃亡...甚至於變成背叛者了。$B$B他最後出現的地點位於力石礦場的北邊。他之前在收集有關奈幽蟲族的情報。去找到他。$B$B他最好是死了...','找到力石礦場的巡影者盧瑟。','','','','','','',0), +(11615,'zhTW','奈幽巴秘密','你瀏覽著書頁,尋找任何重要的訊息。在最後一頁中你發現一些看起來像是發狂似的草寫:$B$B死靈領主。我計算至少有一打。$B$B西邊的農場被用來作為某種恐怖的天譴軍團生產地。$B$B一堆堆的犧牲品。$B$B我想他們就在我的上方。急沖沖的跑向堡壘。我不會被活抓的。$B$B懼毒血毒素。如果他們決定要咬我的話,他們將會得到一個驚喜。$B$B將這個訊息帶回去給巴素司。','帶著盧瑟的日記給戰歌堡的巡影者巴素司。','','到北風凍原的戰歌堡找巡影者巴素司。','','','','',0), +(11616,'zhTW','傳信給地獄吼','<巴素司撕掉最後一頁並把它捲起來。>$B$B馬上把這個拿給地獄吼!在這段時間內,我會派出一隻小隊去偵察農場。$B$B記得告訴地獄吼我們需要支援。','帶著巴素司的便箋給戰歌堡的卡爾洛斯‧地獄吼。','','到北風凍原的戰歌堡找卡爾洛斯·地獄吼交談。','','','','',0), +(11618,'zhTW','援軍到來...','<地獄吼搖頭。>$B$B你也許沒有注意到,我們在這裡是想要贏得一場戰爭,$r。我需要所有可用的士兵投入在交戰的重點上。這表示我們沒有其他真正的士兵可以分配在小規模的入侵上。$B$B<地獄吼停頓下來思考。>$B$B如果巴素司希望農場能夠增援...$B$B<地獄吼拍了一下手。>$B$B...他將會獲得援軍!去西邊的農場,向巴素司的刺客回報。讓他們知道援軍將要到來。','找到巡影者艾寇里斯,他就在戰歌堡西邊的戰歌農場前哨。','','','','','','',0), +(11686,'zhTW','戰歌農場','根據盧瑟的紀錄,天譴軍團目前使用這個地方做為那些怪物的培訓地,就是你在原野上看到笨重行走的那些東西。$B$B<艾寇里斯顫抖著。>$B$B那些怪物曾經是獸人...牛頭人...$B$B在想出一個計畫前,我們需要更多資訊。我要你去調查三個天譴軍團頻繁行動的地點:這裡西南邊的戰歌穀倉,正西邊的托普的農場,及北邊的舊戰歌屠宰場。$B$B一旦你完成了偵察,就回來找我。','戰歌農場前哨的巡影者艾寇里斯要你去偵察戰歌穀倉,托普的農場,及戰歌屠宰場。','','到北風凍原的戰歌農場前哨找巡影者艾寇里斯。','偵察戰歌糧倉','偵察托普的農場','偵察戰歌屠宰場','',0), +(11703,'zhTW','去找蓋特利','天譴軍團負責監督部落士兵劫持和轉化為不死怪物的代表正使用西北邊的農場做為生產地。巡影者蓋特利過去幾週都在監視著那隻怪物並收集到一些極為重要的訊息,可讓我們終結這場威脅。$B$B去找蓋特利並瞧瞧是否你可以協助他終結這個天譴軍團的生產線。你可以在這些農場西北邊境的廢棄塔樓裡找到蓋特利。','找到戰歌農場的巡影者蓋特利。','','','','','','',0), +(11881,'zhTW','帶回來!','你有看到到處低飛掠過的飛行器嗎?那就是地精的傑出創造物。$B$B我一直在想要親手把玩他們的科技產品,而適當的機會自己送上門了。一架偵察機就墜毀在水泉原野。$B$B前往一架墜毀的機器旁吹響這個哨子,接著我那可靠的騾子,潔妮會回應你。她將會跟隨著你並馱運可利用的殘骸,不過你一定得保護她的安全。她只要一遭到攻擊就會開始丟棄貨物。','協助潔妮帶著她所有的貨物從失事地點抵達坦卡雷村的菲奇司‧絞輪處。','','到北風凍原的坦卡雷村找菲奇司·絞輪。','將潔妮連同貨物安全的帶回來','','','',0), +(11888,'zhTW','前往坦卡雷村','$R,酋長要我等待...但坦卡雷已經沒有時間了!$B$B他們談到你的英勇。與其等待卡爾洛斯派出援助,我還不如請你來協助我的族人。$B$B坦卡雷村就在東北方的遠處,沿著路從東邊離開堡壘,然後在岔路往北轉。沒過多久之後,你會遇到另一個岔路,沿著路往東,經過氾濫平原上南邊與東邊的大水池。$B$B等你抵達之後和賢者地空談談。','和坦卡雷村的賢者地空談談。','','','','','','',0), +(11890,'zhTW','他們在搞什麼鬼?','地精在西邊的水池附近捲入了一些麻煩。這根本就是他們用那些自稱是發明的東西污染土地的報應。$B$B我要你前往他們的幫浦站,看看他們到底怎麼了。然後向我回報。','調查嘶軸幫浦站四周的區域。然後向坦卡雷村的賢者地空回報。','調查菲茲蘭克泵站附近的區域。','到北風凍原的坦卡雷村找賢者地空。','','','','',0), +(11895,'zhTW','駕馭風暴','聽你的敘述,那些金屬生物似乎很好應付。但首先,你必須要駕馭風暴。$B$B我身後的小屋有一根圖騰。等你準備好,將你的意志專注在圖騰上,風暴將會到來。你必須要擊敗風暴,然後將他的精華吸收到你的體內。$B$B如果還有別人在那邊,你們可以一起合作擊敗它。等你完成之後,回來找我,$c。','擊敗狂亂風暴,然後回到坦卡雷村找賢者地空。','','到北風凍原的坦卡雷村找賢者地空。','駕馭風暴','','','',0), +(11896,'zhTW','電擊弱點','你的體內現在有了風暴的力量。我將會提供你可用來集中那股力量的媒介,並弱化池子中的機器人。$B$B拿著這個閃電魔棒。使用它來對付你在西邊大池區所發現的機械地精機械產物。不必使用魔棒對付機械地精;主母泰嘉對它們別有想法。$B$B一旦機器人被風暴之力弱化了,就徹底的拆除它們!','當機器單位處於被風暴之力弱化的狀況時,摧毀嘶軸幫浦站週遭大池區中,除了機械地精以外的任意15個機器單位。$B$B完成後,向坦卡雷村的賢者地空回報。','','到北風凍原的坦卡雷村找賢者地空。','虛弱並摧毀機器人','','','',0), +(11907,'zhTW','副手','一般都知道齒輪大師梅卡佐德有四個副手在管理水池的機器人。$B$B我們得要終止這些傢伙!$B$B我們的遠偵斥候和雪地追蹤者說,如果你能把西點抽水站、北點抽水站、中點抽水站和南點抽水站的活門給關掉,那四個副手就會立刻出現阻止你破壞他們的運作。$B$B抽水站就在水池旋光的中央,圍繞著幫助站。$B$B快去吧,$n!','打倒噹機、ED-210、極限爆衝和研磨者,然後向坦卡雷村的賢者地空回報。','','到北風凍原的坦卡雷村找賢者地空。','','','','',0), +(11894,'zhTW','拼湊貼補','記得你帶給我的那些地精導管帶?$B$B嗯,我找到了一個地方可以派上用場。這台飛行器的結構拼湊得有點勉強,如果我還希望這玩意兒能飛的話,我就得強化它。$B$B那邊的杜然告訴我坦卡族使用蒸汽燻製馴鹿皮革來製作防水容器。沼澤馴鹿在村子附近生活,還有南方的氾濫平原。弄來你能找到最好的皮革,然後在水泉原野的蒸汽孔將皮革燻製好。','坦卡雷村的菲奇司‧絞輪要你帶給他5張蒸汽燻製皮。','','到北風凍原的坦卡雷村找菲奇司·絞輪。','','','','',0), +(11643,'zhTW','莫布的氣動式坦克外鑽模夾具','這些板手根本沒用,兄弟。我需要我的氣動式坦克外鑽模夾具好讓那些東西動起來!不幸的是,我把我的舊工具掉在臺地的另一邊了。就在獸欄旁邊的低矮小屋裡。你得幫我去拿來,因為我天殺的很清楚實在不應該靠近那些迷霧。$B$B喔對了,兄弟,要小心那些迷霧。就是那些迷霧把海岸給扯碎了。','莫布要你找回他的氣動式坦克外鑽模夾具,他就在北風凍原的回聲海岸。','','到北風凍原的回聲海岸找莫布。','','','','',0), +(11899,'zhTW','除咒的靈魂','西方水池的機械地精對我們來說是個謎團。他們在地精們從幫浦站及其周邊失蹤沒多久之後出現。$B$B他們是非自然的危害,必須要處理掉。$B$B帶著這個攝魂器並且對機械地精的屍體使用來捕捉他們的靈魂。然後回來找我,我們可以將他們釋放出來,看他們到底發生了什麼事。','使用主母的攝魂器來捕捉10個嘶軸機械地精的靈魂。然後回坦卡雷村向主母泰嘉回報。','','到北風凍原的坦卡雷村找主母泰嘉','捕捉地精靈魂','','','',0), +(11906,'zhTW','淨化水池','<一滴眼淚從鐵眼的臉上落下。>$B$B我聽說你要往西方的水池去。我希望你在那邊的時候能幫我做點事情,$r。$B$B那些絲毫不在意這片土地的地精,還在用他們的機器繼續污染著大地。我要你收集你看到的任何零件。$B$B把那些東西交給我。在我們離開此地以前,我要看到他們被妥善地處理。','收集15個嘶軸的備用零件,然後交給坦卡雷村的鐵眼。','','到北風凍原的坦卡雷村找鐵眼。','','','','',0), +(11652,'zhTW','納森平原','一旦你準備好了,就跳上一台坦克,開到東南方的納森平原去。$B$B使用坦克的武裝消滅天譴軍團。如果你被擋住了,「肉鋸」可以把他們撕碎,然後就用地雷解決他們!如果你找到我們的士兵,直接載走!最後一點,油箱散佈在平原各處。$B$B試著接近中央的建築物,然後觀察那裡到底發生了什麼事。$B$B如果你把這些全部做完並且還活下來,就直接去找地獄吼!','駕駛部落攻城坦克到納森平原摧毀100個天譴士兵,並救援3個受傷的戰歌士兵。你同時必須查出天譴軍團攻擊領導人的身分。$B$B成功之後,向戰歌堡的卡爾洛斯‧地獄吼報告。','鑒別天災軍團的指揮官','到北風凍原的戰歌堡找卡爾洛斯·地獄吼。','消滅天譴軍部隊','救出受傷的戰歌士兵','','',0), +(11651,'zhTW','非常感謝...','感謝你所提供的協助,兄弟。你可以通知葛雷克洛讓他知道坦克已經準備好要行動了。希望你可以一次將這個地方清理乾淨!','與回聲海岸的殲滅者葛雷克洛談談。','','','','','','',0), +(11674,'zhTW','賢者高臺不見了','現在大地上有許多神秘的事物在活動。我們的一位賢者,高臺,愚蠢地只帶了一位遠偵斥候就往北邊去調查死亡獸穴附近某件怪異的事。$B$B你問說,這個獸穴是什麼嗎?那是個猛瑪象人的神聖領域,也就是他們老年將亡之時前往的地方。她幾天前在牠們附近看到了某樣東西從天而降。$B$B如果你想要成為坦卡族的朋友,我會要你去尋找並協助她。她並未固執到無法接受你協助的程度。','到北風凍原的死亡獸穴附近尋找賢者高臺。','','','','','','',0), +(11675,'zhTW','合宜的死','垂死獸穴的猛瑪象人被捲入了一場瘟疫。我們一定要找出原因,但首先我們得結束他們的苦難。$B$B$R,你必須要前往北方攀上我們前面的坡地,然後盡可能地消滅那些可憐的生物。','消滅10隻染疫猛瑪象人,然後向垂死獸穴的賢者高臺回報。','','到北風凍原找賢者高臺。','','','','',0), +(11677,'zhTW','阻止瘟疫','我相信瘟疫是由上方洞穴中的某個東西所引起的。$B$B$C,我要你拿著這些種子。通常我都用它們來抵禦天譴軍團,但它們也能用來消解這些獸穴中所進行的骯髒勾當。$B$B找到瘟疫的來源,然後把種子丟進去。','賢者高臺就站在垂死獸穴的南方,要求你使用高臺的淨化種子將垂死獸穴的瘟疫大鍋中和。','','到北風凍原找賢者高臺。','中和瘟疫大鍋','','','',0), +(11676,'zhTW','慈悲的自由','他們沒殺死的士兵就被關在散佈於農地上的籠子裡。經過幾次偷竊行動,我們已經設法找到了幾隻鑰匙,不過我們無法順利的靠近任何囚犯。$B$B我們需要你的『天賦』來保護那些鑰匙並釋放囚犯。痛擊這些死靈領主和畸形者,拿走他們的鑰匙。使用那些鑰匙來釋放天譴囚犯。','戰歌農場前哨的巡影者卡納利亞斯要你去釋放5個天譴囚犯。','','到北風凍原的戰歌農場前哨找巡影者卡納利亞斯。','釋放天譴囚犯','','','',0), +(11684,'zhTW','偵察坑道口','你可以感覺到土地的震動嗎?$B$B天譴軍團的奈幽蟲族正在地面深處下活動著。他們已經出現在水泉原野的西南邊,騷擾著冬風酋長派出的巡邏隊。$B$B<這位坦卡族長者遞給你一份磨舊的地圖。>$B$B或許單獨一人可以成功到達巡邏隊無法前往的地方。帶著這份地圖前往水泉原野,並標記下奈幽蟲族坑道口的位置。','坦卡雷村的主父瑪哈要你使用水泉原野地圖去紀錄南部坑道口,西北部坑道口,以及東北部坑道口的位置。','','到北風凍原的坦卡雷村找主父瑪哈。','標記南部蟲孔的位置','標記東北部蟲孔的位置','紀錄西北部坑道口的位置','',0), +(11685,'zhTW','元素之心','現在我們知道奈幽蟲族坑道口的確切地點了,我們可以破壞它們,停止天譴軍團進攻,並嚴重削弱他們的軍力。馴風者巴拉知道有個方法可以控制元素,進而摧毀奈幽蟲族目前使用的通道,不過她會需要你的幫忙。$B$B村子的東南方,接近冰凍之境另一邊的海岸,你可以找到一個由冰凍土元素控制的區域。這些元素的心臟正是馴風者巴拉需要的東西。','帶5個元素之心給坦卡雷村的馴風者巴拉。','','到北風凍原的坦卡雷村找馴風者巴拉。','','','','',0), +(11695,'zhTW','元素之怒號角','我可以用這堆無生命力的石頭製作出一個元素的模樣,但是讓它活起來則是完全不同的一件事。因此,我們需要幫助,還需要一點運氣。$B$B傳說中提到一件名為元素之怒號角的古老神器,由一位偉大的坦卡族英雄所發現的。我會借你這個傳說的複製卷軸。我不知道這個傳說是不是真的,但這是我們最好的選擇。如果傳說是對的,這個號角有一部份就位於環繞著村子西南邊和北邊的氾濫平原上。','從波嚥酋長和汨驚酋長身上取回號角的下半部和號角的上半部,並將這兩樣東西帶給坦卡雷村的馴風者巴拉。','','到北風凍原的坦卡雷村找馴風者巴拉。','','','','',0), +(11706,'zhTW','崩壞','我已經使用這個元素之怒號角建立並約束住艾魯威斯。當你站在接近水泉原野最南邊的坑道口時,他將會回應號角的召喚。$B$B艾魯威斯釋放的震動應該會崩壞奈幽蟲族的通道並終結他們左右兩翼的攻擊。要是奈幽蟲族的指揮官在震動後現身我也不會感到訝異。如果通道的崩壞無法逼退他們的攻擊,那麼擊敗他們的頭目則一定會讓他們撤退。','坦卡雷村的馴風者巴拉要你使用元素之怒號角崩潰奈幽巴坑道口,並擊敗克萊克希斯克領主。','','到北風凍原的坦卡雷村找馴風者巴拉。','崩壞奈幽蟲族通道','摧毀蛛魔隧道','','',0), +(11688,'zhTW','該死的不潔豬隻','看看牠們!我這些漂亮的科多獸無力去保護自己遠離那些不潔的豬隻!我需要你替我爭取些時間,$r。我想我可以治癒生病的科多獸,不過你得避免讓那些骸豬靠近牠們,否則將沒有治癒的餘地了!$B$B到外面去,送那些豬入土為安 - 永遠!','戰歌農場前哨的農夫托普要你去殺了10隻骸豬。','','到北風凍原的戰歌農場前哨找農夫托普。','','','','',0), +(11690,'zhTW','帶牠們活著回來','帶著這個坐騎銜鐵,$n。你會注意到我在護套上放了一個微型機器藥劑師。那東西將會馬上在科多獸咬下時將感染治癒。一旦你治癒牠們,你會需要將牠們騎回家。牠們會很虛弱,所以你需要慢慢的引導他們回到這裡。$B$B將我的寶貝們帶回來給我,$n!$B$B最後一件事,你只有10分鐘!那就是銜鐵裡解藥的持續效果。','戰歌農場前哨的農夫托普要你去營救8隻受感染的科多獸。','','到北風凍原的戰歌農場前哨找農夫托普。','營救科多獸','','','',0), +(11689,'zhTW','帶著噩耗回來','主母必須要知道,$n。$B$B你願意回到坦卡雷嗎?告訴她我很快就會跟上。','和坦卡雷村的主母泰嘉交談。','','','','','','',0), +(11687,'zhTW','博士與巫妖領主','有兩個人...一定...得死。$B$B就是上面的...博士還有...巫妖領主。去找到他們...殺掉他們...在...$B$B...一切都...太遲...以前...','殺死剃刀獰笑博士和巫妖領主冽冬。接著回到北風凍原的死亡獸穴南邊找高臺賢者。','','到北風凍原找賢者高臺。','','','','',0), +(11678,'zhTW','尋找鬃角','鬃角應該要回來了。$B$B我們來此的其他理由則是要調查天譴軍墜落在西方的建築物。他的魯莽可能會讓他自己惹上麻煩。$B$B$n,前往那個地方幫忙尋找他,拜託。','在塔爾拉瑪斯找到遠偵斥候鬃角。','','','','','','',0), +(11693,'zhTW','喔太好了...染疫猛瑪象人!','汀基和我來到這裡追蹤一些老猛瑪象人。很明顯的,那些洞穴裡就是他們赴死之地。$B$B當然,我們並不知道他們是在裡頭是怎麼染上瘟疫的。我們不能讓染疫的生物四處遊蕩;太不健康了。$B$B唉呀,為什麼你不趁我想出我下一步該怎做前先去解決一些染疫的生物呢?','殺死10個染疫猛瑪象人,接著回到垂死獸穴的南方找碧西‧扭柄。','','到北風凍原找碧西·扭柄','','','','',0), +(11692,'zhTW','找出碧西','你是個$g英雄:女英雄;。我還有個問題!$B$B我的老闆,汀基,跟碧西‧扭柄一起去了東邊,而我沒辦法讓這東西正常運作!汀基是唯一可以修理它的人,而且我們真的需要它百分之百的運轉。$B$B你覺得你找得到他們嗎?碧西說過什麼,關於追蹤一些老猛瑪象人到一個叫做垂死獸穴的地方之類的話。$B$B我猜你可以在那兒找到他們。$B$B你可以搭個便車過去,跟跑道上的卡拉‧參星談談就是了。','莫爾斗‧旋輪請你到垂死獸穴的南方找碧西‧扭柄。','','','','','','',0), +(11710,'zhTW','這個運輸是怎麼回事?','東邊到處散落著備用零件,沸水池、水泉原野...到處都是,真見鬼了,說不定連幫浦站都是。幫我帶一些回來。也許我有辦法讓外向的傳送正常運作,當然最好事能讓內向的傳送穩定。$B$B我痛恨看到另一場意外...','收集15個嘶軸的備用零件,然後送交給嘶軸簡易機場的莫爾斗‧旋輪。','','到北風凍原的嘶軸簡易機場找莫爾斗·榫紡。','','','','',0), +(11694,'zhTW','洞穴裡的古怪','所以呢,雖然你已經處理了那些染疫野獸,但是我還是偷看了一下洞穴的內部。$B$B裡頭的教徒們正在進行瘟疫化!$B$B他們將某種有毒的混合物放在大鍋中釀煮著。我有一種平常用來解毒的粉末,我將它混合了其它的東西。我想這將可中和他們的釀煮物!$B$B帶著這個粉末前往其中一個洞穴試試看有沒有效。','潛伏在垂死獸穴南方的碧西‧扭柄要你對垂死獸穴瘟疫大鍋使用碧西的抑制粉末來中和它。','','','中和瘟疫大鍋','','','',0), +(11698,'zhTW','不如徹底消滅天譴軍團','如果那些洞穴上方的教徒們可以在這場破壞中存活下來,那麼只能假定西邊那個倒坍的亡域當中仍充滿著天譴軍團。前方的池子也一定滿滿的都是天譴軍!$B$B雖然你人在塔爾拉瑪斯,$c,你覺得你可以殺光所有在那發現的巫妖王奴僕嗎?','摧毀20個位於塔爾拉瑪斯和膿瘡之池的天譴軍,不限種類。接著,回到北風凍原的垂死獸穴正南方找碧西‧扭柄。','','','摧毀塔爾拉瑪斯的天譴軍','','','',0), +(11700,'zhTW','通知碧西','我不幸的雙胞胎現在正在不知名的某處。$B$B我很確定她沒回到簡易機場來。事實上,不管她最後到了哪,氣溫都會比這裡還冷。不過我只能偶爾「感覺」到她而已。$B$B喔好吧,我會重新裝配這東西然後盡快將自己傳送回簡易機場。在這同時,你覺得你可以到東邊去通知碧西,到時我將會跟她在那會合嗎?$B$B謝啦,$n!','與垂死獸穴南方的碧西‧扭柄談談。','','','','','','',0), +(11701,'zhTW','回到簡易機場','好了,我想我也要開始返回簡易機場了。當然,拖著這隻受傷的腿我會移動的比較慢。$B$B唉,你覺得你可以在我抵達之前先到那裡將好消息傳給老嘶軸嗎?我敢確定一定會有獎勵等著你。$B$B謝啦,$n!','到北風凍原的嘶軸簡易機場找嘶軸‧滿閥談談。','','','','','','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_03' WHERE sql_rev = '1647383840526735676'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_04.sql b/data/sql/updates/db_world/2022_03_18_04.sql new file mode 100644 index 000000000..6844408aa --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_04.sql @@ -0,0 +1,213 @@ +-- DB update 2022_03_18_03 -> 2022_03_18_04 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_03'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_03 2022_03_18_04 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647383981192969219'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647383981192969219'); + +REPLACE INTO `item_template_locale` (`ID`, `locale`, `Name`, `Description`, `VerifiedBuild`) VALUES +(42482, 'zhTW', '紫羅蘭堡鑰匙', '', 0); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(12664,'zhTW','黑暗地平線','啊,又一個回應巫妖王召喚的傢伙。$b$b<德拉庫魯聞了聞你。>$b$b才剛剛轉生,嗯?你身上還留著活人的味道哪!$b$b想要巫妖王祝福的人可是排了好長一條隊伍哪。你得脫穎而出,證明自己擁有真正的實力才行。$b$b放眼祖爾德拉克,我認為你是有潛力的。所以我送了邀請函給你。$b$b剩下的就看你怎麼做了...$b$b去跟血袋講講話,參觀一下祖爾德拉克。如果你要證明你的價值,還有很多事得做呢。','沃塔魯斯的德拉庫魯要你跟血袋交談,然後參觀祖爾德拉克。','','到祖爾德拉克的沃塔魯斯找德拉庫魯霸主。','參觀完祖爾德拉克','','','',0), +(12671,'zhTW','空中偵察','咱們差不多是時候把飛機準備好然後讓這個地方運作起來了。教授一直要我查探從東北方來的氣候異象。$B$B問題是,如果我們要飛進未探索區的話,我需要一位副駕駛。我才不要一個人飛去那個鬼地方。$B$B怎麼樣,$g猛男:辣妹;?也許你可以學到點什麼啊。只要你學會處理北風...要飛去哪裡都不是問題。','協助駕駛員維克完成偵察飛行。','偵察飛行','到休拉薩盆地的湖畔起降場找駕駛員維克交談。','','','','',0), +(13159,'zhTW','牽制','這是監獄的鑰匙。$b$b我和我的人馬會待在這裡,萬一你無法壓制攻勢,我們將是最後一道防線。$b$b記得和辛克拉麗中尉交談。她會讓你進入監獄的防線。$b$b快點,$r。沒有時間了。若沒有你的協助,我留在裡面的人馬撐不了多久的。記得向我回報,一旦入侵的勢力成功地被壓制。','守望者艾圖拉斯要你進入紫羅蘭堡,並擊退藍龍的攻勢。一旦霞妮苟莎被殺害,向艾圖拉斯回報。','','到達拉然的紫羅蘭堡找守望者艾圖拉斯。',' 殺死霞妮苟莎','','','',0), +(13641,'zhTW','先知水晶','既然我們知道黑騎士的故事都不是真的,我們得找出他和那些被謀殺騎士的關連。$B$B我知道一個方法能找出他們是怎麼死的,但需要一些稀有的材料。我們要一顆先知水晶,只有在聚集於夜精靈遺跡的無縛的先知身上才找到,就在水晶之歌森林中部的凋落樹林。找到那些先知,$n,把他們身上的水晶帶給我。','把先知水晶帶給銀白聯賽場地的十字軍萊達菈。','','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','','','','',0), +(13633,'zhTW','西部荒野的黑騎士?','我想你應該聽過那個叫做黑騎士參賽者的惱人謠言。據說任何預定要和他比賽戰鬥的人全都遭遇不測。$B$B當然,我們沒有確切的證據,但調查一下這位騎士也無傷大雅。$B$B他自稱來自西部荒野的庫珀家族。你能去一趟西部荒野拜訪他在月溪鎮西邊的住所嗎?看看你能不能找到什麼東西證明他的說詞。','調查黑騎士的說詞,然後帶著你的發現回到銀白聯賽場地去找十字軍萊達菈。','','到寒冰皇冠的銀白聯賽場地找十字軍萊達菈。','','','','',0), +(24510,'zhTW','進入冰凍城塞','$C!快來這邊,我有話必須跟你說!$B$B我的主人,珍娜‧普勞德摩爾女士,她在冰冠城塞的戰鬥中發現了一個洞穴,可以進入一個稱之為眾魂熔爐的地方。她在離開前吩咐過我,要我盡量找人來幫忙...然後,這個嘛,我希望那個人就是你。$B$B拜託一下,快過去那裡找她吧。','從冰冠城塞的側邊進入薩倫之淵,並且去找珍娜‧普勞德摩爾女士。','','','','','','',0), +(24499,'zhTW','受苦靈魂的回聲','在我方人手嚴重不足的情況下,冒險進入城塞簡直跟送命沒什麼兩樣,但絕對不能錯過如此罕見的機會。$B$B往遠方的那頭清出一條路,鞏固薩倫之淵的入口。我們必須佔領該處,才能讓我方的人員攻入城內。','殺掉布朗吉姆以及靈魂吞噬者以控制薩倫之淵的入口。','','到眾魂熔爐的後方找珍娜·普勞德摩爾女士交談。','','','','',0), +(24683,'zhTW','薩倫之淵','快點,通過傳送門!我會在另一頭與你會合。','在薩倫之淵裡面與珍娜‧普勞德摩爾女士會合。','','','','','','',0), +(24498,'zhTW','入城之徑','他們強迫被俘虜的我方士兵在礦區工作!$B$B英雄...請殺掉俘虜他們的人,釋放那些士兵...當我們挑戰天譴領主提朗紐斯的時候,我們會需要他們的援助。','釋放15名聯盟奴隸並且殺掉鍛造大師加弗羅斯。','','到加弗羅斯的平臺附近找馬汀·維特斯交談。','釋放聯盟奴隸',' 鍛造大師加弗羅斯','','',0), +(24710,'zhTW','逃離深淵','我們必須經由主要的道路穿過洞窟,前往提朗紐斯所在的高地。$B$B他要是想阻止我們進入城塞本體,就不得不在那裡與我們一戰。$B$B出發吧,$c。當你迎戰提朗紐斯的時候,我與我的同伴會與你們並肩作戰。','殺掉天譴領主提朗紐斯。','','到薩倫之淵後方,找珍娜·普勞德摩爾女士交談。','','','','',0), +(24711,'zhTW','霜之哀傷','我們必須加倍努力,英雄。我們已經奮鬥了這麼久...已經如此接近我們的目標。$B$B我得耽擱一點時間,讓伊蘭卓返回飛船上。失去這麼多人手、得以這麼少人鞏固通道,在這當下我無法確定我們能否脫逃。$B$B繼續前進吧。我會在倒影大廳與你會合。','在倒影大廳入口與珍娜‧普勞德摩爾女士會合。','','','','','','',0), +(24586,'zhTW','銳鱗必須死!','銳鱗通常蟠踞在奧杜亞的巨熔爐附近。然而,最近她一直對著泰坦建築群外頭的地面上噴火。$B$B雖然育母的故事是場悲劇,但是她對北裂境眾生造成的威脅迫在眉睫。六法議會已經下令,要取銳鱗的命!','殺死銳鱗。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(12521,'zhTW','赫米特‧奈辛瓦里到底在哪裡?','當我聽說傳奇的赫米特‧奈辛瓦里坐船來到休拉薩盆地,我自願去尋找他的探險隊。我們對休拉薩所知有限,不過據說那裡是這個寒凍大陸中的蒼鬱樂土。$B$B赫米特同意送一些獨特的植物、試劑和水晶的樣本回去。但卻沒有他們的消息,蒙特‧膛擊負責帶來補給品,但他卻也一直沒有回來。如果你願意去看看,我可以派我的飛行器送你一程。','當你準備要前往休拉薩盆地時,去跟大法師潘塔魯斯談談。等你抵達之後,可以和蒙特‧鼻擊談一談,他就在休拉薩盆地的叢生沼林。','','','','','','',0), +(12489,'zhTW','歡迎來到休拉薩盆地','所以說,你是從哪來的?我不認為那個白癡大法師也派你來?$B$B你人沒事還真是幸運,$g小夥子:姑娘;!他們差點就把你炸死了!$B$B這叢林是個要命的危險之地,尤其是有風險投資公司在的地方。$B$B你真是蠢貨一個!去見老闆...他會讓你搞清楚狀況。營地就在往西北方的小徑盡頭。$B$B現在就去,蠢貨!','循著往西北方的道路前往蒙特所提及的營地。','','','','','','',0), +(11913,'zhTW','不要冒險','我聽了你向吉羅德回報的內容,但我可不同意。如果教徒要利用他們邪惡的瘟疫在礦坑裡的穀物中下毒,那麼他們大可在礦坑外做這件事,同時也比較容易。$B$B我們沒時間把中毒與否的穀物挑撿開,只能趕緊全燒掉。$B$B拿著火炬,把外頭所有袋子裡的穀物燒掉。如果我們熬過這波攻擊卻死於瘟疫,那就真的是件悲劇了。','溫蒂‧達倫需要你使用溫蒂的火炬,將8袋遠郡穀物燒毀。','','到北風凍原的遠郡找溫蒂·達倫。','燒毀遠郡穀物','','','',0), +(11908,'zhTW','相關用具','我負責管理收割魔像 - 在天譴軍團摧毀我們大部分的農場之前,這是個很重要的工作。但我有個主意能讓這些魔像被重新利用。$B$B我想我可以改寫收割機器人讓它們可以協助我們和天譴軍戰鬥。$B$B不過,我並不是這方面的專家,所以我需要我的手冊。但問題是,我把手冊掉在工坊了...就是礦坑旁邊那棟燃燒的建築。你願意幫我去搶救出手冊嗎?','杰瑞米亞‧豪寧要你從遠郡礦坑旁燃燒的建築中找回一本書《農地、工廠和工坊》。','','到北風凍原的遠郡找杰瑞米亞·豪寧。','','','','',0), +(11903,'zhTW','是行動的時候了','那麼,$n,在遠郡的我軍戰至最後一兵一卒以後,我們只剩下一件事情可以做:那就是親自和天譴軍團戰鬥。$B$B我們已經將遠郡剩下的居民訓練成民兵。但沒有你幫助,他們幾乎沒有獲勝的希望。去幫助他們。我和小夥子們會監視這條路。我們絕不會讓天譴軍越雷池一步!','遠郡的吉羅德‧葛林要你去殺死14個染疫食腐者。','','到北風凍原的遠郡找吉羅德·葛林。','','','','',0), +(11928,'zhTW','遠郡','我手下的小夥子們應該可以從這裡接手,$n。驍勇要塞能承受更嚴重的攻擊。但我擔心我們在遠郡的農場和礦坑。$B$B在入侵發生之前,我們曾派出一整隊的特遣隊去保護採礦活動–他們應該足以保護那些平民。$B$B吉羅德‧葛林負責領導那裡的居民。從驍勇要塞的北牆出去有一條道路,沿著路走應該就會找到他。看看你能不能協助他們。','前往北風凍原的遠郡,然後和吉羅德‧葛林談談。','','','','','','',0), +(11901,'zhTW','軍隊?什麼軍隊?','這裡到處都是天譴軍,$c。我們把農夫與礦工組織成民兵,但光這樣是成不了事的。$B$B驍勇要塞派來的特遣隊在防守礦坑。我們已經好幾天沒有他們的消息了!$B$B如果你真的想要幫助我們,那你何不去礦坑瞧瞧,看看發生了什麼事?說不定我們可以讓他們派遣一些援軍過來。','遠郡的吉羅德‧葛林要你前往北方的礦坑,查出派遣到那邊去的特遣隊發生了什麼事。','','','','','','',0), +(11902,'zhTW','有毒的證據','那一袋袋穀物所發出的惡臭讓你聯想到天譴瘟疫。這也許可以解釋那些在防守礦坑的步卒。$B$B你最好盡快將消息帶給吉羅德‧葛林。','向遠郡的吉羅德‧葛林回報。','','','','','','',0), +(11904,'zhTW','勞動的果實','天譴軍團一直持續出現...不過我們不能放棄!聽著,$n。那個礦坑內有一部貨車,裝載著最後一批聯盟長久以來在這片大陸尋找的礦石。$B$B問題在於,貨車的啟動手把被鎖住了。當軍隊進入裡面時,傑考伯司上尉強行沒收了所有重要的裝備,包括貨車啟動手把鑰匙。$B$B那股感染了礦坑裡士兵的瘟疫必定也感染了傑考伯司。去從他身上取得鑰匙並回收礦石。','前往遠郡的礦坑,從傑考伯司上尉身上取得貨車啟動手把鑰匙,並用它來鬆開運礦車。完成任務後回到遠郡找吉羅德‧葛林。','','到北風凍原的遠郡找吉羅德·葛林。','鬆開運礦車','','','',0), +(11962,'zhTW','最後一次遞送','就是這個。加上你最後搶救出來的礦石,我們現在有足夠的量可以送給驍勇要塞了。$B$B如果遠郡會被從艾澤拉斯的表面上抹去,那起碼讓我們可以記得是誰第一個守護我們土地,而是誰最後一個放棄。$B$B帶著這塊礦石給希爾妲‧石鑄 - 她是我的一位好友。告訴她用這塊礦石做出一點好武器來。接下來的日子我們會需要很多。','把遠郡礦石箱送交給驍勇要塞的希爾妲‧石鑄。','','到北風凍原的驍勇要塞找希爾妲·石鑄。','','','','',0), +(11963,'zhTW','給遠郡的武器','遠郡受到攻擊,而吉羅德卻一心一意地把我的礦物給送來?我發誓那個男人就跟任何我們前線的士兵一樣有心。$B$B如果平民願意為了自己的土地而戰,我們就不能讓他們失去那些地方。我們或許沒辦法撥出部隊,但我們可以送給他們武器。$B$B雖然這裡到處都是新兵,但我會靠著你帶來的礦物撐住這裡。告訴吉羅德武器已經在路上了。','回去找遠郡的吉羅德‧葛林。','','','','','','',0), +(11965,'zhTW','集結!','遠郡現在還有一絲機會,$n。這是我們全力換來的,也是靠著你的幫助。$B$B我們現在只需要一個集結點。我已經讓手下把武器運送到市鎮廳。去敲響市鎮廳的警鐘,好讓倖存者可以在那邊集結。$B$B該是時候讓天譴軍團瞧瞧我們的骨氣。','前往遠郡的市鎮廳,敲響裡面的警鐘。','','到北風凍原的遠郡找吉羅德·葛林。','敲響遠郡警鐘','','','',0), +(11727,'zhTW','英雄上場','有你為伴真好,$n。我們全都聽說過你過往的事蹟。$B$B如你所知,烏瑞恩國王大舉興兵至北裂境對抗阿薩斯的部眾。不過,軍隊要是沒有真正的英雄鼓舞和帶領也是無用。$B$B我要你去當我手下心中的英雄。與他們並肩對抗包圍我們城寨的天譴軍團。$B$B回報給內堡外的錘丘中士。驍勇要塞不能淪陷。我們戰事的未來就靠這個地方了。','回報給驍勇要塞的錘丘中士。','','','','','','',0), +(11797,'zhTW','圍攻','哎呀,哎呀,哎呀。看到阿爾洛斯拿出他的大槍來真是好啊。$B$B別誤會我的意思 - 我們大家都盡力了,不過你們當中的重要人物與他們並肩作戰更能將情勢轉而有利於我們。我不知道我們還能抵擋這些不死的奈幽蟲族多久。$B$B出去幫我殺死一些蠕行者如何?讓這些小子見識一下怎麼做才是正確的。','錘丘中士要你去驍勇要塞外的納森沙地殺了6個地穴爬行者。','','到北風凍原的驍勇要塞找錘丘中士。','','','','',0), +(11889,'zhTW','死從天降','我們固守抵禦蟲子進犯的戰線。但是,有些無恥的混蛋可以飛過前線,嚴重打擊了我們內部的防禦武力。$B$B我從民間船隻上徵用了一些強化魚網。如果你丟東西的技術不錯,就可以用網子把那些傢伙從天上給打下來。減少它們的數量,好讓我們的部隊可以守住要塞。','錘丘中士希望你使用強化織網來殺死6隻驍勇要塞外的天譴噴火者。','','到北風凍原的驍勇要塞找錘丘中士。','','','','',0), +(11897,'zhTW','塞住坑道口','天譴軍團毫無預警的出現,$n。就是那些該死的坑道口;就我們所知,地底隧道一路通往寒冰皇冠。巨大的不死蟲類潛伏在地面下挖掘隧道。$B$B幾年的採礦經驗讓我知道,沒有支撐的橫樑,管道在爆炸後會變得容易塌落。$B$B拿著這些爆炸物,將它們放在坑道口的入口處,地點就在西邊海邊後面的山脊之上。等你炸垮了它們之後再回來。','錘丘中士要你使用燃燒爆裂物去破壞驍勇要塞西北邊和西南邊的坑道口。','','到北風凍原的驍勇要塞找錘丘中士。','在南邊坑道口裝置爆裂物','在北邊坑道口裝置爆裂物','','',0), +(11927,'zhTW','街上的消息','嗨,$n。旅店裡面頭有女孩在問你的事情。她的名字叫蕾瑞莎。$B$B我想她不認識你,不過她說她需要你的幫助。她聽起來真的很絕望。','在驍勇要塞的旅店中找到蕾瑞莎。','','','','','','',0), +(11599,'zhTW','薩沙理安,我的兄長','我最近收到關於威廉‧愛勒頓的來信,那是我們家族的友人,他與我哥哥在同一天受徵召前往驍勇要塞。但情況是...我哥哥已經音訊全無好幾年。我散盡家產只為了去尋找薩沙理安,但是地方官員只會阻撓我。甚至威脅如果繼續四處追查就要拘補我。$B$B我需要找到一個受到高層青睞的人士...像你一樣的人。如果你願意幫我,我聽說威廉正駐防在遠郡礦坑。','去找遠郡礦坑的威廉‧愛勒頓。','','','','','','',0), +(11600,'zhTW','已故的威廉‧愛勒頓','威廉的脖子被利刃劃過。$B$B進一步的調查只顯示了一個線索可以告訴蕾瑞莎 - 一張寫著威廉‧愛勒頓名字的招募卡。','到北風凍原的驍勇要塞,把招募卡帶給蕾瑞莎。','','到北風凍原的驍勇要塞找蕾瑞莎。','','','','',0), +(11601,'zhTW','尋人','可憐的愛勒頓先生可能還能幫我們找尋我的兄弟。$B$B<蕾瑞莎翻開一本厚重的大書,很像是本軍隊招募總帳。>$B$B我借來的,可以嗎?讓我們來瞧瞧招募卡會有日期嗎?$B$B威廉在徵募列裡看到了薩沙理安。他們加入的日期應該很接近...找到了!$B$B他被分派到了...S單位?其它所有的軍隊單位都是以聯盟城鎮來命名。$B$B這個單位有誰呢?他們被派駐到哪了?我們需要些市井消息。去看看旅館老闆有沒有聽到什麼風聲。','到驍勇要塞的旅館找詹姆士‧戴肯談談。','','','','','','',0), +(11603,'zhTW','酒後吐真言','軍隊曾經是老人寇爾本的一切。他退休後,還是堅持將軍隊當成他的生命。$B$B他知道所有將軍,單位,軍旅,派遣隊的名稱...只要你說的出他都知道。他就是你需要的人。$B$B問題在於,他的心靈已經傷痕累累。除非他拿到庫爾提拉斯葡萄酒,不然他不會跟任何人說話。帶他回到身為海軍的時光。$B$B我已經好幾個月沒收到貨物了。最近一艘載滿庫爾提拉斯葡萄酒的商船沉沒在東北邊。去看看你有沒有辦法打撈到一瓶庫爾提拉斯葡萄酒給寇爾本。','去驍勇要塞東北邊的船難殘骸打撈一瓶庫爾提拉斯葡萄酒,然後將它帶給驍勇要塞旅店裡的老人寇爾本。','','到北風凍原的驍勇要塞找老人寇爾本。','','','','',0), +(11604,'zhTW','逃兵','S單位...S單位...嗯嗯...沒道理...應該是以城鎮命名的才對...$B$B夜色鎮被派到了龍骨荒野。閃金鎮的壯丁被派到了峽灣。我是在哪聽到的呢...$B$B喔,對啦...逃兵!兵營監牢裡有一個逃跑者。前不久才被抓進來。一直說著「S」代表自殺的意思。$B$B去找這個逃兵。他或許可以提供你一些訊息。','到驍勇要塞的內堡尋找囚犯,並與這位逃兵談談。','','','','','','',0), +(11932,'zhTW','懦夫與傻瓜','聽著,$n。沒有冒犯的意思,但是他們讓薩沙理安主導的攻擊行動根本就是自殺。$B$B我們其中一些人之前對天譴軍在這個區域裡最大的營地發動攻擊。你可以說我瘋了,不過襲擊一個在奈幽蟲族的瘟疫都市之外的天譴軍團通靈塔,可不是我喜歡的事。$B$B如果你還是想找到薩沙理安的話,我們原本應該跟著一個叫做阿泰卡,在卡斯卡拉的巨牙海民往東北前進。祝你那個蠢差事順利啦。','跟卡斯卡拉的阿泰卡談話,他在驍勇要塞的東北方。','','','','','','',0), +(12086,'zhTW','卡庫特之子','你尋找的人已經去了遙遠的東方,越過昂紐沛,在一個靠近海岸叫做死亡看臺的地方。$B$B如果你要找他的話要小心,$n。他帶著卡庫特的印記...看照死者之神。','越過昂紐沛,前往東方的死亡看臺。','','','','','','',0), +(11944,'zhTW','受到包圍!','我們的情況幾近絕望。我們受命帶領少數的人去拿下悲嘯通靈塔。$B$B如果我們能夠守住這個位置對抗天譴軍團,我們就很幸運了。我們人數不多,受傷且無逃生路徑。$B$B如果你能替我們減輕一下壓力,我們或許就能守住我們的位置。殺掉一些圍住建築物的不死族 - 我們將會拖延他們前進。','死亡看臺的下士維恩要你去殺掉7個通靈塔防衛者。','','到北風凍原的死亡看臺找下士維恩。','','','','',0), +(12088,'zhTW','薩沙理安,死亡騎士','好吧,$n,你幫了我們一把...所以我們也得幫你才公平。$B$B你在找薩沙理安?他今天早上消失了。我想他去了北邊的悲嘯通靈塔。如果我們沒有肩靠著肩作戰過,我可能會把他當作是叛徒。$B$B你瞭解吧,他是個死亡騎士...我知道他們是站在我們這邊的...但是不久之前他們還是阿薩斯的僕人。$B$B但絕非薩沙理安,他是個好人。去悲嘯通靈塔看看他是否安然無恙吧。','在死亡看臺北方的悲嘯通靈塔中尋找薩沙理安。','','','','','','',0), +(11866,'zhTW','吾敵之耳','無論他們是荒原的寶藏搜尋者或是嗜血獵人,任何援助奈辛瓦里且膽敢破壞我們珍愛的野生動物者都會被當作是D.E.H.T.A.的敵人。$B$B如果你殺了這些骯髒的奈辛瓦里支持者,就將他們的死亡證明帶給我,你將會獲得來自D.E.H.T.A.德魯伊的祝福獎勵。','北風凍原,D.E.H.T.A.駐營的大德魯伊拉索利厄思說,如果你可以帶15個奈辛瓦里僕人之耳給他,他將會獎勵你。','','到北風凍原的D.E.H.T.A.駐營找大德魯伊拉索利厄思。','','','','',0), +(11945,'zhTW','作最壞的打算','黑暗的時代降臨。卡庫特之靈行走於大地,收集巨牙海民的亡魂。$B$B迷霧之子奪走了諸多同胞,不久,摯愛的卡斯卡拉也會化為灰燼。$B$B然而,希望仍未破滅。或許不光是為了我們,但我們已經把家人送到昂紐沛。我們在此抵抗,是為了他們的將來。$B$B他們需要補給,否則就要挨餓了。昂紐沛的存糧不足,在事情太遲以前替我們的家人保住所有的補給吧!','戊塔克需要你在卡斯卡拉收集8個卡斯卡拉補給品。','','到北風凍原的卡斯卡拉找戊塔克。','','','','',0), +(11949,'zhTW','決心一戰!','卡斯卡拉對我們而言是個聖地,$r。我們的祖先在塔尤卡之靈的指引下來到此地。$B$B但迷霧中那些污穢的生物就這樣毫無理由的攻擊我們。$B$B我們要讓他們瞧瞧我們手中的長矛不是只會用來獵鯨。和我們並肩作戰,朋友。或許我的同胞有一天會報答你。','阿泰卡要你在卡斯卡拉殺死12個科瓦迪爾劫掠者。','','到北風凍原的卡斯卡拉找阿泰卡。','','','','',0), +(11950,'zhTW','穆亞希的智慧','聽著,$n。像我這樣的戰士隨時都可以有人接替。如果我倒下了,我的兄弟或表親會撿起我的長矛繼續作戰。$B$B但我的同胞卻不能缺少睿智的長老。頑固的穆亞希,我們最可敬的薩滿不願離開中央島嶼的塔尤卡祭壇。要是他被那些怪物殺死的話,我們將會蒙受重大的損失。$B$B你是外人,或許他願意聽聽看你說的。告訴他原因...請他盡快撤到昂紐沛來。','在卡斯卡拉尋找長者穆亞希。','','','','','','',0), +(11961,'zhTW','精靈在看照著我們','強大的精靈在看照我的部落 -- 卡斯卡拉將不會失敗。$B$B依斯里魯克將會賜予我們勇氣,塔尤卡將會確保我們能找到食物與棲身之所,而卡庫特將會看照我們的逝者,讓他們不致迷失。$B$B依斯里魯克的引導是我們目前最需要的。我請我的姪子埃魯克把依斯里魯克的圖騰給帶回來,但科瓦迪爾的長矛殺死了他,他的屍體落入了北方的水中。把圖騰帶回來給我,$n。別讓我姪子死得毫無價值。','尼約德之息海灣的長者穆亞希要你進入水中去尋找埃魯克的屍體,並且拿回依斯里魯克的圖騰。','','到北風凍原的尼約德之息海灣找長者穆亞希。','','','','',0), +(11968,'zhTW','局勢轉變','靈魂聽見我們求援的哭喊,$n。這或許表示還有機會拯救卡斯卡拉。$B$B趁著天候造成的混亂,去殺死科瓦迪爾領袖。我相信你的行動一定能扭轉戰局。','長者穆亞希要你去尼約德之息海灣殺死可怕的海嘉爾。','','到北風凍原的尼約德之息海灣找長者穆亞希。','','','','',0), +(11789,'zhTW','需要幫助的士兵','那邊那位!拜託,我需要你的幫忙。這個士兵中了地穴惡魔的毒,我們得立刻救他。$B$B我已經試圖減緩毒素蔓延,但如果沒有解毒劑的補給,我無法中和它。$B$B他們承諾說從南方上來的風暴破碎者會有一批抗毒劑。幫我去那邊的箱子裡找急救補給。$B$B快一點,$c!我們無法承擔更多不必要的人手損失了。','驍勇要塞外的醫護兵赫索恩要你進入風暴破碎者的停靠處,從一箱急救補給中找到赫索恩的抗毒劑。','','到北風凍原的納森沙地找醫護兵赫索恩。','','','','',0), +(11680,'zhTW','起飛','鑰匙重新鑄造了。$b$b現在,注意聽我的忠告,$r。努力完成或是至死方休,如果我的飛龍身上掉落任何一片鱗片的話,我會算在你個人的帳上。$b$b現在,閃吧。','等你準備好釋放伊娃諾時,將沙爾倫的鑰匙交給戰爭法師安辛。','','','','','','',0), +(11681,'zhTW','解救伊娃諾','終於,我們發動攻擊!$b$b一旦我們清空了平臺,我就會使用鑰匙。$b$b你要確保伊娃諾女士在釋放後的安全。$b$b動作快點,我們出發吧!','琥珀岩臺的安辛要你和他的戰鬥法師一同飛往碧晶哨點釋放伊娃諾女士。完成後回到琥珀岩臺的法師塔回報安辛。','','到北風凍原的琥珀岩臺找伊娃諾女士交談。','','','','',0), +(11682,'zhTW','與龍交談','$n,我注意到你近來在此地的一舉一動,再一次表達我的感謝。$b$b至於本地的威脅,我們從中學到了許多,很快的,他們問題就會被處理。而現在最重要的課題...$b$b艾澤拉斯需要你。本區的正西方就是危機的中心。$b$b我把細節交由瑟利斯塔茲大人,你必須立刻和他交談。$b$b達拉然的朋友,祝你好運。','伊娃諾女士派你前往琥珀岩臺,與瑟利斯塔茲交談。','','','','','','',0), +(11733,'zhTW','橫越裂隙','我已經注意到你的努力了,凡人。別假裝驚訝。你一定有感覺到我在注意你。$b$b該是剝去你內心黑暗面的時候了。你已經漸漸準備好接受赤裸的事實了。$b$b在聽故事之前,你應該要第一個知道我們面對的是什麼。$b$b將你的心情整理好,$c...','瑟利斯塔茲要你前往凜懼島。到達後,立刻找大法師貝瑞那德談談。','','','','','','',0), +(11574,'zhTW','千鈞一髮','我已經把我記得的全告訴他們了,為什麼就是不相信我?$b$b我那時候在裂口附近採集草藥,那些傢伙就憑空出現,帶著魔法獸的黑暗巫師–我被團團包圍了!$b$b一個魔法盒子出現在我頭上,打開把我吸了進去。就在它要關起來時,我的救星騎著飛龍衝進盒子。那真是千鈞一髮!$b$b我還沒感謝他們拯救了我。拜託,$c,如果你見到他們,幫我告訴他們我的感謝之意。','伊朵菈要你去戰歌堡北邊的琥珀岩臺,感謝那些拯救她的人。','','','','','','',0), +(11587,'zhTW','劫獄','你好,$c。我是唐納森,達拉然的忠心代表。$b$b請原諒我的魯莽,但是我們發現我們身處於危機當中。遍佈於艾澤拉斯的法師皆被綁架了,我奉命徵召任何有辦法協助揭開此謎團的人。$b$b位於南邊的營地就是我們調查的起點。我想請你去解救被困在那裡的一位法師囚犯。你會需要從周遭的狩法獵人身上取得他們秘法監牢的鑰匙。','琥珀岩臺的圖書管理員唐納森要你前往碧晶哨點,從碧晶狩法獵人身上取得碧晶監牢鑰匙,並使用鑰匙從秘法監牢釋放一位被抓住的法師。','','到北風凍原的琥珀岩臺找圖書管理員唐納森。','營救秘法囚犯','','','',0), +(11590,'zhTW','綁架','$n,我們有了麻煩。$b$b我剛剛才得知我們的一位大法師在返回達拉然的途中失蹤了。想當然爾,我們懷疑狩法獵人是他失蹤的幕後主使。$b$b時間非常緊迫。如果我們還打算拯救她的話,我們一定要盡快知道伊娃諾女士發生了什麼事。$b$b帶著這個裝置,回到碧晶哨點,在碧晶巫士垂死之際對他使用裝置。這樣可以束縛他一段時間,讓你可以把他帶回來接受審問。','唐納森要你在碧晶哨點對一個受傷的碧晶巫士使用秘法捆縛器。然後回到琥珀岩臺向他回報。','','到北風凍原的琥珀岩臺找圖書管理員唐納森。','擄獲碧晶巫士','','','',0), +(11646,'zhTW','北風審訊','仔細聽好,$n,我們沒有時間可以浪費了 。$b$b你的囚犯已經在我們的塔中準備好接受審問了。如果他不願意配合,我們會需要你的協助。$b$b前往他被拘留的地點,告訴圖書管理員諾曼提司我派你去協助他。','唐納森要你向諾曼提司提供協助,他就在琥珀岩臺的法師塔中。','','','','','','',0), +(11648,'zhTW','說服的藝術','慶幸你在這裡,$r。$b$b瞧,即使在這種非常時期–祈倫托的行誼準則對我們採取「極端」的手段十分不滿。$b$b但是,你是個局外人,不受此限制,你可以因應傳回的消息做出任何必要的手段。$b$b做你該做的,我們得馬上知道伊娃諾女士被關在何處!$b$b我會忙著整理這些書架,喔,對了,也許你會覺得這個老東西很有用處...','琥珀岩臺的圖書管理員諾曼提司需要你對被囚禁的碧晶巫士使用神經刺針,直到他吐露伊娃諾女士的所在地。','','到北風凍原的琥珀岩臺找圖書管理員諾曼提司。','審問人犯','','','',0), +(11663,'zhTW','分享情報','謝謝你,$c!你獲得的情報對祈倫托來說是至關重要的。$b$b你立刻回去找唐納森,在此同時,我們會訂定拯救伊娃諾女士的計畫。','諾曼提司要你向琥珀岩臺的圖書管理員唐納森報告。','','','','','','',0), +(11671,'zhTW','和時間賽跑','所以這是真的。她在他們手中。$b$b事情該怎麼解決看來是很清楚了,$r。她「會」被救出來。$b$b我必須在這裡支援拯救的準備行動。我會再找你來;這次先去取得監獄的鑰匙。我們目前所了解的就是,這個沙爾倫因其完美無缺的護盾保護而不會受到傷害。$b$b為此我們已經定做了一個特別的炸藥,可以解除她的這層保護,讓你有辦法執行你的職責。等你取得鑰匙後,回來找我。$b$b快點,$n。伊娃諾女士正在受苦!','琥珀岩臺的唐納森派你使用碧晶護盾炸彈關閉碧晶哨點的護盾。接著打敗沙爾倫並取得她持有的鑰匙。','','到北風凍原的琥珀岩臺找圖書管理員唐納森。','','','','',0), +(11679,'zhTW','重鑄鑰匙','延遲,延遲...這是我們現在最無法承受的事情!$b$b我也討厭打擾瑟利斯塔茲大人,他是拯救我們敬愛的伊娃諾的唯一希望。$b$b把鑰匙的碎片帶給他,並且保佑他心情不錯。$b$b快吧,$c,我們的突擊隊正在等著。','唐納森希望你去和琥珀岩臺的瑟利斯塔茲談談。','','到北風凍原的琥珀岩臺找瑟利斯塔茲。','','','','',0), +(11594,'zhTW','讓他們安息','軍隊指揮官鋼顎的白癡行為造成了這一場混亂。他在想些什麼?帶著一隊商隊穿越坦卡族的墓塚?$B$B儘管如此,做了還是做了。現在該是我們忙著處理後果了。$B$B霸主博格洛克要求我盡全力去協助遠偵斥候傲蹄。這位遠偵斥候要我們去讓他的祖先之靈們安息。$B$B你意下如何,$c?你是夠$g勇猛:強壯; 到足以處理如此簡單任務的人嗎?','讓20個坦卡靈魂安息,不論是鬼魅賢者或者復活的遠偵斥候都行,完成後回報鋼顎商隊的蠻兵怒拳。','','到北風凍原的鋼顎商隊找蠻兵怒拳。','讓坦卡靈魂獲得安息','','','',0), +(11620,'zhTW','父親的話','有個人也許能夠替我們解開這個謎,$r。有謠言說科瓦迪爾人把一個活的納迦女祭司囚禁在海灘西邊的神殿裡。$B$B想必她有充分的理由怨恨這些不請自來的科瓦迪爾客人。也許我父親正期待她會以某種方式跟你合作。','在裂鞭水岸的群鱗聖壇找到薇迦。','','','','','','',0), +(11625,'zhTW','納茲贊恩的三叉戟','五百年前,艾薩拉將一個名為萊維羅希的生物囚禁在海底。現在那些野蠻人居然想要破壞我們女王的努力!$B$B他們佔領了我們的城市,然後犧牲我的同胞來喚醒他!當他們把納迦都殺光了,他們就開始去抓巨牙海民。他們的靈魂將無法安息!$B$B我會幫你,因為平息我的復仇是一條漫長的道路。他們的隊長,拉格納就在裂鞭東北部的深處。他帶著一根黃金三叉戟。把它帶來給我!','裂鞭的薇迦要你前往裂鞭遺跡的東北部。殺死拉格納‧德拉卡路德之後,把納茲贊恩的三叉戟交給她。','','到北風凍原的群鱗聖壇找薇迦。','','','','',0), +(11626,'zhTW','特使','在萊維羅希被囚禁的時候,拉吉‧納茲贊恩是裂鞭的皇帝。艾薩拉本人親自祝福過他的三叉戟,如果那隻野獸真的逃脫的話,三叉戟也應該能殺死它。$B$B現在你持有它了,$r。儘管它令我作嘔,但我終將向那些野蠻的巨人復仇。$B$B把三叉戟帶到裂鞭之下的深處。你會發現萊維羅希在海底休眠。將三叉戟深深地插入他的血肉中!然後向派你來的人回報,我不想再看見你了。','在裂鞭遺跡北方邊緣的水底,到漂浮冰山之下尋找萊維羅希。使用納茲贊恩的三叉戟殺死他。然後回到裂鞭水岸的北邊找卡魯克。','','到北風凍原找卡魯克。','','','','',0), +(12141,'zhTW','外交任務','我看得出來你非常想要幫忙,$n。你一路跑來北裂境不是為了被困在一座城市裡!我這裡剛好有個工作給你...會帶你去遠方的工作。$B$B我們一直企圖博取北裂境巨牙海民的好感。前陣子有一位年輕的巨牙海民來尋求我們的幫助,但當時我們無法提供協助。$B$B現在既然你來了,也許你可以幫他一把。前往此地西南方的裂鞭水岸尋找卡魯克,然後看看有什麼你能幫忙的。','與卡魯克交談,他就在驍勇要塞西南方的裂鞭水岸。','','','','','','',0), +(11613,'zhTW','卡魯克的誓約','他們自稱為科瓦迪爾。我們的族人有著關於他們的傳說;我們把他們叫做圖克哈瑞克 - 霧行者。$B$B我的村子就是被那些巨大的霧人所毀。我認識的每個人都被殺死了,包括我的父親,阿尤特。$B$B根據巨牙海民的律法,我應該要報復那些殺死我親族的人。$B$B但我只是個漁夫,甚至還沒有通過成年的試煉...我沒辦法對付邪惡的科瓦迪爾。$B$B如果你願意替我報了血仇,我會欠你許多。','卡魯克要你殺死6個斯卡迪爾劫掠者和5個斯卡迪爾長船水手。','','到北風凍原找卡魯克。','','','','',0), +(11619,'zhTW','『殘酷』加邁爾','我的父親就是被這掠奪隊的首領,『殘酷』加邁爾所殺。他在海灘上的一個洞穴中建立了居所。$B$B你已經和他的手下打過照面了。結束你挑起的這場戰鬥吧,$n。替我的父親報仇,我會把我僅剩的東西和你分享。','卡魯克要你擊敗裂鞭水岸的『殘酷』加邁爾。','','到北風凍原找卡魯克。','','','','',0), +(11887,'zhTW','緊急補給','搜出了這位死掉地精的財物之後,你發現了一個小包裹,裡面滿是乾糧、工具和一個稱手的地精導管帶。這些包裹中的小工具對菲奇司‧絞輪來說,對於修理起破損的地精飛行器應該滿有用的。$B$B把這些工具交給菲奇司應該可以獲得一筆不錯的報償。','從墜毀的嘶軸偵察駕駛員的屍體上收集7個地精緊急工具箱。然後帶給坦卡雷村的菲奇司‧絞輪。','','到北風凍原的坦卡雷村找菲奇司·絞輪。','','','','',0), +(11632,'zhTW','冷風帶來的...','你拿到了依司瑞克斯的外殼碎片,並且瞭解到這不過是個開端。既使是現在你都感覺勝利非常的短暫?巫妖王肯定上千個像依司瑞克斯這樣的怪物,等著要被釋放來攻擊部落。$B$B帶著你的戰利品並且把它交給戰歌堡中的霸王薩魯法爾。他應該要知道你戰勝了一名強大的天譴軍成員。','將依司瑞克斯的硬化殼交給戰歌堡的霸王薩魯法爾。','','到北風凍原的戰歌堡找薩魯法爾霸王。','','','','',0), +(11898,'zhTW','突破','在聖城的最下層,有一座籠罩著光的灰色祭壇。進入祭壇,進入恐懼亡域納克薩爾。$B$B當心點,$n。瓦拉納爾親王身邊肯定有他的貼身僕役保衛著,他們會以生命阻止你前進亡域的頂層區域。$B$B你一定要穿越亡域通往王子所在地。如果你無法擊敗他的話,$n,我擔心我的人民將永遠無法得知冰霧所提供的安全。','擊敗瓦拉納爾親王及他的部下,『殘酷』范希林和『邪惡』路西翁,接著回報給坦卡雷村的冬風酋長。','','到北風凍原的坦卡雷村找冬風酋長。','','','','',0), +(11660,'zhTW','上古海員號角','一個名為歐拉布斯的科瓦迪爾上尉指揮著最初對帕雷亞人民的侵略。他監看著兩個村落的毀滅,然後消失不見。$B$B早前有個傳聞提到歐拉布斯贈送了科瓦迪爾織霧者一個號角。這個號角可在有需要時用來召喚他。$B$B我們需要從科瓦迪爾織霧者身上取得這個號角,並召喚歐拉布斯。如果把他給摧毀,這些野蠻人或許就會撤退。$B$B找出帕雷亞的織霧者,就在南邊。','帕雷亞的華特要你將上古海員號角帶給他。他就在北風凍原的回聲海岸。','','到北風凍原的回聲海岸找帕雷亞的華特。','','','','',0), +(11661,'zhTW','『舵手』歐拉布斯','帶著號角前往西方的戰歌碼頭。走到碼頭的底端,然後吹響號角。那個聲音將會喚醒歐拉布斯。$B$B殺死那個污穢的野獸,然後回來找我!','回聲海岸的帕雷亞的華特要你使用上古海員號角召喚『舵手』歐拉布斯,並且殺死歐拉布斯。','','到北風凍原的回聲海岸找帕雷亞的華特。','','','','',0), +(11664,'zhTW','逃出迷霧','我可以聽到外面的迷霧生物。他們的鬼叫聲快把我逼瘋了,不過我可不敢試著逃離這裡。況且,我還能逃去哪呢?即使我逃得了一時,也難保不會跟其他人一樣被他們追上並且落得被處死的下場。$B$B我想知道,這場迷霧涵蓋的範圍有多廣呢,陌生人?它已經籠罩這整個大陸了嗎?$B$B你願意幫助我試著逃離這陣迷霧嗎?我想我可以引領我們回到我父親身邊。我仍感覺得到他的生命特質。他就在附近。','跟隨著小穆圖走出迷霧。成功拯救小穆圖後,與穆圖長者談談。','營救穆圖','到北風凍原的回聲海岸找穆圖長者。','','','','',0), +(11672,'zhTW','徵募日','你是來應募的,對吧?一般來說你要跟其他徵召兵一起排隊。一般來說你要很衰才會遇到徵召簿冊不見,在新的名冊抵達之前,我沒辦法幫任何人登記。$B$B不過,你的運氣不錯,$n,我聽過你的名字,還有你在外域的事蹟。老實說,你根本不需要理會這些鬼東西。你這種人怎麼會需要排隊。$B$B去兵營和阿爾洛斯將軍談談。他會高興看到像你這樣的人。','和阿爾洛斯將軍見面,他就在驍勇要塞的兵營裡。','','','','','','',0), +(11697,'zhTW','糟糕,汀基跑進了亡域!','我告訴汀基不要自己一個人跑出去,但她就是得去看看西邊那個壞掉的亡域。$B$B我百分之百肯定那些教徒是從裡面那個東西跑出來的,也就是說我現在百分之百肯定汀基有麻煩了!$B$B她是簡易機場的首席工程師。沒有她我們就完了!$B$B我想自己去找她,但是那些傢伙在我可以再度消失前重重地擊中我的腳。$n,如果有誰可以幫助她逃出來,那個人就是你了!','到塔爾拉瑪斯尋找汀基‧芯哨。','','','','','','',0), +(11699,'zhTW','我被困在這個該死的籠子...不過關不了太久了!','教徒們使用魔法將我關進這個籠子裡,而且這籠子還沒有門。他們一點都沒想到我可是簡易機場的首席傳輸工程師耶!$B$B有了你的協助,以及一點點費力的工作,我不會在這裡待太久的。$B$B我需要從食屍鬼身上取得一個引擎核心水晶,從他們的醫生身上取得一個魔法迴轉儀,從位於頂端的巫妖領主身上取得一個導引天譴石。$B$B有了那些東西,我應該能夠做出一個傳送裝置回到嘶軸那,以地精的方式逃走!','收集一個引擎核心水晶,一個魔法迴轉儀,以及一個導引天譴石。將這些帶到塔爾拉瑪斯交給汀基‧芯哨。','','到北風凍原找汀基·芯哨。','','','','',0), +(11956,'zhTW','尋找骨匣','沒有時間閒聊了,$n。我被派來進行這個本應是自殺的任務:佔領這座通靈塔。但我已經完成了身為士兵的職責,現在是時候找出些答案來了。$B$B這個巫妖有我在尋找的情報,但我沒辦法傷害他的肉體來逼供。$B$B巫妖將他的靈魂藏在骨匣中;找不到骨匣,我就無法從它口中刺探出情報。$B$B回到營地去找我的愛馬幽暮,她會帶領你找到骨匣。把它帶來給我。','前往死亡看臺騎上幽暮,找到塔那薩爾骨匣的位置。然後把它帶回來交給悲嘯通靈塔的薩沙理安。','','到北風凍原的悲嘯通靈塔找薩沙理安。','','','','',0), +(11938,'zhTW','爭取一點時間','現在我們有了骨匣,要得到我需要的資訊應該沒有問題。在聖城裡的天譴軍很快就會注意到異狀,然而。$B$B我無法在這裡抵擋他們的全面攻擊。也許我可以...但我寧可不要被發現。$B$B我要你前往那裡並且製造一些損傷。但願這能讓他們分神夠久,足以使這兩個傢伙吐出腸子來...當然,只是打個比方。帶著路瑞德,他可以提供一些幫助。','北風凍原上悲嘯通靈塔中的薩沙理安要你對恩吉拉聖城中的天譴軍團造成20人的傷亡。你可以使用路瑞德的骨頭來協助你。','','到北風凍原的悲嘯通靈塔找薩沙理安。','恩吉拉傷亡','','','',0), +(11942,'zhTW','真言','巫妖已經招了,$n。恩吉拉的高階祭司握有進入納克薩爾的秘密。$B$B前往鮮血尖塔、苦痛尖塔與凋零尖塔,並殺死每個祭司。$B$B當你拿到三個卷軸之後再回來。','悲嘯通靈塔的薩沙理安要你前往恩吉拉聖城,並且從苦痛尖塔回收高階祭司塔烈卡的卷軸;從凋零尖塔回收高階祭司納菲賽特的卷軸,以及從鮮血尖塔回收高階祭司安杜拉斯的卷軸。','','到北風凍原的悲嘯通靈塔找薩沙理安。','','','','',0), +(12019,'zhTW','最後的儀式','我以死亡之軀服侍阿薩斯,是因為我沒有選擇。他宰制了我的意志與我的身體。詛咒神教以血肉之軀服侍阿薩斯...是出於自願。$B$B現在我們知道如何使用這些真言來進入納克薩爾,我們可以終結這場邪教瘟疫。前往恩吉拉,並且在浮空要塞下方尋找傳送寶珠。$B$B往上爬並且在頂端與我會合。以你所有的勇氣武裝自己,我們也許無法成功逃出生天。','前往恩吉拉聖城並且找出浮空要塞納克薩爾下方的傳送寶珠。使用寶珠抵達塔頂,然後幫助薩沙理安。','最後的義務','到北風凍原的納克薩爾找薩沙理安。','最後的儀式','','','',0), +(12471,'zhTW','科瓦迪爾的兇殘','感謝你救了我,$n。科瓦迪爾簡直是禽獸!$B$B他們逼我們和其他的囚犯戰鬥。直接把我們殺光還比較仁慈。$B$B年輕的卡魯克還活著--我有注意到他的到來。告訴他,他的父親到死前依然奮戰不懈。','告訴卡魯克關於被俘虜的巨牙海民囚犯的事。','','','','','','',0), +(11656,'zhTW','焚火示眾','巨牙海民的魔法跟你同胞的薩滿法術很類似。但我們侍奉元素的方法不同,但我們能夠呼喚的力量是一樣強大的。$B$B<華特在你面前揮舞著一根火炬般的短杖。>$B$B我希望你帶著這根巨牙海民火炬回到迷霧中並且攻擊科瓦迪爾船艦。你會發現他們有三艘船在迷霧之中,停靠卡爾洛斯臺地的碼頭,就在北方不遠,還有一艘停在帕雷亞的海岸,就在南方。放把大火把他們的船全給燒了!讓所有人都看見!','回聲海岸的帕雷亞的華特要你使用巨牙海民火炬燒毀在帕雷亞與卡爾洛斯臺地的科瓦迪爾船艦。你得摧毀以下的船隻:巨蛇之喉、科‧德拉卡、伯爾之錘和伯爾之砧。','','到北風凍原的回聲海岸找帕雷亞的華特。','摧毀巨蛇之喉',' 摧毀科·德拉卡','摧毀伯爾之錘','摧毀伯爾之砧',0), +(11655,'zhTW','進入迷霧','穿過迷霧前往北方,你會找到卡爾洛斯臺地。往南則是我家鄉的遺址,帕雷亞。這兩個地方都遭到一個被稱為科瓦迪爾的古老勢力所掠奪。$B$B這些可怕的野蠻人毫不留情地殺死了我所有的族人,然後把你的同胞往內陸逼。$B$B所有帕雷亞剩下的東西都是我們巨牙海民的財產,但卻被科瓦迪爾人給帶走了。儘管我們並不是好復仇的種族,但正義一定得伸張。巨牙海民的遺物一定回到我手上。進入迷霧幫我找到它們。','帕雷亞的華特要你殺死科瓦迪爾人,收集8個巨牙海民遺物。他就在北風凍原的回聲海岸。','','到北風凍原的回聲海岸找帕雷亞的華特。','','','','',0), +(11920,'zhTW','教徒內奸','這個祭壇布滿各種詛咒神教的印記。看來本土上的那些狂信者也來到了北裂境。最好去通知這艘船的船長。$B$B你或許可以在甲板上找到他。','與『左撇子』縱帆船長談談,他就在驍勇要塞的風暴破碎者上。','','','','','','',0), +(11662,'zhTW','找出卡魯克!','一個名叫卡魯克的帕雷亞生還者同伴,成功逃至北風凍原上科瓦迪爾的主要基地中–原本是個滿是積雪的遙遠南方。卡魯克藏身在高聳於裂鞭水岸的崖壁中。$B$B找出卡魯克,讓他知曉你在回聲海岸為我的族人做了些什麼。$B$B穿越你的堡壘前往卡魯克的身邊是最安全的路徑。從戰歌堡出發,順著南方的路一直走,直到抵達裂鞭水岸為止。','在裂鞭水岸找出卡魯克。','','','','','','',0), +(11705,'zhTW','愚蠢的努力','真是瘋狂。他們如何能夠要求我們對付一個天譴死靈領主及一隊不知數目的爪牙呢?$B$B<蓋特利嘆了一口氣。>$B$B如果艾寇里斯派你過來,那他一定是認為你身懷眾多本領。或許你會祈求今天能發生奇蹟,嗯?$B$B當你準備好,我們就進行襲擊,並對付瓦瑞達斯。$B$B如果我們能夠不損一兵一卒的解決這一團混亂,就將情況回報給戰歌堡的地獄吼。','協助蓋特利擊敗戰歌農場的『剝皮者』瓦瑞達斯。$B$B完成後回報給卡爾洛斯‧地獄吼。','擊敗殘忍的瓦雷杜斯','到北風凍原的戰歌堡找卡爾洛斯·地獄吼。','','','','',0), +(11709,'zhTW','諾克‧血狂的攻擊','雖然你已經盡力保衛我們位於這些冰凍荒原的據點,但是仍有其他的危險遣潛伏在暗處。我要你去支援看守者諾克‧血狂,他就駐守在戰歌堡外,緊臨著東南邊的拘留營地。找到他並協助囚犯運送及交換。$B$B你離開吧,$n。','到北風凍原的戰歌堡與看守者諾克‧血狂談談。','','','','','','',0), +(11711,'zhTW','膽小鬼貨運...30分鐘內送達否則免費','每過去一天,我們都會在大門邊看到更多的逃兵。我們連關住那些蛆蟲的牢房都不夠了。尤其是我們還得讓那些豬高興。$B$B<諾克一邊笑,一邊發出豬叫。>$B$B我要你押解其中一個膽小鬼到東邊的十字路口去,然後發射信號彈。他們看到信號之後會派出一位隊長,來接管那個懦夫。$B$B等你完成押送之後,向東邊道路的斥候敦苟克回報。','護送聯盟叛逃者到戰歌堡東邊的十字路口,然後發射你的戰歌信號槍通知聯盟。$B$B等你將聯盟叛逃者送到目的地之後,向斥候敦苟克回報。','交接聯盟逃兵','到北風凍原的血孢平原找斥候敦苟克。','','','','',0), +(11714,'zhTW','殲滅害蟲','或許你會有興趣幫我清理這些地方?到處都充滿著骯髒的小鼠輩!科多獸,狗頭人,不管你要怎麼稱呼他們都行,這個該死的地方到處都是他們。伴同的這股惡臭讓我的生活變成地獄!$B$B去替我解決這些惡黨,我會讓你的付出得到同等的回報,$n。','北風凍原,血孢平原的斥候敦苟克要你去殺死8個血孢收割者,5個血孢起火者和2個血孢炙烤者。','','到北風凍原的血孢平原找斥候敦苟克。','','','','',0), +(11644,'zhTW','超強力金屬板!','我需要金屬來強化這些坦克!超強力金屬板散落在卡爾洛斯臺地以及海灣底部的各處。$B$B只不過在你去尋找金屬板的時候要小心。迷霧是...嗯...有侵略性的!這些迷霧佔據了臺地和鄰近的巨牙海民村莊。可憐的巨牙海民...','莫布要你收集10個超強力金屬板,他就在北風凍原的回聲海岸。','','到北風凍原的回聲海岸找莫布。','','','','',0), +(12035,'zhTW','改寫技術','好吧,我懂了!重新改寫雖然有點複雜,但對於像你這樣聰明的$c應該不是問題。$B$B帶著我的工具去讓一些收割機器人『退役』。他們一倒下,你就使用工具把他們所有的紅線塞進藍色的插槽中。這會讓他們進入自我防衛模式。快一點,$n。再過不了多久,就沒東西可以搶救了。','遠郡的杰瑞米亞‧豪寧要你摧毀5台收割機器人,然後使用杰瑞米亞的工具重新改寫它們。','','到北風凍原的遠郡找杰瑞米亞·豪寧。','改寫收割機器人','','','',0), +(11707,'zhTW','苦惱的請求','喔很好,你是$n,對吧?$B$B我們需要你前往北邊的嘶軸簡易機場幫忙,就像昨天一樣!猛瑪象人,天譴軍團…還有幫浦站!$B$B太瘋狂了,我告訴你,這太瘋狂了!$B$B你得從這裡出發,並且盡快找老人滿閥談談!','前往嘶軸簡易機場找嘶軸‧滿閥談談。','','','','','','',0), +(11708,'zhTW','機械地精','既然你都在這了,該是我告訴你事情由來的時候了。$B$B在你聽完我的故事後,到外面去找我的副手,金基‧翼果。她將會處理從開始到結束這段期間所有的事情。','聽取嘶軸‧滿閥的故事,然後去嘶軸簡易機場找金基‧翼果。','聽菲茲蘭克陳述當前的情況。','到北風凍原的嘶軸簡易機場找金基·翼果交談。','','','','',0), +(11712,'zhTW','再詛咒','如果你有聽老頭子講,你就知道我們外頭有不少被轉化的地精。他們被齒輪大師梅卡佐德注射了一種東西把『血肉詛咒』給逆轉,他們現在全變成機器人了!$B$B我們認為我們有辦法可以再次詛咒好讓他們恢復正常。我們要你帶著這個再詛咒物質轉變注射劑,然後對你看見的每個機械地精屍體使用。$B$B我們希望這能治好他們,然後讓我們把他們關起來別靠近那個地方。$B$B你覺得如何,$n?','嘶軸簡易機場的金基‧翼果要你對6個嘶軸機械地精使用再詛咒物質轉變注射劑。','','到北風凍原的嘶軸簡易機場找金基·翼果。','治癒並傳送嘶軸地精','','','',0), +(11788,'zhTW','左轉鬆,右轉緊','好吧,我想我們準備好進行倒數第二次的進攻了...在你撂倒梅卡佐德以前,你得先把他的手下打爆才行!$B$B你可以分別在西點、北點、中點和南點抽水站找到噹機、ED-210、極限爆衝和研磨者等四個他的手下。$B$B只要轉動抽水站的節流閥,弄亂它們原本在做的事情,它們就會現身了。你不會錯過那些地方的,那裡有燈光在旋轉。','拆除噹機、ED-210、極限爆衝和研磨者,然後向嘶軸簡易機場的金基‧翼果回報。','','到北風凍原的嘶軸簡易機場找金基·翼果。','','','','',0), +(11798,'zhTW','齒輪大師','齒輪大師梅卡佐德根本就瘋了!他說要給予我們永生,移除所謂「血肉的詛咒」,但他根本只是把我們做成他的機器奴隸!$B$B$n,我們十分確定他人還在東方水池中間的幫浦站。$B$B我們最後一次看見他,他就在建築頂上的指揮小屋中。上去那邊並且調查他的東西。$B$B如果地精想要存活下來,你就必須要面對梅卡佐德!','研究齒輪大師的手冊,並且帶著梅卡佐德的頭回去向嘶軸‧滿閥報告。','','到北風凍原的嘶軸簡易機場找嘶軸·滿閥。','研究齒輪大師的手冊','','','',0), +(11865,'zhTW','不宜死亡','在正南方,通常馴鹿都自由,和平地漫步著。接著,奈辛瓦里出現,什麼都變了。現在,馴鹿身處於一個無盡的狂亂狀態,永遠都處於驚慌中。躲藏在原野裡的獵人及陷捕者追蹤著牠們。$B$B死亡並不適合奈辛瓦里的劊子手。他們一定得親身感受他們施加在馴鹿身上的折磨!$B$B帶著這一堆假毛皮並將它放在他們置於南方的馴鹿陷阱上。看著這些獵人栽在自己設置的死亡陷阱中吧!','北風凍原,D.E.H.T.A.駐營的札扎要你使用一堆假毛皮使8個奈辛瓦里陷捕者落入陷阱。','','到北風凍原的D.E.H.T.A.駐營找札扎。','使奈辛瓦裡陷捕者落入陷阱','','','',0), +(11868,'zhTW','挑選者來了','在接近這座懸崖的南邊盡頭處,你將會發現馴鹿陷捕者的奸詐頭目。她是一個前所未有的野蠻人,挖出被屠殺的動物內臟棄之不用:飲用牠們的血並對月嗥叫!$B$B找到這個兇手,凱倫,並終結她那無價值的存在。$B$B做好準備,$n。『挑選者』凱倫沉迷於奈辛瓦里濫施給她的財富中!','北風凍原,D.E.H.T.A.駐營的札扎要你去殺了『挑選者』凱倫。','','到北風凍原的D.E.H.T.A.駐營找札扎。','','','','',0), +(11867,'zhTW','耳朵,永遠都不夠...','無論他們是荒原上的尋寶者或是嗜血的獵人,任何膽敢援助奈辛瓦里襲擊我們所珍愛野生動物的人,都將被當作是D.E.H.T.A.的敵人。如果你殺了這些骯髒的奈辛瓦里支持者,將他們的死亡證明帶給我,你將會獲得來自D.E.H.T.A.德魯伊的祝福獎勵。','北風凍原D.E.H.T.A.前哨的大德魯伊拉索利厄思提到如果你可以帶15個奈辛瓦里僕人之耳給他,他將會獎勵你。','','到北風凍原的D.E.H.T.A.駐營找大德魯伊拉索利厄思。','','','','',0), +(11612,'zhTW','收復礦場','很高興見到你,$c。我叫伊塔魯克,本來是冷岩礦場的工匠。$B$B當那些神秘的藍色平台從高地上方飛來的時候,我和我的同伴正在為一組新的雕像進行最後的加工儀式。$B$B他們降落的時候,上面的法師一湧而上,屠殺我的同伴,掠奪了礦場。如果不加以阻止的話,他們會毀了我們的雕像然後帶走工藝品。你願意幫助我擊敗這些入侵者嗎?','冷岩礦場入口附近的依塔魯克要你殺死12個碧晶寶藏獵人。','','到北風凍原的冷岩礦場找伊塔魯克。','','','','',0), +(11617,'zhTW','阻礙他們的逃脫','我相信你一定看過那些在礦場上空盤旋的藍白平臺。那些是狩法獵人用來輸送他們部隊的運輸裝置,現在他們用這些來裝載我們的神器與我們雕像的碎片。$B$B我們一定要在他們離開礦場之前阻止他們。$B$B在礦場挖掘的小東西身上會帶著爆裂物。拿到爆裂物然後用來摧毀他們的平臺。他們的領導者在一個著陸的平臺上監視著,但我們之後再來對付他。','冷岩礦場外的伊塔魯克要你摧毀北部平臺、東部平臺和西部平臺。','','到北風凍原的冷岩礦場找伊塔魯克。','摧毀東部平臺','摧毀北部平臺','摧毀西部平臺','',0), +(11623,'zhTW','拜訪監管者','狩法獵人部隊的領袖是一個名叫監管者殷希維俄的可怕生物。我的族人無數個世代以來狩獵土地和海洋中的野獸,但我卻從來沒有見過像監管者那樣的東西。$B$B他就在礦場邊緣上空的其中一個飛行圓盤,監管他們所有的活動。$n,我只能相信是先祖們送你來解救我們,我也希望你能幫我永遠地把那些狩法獵人給逐出礦場。','冷岩礦場郊區的伊塔魯克要你殺死監管者殷希維俄。','','到北風凍原的冷岩礦場找伊塔魯克。','','','','',0), +(11576,'zhTW','監控裂口:異常裂壁','你好,$r,我是達拉然的加倫。$b$b不久以前,從地熱噴發的角度來看來,裂口還算是個平靜的地方。$b$b但是到了最近,地震頻繁到令人提高警覺,地面也出現了裂隙,顯示出一股強大力量的獨特能源正在散發。$b$b我在此地的任務是要紀錄下這些異像。我的儀器顯示出西南方的懸崖還有一個震源。$b$b請帶著這個裝置,然後在你找到新的災害的時候使用它。','琥珀岩臺的加倫要你在異常裂壁使用奧能檢測儀。','','到北風凍原的琥珀岩臺找圖書管理員加倫。','取得異常裂壁讀數','','','',0), +(11582,'zhTW','監控裂口:破碎裂隙','你感覺到了嗎?又一個餘震...你真該早幾分鐘來的!$b$b我恐怕又需要你的協助了。我的儀器指出西邊有個巨大的異變,在水面下很深的地方。$b$b就跟之前一樣,我需要你帶著奧能檢測儀下去收集數據。$b$b我會對你施展一道法術,讓你可以在水中呼吸。如果在你找到異變之前法術就耗盡了,回來告訴我,我會替你重新施展。','琥珀岩臺的加倫要你在破碎裂隙異常處使用奧能檢測儀然後把讀數交給他。','','到北風凍原的琥珀岩臺找圖書管理員加倫。','取得破碎裂隙讀數','','','',0), +(12728,'zhTW','監控裂口:冬鰭洞窟','我必須要整匯我的筆記,並且準備一份回達拉然給我同事的報告。$b$b當我在進行這些事的時候,我必須要求你去北邊的冬鰭洞窟。你必須站在洞口裡面使用奧能檢測儀。$b$b一旦取得資料之後立刻回來找我。沒有它,我的資料就不夠齊全。','琥珀岩臺的圖書管理員加倫要你在冬鰭洞窟使用奧能檢測儀。','','到北風凍原的琥珀岩臺找圖書管理員加倫。','取得冬鰭洞窟讀數','','','',0), +(11639,'zhTW','向瑪格默斯報仇','霸主下令不准薩滿治療我的傷,他說要我從中學得教訓,並且為我的失敗好好反省。$B$B你可以替我,以及在瑪格默斯送命的弟兄報仇!$B$B我清楚靈語者要你去把先知救出來。$B$B去吧,$c,就在東方...殺掉猛瑪象人和他們的狗頭人走狗。奪回崗哨的榮耀!','殺了10個瑪格默斯薩滿,5個瑪格默斯採獵者,3個瑪格默斯粉碎者,以及3個瑪格默斯瑞卡的配偶。完成後,回到博格洛克前哨找甌爾卓希。','','到北風凍原的博格洛克前哨找甌爾卓希。','','','','',0), +(11658,'zhTW','B計畫','好啦,別驚慌!光束槍雖然沒有成功,但是我們有其他配套措施。$B$B<卡芙緹揉擰著她的手指。>$B$B我們要分散簡易機場的注意!為了要能成功,我們得先做一些準備。$B$B<顛鏈朝你上上下下打量一番。>$B$B就在西邊,鋼顎商隊,他們很愚蠢的從坦卡族的墓園抄捷徑,想當然爾被喚醒的靈魂宰了。$B$B前往那裡,從那些死掉的獸人身上弄一些外裝來,啊對,還有他們的旌旗也一併帶回來。','收集10件戰歌外裝和1根戰歌旌旗。將它們帶回去給嘶軸簡易機場的卡芙緹‧顛鏈。','','到北風凍原的嘶軸簡易機場找卡芙緹·顛鏈。','','','','',0), +(24585,'zhTW','烈焰戰輪必須死!','在構築之地坐落著奧杜亞的第一道防線:烈焰戰輪。$B$B祈倫托得到了一個消息,指出這個由守護者製造的機器即將被運送到一個不明的地點,然後放出來毀滅艾澤拉斯上的凡人們。$B$B這種事情不能發生。六法議會已經下令,要取烈焰戰輪的命!','殺死烈焰戰輪。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24587,'zhTW','『火爐之主』伊格尼司必須死!','偉大的火巨人,『火爐之主』伊格尼司在奧杜亞巨熔爐內辛勤的工作著。在洛肯的命令下,伊格尼司製造的武器有著恐怖的威力。$B$B六法議會已經下令,要取伊格尼司的命!','殺死『火爐之主』伊格尼司。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24588,'zhTW','XT-002拆解者必須死!','身為彌米倫的另一個奇作,XT-002拆解者竟然認為它就是守護者之子。別被它天真無邪的偽裝給騙了。它是一台殺人機器!$B$B你可以在奧杜亞的廢料場找到拆解者。六法議會已經下令,要取XT-002拆解者的命!','殺死XT-002拆解者。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24589,'zhTW','賈拉克瑟斯領主必須死!','大法師泰彌亞預見了一個駭人的事件即將發生。在十字軍試煉中,有一個愚蠢的地精將意外地召喚出燃燒軍團的埃雷達爾領主。$B$B當事情發生的時候你必須在場,$c。如果賈拉克瑟斯領主逃走了,他將會打開傳送門,並且把燃燒軍團再次送進我們的世界。$B$B六法議會已經下令,要取賈拉克瑟斯領主的命!','殺死賈拉克瑟斯領主。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24590,'zhTW','瑪洛嘉領主必須死!','瑪洛嘉領主是位居尖塔之間的冰封王座守護者。巫妖王用上千名受害冒險者的骨頭把它拼湊出來,同時瑪洛嘉也持有冰封王座的力量。$B$B如果不把這骸骨怨靈消滅掉的話,進佔冰冠城塞就毫無希望。$B$B六法議會已經頒布法令,要取瑪洛嘉領主的命!','殺死瑪洛嘉領主。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24584,'zhTW','瑪里苟斯必須死!','我們的資源遭到濫用了。號稱織法者的瑪里苟斯正在吸取這世上所有的魔法,並且把魔法凝聚在永恆之眼。少了魔法的力量,我們就完蛋了。$B$B$C,該把奧核之戰畫下句點了。六法議會已經下令,要取瑪里苟斯的命!','殺死瑪里苟斯。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24583,'zhTW','縫補者必須死!','俗稱『戰神化身』的縫補者是一個終極的憎惡體。它在龍骨荒野中對我們的部隊造成了極大的傷亡。$B$B我要你去召集同伴並且進入納克薩瑪斯的傀儡區,並且拆除掉那些傀儡。$B$B六法議會已經下令,要取縫補者的命!','殺死縫補者。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24582,'zhTW','講師拉祖維斯必須死!','講師拉祖維斯志得意滿地巡視著納克薩瑪斯的軍事區。傳聞中,只有經由他鍛鍊出來的死亡騎士才能禁得起他超凡的一擊。$B$B你跟你的團隊要去證明大家都錯了。$B$B六法議會已經下令,要取拉祖維斯的命!','殺死講師拉祖維斯。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24581,'zhTW','『瘟疫使者』諾斯必須死!','『瘟疫使者』諾斯,一個叛徒跟懦夫!對那些受到天譴蹂躪的眾多冤魂而言,他的罪行僅次於巫妖王本人!$B$B趕快前去納克薩瑪斯。他就躲在納克薩瑪斯的瘟疫區中的那些不死爪牙身後。$B$B消滅他!六法議會已經下令,要取諾斯的命!','殺死『瘟疫使者』諾斯。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24580,'zhTW','阿努比瑞克漢必須死!','阿努比瑞克漢,曾經是奈幽蟲族王國中至高無上的蜘蛛領主,它已經被巫妖王所降服,並且腐化成不死之身。$B$B如今他成為地穴領主,在他的起居室中鎮守著納克薩瑪斯的蜘蛛區,並且幫助科爾蘇加德擬定策略。$B$B六法議會已經下令,要取阿努比瑞克漢的命!','殺死阿努比瑞克漢。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24579,'zhTW','撒爾薩里安必須死!','『黑曜守護者』撒爾薩里安,守護著暮光飛龍的龍蛋。他居住在黑曜聖所的守護巨龍之間,其位於龍眠神殿下方。$B$B六法議會已經頒布法令,要取撒爾薩里安的命!','殺死撒爾薩里安。$B$B此任務可於任何難度或任何規模的團隊中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(24914,'zhTW','私人財產','你在這個盒子上找不到機關或縫隙。如果不是裡面有東西在晃動,很容易就把它錯認為一整塊固體金屬。$b$b如果說有人知道開啟它的方法的話,那非大領主莫格萊尼莫屬了。','把密封的箱子帶給在冰冠城塞的大領主達瑞安‧莫格萊尼。','','','','','','',0), +(25239,'zhTW','力量之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(25240,'zhTW','力量之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(25242,'zhTW','力量之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24825,'zhTW','智慧之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24830,'zhTW','智慧之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24831,'zhTW','智慧之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24827,'zhTW','勇氣之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24834,'zhTW','勇氣之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(24835,'zhTW','勇氣之路','','','','找『懺悔者』歐姆斯。','','','','',0), +(26012,'zhTW','龍眠神殿的麻煩','我的老朋友卡薩斯傳來了消息,龍骨荒野的龍眠神殿發生了可怕的事情。他的信息十分簡短,但是看起來神殿下方的晶紅聖所受到了某種攻擊。$B$B在達拉然的要事使我無法親自前往那裡,但是我聽說你在巫妖王的城塞中表現出色,所以你無疑是能解決事情的人選 -- 也許你可以替我幫助卡薩斯?','到龍骨荒野的龍眠神殿找卡薩斯談談。','','到龍骨荒野的龍眠神殿找卡薩斯談談。','','','','',0), +(26013,'zhTW','對聖所的攻擊','$R,神殿下方的晶紅聖所發生了可怕的事情。$B$B聖所的大門已成廢墟,而它的守護者被殘忍地殺死了。我們派出了斥候進行調查,但是他們都沒有回來。我無法不去想像最糟的情況。$B$B進入晶紅聖所,找出我的家園到底發生了什麼事情。有了進一步的資訊,我們才能夠藉此計畫我們的下一步。','調查龍眠神殿下的晶紅神殿。','','調查龍眠神殿下面的晶紅聖所。','','','','',0), +(26034,'zhTW','暮光毀滅者','這次進攻並非有勇無謀的行動,而是一次針對紅龍軍團經過精心策劃、直搗黃龍的謹慎行動。$B$B扎里斯利安,在那個崖地上監督著這次的進攻,但是這個軍團的真正領袖是一頭既兇猛又強大的暮光龍,名叫海萊恩。除了達貢納克斯,賽絲特拉的那些扭曲實驗品還沒有誰能完全成長到這種程度。$B$B殺死牠,$n,等到這次的入侵被完全擊退後,向卡薩斯回報你在這裡見到的所有一切。','擊敗海萊恩並擊退對晶紅聖所的入侵。','','到龍眠神殿的頂部向卡薩斯回報。','','','','',0), +(13622,'zhTW','上古史','這些碎片合在一起能夠拼出一把線條典雅的戰錘。它的構造必然含有某種泰坦特性。$B$B或許能在大資料庫中查詢到相關的資料。','將破裂的瓦蘭尼珥碎片帶給奧杜亞大資料庫的大資料庫控制臺。','','找大資料庫控制臺。','','','','',0), +(13629,'zhTW','瓦蘭尼珥,遠古諸王之錘','大資料庫發現了一種重鑄瓦蘭尼珥碎片的可行辦法:你必須將碎片放入一個名為尤格薩倫生物的實質形體內。$B$B聽來有些艱難,但對於有著如此力量的神器而言,你所冒的風險是值得的。','當尤格薩倫在施放震耳咆哮時,將破裂的瓦蘭尼珥碎片丟入尤格薩倫的嘴中,然後擊敗尤格薩倫並取回重鑄的遠古諸王之錘。$B$B只能在英雄模式下完成,並且至少有一名奧杜亞看守者未提供協助。','','找大資料庫控制臺。','','','','',0), +(13614,'zhTW','艾爾加隆','你真的辦到了,$n。把符印帶去給大資料庫控制臺,看你有沒有辦法獲得進入星穹渾天儀的許可。$B$B你最好動作快一點,$g小夥子:小姑娘;。時間緊迫。','將看守者符印帶給奧杜亞的大資料庫控制臺。','','找大資料庫控制臺。','','','','',0), +(13818,'zhTW','英雄:艾爾加隆','你真的辦到了,$n。把符印帶去給大資料庫控制臺,看你有沒有辦法獲得進入星穹渾天儀的許可。$B$B你最好動作快一點,$g小夥子:小姑娘;。時間緊迫。','將看守者符印帶給奧杜亞的大資料庫控制臺。','','找大資料庫控制臺。','','','','',0), +(13816,'zhTW','英雄:星穹渾天儀','聽著,$g小夥子:小姑娘;!艾澤拉斯的命運就取決於此。$B$B我們唯一的機會就是即時趕到星穹渾天儀,找到這個艾爾加隆,並且阻止他把任何訊息傳回去給他的泰坦主人。$B$B找到星穹渾天儀,然後把你找到的所有資料都帶回來。我們或許還有點時間應付艾爾加隆的到來。','奧杜亞大資料庫的勘察員洛倫要你找到通往星穹渾天儀的入口。','找到天文臺的入口','到奧杜亞找勘察員洛倫。','','','','',0), +(13631,'zhTW','情況良好,完美收場','我們最好得動作快點,$n。我們得從達拉然傳出回覆代碼。$B$B把這個交給羅甯,我在那裡跟你碰頭。','將回覆代碼Α帶給達拉然的羅甯。','','到水晶之歌森林找羅甯。','','','','',0), +(13819,'zhTW','英雄:情況良好,完美收場','我們最好得動作快點,$n。我們得從達拉然傳出回覆代碼。$B$B把這個交給羅甯,我在那裡跟你碰頭。','將回覆代碼Α帶給達拉然的羅甯。','','到水晶之歌森林找羅甯。','','','','',0), +(13604,'zhTW','大資料庫資料圓盤','這片白金圓盤有著令人驚嘆的對稱性,沒有一點刮痕或瑕疵。清晰的符文銘刻在它的邊緣之上,寫著「大資料庫」。$B$B奧杜亞之中一定有裝置能夠讀取這片圓盤。','將大資料庫資料圓盤帶到奧杜亞的大資料庫控制臺。','','找大資料庫控制臺。','','','','',0), +(13817,'zhTW','英雄:大資料庫資料圓盤','這片白金圓盤有著令人驚嘆的對稱性,沒有一點刮痕或瑕疵。清晰的符文銘刻在它的邊緣之上,寫著「大資料庫」。$B$B奧杜亞之中一個有個裝置能夠讀取這片圓盤。','將大資料庫資料圓盤帶到奧杜亞的大資料庫控制臺。','','找大資料庫控制臺。','','','','',0), +(12157,'zhTW','迷路的信差','我們能活到現在已經很幸運了,$n。當我們一抵達,便立刻遭到天譴軍的埋伏。$B$B我們之中有個傢伙原來是詛咒神教的間諜。薩沙理安似乎握有更多的教徒滲透的證據。顯然一切都指向了上空。$B$B我派了一位我最優秀的信差前去龍骨荒野西郊的崗哨,但是他再也沒回來過。我怕他已經落入天譴軍的手中。你可以去一趟龍骨荒野搜尋他嗎?','到龍骨荒野和繁星之眠的信差蘭森談談。','','','','','','',0), +(12171,'zhTW','叛徒與通敵','我握有的名單必須要送到高階指揮官海弗德‧龍禍的手上。他指揮整個第七軍團,駐紮在龍骨荒野東部邊境的溫特加德要塞裡。$B$B若是名單中的任何一位叛徒也在溫特加德...這將會是一場大災難。$B$B快,$n,把這份文件拿給繁星之眠的帕雷那‧銀雲看,並向她解釋你的任務內容。她會讓你乘坐最快的角鷹獸前往溫特加德!','將聯盟公文交給繁星之眠的帕雷那‧銀雲。','','到龍骨荒野的繁星之眠找帕雷那·銀雲。','','','','',0), +(12174,'zhTW','高階指揮官海弗德‧龍禍','<帕雷那將公文還給你。>$B$B$n,雪風會帶你去溫特加德,我保證這會是你前所未有的極速體驗。去吧!','將聯盟公文交給高階指揮官海弗德‧龍禍,他就在龍骨荒野東邊的溫特加德要塞中。','','到龍骨荒野的溫特加德要塞找高階指揮官海弗德·龍禍。','','','','',0), +(12235,'zhTW','納克薩瑪斯與溫特加德的陷落','弗塔根領主親領一支強大的突襲部隊在憤怒之門對抗阿薩斯。面對這個頑強的抵抗,阿薩斯派出納克薩瑪斯來到我們的領空。科爾蘇加德躲藏在浮空堡壘內,他的地面指揮官,賽爾贊,則負責進攻溫特加德要塞。溫特加德下城的部份已經失守,從廢墟中搶救出生還者的機會也隨著時間逐漸流失。$B$B我們要儘快行動!即刻回報位在獅鷲基地的獅鷲獸指揮官烏里克!他可以加快你救援的速度。$B$B還杵在這幹嘛!','和獅鷲獸指揮官烏里克交談,他就在溫特加德要塞的獅鷲站裡。','','','','','','',0), +(12237,'zhTW','溫特加德防衛者的航行','有了這個哨子,你可呼喚一頭溫特加德獅鷲獸。乘駕牠前往溫特加德村的廢墟,現被稱為腐屍農地,就在東南方。一旦飛抵農地,請仔細尋找無助的溫特加德村民。發現了以後,飛低並且利用獅鷲獸接他們起來,將他們帶回獅鷲獸基地。$B$B那裡滿是天譴軍,你得好好運用智慧,英雄。祝你好運!','救出5名無助的溫特加德村民後,返回溫特加德要塞的獅鷲獸指揮官烏里克之處。','','到龍骨荒野的溫特加德要塞找獅鷲獸指揮官烏里克。',' 拯救無助的村民','','','',0), +(12251,'zhTW','向高階指揮官回報','立刻去向高階指揮官海弗德‧龍禍回報,$n。通知他你的任務成功了,而救出來的村民已經都回到工作崗位上。','與龍骨荒野上,溫特加德要塞的高階指揮官海弗德‧龍禍談話。','','','','','','',0), +(12253,'zhTW','城鎮廣場救援行動','沿著這條路過去就是溫特加德的市鎮廣場,那曾經是溫特加德市民的活動集散地,現在變成了戰區,到處都是兇殘的魂屍,一心一意想向生者復仇。$B$B我們一定得去救援廣場周邊建築中被困的村民!我向你要求太多了,$n,但你是我唯一能用的士兵。解救我們的人民。沿著這條路走到市鎮廣場,然後進入那些房子裡。把任何膽敢擋你路的傢伙都殺掉!如果你活著回來的話就來跟我回報。','溫特加德要塞的高階指揮官海弗德‧龍禍要你去拯救6個受困的溫特加德村民。','','到龍骨荒野的溫特加德要塞找高階指揮官海弗德·龍禍。','拯救受困的溫特加德村民','','','',0), +(12309,'zhTW','找到德肯!','在天譴軍團突破南方的牆壁之後,我派了騎兵德肯去調查本鎮的墓穴。不久前我收到他的報告。$B$B危害此地的不死生物來自兩處:溫特加德的廢墟,現在根本是天譴軍團的繁殖場,還有第二個地方,我們自己的城鎮墓穴!在混亂之中,天譴軍團把一個死靈領主給弄進了墓穴裡。$B$B德肯在他的報告中請求支援。你去找他並且幫助他,$n。墓穴就在城鎮廣場的西方邊緣。','在龍骨荒野的溫特加德墓穴找出騎兵德肯。','','','','','','',0), +(12311,'zhTW','貴族之墓','在一座座冰冷石牆圍繞的墓穴中,安葬著死於北裂境的達官貴人們的屍骨。在墓穴的最中心,有一個死靈領主坐鎮其中,喚醒這些屍骸成為天譴軍的手下。$B$B你一定要突入溫特加德墓塚的最深處,殺掉死靈領主艾瑪利恩,唯有如此才能弭平墓穴中的攻擊!$B$B此外,$n,在艾瑪利恩的房間裡面尋找任何可疑的線索。','溫特加德要塞的騎兵德肯需要你殺掉死靈領主艾瑪利恩。','','到龍骨荒野的溫特加德要塞找騎兵德肯。','','','','',0), +(12791,'zhTW','魔法王國達拉然','嗨,$n。你可能有注意到,也可能沒注意到,我們祈倫托把我們的城邦移到了北裂境這裡來。$B$B達拉然再也不會待在洛丹米爾湖畔的保護罩裡面了。現在這個城市靠著魔法漂浮在水晶之歌森林的上方。$B$B我們相信你已經準備好要前往城市了。再和我談一次話,我就會施展傳送法術把你送去那裡。$B$B當你抵達的時候,去找大法師瑟琳卓並且把我的徽記交給她,證明你和我談過。','將祈倫托徽記交給位於達拉然裡紫羅蘭之門的大法師瑟琳卓。','','到達拉然的紫羅蘭之門找大法師瑟琳卓交談。','','','','',0), +(12794,'zhTW','魔法王國達拉然','嗨,$n。你可能有注意到,也可能沒注意到,我們祈倫托把我們的城邦移到了北裂境這裡來。$B$B達拉然再也不會待在洛丹米爾湖畔的保護罩裡面了。現在這個城市靠著魔法漂浮在水晶之歌森林的上方。$B$B我們相信你已經準備好要前往城市了。再和我談一次話,我就會施展傳送法術把你送去那裡。$B$B當你抵達的時候,去找大法師瑟琳卓並且把我的徽記交給她,證明你和我談過。','將祈倫托徽記交給位於達拉然裡紫羅蘭之門的大法師瑟琳卓。','','到達拉然的紫羅蘭之門找大法師瑟琳卓交談。','','','','',0), +(12796,'zhTW','魔法王國達拉然','嗨,$n。你可能有注意到,也可能沒注意到,我們祈倫托把我們的城邦移到了北裂境這裡來。$B$B達拉然再也不會待在洛丹米爾湖畔的保護罩裡面了。現在這個城市靠著魔法漂浮在水晶之歌森林的上方。$B$B我們相信你已經準備好要前往城市了。再和我談一次話,我就會施展傳送法術把你送去那裡。$B$B當你抵達的時候,去找大法師瑟琳卓並且把我的徽記交給她,證明你和我談過。','將祈倫托徽記交給位於達拉然裡紫羅蘭之門的大法師瑟琳卓。','','到達拉然的紫羅蘭之門找大法師瑟琳卓交談。','','','','',0), +(12790,'zhTW','學習來去之法:魔法通道','怕你還不知道,你可以使用我身後平臺的水晶傳送至達拉然下方,水晶之歌森林中的紫羅蘭看臺。$B$B同樣地,你也可以使用遺跡的水晶回到我上頭的房間。$B$B我希望你可以現在試試看。','位於達拉然裡紫羅蘭之門的大法師瑟琳卓,希望你使用傳送至紫羅蘭看臺的水晶以及傳送至達拉然的水晶。','','到達拉然的紫羅蘭之門找大法師瑟琳卓交談。','使用傳送至達拉然下方遺跡的水晶','使用傳送至達拉然的水晶','','',0), +(14443,'zhTW','破損的劍柄','這把老舊破碎的劍柄已經失去了往日的光輝。這劍柄在斷掉以前一定是某個工匠的精心傑作。$B$B如此優雅的徽記與劍柄上奇特的珠寶裝飾,在在顯示出這把劍的主人肯定不同凡響。白銀誓盟的人一定有興趣了解如何修復這把藝術品。到銀白聯賽場地南邊的奎爾德拉之眠去找他們的代理人。','到銀白聯賽場地南邊的奎爾德拉之眠,把破損的劍柄帶給卡拉迪斯‧亮矛。','','到奎爾德拉之眠找卡拉迪斯·亮矛。','','','','',0), +(14444,'zhTW','龍族的知識','不會錯的-這劍柄是屬於一把強大且古老的武器,但會是哪一把呢?我不認為我曾見過或者聽過這把劍上的徽記,但這並不表示我們毫無頭緒。$B$B考雷斯塔茲,也就是為人所知的卡薩斯,是奎爾多雷和祈倫托的老朋友。以他豐富的知識與資源,想必能理出些頭緒。到龍眠神殿的最上層找他商議,然後回達拉然找白銀領區的秘法師泰巴林報告結果。','與龍眠神殿最上層的卡薩斯談話。','','到達拉然的白銀領區找秘法師泰巴林。','向卡薩斯詢問劍柄的來源。','','','',0), +(14457,'zhTW','奪日者計畫','我在城底區的線民說:奪日者密探在跟黑市商人買材料。奪日者通常不會對下水道的事情感興趣,顯然另有所圖。$B$B去城底區找出密探,把他解決了,然後檢查一下密探身上有沒有任何資訊可以幫我們找出龍眠之書的下落。絕對不能讓他們搶先一步把書帶回寒冰皇冠。','取得奪日者的命令。','','到達拉然的白銀領區找秘法師泰巴林。','','','','',0), +(20438,'zhTW','適當的偽裝','幫助你潛入奪日者聖堂可不是件簡單的差事。只有身著奪日者外袍的人才能獲准進入聖堂。假如我們可以拿到一件,再加上簡單的附魔,就可以完成後續的工作。$B$B你可以在命運織坊上方的露臺找到桑迪‧光爍 。我以前幫過他幾次,所以他欠我一個人情。他在城裡面幫各式各樣的人處理送洗的衣物。或許他有辦法把外袍『借』你一陣子。','從桑迪‧光爍那裡取得一件借來的外袍。','','到達拉然的白銀領區找秘法師泰巴林。','','','','',0), +(20439,'zhTW','與博學者會面','我已經在外袍上施加了魔法,這應該可讓你暫時避開奪日者聖堂的耳目。你應該有足夠的時間潛入『下流畜生酒店』,並與奪日者的聯繫人,博學者哈索瑞爾會面。$B$B在喬裝的掩護之下,設法取得他們向龍眠者借來的《上古龍鑄劍刃》,並且把書交給我。','從博學者哈索瑞爾那裡取回上古龍鑄劍刃之書。','','到達拉然的白銀領區找秘法師泰巴林。','','','','',0), +(24454,'zhTW','回報卡拉迪斯‧亮矛','我們必須盡快把書交給卡拉迪斯‧亮矛。你可以帶給他嗎?我不放心讓其他人運送這本書,而你證明了你擁有牽制奪日者的資質。$B$B帶著它前往奎爾德拉之眠,地點在寒冰皇冠的銀白聯賽場地之南。卡拉迪斯將帶著劍等你。一旦鑑定出這把劍的來歷,我們就能將其納入我們的名下。','將上古龍鑄劍刃交給奎爾德拉之眠的卡拉迪斯‧亮矛。','','到奎爾德拉之眠找卡拉迪斯·亮矛。','','','','',0), +(24554,'zhTW','破損的劍柄','這把老舊破碎的劍柄已經失去了往日的光輝。這劍柄在斷掉以前一定是某個工匠的精心傑作。$B$B如此優雅的徽記與劍柄上奇特的珠寶裝飾,在在顯示出這把劍的主人肯定不同凡響。奪日者的人一定有興趣了解如何修復這把藝術品。到銀白聯賽場地南邊的奎爾德拉之眠去找他們的代理人。','到銀白聯賽場地南邊的奎爾德拉之眠,把破損的劍柄帶給米拉連恩‧日炎。','','到奎爾德拉之眠找米拉連恩·日炎。','','','','',0), +(24555,'zhTW','龍族的知識','不會錯的 - 這劍柄是屬於一把強大且古老的武器,但會是哪一把呢?我無法辨識上頭的獨特徽記,不過事情還有解決的辦法。$B$B考雷斯塔茲,也就是為人所知的卡薩斯,是奎爾多雷和祈倫托的老朋友。以他豐富的知識與資源,想必能理出些頭緒。到龍眠神殿的最上層找他商議,然後回達拉然找奪日者聖堂的博學者哈索瑞爾報告結果。','與龍眠神殿最上層的卡薩斯談話。','','到達拉然的下流畜生酒店找博學者哈索瑞爾。','向卡薩斯詢問劍柄的來源。','','','',0), +(24557,'zhTW','白銀誓盟計畫','我在城底區的線民發現有白銀誓盟的密探在咒語與烏鴉酒店蒐集情報。白銀誓盟的人通常不會在下水道出沒,所以他們一定在密謀些什麼。$B$B前去城底區找出這個密探,並解決他。檢查一下他身上有沒有任何資訊可以幫我們找出龍眠之書的下落。我們不能讓那些白銀誓盟的傻瓜搶先一步把書帶回寒冰皇冠。','取得白銀誓盟命令。','','到達拉然的下流畜生酒店找博學者哈索瑞爾。','','','','',0), +(24556,'zhTW','適當的偽裝','幫助你潛入白銀領區可不是件簡單的差事。只有身著白銀誓盟外袍的人才能獲准進入聖堂。假如我們可以拿到一件,再加上簡單的附魔,就可以完成後續的工作。$B$B你可以在命運織坊上方的露臺找到桑迪‧光爍。我以前幫過他幾次,所以他欠我一個人情。他在城裡面幫各式各樣的人處理送洗的衣物。或許他有辦法把外袍『借』你一陣子。','從桑迪‧光爍那裡取得一件借來的外袍。','','到達拉然的下流畜生酒店找博學者哈索瑞爾。','','','','',0), +(24451,'zhTW','謁見秘法師','我已經在外袍上施加了魔法,這應該可讓你暫時避開白銀誓盟的耳目。你應該有足夠的時間進入白銀領區的頂樓,並與白銀誓盟的聯繫人秘法師泰巴林會面。$B$B在喬裝的掩護之下,設法取得他們向龍眠者借來的《上古龍鑄劍刃》,並且把書交給我。','從秘法師泰巴林那裡取回上古龍鑄劍刃之書。','','到達拉然的下流畜生酒店找博學者哈索瑞爾。','','','','',0), +(24558,'zhTW','回報米拉連恩‧日炎','我們必須盡快把書交給米拉連恩‧日炎。你可以帶給他嗎?我不放心讓其他人運送這本書,而你證明了你擁有牽制白銀誓盟的資質。$B$B帶著它前往奎爾德拉之眠,地點在寒冰皇冠的銀白聯賽場地之南。米拉連恩將等待著你。如果他能鑑定出這把劍的來歷,我們就能將其納入埃薩‧奪日者的名下,並且讓達拉然以及聯盟們看到,我們將一馬當先對抗巫妖王。','將上古龍鑄劍刃交給奎爾德拉之眠的米拉連恩‧日炎。','','到奎爾德拉之眠找米拉連恩·日炎。','','','','',0), +(11869,'zhTW','跟蚌殼一樣開心','往西邊走你會發現庫姆亞湖。目前就我們所知,這是世上僅存的淡水巨型蚌殼棲息地。$B$B當然奈辛瓦里的僕人們現在將這個湖當作巨型珍珠飼養場。一定得阻止他們!得教訓一下那些想要危害整個物種的人。$B$B到庫姆亞湖去,並找出掠寶狂潛水者。殺光他們,把湖水染紅為止!等目標完成後回來找我!','北風凍原,D.E.H.T.A.駐營的祭師賽紐斯要你去殺掉10個掠寶狂潛水者。','','到北風凍原的D.E.H.T.A.駐營找祭師賽紐斯。','','','','',0), +(11870,'zhTW','被遺棄之境','我們剛收到來利安卓的消息,提到奈辛瓦里聘用的雇佣兵正在將貨物從海岸移動至奈辛瓦里的主貨船上。毫無疑問地,他們計畫從這樁殘忍的生意中大賺一筆!$B$B她要求我們派人前往協助被遺棄之境,就在南邊的北風凍原沿海地帶。$B$B動作快點,利安卓在那裡等你!','找到被遺棄之境的祭師利安卓。','','','','','','',0), +(11871,'zhTW','在我們的看守下,想都別想','散佈在整個海灘上,處於船隻的殘骸與投棄的貨物之中的,就是木箱和一袋袋的動物肢體。看來似乎那個奈辛瓦里和北海掠劫者是一夥的。那些骯髒的海賊正在運送由奈辛瓦里的兇惡僕人堆積在離岸的貨物。無疑地他們最後將會回到家鄉,坐擁財富,成為遍及艾澤拉斯的無恥之徒。$B$B這不會發生的。在我們的看守下,想都別想。將你在這片海灘上發現的所有東西帶來給我。他們將永遠都無法擁有這些東西!','北風凍原,被遺棄之境的祭師利安卓要你去取得12箱的動物肢體。','','到北風凍原的被遺棄之境找祭師利安卓。','','','','',0), +(11872,'zhTW','惡劣的蚌殼大師','一個人把自己神化為「蚌殼大師」真的是很下流,好像他們支配著整個海洋裡的生物一樣。沒有人可以這樣自稱!$B$B一定得找到這個「蚌殼大師」並殺了他。最後一次看到他是在被遺棄之境的海岸外失事的殘骸那。$B$B一旦完成此任務,回到北邊的D.E.H.T.A.駐營找祭師賽紐斯,並告知她任務已成功完成。','殺了蚌殼大師凱並回到D.E.H.T.A.駐營找祭師賽紐斯。','','到北風凍原的D.E.H.T.A.駐營找祭師賽紐斯。','','','','',0), +(11876,'zhTW','幫助那些無力自救者','牠們是雄偉的野獸,對吧?$B$B<拉索利厄思指著北風凍原的長毛象。>$B$B他們的數量正在日漸銳減。那些自稱為獵人的惡魔,為了消遣和財富屠殺這些野獸。$B$B<拉索利厄思的臉因憤怒而扭曲。>$B$B就是這些嗚咽讓我發怒,$n。你可以聽到這些聲音伴隨著風聲傳來。這些小長毛象,被困在獵人邪惡的陷阱裡,對我們求救著。$B$B帶著這個錘子去粉碎那些陷阱。讓這些小象自由!','大德魯伊拉索利厄思要你使用D.E.H.T.A.陷阱粉碎者去釋放8隻小長毛象。拉索利厄思就在北風凍原的D.E.H.T.A.駐營。','','到北風凍原的D.E.H.T.A.駐營找大德魯伊拉索利厄思。','釋放小長毛象','','','',0), +(11878,'zhTW','庫諾克知道','雖然你英勇地拯救了許多小象,但它們大多數依舊會死去。你要知道,沒有一個照顧的人,這些小象得在荒野之中自己求生。$B$B但現在有個方法!能幫助那些倖存的!$B$B此地北方的長毛象原野上,靠近沸水之池的邊界,你可以找到『巨獸』庫諾克:一隻古老而睿智的長毛象。帶著長毛象孤兒去找庫諾克,他會知道該怎麼辦。','帶失怙的小長毛象去找北風凍原的『巨獸』庫諾克。','將猛獁幼崽孤兒交給庫諾克','到北風凍原找『巨獸』庫諾克。','','','','',0), +(11879,'zhTW','『長毛象摧毀者』卡烏','你無法單獨擊敗那隻該為屠殺我族負起責任的生物。凍原的長毛象將會幫助你!$B$B前往平原冒險並找到一隻公長毛象。牠將會讓你騎乘並控制牠的行徑。騎上牠並在北邊卡烏的棲息地找到卡烏。同心協力,你們將會是促成卡烏死亡的那隻手。$B$B摧毀卡烏的軍隊並從卡烏手中奪走他那把心愛的戰戟。成功後回到D.E.H.T.A.駐地找拉索利厄思。','殺掉『長毛象摧毀者』卡烏並取得卡烏的戰戟。將卡烏的戰戟送到北風凍原的D.E.H.T.A.駐營交給大德魯伊拉索利厄思。','','到北風凍原的D.E.H.T.A.駐營找大德魯伊拉索利厄思。','','','','',0), +(11892,'zhTW','刺殺哈洛德‧蘭恩','你為北風凍原上的動物們貢獻很大,$n。那些奈辛瓦里的狗腿已經被擊退,至少教訓他們短時間內不會忘記。$B$B哈洛德‧蘭恩,納葛蘭大屠殺的主要元兇,已經被確定正是凍原上負責奈辛瓦里運作的人。他正駐紮於西方的庫姆亞湖。$B$B<伊拉索利厄思交給你一把雕工複雜的橡木號角。>$B$B找到蘭恩,殺掉他。如果你需要我們的幫忙,就吹響這把號角吧。','大德魯伊拉索利厄思要你殺掉哈洛德‧蘭恩,拉索利厄思就在北風凍原的D.E.H.T.A.駐營。','','到北風凍原的D.E.H.T.A.駐營找大德魯伊拉索利厄思。','','','','',0), +(11560,'zhTW','喔不,蝌蚪!','喔太好了,你回來了!$B$B當村子的山崩越過河後出現了洞穴,一個被稱為克拉希穆司的壞心龍蝦人,從洞穴裡冒了出來把冬鰭蝌蚪偷走。$B$B追隨他的所有魚人們身上都產生了變化,當他們再度現身時,他們已經被他控制了。$B$B$C,你一定得游過河並解救村落和洞穴中的冬鰭蝌蚪。$B$B冬鰭部族的未來就靠你了!','莫戈莫戈大王要你去解救20個冬鰭蝌蚪。完成任務後回到冬鰭避居地找他。','','到北風凍原的冬鰭避居地找莫戈莫戈大王。','解救冬鰭蝌蚪','','','',0), +(11562,'zhTW','我被我的清潔工勒索','我有件羞於承認的事:我被勒索了!$B$B姆姆戈莫同意替我清理一些物品,並找到了我的備用魚人服裝。他威脅要將我的真面目揭穿給其它魚人知道。$B$B我不需要跟你解釋這會是一場多嚴重的混亂吧!除此之外,我有個計畫得要把那套服裝拿回來。$B$B拜託,$n,前往避居地另一頭的北邊找姆姆戈莫,並答應他的要求,不管是什麼樣的要求。','莫戈莫戈大王要你前往北風凍原的冬鰭避居地西北盡頭與姆姆戈莫談談。','','','','','','',0), +(11563,'zhTW','戈墨爾吉珥 墨勒吉爾 吉爾戈!!!','要是你那雙可憐的小眼睛有用的話,你就應該看得出來,我們正在被那些海灣北部的虎鯨屠殺!$B$B假如你那個寶貝的夜精靈王想把他的備用服裝要回去,我想你最好認真的幫助我,把虎鯨王吉爾戈的頭顱帶來給我,牠踏著命運的浪潮而來 -- 所有聽見波濤中海妖輓歌的生命,終將希望破滅!$B$B動作要快,$r,就算我們浪費時間在講話的時候,冬鰭魚人都在失去他們的生命!','姆姆戈莫要你帶著吉爾戈的頭顱回到冬鰭避居地給他。','','到北風凍原的冬鰭避居地找姆姆戈莫。','','','','',0), +(11565,'zhTW','備用服裝','很好,只要你們的國王繼續協助我們對抗敵人,他的秘密就不會有洩漏的危險。$B$B嗯,把這個交給他。我仔細清理過了,雖然我不知道他為什麼需要第二件偽裝。$B$B或許他心裡有什麼事想告訴你?','把莫戈莫戈大王的備用服裝帶到冬鰭避居地給他。','','到北風凍原的冬鰭避居地找莫戈莫戈大王。','','','','',0), +(11566,'zhTW','永不...屈服!','該是結束這種違反自然情況的時候了,$n。為了讓冬鰭魚人能夠有個未來,克拉希穆司必須死!$B$B我要你帶著我的備用魚人服裝,以投降當藉口混入冬鰭洞窟。拿著白旗,魚人就不會攻擊你。$B$B你可以在洞窟的西南邊最角落處找到他。一旦你靠得夠近,解決掉克拉希穆司。將他的爪子帶來給我,證明你已完成這個污點行動。','冬鰭避居地的莫戈莫戈大王要你帶一個克拉希穆司之爪給他。','','到北風凍原的冬鰭避居地找莫戈莫戈大王。','','','','',0), +(12486,'zhTW','前往博格洛克前哨,快一點!','你感覺到了嗎?$B$B<索拉諾克在混亂中抓了一下他的胸口。他的手穿過了瀰漫的紅熱蒸汽。>$B$B很糟糕的事情發生在我的老朋友,先知厲行者的身上。我就是感覺到了。$B$B他前往北方的時候帶了一個弟子同行。他們前去協助霸主在休拉薩盆地的邊緣建立前哨站。$B$B他徒弟的名字叫做嗥牙,她是個靈語者。$B$B或許她會知道發生了什麼事。或起碼,她能幫你找出事情的真相。','和博格洛克前哨的靈語者嗥牙交談。','','','','','','',0), +(11624,'zhTW','天空知道','我必須找出我的主人,先知厲行者到底發生了什事!$B$B稍早,他在附近的瑪格默斯觀察猛瑪象人。不過他的斥候當中一位剛剛回來,提到整支隊伍都被摧毀了,而先知被拖進去該地的深處。$B$B在我委派你這個自殺任務前,我想要先跟精靈們討論,了解更多訊息。$B$B在西邊的艾卓納斯遺跡有一個名為英波里安的風元素。她很睿智,也許可以提供你有關我們尋求的資訊。','前往艾卓納斯遺跡與英波里安交談。','','','','','','',0), +(11627,'zhTW','沸點','喔,這正是想要的情報:你們『先知』的下落與狀況。他也不是什麼都知道嘛,無法避開降臨在自己頭上的麻煩。$B$B總之,我會告訴你取得那些情報的方法。但首先,你得先替我做些事情。$B$B我相信你應該在南方見識過了水與火之間的戰爭。『沸滾』持續地讓『翻湧』的水池沸騰,他們兩個已經戰鬥了許多年。$B$B前往焦炭高崗和極熱之池,讓他們兩個停止爭吵。','英波里安要你把『沸滾』和『翻湧』打倒屈服。等他們屈服之後再回到艾卓納斯遺跡找她。','','到北風凍原的艾卓納斯遺跡找英波里安。','『沸滾』屈服','『翻湧』屈服','','',0), +(11649,'zhTW','狂怒微粒','雖然,他們的小爭執我們已經解決了,仍然還要幫助你和你的靈語者。$B$B如你所見,我的僕從們被火水元素的戰爭所激怒,而短時間內不會有任何的改變,但是,你可以從中取得利益。$B$B為了要幫助你,我們需要他們身上的微粒。深入廢墟裡面,從這些暴風身上取回微粒吧。','收集5個暴風雨微粒,然後把它們交給艾卓納斯遺跡的英波里安。','','到北風凍原找埃德拉納斯廢墟的因波莉安。','','','','',0), +(11629,'zhTW','回去找靈語者','你已經做到我請求你的事情,我這就把你想要的拿給你。$B$B將元神交還給博格洛克前哨的靈語者。如果她夠睿智,她就會知道一個儀式,能讓你獲得你所尋覓的消息。','將英波里安的元神帶給博格洛克前哨的靈語者嗥牙。','','到北風凍原的博格洛克前哨找靈語者嗥牙。','','','','',0), +(11631,'zhTW','風之幻象','拿去,$n,我將元神和你調整一致了。$B$B當我的風圖騰出現以後,放開你的靈魂迎向元神,並且全神貫注在先知厲行者的天命。$B$B風之靈無所不至;有幸你將能獲得預見的能力。','在博格洛克前哨中嗥牙的圖騰,使用英波里安的元神施展儀式,以獲得有關於先知厲行者的消息。$B$B結束以後,再向靈語者嗥牙交談。','','到北風凍原的博格洛克前哨找靈語者嗥牙。','預知先知厲行者的命運','','','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_04' WHERE sql_rev = '1647383981192969219'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_05.sql b/data/sql/updates/db_world/2022_03_18_05.sql new file mode 100644 index 000000000..c715f55bc --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_05.sql @@ -0,0 +1,83 @@ +-- DB update 2022_03_18_04 -> 2022_03_18_05 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_04'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_04 2022_03_18_05 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647384164947318079'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647384164947318079'); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(12593,'zhTW','為巫妖王效力','這就是我的一切:憤怒、殘暴與復仇 - 我將全部賜予你,獲選的騎士。我將不朽永生也贈與給你,你的存在將宣示天譴軍團所帶來的全新黑暗時代。$B$B現在放眼望向下方的大地。血色十字軍急切地想要消除我所成就的一切,而聖光之願大膽的和我們作對–他們簡直就是瘟疫之地的污點。他們必須為這種放肆付出代價。$B$B你將會成為我的懲戒之力。當你前進時,毀滅厄運將會長伴左右。去完成你的使命吧,死亡騎士。','到亞榭洛之心向講師拉祖維斯報到。','','','','','','',0), +(12619,'zhTW','紋飾符文刃','對死亡騎士來說,最為重要的一件裝備就是符文刃。死亡騎士正是透過符文刃來支配冰霜、血魄與穢邪之力。符文刃同時也是死亡騎士用來蓄積符能的容器。$B$B現在,你該為自己打造第一柄符文刃了。搜索這層樓的武器架,然後找出一柄戰損之劍。一旦找到了,就把那柄劍拿去附近的符文熔爐,用它來製造一柄符文刃。','搜索黯黑堡的武器架,找出一把戰損之劍,然後在符文熔爐使用它來鍛造一把符文刃劍。$B$B將符文刃劍交給黯黑堡的講師拉祖維斯。','','到黯黑堡的亞榭洛之心找講師拉祖維斯。','','','','',0), +(12636,'zhTW','亞榭洛之眼','看哪,亞榭洛,死亡之城!這世上沒有能夠與之相比的東西!就算是強大的納克薩瑪斯也無法抵擋黯黑堡的直接攻擊。位於這個亡域之巔的,就是全知的亞榭洛之眼。主人可以透過它從遠處觀察敵人所控制的領土。亞榭洛之眼所見的一切亦為巫妖王所見。現在是時候讓你透過亞榭洛之眼來窺探了!巫妖王召見你,$n。$B$B立刻動身!苦難與你同在,$g兄弟:姊妹;...','向黯黑堡的巫妖王報到。','','','','','','',0), +(12641,'zhTW','死亡從天而降','在這個平台的上方,矗立著亞榭洛之眼。你可以從該處召喚出一個探測之眼,用它來分析血色十字軍在新亞法隆的駐防。亞榭洛之眼所擁有的力量應該可以令你輕易的獲取所需的資訊。$B$B使用亞榭洛之眼的虹吸能力來分析熔爐、市政廳、堡壘和禮拜堂。控制亞榭洛之眼的裝置就在平台的兩端。不要浪費時間,$n。$B$B此地天譴軍團勢在必得。這是巫妖王之令!','巫妖王命令你利用亞榭洛之眼分析血色堡、新亞法隆熔爐、新亞法隆市政廳,以及赤紅之焰禮拜堂。$B$B使用亞榭洛之眼控制裝置來控制亞榭洛之眼。','','到黯黑堡找巫妖王。','分析新亞法隆熔爐','分析新亞法隆市政廳','分析血色堡','分析赤紅之焰禮拜堂',0), +(12657,'zhTW','天譴軍團的力量','仔細聽好,死亡騎士,因為我要對你說的話將是一場戰爭的開端。我已經公佈了最終的裁決:全‧都‧得‧死。沒有人可以如此反抗天譴軍團而不付出代價!$B$B你在第一項任務中表現得很好,因此在下一個任務中也該好好為我效忠。帶著我的裁決去亞榭洛的指揮所找大領主莫格萊尼,你會在一樓找到他。告訴他開始進襲。$B$B等我們解決了十字軍之後,我們將會消滅銀色黎明。','巫妖王命令你將他的飭令交給黯黑堡的大領主達瑞安‧莫格萊尼。$B$B使用巫妖王背後發著光的傳送器去指揮大廳找大領主達瑞安‧莫格萊尼。','','','','','','',0), +(12670,'zhTW','血色收割','亞榭洛下方就是死亡止境,我們攻擊血色十字軍的出發點。你去這座平台的兩端騎我的天譴獅鷲獸向瓦拉納爾親王報到。照著他說的話做,你就可以活著看到大地落入我們的手中。','向死亡止境的瓦拉納爾親王報到。','','','','','','',0), +(12678,'zhTW','混沌所驅,讓苦難控制你的情感','他們現在在死亡止境外頭站穩了陣腳,徒勞地試著想要逼退我們以保住他們的馬匹、礦坑、木材、以及人民。$B$B這是你在天譴戰爭中所要學習的第一課:恐懼!$B$B去南邊的前線,消滅血色十字軍。保留屍體,以利我們製造死亡大軍。$B$B但最重要的是,要殺死逃跑的村民。他們可以接受士兵犧牲喪命,但村民呢?村民的死將會把恐懼深植在人們心中。','死亡止境的瓦拉納爾親王命令你殺死10個血色十字軍或血色農民,以及10個避風郡市民。','','到東瘟疫之地: 血色領區的死亡止境找瓦拉納爾親王。',' 殺死血色十字軍','殺死避風郡市民','','',0), +(12679,'zhTW','今晚我們在避風郡用餐','晦天者是毫無心智的傀儡,只有一個存在目的:殺!他們專門鎖定任何從避風郡逃向新亞法隆尋求安全的人們。我們當然不能讓那些懦夫逃向安全的地方,然後武裝起來對抗我們!$B$B但我們有個小小的問題。它們為了最大的射程和傷害而使用了薩鋼箭。然而,薩鋼是一種只有北裂境出產的金屬,因此我們資源有限!替我回收那些箭,那麼我就會賜給你可觀的獎賞。','死亡止境的『晦天者』歐里索斯要你回收15枝薩鋼箭。','','到東瘟疫之地: 血色領區的死亡止境找『晦天者』歐里索斯。','','','','',0), +(12680,'zhTW','俠盜獵馬手','十字軍在距離我們一步之遙的地方有個滿是馬匹的獸欄真是太幸運了。雖然他們持續防守它,一個積極進取的新生死亡騎士應該能夠突破他們的防守,並且取得屬於$g他:她;的東西!$B$B一旦你從避風郡獸欄取得了馬匹,就把牠帶回來給我,我會設法把牠變成一匹優秀的死亡戰騎。$B$B記住,$n,只有被抓到才算是偷。小心那個混蛋獸欄管理員,基崔克!','『騎士』撒拉納要你從避風郡獸欄偷來一匹馬,然後回到死亡止境交給他。','','到東瘟疫之地: 血色領區的死亡止境找『騎士』撒拉納。',' 成功盜取馬匹','','','',0), +(12687,'zhTW','進入陰影之境','你所偷來的馬匹已經被帶往陰影之境了。我的黑騎兵就是在那裡殺死這頭野獸,然後將它復活成一匹死亡戰騎的。你覺得你有勇氣進入陰影之境求取死亡戰騎嗎?$B$B如果你接受的話,我將會把你傳送至陰影世界。一旦你到了那裡,到我們南方的曠野去找黑騎兵。如果要凱旋而歸,你就得殺死他,奪取他的死亡戰騎,然後返回死亡止境。一旦你成功了,就發出騎士之喚吧。','死亡止境的『騎士』撒拉納要你去挑戰並殺死亞榭洛黑騎兵,然後奪走他的亞榭洛死亡戰騎。$B$B如果你成功了,把亞榭洛死亡戰騎帶回死亡止境,然後用騎士之喚召喚撒拉納。','騎手的挑戰','到東瘟疫之地: 血色領區的死亡止境找『騎士』撒拉納。','','','','',0), +(12697,'zhTW','『收割者』高希','混沌,$n!十字軍陷入了狂亂。他們將所有新亞法隆以外的軍力分到東邊的聖光之尖去建立了一個陣地。他們迫切地想要把避風郡礦坑的所有資源挖出來搬上他們停在海岸邊的護衛艦。$B$B我們稍微做點破壞吧,如何?我們很榮幸地有巫妖王的大死靈法師『收割者』高希同行,他有個禮物想要送給那些血色十字軍。去找他吧。','與死亡止境的『收割者』高希交談。','','','','','','',0), +(12698,'zhTW','好禮送不完','我從納克薩瑪斯的冰凍核心來此享用靈魂,並且給予我們的宿敵迎頭痛擊 - 我全力以赴。$B$B我要給你的這個裝置,是個攜帶式的瘟疫散播器。把它帶去東邊的避風郡礦坑,然後在作業中的血色礦工附近釋放它。用它來把礦工轉變成食屍鬼;當你擁有一小隻軍隊的時候再回來找我。我在靈魂真空清潔器裡面給他們預留了位置!','死亡止境的『收割者』高希交給你收割者的禮物,要你用在血色礦工身上。用這個裝置製造5個血色食屍鬼,然後把食屍鬼帶去給高希。','','去東瘟疫之地: 血色領地找死亡裂口的收割者戈提克。','帶回血色食屍鬼','','','',0), +(12700,'zhTW','趁勢攻擊','只剩新亞法隆和聖光之尖的血色部隊在挑戰我們了!是時候攻擊盤據聖光之尖的血色艦隊了。$B$B礦坑的事件已經在他們的部隊中造成混亂。他們正瘋狂的努力把那個區域的東西清空,回到他們的船上。$B$B時機成熟了!瓦拉納爾親王要抓準這個機會解決掉血色艦隊。立刻向他報到!','與死亡止境的瓦拉納爾親王交談。','','','','','','',0), +(12701,'zhTW','聖光之尖大屠殺','在匆忙的撤離中十字軍將會犯下一個致命的錯誤:忘記要檢查他們的礦車。$B$B你要回到東邊的避風郡礦坑,找出我的手下放在庫房外的礦車。爬進礦車裡面,然後讓不知情的血色礦工幫你滲透進敵人的後方。$B$B一旦你登上了他們的船艦,就用船上的大砲來對付他們!把他們屠殺殆盡!$B$B要離開的時候,就從大砲那裡召喚天譴獅鷲獸。','死亡止境的瓦拉納爾親王命令你殺死100個血色防衛者。','','到東瘟疫之地: 血色領區的死亡止境找『收割者』高希。','殺死血色防衛者','','','',0), +(12706,'zhTW','死亡止境的勝利!','<瓦拉納爾親王交給你一個封好的卷軸。>$B$B這是我們在死亡止境勝利的完整報告。你要把它交給大領主莫格萊尼 - 在亞榭洛裡。我有特地將你的英勇行徑寫進報告裡。莫格萊尼將會為了這場勝利給予你豐厚的獎勵,$n。$B$B去吧!','把瓦拉納爾親王的報告交給亞榭洛:黯黑堡中的大領主達瑞安‧莫格萊尼。','','到黯黑堡找大領主達瑞安·莫格萊尼。','','','','',0), +(12711,'zhTW','被遺棄的信件','','','','','','','','',0), +(12714,'zhTW','巫妖王的意志','是巫妖王的意志驅使我們前進,$n。沒有人比死亡騎士更瞭解這件事。我們的存在本質上就是與他的意識相連的。你當然聽過他和你說話-侵入你的思想...。$B$B你現在聽的見他的聲音嗎?也許對你來說還太早了。$B$B<莫格萊尼閉上眼睛,對一位看不見的主人點頭。>$B$B是的,我的主人。我會辦好的。$B$B$n,你要返回死亡止境向瓦拉納爾親王報到。這是巫妖王的敕令!','返回死亡止境,向瓦拉納爾親王報到。','','','','','','',0), +(12715,'zhTW','緬懷墓穴','我們已經對最後一個血色堡壘的大門展開攻擊了。我們的食屍鬼正在削弱牠們的防線,而我們則忙於強化我們新的前線基地,緬懷墓穴。$B$B前往墓穴南方,新亞法隆的邊界,然後向我親愛的兄弟,凱雷希斯親王報到。$B$B他會等著你。$B$B準備好,$n,因為你將要目睹天譴戰爭的下一個階段:支配!$B$B縱馬出發吧,死亡騎士!','向緬懷墓穴的凱雷希斯親王報到。','','','','','','',0), +(12716,'zhTW','瘟疫使者的要求','看看這個南瓜拼湊成的東西!有注意到少了什麼嗎?你當然沒注意到,因為你是個蠢貨!你大概是從腦袋開始死掉的吧。$B$B<諾斯嘆了口氣。>$B$B我收到命令要我製作一個瘟疫大鍋。你要協助我。$B$B在新亞法隆的大門裡面就是旅館。進入旅館,偷個空鍋給我。然後去熔爐,它也很靠近大門,然後偷一些鐵鍊來。也幫我拿10個十字軍的頭顱來。需要我跟你講頭顱上哪兒找嗎?','『瘟疫使者』諾斯要求你替他拿1個空的大鍋,1條鐵鍊,還有10個十字軍顱骨來。','','到東瘟疫之地: 血色領區的避風郡伐木場找『瘟疫使者』諾斯。','','','','',0), +(12717,'zhTW','諾斯特調','大鍋已經準備好對整片大地噴灑它惡臭的腐化了!$B$B現在,替你上一堂關於瘟疫大鍋的課程,死亡騎士。大鍋所釋放的氣體對活物來說是非常致命的,但卻能夠強化天譴軍團。對所有的天譴生物來說,它能夠餵養死亡,時間越久就越強大。$B$B拿著這些十字軍顱骨,把它們扔進大鍋裡。你會對結果感到很高興的。','把十字軍顱骨堆放進瘟疫大鍋中。','','到東瘟疫之地: 血色領區的避風郡農場尋找瘟疫大鍋。','','','','',0), +(12718,'zhTW','用更多的顱骨來釀製','','','','到東瘟疫之地: 血色領區找瘟疫大鍋。','','','','',0), +(12719,'zhTW','無處可逃,無處可躲','除了全面殲滅以外,沒有什麼能滿足我們,$n。要達成這個目標,只靠幾百隻無腦的食屍鬼去突擊新亞法隆的正門是不夠的。我們必須滲透他們的聖所並且處理掉他們的官員。要讓他們知道在天譴軍團的掌心是無路可逃的!$B$B潛入西南方的新亞法隆市政廳,然後刺殺鎮長。從那棟建築裡找出新亞法隆名冊,然後帶來給我。','緬懷墓穴的凱雷希斯親王命令你殺死鎮長昆比,並取得新亞法隆名冊。','','到東瘟疫之地: 血色領區的緬懷墓穴找凱雷希斯親王。','','','','',0), +(12720,'zhTW','如何影響敵人,獲得朋友','我在世界各地漫遊的時候發現了幾個有趣的東西。舉例來說,你知道要多少鼓勵才能讓一個人把隱藏的秘密全部說出來嗎?很幸運的,我剛好手上有些能夠鼓勵人的東西。$B$B<凱雷希斯從一個華麗的珠寶盒裡拿出某樣東西。>$B$B這是我的「說客」。裝上它們,然後前往原野,死亡騎士。把尖端對準新亞法隆的士兵使用。查出這個「赤紅黎明」的真相。','緬懷墓穴的凱雷希斯親王命令你去找出關於「赤紅黎明」的真相。$B$B把凱雷希斯說服者從華麗珠寶盒拿出來,然後用它們來「說服」血色十字軍吐實。','發現“血色的黎明”的真相','到東瘟疫之地: 血色領區的緬懷墓穴找凱雷希斯親王。','','','','',0), +(12722,'zhTW','待宰羔羊','當天譴軍的亡域佔據了天空的時候大部分的人類都會望風而逃。但血色十字軍卻不會!$B$B我必須坦承 - 我比較享受和十字軍的交流。雖然這些年來天譴軍隊他們的攻擊製造了人類史上最慘的數起悲劇,但我們又 - 再次 - 陷入戰鬥!$B$B我們該讓他們享受永遠服侍巫妖王的喜悅!進入新亞法隆,並且滿足他們的赴死之願吧。不要留下任何活口。','緬懷墓穴的瑞文戴爾男爵命令你殺死10個血色十字軍士兵和15個新亞法隆市民。','','到東瘟疫之地: 血色領區的緬懷墓穴找瑞文戴爾男爵。','殺死血色十字軍士兵','殺死新亞法隆市民','','',0), +(12723,'zhTW','在血色防線後方','我派了歐貝茲、薩沙理安和寇爾提拉到敵人防線的後方去搜索那個信差。他們在血色旅店建立了前線基地,在新亞法隆的南端。旅館就在那兩個果園後面,緊鄰著赤紅之焰禮拜堂。你要前往旅店,並且向歐貝茲‧血禍報到。他會告訴你他們的狀況。','向血色旅店的歐貝茲‧血禍報到。血色旅店位於新亞法隆。','','','','','','',0), +(12724,'zhTW','正義十字軍之道','關於這個信差會在哪裡出現,我們一點該死的頭緒也沒有。這些人類也沒有人能夠給我個答案。$B$B<歐貝茲指著橫屍地面的五個血色十字軍。>$B$B不過我確實有從最後一個傢伙身上搾出些有用的情報來。他們在血色堡裡有張日程表,記錄了所有巡邏的路線。我要你潛入堡壘把那張日程表偷出來。$B$B血色堡就是新亞法隆最大的那棟建築,就在東北方。','新亞法隆,血色旅店的歐貝茲‧血禍命令你去血色堡偷取新亞法隆巡邏日程表。','','到東瘟疫之地: 血色領區的血色旅店找歐貝茲·血禍。','','','','',0), +(12725,'zhTW','亡者兄弟','突破血色的防線並非一件簡單的事。我們在突襲的過程中蒙受了許多損失,而且我們失去了其中一位最好的死亡騎士,寇爾提拉‧亡織者。我不知道他是生是死,但是如果我們不去找他的話我就太該死了。$B$B我最後一次看到他的時候,他被鐵鍊捆著拖往血色堡,就在東北方。撕裂那個要塞吧,死亡騎士。把寇爾提拉找出來!','在血色堡中找出寇爾提拉‧亡織者。','','','','','','',0), +(12727,'zhTW','血腥突圍','警報已經響了。高階審判官和他的侍僧很快就會趕來。我傷得太重了,幫不上什麼忙,但我會盡我所能。$B$B殺死高階審判官和他的好朋友。把他的頭扯下來,帶去找薩沙理安。復仇會安撫他憤怒的靈魂。$B$B還有一件事,$n。如果你成功活下來,而且回到薩沙理安身邊,告訴他,他們在禮拜堂那邊處決囚犯。也許他會再派你去那裡扮演英雄。','殺死高階審判官瓦羅斯,把瓦羅斯的頭顱帶去給血色旅店的薩沙理安。血色旅店位於新亞法隆。','','到東瘟疫之地: 血色領區的血色旅店找薩沙理安。','','','','',0), +(12733,'zhTW','死亡挑戰','源自於巫妖王在冰凍荒原深處擊敗伊利丹‧怒風所獲得的勝利,死亡挑戰是所有死亡騎士都必須進行的一項晉升儀式。$B$B找出另一個亞榭洛死亡騎士並且向他要求決鬥。他們一定得接受,並且戰到勝利降臨為止!$B$B現在就動身,$n!為天譴軍團贏得勝利!向巫妖王獻上榮耀!','『戰鬥召喚者』歐魯命令你與5個死亡騎士決鬥並獲得勝利。$B$B你可以選擇與死亡騎士新兵或玩家作戰。','','到東瘟疫之地: 血色領區的死亡止境找『戰鬥召喚者』歐魯。','在決鬥中擊敗死亡騎士','','','',0), +(12738,'zhTW','復仇的吶喊!','復仇的吶喊一定要被聽見,$n。指揮官瘟疫之拳和一隊死亡騎士正前去摧毀赤紅之焰禮拜堂。如果有任何死亡騎士被囚禁在禮拜堂裡,瘟疫之拳會把他們救出來的。$B$B你動作快點的話還趕得上他們,禮拜堂就在此地的西方。','到赤紅之焰禮拜堂向騎士指揮官瘟疫之拳報到。','','','','','','',0), +(12739,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的牛頭人,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,瑪拉‧勇角。','','到東瘟疫之地: 血色領區的赤紅之焰禮拜堂找騎士指揮官瘟疫之拳。','','','','',0), +(12742,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的人類,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,艾倫‧史坦布利吉。','','到東瘟疫之地: 血色領區的赤紅之焰禮拜堂找騎士指揮官瘟疫之拳。','','','','',0), +(12743,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的夜精靈,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,雅茲米娜‧橡棘。','','到東瘟疫之地: 血色領區的赤紅之焰禮拜堂找騎士指揮官瘟疫之拳。','','','','',0), +(12746,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的德萊尼,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,『公正』伐洛克。','','到東瘟疫之地: 血色領區的赤紅之焰禮拜堂找騎士指揮官瘟疫之拳。','','','','',0), +(12747,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的血精靈,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,伊歐尼斯女士。','','到東瘟疫之地: 血色領區的赤紅之焰禮拜堂找騎士指揮官瘟疫之拳。','','','','',0), +(12748,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的獸人,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,庫格‧鐵顎。','','到東瘟疫之地: 血色領區的赤紅之焰禮拜堂找騎士指揮官瘟疫之拳。','','','','',0), +(12750,'zhTW','特別驚喜','我們來到這裡,夷平了整個地方,然後前往牢房。我們倒是沒想到會看到那種景象,$n。看來十字軍真的很忙。整間牢房都塞滿了銀色黎明的囚犯。大多數在我們抵達的時候都已經死了,但還有一些人還有呼吸。$B$B我本來要進去把他們通通處決掉,但我認為這個榮耀應該歸於你手中。尤其是有個很吵鬧的被遺忘者,我想你一定會很樂於親手行刑的。','赤紅之焰禮拜堂的騎士指揮官瘟疫之拳命令你處決附近牢房裡關押的銀色黎明囚犯,安東尼‧布瑞克。','','到東瘟疫之地: 血色領區的赤紅之焰禮拜堂找騎士指揮官瘟疫之拳。','','','','',0), +(12751,'zhTW','算是光榮返鄉','回去血色旅店找薩沙理安,告訴他寇爾提拉的復仇吶喊已經得到了回應。幾小時之內,赤紅之焰禮拜堂就會化為一堆瓦礫灰塵。$B$B你是個冷血的怪物,$n。我向你致敬,$g兄弟:姊妹;。','帶著你勝利的消息返回新亞法隆的血色旅店找薩沙理安。','','','','','','',0), +(12754,'zhTW','瞰臺伏擊','當你在外面火燒禮拜堂和屠殺害蟲的時候,我忙著制訂一個計畫。$B$B血色信差預計會在這小時內通過血色瞰臺。瞰臺旁邊的道路非常空曠,而且擠滿了十字軍。穿上這個臨時用偽裝,然後躲在瞰臺等待血色信差通過。等他夠接近你的時候,就以滿心的狂怒襲擊他!砍倒他,然後把他的所有物通通拿走 - 包括他的衣服!$B$B那個瞰臺就在此地東方兩百步之處。','位於新亞法隆中,血色旅店內的歐貝茲‧血禍命令你殺死血色信差並取回血色信差的所有物,以及血色信差的信息。','','到東瘟疫之地: 血色領區的血色旅店找歐貝茲·血禍。','','','','',0), +(12755,'zhTW','與命運相見','這封信一定得送到阿比迪斯手上。我不想引起他們的懷疑。得讓他們繼續認為事情都和他們計畫的一樣。$B$B你要披上血色信差的衣服,然後藉由黑暗魔法的幫助,化成信差的外型。$B$B阿比迪斯就在國王港,位於血色瞰臺的東南方。把信息送過去,然後盡可能的從她身上挖出情報來。她得告訴我們關於「赤紅黎明」的事情。','歐貝茲‧血禍命令你把血色信差的信息送去國王港給大將軍阿比迪斯。','','到東瘟疫之地: 血色領區的國王港找大將軍阿比迪斯。','','','','',0), +(12756,'zhTW','血色突襲軍出線','聽好了,信差。血色大地已經陷落了。新亞法隆和避風郡被天譴軍團佔領。死亡的鬼靈在頭頂上逼近,威脅隨時侵襲我們。$B$B帶著這個信息回去給嘉爾瓦:$B$B「帶著你的軍團轉向,備船前往冰凍荒原。下次我們見面的地方將會是在北裂境。」$B$B把這個交給嘉爾瓦。$B$B<阿比迪斯交給你一本日誌。>$B$B這會解釋一切。$B$B血色十字軍已經消失了。血色突襲軍萬歲!','將「救贖之途」帶到新亞法隆的血色旅店交給歐貝茲‧血禍。','','到東瘟疫之地: 血色領區的血色旅店找歐貝茲·血禍。','','','','',0), +(12757,'zhTW','血色軍隊迫近...','我們一定要對入侵的軍隊做好準備,$n。你要將你的發現立刻告訴大領主莫格萊尼!我會開啟一個傳送門直接通往亞榭洛。走進去,它就會立刻傳送你。$B$B把阿比迪斯的日記交給大領主莫格萊尼。他或許能找到它的用處。','將救贖之途交給在亞榭洛:黯黑堡的大領主達利安‧莫格萊尼。','','到黯黑堡找大領主達瑞安·莫格萊尼。','','','','',0), +(12778,'zhTW','血色天啟','陷阱已經開始了,死亡騎士。壁爐谷和提里斯法的軍隊已經抵達,剛好即時來視察他們處於大火中的領土!如果他們現在回頭,他們就會轉以背對我們作戰。$B$B<莫格萊尼搖了搖頭。>$B$B不,他們只有一個選擇,唯一的結果:天啟!$B$B在我們對話的當下,他們準備進行最後一擊。$B$B巫妖王在等著你回去,勇士。他就在死亡止境俯看著我們。','找到死亡止境的巫妖王。','','','','','','',0), +(12779,'zhTW','萬事萬物的終結...','你已經屠殺了無數的部隊,但你黑暗的心靈卻渴望著更多。你的飢渴永遠也沒有滿足的一天,$n。<巫妖王停頓了一下。>$B$B所有事物都需要終結,死亡騎士。血色十字軍對我們發動了最後的攻勢。對他們而言,已經沒有退路...沒有選擇。也因此他們會以你從未見識過兇殘來戰鬥。$B$B用這個號角來召喚我麾下的一頭巨龍。爬上它的背並指揮它進入戰鬥。靠著它你將會終結血色十字軍。','巫妖王命令你徹底滅絕血色十字軍。$B$B使用霜育號角召喚一隻霜育鎮壓者,殺死150名血色士兵和摧毀10台血色弩砲。避開他們的彈道以閃躲來襲的砲火!','','到東瘟疫之地: 血色領區的死亡止境找巫妖王。','殺死血色士兵','摧毀血色弩砲','','',0), +(12800,'zhTW','巫妖王的命令','血色領區已不復存在。其餘的十字軍我們會在北裂境對付他們。$B$B現在我們要把全部的心力放在聖光之願禮拜堂上。我不允許這個對抗你們主人的據點繼續存在!$B$B我已經發佈了最終命令。天譴指揮官薩拉諾在布洛米爾的邊緣等著你的抵達。前往西北方,穿過洞穴,進入劇毒林地,然後取道布洛米爾。$B$B不要令我失望,$n。','到布洛米爾向天譴指揮官薩拉諾報到。','','','','','','',0), +(12801,'zhTW','黎明曙光','銀色黎明大膽地在聖光之願禮拜堂與我們對抗。他們竟敢對抗天譴軍團,就為了這個理由,他們非被毀滅不可!$B$B巫妖王的大軍已經準備好面對瘟疫之地的最後一戰了。就在今天,我們將登上天譴英雄的不朽殿堂!$B$B當你準備好作戰的時候,向大領主達瑞安‧莫格萊尼報到。大領主將會發佈最終行軍的號令,並且在聖光之願禮拜堂率領我們的軍隊。','擊敗銀色黎明的部隊,並且發現黎明曙光。$B$B要是你成功活了下來,就向大領主達瑞安‧莫格萊尼報告。','','到東瘟疫之地: 血色領區的聖光之願禮拜堂找大領主達瑞安·莫格萊尼交談。','發現黎明曙光','','','',0), +(12842,'zhTW','符文鑄造:準備作戰','戰爭在你的靈魂上刻下了無法磨滅的印記,死亡騎士。你已經學會了符文鑄造的黑暗秘藝,靠著它,你將可以在你的武器上刻下強大的符文。$B$B一定要做好作戰的準備。回到亞榭洛之心的符文熔爐旁,用符文鑄造的力量替你的武器紋上一個強大的符文!$B$B當你的刀刃上閃耀著黑暗能量之後,再回來找我!','黯黑堡的講師拉祖維斯命令你用你的符文鑄造技能來為你的符文魂刃刻上符文。$B$B只要有符文熔爐,你就可以隨時自由地替換刻在武器上的符文。','在武器上附著符文','到黯黑堡的亞榭洛之心找講師拉祖維斯。','','','','',0), +(12848,'zhTW','無邊飢渴','無盡的飢渴很快就會找上你了,$c。而當它來臨的時候,你會承受無法言喻的苦痛。這種折磨只有一道解藥:那就是滿足你的飢渴。$B$B我會告訴你通往救贖的關鍵。$B$B那些被黑暗兄弟會裁定沒用的傢伙被鎖在亞榭洛之心裡。用這把鑰匙來釋放那些拙劣的新兵。讓他們穿上裝備與你作戰,來換取他們的自由。殺了他們,你的苦痛就會止息。失敗了,你就得承受永恆的磨難。$B$B是生是死- 由你作主。','黯黑堡的講師拉祖維斯命令你釋放一個拙劣的新兵,然後冷血地殺死他!$B$B不是你死就是他們亡!','','到黯黑堡的亞榭洛之心找講師拉祖維斯。','戰勝拙劣的新兵','','','',0), +(12849,'zhTW','血魄、冰霜與穢邪之力','','','','','','','','',0), +(12850,'zhTW','向天譴指揮官薩拉諾報到','天譴指揮官薩拉諾在此處東南方的陽台等候著你。向薩拉諾報到,然後徵調一隻天譴獅鷲獸送你去死亡止境。$B$B瓦拉納爾親王將會在底下等待你。$B$B苦難與你同在,$g兄弟:姊妹;!','向黯黑堡一樓陽台的天譴指揮官薩拉諾報到。','','','','','','',0), +(13165,'zhTW','奪回亞榭洛','迷霧已經散去。我現在看的就像那天一樣清楚;那天我將灰燼使者刺入自己的心臟,將我父親的靈魂從詛咒中釋放:那是我身為自由之身的最後記憶。$B$B如果騎士團要在這個新世界中存續,我們就得從天譴軍團手中奪回亞榭洛。我教過你如何召喚死亡之門。當你召喚它的時候,它會帶你返回亞榭洛,$n。立刻使用死亡之門,到亞榭洛與我會合。黯刃騎士團的第一場作戰開始了!殺死天譴軍!','使用死亡之門回到亞榭洛:黯黑堡。抵達後立刻向大領主達瑞安‧莫格萊尼報到。','','','','','','',0), +(13166,'zhTW','黯黑堡爭奪戰','指揮大廳的局勢已經安定下來了,但是巫妖王在亞榭洛之心留給了我們一份小禮物。七拼八湊的恐怖人物,縫補者,另外還有一幫憎惡體佔據著二樓。$B$B使用這個傳送門,到二樓去清除天譴軍團的餘孽。別單獨面對縫補者!你得和亞榭洛的死亡騎士一起對付那個怪物!$B$B去吧,$n。我會罩你的!','殺掉10個天譴軍團,並協助殺掉縫補者。事成之後,向大領主達瑞安‧莫格萊尼回報。','','到黯黑堡找大領主達瑞安·莫格萊尼。','殺害天譴軍團','殺害天譴軍團','','',0), +(13188,'zhTW','諸王之道','你從今而後,永遠都是一名黯刃騎士,$n,但你要知道:你曾是聯盟的英雄。$B$B<達瑞安凝視著你。>$B$B我們的騎士團若要存活下去,必定得要建立盟友。你必須代表黯刃騎士團前往聯盟。$B$B在我東南方的平臺上,有個通往暴風城的傳送門。帶著這封由弗丁為你所寫的信,送到安杜因‧烏瑞恩國王手中。通過傳送門吧。','把信件送給聯盟的國王,暴風城的暴風要塞中的安杜因‧烏瑞恩。','','到暴風城找瓦里安·烏瑞恩國王。','','','','',0), +(13189,'zhTW','薩魯法爾的祝福','你從今而後,永遠都是一名黯刃騎士,$n,但你要知道:你曾是部落的英雄。$B$B<達瑞安凝視著你。>$B$B我們的騎士團若要存活下去,必定得要建立盟友。你必須代表黯刃騎士團前往部落。$B$B在我東南方的平臺上,有個通往奧格瑪的傳送門。帶著這封由弗丁為你所寫的信,送到薩魯法爾霸王手中。通過傳送門吧。','把信件送到奧格瑪交給薩魯法爾霸王。','','到奧格瑪找索爾。','','','','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_05' WHERE sql_rev = '1647384164947318079'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_06.sql b/data/sql/updates/db_world/2022_03_18_06.sql new file mode 100644 index 000000000..cff627b47 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_06.sql @@ -0,0 +1,51 @@ +-- DB update 2022_03_18_05 -> 2022_03_18_06 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_05'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_05 2022_03_18_06 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647384299873497497'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647384299873497497'); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(13068, 'zhTW', '英勇的故事', '也許你已經聽過了人們對這失蹤英雄的歌頌?$B$B當天譴軍團的不死軍隊鋪天蓋地而來時,十字軍布理登布萊特正在破碎前線支援作戰。我們的許多友軍都被擊潰了,但布理登布萊特隻身折返,一個接著一個地,從戰地中救回了少說一打的同袍。$B$B他卻從未回來,$c。曾有人目擊他往東北方的靜默警戒去。把他帶回來讓我能表揚他的英勇。', '十字軍之巔的大領主提里奧·弗丁請你找回他們的英雄,十字軍布理登布萊特,就在寒冰皇冠東北方的靜默警戒。從空中看去,他的火堆應該會是最明顯的目標。', '', '', '', '', '', '', 0), +(13072, 'zhTW', '英雄尚存', '我知道你為何而來...他們要你帶我回去,但是萬萬不可,我已染上不死生物的瘟疫,$c,我不會讓任何接近我的人也落得和我一樣的下場。不,我該留在這兒。$B$B我唯一的遺憾是,當死亡攫取我的靈魂,我的肉體竟將與天譴軍團同行。我不畏懼死亡,但是我痛恨效命於叛徒,阿薩斯。$B$B離我遠些吧...另外別再讓任何人來找我。若你不想幫倒忙,就別讓任何人暴露於我所帶的瘟疫之下。', '將十字軍布理登布萊特的遭遇,回報給十字軍之巔的大領主提里奧·弗丁。', '', '', '', '', '', '', 0), +(13073, 'zhTW', '守護者的援助', '世上存在著某種族類擁有超越凡人軀體的轉化力量 - 復生之力、生命之力與聖光之力。而布理登布萊特不同於一般人...他的英勇與奉獻耀眼醒目。現在,我們只能寄望這些超凡的存在之中,有人願意介入,將我們的英雄從悲慘更甚於死亡的命運中帶回來。動身前往銀白先鋒駐地,去和大德魯伊莉莉安卓談談...$B$B請她把你送往月光林地並尋求守護者雷姆洛斯的協助。', '十字軍之巔的大領主提里奧·弗丁,要你從大德魯伊莉莉安卓處獲取通行許可,並前往月光林地和守護者雷姆洛斯談談。', '', '', '', '', '', '', 0), +(13074, 'zhTW', '翡翠夢魘中的一絲希望', '我們所需要的材料只存在於翡翠夢境中...被灌注了強大復生魔法的橡實。這塊神聖區域中的許多地方,都與翡翠夢境緊密聯繫著,而我的神殿就在其中。$B$B我將送你進入夢境中,為我找來一些橡實。盡快準備好,$c,以這種方法進入夢境相當危險,而你也很可能被夢魘所包圍。$B$B盡快找到一些橡實,然後離開我的神殿,或是擰你自己,以回到真實世界來。', '月光林地的守護者雷姆洛斯指示你,進入翡翠夢境並找到3枚翡翠橡實。$B$B然後離開雷姆洛斯神殿一帶,以回到艾澤拉斯。', '', '到月光林地的雷姆洛斯神殿找守護者雷姆洛斯。', '', '', '', '', 0), +(13075, 'zhTW', '雷姆洛斯之恩', '我會開啟一個傳送門,好送你回到帶你來的德魯伊那兒。你和你的十字軍已擁有我的祝禱與祈福。我希望這枚橡實可以淨化你的十字軍同伴,並將他從悲慘的宿命中給救回來。$B$B再見了,$r。', '攜帶翡翠橡實,回寒冰皇冠的靜默警戒找十字軍布理登布萊特。', '', '到寒冰皇冠的靜默警戒找十字軍布理登布萊特。', '', '', '', '', 0), +(13076, 'zhTW', '尚有時間', '我感覺好多了...脫胎換骨一般...但是瘟疫仍未離我而去。別擔心,我仍然對你充滿無比的感激,為了我 - 一個全然不認識的人,奔波千里。如果沒有意外,你已為我爭取到寶貴的幾個小時,使我不致以醜陋的面目散佈瘟疫。$B$B謝謝你,$c。也請你順道傳達謝意給提里奧,並讓他知道,能追隨他是我一生的光榮。', '回到十字軍之巔的大領主提里奧·弗丁身邊,告訴他翡翠橡實的功效。', '', '', '', '', '', '', 0), +(13077, 'zhTW', '守護巨龍之觸', '龍后雅立史卓莎掌握了有關生命的所有魔法。過去,她曾以熊熊烈焰讓不死軍團灰飛煙滅,並在那些地方重新滋長出新的生命。或許她的能力可以拯救布理登布萊特。$B$B雅立史卓莎就在龍骨荒野的龍眠神殿 - 請前去找她,並代表我誠懇地請求她的幫助。', '在龍眠神殿,向生命守縛者雅立史卓莎請求協助。', '', '', '', '', '', '', 0), +(13078, 'zhTW', '妲莉雅之淚', '在這樣的黑暗時刻,我不能遺棄一盞將滅的聖光。$B$B我們需要一樣神聖之物,或許是拯救布理登布萊特的一線希望...一個受到同種瘟疫所害的聖潔生物所遺留的東西。$B$B動身吧,就在晶紅龍殿外正進行著戰鬥的神聖道路上。當你見到晶紅管理者低飛,並在不死軍團腳下燃起烈焰,你將會見證新生命滋長。在滋長的生命間,找到妲莉雅之淚 - 將它帶來給我。', '龍眠神殿裡的生命守縛者雅立史卓莎要求你,在晶紅管理者施放烈焰、淨化生命後,從地上收集妲莉雅之淚。', '', '到龍骨荒野的龍眠神殿找『生命守縛者』雅立史卓莎。', '', '', '', '', 0), +(13079, 'zhTW', '雅立史卓莎之恩', '你要了解,年輕的$r,要淨化這具肉體並培育新的生命,確實是易如反掌...然而,在不傷害身體的情況下移除瘟疫,就不是我所能完全掌握的力量了。$B$B若布理登布萊特真是你們所仰望的燈塔,或許他能撐過淨化的痛苦過程並獲得新生,但我不敢保證,這就是你所尋求的救贖。去吧,帶著它與我最真誠的祝禱。','寒冰皇冠的靜默警戒,將雅立史卓莎之息交給十字軍布理登布萊特。', '', '到寒冰皇冠的靜默警戒找十字軍布理登布萊特。', '', '', '', '', 0), +(13225, 'zhTW', '破天者號', '我們和天譴軍團與部落作殊死戰。將死的哀鳴覆蓋了整個戰場。這實在太折磨人了...慘不忍睹!我的身體匱乏了,精疲力盡地倒下了。銀白十字軍喚醒了我,他們將我從破碎前線上拖下來,帶到了這裡。我不行了。答應將死的士兵一個最後的心願好嗎,$c?我們的基地,破天者號,正在寒冰皇冠上空盤旋。在那裡你可以找到我的指揮官,提督巴特勒。告訴他,我以聯盟士兵的身分,光榮地捐軀。', '找出搭乘著破天者號,在寒冰皇冠上空盤旋的提督賈斯汀·巴特勒。', '', '', '', '', '', '', 0), +(13080, 'zhTW', '希望尚存', '<布理登布萊特向你舉起一隻手,當他終於喘過氣來。>$B$B它痛苦的程度一如你所見,但我真的可以感受到,我體內某些敗壞的部份,被燒成灰燼並離開了我的身體。$B$B$C,感謝你所做的每一件事。你無私的行動重新燃起了我的希望,這個世界依舊留存著良善 - 我可以毫無懼怕地離去,儘管我已不在,黑暗依舊無法戰勝光明。$B$B去吧,你不需要感到遺憾。', '回到十字軍之巔的大領主提里奧·弗丁身邊,告訴他雅立史卓莎之息的功效。', '', '', '', '', '', '', 0), +(13081, 'zhTW', '那魯的意志', '我由衷地感謝你為我們所做的一切,$n。我有最後一份想拜託你的工作...是我們僅存的希望。無論如何,這個勇士值得我們盡一切努力來挽救他。$B$B前往撒塔斯尋找那魯,和阿達歐談一談。他一直以來都是我們的明燈與堅實的盟友。告訴他布理登布萊特的故事,並向他尋求任何可能的幫助。$B$B我不得不提醒你,我們的勇士恐怕時間不多,請盡快。', '到泰洛卡森林向撒塔斯城的阿達歐尋求幫助。', '', '', '', '', '', '', 0), +(13082, 'zhTW', '阿達歐之恩', '我很高興你前來見我,$n。我認識十字軍布理登布萊特,也知道你遠道而來是為了救他。他的英勇在你心中點燃了無私奉獻的火種,這本身就是一件奇蹟。$B$B這把奇蹟之火會照亮他自己的。我會賜福給布理登布萊特,他將不會墮入不死生物的魔道之中。我會把你送回達拉然,而你也該回到他身邊。我將與你同在。', '到寒冰皇冠的靜默警戒找十字軍布理登布萊特。', '', '', '', '', '', '', 0), +(13083, 'zhTW', '黑暗中的一絲微光', '<十字軍布理登布萊特的外袍,靜靜地安躺在箱子的底部,咆哮的北風從箱子的縫隙灌入,一方衣角輕擺著。>$B$B提里奧會想看到這個的,偉大戰士的最後遺物。$B$B到寒冰皇冠的十字軍之巔找大領主提里奧·弗丁。', '將十字軍布理登布萊特的外袍帶給十字軍之巔的大領主提里奧·弗丁。', '', '去冰冠冰川找北伐軍之峰的大領主提裡奧·弗丁。', '', '', '', '', 0), +(12887, 'zhTW', '這是有趣的遊戲', '黯刃騎士團要拿下西北邊的暗影穹殿。我在他們的隊伍中有一個線民,他需要幫忙。$B$B首先第一步就是遮斷巫妖王的視覺。他用一個名叫窺探之眼的裝置監視整個區域,那眼睛就飄浮在穹殿的頂端。$B$B我們的矮人準備了一些對付他的東西。破壞「眼睛」了以後,去找穹殿中的史力弗男爵。他偽裝成仍受巫妖王的控制的樣子。', '破壞窺探之眼,然後向暗影穹殿的史力弗男爵回報。', '', '到寒冰皇冠的暗影穹殿找史力弗男爵。', '毀滅窺探之眼', '', '', '', 0), +(13084, 'zhTW', '燃燒吧,卓頓海姆!', '我們來看看,是不是可以進一步削弱維酷人的士氣,$n。$B$B我希望你到卓頓海姆去,並將他們的旌旗丟進火中。這聽來似乎沒什麼,但是看到祖傳的家園,日復一日地被破壞,帶給他們的打擊,將比肉體上的痛苦更令人感到折磨。$B$B至少...這不會痛。', '暗影穹殿的蘭克洛公爵要你焚燬10支維酷旌旗。', '', '到寒冰皇冠的暗影穹殿找蘭克洛公爵。', '焚毀維酷旌旗', '', '', '', 0), +(13085, 'zhTW', '維倫回來了', '我剛剛遇到了那個弱智的笨蛋,被搶劫的維倫,偷偷摸摸地溜進了穹殿裡。$B$B去盯著他糾正自己的錯誤,並把死亡騎士還給我!', '在暗影穹殿裡和被搶劫的維倫對話。', '', '', '', '', '', '', 0), +(13086, 'zhTW', '最後防線', '我已經部署好基地的防禦措施了,$c!在先鋒駐地的四座高塔上,各有一門易於操作的銀白十字軍火砲,經過賈斯塔夫神父的親自加持。你得飛上其中一座高塔並操控火砲。用它擊潰巫妖王親自策劃的天譴軍攻勢。$B$B不過話說在前頭,天譴軍團一定會派冰霜巨龍襲擊高塔。把牠們都打下來!如果高塔淪陷,他們也破牆而入的話,我們就玩完了!', '以銀白火砲殺死100個天譴進攻者。同時殺死3隻霜育摧毀者。$B$B成功之後,向攻城大師費茲克回報。', '', '到寒冰皇冠的銀白先鋒駐地找攻城大師費茲克。', '擊殺天譴進攻者', '', '', '', 0), +(13087, 'zhTW', '北方廚藝', '所以說你既然沒有我要的燉肉,你在這裡幹嘛。我肚子餓的要死!至少給我弄來一些冷肉,讓我自己煮燉肉吧!如果你幫我弄來肉的話,我就給你食譜讓你可以自己煮。現在快點去給我弄點肉來!', '把四塊冷肉塊交給瓦爾加德的布隆‧塗酒。北裂境的任何野獸身上都能找到冷肉塊。', '', '到凜風峽灣的瓦爾加德找布隆·塗酒。', '', '', '', '', 0), +(13088, 'zhTW', '北方廚藝', '這兒有好多的新兵,而且這些小子都餓壞啦!如果你能夠去外頭幫我弄點燉肉用的冷肉塊來,我可以教你怎麼做這道菜。', '把四塊冷肉塊交給驍勇要塞的羅利克·麥克里爾。北裂境的任何野獸身上都能取得冷肉塊。', '', '到北風凍原的驍勇要塞找羅利克·麥克里爾。', '', '', '', '', 0), +(13089, 'zhTW', '北方廚藝', '沒有什麼比一道新鮮燉肉更能夠讓你暖暖身子的了。替我從這地方的野獸身上弄點冷肉塊來,我就教你做一道熱騰騰的燉肉。', '把四塊冷肉塊交給復仇臺地的湯瑪士‧寇里奇歐。北裂境的任何野獸身上都能找到冷肉塊。', '', '到凜風峽灣的復仇臺地找湯瑪士·寇里奇歐。', '', '', '', '', 0), +(13090, 'zhTW', '北方廚藝', '戰歌進攻部隊的戰士們需要填飽肚子維持力量。如果你能夠從犀牛或其他野獸身上弄點冷肉塊來,我就能為他們做點燉肉。如果你想的話,我也很樂意教你食譜。', '把四塊冷肉塊交給戰歌堡的翁恩‧柔蹄。北裂境的任何野獸身上都能取得冷肉塊。', '', '到北風凍原的戰歌堡找翁恩·柔蹄。', '', '', '', '', 0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_06' WHERE sql_rev = '1647384299873497497'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_07.sql b/data/sql/updates/db_world/2022_03_18_07.sql new file mode 100644 index 000000000..8657aa0bc --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_07.sql @@ -0,0 +1,936 @@ +-- DB update 2022_03_18_06 -> 2022_03_18_07 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_06'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_06 2022_03_18_07 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647361710364876100'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647361710364876100'); + +/* Shadowsworn Adept - GUID 2665 */ + + +SET @NPC := 2665; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11263.1, `position_y` = -3544.69, `position_z` = 7.98925, `orientation` = 1.82146 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11263.1, -3544.69, 7.98925, 100.0, 0), +(@PATH, 2, -11262.3, -3536.72, 8.18768, 100.0, 0), +(@PATH, 3, -11264.4, -3525.14, 8.20411, 100.0, 0), +(@PATH, 4, -11271.8, -3510.85, 7.91639, 100.0, 0), +(@PATH, 5, -11273.5, -3499.33, 9.6355, 100.0, 0), +(@PATH, 6, -11267.6, -3489.89, 9.61001, 100.0, 0), +(@PATH, 7, -11264.7, -3480.86, 9.26794, 100.0, 0), +(@PATH, 8, -11271.7, -3493.48, 9.51587, 100.0, 0), +(@PATH, 9, -11273.3, -3504.72, 9.57357, 100.0, 0), +(@PATH, 10, -11269.2, -3515.57, 7.47703, 100.0, 0), +(@PATH, 11, -11263.8, -3526.29, 8.34191, 100.0, 0), +(@PATH, 12, -11262.8, -3541.9, 7.83647, 100.0, 0); + + +/* Nethergarde Cleric - GUID 2681 */ + + +SET @NPC := 2681; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10961.7, `position_y` = -3284.85, `position_z` = 54.0278, `orientation` = 0.784552 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10961.7, -3284.85, 54.0278, 100.0, 0), +(@PATH, 2, -10952.0, -3289.88, 55.0095, 100.0, 0), +(@PATH, 3, -10930.8, -3290.89, 55.0791, 100.0, 0), +(@PATH, 4, -10943.0, -3290.71, 55.0812, 100.0, 0), +(@PATH, 5, -10955.0, -3289.35, 54.7276, 100.0, 0), +(@PATH, 6, -10972.1, -3265.76, 45.8974, 100.0, 0), +(@PATH, 7, -10977.1, -3274.71, 49.0335, 100.0, 0), +(@PATH, 8, -10986.5, -3287.01, 51.3938, 100.0, 0), +(@PATH, 9, -11011.1, -3287.01, 54.6847, 100.0, 0), +(@PATH, 10, -10995.2, -3289.74, 52.8056, 100.0, 0), +(@PATH, 11, -10979.7, -3280.04, 49.9635, 100.0, 0), +(@PATH, 12, -10975.5, -3265.54, 45.9276, 100.0, 0), +(@PATH, 13, -10962.4, -3283.62, 53.89, 100.0, 0); + +/* Felguard Sentry - GUID 2718 */ + + +SET @NPC := 2718; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11697.2, `position_y` = -3175.77, `position_z` = 10.0519, `orientation` = 3.75344 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11697.2, -3175.77, 10.0519, 100.0, 0), +(@PATH, 2, -11697.0, -3199.49, 7.62958, 100.0, 0), +(@PATH, 3, -11712.4, -3236.27, 7.80203, 100.0, 0), +(@PATH, 4, -11721.7, -3258.75, 6.91549, 100.0, 0), +(@PATH, 5, -11738.7, -3280.61, 5.20007, 100.0, 0), +(@PATH, 6, -11759.6, -3299.08, 5.25464, 100.0, 0), +(@PATH, 7, -11782.7, -3315.46, 5.6667, 100.0, 0), +(@PATH, 8, -11809.0, -3326.26, 4.62931, 100.0, 0), +(@PATH, 9, -11790.2, -3319.69, 5.32741, 100.0, 0), +(@PATH, 10, -11763.3, -3301.95, 5.44173, 100.0, 0), +(@PATH, 11, -11744.7, -3286.86, 5.00674, 100.0, 0), +(@PATH, 12, -11726.5, -3266.12, 6.03492, 100.0, 0), +(@PATH, 13, -11714.4, -3240.88, 7.77631, 100.0, 0), +(@PATH, 14, -11699.4, -3207.74, 8.93876, 100.0, 0), +(@PATH, 15, -11696.4, -3180.4, 10.0966, 100.0, 0), +(@PATH, 16, -11703.5, -3157.33, 8.76819, 100.0, 0), +(@PATH, 17, -11703.2, -3130.34, 11.3779, 100.0, 0), +(@PATH, 18, -11713.4, -3109.65, 11.3121, 100.0, 0), +(@PATH, 19, -11726.2, -3094.9, 12.0208, 100.0, 0), +(@PATH, 20, -11740.4, -3088.22, 10.1719, 100.0, 0), +(@PATH, 21, -11756.3, -3077.47, 9.843, 100.0, 0), +(@PATH, 22, -11774.9, -3071.06, 7.84356, 100.0, 0), +(@PATH, 23, -11797.6, -3066.03, 6.62067, 100.0, 0), +(@PATH, 24, -11825.2, -3061.05, 6.05357, 100.0, 0), +(@PATH, 25, -11844.3, -3054.71, 5.89437, 100.0, 0), +(@PATH, 26, -11859.0, -3044.52, 13.9269, 100.0, 0), +(@PATH, 27, -11881.5, -3056.87, 20.2624, 100.0, 0), +(@PATH, 28, -11903.5, -3069.43, 24.1628, 100.0, 0), +(@PATH, 29, -11889.6, -3061.7, 22.5331, 100.0, 0), +(@PATH, 30, -11863.6, -3044.98, 15.4583, 100.0, 0), +(@PATH, 31, -11851.4, -3050.6, 10.5351, 100.0, 0), +(@PATH, 32, -11834.6, -3058.43, 5.5463, 100.0, 0), +(@PATH, 33, -11806.0, -3064.4, 6.35987, 100.0, 0), +(@PATH, 34, -11782.9, -3068.96, 6.75974, 100.0, 0), +(@PATH, 35, -11763.9, -3074.23, 9.41394, 100.0, 0), +(@PATH, 36, -11747.3, -3084.53, 9.37471, 100.0, 0), +(@PATH, 37, -11729.9, -3092.47, 11.5539, 100.0, 0), +(@PATH, 38, -11718.3, -3103.37, 12.9114, 100.0, 0), +(@PATH, 39, -11705.5, -3122.84, 12.3253, 100.0, 0), +(@PATH, 40, -11704.3, -3149.17, 9.67389, 100.0, 0); + + +/* Shadowsworn Warlock - GUID 2727 */ + + +SET @NPC := 2727; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11504.9, `position_y` = -2657.08, `position_z` = 11.6719, `orientation` = 0.191033 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11504.9, -2657.08, 11.6719, 100.0, 0), +(@PATH, 2, -11493.8, -2667.97, 9.16258, 100.0, 0), +(@PATH, 3, -11476.6, -2674.26, 12.4304, 100.0, 0), +(@PATH, 4, -11464.0, -2667.26, 12.5638, 100.0, 0), +(@PATH, 5, -11450.7, -2645.67, 23.4096, 100.0, 0), +(@PATH, 6, -11431.1, -2626.37, 39.1451, 100.0, 0), +(@PATH, 7, -11418.4, -2609.54, 50.3675, 100.0, 0), +(@PATH, 8, -11402.8, -2594.36, 60.5906, 100.0, 0), +(@PATH, 9, -11373.3, -2571.97, 76.2189, 100.0, 0), +(@PATH, 10, -11357.7, -2560.42, 81.7875, 100.0, 0), +(@PATH, 11, -11339.4, -2555.33, 87.389, 100.0, 0), +(@PATH, 12, -11315.5, -2552.53, 96.2945, 100.0, 0), +(@PATH, 13, -11332.2, -2557.83, 89.0049, 100.0, 0), +(@PATH, 14, -11349.9, -2557.19, 84.6853, 100.0, 0), +(@PATH, 15, -11366.2, -2566.72, 78.7274, 100.0, 0), +(@PATH, 16, -11396.5, -2588.94, 64.2837, 100.0, 0), +(@PATH, 17, -11415.3, -2606.06, 52.5221, 100.0, 0), +(@PATH, 18, -11428.0, -2622.91, 41.3438, 100.0, 0), +(@PATH, 19, -11445.8, -2639.32, 27.4417, 100.0, 0), +(@PATH, 20, -11458.3, -2661.03, 15.201, 100.0, 0), +(@PATH, 21, -11472.6, -2673.6, 13.3983, 100.0, 0), +(@PATH, 22, -11486.6, -2672.08, 9.72051, 100.0, 0); + + +/* Shadowsworn Enforcer - GUID 2786 */ + + +SET @NPC := 2786; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11234.8, -2593.78, 96.2911, 100.0, 0), +(@PATH, 2, -11230.5, -2587.57, 99.0153, 100.0, 0), +(@PATH, 3, -11218.8, -2576.38, 94.1016, 100.0, 0), +(@PATH, 4, -11218.6, -2570.05, 93.2954, 100.0, 0), +(@PATH, 5, -11220.6, -2562.68, 92.806, 100.0, 0), +(@PATH, 6, -11218.6, -2570.05, 93.2954, 100.0, 0), +(@PATH, 7, -11218.8, -2576.38, 94.1016, 100.0, 0), +(@PATH, 8, -11230.5, -2587.57, 99.0153, 100.0, 0), +(@PATH, 9, -11234.8, -2593.78, 96.2911, 100.0, 0), +(@PATH, 10, -11277.7, -2602.66, 98.9525, 100.0, 0), +(@PATH, 11, -11280.9, -2603.64, 96.7767, 100.0, 0), +(@PATH, 12, -11289.4, -2600.27, 91.6653, 100.0, 0), +(@PATH, 13, -11301.7, -2590.93, 89.6448, 100.0, 0), +(@PATH, 14, -11309.4, -2582.18, 89.867, 100.0, 0), +(@PATH, 15, -11324.3, -2569.9, 92.007, 100.0, 0), +(@PATH, 16, -11336.1, -2559.85, 88.5162, 100.0, 0), +(@PATH, 17, -11338.5, -2552.67, 87.3467, 100.0, 0), +(@PATH, 18, -11333.2, -2544.14, 88.9595, 100.0, 0), +(@PATH, 19, -11326.6, -2534.51, 90.819, 100.0, 0), +(@PATH, 20, -11314.7, -2523.51, 92.5943, 100.0, 0), +(@PATH, 21, -11323.9, -2531.22, 91.4691, 100.0, 0), +(@PATH, 22, -11328.3, -2537.74, 89.9348, 100.0, 0), +(@PATH, 23, -11336.4, -2546.06, 88.0747, 100.0, 0), +(@PATH, 24, -11337.9, -2556.33, 87.7897, 100.0, 0), +(@PATH, 25, -11330.3, -2564.98, 89.5463, 100.0, 0), +(@PATH, 26, -11324.3, -2569.9, 92.007, 100.0, 0), +(@PATH, 27, -11309.4, -2582.18, 89.867, 100.0, 0), +(@PATH, 28, -11301.7, -2590.93, 89.6448, 100.0, 0), +(@PATH, 29, -11289.4, -2600.27, 91.6653, 100.0, 0), +(@PATH, 30, -11285.2, -2604.89, 95.4095, 100.0, 0), +(@PATH, 31, -11280.9, -2603.64, 96.7767, 100.0, 0), +(@PATH, 32, -11277.7, -2602.66, 98.9525, 100.0, 0); + +/* Felguard Elite - GUID 2791 */ + + +SET @NPC := 2791; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11924.9, `position_y` = -2665.26, `position_z` = -4.13615, `orientation` = 5.9485 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11924.9, -2665.26, -4.13615, 100.0, 0), +(@PATH, 2, -11909.2, -2663.06, -1.0627, 100.0, 0), +(@PATH, 3, -11895.7, -2655.5, -3.25965, 100.0, 0), +(@PATH, 4, -11870.4, -2635.81, -4.30517, 100.0, 0), +(@PATH, 5, -11859.3, -2624.18, -3.70689, 100.0, 0), +(@PATH, 6, -11838.4, -2615.14, -2.88186, 100.0, 0), +(@PATH, 7, -11825.5, -2608.6, 0.51049, 100.0, 0), +(@PATH, 8, -11816.3, -2589.04, -0.734763, 100.0, 0), +(@PATH, 9, -11802.1, -2572.28, -1.98653, 100.0, 0), +(@PATH, 10, -11788.0, -2564.39, -1.59518, 100.0, 0), +(@PATH, 11, -11766.8, -2552.84, 0.0904483, 100.0, 0), +(@PATH, 12, -11746.4, -2528.44, -1.45359, 100.0, 0), +(@PATH, 13, -11730.3, -2510.74, -2.84845, 100.0, 0), +(@PATH, 14, -11720.2, -2499.1, -3.38654, 100.0, 0), +(@PATH, 15, -11691.2, -2468.83, -3.09698, 100.0, 0), +(@PATH, 16, -11710.1, -2484.09, -4.26825, 100.0, 0), +(@PATH, 17, -11719.3, -2496.71, -3.6583, 100.0, 0), +(@PATH, 18, -11734.5, -2514.51, -2.24706, 100.0, 0), +(@PATH, 19, -11754.2, -2539.78, -0.342065, 100.0, 0), +(@PATH, 20, -11771.6, -2555.61, -0.526829, 100.0, 0), +(@PATH, 21, -11793.0, -2566.86, -2.02095, 100.0, 0), +(@PATH, 22, -11806.5, -2575.26, -1.93057, 100.0, 0), +(@PATH, 23, -11817.0, -2594.04, 0.0304065, 100.0, 0), +(@PATH, 24, -11829.8, -2611.83, -0.246485, 100.0, 0), +(@PATH, 25, -11843.8, -2615.82, -4.05847, 100.0, 0), +(@PATH, 26, -11862.8, -2628.29, -4.00317, 100.0, 0), +(@PATH, 27, -11880.8, -2643.74, -3.55695, 100.0, 0), +(@PATH, 28, -11899.5, -2658.56, -2.71281, 100.0, 0), +(@PATH, 29, -11914.0, -2663.74, -1.67681, 100.0, 0), +(@PATH, 30, -11936.6, -2669.59, -7.28362, 100.0, 0), +(@PATH, 31, -11952.0, -2669.04, -10.1938, 100.0, 0), +(@PATH, 32, -11958.3, -2665.27, -10.8756, 100.0, 0), +(@PATH, 33, -11976.6, -2651.97, -12.5223, 100.0, 0), +(@PATH, 34, -11989.2, -2648.87, -21.5704, 100.0, 0), +(@PATH, 35, -11997.1, -2647.67, -21.4651, 100.0, 0), +(@PATH, 36, -12010.6, -2650.97, -24.6536, 100.0, 0), +(@PATH, 37, -12016.5, -2664.62, -22.0722, 100.0, 0), +(@PATH, 38, -12012.6, -2690.81, -5.74008, 100.0, 0), +(@PATH, 39, -12013.3, -2712.04, 3.35226, 100.0, 0), +(@PATH, 40, -12023.0, -2722.75, 4.73668, 100.0, 0), +(@PATH, 41, -12058.6, -2725.86, 4.35547, 100.0, 0), +(@PATH, 42, -12042.8, -2727.22, 4.47039, 100.0, 0), +(@PATH, 43, -12021.0, -2721.75, 4.41762, 100.0, 0), +(@PATH, 44, -12012.9, -2709.81, 3.12055, 100.0, 0), +(@PATH, 45, -12015.4, -2677.05, -17.3785, 100.0, 0), +(@PATH, 46, -12016.3, -2662.64, -22.7659, 100.0, 0), +(@PATH, 47, -12014.8, -2655.16, -24.2672, 100.0, 0), +(@PATH, 48, -12002.5, -2647.93, -23.1457, 100.0, 0), +(@PATH, 49, -11987.5, -2649.12, -19.97, 100.0, 0), +(@PATH, 50, -11974.4, -2652.73, -12.2078, 100.0, 0), +(@PATH, 51, -11961.4, -2660.57, -11.5603, 100.0, 0), +(@PATH, 52, -11949.5, -2669.58, -9.83856, 100.0, 0), +(@PATH, 53, -11934.4, -2668.76, -6.60297, 100.0, 0); + +/* Nethergarde Cleric - GUID 2818 */ + + +SET @NPC := 2818; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10934.1, -3512.56, 70.4819, 100.0, 0), +(@PATH, 2, -10947.8, -3513.0, 72.5398, 100.0, 0), +(@PATH, 3, -10937.0, -3512.66, 70.4382, 100.0, 0), +(@PATH, 4, -10918.1, -3500.31, 65.0347, 100.0, 0), +(@PATH, 5, -10889.9, -3482.18, 67.633, 100.0, 0), +(@PATH, 6, -10883.2, -3469.39, 73.0592, 100.0, 0), +(@PATH, 7, -10894.5, -3417.88, 65.0947, 100.0, 0), +(@PATH, 8, -10896.8, -3402.14, 65.0793, 100.0, 0), +(@PATH, 9, -10889.5, -3386.58, 65.0793, 100.0, 0), +(@PATH, 10, -10894.5, -3393.0, 65.0793, 100.0, 0), +(@PATH, 11, -10895.3, -3411.92, 65.0793, 100.0, 0), +(@PATH, 12, -10893.7, -3431.05, 68.179, 100.0, 0), +(@PATH, 13, -10886.9, -3450.2, 76.2477, 100.0, 0), +(@PATH, 14, -10888.7, -3479.92, 68.2514, 100.0, 0), +(@PATH, 15, -10910.6, -3495.16, 65.1038, 100.0, 0); + + +/* Nethergarde Engineer - GUID 2831 */ + + +SET @NPC := 2831; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10648.9, `position_y` = -3601.93, `position_z` = -7.69235, `orientation` = 4.374 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10648.9, -3601.93, -7.69235, 100.0, 0), +(@PATH, 2, -10659.1, -3595.96, -7.68188, 100.0, 0), +(@PATH, 3, -10648.9, -3601.93, -7.69235, 100.0, 0), +(@PATH, 4, -10626.6, -3610.75, -10.7745, 100.0, 0), +(@PATH, 5, -10612.9, -3598.59, -12.8931, 100.0, 0), +(@PATH, 6, -10606.1, -3571.67, -13.016, 100.0, 0), +(@PATH, 7, -10589.8, -3530.78, -7.4113, 100.0, 0), +(@PATH, 8, -10594.2, -3512.79, -1.94191, 100.0, 0), +(@PATH, 9, -10605.1, -3480.25, 2.54678, 100.0, 0), +(@PATH, 10, -10597.5, -3503.14, -0.636889, 100.0, 0), +(@PATH, 11, -10589.4, -3525.17, -6.258, 100.0, 0), +(@PATH, 12, -10603.2, -3561.93, -12.0188, 100.0, 0), +(@PATH, 13, -10610.2, -3593.34, -13.7081, 100.0, 0), +(@PATH, 14, -10621.9, -3609.4, -11.2378, 100.0, 0), +(@PATH, 15, -10644.0, -3603.87, -8.01393, 100.0, 0); + + +/* Nethergarde Engineer - GUID 2874 */ + + +SET @NPC := 2874; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10642.9, `position_y` = -3368.9, `position_z` = -11.8411, `orientation` = 4.24475 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10642.9, -3368.9, -11.8411, 100.0, 0), +(@PATH, 2, -10648.6, -3384.93, -12.3627, 100.0, 0), +(@PATH, 3, -10644.6, -3373.5, -12.0937, 100.0, 0), +(@PATH, 4, -10640.0, -3353.96, -10.3258, 100.0, 0), +(@PATH, 5, -10637.3, -3329.85, -8.91358, 100.0, 0), +(@PATH, 6, -10637.2, -3305.46, -7.41371, 100.0, 0), +(@PATH, 7, -10638.8, -3273.21, -6.90623, 100.0, 0), +(@PATH, 8, -10645.8, -3245.98, -3.66932, 100.0, 0), +(@PATH, 9, -10642.1, -3235.39, -3.87247, 100.0, 0), +(@PATH, 10, -10619.1, -3230.37, -5.53486, 100.0, 0), +(@PATH, 11, -10635.3, -3231.73, -4.40398, 100.0, 0), +(@PATH, 12, -10644.2, -3239.16, -3.68146, 100.0, 0), +(@PATH, 13, -10640.2, -3265.78, -6.27386, 100.0, 0), +(@PATH, 14, -10637.5, -3298.74, -6.91279, 100.0, 0), +(@PATH, 15, -10637.0, -3322.96, -8.58814, 100.0, 0), +(@PATH, 16, -10638.9, -3347.12, -9.78694, 100.0, 0), +(@PATH, 17, -10642.6, -3366.95, -11.6916, 100.0, 0); + +/* Shadowsworn Adept - GUID 3033 */ + + +SET @NPC := 3033; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11220.6, `position_y` = -3490.08, `position_z` = 8.29975, `orientation` = 2.08067 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11220.6, -3490.08, 8.29975, 100.0, 0), +(@PATH, 2, -11224.4, -3483.23, 8.61958, 100.0, 0), +(@PATH, 3, -11226.4, -3489.85, 8.9811, 100.0, 0), +(@PATH, 4, -11228.6, -3497.12, 10.7039, 100.0, 0), +(@PATH, 5, -11232.3, -3507.94, 13.2225, 100.0, 0), +(@PATH, 6, -11233.0, -3512.34, 12.9489, 100.0, 0), +(@PATH, 7, -11231.8, -3504.36, 12.6232, 100.0, 0), +(@PATH, 8, -11228.8, -3497.46, 10.7407, 100.0, 0), +(@PATH, 9, -11226.2, -3486.18, 8.71983, 100.0, 0), +(@PATH, 10, -11220.6, -3490.01, 8.3012, 100.0, 0), +(@PATH, 11, -11219.0, -3497.81, 8.18111, 100.0, 0); + + +/* Shadowsworn Thug - GUID 3039 */ + + +SET @NPC := 3039; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11272.8, `position_y` = -3471.56, `position_z` = 9.00077, `orientation` = 5.32283 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11272.8, -3471.56, 9.00077, 100.0, 0), +(@PATH, 2, -11269.2, -3472.61, 9.22681, 100.0, 0), +(@PATH, 3, -11262.8, -3473.72, 8.25433, 100.0, 0), +(@PATH, 4, -11255.2, -3471.01, 7.63428, 100.0, 0), +(@PATH, 5, -11247.2, -3462.88, 8.15743, 100.0, 0), +(@PATH, 6, -11250.3, -3452.97, 8.23619, 100.0, 0), +(@PATH, 7, -11256.8, -3449.05, 8.28499, 100.0, 0), +(@PATH, 8, -11268.1, -3450.79, 8.44782, 100.0, 0), +(@PATH, 9, -11281.6, -3446.38, 9.40464, 100.0, 0), +(@PATH, 10, -11299.9, -3423.65, 10.2112, 100.0, 0), +(@PATH, 11, -11288.2, -3439.91, 10.5062, 100.0, 0), +(@PATH, 12, -11276.3, -3450.31, 8.96439, 100.0, 0), +(@PATH, 13, -11265.9, -3449.81, 8.43113, 100.0, 0), +(@PATH, 14, -11258.3, -3448.72, 8.3498, 100.0, 0), +(@PATH, 15, -11246.7, -3458.11, 8.30735, 100.0, 0), +(@PATH, 16, -11248.4, -3464.84, 8.3026, 100.0, 0), +(@PATH, 17, -11253.6, -3470.38, 7.54197, 100.0, 0), +(@PATH, 18, -11264.9, -3474.44, 8.8038, 100.0, 0), +(@PATH, 19, -11268.1, -3473.94, 9.15129, 100.0, 0), +(@PATH, 20, -11275.5, -3471.36, 8.78418, 100.0, 0); + +/* Nethergarde Cleric - GUID 3666 */ + + +SET @NPC := 3666; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11046.8, `position_y` = -3453.58, `position_z` = 66.1462, `orientation` = 1.5747 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11046.8, -3453.58, 66.1462, 100.0, 0), +(@PATH, 2, -11071.2, -3468.0, 65.0318, 100.0, 0), +(@PATH, 3, -11086.4, -3468.36, 65.0318, 100.0, 0), +(@PATH, 4, -11105.0, -3446.41, 65.0793, 100.0, 0), +(@PATH, 5, -11090.5, -3466.01, 65.0357, 100.0, 0), +(@PATH, 6, -11079.5, -3469.85, 65.0318, 100.0, 0), +(@PATH, 7, -11051.2, -3456.16, 66.2434, 100.0, 0), +(@PATH, 8, -10998.7, -3434.04, 62.1056, 100.0, 0), +(@PATH, 9, -10997.2, -3406.58, 61.9534, 100.0, 0), +(@PATH, 10, -10997.4, -3378.02, 62.4127, 100.0, 0), +(@PATH, 11, -10970.4, -3362.69, 65.6759, 100.0, 0), +(@PATH, 12, -10992.7, -3370.5, 63.8867, 100.0, 0), +(@PATH, 13, -10997.3, -3399.75, 62.1183, 100.0, 0), +(@PATH, 14, -10996.7, -3427.96, 62.0976, 100.0, 0), +(@PATH, 15, -11013.8, -3448.43, 65.0439, 100.0, 0), +(@PATH, 16, -11044.9, -3453.47, 66.0004, 100.0, 0); + + +/* Nethergarde Cleric - GUID 3690 */ + + +SET @NPC := 3690; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11086.2, `position_y` = -3321.87, `position_z` = 50.1266, `orientation` = 4.20245 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11086.2, -3321.87, 50.1266, 100.0, 0), +(@PATH, 2, -11077.2, -3305.76, 48.8462, 100.0, 0), +(@PATH, 3, -11070.7, -3302.37, 49.4901, 100.0, 0), +(@PATH, 4, -11058.8, -3300.88, 51.0413, 100.0, 0), +(@PATH, 5, -11043.1, -3293.34, 53.247, 100.0, 0), +(@PATH, 6, -11053.5, -3299.43, 51.7197, 100.0, 0), +(@PATH, 7, -11061.2, -3301.09, 50.6723, 100.0, 0), +(@PATH, 8, -11073.2, -3302.75, 49.2254, 100.0, 0), +(@PATH, 9, -11086.3, -3322.01, 50.1673, 100.0, 0), +(@PATH, 10, -11098.9, -3337.11, 54.1329, 100.0, 0), +(@PATH, 11, -11108.0, -3354.97, 55.173, 100.0, 0), +(@PATH, 12, -11119.0, -3380.05, 60.4307, 100.0, 0), +(@PATH, 13, -11111.2, -3362.29, 55.229, 100.0, 0), +(@PATH, 14, -11102.8, -3343.94, 54.9184, 100.0, 0), +(@PATH, 15, -11091.0, -3328.04, 51.8839, 100.0, 0); + + +/* Nethergarde Foreman - GUID 3713 */ + + +SET @NPC := 3713; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10554.5, `position_y` = -3275.27, `position_z` = 0.5635, `orientation` = 1.8138 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10554.5, -3275.27, 0.5635, 100.0, 0), +(@PATH, 2, -10548.2, -3242.41, 4.85151, 100.0, 0), +(@PATH, 3, -10554.2, -3215.09, 7.23001, 100.0, 0), +(@PATH, 4, -10566.4, -3207.48, 6.59443, 100.0, 0), +(@PATH, 5, -10581.6, -3189.98, 8.82543, 100.0, 0), +(@PATH, 6, -10606.5, -3158.75, 15.1609, 100.0, 0), +(@PATH, 7, -10629.9, -3131.81, 21.0762, 100.0, 0), +(@PATH, 8, -10642.8, -3106.11, 24.3004, 100.0, 0), +(@PATH, 9, -10634.7, -3124.47, 23.0367, 100.0, 0), +(@PATH, 10, -10612.3, -3151.92, 16.9673, 100.0, 0), +(@PATH, 11, -10586.8, -3182.57, 10.4541, 100.0, 0), +(@PATH, 12, -10573.5, -3202.47, 6.87191, 100.0, 0), +(@PATH, 13, -10559.8, -3209.23, 6.76615, 100.0, 0), +(@PATH, 14, -10549.4, -3233.43, 6.3903, 100.0, 0), +(@PATH, 15, -10549.3, -3269.11, 0.723815, 100.0, 0), +(@PATH, 16, -10575.9, -3281.14, 2.45524, 100.0, 0), +(@PATH, 17, -10592.0, -3282.19, 4.25849, 100.0, 0), +(@PATH, 18, -10598.0, -3300.63, 4.41337, 100.0, 0), +(@PATH, 19, -10596.9, -3284.42, 4.67518, 100.0, 0), +(@PATH, 20, -10582.9, -3281.84, 3.12483, 100.0, 0), +(@PATH, 21, -10555.2, -3275.47, 0.605453, 100.0, 0); + + +/* Nethergarde Foreman - GUID 3774 */ + + +SET @NPC := 3774; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10761.8, `position_y` = -3490.84, `position_z` = -24.0558, `orientation` = 0.376827 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10761.8, -3490.84, -24.0558, 100.0, 0), +(@PATH, 2, -10756.1, -3526.03, -29.7689, 100.0, 0), +(@PATH, 3, -10743.8, -3546.47, -31.6446, 100.0, 0), +(@PATH, 4, -10724.5, -3560.71, -29.6694, 100.0, 0), +(@PATH, 5, -10701.5, -3559.02, -31.3383, 100.0, 0), +(@PATH, 6, -10685.4, -3524.72, -31.3166, 100.0, 0), +(@PATH, 7, -10695.9, -3555.16, -33.0907, 100.0, 0), +(@PATH, 8, -10717.3, -3562.17, -29.2047, 100.0, 0), +(@PATH, 9, -10738.0, -3551.85, -31.3237, 100.0, 0), +(@PATH, 10, -10752.8, -3532.63, -30.754, 100.0, 0), +(@PATH, 11, -10760.8, -3501.59, -24.3013, 100.0, 0), +(@PATH, 12, -10761.3, -3461.58, -20.9321, 100.0, 0), +(@PATH, 13, -10778.5, -3448.6, -20.3839, 100.0, 0), +(@PATH, 14, -10764.4, -3456.58, -20.1006, 100.0, 0); + + +/* Nethergarde Foreman - GUID 3775 */ + + +SET @NPC := 3775; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10742.7, `position_y` = -3433.8, `position_z` = -18.0851, `orientation` = 0.613927 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10742.7, -3433.8, -18.0851, 100.0, 0), +(@PATH, 2, -10724.0, -3418.6, -15.7225, 100.0, 0), +(@PATH, 3, -10711.8, -3385.43, -11.4765, 100.0, 0), +(@PATH, 4, -10719.5, -3366.86, -11.9022, 100.0, 0), +(@PATH, 5, -10738.7, -3353.69, -10.4333, 100.0, 0), +(@PATH, 6, -10740.7, -3336.38, -10.4926, 100.0, 0), +(@PATH, 7, -10708.2, -3335.23, -5.23888, 100.0, 0), +(@PATH, 8, -10708.6, -3294.39, -8.14299, 100.0, 0), +(@PATH, 9, -10703.8, -3330.19, -6.03449, 100.0, 0), +(@PATH, 10, -10737.1, -3332.44, -10.2388, 100.0, 0), +(@PATH, 11, -10742.1, -3345.53, -10.2689, 100.0, 0), +(@PATH, 12, -10726.9, -3359.89, -11.0028, 100.0, 0), +(@PATH, 13, -10713.2, -3378.52, -11.8183, 100.0, 0), +(@PATH, 14, -10719.8, -3412.85, -14.3594, 100.0, 0); + + +/* Nethergarde Engineer - GUID 3781 */ + + +SET @NPC := 3781; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10759.6, -3628.64, -11.8502, 100.0, 0), +(@PATH, 2, -10767.4, -3602.98, -12.34, 100.0, 0), +(@PATH, 3, -10810.0, -3580.72, -11.8548, 100.0, 0), +(@PATH, 4, -10773.0, -3596.63, -12.7723, 100.0, 0), +(@PATH, 5, -10762.8, -3625.1, -11.6665, 100.0, 0), +(@PATH, 6, -10741.8, -3634.75, -11.3745, 100.0, 0), +(@PATH, 7, -10731.9, -3636.92, -12.0072, 100.0, 0), +(@PATH, 8, -10649.5, -3627.04, -11.135, 100.0, 0), +(@PATH, 9, -10689.4, -3640.92, -11.412, 100.0, 0), +(@PATH, 10, -10670.4, -3649.98, -12.9239, 100.0, 0), +(@PATH, 11, -10649.8, -3627.33, -11.1637, 100.0, 0), +(@PATH, 12, -10628.7, -3632.16, -13.2274, 100.0, 0), +(@PATH, 13, -10644.4, -3628.3, -11.6658, 100.0, 0), +(@PATH, 14, -10676.5, -3652.24, -12.6203, 100.0, 0), +(@PATH, 15, -10688.4, -3641.85, -11.4654, 100.0, 0), +(@PATH, 16, -10695.7, -3638.85, -11.1722, 100.0, 0), +(@PATH, 17, -10733.1, -3636.85, -11.9445, 100.0, 0); + + +/* Nethergarde Engineer - GUID 3786 */ + + +SET @NPC := 3786; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10557.7, `position_y` = -3308.53, `position_z` = 2.53452, `orientation` = 1.29931 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10557.7, -3308.53, 2.53452, 100.0, 0), +(@PATH, 2, -10563.1, -3331.25, 3.46868, 100.0, 0), +(@PATH, 3, -10559.2, -3366.81, -1.99552, 100.0, 0), +(@PATH, 4, -10557.5, -3386.87, -2.52529, 100.0, 0), +(@PATH, 5, -10560.6, -3406.69, -1.33124, 100.0, 0), +(@PATH, 6, -10564.3, -3435.8, -2.18551, 100.0, 0), +(@PATH, 7, -10566.0, -3451.87, -2.01642, 100.0, 0), +(@PATH, 8, -10551.7, -3475.82, -5.29398, 100.0, 0), +(@PATH, 9, -10566.2, -3453.03, -2.05965, 100.0, 0), +(@PATH, 10, -10564.0, -3432.89, -2.15259, 100.0, 0), +(@PATH, 11, -10560.3, -3404.97, -1.38721, 100.0, 0), +(@PATH, 12, -10557.3, -3389.28, -2.39065, 100.0, 0), +(@PATH, 13, -10558.5, -3373.19, -2.64956, 100.0, 0), +(@PATH, 14, -10563.3, -3341.84, 2.64804, 100.0, 0), +(@PATH, 15, -10557.2, -3306.38, 2.32065, 100.0, 0), +(@PATH, 16, -10534.5, -3295.0, 2.31873, 100.0, 0), +(@PATH, 17, -10553.5, -3301.78, 2.01342, 100.0, 0); + + +/* Felguard Sentry - GUID 3804 */ + + +SET @NPC := 3804; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11667.7, `position_y` = -3181.51, `position_z` = 16.5394, `orientation` = 4.13413 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11667.7, -3181.51, 16.5394, 100.0, 0), +(@PATH, 2, -11675.7, -3199.63, 14.4383, 100.0, 0), +(@PATH, 3, -11676.7, -3211.48, 14.7261, 100.0, 0), +(@PATH, 4, -11684.6, -3239.69, 13.2437, 100.0, 0), +(@PATH, 5, -11677.8, -3219.6, 14.8258, 100.0, 0), +(@PATH, 6, -11676.8, -3203.64, 14.3528, 100.0, 0), +(@PATH, 7, -11670.0, -3189.23, 15.8881, 100.0, 0), +(@PATH, 8, -11667.0, -3169.67, 17.4875, 100.0, 0), +(@PATH, 9, -11671.9, -3150.63, 17.7599, 100.0, 0), +(@PATH, 10, -11677.5, -3135.18, 17.2494, 100.0, 0), +(@PATH, 11, -11673.3, -3146.8, 17.9156, 100.0, 0), +(@PATH, 12, -11668.1, -3161.96, 17.7618, 100.0, 0); + + + +/* Wretched Lost One - GUID 3860 */ + + +SET @NPC := 3860; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10999.0, `position_y` = -2800.09, `position_z` = 5.62823, `orientation` = -2.44515 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10999.0, -2800.09, 5.62823, 100.0, 0), +(@PATH, 2, -11005.3, -2773.62, 4.31754, 100.0, 0), +(@PATH, 3, -11007.8, -2751.05, 4.83231, 100.0, 0), +(@PATH, 4, -11028.3, -2729.71, 7.94714, 100.0, 0), +(@PATH, 5, -11055.4, -2735.16, 9.8893, 100.0, 0), +(@PATH, 6, -11096.7, -2743.91, 14.8477, 100.0, 0), +(@PATH, 7, -11115.9, -2715.93, 11.3128, 100.0, 0), +(@PATH, 8, -11131.5, -2726.57, 12.3768, 100.0, 0), +(@PATH, 9, -11120.2, -2756.56, 17.4683, 100.0, 0), +(@PATH, 10, -11096.9, -2769.01, 14.2931, 100.0, 0), +(@PATH, 11, -11080.0, -2782.48, 8.97423, 100.0, 0), +(@PATH, 12, -11059.6, -2817.04, 9.30728, 100.0, 0), +(@PATH, 13, -11040.7, -2835.05, 13.2246, 100.0, 0), +(@PATH, 14, -11023.0, -2860.15, 9.30639, 100.0, 0), +(@PATH, 15, -11004.0, -2879.04, 9.54558, 100.0, 0), +(@PATH, 16, -10980.4, -2878.03, 4.31457, 100.0, 0), +(@PATH, 17, -10970.3, -2856.53, 5.85792, 100.0, 0), +(@PATH, 18, -10957.9, -2843.16, 6.3895, 100.0, 0), +(@PATH, 19, -10965.6, -2836.89, 10.2696, 100.0, 0), +(@PATH, 20, -10994.8, -2804.28, 5.58265, 100.0, 0); + + +/* Nethergarde Foreman - GUID 3863 */ + + +SET @NPC := 3863; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10858.6, `position_y` = -3173.48, `position_z` = 47.9651, `orientation` = 2.17203 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10858.6, -3173.48, 47.9651, 100.0, 0), +(@PATH, 2, -10834.9, -3170.2, 43.8266, 100.0, 0), +(@PATH, 3, -10810.5, -3157.26, 38.1632, 100.0, 0), +(@PATH, 4, -10793.3, -3130.43, 39.808, 100.0, 0), +(@PATH, 5, -10793.9, -3106.77, 42.466, 100.0, 0), +(@PATH, 6, -10805.1, -3080.42, 44.5298, 100.0, 0), +(@PATH, 7, -10822.1, -3058.07, 46.827, 100.0, 0), +(@PATH, 8, -10835.2, -3037.96, 47.9975, 100.0, 0), +(@PATH, 9, -10854.8, -3030.38, 48.6057, 100.0, 0), +(@PATH, 10, -10843.2, -3033.76, 48.9103, 100.0, 0), +(@PATH, 11, -10825.1, -3053.99, 47.1558, 100.0, 0), +(@PATH, 12, -10810.0, -3073.3, 45.9343, 100.0, 0), +(@PATH, 13, -10796.5, -3097.89, 43.0488, 100.0, 0), +(@PATH, 14, -10792.1, -3125.45, 40.4063, 100.0, 0), +(@PATH, 15, -10804.3, -3150.36, 37.9849, 100.0, 0), +(@PATH, 16, -10829.8, -3168.39, 42.7027, 100.0, 0), +(@PATH, 17, -10853.0, -3172.71, 46.8383, 100.0, 0), +(@PATH, 18, -10889.0, -3176.64, 49.6548, 100.0, 0), +(@PATH, 19, -10907.1, -3179.64, 49.0975, 100.0, 0), +(@PATH, 20, -10895.2, -3177.57, 48.9644, 100.0, 0), +(@PATH, 21, -10863.2, -3173.96, 48.5966, 100.0, 0); + + +/* Nethergarde Foreman - GUID 3878 */ + + +SET @NPC := 3878; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -10714.0, `position_y` = -3148.43, `position_z` = 30.0566, `orientation` = 0.60608 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -10714.0, -3148.43, 30.0566, 100.0, 0), +(@PATH, 2, -10697.5, -3165.31, 23.1402, 100.0, 0), +(@PATH, 3, -10692.4, -3146.68, 21.981, 100.0, 0), +(@PATH, 4, -10727.9, -3132.28, 33.6175, 100.0, 0), +(@PATH, 5, -10766.1, -3124.32, 36.3195, 100.0, 0), +(@PATH, 6, -10734.1, -3130.41, 34.1391, 100.0, 0), +(@PATH, 7, -10697.5, -3143.38, 24.0037, 100.0, 0), +(@PATH, 8, -10669.3, -3171.65, 20.0758, 100.0, 0), +(@PATH, 9, -10655.3, -3191.03, 23.6126, 100.0, 0), +(@PATH, 10, -10658.6, -3199.02, 22.5891, 100.0, 0), +(@PATH, 11, -10670.0, -3200.39, 21.5484, 100.0, 0), +(@PATH, 12, -10691.3, -3172.31, 20.4547, 100.0, 0), +(@PATH, 13, -10710.2, -3152.99, 28.6011, 100.0, 0), +(@PATH, 14, -10727.8, -3126.52, 33.9305, 100.0, 0), +(@PATH, 15, -10764.6, -3112.06, 36.036, 100.0, 0), +(@PATH, 16, -10734.4, -3122.79, 33.9899, 100.0, 0), +(@PATH, 17, -10714.9, -3146.92, 30.296, 100.0, 0); + + +/* Felguard Sentry - GUID 3883 */ + + +SET @NPC := 3883; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11717.8, `position_y` = -3079.98, `position_z` = 16.7711, `orientation` = 3.79812 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11748.0, -3072.61, 12.723, 100.0, 0), +(@PATH, 2, -11768.6, -3062.86, 11.6676, 100.0, 0), +(@PATH, 3, -11784.8, -3051.62, 12.8146, 100.0, 0), +(@PATH, 4, -11804.2, -3045.84, 11.1862, 100.0, 0), +(@PATH, 5, -11792.7, -3047.8, 12.6724, 100.0, 0), +(@PATH, 6, -11772.6, -3060.12, 11.4166, 100.0, 0), +(@PATH, 7, -11755.9, -3071.26, 11.3215, 100.0, 0), +(@PATH, 8, -11744.9, -3071.97, 13.5623, 100.0, 0), +(@PATH, 9, -11733.9, -3075.55, 14.8634, 100.0, 0), +(@PATH, 10, -11717.8, -3079.98, 16.7711, 100.0, 0), +(@PATH, 11, -11725.6, -3078.5, 15.7444, 100.0, 0), +(@PATH, 12, -11740.5, -3072.44, 14.1576, 100.0, 0); + + +/* Wretched Lost One - GUID 3905 */ + + +SET @NPC := 3905; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11085.8, `position_y` = -2859.62, `position_z` = 11.0827, `orientation` = 5.837 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11085.8, -2859.62, 11.0827, 100.0, 0), +(@PATH, 2, -11089.8, -2847.19, 13.748, 100.0, 0), +(@PATH, 3, -11090.7, -2826.35, 19.1503, 100.0, 0), +(@PATH, 4, -11085.1, -2812.46, 12.5627, 100.0, 0), +(@PATH, 5, -11074.9, -2792.95, 8.73555, 100.0, 0), +(@PATH, 6, -11089.0, -2775.96, 11.4759, 100.0, 0), +(@PATH, 7, -11110.7, -2761.69, 16.8771, 100.0, 0), +(@PATH, 8, -11139.0, -2748.69, 15.1873, 100.0, 0), +(@PATH, 9, -11167.1, -2734.94, 15.0996, 100.0, 0), +(@PATH, 10, -11205.2, -2727.85, 14.5844, 100.0, 0), +(@PATH, 11, -11174.0, -2732.59, 15.0697, 100.0, 0), +(@PATH, 12, -11149.6, -2743.74, 15.2432, 100.0, 0), +(@PATH, 13, -11117.0, -2758.03, 17.2808, 100.0, 0), +(@PATH, 14, -11094.6, -2772.21, 13.4907, 100.0, 0), +(@PATH, 15, -11076.8, -2784.46, 8.52577, 100.0, 0), +(@PATH, 16, -11079.9, -2802.41, 9.74095, 100.0, 0), +(@PATH, 17, -11089.5, -2821.1, 17.105, 100.0, 0), +(@PATH, 18, -11091.1, -2837.12, 16.4493, 100.0, 0), +(@PATH, 19, -11087.7, -2853.55, 11.6245, 100.0, 0), +(@PATH, 20, -11073.1, -2869.51, 9.89613, 100.0, 0), +(@PATH, 21, -11061.3, -2866.45, 10.5352, 100.0, 0), +(@PATH, 22, -11039.8, -2866.83, 9.46481, 100.0, 0), +(@PATH, 23, -11017.5, -2868.7, 9.05997, 100.0, 0), +(@PATH, 24, -11000.6, -2888.18, 9.75397, 100.0, 0), +(@PATH, 25, -11010.3, -2873.07, 9.3845, 100.0, 0), +(@PATH, 26, -11030.5, -2867.9, 9.21214, 100.0, 0), +(@PATH, 27, -11052.6, -2864.22, 10.3806, 100.0, 0), +(@PATH, 28, -11069.0, -2870.14, 9.94091, 100.0, 0), +(@PATH, 29, -11083.4, -2861.5, 10.826, 100.0, 0); + + +/* Felguard Sentry - GUID 3913 */ + + +SET @NPC := 3913; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11736.3, `position_y` = -3259.69, `position_z` = 3.54905, `orientation` = 4.5376 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11736.3, -3259.69, 3.54905, 100.0, 0), +(@PATH, 2, -11749.5, -3274.19, 5.63097, 100.0, 0), +(@PATH, 3, -11767.4, -3293.38, 4.19673, 100.0, 0), +(@PATH, 4, -11787.8, -3305.24, 6.42096, 100.0, 0), +(@PATH, 5, -11816.1, -3315.23, 7.21743, 100.0, 0), +(@PATH, 6, -11836.1, -3319.79, 4.44235, 100.0, 0), +(@PATH, 7, -11821.1, -3316.57, 8.00434, 100.0, 0), +(@PATH, 8, -11796.0, -3308.72, 4.61497, 100.0, 0), +(@PATH, 9, -11774.5, -3298.33, 6.61566, 100.0, 0), +(@PATH, 10, -11755.6, -3280.86, 4.93735, 100.0, 0), +(@PATH, 11, -11750.2, -3274.98, 5.73358, 100.0, 0), +(@PATH, 12, -11750.2, -3274.98, 5.73358, 100.0, 0), +(@PATH, 13, -11739.6, -3263.25, 2.58626, 100.0, 0), +(@PATH, 14, -11726.8, -3254.63, 5.70093, 100.0, 0), +(@PATH, 15, -11715.0, -3229.81, 7.3399, 100.0, 0), +(@PATH, 16, -11705.7, -3204.77, 6.76301, 100.0, 0), +(@PATH, 17, -11714.7, -3119.52, 9.6553, 100.0, 0), +(@PATH, 18, -11724.7, -3103.51, 11.5906, 100.0, 0), +(@PATH, 19, -11737.6, -3094.55, 10.0939, 100.0, 0), +(@PATH, 20, -11759.4, -3089.36, 7.90247, 100.0, 0), +(@PATH, 21, -11777.3, -3082.01, 3.71249, 100.0, 0), +(@PATH, 22, -11802.8, -3071.57, 6.52768, 100.0, 0), +(@PATH, 23, -11833.5, -3061.21, 5.51503, 100.0, 0), +(@PATH, 24, -11855.2, -3053.98, 10.5513, 100.0, 0), +(@PATH, 25, -11866.7, -3053.56, 13.575, 100.0, 0), +(@PATH, 26, -11878.8, -3067.78, 25.3558, 100.0, 0), +(@PATH, 27, -11885.3, -3081.64, 29.9102, 100.0, 0), +(@PATH, 28, -11898.3, -3091.15, 33.1133, 100.0, 0), +(@PATH, 29, -11891.4, -3087.62, 30.8659, 100.0, 0), +(@PATH, 30, -11880.8, -3071.89, 27.2562, 100.0, 0), +(@PATH, 31, -11873.3, -3056.77, 16.8792, 100.0, 0), +(@PATH, 32, -11864.1, -3053.36, 12.838, 100.0, 0), +(@PATH, 33, -11842.5, -3058.19, 5.18285, 100.0, 0), +(@PATH, 34, -11811.8, -3068.34, 6.53923, 100.0, 0), +(@PATH, 35, -11785.4, -3078.3, 4.92409, 100.0, 0), +(@PATH, 36, -11768.3, -3086.51, 7.10831, 100.0, 0), +(@PATH, 37, -11745.5, -3091.76, 6.49939, 100.0, 0), +(@PATH, 38, -11728.5, -3099.67, 11.1712, 100.0, 0), +(@PATH, 39, -11717.2, -3115.41, 8.65608, 100.0, 0), +(@PATH, 40, -11709.5, -3132.75, 9.94938, 100.0, 0), +(@PATH, 41, -11699.9, -3161.87, 9.60486, 100.0, 0), +(@PATH, 42, -11695.3, -3181.58, 10.3783, 100.0, 0), +(@PATH, 43, -11702.7, -3198.54, 6.13815, 100.0, 0), +(@PATH, 44, -11714.2, -3227.76, 7.42097, 100.0, 0), +(@PATH, 45, -11720.7, -3247.27, 6.71452, 100.0, 0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_07' WHERE sql_rev = '1647361710364876100'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_08.sql b/data/sql/updates/db_world/2022_03_18_08.sql new file mode 100644 index 000000000..dc45fa177 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_08.sql @@ -0,0 +1,38 @@ +-- DB update 2022_03_18_07 -> 2022_03_18_08 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_07'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_07 2022_03_18_08 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647107182833454100'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647107182833454100'); + +UPDATE `smart_scripts` SET `id` = 0 WHERE `entryorguid` = 11122 AND `action_type` = 11; +UPDATE `smart_scripts` SET `link` = 1 WHERE `entryorguid` = 11122 AND `action_type` = 11; +UPDATE `smart_scripts` SET `id` = 1 WHERE `entryorguid` = 11122 AND `action_type` = 36; +UPDATE `smart_scripts` SET `link` = 2 WHERE `entryorguid` = 11122 AND `action_type` = 36; +UPDATE `smart_scripts` SET `id` = 2 WHERE `entryorguid` = 11122 AND `action_type` = 29; +UPDATE `smart_scripts` SET `link` = 3 WHERE `entryorguid` = 11122 AND `action_type` = 29; +UPDATE `smart_scripts` SET `id` = 3 WHERE `entryorguid` = 11122 AND `action_type` = 41; +UPDATE `smart_scripts` SET `link` = 4 WHERE `entryorguid` = 11122 AND `action_type` = 41; +UPDATE `smart_scripts` SET `id` = 4 WHERE `entryorguid` = 11122 AND `action_type` = 33; +UPDATE `smart_scripts` SET `link` = 0 WHERE `entryorguid` = 11122 AND `action_type` = 33; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_08' WHERE sql_rev = '1647107182833454100'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_09.sql b/data/sql/updates/db_world/2022_03_18_09.sql new file mode 100644 index 000000000..42686a8d1 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_09.sql @@ -0,0 +1,34 @@ +-- DB update 2022_03_18_08 -> 2022_03_18_09 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_08'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_08 2022_03_18_09 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647134885721287500'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647134885721287500'); + +UPDATE `conditions` SET `ConditionTypeOrReference` = 8 WHERE `SourceEntry` = 1645 AND `ConditionValue1` = 2997; +UPDATE `conditions` SET `ConditionTypeOrReference` = 8 WHERE `SourceEntry` = 1645 AND `ConditionValue1` = 2999; +UPDATE `conditions` SET `ConditionTypeOrReference` = 8 WHERE `SourceEntry` = 1645 AND `ConditionValue1` = 3000; +UPDATE `conditions` SET `ElseGroup` = 1 WHERE `SourceEntry` = 1645 AND `ConditionValue1` = 2997; +UPDATE `conditions` SET `ElseGroup` = 2 WHERE `SourceEntry` = 1645 AND `ConditionValue1` = 2999; +UPDATE `conditions` SET `ElseGroup` = 3 WHERE `SourceEntry` = 1645 AND `ConditionValue1` = 3000; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_09' WHERE sql_rev = '1647134885721287500'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_10.sql b/data/sql/updates/db_world/2022_03_18_10.sql new file mode 100644 index 000000000..4bb55bab2 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_10.sql @@ -0,0 +1,29 @@ +-- DB update 2022_03_18_09 -> 2022_03_18_10 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_09'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_09 2022_03_18_10 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647204744919951000'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647204744919951000'); + +UPDATE `quest_template` SET `QuestCompletionLog` = 'Return to Mountaineer Kadrell at Thelsamar in Loch Modan.' WHERE `ID` = 416; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_10' WHERE sql_rev = '1647204744919951000'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_11.sql b/data/sql/updates/db_world/2022_03_18_11.sql new file mode 100644 index 000000000..81f240cf7 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_11.sql @@ -0,0 +1,1922 @@ +-- DB update 2022_03_18_10 -> 2022_03_18_11 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_10'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_10 2022_03_18_11 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647269947240244800'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647269947240244800'); + +/* Booty Bay Bruiser - GUID 178 */ + + +SET @NPC := 178; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -14423.6, `position_y` = 424.668, `position_z` = 21.8532, `orientation` = 3.71914 WHERE `guid` = @NPC; + +UPDATE `creature_addon` set `path_id` = @PATH WHERE `guid` = @NPC; +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -14442.4, 414.102, 25.0155, 100.0, 0), +(@PATH, 2, -14445.7, 412.951, 25.0162, 100.0, 0), +(@PATH, 3, -14455.0, 423.15, 25.0954, 100.0, 0), +(@PATH, 4, -14461.4, 430.758, 25.2104, 100.0, 0), +(@PATH, 5, -14468.4, 441.477, 30.2791, 100.0, 0), +(@PATH, 6, -14471.2, 446.957, 30.544, 100.0, 0), +(@PATH, 7, -14472.9, 454.424, 30.4841, 100.0, 0), +(@PATH, 8, -14472.3, 461.029, 30.6343, 100.0, 0), +(@PATH, 9, -14479.2, 463.782, 30.7789, 100.0, 0), +(@PATH, 10, -14482.8, 467.095, 31.5195, 100.0, 0), +(@PATH, 11, -14479.2, 472.917, 31.5351, 100.0, 0), +(@PATH, 12, -14482.5, 467.054, 31.6192, 100.0, 0), +(@PATH, 13, -14479.0, 463.804, 30.8692, 100.0, 0), +(@PATH, 14, -14472.0, 461.054, 30.8692, 100.0, 0), +(@PATH, 15, -14472.5, 454.304, 30.6192, 100.0, 0), +(@PATH, 16, -14471.0, 447.304, 30.6192, 100.0, 0), +(@PATH, 17, -14468.3, 441.804, 30.3692, 100.0, 0), +(@PATH, 18, -14461.3, 431.054, 25.6192, 100.0, 0), +(@PATH, 19, -14454.8, 423.304, 25.6192, 100.0, 0), +(@PATH, 20, -14445.8, 413.304, 25.3692, 100.0, 0), +(@PATH, 21, -14442.3, 414.304, 25.3692, 100.0, 0), +(@PATH, 22, -14424.3, 424.192, 21.7033, 100.0, 0); + +/* Bloodscalp Scout - GUID 1063 */ + + +SET @NPC := 1063; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11691.8, 644.795, 49.1451, 100.0, 30000), +(@PATH, 2, -11698.6, 653.232, 49.3079, 100.0, 30000); + + +/* Bloodscalp Scout - GUID 1083 */ + + +SET @NPC := 1083; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11635.7, `position_y` = 639.049, `position_z` = 51.2367, `orientation` = 5.09366 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11635.7, 639.049, 51.2367, 100.0, 0), +(@PATH, 2, -11661.0, 651.638, 50.314, 100.0, 0), +(@PATH, 3, -11666.9, 656.82, 50.2728, 100.0, 0), +(@PATH, 4, -11669.7, 659.428, 50.3576, 100.0, 0), +(@PATH, 5, -11673.7, 660.269, 50.3672, 100.0, 0), +(@PATH, 6, -11689.8, 659.41, 48.8159, 100.0, 0), +(@PATH, 7, -11694.7, 664.103, 49.5748, 100.0, 0), +(@PATH, 8, -11697.1, 675.72, 50.0499, 100.0, 0), +(@PATH, 9, -11698.0, 683.971, 49.9584, 100.0, 0), +(@PATH, 10, -11701.0, 691.059, 49.7927, 100.0, 0), +(@PATH, 11, -11708.1, 693.173, 49.8422, 100.0, 0), +(@PATH, 12, -11719.6, 687.203, 49.7369, 100.0, 0), +(@PATH, 13, -11716.4, 689.693, 49.8087, 100.0, 0), +(@PATH, 14, -11709.4, 693.075, 49.8599, 100.0, 0), +(@PATH, 15, -11701.9, 691.876, 49.7889, 100.0, 0), +(@PATH, 16, -11698.2, 685.021, 50.0309, 100.0, 0), +(@PATH, 17, -11697.1, 672.994, 50.355, 100.0, 0), +(@PATH, 18, -11693.6, 661.737, 49.0561, 100.0, 0), +(@PATH, 19, -11683.1, 659.888, 49.2773, 100.0, 0), +(@PATH, 20, -11675.1, 660.256, 50.4412, 100.0, 0), +(@PATH, 21, -11671.1, 659.864, 50.4003, 100.0, 0), +(@PATH, 22, -11667.7, 658.053, 50.2973, 100.0, 0), +(@PATH, 23, -11661.1, 651.681, 50.308, 100.0, 0); + + +/* Bloodsail Swashbuckler - GUID 1104 */ + + +SET @NPC := 1104; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -13456.6, 703.932, 6.84452, 100.0, 0), +(@PATH, 2, -13453.0, 719.546, 4.86789, 100.0, 0), +(@PATH, 3, -13448.9, 734.868, 2.40726, 100.0, 0), +(@PATH, 4, -13449.7, 746.844, 1.63538, 100.0, 0), +(@PATH, 5, -13450.8, 757.005, 1.23967, 100.0, 0), +(@PATH, 6, -13447.4, 732.875, 2.5683, 100.0, 0), +(@PATH, 7, -13443.9, 713.09, 5.46649, 100.0, 0), +(@PATH, 8, -13445.1, 701.425, 7.45237, 100.0, 0), +(@PATH, 9, -13449.7, 690.31, 8.62241, 100.0, 0), +(@PATH, 10, -13453.4, 683.116, 9.20681, 100.0, 0), +(@PATH, 11, -13461.3, 668.127, 9.60396, 100.0, 0); + + +/* Bloodscalp Mystic - GUID 1128 */ + + +SET @NPC := 1128; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11523.1, `position_y` = 550.842, `position_z` = 50.1728, `orientation` = 3.42473 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11523.1, 550.842, 50.1728, 100.0, 0), +(@PATH, 2, -11526.7, 555.058, 49.5499, 100.0, 0), +(@PATH, 3, -11533.8, 558.255, 49.8712, 100.0, 0), +(@PATH, 4, -11541.3, 558.408, 50.4895, 100.0, 0), +(@PATH, 5, -11545.2, 559.695, 50.3211, 100.0, 0), +(@PATH, 6, -11551.5, 576.94, 50.3996, 100.0, 0), +(@PATH, 7, -11560.0, 584.632, 50.5923, 100.0, 0), +(@PATH, 8, -11574.3, 587.984, 50.2111, 100.0, 0), +(@PATH, 9, -11570.5, 586.727, 50.4148, 100.0, 0), +(@PATH, 10, -11563.0, 583.82, 50.7269, 100.0, 0), +(@PATH, 11, -11556.1, 579.461, 50.5043, 100.0, 0), +(@PATH, 12, -11553.1, 577.046, 50.3558, 100.0, 0), +(@PATH, 13, -11549.8, 569.844, 50.4872, 100.0, 0), +(@PATH, 14, -11547.4, 562.331, 50.3782, 100.0, 0), +(@PATH, 15, -11544.3, 559.873, 50.4322, 100.0, 0), +(@PATH, 16, -11536.6, 557.812, 50.3393, 100.0, 0), +(@PATH, 17, -11533.2, 558.577, 49.6933, 100.0, 0); + + +/* Bloodscalp Hunter - GUID 1129 */ + + +SET @NPC := 1129; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11559.2, `position_y` = 560.577, `position_z` = 50.4424, `orientation` = 2.65044 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11559.2, 560.577, 50.4424, 100.0, 0), +(@PATH, 2, -11550.6, 569.266, 50.6287, 100.0, 0), +(@PATH, 3, -11542.4, 592.593, 50.7537, 100.0, 0), +(@PATH, 4, -11547.1, 576.018, 50.5099, 100.0, 0), +(@PATH, 5, -11555.8, 564.027, 50.4424, 100.0, 0), +(@PATH, 6, -11570.5, 559.867, 49.9268, 100.0, 0), +(@PATH, 7, -11578.5, 558.798, 49.8911, 100.0, 0), +(@PATH, 8, -11593.5, 562.094, 50.084, 100.0, 0), +(@PATH, 9, -11601.2, 570.685, 50.5494, 100.0, 0), +(@PATH, 10, -11597.7, 581.85, 50.2257, 100.0, 0), +(@PATH, 11, -11592.4, 587.617, 50.2785, 100.0, 0), +(@PATH, 12, -11587.6, 598.087, 50.5038, 100.0, 0), +(@PATH, 13, -11587.3, 601.118, 50.5832, 100.0, 0), +(@PATH, 14, -11587.3, 606.164, 50.6862, 100.0, 0), +(@PATH, 15, -11586.4, 613.206, 50.4582, 100.0, 0), +(@PATH, 16, -11583.7, 616.483, 50.3181, 100.0, 0), +(@PATH, 17, -11572.7, 617.049, 50.2419, 100.0, 0), +(@PATH, 18, -11561.8, 610.991, 50.1842, 100.0, 0), +(@PATH, 19, -11559.3, 601.875, 50.4245, 100.0, 0), +(@PATH, 20, -11560.7, 598.116, 50.3787, 100.0, 0), +(@PATH, 21, -11579.1, 588.187, 50.0861, 100.0, 0), +(@PATH, 22, -11567.8, 592.911, 50.3379, 100.0, 0), +(@PATH, 23, -11563.2, 594.868, 50.3775, 100.0, 0), +(@PATH, 24, -11558.1, 605.784, 50.4821, 100.0, 0), +(@PATH, 25, -11564.7, 613.688, 50.0871, 100.0, 0), +(@PATH, 26, -11575.5, 617.254, 50.2659, 100.0, 0), +(@PATH, 27, -11580.5, 617.412, 50.3064, 100.0, 0), +(@PATH, 28, -11586.2, 614.383, 50.4205, 100.0, 0), +(@PATH, 29, -11587.0, 610.438, 50.6697, 100.0, 0), +(@PATH, 30, -11587.3, 606.41, 50.6912, 100.0, 0), +(@PATH, 31, -11588.2, 593.323, 50.3361, 100.0, 0), +(@PATH, 32, -11595.0, 584.925, 50.2421, 100.0, 0), +(@PATH, 33, -11600.4, 577.616, 50.393, 100.0, 0), +(@PATH, 34, -11599.8, 568.078, 50.4062, 100.0, 0), +(@PATH, 35, -11587.1, 559.287, 49.9081, 100.0, 0); + + +/* Murkgill Hunter - GUID 1199 */ + + +SET @NPC := 1199; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12069.0, 70.6365, -5.00398, 100.0, 0), +(@PATH, 2, -12045.6, 77.0904, -3.83572, 100.0, 0), +(@PATH, 3, -12020.8, 80.5766, 0.385119, 100.0, 0), +(@PATH, 4, -12036.6, 78.7385, -2.57904, 100.0, 0), +(@PATH, 5, -12060.2, 73.3065, -4.61618, 100.0, 0), +(@PATH, 6, -12098.8, 60.341, -7.44848, 100.0, 0), +(@PATH, 7, -12123.5, 40.1456, -6.44032, 100.0, 0), +(@PATH, 8, -12136.4, 9.61155, -4.41445, 100.0, 0), +(@PATH, 9, -12126.3, 35.8284, -5.87528, 100.0, 0), +(@PATH, 10, -12106.6, 55.8356, -7.35637, 100.0, 0); + + +/* Skullsplitter Hunter - GUID 1213 */ + + +SET @NPC := 1213; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12851.7, `position_y` = -653.414, `position_z` = 59.6281, `orientation` = 4.11228 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12851.7, -653.414, 59.6281, 100.0, 0), +(@PATH, 2, -12858.8, -656.43, 57.2591, 100.0, 0), +(@PATH, 3, -12864.8, -665.388, 56.7861, 100.0, 0), +(@PATH, 4, -12866.9, -677.362, 55.9866, 100.0, 0), +(@PATH, 5, -12868.6, -693.505, 56.1732, 100.0, 0), +(@PATH, 6, -12882.6, -706.893, 53.9363, 100.0, 0), +(@PATH, 7, -12966.8, -727.768, 54.9683, 100.0, 0), +(@PATH, 8, -12927.5, -718.73, 51.4769, 100.0, 0), +(@PATH, 9, -12892.0, -711.201, 53.2939, 100.0, 0), +(@PATH, 10, -12871.9, -698.534, 55.8871, 100.0, 0), +(@PATH, 11, -12867.8, -683.877, 55.8077, 100.0, 0), +(@PATH, 12, -12865.2, -667.258, 56.7242, 100.0, 0); + + +/* Mosh'Ogg Warmonger - GUID 1306 */ + + +SET @NPC := 1306; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12341.2, `position_y` = -974.564, `position_z` = 12.6574, `orientation` = 0.942478 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12321.0, -987.277, 16.1281, 0.0, 0), +(@PATH, 2, -12313.4, -996.214, 20.1334, 0.0, 0), +(@PATH, 3, -12306.6, -1001.41, 22.9486, 0.0, 0), +(@PATH, 4, -12300.2, -1003.79, 25.7924, 0.0, 0), +(@PATH, 5, -12291.5, -1005.99, 29.7797, 0.0, 0), +(@PATH, 6, -12280.0, -1000.79, 32.059, 0.0, 0), +(@PATH, 7, -12268.3, -989.618, 33.7009, 0.0, 0), +(@PATH, 8, -12240.5, -984.796, 34.0938, 0.0, 0), +(@PATH, 9, -12268.3, -989.618, 33.7009, 0.0, 0), +(@PATH, 10, -12280.0, -1000.79, 32.059, 0.0, 0), +(@PATH, 11, -12291.5, -1005.99, 29.7797, 0.0, 0), +(@PATH, 12, -12300.2, -1003.79, 25.7924, 0.0, 0), +(@PATH, 13, -12306.6, -1001.41, 22.9486, 0.0, 0), +(@PATH, 14, -12313.4, -996.214, 20.1334, 0.0, 0), +(@PATH, 15, -12321.0, -987.277, 16.1281, 0.0, 0), +(@PATH, 16, -12340.8, -974.699, 12.554, 0.0, 0); + +/* Skullsplitter Hunter - GUID 1360 */ + + +SET @NPC := 1360; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12828.1, `position_y` = -804.768, `position_z` = 60.5913, `orientation` = 3.43563 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12828.1, -804.768, 60.5913, 100.0, 0), +(@PATH, 2, -12802.0, -785.664, 62.3812, 100.0, 0), +(@PATH, 3, -12791.1, -773.972, 61.4198, 100.0, 0), +(@PATH, 4, -12792.0, -766.739, 62.088, 100.0, 0), +(@PATH, 5, -12796.9, -755.996, 71.1552, 100.0, 0), +(@PATH, 6, -12798.8, -752.783, 71.2339, 100.0, 0), +(@PATH, 7, -12801.9, -752.073, 72.854, 100.0, 0), +(@PATH, 8, -12804.7, -752.601, 74.7718, 100.0, 0), +(@PATH, 9, -12811.0, -750.177, 77.107, 100.0, 0), +(@PATH, 10, -12813.3, -746.817, 77.3109, 100.0, 0), +(@PATH, 11, -12817.8, -736.891, 75.2427, 100.0, 0), +(@PATH, 12, -12814.7, -744.203, 76.7653, 100.0, 0), +(@PATH, 13, -12812.8, -747.688, 77.3984, 100.0, 0), +(@PATH, 14, -12810.4, -751.107, 77.0424, 100.0, 0), +(@PATH, 15, -12807.3, -752.504, 75.9823, 100.0, 0), +(@PATH, 16, -12803.8, -752.412, 74.2985, 100.0, 0), +(@PATH, 17, -12800.6, -752.212, 72.0734, 100.0, 0), +(@PATH, 18, -12795.0, -759.765, 68.4002, 100.0, 0), +(@PATH, 19, -12791.3, -768.447, 61.7334, 100.0, 0), +(@PATH, 20, -12794.8, -778.515, 61.9093, 100.0, 0), +(@PATH, 21, -12819.7, -798.98, 61.9473, 100.0, 0), +(@PATH, 22, -12834.7, -809.028, 58.7304, 100.0, 0); + + +/* Skullsplitter Hunter - GUID 1380 */ + + +SET @NPC := 1380; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12812.5, `position_y` = -686.394, `position_z` = 81.4995, `orientation` = 1.33225 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12812.5, -686.394, 81.4995, 100.0, 0), +(@PATH, 2, -12809.8, -691.803, 81.9422, 100.0, 0), +(@PATH, 3, -12812.0, -698.643, 80.3653, 100.0, 0), +(@PATH, 4, -12813.8, -701.964, 81.0294, 100.0, 0), +(@PATH, 5, -12816.3, -705.029, 81.5747, 100.0, 0), +(@PATH, 6, -12817.1, -708.954, 82.4586, 100.0, 0), +(@PATH, 7, -12817.2, -713.097, 82.1438, 100.0, 0), +(@PATH, 8, -12820.1, -719.53, 80.51, 100.0, 0), +(@PATH, 9, -12822.7, -721.685, 80.4382, 100.0, 0), +(@PATH, 10, -12825.8, -723.828, 80.3614, 100.0, 0), +(@PATH, 11, -12833.8, -729.371, 79.0146, 100.0, 0), +(@PATH, 12, -12830.5, -727.392, 79.6808, 100.0, 0), +(@PATH, 13, -12824.5, -722.925, 80.1836, 100.0, 0), +(@PATH, 14, -12821.6, -720.934, 80.2101, 100.0, 0), +(@PATH, 15, -12818.8, -718.356, 80.5203, 100.0, 0), +(@PATH, 16, -12817.1, -713.576, 81.9534, 100.0, 0), +(@PATH, 17, -12817.2, -709.644, 82.4768, 100.0, 0), +(@PATH, 18, -12816.6, -705.662, 81.7275, 100.0, 0), +(@PATH, 19, -12812.3, -699.151, 80.4864, 100.0, 0), +(@PATH, 20, -12810.7, -695.853, 80.5682, 100.0, 0), +(@PATH, 21, -12811.4, -688.525, 81.4155, 100.0, 0), +(@PATH, 22, -12813.8, -685.447, 82.0557, 100.0, 0), +(@PATH, 23, -12817.9, -679.75, 80.988, 100.0, 0), +(@PATH, 24, -12813.5, -664.972, 70.7187, 100.0, 0), +(@PATH, 25, -12815.7, -670.463, 76.0304, 100.0, 0), +(@PATH, 26, -12817.6, -676.784, 79.7162, 100.0, 0), +(@PATH, 27, -12816.4, -683.531, 81.6081, 100.0, 0); + + +/* Skullsplitter Beastmaster - GUID 1381 */ + + +SET @NPC := 1381; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12928.0, `position_y` = -805.329, `position_z` = 55.5855, `orientation` = 1.25593 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12928.0, -805.329, 55.5855, 100.0, 0), +(@PATH, 2, -12918.7, -797.611, 54.0618, 100.0, 0), +(@PATH, 3, -12912.1, -793.166, 53.0195, 100.0, 0), +(@PATH, 4, -12904.6, -792.458, 52.7476, 100.0, 0), +(@PATH, 5, -12897.3, -795.892, 52.382, 100.0, 0), +(@PATH, 6, -12889.9, -799.11, 52.8043, 100.0, 0), +(@PATH, 7, -12877.1, -809.358, 54.5744, 100.0, 0), +(@PATH, 8, -12896.5, -792.158, 52.0629, 100.0, 0), +(@PATH, 9, -12907.4, -766.345, 51.4709, 100.0, 0), +(@PATH, 10, -12908.6, -734.069, 51.1974, 100.0, 0), +(@PATH, 11, -12923.6, -696.912, 51.099, 100.0, 0), +(@PATH, 12, -12910.4, -669.195, 51.0906, 100.0, 0), +(@PATH, 13, -12900.8, -646.892, 51.272, 100.0, 0), +(@PATH, 14, -12888.7, -630.891, 51.3232, 100.0, 0), +(@PATH, 15, -12872.7, -617.51, 54.5991, 100.0, 0), +(@PATH, 16, -12892.9, -634.743, 51.4005, 100.0, 0), +(@PATH, 17, -12907.7, -663.178, 51.1715, 100.0, 0), +(@PATH, 18, -12925.9, -689.998, 51.0756, 100.0, 0), +(@PATH, 19, -12962.7, -673.807, 51.2743, 100.0, 0), +(@PATH, 20, -12987.3, -659.53, 51.3785, 100.0, 0), +(@PATH, 21, -13004.8, -649.454, 53.0795, 100.0, 0), +(@PATH, 22, -13015.4, -644.223, 53.9215, 100.0, 0), +(@PATH, 23, -13034.8, -632.844, 53.3921, 100.0, 0), +(@PATH, 24, -13017.2, -642.664, 53.9216, 100.0, 0), +(@PATH, 25, -13004.0, -651.936, 53.1014, 100.0, 0), +(@PATH, 26, -12994.9, -659.888, 52.1759, 100.0, 0), +(@PATH, 27, -12991.9, -666.896, 52.0397, 100.0, 0), +(@PATH, 28, -12991.6, -674.425, 52.4821, 100.0, 0), +(@PATH, 29, -12995.4, -685.857, 53.6993, 100.0, 0), +(@PATH, 30, -12997.0, -689.551, 53.8864, 100.0, 0), +(@PATH, 31, -12999.9, -699.593, 54.644, 100.0, 0), +(@PATH, 32, -12999.2, -691.825, 54.1769, 100.0, 0), +(@PATH, 33, -12985.5, -672.754, 51.7215, 100.0, 0), +(@PATH, 34, -12974.8, -668.873, 51.3572, 100.0, 0), +(@PATH, 35, -12958.6, -667.337, 51.1577, 100.0, 0), +(@PATH, 36, -12949.6, -661.599, 51.3661, 100.0, 0), +(@PATH, 37, -12946.2, -654.433, 52.4136, 100.0, 0), +(@PATH, 38, -12943.6, -640.24, 53.237, 100.0, 0), +(@PATH, 39, -12943.5, -660.504, 52.1165, 100.0, 0), +(@PATH, 40, -12939.9, -680.232, 51.2024, 100.0, 0), +(@PATH, 41, -12925.3, -699.117, 51.0653, 100.0, 0), +(@PATH, 42, -12911.5, -723.907, 51.2176, 100.0, 0), +(@PATH, 43, -12909.6, -753.856, 51.4276, 100.0, 0), +(@PATH, 44, -12907.3, -782.097, 52.3189, 100.0, 0), +(@PATH, 45, -12924.5, -802.933, 54.8039, 100.0, 0); + + +/* Skullsplitter Hunter - GUID 1391 */ + + +SET @NPC := 1391; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12992.4, -671.172, 52.4459, 100.0, 0), +(@PATH, 2, -13008.5, -683.035, 55.2639, 100.0, 0), +(@PATH, 3, -13019.7, -692.503, 55.1819, 100.0, 0), +(@PATH, 4, -13022.1, -715.903, 54.698, 100.0, 0), +(@PATH, 5, -13022.3, -728.91, 54.9169, 100.0, 0), +(@PATH, 6, -13022.2, -720.807, 54.6897, 100.0, 0), +(@PATH, 7, -13021.3, -704.648, 55.2174, 100.0, 0), +(@PATH, 8, -13021.3, -693.826, 55.3925, 100.0, 0), +(@PATH, 9, -13010.0, -684.352, 55.2492, 100.0, 0), +(@PATH, 10, -12997.8, -673.99, 53.6997, 100.0, 0), +(@PATH, 11, -12984.0, -669.189, 51.5392, 100.0, 0), +(@PATH, 12, -12976.9, -670.189, 51.367, 100.0, 0), +(@PATH, 13, -12936.8, -689.792, 51.0965, 100.0, 0), +(@PATH, 14, -12976.9, -670.189, 51.3674, 100.0, 0); + + +/* Skullsplitter Axe Thrower - GUID 1405 */ + + +SET @NPC := 1405; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12505.6, `position_y` = -748.509, `position_z` = 37.4733, `orientation` = 1.88496 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12505.6, -748.509, 37.4733, 100.0, 0), +(@PATH, 2, -12502.9, -758.203, 37.4595, 100.0, 0), +(@PATH, 3, -12518.9, -790.723, 37.9103, 100.0, 0), +(@PATH, 4, -12526.8, -804.906, 38.3087, 100.0, 0), +(@PATH, 5, -12542.9, -822.725, 41.0361, 100.0, 0), +(@PATH, 6, -12553.8, -834.302, 43.8454, 100.0, 0), +(@PATH, 7, -12565.8, -844.824, 46.4901, 100.0, 0), +(@PATH, 8, -12570.5, -850.869, 48.1285, 100.0, 0), +(@PATH, 9, -12576.0, -861.556, 49.8767, 100.0, 0), +(@PATH, 10, -12582.1, -886.265, 48.7459, 100.0, 30000), +(@PATH, 11, -12593.4, -896.793, 50.4639, 100.0, 0), +(@PATH, 12, -12629.7, -882.075, 52.303, 100.0, 0), +(@PATH, 13, -12644.5, -875.323, 52.3698, 100.0, 0), +(@PATH, 14, -12672.0, -868.502, 51.0329, 100.0, 0), +(@PATH, 15, -12697.5, -879.137, 54.5915, 100.0, 0), +(@PATH, 16, -12729.3, -883.734, 55.2066, 100.0, 0), +(@PATH, 17, -12757.2, -885.654, 53.3629, 100.0, 0), +(@PATH, 18, -12773.4, -885.254, 53.8699, 100.0, 0), +(@PATH, 19, -12785.3, -883.501, 55.0784, 100.0, 0), +(@PATH, 20, -12796.0, -879.049, 57.0381, 100.0, 0), +(@PATH, 21, -12805.1, -871.277, 58.5779, 100.0, 0), +(@PATH, 22, -12816.2, -860.279, 60.3142, 100.0, 0), +(@PATH, 23, -12834.0, -844.302, 56.9032, 100.0, 0), +(@PATH, 24, -12858.2, -824.133, 54.5293, 100.0, 30000), +(@PATH, 25, -12854.2, -823.224, 54.699, 100.0, 0), +(@PATH, 26, -12842.9, -818.939, 55.3834, 100.0, 0), +(@PATH, 27, -12834.8, -810.795, 58.4522, 100.0, 0), +(@PATH, 28, -12825.9, -803.276, 61.0659, 100.0, 0), +(@PATH, 29, -12815.3, -797.553, 61.8574, 100.0, 0), +(@PATH, 30, -12799.9, -792.906, 62.2464, 100.0, 0), +(@PATH, 31, -12779.4, -795.687, 61.6628, 100.0, 0), +(@PATH, 32, -12755.7, -798.848, 60.0422, 100.0, 0), +(@PATH, 33, -12739.5, -799.549, 60.8576, 100.0, 0), +(@PATH, 34, -12723.3, -799.902, 60.9062, 100.0, 0), +(@PATH, 35, -12702.9, -799.558, 60.7436, 100.0, 0), +(@PATH, 36, -12674.7, -796.753, 59.3341, 100.0, 0), +(@PATH, 37, -12664.7, -791.207, 59.1141, 100.0, 0), +(@PATH, 38, -12651.7, -782.325, 56.1493, 100.0, 0), +(@PATH, 39, -12623.1, -773.396, 44.1436, 100.0, 0), +(@PATH, 40, -12606.7, -762.372, 41.8668, 100.0, 0), +(@PATH, 41, -12600.0, -757.836, 42.3014, 100.0, 0), +(@PATH, 42, -12586.7, -748.843, 44.0255, 100.0, 0), +(@PATH, 43, -12579.8, -744.662, 43.5917, 100.0, 0), +(@PATH, 44, -12569.5, -738.798, 40.9609, 100.0, 0), +(@PATH, 45, -12559.2, -735.755, 39.1732, 100.0, 30000), +(@PATH, 46, -12552.4, -734.985, 39.1693, 100.0, 0), +(@PATH, 47, -12548.5, -733.411, 39.1987, 100.0, 0), +(@PATH, 48, -12545.2, -731.308, 39.4668, 100.0, 0), +(@PATH, 49, -12540.8, -724.491, 39.8921, 100.0, 30000), +(@PATH, 50, -12537.6, -731.317, 38.9928, 100.0, 0), +(@PATH, 51, -12525.3, -737.404, 38.9094, 100.0, 0); + + +/* Skullsplitter Axe Thrower - GUID 1408 */ + + +SET @NPC := 1408; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12762.0, `position_y` = -890.346, `position_z` = 52.7586, `orientation` = 2.23398 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12762.0, -890.346, 52.7586, 100.0, 0), +(@PATH, 2, -12730.1, -887.774, 55.5323, 100.0, 0), +(@PATH, 3, -12714.3, -885.025, 53.4196, 100.0, 0), +(@PATH, 4, -12699.1, -879.825, 54.4919, 100.0, 0), +(@PATH, 5, -12681.8, -869.564, 52.6233, 100.0, 0), +(@PATH, 6, -12674.4, -869.165, 51.188, 100.0, 0), +(@PATH, 7, -12666.7, -871.35, 51.4219, 100.0, 0), +(@PATH, 8, -12650.9, -873.392, 52.5857, 100.0, 0), +(@PATH, 9, -12638.7, -876.715, 52.3258, 100.0, 0), +(@PATH, 10, -12628.2, -882.72, 52.3613, 100.0, 0), +(@PATH, 11, -12614.1, -890.653, 53.2341, 100.0, 0), +(@PATH, 12, -12607.4, -894.497, 52.9249, 100.0, 0), +(@PATH, 13, -12596.1, -898.259, 50.9869, 100.0, 0), +(@PATH, 14, -12584.8, -891.217, 48.1915, 100.0, 30000), +(@PATH, 15, -12581.3, -875.678, 49.6814, 100.0, 0), +(@PATH, 16, -12563.8, -839.487, 46.2891, 100.0, 0), +(@PATH, 17, -12548.5, -821.83, 42.4999, 100.0, 0), +(@PATH, 18, -12528.2, -802.737, 38.3867, 100.0, 0), +(@PATH, 19, -12517.3, -790.733, 37.6283, 100.0, 0), +(@PATH, 20, -12504.1, -761.325, 37.2703, 100.0, 0), +(@PATH, 21, -12504.8, -749.482, 37.1879, 100.0, 30000), +(@PATH, 22, -12525.3, -740.081, 39.0834, 100.0, 0), +(@PATH, 23, -12531.0, -735.172, 38.9141, 100.0, 0), +(@PATH, 24, -12534.3, -733.351, 38.8407, 100.0, 0), +(@PATH, 25, -12541.9, -731.708, 39.2788, 100.0, 0), +(@PATH, 26, -12549.2, -722.585, 40.6961, 100.0, 0), +(@PATH, 27, -12556.6, -713.417, 39.0303, 100.0, 0), +(@PATH, 28, -12563.1, -708.661, 39.1064, 100.0, 0), +(@PATH, 29, -12573.6, -702.577, 39.3474, 100.0, 0), +(@PATH, 30, -12583.1, -690.176, 39.9489, 100.0, 0), +(@PATH, 31, -12588.2, -679.075, 39.7129, 100.0, 0), +(@PATH, 32, -12595.0, -664.307, 39.9864, 100.0, 0), +(@PATH, 33, -12599.4, -652.97, 39.8231, 100.0, 0), +(@PATH, 34, -12599.9, -645.003, 39.8947, 100.0, 0), +(@PATH, 35, -12597.3, -637.418, 40.4238, 100.0, 0), +(@PATH, 36, -12594.9, -629.737, 40.2418, 100.0, 0), +(@PATH, 37, -12594.6, -625.751, 40.4491, 100.0, 0), +(@PATH, 38, -12595.2, -613.827, 38.8148, 100.0, 0), +(@PATH, 39, -12594.7, -593.58, 36.5525, 100.0, 0), +(@PATH, 40, -12600.2, -579.04, 34.2872, 100.0, 0), +(@PATH, 41, -12611.5, -562.366, 31.9708, 100.0, 0), +(@PATH, 42, -12620.0, -553.872, 31.7559, 100.0, 0), +(@PATH, 43, -12630.2, -547.365, 31.936, 100.0, 0), +(@PATH, 44, -12640.0, -540.128, 32.2561, 100.0, 0), +(@PATH, 45, -12645.3, -534.178, 31.9934, 100.0, 0), +(@PATH, 46, -12651.1, -523.508, 31.2743, 100.0, 0), +(@PATH, 47, -12665.0, -509.139, 29.4158, 100.0, 0), +(@PATH, 48, -12671.9, -506.452, 29.5088, 100.0, 0), +(@PATH, 49, -12679.5, -504.044, 29.5854, 100.0, 0), +(@PATH, 50, -12686.7, -500.509, 29.0686, 100.0, 0), +(@PATH, 51, -12689.9, -498.088, 29.1882, 100.0, 0), +(@PATH, 52, -12693.0, -487.472, 29.2998, 100.0, 30000), +(@PATH, 53, -12693.2, -491.533, 29.438, 100.0, 0), +(@PATH, 54, -12700.5, -494.845, 30.2639, 100.0, 0), +(@PATH, 55, -12716.4, -491.824, 29.6841, 100.0, 0), +(@PATH, 56, -12741.2, -516.6, 30.2787, 100.0, 0), +(@PATH, 57, -12767.2, -535.472, 34.1034, 100.0, 0), +(@PATH, 58, -12801.5, -530.203, 36.8804, 100.0, 0), +(@PATH, 59, -12821.9, -537.812, 46.1076, 100.0, 0), +(@PATH, 60, -12836.6, -544.153, 47.7871, 100.0, 0), +(@PATH, 61, -12864.3, -543.38, 47.7794, 100.0, 0), +(@PATH, 62, -12879.5, -554.229, 48.8942, 100.0, 0), +(@PATH, 63, -12877.9, -568.303, 50.6014, 100.0, 0), +(@PATH, 64, -12862.4, -579.861, 53.7743, 100.0, 0), +(@PATH, 65, -12856.3, -589.198, 54.669, 100.0, 0), +(@PATH, 66, -12859.6, -604.335, 56.8006, 100.0, 30000), +(@PATH, 67, -12878.0, -624.164, 52.679, 100.0, 0), +(@PATH, 68, -12891.5, -632.918, 51.3038, 100.0, 0), +(@PATH, 69, -12901.8, -644.776, 51.2709, 100.0, 0), +(@PATH, 70, -12906.7, -660.089, 51.0987, 100.0, 0), +(@PATH, 71, -12924.3, -691.778, 51.1009, 100.0, 30000), +(@PATH, 72, -12910.9, -724.205, 51.1811, 100.0, 0), +(@PATH, 73, -12906.0, -772.41, 51.5967, 100.0, 0), +(@PATH, 74, -12896.0, -789.531, 51.9119, 100.0, 0), +(@PATH, 75, -12880.5, -807.939, 54.6357, 100.0, 0), +(@PATH, 76, -12858.4, -823.952, 54.5228, 100.0, 30000), +(@PATH, 77, -12854.9, -825.987, 54.6521, 100.0, 0), +(@PATH, 78, -12844.5, -832.331, 55.2178, 100.0, 0), +(@PATH, 79, -12834.5, -838.677, 56.7409, 100.0, 0), +(@PATH, 80, -12825.1, -845.945, 59.0249, 100.0, 0), +(@PATH, 81, -12817.3, -854.857, 61.2077, 100.0, 0), +(@PATH, 82, -12804.1, -870.033, 59.086, 100.0, 0), +(@PATH, 83, -12780.5, -884.721, 54.3719, 100.0, 0); + + +/* Kurzen Witch Doctor - GUID 1457 */ + + +SET @NPC := 1457; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11465.9, -831.513, 14.7047, 100.0, 0), +(@PATH, 2, -11459.1, -825.053, 15.4915, 100.0, 0), +(@PATH, 3, -11461.7, -828.167, 15.2047, 100.0, 0), +(@PATH, 4, -11468.1, -832.856, 14.3118, 100.0, 0), +(@PATH, 5, -11475.2, -836.878, 13.9709, 100.0, 0), +(@PATH, 6, -11489.9, -842.367, 14.8976, 100.0, 0), +(@PATH, 7, -11493.7, -843.091, 16.0366, 100.0, 0), +(@PATH, 8, -11504.7, -846.871, 18.8708, 100.0, 0), +(@PATH, 9, -11508.1, -848.596, 20.1408, 100.0, 0), +(@PATH, 10, -11514.0, -852.596, 22.1941, 100.0, 0), +(@PATH, 11, -11510.9, -850.253, 21.125, 100.0, 0), +(@PATH, 12, -11500.6, -845.028, 17.4007, 100.0, 0), +(@PATH, 13, -11493.1, -842.973, 15.8601, 100.0, 0), +(@PATH, 14, -11485.5, -841.01, 13.7862, 100.0, 0), +(@PATH, 15, -11478.0, -838.309, 13.6942, 100.0, 0); + + +/* Murkgill Warrior - GUID 1464 */ + + +SET @NPC := 1464; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12126.3, `position_y` = -53.538, `position_z` = 17.6695, `orientation` = 4.51613 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12126.3, -53.5382, 17.6695, 100.0, 30000), +(@PATH, 2, -12113.6, -54.8446, 16.139, 100.0, 0), +(@PATH, 3, -12101.5, -56.7108, 16.7029, 100.0, 0), +(@PATH, 4, -12090.2, -54.7769, 21.2983, 100.0, 0), +(@PATH, 5, -12082.5, -61.6692, 26.7998, 100.0, 0), +(@PATH, 6, -12078.3, -73.3825, 29.8465, 100.0, 0), +(@PATH, 7, -12080.8, -96.791, 39.7813, 100.0, 0), +(@PATH, 8, -12082.8, -108.51, 40.3842, 100.0, 30000), +(@PATH, 9, -12082.0, -95.9706, 39.5417, 100.0, 0), +(@PATH, 10, -12080.6, -84.4326, 33.9209, 100.0, 0), +(@PATH, 11, -12080.0, -72.57, 29.8746, 100.0, 0), +(@PATH, 12, -12083.5, -61.1402, 26.1005, 100.0, 0), +(@PATH, 13, -12091.6, -53.776, 19.9859, 100.0, 0), +(@PATH, 14, -12102.7, -55.313, 17.3293, 100.0, 0); + + +/* Kurzen Shadow Hunter - GUID 1482 */ + + +SET @NPC := 1482; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11341.0, `position_y` = -922.564, `position_z` = 30.4968, `orientation` = 4.01224 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11341.0, -922.564, 30.4968, 100.0, 0), +(@PATH, 2, -11348.7, -909.214, 27.1783, 100.0, 0), +(@PATH, 3, -11358.1, -902.971, 23.8093, 100.0, 0), +(@PATH, 4, -11367.7, -896.542, 20.498, 100.0, 0), +(@PATH, 5, -11377.8, -890.138, 18.081, 100.0, 0), +(@PATH, 6, -11388.9, -885.532, 17.7398, 100.0, 0), +(@PATH, 7, -11392.7, -884.984, 17.9513, 100.0, 0), +(@PATH, 8, -11398.3, -890.841, 17.842, 100.0, 0), +(@PATH, 9, -11403.3, -897.235, 17.7645, 100.0, 0), +(@PATH, 10, -11413.1, -910.036, 18.0845, 100.0, 0), +(@PATH, 11, -11415.5, -913.323, 18.2896, 100.0, 0), +(@PATH, 12, -11417.6, -916.663, 18.6888, 100.0, 0), +(@PATH, 13, -11424.4, -920.735, 18.7077, 100.0, 0), +(@PATH, 14, -11432.0, -923.158, 18.8157, 100.0, 0), +(@PATH, 15, -11435.8, -924.631, 18.7599, 100.0, 0), +(@PATH, 16, -11442.8, -927.425, 18.2544, 100.0, 0), +(@PATH, 17, -11446.8, -926.922, 18.4458, 100.0, 0), +(@PATH, 18, -11450.6, -925.854, 18.7424, 100.0, 0), +(@PATH, 19, -11449.7, -919.065, 18.2066, 100.0, 0), +(@PATH, 20, -11446.9, -916.067, 18.2443, 100.0, 0), +(@PATH, 21, -11444.1, -913.148, 18.3223, 100.0, 0), +(@PATH, 22, -11441.8, -909.772, 18.2793, 100.0, 0), +(@PATH, 23, -11435.9, -904.352, 18.2794, 100.0, 0), +(@PATH, 24, -11428.7, -900.954, 18.3662, 100.0, 0), +(@PATH, 25, -11417.5, -896.451, 18.5261, 100.0, 0), +(@PATH, 26, -11410.2, -892.933, 18.3675, 100.0, 0), +(@PATH, 27, -11406.5, -891.453, 18.1403, 100.0, 0), +(@PATH, 28, -11399.2, -889.256, 18.1489, 100.0, 0), +(@PATH, 29, -11392.5, -885.559, 17.8808, 100.0, 0), +(@PATH, 30, -11384.8, -886.441, 17.745, 100.0, 0), +(@PATH, 31, -11371.1, -894.481, 19.6621, 100.0, 0), +(@PATH, 32, -11361.3, -901.164, 22.3836, 100.0, 0), +(@PATH, 33, -11354.6, -904.78, 24.9876, 100.0, 0), +(@PATH, 34, -11343.7, -915.602, 28.9555, 100.0, 0), +(@PATH, 35, -11341.2, -923.196, 30.557, 100.0, 0), +(@PATH, 36, -11340.5, -927.112, 30.9549, 100.0, 0), +(@PATH, 37, -11338.5, -938.934, 31.7576, 100.0, 0), +(@PATH, 38, -11338.5, -937.822, 31.7895, 100.0, 0), +(@PATH, 39, -11339.4, -929.807, 31.1679, 100.0, 0); + + +/* Kurzen Witch Doctor - GUID 1615 */ + + +SET @NPC := 1615; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11455.2, -831.851, 15.2099, 100.0, 0), +(@PATH, 2, -11449.8, -836.014, 14.8575, 100.0, 0), +(@PATH, 3, -11437.9, -834.457, 14.6513, 100.0, 0), +(@PATH, 4, -11437.0, -830.52, 15.0835, 100.0, 0), +(@PATH, 5, -11438.0, -826.629, 15.6866, 100.0, 0), +(@PATH, 6, -11440.2, -822.096, 15.8637, 100.0, 0), +(@PATH, 7, -11444.5, -817.366, 15.6501, 100.0, 0), +(@PATH, 8, -11452.0, -814.128, 15.5501, 100.0, 0), +(@PATH, 9, -11454.1, -803.051, 15.5971, 100.0, 0), +(@PATH, 10, -11452.7, -796.023, 15.2347, 100.0, 0), +(@PATH, 11, -11450.3, -784.211, 13.6405, 100.0, 0), +(@PATH, 12, -11449.7, -779.294, 12.8399, 100.0, 0), +(@PATH, 13, -11447.5, -768.826, 11.3146, 100.0, 0), +(@PATH, 14, -11444.9, -764.663, 11.0529, 100.0, 0), +(@PATH, 15, -11435.8, -758.959, 12.7023, 100.0, 0), +(@PATH, 16, -11431.2, -759.507, 13.1878, 100.0, 0), +(@PATH, 17, -11425.2, -766.578, 14.4956, 100.0, 0), +(@PATH, 18, -11422.4, -769.522, 14.863, 100.0, 0), +(@PATH, 19, -11419.7, -773.498, 14.9644, 100.0, 0), +(@PATH, 20, -11419.7, -776.526, 14.9644, 100.0, 0), +(@PATH, 21, -11421.8, -785.571, 14.9644, 100.0, 0), +(@PATH, 22, -11422.2, -793.419, 14.9644, 100.0, 0), +(@PATH, 23, -11421.0, -797.102, 14.9644, 100.0, 0), +(@PATH, 24, -11419.2, -799.609, 14.9644, 100.0, 0), +(@PATH, 25, -11414.3, -806.079, 14.9644, 100.0, 0), +(@PATH, 26, -11407.8, -809.522, 14.9644, 100.0, 0), +(@PATH, 27, -11404.6, -808.206, 14.9644, 100.0, 0), +(@PATH, 28, -11400.0, -799.352, 14.9644, 100.0, 0), +(@PATH, 29, -11401.2, -789.399, 15.0712, 100.0, 0), +(@PATH, 30, -11404.7, -783.437, 15.329, 100.0, 0), +(@PATH, 31, -11410.8, -778.298, 14.9644, 100.0, 0), +(@PATH, 32, -11420.2, -770.557, 14.9644, 100.0, 0), +(@PATH, 33, -11425.2, -764.284, 14.5938, 100.0, 0), +(@PATH, 34, -11435.1, -758.747, 12.6701, 100.0, 0), +(@PATH, 35, -11445.2, -763.558, 11.1757, 100.0, 0), +(@PATH, 36, -11448.0, -773.097, 11.9086, 100.0, 0), +(@PATH, 37, -11451.0, -788.477, 14.3249, 100.0, 0), +(@PATH, 38, -11453.8, -800.256, 15.4809, 100.0, 0), +(@PATH, 39, -11456.1, -812.229, 15.6798, 100.0, 0), +(@PATH, 40, -11457.8, -825.266, 15.5149, 100.0, 0); + + +/* Kurzen Witch Doctor - GUID 1618 */ + + +SET @NPC := 1618; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11525.8, -907.2, 25.5492, 100.0, 0), +(@PATH, 2, -11536.0, -900.974, 24.3921, 100.0, 0), +(@PATH, 3, -11538.7, -898.099, 24.3312, 100.0, 0), +(@PATH, 4, -11540.1, -894.369, 24.2184, 100.0, 0), +(@PATH, 5, -11540.0, -886.319, 24.1251, 100.0, 0), +(@PATH, 6, -11537.8, -878.628, 24.8087, 100.0, 0), +(@PATH, 7, -11533.4, -867.366, 25.1353, 100.0, 0), +(@PATH, 8, -11531.2, -864.73, 25.5804, 100.0, 0), +(@PATH, 9, -11530.2, -869.579, 25.147, 100.0, 0), +(@PATH, 10, -11537.8, -886.146, 24.1344, 100.0, 0), +(@PATH, 11, -11537.1, -890.117, 24.0356, 100.0, 0), +(@PATH, 12, -11524.0, -905.536, 25.6844, 100.0, 0), +(@PATH, 13, -11518.7, -911.427, 26.7439, 100.0, 0), +(@PATH, 14, -11505.6, -920.495, 26.0982, 100.0, 0), +(@PATH, 15, -11482.9, -930.127, 22.6249, 100.0, 0), +(@PATH, 16, -11475.3, -930.534, 21.9665, 100.0, 0), +(@PATH, 17, -11471.5, -929.165, 21.5835, 100.0, 0), +(@PATH, 18, -11492.3, -918.769, 25.008, 100.0, 0), +(@PATH, 19, -11499.8, -916.364, 26.3152, 100.0, 0), +(@PATH, 20, -11503.8, -915.391, 26.7866, 100.0, 0), +(@PATH, 21, -11511.5, -913.971, 26.8268, 100.0, 0), +(@PATH, 22, -11519.0, -910.987, 26.5973, 100.0, 0); + + +/* Skullsplitter Scout - GUID 1638 */ + + +SET @NPC := 1638; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12916.2, `position_y` = -859.78, `position_z` = 71.5787, `orientation` = 3.46674 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12916.2, -859.78, 71.5787, 100.0, 0), +(@PATH, 2, -12920.0, -858.451, 71.5586, 100.0, 0), +(@PATH, 3, -12923.5, -856.786, 71.0654, 100.0, 0), +(@PATH, 4, -12927.2, -846.474, 67.2017, 100.0, 0), +(@PATH, 5, -12928.3, -831.7, 60.6419, 100.0, 0), +(@PATH, 6, -12929.0, -812.085, 55.9197, 100.0, 0), +(@PATH, 7, -12921.8, -798.986, 54.4089, 100.0, 0), +(@PATH, 8, -12911.4, -787.026, 52.3732, 100.0, 0), +(@PATH, 9, -12909.7, -772.18, 51.9389, 100.0, 0), +(@PATH, 10, -12917.2, -763.856, 53.0313, 100.0, 0), +(@PATH, 11, -12931.9, -765.301, 54.9675, 100.0, 0), +(@PATH, 12, -12947.3, -770.293, 56.1804, 100.0, 0), +(@PATH, 13, -12987.3, -774.836, 57.4332, 100.0, 0), +(@PATH, 14, -12993.1, -775.34, 59.2078, 100.0, 0), +(@PATH, 15, -13024.0, -780.168, 70.933, 100.0, 0), +(@PATH, 16, -12996.8, -775.957, 60.3381, 100.0, 0), +(@PATH, 17, -12957.1, -772.305, 55.989, 100.0, 0), +(@PATH, 18, -12941.5, -768.347, 56.0734, 100.0, 0), +(@PATH, 19, -12922.2, -762.436, 53.9582, 100.0, 0), +(@PATH, 20, -12915.2, -765.063, 52.5908, 100.0, 0), +(@PATH, 21, -12908.6, -778.248, 52.1807, 100.0, 0), +(@PATH, 22, -12915.2, -791.527, 53.2577, 100.0, 0), +(@PATH, 23, -12925.9, -803.167, 55.1184, 100.0, 0), +(@PATH, 24, -12928.7, -825.902, 58.3814, 100.0, 0), +(@PATH, 25, -12927.8, -837.123, 62.9437, 100.0, 0), +(@PATH, 26, -12927.1, -848.177, 67.923, 100.0, 0), +(@PATH, 27, -12924.8, -855.036, 70.4717, 100.0, 0); + +/* Murkgill Hunter - GUID 1851 */ + + +SET @NPC := 1851; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12054.2, -33.334, 16.0184, 100.0, 30000), +(@PATH, 2, -12041.9, -36.6851, 16.1506, 100.0, 0), +(@PATH, 3, -12029.2, -38.028, 17.605, 100.0, 0), +(@PATH, 4, -12020.4, -46.938, 17.1601, 100.0, 0), +(@PATH, 5, -12018.7, -70.6209, 26.0797, 100.0, 0), +(@PATH, 6, -12020.9, -103.213, 39.8013, 100.0, 30000), +(@PATH, 7, -12019.8, -92.5357, 35.52, 100.0, 0), +(@PATH, 8, -12019.0, -68.9045, 25.7092, 100.0, 0), +(@PATH, 9, -12019.1, -57.1393, 21.2325, 100.0, 0), +(@PATH, 10, -12018.8, -45.067, 16.4489, 100.0, 0), +(@PATH, 11, -12028.8, -38.0676, 17.6818, 100.0, 0); + + +/* Bloodscalp Hunter - GUID 1927 */ + + +SET @NPC := 1927; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11648.0, 564.524, 49.8145, 100.0, 40000), +(@PATH, 2, -11647.8, 560.431, 49.7986, 100.0, 0), +(@PATH, 3, -11648.5, 556.272, 49.6992, 100.0, 0), +(@PATH, 4, -11649.2, 552.125, 49.397, 100.0, 0), +(@PATH, 5, -11649.8, 548.389, 48.0, 100.0, 0), +(@PATH, 6, -11650.2, 544.457, 48.1196, 100.0, 0), +(@PATH, 7, -11650.7, 539.54, 47.1855, 100.0, 0), +(@PATH, 8, -11651.0, 536.556, 46.675, 100.0, 0), +(@PATH, 9, -11651.4, 532.614, 45.7645, 100.0, 0), +(@PATH, 10, -11651.6, 527.973, 44.6754, 100.0, 0), +(@PATH, 11, -11651.6, 524.029, 43.888, 100.0, 0), +(@PATH, 12, -11651.6, 521.04, 43.5072, 100.0, 0), +(@PATH, 13, -11651.6, 516.046, 42.8766, 100.0, 0), +(@PATH, 14, -11651.7, 512.981, 42.8064, 100.0, 0), +(@PATH, 15, -11651.7, 508.924, 42.7559, 100.0, 0), +(@PATH, 16, -11651.7, 504.784, 43.0178, 100.0, 0), +(@PATH, 17, -11652.9, 502.812, 42.9839, 100.0, 0), +(@PATH, 18, -11652.2, 497.106, 42.8397, 100.0, 0), +(@PATH, 19, -11652.2, 491.608, 42.7576, 100.0, 0), +(@PATH, 20, -11652.3, 488.555, 42.7559, 100.0, 0), +(@PATH, 21, -11652.4, 484.496, 42.7559, 100.0, 0), +(@PATH, 22, -11652.6, 480.43, 42.7559, 100.0, 0), +(@PATH, 23, -11652.7, 476.371, 42.7559, 100.0, 0), +(@PATH, 24, -11652.8, 473.628, 42.7559, 100.0, 0), +(@PATH, 25, -11652.9, 469.661, 43.0491, 100.0, 0), +(@PATH, 26, -11653.0, 465.456, 42.9589, 100.0, 0), +(@PATH, 27, -11653.0, 461.189, 42.7559, 100.0, 0), +(@PATH, 28, -11653.1, 456.904, 42.7559, 100.0, 0), +(@PATH, 29, -11653.1, 452.61, 42.7559, 100.0, 0), +(@PATH, 30, -11653.2, 448.313, 42.7559, 100.0, 0), +(@PATH, 31, -11653.3, 444.023, 42.7559, 100.0, 0), +(@PATH, 32, -11653.5, 439.801, 42.7559, 100.0, 0), +(@PATH, 33, -11653.8, 435.711, 42.7559, 100.0, 0), +(@PATH, 34, -11654.2, 431.638, 42.7831, 100.0, 0), +(@PATH, 35, -11654.5, 427.607, 42.8965, 100.0, 0), +(@PATH, 36, -11654.6, 423.805, 43.0327, 100.0, 0), +(@PATH, 37, -11654.5, 419.786, 43.0559, 100.0, 0), +(@PATH, 38, -11654.5, 415.733, 43.1832, 100.0, 0), +(@PATH, 39, -11654.4, 411.67, 43.1231, 100.0, 0), +(@PATH, 40, -11654.3, 407.634, 43.0792, 100.0, 0), +(@PATH, 41, -11654.2, 403.717, 42.7947, 100.0, 0), +(@PATH, 42, -11653.9, 399.67, 42.7345, 100.0, 0), +(@PATH, 43, -11653.5, 395.589, 42.7345, 100.0, 0), +(@PATH, 44, -11653.2, 391.578, 42.7345, 100.0, 0), +(@PATH, 45, -11652.9, 387.553, 42.7345, 100.0, 0), +(@PATH, 46, -11652.5, 383.492, 42.7345, 100.0, 0), +(@PATH, 47, -11652.1, 378.423, 42.7345, 100.0, 0), +(@PATH, 48, -11651.8, 375.373, 42.7345, 100.0, 0), +(@PATH, 49, -11653.9, 370.067, 42.707, 100.0, 0), +(@PATH, 50, -11657.3, 365.925, 42.7876, 100.0, 0), +(@PATH, 51, -11659.0, 365.541, 42.8716, 100.0, 0), +(@PATH, 52, -11662.8, 361.402, 42.436, 100.0, 0), +(@PATH, 53, -11666.2, 358.794, 41.7298, 100.0, 0), +(@PATH, 54, -11670.2, 355.928, 40.5589, 100.0, 0), +(@PATH, 55, -11672.8, 353.61, 39.6698, 100.0, 0), +(@PATH, 56, -11674.9, 351.64, 38.8568, 100.0, 0), +(@PATH, 57, -11677.7, 348.904, 37.8301, 100.0, 0), +(@PATH, 58, -11681.2, 345.445, 36.456, 100.0, 0), +(@PATH, 59, -11683.9, 342.72, 35.4498, 100.0, 0), +(@PATH, 60, -11686.0, 340.67, 34.6877, 100.0, 0), +(@PATH, 61, -11688.8, 337.898, 34.0637, 100.0, 0), +(@PATH, 62, -11691.5, 335.087, 33.1613, 100.0, 0), +(@PATH, 63, -11694.3, 332.267, 32.2702, 100.0, 0), +(@PATH, 64, -11697.7, 328.724, 31.2628, 100.0, 0), +(@PATH, 65, -11699.7, 326.711, 30.1797, 100.0, 0), +(@PATH, 66, -11702.2, 324.11, 28.2918, 100.0, 0), +(@PATH, 67, -11705.0, 321.28, 27.2269, 100.0, 0), +(@PATH, 68, -11707.7, 318.422, 26.4123, 100.0, 0), +(@PATH, 69, -11710.4, 315.51, 25.5946, 100.0, 0), +(@PATH, 70, -11713.6, 312.025, 23.8492, 100.0, 0), +(@PATH, 71, -11715.6, 309.868, 22.6728, 100.0, 0), +(@PATH, 72, -11718.3, 306.991, 21.9164, 100.0, 0), +(@PATH, 73, -11721.0, 304.067, 20.9047, 100.0, 0), +(@PATH, 74, -11724.3, 300.95, 19.7354, 100.0, 0), +(@PATH, 75, -11727.8, 298.682, 18.9097, 100.0, 0), +(@PATH, 76, -11731.7, 296.371, 19.1415, 100.0, 0), +(@PATH, 77, -11732.3, 295.979, 19.26, 100.0, 40000), +(@PATH, 78, -11734.2, 300.108, 19.5989, 100.0, 0), +(@PATH, 79, -11731.9, 302.896, 19.3462, 100.0, 0), +(@PATH, 80, -11729.2, 305.239, 19.9795, 100.0, 0), +(@PATH, 81, -11726.5, 307.823, 20.9691, 100.0, 0), +(@PATH, 82, -11722.9, 311.284, 22.014, 100.0, 0), +(@PATH, 83, -11720.8, 313.352, 22.7735, 100.0, 0), +(@PATH, 84, -11718.0, 316.049, 24.1252, 100.0, 0), +(@PATH, 85, -11715.2, 318.693, 25.1061, 100.0, 0), +(@PATH, 86, -11712.3, 321.438, 25.6473, 100.0, 0), +(@PATH, 87, -11709.5, 324.164, 26.6287, 100.0, 0), +(@PATH, 88, -11707.8, 326.698, 27.4238, 100.0, 0), +(@PATH, 89, -11706.1, 329.927, 28.5408, 100.0, 0), +(@PATH, 90, -11702.9, 333.442, 30.0031, 100.0, 0), +(@PATH, 91, -11699.7, 336.032, 31.1945, 100.0, 0), +(@PATH, 92, -11696.4, 338.913, 32.2855, 100.0, 0), +(@PATH, 93, -11694.3, 341.014, 33.1531, 100.0, 0), +(@PATH, 94, -11691.6, 343.856, 34.2689, 100.0, 0), +(@PATH, 95, -11689.0, 346.661, 35.2067, 100.0, 0), +(@PATH, 96, -11686.3, 349.501, 36.255, 100.0, 0), +(@PATH, 97, -11683.7, 352.329, 37.8395, 100.0, 0), +(@PATH, 98, -11681.0, 355.185, 39.0162, 100.0, 0), +(@PATH, 99, -11678.4, 358.032, 39.3958, 100.0, 0), +(@PATH, 100, -11675.6, 360.975, 40.316, 100.0, 0), +(@PATH, 101, -11672.9, 363.794, 41.3899, 100.0, 0), +(@PATH, 102, -11669.4, 367.381, 42.4106, 100.0, 0), +(@PATH, 103, -11665.8, 368.851, 43.0945, 100.0, 0), +(@PATH, 104, -11660.4, 370.641, 43.3318, 100.0, 0), +(@PATH, 105, -11658.3, 371.759, 43.1611, 100.0, 0), +(@PATH, 106, -11656.9, 373.054, 42.9923, 100.0, 0), +(@PATH, 107, -11655.7, 376.154, 42.9468, 100.0, 0), +(@PATH, 108, -11655.4, 379.061, 42.903, 100.0, 0), +(@PATH, 109, -11655.9, 382.869, 43.0394, 100.0, 0), +(@PATH, 110, -11656.6, 386.823, 43.1893, 100.0, 0), +(@PATH, 111, -11657.3, 390.811, 43.0623, 100.0, 0), +(@PATH, 112, -11658.0, 394.815, 42.7811, 100.0, 0), +(@PATH, 113, -11658.7, 398.825, 42.7957, 100.0, 0), +(@PATH, 114, -11659.2, 403.144, 42.7511, 100.0, 0), +(@PATH, 115, -11659.5, 407.273, 42.7568, 100.0, 0), +(@PATH, 116, -11659.7, 411.342, 42.7902, 100.0, 0), +(@PATH, 117, -11659.9, 415.4, 42.7902, 100.0, 0), +(@PATH, 118, -11660.0, 419.707, 42.8045, 100.0, 0), +(@PATH, 119, -11659.8, 424.855, 42.7902, 100.0, 0), +(@PATH, 120, -11659.6, 427.898, 42.7589, 100.0, 0), +(@PATH, 121, -11659.3, 432.915, 42.7902, 100.0, 0), +(@PATH, 122, -11658.0, 437.377, 42.7631, 100.0, 0), +(@PATH, 123, -11657.1, 440.371, 42.7559, 100.0, 0), +(@PATH, 124, -11655.8, 444.3, 42.7559, 100.0, 0), +(@PATH, 125, -11654.0, 448.651, 42.7559, 100.0, 0), +(@PATH, 126, -11651.3, 453.082, 42.7559, 100.0, 0), +(@PATH, 127, -11650.7, 453.953, 42.7559, 100.0, 0), +(@PATH, 128, -11649.9, 457.277, 42.7559, 100.0, 0), +(@PATH, 129, -11648.0, 460.818, 42.7559, 100.0, 0), +(@PATH, 130, -11647.1, 463.574, 42.9979, 100.0, 0), +(@PATH, 131, -11646.3, 468.321, 43.1204, 100.0, 0), +(@PATH, 132, -11645.9, 471.365, 42.882, 100.0, 0), +(@PATH, 133, -11645.5, 474.771, 42.7819, 100.0, 0), +(@PATH, 134, -11645.8, 478.676, 42.6096, 100.0, 0), +(@PATH, 135, -11646.3, 483.7, 42.8797, 100.0, 0), +(@PATH, 136, -11646.3, 487.085, 42.8063, 100.0, 0), +(@PATH, 137, -11646.0, 491.299, 42.7824, 100.0, 0), +(@PATH, 138, -11645.9, 495.175, 42.6956, 100.0, 0), +(@PATH, 139, -11645.9, 499.328, 43.1499, 100.0, 0), +(@PATH, 140, -11646.3, 503.595, 44.4344, 100.0, 0), +(@PATH, 141, -11644.8, 503.342, 42.9468, 100.0, 0), +(@PATH, 142, -11644.3, 507.6, 42.7559, 100.0, 0), +(@PATH, 143, -11646.4, 513.283, 42.8243, 100.0, 0), +(@PATH, 144, -11647.7, 518.562, 43.1857, 100.0, 0), +(@PATH, 145, -11648.4, 522.808, 43.6831, 100.0, 0), +(@PATH, 146, -11649.0, 526.799, 44.3904, 100.0, 0), +(@PATH, 147, -11649.6, 530.736, 45.252, 100.0, 0), +(@PATH, 148, -11650.2, 534.624, 46.157, 100.0, 0), +(@PATH, 149, -11650.8, 538.507, 47.1561, 100.0, 0), +(@PATH, 150, -11651.4, 542.767, 47.8838, 100.0, 0), +(@PATH, 151, -11651.6, 546.922, 48.6415, 100.0, 0), +(@PATH, 152, -11651.7, 550.947, 49.2409, 100.0, 0), +(@PATH, 153, -11651.8, 554.944, 49.7633, 100.0, 0), +(@PATH, 154, -11651.9, 560.0, 49.9236, 100.0, 0), +(@PATH, 155, -11651.9, 564.056, 49.9618, 100.0, 0), +(@PATH, 156, -11652.0, 566.686, 49.8779, 100.0, 0), +(@PATH, 157, -11652.0, 567.684, 49.9407, 100.0, 0); + + +/* Bloodscalp Witch Doctor - GUID 1940 */ + + +SET @NPC := 1940; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11545.3, 674.327, 61.1382, 100.0, 0), +(@PATH, 2, -11545.7, 670.391, 60.3692, 100.0, 0), +(@PATH, 3, -11550.7, 659.512, 59.8318, 100.0, 0), +(@PATH, 4, -11557.5, 655.708, 59.5337, 100.0, 0), +(@PATH, 5, -11575.1, 655.162, 59.5185, 100.0, 30000), +(@PATH, 6, -11570.0, 654.206, 59.4592, 100.0, 0), +(@PATH, 7, -11558.3, 656.596, 59.5236, 100.0, 0), +(@PATH, 8, -11551.2, 660.466, 59.9162, 100.0, 0), +(@PATH, 9, -11546.3, 666.331, 60.2032, 100.0, 0); + + +/* Bloodscalp Headhunter - GUID 2057 */ + + +SET @NPC := 2057; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11608.8, 769.426, 40.1039, 100.0, 0), +(@PATH, 2, -11604.5, 769.636, 40.1511, 100.0, 0), +(@PATH, 3, -11600.3, 769.653, 40.1703, 100.0, 0), +(@PATH, 4, -11596.2, 769.615, 40.165, 100.0, 0), +(@PATH, 5, -11592.2, 769.566, 40.1662, 100.0, 0), +(@PATH, 6, -11588.1, 769.514, 40.1614, 100.0, 0), +(@PATH, 7, -11584.1, 769.489, 40.1596, 100.0, 0), +(@PATH, 8, -11580.0, 769.483, 40.4032, 100.0, 0), +(@PATH, 9, -11575.0, 769.482, 40.1663, 100.0, 0), +(@PATH, 10, -11571.9, 769.481, 40.1719, 100.0, 0), +(@PATH, 11, -11567.7, 769.481, 39.9198, 100.0, 0), +(@PATH, 12, -11563.0, 768.505, 39.8667, 100.0, 0), +(@PATH, 13, -11558.7, 767.32, 40.1099, 100.0, 0), +(@PATH, 14, -11557.2, 766.9, 40.2003, 100.0, 0), +(@PATH, 15, -11556.8, 766.759, 40.2482, 100.0, 0), +(@PATH, 16, -11556.8, 766.759, 40.2482, 100.0, 0), +(@PATH, 17, -11561.1, 762.569, 39.9823, 100.0, 0), +(@PATH, 18, -11565.4, 761.956, 39.8573, 100.0, 0), +(@PATH, 19, -11570.5, 762.257, 39.8573, 100.0, 0), +(@PATH, 20, -11573.5, 762.606, 39.8573, 100.0, 0), +(@PATH, 21, -11577.6, 763.071, 39.8573, 100.0, 0), +(@PATH, 22, -11581.3, 763.443, 39.8573, 100.0, 0), +(@PATH, 23, -11585.3, 763.458, 39.8573, 100.0, 0), +(@PATH, 24, -11589.3, 763.397, 39.8573, 100.0, 0), +(@PATH, 25, -11593.4, 763.32, 39.8573, 100.0, 0), +(@PATH, 26, -11597.4, 763.221, 39.8573, 100.0, 0), +(@PATH, 27, -11602.5, 763.083, 39.8573, 100.0, 0), +(@PATH, 28, -11606.5, 762.971, 39.8573, 100.0, 0), +(@PATH, 29, -11609.6, 762.887, 39.8573, 100.0, 0), +(@PATH, 30, -11613.6, 762.774, 39.8573, 100.0, 0), +(@PATH, 31, -11616.6, 762.896, 39.8573, 100.0, 0), +(@PATH, 32, -11620.8, 760.989, 39.8573, 100.0, 0), +(@PATH, 33, -11622.3, 759.653, 39.8573, 100.0, 0), +(@PATH, 34, -11624.8, 756.139, 39.8573, 100.0, 0), +(@PATH, 35, -11625.8, 753.763, 39.8573, 100.0, 0), +(@PATH, 36, -11627.0, 750.142, 39.8573, 100.0, 0), +(@PATH, 37, -11628.5, 745.343, 39.8573, 100.0, 0), +(@PATH, 38, -11629.0, 742.72, 39.8573, 100.0, 0), +(@PATH, 39, -11629.4, 738.875, 39.8573, 100.0, 0), +(@PATH, 40, -11630.0, 733.882, 39.8573, 100.0, 0), +(@PATH, 41, -11630.3, 730.119, 39.8573, 100.0, 0), +(@PATH, 42, -11630.3, 727.101, 39.8573, 100.0, 0), +(@PATH, 43, -11630.3, 722.077, 39.8573, 100.0, 0), +(@PATH, 44, -11630.2, 721.069, 39.8573, 100.0, 0), +(@PATH, 45, -11630.2, 721.069, 39.8573, 100.0, 0), +(@PATH, 46, -11634.9, 723.328, 39.8573, 100.0, 0), +(@PATH, 47, -11635.8, 727.426, 39.8573, 100.0, 0), +(@PATH, 48, -11635.9, 731.902, 39.8573, 100.0, 0), +(@PATH, 49, -11635.8, 737.557, 39.8573, 100.0, 0), +(@PATH, 50, -11635.2, 740.878, 39.8573, 100.0, 0), +(@PATH, 51, -11634.0, 746.036, 39.8573, 100.0, 0), +(@PATH, 52, -11633.2, 748.997, 39.8573, 100.0, 0), +(@PATH, 53, -11632.2, 752.886, 39.8573, 100.0, 0), +(@PATH, 54, -11629.1, 757.056, 39.8573, 100.0, 0), +(@PATH, 55, -11626.3, 760.267, 39.8573, 100.0, 0), +(@PATH, 56, -11622.8, 763.479, 39.8573, 100.0, 0), +(@PATH, 57, -11618.5, 766.328, 39.8573, 100.0, 0), +(@PATH, 58, -11615.8, 767.863, 40.0108, 100.0, 0), +(@PATH, 59, -11610.9, 769.143, 40.1048, 100.0, 0); + + +/* Crystal Spine Basilisk - GUID 2106 */ + + +SET @NPC := 2106; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11886.4, 717.058, 26.5422, 100.0, 0), +(@PATH, 2, -11889.8, 704.634, 23.9849, 100.0, 0), +(@PATH, 3, -11892.2, 669.8, 23.5359, 100.0, 0), +(@PATH, 4, -11891.5, 647.343, 24.5366, 100.0, 0), +(@PATH, 5, -11896.0, 636.136, 27.0148, 100.0, 0), +(@PATH, 6, -11907.6, 623.033, 23.0755, 100.0, 0), +(@PATH, 7, -11915.2, 612.536, 25.759, 100.0, 0), +(@PATH, 8, -11922.8, 590.685, 25.8638, 100.0, 0), +(@PATH, 9, -11938.0, 563.534, 23.2595, 100.0, 0), +(@PATH, 10, -11953.3, 530.56, 25.0763, 100.0, 0), +(@PATH, 11, -11955.2, 460.852, 25.7007, 100.0, 0), +(@PATH, 12, -11959.6, 503.932, 23.0031, 100.0, 0), +(@PATH, 13, -11946.6, 545.659, 26.1063, 100.0, 0), +(@PATH, 14, -11929.7, 577.678, 25.3999, 100.0, 0), +(@PATH, 15, -11918.2, 601.733, 25.0447, 100.0, 0), +(@PATH, 16, -11901.7, 628.938, 25.7161, 100.0, 0), +(@PATH, 17, -11891.9, 659.596, 23.8133, 100.0, 0), +(@PATH, 18, -11891.1, 687.014, 27.5948, 100.0, 0); + + +/* Bloodscalp Witch Doctor - GUID 2111 */ + + +SET @NPC := 2111; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11562.7, 730.125, 59.5396, 100.0, 0), +(@PATH, 2, -11570.7, 730.073, 59.6153, 100.0, 0), +(@PATH, 3, -11580.2, 734.024, 60.546, 100.0, 10000), +(@PATH, 4, -11573.3, 724.686, 59.4631, 100.0, 0), +(@PATH, 5, -11573.5, 709.302, 59.52, 100.0, 0), +(@PATH, 6, -11570.6, 685.584, 59.4153, 100.0, 30000), +(@PATH, 7, -11572.4, 696.983, 59.5091, 100.0, 0), +(@PATH, 8, -11568.7, 712.694, 59.4357, 100.0, 0), +(@PATH, 9, -11559.2, 719.229, 59.6381, 100.0, 0), +(@PATH, 10, -11547.6, 722.859, 59.4914, 100.0, 0), +(@PATH, 11, -11529.7, 724.632, 59.4292, 100.0, 20000), +(@PATH, 12, -11537.0, 725.983, 59.4205, 100.0, 0), +(@PATH, 13, -11544.9, 727.757, 59.4597, 100.0, 0), +(@PATH, 14, -11556.8, 730.024, 59.5396, 100.0, 0); + + +/* Murkgill Forager - GUID 2135 */ + + +SET @NPC := 2135; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12170.2, -88.0604, 17.249, 100.0, 0), +(@PATH, 2, -12165.1, -81.9777, 17.2691, 100.0, 0), +(@PATH, 3, -12157.5, -69.063, 11.8148, 100.0, 0), +(@PATH, 4, -12160.6, -76.0127, 14.3349, 100.0, 0), +(@PATH, 5, -12164.9, -81.8216, 17.4324, 100.0, 0), +(@PATH, 6, -12170.0, -87.7733, 17.1147, 100.0, 0), +(@PATH, 7, -12173.8, -103.4, 16.2802, 100.0, 0), +(@PATH, 8, -12168.5, -113.654, 17.1745, 100.0, 0), +(@PATH, 9, -12158.0, -125.243, 20.5983, 100.0, 0), +(@PATH, 10, -12151.8, -127.66, 24.9076, 100.0, 0), +(@PATH, 11, -12145.3, -130.455, 27.961, 100.0, 0), +(@PATH, 12, -12129.4, -148.657, 30.9601, 100.0, 0), +(@PATH, 13, -12139.8, -136.46, 29.1459, 100.0, 0), +(@PATH, 14, -12145.2, -130.556, 27.9364, 100.0, 0), +(@PATH, 15, -12154.8, -126.979, 22.5654, 100.0, 0), +(@PATH, 16, -12163.2, -120.148, 18.017, 100.0, 0), +(@PATH, 17, -12172.9, -107.328, 16.2978, 100.0, 0), +(@PATH, 18, -12172.6, -95.7492, 16.5093, 100.0, 0); + + +/* Mosh'Ogg Witch Doctor - GUID 2154 */ + + +SET @NPC := 2154; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12438.5, -135.884, 15.6819, 100.0, 0), +(@PATH, 2, -12418.8, -141.168, 15.7094, 100.0, 0), +(@PATH, 3, -12398.9, -142.456, 15.069, 100.0, 0), +(@PATH, 4, -12383.2, -139.138, 16.1382, 100.0, 0), +(@PATH, 5, -12372.0, -142.367, 14.278, 100.0, 0), +(@PATH, 6, -12364.3, -144.696, 13.5537, 100.0, 0), +(@PATH, 7, -12355.8, -143.279, 14.693, 100.0, 0), +(@PATH, 8, -12359.6, -144.486, 13.7943, 100.0, 0), +(@PATH, 9, -12367.3, -143.865, 13.8607, 100.0, 0), +(@PATH, 10, -12378.6, -139.656, 15.4886, 100.0, 0), +(@PATH, 11, -12390.0, -141.361, 15.6118, 100.0, 0), +(@PATH, 12, -12410.0, -142.559, 16.1748, 100.0, 0), +(@PATH, 13, -12429.7, -138.05, 15.4561, 100.0, 0), +(@PATH, 14, -12441.4, -135.2, 16.3321, 100.0, 0), +(@PATH, 15, -12457.8, -134.572, 14.4629, 100.0, 0), +(@PATH, 16, -12449.9, -134.28, 16.0542, 100.0, 0); + + +/* Mosh'Ogg Brute - GUID 2155 */ + + +SET @NPC := 2155; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12475.5, -190.889, 14.2878, 100.0, 0), +(@PATH, 2, -12471.5, -191.324, 14.5416, 100.0, 0), +(@PATH, 3, -12463.6, -192.686, 15.3123, 100.0, 0), +(@PATH, 4, -12456.4, -196.422, 15.0029, 100.0, 0), +(@PATH, 5, -12449.4, -199.813, 16.3794, 100.0, 0), +(@PATH, 6, -12443.1, -209.414, 15.3023, 100.0, 0), +(@PATH, 7, -12432.6, -214.005, 16.0847, 100.0, 0), +(@PATH, 8, -12420.6, -215.562, 16.378, 100.0, 0), +(@PATH, 9, -12410.3, -206.036, 16.3801, 100.0, 0), +(@PATH, 10, -12409.4, -194.651, 16.5775, 100.0, 0), +(@PATH, 11, -12415.9, -173.969, 16.8835, 100.0, 0), +(@PATH, 12, -12424.2, -159.982, 15.4949, 100.0, 0), +(@PATH, 13, -12419.8, -166.768, 16.4295, 100.0, 0), +(@PATH, 14, -12411.4, -186.589, 16.8931, 100.0, 0), +(@PATH, 15, -12408.6, -198.403, 16.422, 100.0, 0), +(@PATH, 16, -12414.2, -212.919, 16.5111, 100.0, 0), +(@PATH, 17, -12424.5, -215.211, 16.2181, 100.0, 0), +(@PATH, 18, -12436.4, -213.185, 15.3668, 100.0, 0), +(@PATH, 19, -12448.0, -204.792, 17.6742, 100.0, 0), +(@PATH, 20, -12449.4, -199.831, 16.2408, 100.0, 0), +(@PATH, 21, -12456.4, -196.408, 15.1152, 100.0, 0); + + +/* Mosh'Ogg Witch Doctor - GUID 2162 */ + + +SET @NPC := 2162; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12477.3, -129.195, 13.7891, 100.0, 0), +(@PATH, 2, -12481.5, -144.761, 13.2097, 100.0, 0), +(@PATH, 3, -12481.4, -148.103, 13.5531, 100.0, 0), +(@PATH, 4, -12476.5, -154.439, 13.1955, 100.0, 0), +(@PATH, 5, -12463.1, -163.25, 13.4275, 100.0, 0), +(@PATH, 6, -12448.0, -151.766, 14.3379, 100.0, 0), +(@PATH, 7, -12456.9, -160.221, 14.1324, 100.0, 0), +(@PATH, 8, -12461.2, -164.22, 13.8286, 100.0, 0), +(@PATH, 9, -12468.4, -160.638, 12.8462, 100.0, 0), +(@PATH, 10, -12477.7, -153.147, 13.7378, 100.0, 0), +(@PATH, 11, -12480.2, -150.03, 13.624, 100.0, 0), +(@PATH, 12, -12478.3, -135.383, 13.5543, 100.0, 0), +(@PATH, 13, -12476.7, -123.372, 14.2928, 100.0, 0), +(@PATH, 14, -12476.0, -119.436, 14.3798, 100.0, 0), +(@PATH, 15, -12476.9, -106.308, 15.1983, 100.0, 0), +(@PATH, 16, -12479.3, -103.383, 15.5234, 100.0, 0), +(@PATH, 17, -12482.8, -101.421, 15.8404, 100.0, 0), +(@PATH, 18, -12492.5, -107.583, 14.9739, 100.0, 0), +(@PATH, 19, -12496.2, -114.926, 14.7215, 100.0, 0), +(@PATH, 20, -12490.1, -104.658, 15.305, 100.0, 0), +(@PATH, 21, -12487.1, -102.418, 15.5393, 100.0, 0), +(@PATH, 22, -12479.6, -103.21, 15.5062, 100.0, 0), +(@PATH, 23, -12475.6, -109.763, 14.8643, 100.0, 0), +(@PATH, 24, -12475.0, -117.186, 14.4726, 100.0, 0); + + +/* Bloodscalp Scout - GUID 2172 */ + + +SET @NPC := 2172; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11687.5, 573.412, 50.5574, 100.0, 0), +(@PATH, 2, -11686.9, 577.386, 50.7638, 100.0, 0), +(@PATH, 3, -11684.0, 583.898, 50.2638, 100.0, 0), +(@PATH, 4, -11673.0, 588.817, 50.3384, 100.0, 0), +(@PATH, 5, -11665.6, 588.813, 50.2833, 100.0, 0), +(@PATH, 6, -11662.6, 586.27, 50.2973, 100.0, 0), +(@PATH, 7, -11661.4, 582.65, 50.8436, 100.0, 0), +(@PATH, 8, -11666.1, 576.14, 51.5912, 100.0, 0), +(@PATH, 9, -11668.6, 564.386, 51.2208, 100.0, 0), +(@PATH, 10, -11669.1, 539.224, 50.8151, 100.0, 0), +(@PATH, 11, -11668.7, 555.487, 50.975, 100.0, 0), +(@PATH, 12, -11668.6, 567.611, 51.3136, 100.0, 0), +(@PATH, 13, -11666.6, 575.212, 51.7154, 100.0, 0), +(@PATH, 14, -11664.6, 578.724, 51.6153, 100.0, 0), +(@PATH, 15, -11662.1, 581.835, 51.0369, 100.0, 0), +(@PATH, 16, -11664.6, 588.207, 50.2437, 100.0, 0), +(@PATH, 17, -11675.7, 587.878, 50.208, 100.0, 0), +(@PATH, 18, -11683.1, 584.511, 50.4153, 100.0, 0), +(@PATH, 19, -11686.5, 582.386, 50.6139, 100.0, 0), +(@PATH, 20, -11688.4, 566.574, 49.8707, 100.0, 0), +(@PATH, 21, -11697.4, 561.774, 49.2944, 100.0, 0), +(@PATH, 22, -11703.1, 565.291, 49.6208, 100.0, 0), +(@PATH, 23, -11707.3, 572.148, 50.0693, 100.0, 0), +(@PATH, 24, -11712.5, 583.096, 50.0919, 100.0, 0), +(@PATH, 25, -11720.5, 598.784, 50.8159, 100.0, 0), +(@PATH, 26, -11715.0, 588.02, 50.123, 100.0, 0), +(@PATH, 27, -11711.3, 580.811, 50.1206, 100.0, 0), +(@PATH, 28, -11707.8, 573.521, 50.0692, 100.0, 0), +(@PATH, 29, -11701.5, 563.293, 49.3938, 100.0, 0), +(@PATH, 30, -11690.7, 562.863, 49.5584, 100.0, 0); + + +/* Bloodscalp Scout - GUID 2174 */ + + +SET @NPC := 2174; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11650.2, `position_y` = 616.899, `position_z` = 50.3042, `orientation` = 1.67383 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11650.2, 616.899, 50.3042, 100.0, 0), +(@PATH, 2, -11657.2, 621.042, 50.5979, 100.0, 0), +(@PATH, 3, -11668.3, 626.285, 50.2964, 100.0, 0), +(@PATH, 4, -11680.0, 636.904, 49.7819, 100.0, 0), +(@PATH, 5, -11690.9, 639.303, 49.311, 100.0, 0), +(@PATH, 6, -11691.8, 629.401, 50.2928, 100.0, 0), +(@PATH, 7, -11698.1, 616.096, 49.9239, 100.0, 0), +(@PATH, 8, -11730.1, 599.91, 50.3767, 100.0, 0), +(@PATH, 9, -11745.8, 596.134, 50.6429, 100.0, 0), +(@PATH, 10, -11753.9, 595.691, 51.3053, 100.0, 0), +(@PATH, 11, -11762.3, 599.841, 58.0965, 100.0, 0), +(@PATH, 12, -11768.0, 603.493, 62.3273, 100.0, 0), +(@PATH, 13, -11781.6, 603.359, 69.0334, 100.0, 0), +(@PATH, 14, -11774.3, 604.712, 65.8086, 100.0, 0), +(@PATH, 15, -11771.0, 604.588, 63.7455, 100.0, 0), +(@PATH, 16, -11759.7, 597.777, 54.9956, 100.0, 0), +(@PATH, 17, -11753.5, 595.697, 51.1528, 100.0, 0), +(@PATH, 18, -11737.4, 597.525, 50.3733, 100.0, 0), +(@PATH, 19, -11703.6, 611.221, 49.9859, 100.0, 0), +(@PATH, 20, -11695.4, 619.649, 50.1001, 100.0, 0), +(@PATH, 21, -11692.8, 637.087, 49.4544, 100.0, 0), +(@PATH, 22, -11686.5, 639.636, 49.4809, 100.0, 0), +(@PATH, 23, -11674.2, 631.017, 50.3015, 100.0, 0), +(@PATH, 24, -11664.2, 624.674, 50.5842, 100.0, 0); + + +/* Mosh'Ogg Brute - GUID 2185 */ + + +SET @NPC := 2185; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12525.7, `position_y` = -122.958, `position_z` = 13.0167, `orientation` = 0.47839 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12526.9, -99.9495, 14.6065, 100.0, 0), +(@PATH, 2, -12525.7, -122.958, 13.0167, 100.0, 0), +(@PATH, 3, -12519.4, -146.321, 12.9316, 100.0, 0), +(@PATH, 4, -12515.7, -157.862, 12.3428, 100.0, 0), +(@PATH, 5, -12512.4, -165.121, 12.3314, 100.0, 0), +(@PATH, 6, -12506.0, -167.422, 12.1423, 100.0, 0), +(@PATH, 7, -12498.4, -164.757, 12.3103, 100.0, 0), +(@PATH, 8, -12495.2, -162.287, 12.6042, 100.0, 0), +(@PATH, 9, -12493.1, -158.906, 13.5122, 100.0, 0), +(@PATH, 10, -12501.4, -151.252, 13.1164, 100.0, 0), +(@PATH, 11, -12507.2, -152.815, 14.4814, 100.0, 0), +(@PATH, 12, -12512.6, -150.133, 13.1276, 100.0, 0), +(@PATH, 13, -12510.5, -138.43, 14.2526, 100.0, 0), +(@PATH, 14, -12511.6, -142.366, 14.0486, 100.0, 0), +(@PATH, 15, -12511.7, -146.148, 13.606, 100.0, 0), +(@PATH, 16, -12507.2, -153.309, 15.0302, 100.0, 0), +(@PATH, 17, -12499.9, -152.067, 13.1053, 100.0, 0), +(@PATH, 18, -12496.2, -153.971, 13.0795, 100.0, 0), +(@PATH, 19, -12493.8, -156.949, 13.5318, 100.0, 0), +(@PATH, 20, -12496.8, -163.495, 12.3442, 100.0, 0), +(@PATH, 21, -12507.6, -167.71, 12.1275, 100.0, 0), +(@PATH, 22, -12511.0, -166.807, 12.2219, 100.0, 0), +(@PATH, 23, -12516.2, -156.193, 12.5272, 100.0, 0), +(@PATH, 24, -12523.7, -133.207, 12.7117, 100.0, 0), +(@PATH, 25, -12527.1, -108.892, 13.8817, 100.0, 0), +(@PATH, 26, -12524.3, -85.9528, 15.5438, 100.0, 0), +(@PATH, 27, -12534.1, -73.0746, 15.8355, 100.0, 0), +(@PATH, 28, -12536.7, -70.4791, 16.289, 100.0, 0), +(@PATH, 29, -12538.5, -69.7102, 16.3968, 100.0, 0), +(@PATH, 30, -12527.9, -81.1885, 15.4492, 100.0, 0); + + +/* Zanzil Zombie - GUID 2221 */ + + +SET @NPC := 2221; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -13377.3, `position_y` = 5.05827, `position_z` = 21.7227, `orientation` = 2.29184 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -13377.3, 5.05827, 21.7227, 100.0, 0), +(@PATH, 2, -13372.5, -0.984485, 21.9685, 100.0, 30000), +(@PATH, 3, -13374.5, 2.3282, 21.8528, 100.0, 0), +(@PATH, 4, -13377.9, 9.54522, 21.3316, 100.0, 0), +(@PATH, 5, -13380.4, 17.2275, 20.9011, 100.0, 10000), +(@PATH, 6, -13381.8, 29.1661, 21.1173, 100.0, 0), +(@PATH, 7, -13380.1, 43.3045, 20.5878, 100.0, 0), +(@PATH, 8, -13380.0, 35.1695, 20.7873, 100.0, 0), +(@PATH, 9, -13380.5, 22.9977, 20.8178, 100.0, 0), +(@PATH, 10, -13379.7, 15.0227, 20.9821, 100.0, 0), +(@PATH, 11, -13377.8, 7.14262, 21.5172, 100.0, 0); + + +/* Bloodscalp Headhunter - GUID 2237 */ + + +SET @NPC := 2237; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11621.5, 705.35, 42.2621, 100.0, 30000), +(@PATH, 2, -11622.0, 694.861, 44.9747, 100.0, 0), +(@PATH, 3, -11620.3, 679.686, 50.1854, 100.0, 0), +(@PATH, 4, -11619.4, 672.305, 52.6952, 100.0, 0), +(@PATH, 5, -11618.0, 660.756, 56.0987, 100.0, 0), +(@PATH, 6, -11612.3, 651.515, 59.2639, 100.0, 0), +(@PATH, 7, -11600.9, 649.409, 59.6191, 100.0, 0), +(@PATH, 8, -11597.0, 648.972, 59.8419, 100.0, 0), +(@PATH, 9, -11590.8, 649.036, 59.5839, 100.0, 0), +(@PATH, 10, -11586.6, 642.039, 60.3607, 100.0, 30000), +(@PATH, 11, -11587.6, 645.396, 59.8757, 100.0, 0), +(@PATH, 12, -11593.9, 649.28, 59.5355, 100.0, 0), +(@PATH, 13, -11601.6, 649.458, 59.4179, 100.0, 0), +(@PATH, 14, -11610.0, 649.643, 59.2971, 100.0, 0), +(@PATH, 15, -11614.1, 650.521, 59.2089, 100.0, 0), +(@PATH, 16, -11619.0, 666.142, 54.3825, 100.0, 0), +(@PATH, 17, -11619.6, 673.263, 52.5111, 100.0, 0), +(@PATH, 18, -11621.0, 688.394, 47.0331, 100.0, 0); + + +/* Private Thorsen - GUID 2243 */ + + +SET @NPC := 2243; +SET @PATH := @NPC * 10; + +UPDATE `creature_addon` set `path_id` = @PATH WHERE `guid` = @NPC; +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11313.9, -202.766, 75.576, 5.5676, 1700000), +(@PATH, 2, -11313.9, -202.766, 75.576, 5.5676, 0), +(@PATH, 3, -11321.7, -205.85, 75.4398, 100.0, 0), +(@PATH, 4, -11326.7, -216.63, 76.3375, 100.0, 0), +(@PATH, 5, -11331.0, -223.29, 75.2301, 100.0, 0), +(@PATH, 6, -11339.5, -222.598, 75.1477, 100.0, 0), +(@PATH, 7, -11351.3, -212.923, 75.2968, 100.0, 0), +(@PATH, 8, -11361.9, -212.078, 75.2968, 100.0, 0), +(@PATH, 9, -11374.4, -217.351, 75.2161, 100.0, 0), +(@PATH, 10, -11379.1, -227.022, 73.4353, 100.0, 0), +(@PATH, 11, -11379.4, -239.568, 67.9693, 100.0, 0), +(@PATH, 12, -11382.1, -251.993, 64.5292, 100.0, 0), +(@PATH, 13, -11384.7, -267.21, 60.9735, 100.0, 0), +(@PATH, 14, -11389.4, -273.725, 59.7828, 100.0, 500), +(@PATH, 15, -11421.5, -287.48, 52.1968, 100.0, 0), +(@PATH, 16, -11441.1, -287.254, 45.9617, 100.0, 0), +(@PATH, 17, -11456.1, -287.166, 41.4507, 100.0, 0), +(@PATH, 18, -11472.5, -288.005, 37.0786, 100.0, 0), +(@PATH, 19, -11491.2, -299.717, 35.798, 100.0, 0), +(@PATH, 20, -11510.9, -317.675, 35.8094, 100.0, 0), +(@PATH, 21, -11521.4, -323.755, 35.8094, 100.0, 0), +(@PATH, 22, -11528.3, -335.951, 36.9253, 100.0, 0), +(@PATH, 23, -11527.6, -353.22, 37.7493, 100.0, 30000), +(@PATH, 24, -11527.6, -353.22, 37.7493, 4.67, 180000), +(@PATH, 25, -11527.6, -353.22, 37.7493, 4.67, 1000), +(@PATH, 26, -11521.5, -328.624, 36.0411, 100.0, 0), +(@PATH, 27, -11497.7, -306.014, 35.7996, 100.0, 0), +(@PATH, 28, -11473.7, -289.043, 36.9186, 100.0, 0), +(@PATH, 29, -11447.1, -287.478, 44.0555, 100.0, 0), +(@PATH, 30, -11415.6, -287.884, 53.9915, 100.0, 0), +(@PATH, 31, -11394.3, -285.5, 58.7721, 100.0, 0), +(@PATH, 32, -11384.7, -257.563, 62.7445, 100.0, 500), +(@PATH, 33, -11382.7, -245.982, 65.8541, 100.0, 0), +(@PATH, 34, -11382.5, -237.982, 68.5594, 100.0, 0), +(@PATH, 35, -11381.8, -230.669, 71.8558, 100.0, 0), +(@PATH, 36, -11380.0, -225.222, 74.0057, 100.0, 0), +(@PATH, 37, -11376.7, -220.913, 75.0584, 100.0, 0), +(@PATH, 38, -11372.0, -214.515, 75.3274, 100.0, 0), +(@PATH, 39, -11364.8, -211.369, 75.2968, 100.0, 0), +(@PATH, 40, -11358.4, -210.313, 75.2968, 100.0, 0), +(@PATH, 41, -11352.7, -210.88, 75.2968, 100.0, 0), +(@PATH, 42, -11344.8, -210.795, 75.2968, 100.0, 0), +(@PATH, 43, -11338.4, -210.338, 75.2968, 100.0, 0), +(@PATH, 44, -11332.4, -207.985, 75.4801, 100.0, 0), +(@PATH, 45, -11325.3, -205.129, 75.5001, 100.0, 0), +(@PATH, 46, -11316.5, -201.627, 75.8807, 100.0, 0), +(@PATH, 47, -11314.0, -202.753, 75.4623, 100.0, 0); + + +/* Bloodscalp Mystic - GUID 2395 */ + + +SET @NPC := 2395; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11732.9, 697.788, 50.7811, 100.0, 0), +(@PATH, 2, -11723.3, 686.274, 49.6561, 100.0, 0), +(@PATH, 3, -11729.1, 694.395, 50.716, 100.0, 0), +(@PATH, 4, -11731.7, 728.816, 50.7656, 100.0, 0), +(@PATH, 5, -11732.5, 716.788, 50.8481, 100.0, 0); + + +/* Venture Co. Shredder - GUID 2481 */ + + +SET @NPC := 2481; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12096.5, `position_y` = -700.849, `position_z` = 15.6771, `orientation` = 4.48588 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12096.5, -700.849, 15.6771, 100.0, 0), +(@PATH, 2, -12097.6, -692.791, 15.9056, 100.0, 0), +(@PATH, 3, -12100.2, -680.904, 15.9816, 100.0, 0), +(@PATH, 4, -12108.4, -673.026, 17.2299, 100.0, 0), +(@PATH, 5, -12123.8, -660.106, 14.9623, 100.0, 0), +(@PATH, 6, -12130.7, -641.911, 14.9091, 100.0, 0), +(@PATH, 7, -12123.2, -628.321, 13.6104, 100.0, 0), +(@PATH, 8, -12110.5, -618.876, 15.9821, 100.0, 0), +(@PATH, 9, -12100.8, -611.525, 15.9375, 100.0, 0), +(@PATH, 10, -12055.9, -587.114, 14.1442, 100.0, 0), +(@PATH, 11, -12040.6, -582.82, 15.7617, 100.0, 0), +(@PATH, 12, -12022.1, -594.128, 14.2118, 100.0, 0), +(@PATH, 13, -12000.1, -603.15, 12.925, 100.0, 0), +(@PATH, 14, -11983.6, -598.03, 13.0693, 100.0, 0), +(@PATH, 15, -11968.5, -592.755, 15.0403, 100.0, 0), +(@PATH, 16, -11954.1, -597.383, 16.9502, 100.0, 0), +(@PATH, 17, -11937.3, -608.816, 16.5006, 100.0, 0), +(@PATH, 18, -11934.8, -627.838, 14.3872, 100.0, 0), +(@PATH, 19, -11928.9, -637.547, 15.0112, 100.0, 0), +(@PATH, 20, -11921.4, -647.018, 14.9231, 100.0, 0), +(@PATH, 21, -11924.3, -660.684, 15.0621, 100.0, 0), +(@PATH, 22, -11933.4, -673.956, 15.3661, 100.0, 0), +(@PATH, 23, -11939.3, -692.743, 14.1742, 100.0, 0), +(@PATH, 24, -11935.3, -703.345, 15.6117, 100.0, 0), +(@PATH, 25, -11934.1, -722.397, 16.9329, 100.0, 0), +(@PATH, 26, -11938.8, -733.488, 16.877, 100.0, 0), +(@PATH, 27, -11945.8, -743.236, 17.9021, 100.0, 0), +(@PATH, 28, -11955.6, -749.975, 16.6403, 100.0, 0), +(@PATH, 29, -11970.5, -749.205, 16.0588, 100.0, 0), +(@PATH, 30, -11981.9, -745.306, 15.9841, 100.0, 0), +(@PATH, 31, -12001.8, -743.702, 14.5625, 100.0, 0), +(@PATH, 32, -12017.7, -741.342, 15.5122, 100.0, 0), +(@PATH, 33, -12033.5, -743.291, 14.3909, 100.0, 0), +(@PATH, 34, -12049.3, -741.511, 14.1492, 100.0, 0), +(@PATH, 35, -12065.3, -739.32, 15.7185, 100.0, 0), +(@PATH, 36, -12081.6, -727.649, 15.2843, 100.0, 0), +(@PATH, 37, -12090.6, -714.381, 15.9185, 100.0, 0); + + +/* Bloodscalp Scout - GUID 2498 */ + + +SET @NPC := 2498; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -11694.9, `position_y` = 725.79, `position_z` = 49.8259, `orientation` = 3.28799 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -11694.9, 725.79, 49.8259, 100.0, 0), +(@PATH, 2, -11694.8, 717.752, 50.3918, 100.0, 0), +(@PATH, 3, -11694.7, 713.68, 50.4121, 100.0, 0), +(@PATH, 4, -11689.9, 700.381, 50.0744, 100.0, 0), +(@PATH, 5, -11693.6, 707.552, 50.3051, 100.0, 0), +(@PATH, 6, -11694.8, 711.325, 50.3454, 100.0, 0), +(@PATH, 7, -11694.7, 715.395, 50.4099, 100.0, 0), +(@PATH, 8, -11694.8, 719.477, 50.3785, 100.0, 0), +(@PATH, 9, -11694.5, 727.436, 49.657, 100.0, 0), +(@PATH, 10, -11689.8, 733.81, 49.819, 100.0, 0), +(@PATH, 11, -11686.8, 736.458, 49.9552, 100.0, 0), +(@PATH, 12, -11683.4, 738.91, 50.1307, 100.0, 0), +(@PATH, 13, -11680.0, 741.323, 50.3391, 100.0, 0), +(@PATH, 14, -11676.0, 741.859, 50.4999, 100.0, 0), +(@PATH, 15, -11672.0, 741.854, 50.6601, 100.0, 0), +(@PATH, 16, -11668.2, 743.192, 50.7335, 100.0, 0), +(@PATH, 17, -11666.8, 746.732, 50.7334, 100.0, 0), +(@PATH, 18, -11667.1, 758.899, 50.7331, 100.0, 0), +(@PATH, 19, -11668.8, 766.789, 50.8004, 100.0, 0), +(@PATH, 20, -11670.8, 770.115, 50.8321, 100.0, 0), +(@PATH, 21, -11674.0, 772.558, 50.8321, 100.0, 0), +(@PATH, 22, -11681.6, 774.517, 50.9492, 100.0, 0), +(@PATH, 23, -11691.5, 772.445, 51.2131, 100.0, 0), +(@PATH, 24, -11683.5, 774.227, 51.0002, 100.0, 0), +(@PATH, 25, -11675.8, 773.344, 50.8321, 100.0, 0), +(@PATH, 26, -11672.3, 771.379, 50.8321, 100.0, 0), +(@PATH, 27, -11668.2, 764.771, 50.7721, 100.0, 0), +(@PATH, 28, -11666.9, 756.761, 50.7328, 100.0, 0), +(@PATH, 29, -11666.7, 748.649, 50.733, 100.0, 0), +(@PATH, 30, -11667.4, 744.666, 50.7335, 100.0, 0), +(@PATH, 31, -11670.2, 742.224, 50.7335, 100.0, 0), +(@PATH, 32, -11674.2, 741.705, 50.5674, 100.0, 0), +(@PATH, 33, -11678.3, 741.645, 50.3526, 100.0, 0), +(@PATH, 34, -11685.2, 737.623, 49.9551, 100.0, 0), +(@PATH, 35, -11691.3, 732.343, 49.6734, 100.0, 0), +(@PATH, 36, -11693.9, 729.744, 49.5551, 100.0, 0); + + +/* Skullsplitter Axe Thrower - GUID 2516 */ + + +SET @NPC := 2516; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12663.6, `position_y` = -508.931, `position_z` = 29.5798, `orientation` = 4.0101 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12663.6, -508.931, 29.5798, 100.0, 0), +(@PATH, 2, -12640.7, -540.48, 32.2609, 100.0, 0), +(@PATH, 3, -12616.7, -554.255, 31.883, 100.0, 0), +(@PATH, 4, -12605.3, -572.367, 33.3503, 100.0, 0), +(@PATH, 5, -12593.4, -587.799, 35.9762, 100.0, 0), +(@PATH, 6, -12596.4, -635.345, 40.4541, 100.0, 0), +(@PATH, 7, -12601.9, -650.487, 39.7871, 100.0, 0), +(@PATH, 8, -12588.7, -676.953, 39.759, 100.0, 0), +(@PATH, 9, -12574.3, -701.697, 39.288, 100.0, 0), +(@PATH, 10, -12555.6, -712.722, 38.7759, 100.0, 0), +(@PATH, 11, -12540.6, -722.316, 39.7217, 100.0, 30000), +(@PATH, 12, -12536.7, -723.138, 39.1306, 100.0, 0), +(@PATH, 13, -12532.8, -724.051, 38.9953, 100.0, 0), +(@PATH, 14, -12527.8, -730.385, 38.8131, 100.0, 0), +(@PATH, 15, -12519.3, -738.912, 38.653, 100.0, 0), +(@PATH, 16, -12512.8, -743.277, 38.4347, 100.0, 0), +(@PATH, 17, -12506.4, -747.885, 37.7085, 100.0, 0), +(@PATH, 18, -12504.5, -751.205, 37.1529, 100.0, 0), +(@PATH, 19, -12504.5, -759.188, 37.3704, 100.0, 0), +(@PATH, 20, -12508.4, -770.642, 36.6436, 100.0, 0), +(@PATH, 21, -12512.6, -782.086, 37.2624, 100.0, 0), +(@PATH, 22, -12516.0, -789.548, 37.5997, 100.0, 0), +(@PATH, 23, -12521.6, -795.084, 37.9125, 100.0, 0), +(@PATH, 24, -12524.7, -797.578, 38.2524, 100.0, 0), +(@PATH, 25, -12528.8, -808.885, 38.1886, 100.0, 0), +(@PATH, 26, -12529.8, -812.729, 37.8954, 100.0, 0), +(@PATH, 27, -12536.3, -817.095, 39.3836, 100.0, 0), +(@PATH, 28, -12542.5, -821.944, 40.8698, 100.0, 0), +(@PATH, 29, -12553.6, -833.322, 43.7255, 100.0, 0), +(@PATH, 30, -12562.2, -841.567, 45.7154, 100.0, 0), +(@PATH, 31, -12570.4, -850.198, 47.9946, 100.0, 0), +(@PATH, 32, -12574.5, -857.03, 49.26, 100.0, 0), +(@PATH, 33, -12580.4, -872.052, 49.8233, 100.0, 0), +(@PATH, 34, -12581.4, -886.514, 48.5391, 100.0, 30000), +(@PATH, 35, -12584.0, -889.562, 48.3149, 100.0, 0), +(@PATH, 36, -12589.7, -895.215, 49.4118, 100.0, 0), +(@PATH, 37, -12592.9, -897.15, 50.3205, 100.0, 0), +(@PATH, 38, -12604.7, -895.833, 52.3949, 100.0, 0), +(@PATH, 39, -12615.9, -891.214, 53.0229, 100.0, 0), +(@PATH, 40, -12625.2, -883.652, 52.4735, 100.0, 0), +(@PATH, 41, -12635.8, -877.763, 52.2481, 100.0, 0), +(@PATH, 42, -12655.5, -873.401, 52.3643, 100.0, 0), +(@PATH, 43, -12667.4, -871.234, 51.3445, 100.0, 0), +(@PATH, 44, -12679.4, -870.943, 52.0598, 100.0, 0), +(@PATH, 45, -12686.6, -873.635, 53.3724, 100.0, 0), +(@PATH, 46, -12705.1, -881.311, 53.8575, 100.0, 0), +(@PATH, 47, -12728.6, -886.687, 55.3895, 100.0, 0), +(@PATH, 48, -12768.8, -888.368, 53.0689, 100.0, 0), +(@PATH, 49, -12784.3, -885.804, 54.4875, 100.0, 0), +(@PATH, 50, -12798.3, -878.592, 57.7295, 100.0, 0), +(@PATH, 51, -12806.5, -869.737, 58.8736, 100.0, 0), +(@PATH, 52, -12813.9, -860.724, 60.5766, 100.0, 0), +(@PATH, 53, -12837.7, -839.618, 56.168, 100.0, 0), +(@PATH, 54, -12858.8, -823.824, 54.5093, 100.0, 30000), +(@PATH, 55, -12855.0, -824.006, 54.6605, 100.0, 0), +(@PATH, 56, -12851.0, -823.168, 54.8511, 100.0, 0), +(@PATH, 57, -12841.3, -816.427, 55.588, 100.0, 0), +(@PATH, 58, -12838.6, -813.54, 56.4768, 100.0, 0), +(@PATH, 59, -12830.3, -805.415, 60.0935, 100.0, 0), +(@PATH, 60, -12816.4, -797.57, 61.8897, 100.0, 0), +(@PATH, 61, -12802.2, -789.839, 61.9909, 100.0, 0), +(@PATH, 62, -12790.0, -779.394, 61.5143, 100.0, 0), +(@PATH, 63, -12779.7, -766.841, 60.8136, 100.0, 0), +(@PATH, 64, -12770.9, -758.718, 60.3391, 100.0, 0), +(@PATH, 65, -12756.5, -752.015, 62.8276, 100.0, 0), +(@PATH, 66, -12745.7, -746.585, 63.667, 100.0, 0), +(@PATH, 67, -12737.3, -737.875, 63.9252, 100.0, 0), +(@PATH, 68, -12732.5, -727.264, 64.8006, 100.0, 0), +(@PATH, 69, -12727.8, -703.421, 63.0317, 100.0, 0), +(@PATH, 70, -12724.0, -687.973, 59.9778, 100.0, 0), +(@PATH, 71, -12721.6, -680.692, 57.5211, 100.0, 0), +(@PATH, 72, -12712.4, -663.815, 44.1446, 100.0, 0), +(@PATH, 73, -12707.8, -649.805, 38.5891, 100.0, 0), +(@PATH, 74, -12708.2, -633.98, 40.951, 100.0, 0), +(@PATH, 75, -12709.6, -614.003, 39.81, 100.0, 0), +(@PATH, 76, -12711.2, -585.787, 36.8269, 100.0, 0), +(@PATH, 77, -12716.1, -558.074, 33.4151, 100.0, 0), +(@PATH, 78, -12721.2, -542.879, 31.1939, 100.0, 0), +(@PATH, 79, -12729.9, -529.278, 30.0038, 100.0, 0), +(@PATH, 80, -12734.8, -518.281, 30.0734, 100.0, 0), +(@PATH, 81, -12734.6, -510.688, 29.8902, 100.0, 0), +(@PATH, 82, -12728.5, -500.512, 29.0533, 100.0, 0), +(@PATH, 83, -12719.4, -487.5, 28.7728, 100.0, 0), +(@PATH, 84, -12712.5, -477.983, 29.2377, 100.0, 0), +(@PATH, 85, -12704.8, -467.574, 30.1593, 100.0, 30000), +(@PATH, 86, -12701.2, -468.997, 30.1922, 100.0, 0), +(@PATH, 87, -12694.1, -478.794, 29.5006, 100.0, 0), +(@PATH, 88, -12691.8, -498.844, 29.2305, 100.0, 0); + + +/* Venture Co. Shredder - GUID 2538 */ + + +SET @NPC := 2538; +SET @PATH := @NPC * 10; + +UPDATE `creature` SET `position_x` = -12137.4, `position_y` = -588.142, `position_z` = 14.0061, `orientation` = 2.71031 WHERE `guid` = @NPC; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -12137.4, -588.142, 14.0061, 100.0, 0), +(@PATH, 2, -12152.2, -581.354, 13.6855, 100.0, 0), +(@PATH, 3, -12161.1, -589.481, 14.8951, 100.0, 0), +(@PATH, 4, -12162.9, -609.291, 15.7896, 100.0, 0), +(@PATH, 5, -12165.4, -621.079, 16.7136, 100.0, 0), +(@PATH, 6, -12139.4, -647.326, 13.6795, 100.0, 0), +(@PATH, 7, -12135.2, -669.635, 14.5405, 100.0, 0), +(@PATH, 8, -12141.5, -688.489, 15.2554, 100.0, 0), +(@PATH, 9, -12146.7, -694.202, 16.1988, 100.0, 0), +(@PATH, 10, -12153.6, -712.156, 17.8891, 100.0, 0), +(@PATH, 11, -12154.6, -720.025, 16.4993, 100.0, 0), +(@PATH, 12, -12147.0, -732.475, 15.3626, 100.0, 0), +(@PATH, 13, -12115.3, -750.052, 13.8516, 100.0, 0), +(@PATH, 14, -12092.5, -748.875, 11.8611, 100.0, 0), +(@PATH, 15, -12085.7, -740.328, 12.7918, 100.0, 0), +(@PATH, 16, -12084.8, -728.769, 14.7829, 100.0, 0), +(@PATH, 17, -12078.6, -706.206, 14.4314, 100.0, 0), +(@PATH, 18, -12058.8, -694.468, 13.1133, 100.0, 0), +(@PATH, 19, -12048.0, -653.211, 14.3817, 100.0, 0), +(@PATH, 20, -12068.0, -638.584, 17.8572, 100.0, 0), +(@PATH, 21, -12087.4, -638.425, 16.202, 100.0, 0), +(@PATH, 22, -12115.0, -634.635, 15.4155, 100.0, 0), +(@PATH, 23, -12125.9, -615.278, 13.8394, 100.0, 0); + + +/* Bloodsail Mage - GUID 2571 */ + + +SET @NPC := 2571; +SET @PATH := @NPC * 10; + +DELETE FROM `creature_addon` WHERE `guid` = @NPC; +INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH); +UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC; + +DELETE FROM `waypoint_data` where `id` = @PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -14141.8, 477.248, 3.25545, 100.0, 0), +(@PATH, 2, -14142.4, 469.125, 3.45588, 100.0, 0), +(@PATH, 3, -14142.3, 461.028, 3.90766, 100.0, 0), +(@PATH, 4, -14140.9, 449.034, 4.35122, 100.0, 0), +(@PATH, 5, -14148.7, 435.761, 7.70542, 100.0, 20000), +(@PATH, 6, -14145.0, 436.995, 6.62403, 100.0, 0), +(@PATH, 7, -14130.0, 442.173, 4.18188, 100.0, 0), +(@PATH, 8, -14122.7, 451.231, 3.60192, 100.0, 0), +(@PATH, 9, -14118.5, 466.56, 1.52169, 100.0, 0), +(@PATH, 10, -14117.9, 470.515, 1.12745, 100.0, 0), +(@PATH, 11, -14119.3, 482.943, 0.297835, 100.0, 30000), +(@PATH, 12, -14127.3, 482.846, 1.3567, 100.0, 0), +(@PATH, 13, -14138.5, 479.154, 2.71788, 100.0, 0), +(@PATH, 14, -14142.4, 469.113, 3.45617, 100.0, 0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_11' WHERE sql_rev = '1647269947240244800'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_12.sql b/data/sql/updates/db_world/2022_03_18_12.sql new file mode 100644 index 000000000..5986c9c21 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_12.sql @@ -0,0 +1,32 @@ +-- DB update 2022_03_18_11 -> 2022_03_18_12 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_11'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_11 2022_03_18_12 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647387221217292000'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647387221217292000'); + +-- Set gossip flag for creature after spawn +DELETE FROM `smart_scripts` WHERE `entryorguid` = 14234300 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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(14234300, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 19, 7918, 5, 0, 0, 0, 0, 0, 0, 'Uldum Pedestal - On Script - Set npcflag 1 for \'Stone Watcher of Norgannon\''); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_12' WHERE sql_rev = '1647387221217292000'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_13.sql b/data/sql/updates/db_world/2022_03_18_13.sql new file mode 100644 index 000000000..e3eaf502f --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_13.sql @@ -0,0 +1,335 @@ +-- DB update 2022_03_18_12 -> 2022_03_18_13 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_12'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_12 2022_03_18_13 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647384955185295290'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647384955185295290'); + +-- 10709 Reunión +-- https://es.tbc.wowhead.com/quest=10709 +SET @ID := 10709; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Así que mi padre todavía vive. No esperaba que me perdonase, él no es así. Pero sí esperaba que los años hubiesen calmado la furia que debió de sentir cuando me marché.$B$BHace treinta años, dejé a los Mok\'Nathal para seguir a la Horda hasta Azeroth. Leoroxx no quería que lo hiciese, pero tampoco me dio ninguna razón para quedarme. De todas formas, me esperaba una bienvenida más cálida.$B$BQuería un Mok\'Nathal como hijo y tiene uno, aunque no lo sepa.$B$BDebo abrirle los ojos.', 0), +(@ID, 'esMX', 'Así que mi padre todavía vive. No esperaba que me perdonase, él no es así. Pero sí esperaba que los años hubiesen calmado la furia que debió de sentir cuando me marché.$B$BHace treinta años, dejé a los Mok\'Nathal para seguir a la Horda hasta Azeroth. Leoroxx no quería que lo hiciese, pero tampoco me dio ninguna razón para quedarme. De todas formas, me esperaba una bienvenida más cálida.$B$BQuería un Mok\'Nathal como hijo y tiene uno, aunque no lo sepa.$B$BDebo abrirle los ojos.', 0); +-- 10769 Disensión en las filas… +-- https://es.tbc.wowhead.com/quest=10769 +SET @ID := 10769; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡Has regresado!', 0), +(@ID, 'esMX', '¡Has regresado!', 0); +-- 10777 El tótem de Asghar +-- https://es.tbc.wowhead.com/quest=10777 +SET @ID := 10777; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has conseguido el tótem de Asghar?', 0), +(@ID, 'esMX', '¿Has conseguido el tótem de Asghar?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BBien. Este viejo tótem no ha perdido su poder con los años, pero no es lo suficientemente poderoso como para detener al cónclave oscuro.', 0), +(@ID, 'esMX', '$B$BBien. Este viejo tótem no ha perdido su poder con los años, pero no es lo suficientemente poderoso como para detener al cónclave oscuro.', 0); +-- 10778 La vara de Lianthe +-- https://es.tbc.wowhead.com/quest=10778 +SET @ID := 10778; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has conseguido la vara?', 0), +(@ID, 'esMX', '¿Has conseguido la vara?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Bien hecho. Un tesoro así se merece algo mejor que estar oculto en un oscuro cofre. Debemos usarla para algo digno.', 0), +(@ID, 'esMX', 'Bien hecho. Un tesoro así se merece algo mejor que estar oculto en un oscuro cofre. Debemos usarla para algo digno.', 0); +-- 10780 Plumas de Sketh'lon +-- https://es.tbc.wowhead.com/quest=10780 +SET @ID := 10780; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has conseguido ya las plumas del bastón?', 0), +(@ID, 'esMX', '¿Has conseguido ya las plumas del bastón?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BHabría sido mejor que hubiesen muerto ese día, pero nada es sencillo. La magia de Gul\'dan les habría convertido en el tipo de amenaza que estaban intentando detener. Habría sido una broma muy cruel del destino.', 0), +(@ID, 'esMX', '$B$BHabría sido mejor que hubiesen muerto ese día, pero nada es sencillo. La magia de Gul\'dan les habría convertido en el tipo de amenaza que estaban intentando detener. Habría sido una broma muy cruel del destino.', 0); +-- 10781 La batalla de la Atalaya Carmesí +-- https://es.tbc.wowhead.com/quest=10781 +SET @ID := 10781; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '', 0), +(@ID, 'esMX', '', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Habrá una investigación del Sigilo Carmesí. Suponen una amenaza a toda la vida de Draenor. Puedo ver el día en que su oscuro maestro tendrá que responder por sus crímenes. Quizás tú seas quien haga eso posible, $ghéroe:heroína;.', 0), +(@ID, 'esMX', 'Habrá una investigación del Sigilo Carmesí. Suponen una amenaza a toda la vida de Draenor. Puedo ver el día en que su oscuro maestro tendrá que responder por sus crímenes. Quizás tú seas quien haga eso posible, $ghéroe:heroína;.', 0); +-- 10782 Tratando la celada +-- https://es.tbc.wowhead.com/quest=10782 +SET @ID := 10782; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has regresado con la celada llena de energía?', 0), +(@ID, 'esMX', '¿Has regresado con la celada llena de energía?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BEsto contiene el poder que necesitamos para acabar con los esfuerzos del cónclave oscuro en el Campamento Sketh\'lon.', 0), +(@ID, 'esMX', '$B$BEsto contiene el poder que necesitamos para acabar con los esfuerzos del cónclave oscuro en el Campamento Sketh\'lon.', 0); +-- 10784 Destrozar el Campamento Machacasangre +-- https://es.tbc.wowhead.com/quest=10784 +SET @ID := 10784; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Ya has destruido el Campamento Machacasangre?', 0), +(@ID, 'esMX', '¿Ya has destruido el Campamento Machacasangre?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BNo dejas de impresionarme, $n. Cada vez que uno de esos apestosos ogros muere, nos acercamos mucho más a nuestra meta de librarnos de ellos para siempre.', 0), +(@ID, 'esMX', '$B$BNo dejas de impresionarme, $n. Cada vez que uno de esos apestosos ogros muere, nos acercamos mucho más a nuestra meta de librarnos de ellos para siempre.', 0); +-- 10785 ¡Es una trampa! +-- https://es.tbc.wowhead.com/quest=10785 +SET @ID := 10785; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has conseguido lo que había en ese saco de gronn para Sablecrín? ¿Qué nos ha dado?', 0), +(@ID, 'esMX', '¿Has conseguido lo que había en ese saco de gronn para Sablecrín? ¿Qué nos ha dado?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Mmm, ¿una trampa creada a partir de esencia de fuego de dragón? Me pregunto cómo hace Sablecrín para obtener esas sustancias tan extrañas.$B$BNo importa. Lo único que importa es que vamos a usarla para matar a un hijo de Gruul.', 0), +(@ID, 'esMX', 'Mmm, ¿una trampa creada a partir de esencia de fuego de dragón? Me pregunto cómo hace Sablecrín para obtener esas sustancias tan extrañas.$B$BNo importa. Lo único que importa es que vamos a usarla para matar a un hijo de Gruul.', 0); +-- 10786 Carnicería en Peña'mok +-- https://es.tbc.wowhead.com/quest=10786 +SET @ID := 10786; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Hemos recorrido un largo camino en poco tiempo, tú y yo. Me atrevo a decir que eres $gel cazador:la cazadora; de ogros más capaz que he conocido.$B$BEntonces, ¿confío en que pronto te ocuparás de los ogros de Peña\'mok?', 0), +(@ID, 'esMX', 'Hemos recorrido un largo camino en poco tiempo, tú y yo. Me atrevo a decir que eres $gel cazador:la cazadora; de ogros más capaz que he conocido.$B$BEntonces, ¿confío en que pronto te ocuparás de los ogros de Peña\'mok?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BAh, me gustaría haber podido estar allí contigo. Deja que te diga algo, $n: nunca aceptes ninguna misión que te mantenga $galejado:alejada; de la gloria de la batalla.$B$B¡Ja! Después de todos los ogros que has matado, ¿todavía queda alguno en estas montañas para mí?', 0), +(@ID, 'esMX', '$B$BAh, me gustaría haber podido estar allí contigo. Deja que te diga algo, $n: nunca aceptes ninguna misión que te mantenga $galejado:alejada; de la gloria de la batalla.$B$B¡Ja! Después de todos los ogros que has matado, ¿todavía queda alguno en estas montañas para mí?', 0); +-- 10788 Regresa junto a Talionia +-- https://es.tbc.wowhead.com/quest=10788 +SET @ID := 10788; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Entonces $gel:la; trotamundos regresa...$B$BEspero que mi sarcasmo sea evidente, $n, porque me has molestado mucho al obligarme a convocarte. Piensa que estás a un pelo de guardia vil de la incineración y que ellos no tienen pelo.$B$BPreste mucha atención, esta no es una lección que repetiré dos veces.', 0), +(@ID, 'esMX', 'Entonces $gel:la; trotamundos regresa...$B$BEspero que mi sarcasmo sea evidente, $n, porque me has molestado mucho al obligarme a convocarte. Piensa que estás a un pelo de guardia vil de la incineración y que ellos no tienen pelo.$B$BPreste mucha atención, esta no es una lección que repetiré dos veces.', 0); +-- 10789 Regresa junto a Carendin Halgar +-- https://es.tbc.wowhead.com/quest=10789 +SET @ID := 10789; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Sí, lo puedo verlo en tus ojos. Estás $gansioso:ansiosa; por aprender más.$B$BMuy bien, esta es una lección que ambos disfrutaremos.', 0), +(@ID, 'esMX', 'Sí, lo puedo verlo en tus ojos. Estás $gansioso:ansiosa; por aprender más.$B$BMuy bien, esta es una lección que ambos disfrutaremos.', 0); +-- 10790 Regresa junto a Gan'rul Ojosangre +-- https://es.tbc.wowhead.com/quest=10790 +SET @ID := 10790; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Es el conocimiento prohibido que ansías, ¿verdad? Puedo darte eso...', 0), +(@ID, 'esMX', 'Es el conocimiento prohibido que ansías, ¿verdad? Puedo darte eso...', 0); +-- 10791 Acoger al espíritu lobo +-- https://es.tbc.wowhead.com/quest=10791 +SET @ID := 10791; +UPDATE `quest_template_locale` SET `ObjectiveText2` = 'Ayuda a Malukaz a invocar al espritu lobo', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Restablecer vínculos con el espíritu lobo es solo el comienzo de mi viaje, no el final.', 0), +(@ID, 'esMX', 'Restablecer vínculos con el espíritu lobo es solo el comienzo de mi viaje, no el final.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡Esto es increíble! Emprendí este viaje sin saber si el espíritu lobo respondería a nuestras invocaciones, y ahora parece como si siempre hubiera estado aquí. Quizás lo estaba, $n.$B$BQuizás esperaba que los orcos se dieran cuenta de lo que habían causado sus decisiones.', 0), +(@ID, 'esMX', '¡Esto es increíble! Emprendí este viaje sin saber si el espíritu lobo respondería a nuestras invocaciones, y ahora parece como si siempre hubiera estado aquí. Quizás lo estaba, $n.$B$BQuizás esperaba que los orcos se dieran cuenta de lo que habían causado sus decisiones.', 0); +-- 10792 ¡Zeth'Gor debe arder! +-- https://es.tbc.wowhead.com/quest=10792 +SET @ID := 10792; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Barracones quemados', `ObjectiveText2` = 'Cobertizo del este quemado', `ObjectiveText3` = 'Cobertizo del oeste quemado', `ObjectiveText4` = 'Establo quemado', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡Zeth\'Gor debe arder, $n! Vuelve a hablar conmigo cuando hayas completado tu tarea.', 0), +(@ID, 'esMX', '¡Zeth\'Gor debe arder, $n! Vuelve a hablar conmigo cuando hayas completado tu tarea.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡Ja! He podido ver el humo y las llamas de Zeth\'Gor desde aquí. ¡Que los demonios del clan Foso Sangrante se conviertan en cenizas y desaparezcan de la vista de los verdaderos orcos!$B$BGracias, $n. Has ayudado a acabar con una afrenta para el espíritu de los orcos.', 0), +(@ID, 'esMX', '¡Ja! He podido ver el humo y las llamas de Zeth\'Gor desde aquí. ¡Que los demonios del clan Foso Sangrante se conviertan en cenizas y desaparezcan de la vista de los verdaderos orcos!$B$BGracias, $n. Has ayudado a acabar con una afrenta para el espíritu de los orcos.', 0); +-- 10793 El diario de Val'zareq: augurios de guerra +-- https://es.tbc.wowhead.com/quest=10793 +SET @ID := 10793; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$B¿Qué... qué estás haciendo aquí?', 0), +(@ID, 'esMX', '$B$B¿Qué... qué estás haciendo aquí?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has matado al conquistador? Entonces no tenemos mucho tiempo...$B$BEl Sigilo Carmesí es un grupo formado por la élite de los esbirros de Illidan. Están en lo alto de la cadena de mando de todas las fuerzas Illidari fuera del Templo Oscuro. Esos soldados se comunican directamente con el Traidor y cumplen sus órdenes sin cuestionarlas.$B$BSon los demonios que, sin duda, lideraron el asalto a este mundo, aplastando bajo sus pies todo lo que se interponía en su camino.', 0), +(@ID, 'esMX', '¿Has matado al conquistador? Entonces no tenemos mucho tiempo...$B$BEl Sigilo Carmesí es un grupo formado por la élite de los esbirros de Illidan. Están en lo alto de la cadena de mando de todas las fuerzas Illidari fuera del Templo Oscuro. Esos soldados se comunican directamente con el Traidor y cumplen sus órdenes sin cuestionarlas.$B$BSon los demonios que, sin duda, lideraron el asalto a este mundo, aplastando bajo sus pies todo lo que se interponía en su camino.', 0); +-- 10794 Pícaros de la Mano Destrozada +-- https://es.tbc.wowhead.com/quest=10794 +SET @ID := 10794; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Entonces, ¿quieres trabajar para la Mano Destrozada? Parece que tenemos a alguien nuevo todos los días.$B$BPresta mucha atención y te explicaré lo que tienes que hacer.', 0), +(@ID, 'esMX', 'Entonces, ¿quieres trabajar para la Mano Destrozada? Parece que tenemos a alguien nuevo todos los días.$B$BPresta mucha atención y te explicaré lo que tienes que hacer.', 0); +-- 10795 Cita con Dorgok +-- https://es.tbc.wowhead.com/quest=10795 +SET @ID := 10795; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'No puedo expresar con suficiente fuerza lo importante que es que mates a Dorgok lo más rápido posible.', 0), +(@ID, 'esMX', 'No puedo expresar con suficiente fuerza lo importante que es que mates a Dorgok lo más rápido posible.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Con Dorgok muerto, los ogros Machacasangre no tienen líder y estarán en pleno caos hasta que otro líder salga de sus filas.$B$BGracias, $c, creo que al menos podemos respirar un poco más tranquilos por ahora.', 0), +(@ID, 'esMX', 'Con Dorgok muerto, los ogros Machacasangre no tienen líder y estarán en pleno caos hasta que otro líder salga de sus filas.$B$BGracias, $c, creo que al menos podemos respirar un poco más tranquilos por ahora.', 0); +-- 10797 El favor del gronn +-- https://es.tbc.wowhead.com/quest=10797 +SET @ID := 10797; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Hola, $gchico:chica;. ¿Qué noticias me traes?', 0), +(@ID, 'esMX', 'Hola, $gchico:chica;. ¿Qué noticias me traes?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Oh, muy bonito. Se parece mucho a esos gronn que siempre están dando órdenes a los ogros Aguja del Filo.$B$BQué extraño que lo encontraras en la mano de uno de los líderes Machacasangre.', 0), +(@ID, 'esMX', 'Oh, muy bonito. Se parece mucho a esos gronn que siempre están dando órdenes a los ogros Aguja del Filo.$B$BQué extraño que lo encontraras en la mano de uno de los líderes Machacasangre.', 0); +-- 10798 Una visita al barón +-- https://es.tbc.wowhead.com/quest=10798 +SET @ID := 10798; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Ah, un enviado de la Alianza. Dime, colega, ¿y qué haces tú aquí pidiéndome que haga algo en vez de tu ilustre comandante?$B$B¿Podría ser que yo le dé miedo? Dice algo sobre ti que no eres, pero todavía no he decidido qué es.', 0), +(@ID, 'esMX', 'Ah, un enviado de la Alianza. Dime, colega, ¿y qué haces tú aquí pidiéndome que haga algo en vez de tu ilustre comandante?$B$B¿Podría ser que yo le dé miedo? Dice algo sobre ti que no eres, pero todavía no he decidido qué es.', 0); +-- 10800 Buenas noches, Gronn +-- https://es.wowhead.com/quest=10800 +SET @ID := 10800; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'De nuevo nos vemos, $c. Esto debe de significar que has conseguido robarle el saco a Grulloc.', 0), +(@ID, 'esMX', 'De nuevo nos vemos, $c. Esto debe de significar que has conseguido robarle el saco a Grulloc.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BMuy bien, has cumplido tu parte del trato. Y ahora, le daré esa trampa a tu comandante Muropiedra.', 0), +(@ID, 'esMX', '$B$BMuy bien, has cumplido tu parte del trato. Y ahora, le daré esa trampa a tu comandante Muropiedra.', 0); +-- 10801 ¡Es una trampa! +-- https://es.wowhead.com/quest=10801 +SET @ID := 10801; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿El barón nos ha hecho una trampa? ¿Una lo suficientemente potente como para matar a un gronn?', 0), +(@ID, 'esMX', '¿El barón nos ha hecho una trampa? ¿Una lo suficientemente potente como para matar a un gronn?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Mmm, ¿una trampa creada a partir de esencia de llama de dragón? Me pregunto cómo hace Sablecrín para obtener esas sustancias tan extrañas.$B$BNo importa. Lo único que importa es que vamos a usarla para matar a un hijo de Gruul.', 0), +(@ID, 'esMX', 'Mmm, ¿una trampa creada a partir de esencia de llama de dragón? Me pregunto cómo hace Sablecrín para obtener esas sustancias tan extrañas.$B$BNo importa. Lo único que importa es que vamos a usarla para matar a un hijo de Gruul.', 0); +-- 10802 Gorgrom el Comedragones +-- https://es.wowhead.com/quest=10802 +SET @ID := 10802; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Coloca Tótems repelentes', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has entregado el mensaje?', 0), +(@ID, 'esMX', '¿Has entregado el mensaje?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Bien hecho, $n. ¡Bien hecho!$B$BSospecho que ya no tendremos muchas más noticias sobre los ogros y su maestro.', 0), +(@ID, 'esMX', 'Bien hecho, $n. ¡Bien hecho!$B$BSospecho que ya no tendremos muchas más noticias sobre los ogros y su maestro.', 0); +-- 10803 Carnicería en Peña'mok +-- https://es.wowhead.com/quest=10803 +SET @ID := 10803; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Me atrevo a decir que eres $gel cazador:la cazadora; de ogros más capaz que he conocido.$B$BEntonces, ¿confío en que pronto te ocuparás de los ogros de Peña\'mok?', 0), +(@ID, 'esMX', 'Me atrevo a decir que eres $gel cazador:la cazadora; de ogros más capaz que he conocido.$B$BEntonces, ¿confío en que pronto te ocuparás de los ogros de Peña\'mok?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BAh, me gustaría haber podido estar allí contigo. Deja que te diga algo, $n: nunca aceptes ninguna misión que te mantenga $galejado:alejada; de la gloria de la batalla.$B$B¡Ja! Después de todos los ogros que has matado, ¿todavía queda alguno en estas montañas para mí?', 0), +(@ID, 'esMX', '$B$BAh, me gustaría haber podido estar allí contigo. Deja que te diga algo, $n: nunca aceptes ninguna misión que te mantenga $galejado:alejada; de la gloria de la batalla.$B$B¡Ja! Después de todos los ogros que has matado, ¿todavía queda alguno en estas montañas para mí?', 0); +-- 10804 Bondad +-- https://es.wowhead.com/quest=10804 +SET @ID := 10804; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Draco Ala Abisal adulto alimentado', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡No puedo salvarlos yo solo, $n!', 0), +(@ID, 'esMX', '¡No puedo salvarlos yo solo, $n!', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Eres $gun:una; $r amable y $gcompasivo:compasiva;, $gamigo:amiga;.', 0), +(@ID, 'esMX', 'Eres $gun:una; $r amable y $gcompasivo:compasiva;, $gamigo:amiga;.', 0); +-- 10805 Masacre en la Guarida de Gruul +-- https://es.wowhead.com/quest=10805 +SET @ID := 10805; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has logrado diezmar a los ogros Aguja del Filo en la Guarida de Gruul?$B$B¡No me vengas con excusas, $gchico:chica;! ¡Termina el trabajo!', 0), +(@ID, 'esMX', '¿Has logrado diezmar a los ogros Aguja del Filo en la Guarida de Gruul?$B$B¡No me vengas con excusas, $gchico:chica;! ¡Termina el trabajo!', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Perfecto, por lo visto hice bien al elegirte a ti para la lucha. Creo que ha llegado la hora de pasar a un nuevo nivel.$B$B¿Recuerdas lo que robaste para mí en las mismas narices de Grulloc? Pues ahora vas a tener la oportunidad de usarlo.', 0), +(@ID, 'esMX', 'Perfecto, por lo visto hice bien al elegirte a ti para la lucha. Creo que ha llegado la hora de pasar a un nuevo nivel.$B$B¿Recuerdas lo que robaste para mí en las mismas narices de Grulloc? Pues ahora vas a tener la oportunidad de usarlo.', 0); +-- 10806 Enfrentamiento +-- https://es.wowhead.com/quest=10806 +SET @ID := 10806; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Con el tiempo, conseguiremos acabar con todos los hijos de Gruul.', 0), +(@ID, 'esMX', 'Con el tiempo, conseguiremos acabar con todos los hijos de Gruul.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Has luchado sorprendentemente bien, $r, y ha sido un honor tenerte a mi lado. Mi transformación debe de haber sido una gran sorpresa para ti. Confío en que no haya sido demasiado...$B$BMantengamos mi verdadera identidad entre nosotros dos, ¿te parece? A cambio y por el gran servicio que nos has prestado, quiero que elijas algo de esto.', 0), +(@ID, 'esMX', 'Has luchado sorprendentemente bien, $r, y ha sido un honor tenerte a mi lado. Mi transformación debe de haber sido una gran sorpresa para ti. Confío en que no haya sido demasiado...$B$BMantengamos mi verdadera identidad entre nosotros dos, ¿te parece? A cambio y por el gran servicio que nos has prestado, quiero que elijas algo de esto.', 0); +-- 10807 Los Tábidos Lengua de ceniza +-- https://es.wowhead.com/quest=10807 +SET @ID := 10807; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has completado la tarea que te pedí, $n?', 0), +(@ID, 'esMX', '¿Has completado la tarea que te pedí, $n?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Gloria a los Arúspices, $n. Has cumplido los deseos del Vidente al derrotar a los seguidores de Illidan.', 0), +(@ID, 'esMX', 'Gloria a los Arúspices, $n. Has cumplido los deseos del Vidente al derrotar a los seguidores de Illidan.', 0); +-- 10808 Frustra los planes del Cónclave +-- https://es.tbc.wowhead.com/quest=10808 +SET @ID := 10808; +UPDATE `quest_template_locale` SET `ObjectiveText1` = '', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Está hecho, $n? ¿Has evitado que el Cónclave Oscuro finalizara su ritual?', 0), +(@ID, 'esMX', '¿Está hecho, $n? ¿Has evitado que el Cónclave Oscuro finalizara su ritual?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'He buscado una forma de detener el Cónclave Oscuro desde hace años, y tú has triunfado donde yo he fracasado. Los rituales oscuros del Cónclave ya no nos amenazarán más.$B$BA menudo me siento culpable por abandonar a mis compañeros hace tantos años, pero al fin ahora sé que tomé la decisión correcta. Si no hubiera sido por mi conciencia vacilante de entonces, podría haber acabado como una sombra entre ellos.', 0), +(@ID, 'esMX', 'He buscado una forma de detener el Cónclave Oscuro desde hace años, y tú has triunfado donde yo he fracasado. Los rituales oscuros del Cónclave ya no nos amenazarán más.$B$BA menudo me siento culpable por abandonar a mis compañeros hace tantos años, pero al fin ahora sé que tomé la decisión correcta. Si no hubiera sido por mi conciencia vacilante de entonces, podría haber acabado como una sombra entre ellos.', 0); +-- 10809 Se busca: Maestro de huargos Kruush +-- https://es.tbc.wowhead.com/quest=10809 +SET @ID := 10809; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Informa, $n. ¿Esas manchas que veo en tu manga son de sangre de Foso Sangrante? ¡Eso espero!', 0), +(@ID, 'esMX', 'Informa, $n. ¿Esas manchas que veo en tu manga son de sangre de Foso Sangrante? ¡Eso espero!', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡Así que mataste a ese horrible Kruush! Bien hecho, $n. ¡Bien hecho! Su muerte desestabilizará a esos jinetes de huargos. ¡En realidad, espero que te hayas cargado a alguno durante tu viaje a Zeth\'Gor!$B$BAquí está tu recompensa. ¡Te lo mereces!', 0), +(@ID, 'esMX', '¡Así que mataste a ese horrible Kruush! Bien hecho, $n. ¡Bien hecho! Su muerte desestabilizará a esos jinetes de huargos. ¡En realidad, espero que te hayas cargado a alguno durante tu viaje a Zeth\'Gor!$B$BAquí está tu recompensa. ¡Te lo mereces!', 0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_13' WHERE sql_rev = '1647384955185295290'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_14.sql b/data/sql/updates/db_world/2022_03_18_14.sql new file mode 100644 index 000000000..3533dd1b1 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_14.sql @@ -0,0 +1,339 @@ +-- DB update 2022_03_18_13 -> 2022_03_18_14 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_13'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_13 2022_03_18_14 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647385217273847981'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647385217273847981'); + +-- 10808 Frustra los planes del Cónclave +-- https://es.tbc.wowhead.com/quest=10808 +SET @ID := 10808; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Acabar con el ritual de invocación del Cónclave Oscuro', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +-- 10810 La máscara dañada +-- https://es.tbc.wowhead.com/quest=10810 +SET @ID := 10810; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡No me molestes! ¿No ves que estoy intentando liberar mis poderes misteriosos?', 0), +(@ID, 'esMX', '¡No me molestes! ¿No ves que estoy intentando liberar mis poderes misteriosos?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Ah, ¿qué tienes ahí? Déjame verlo más de cerca, $c.Sí, sí... Es justo lo que pensaba que era. Déjame arreglar esta máscara.', 0), +(@ID, 'esMX', 'Ah, ¿qué tienes ahí? Déjame verlo más de cerca, $c.Sí, sí... Es justo lo que pensaba que era. Déjame arreglar esta máscara.', 0); +-- 10811 Buscar a Neltharaku +-- https://es.tbc.wowhead.com/quest=10811 +SET @ID := 10811; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Mis hijos me han contado tus hazañas, $r. Todavía puedes hacer más.', 0), +(@ID, 'esMX', 'Mis hijos me han contado tus hazañas, $r. Todavía puedes hacer más.', 0); +-- 10812 La máscara misteriosa +-- https://es.tbc.wowhead.com/quest=10812 +SET @ID := 10812; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'No puedo creer lo que ven mis ojos.', 0), +(@ID, 'esMX', 'No puedo creer lo que ven mis ojos.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'La máscara que tienes es una máscara de gas Jurapenas, y al parecer está en buen estado. Con ella podremos causar muchos problemas en Campamento Forja: Inquina. ¿Te interesa ayudarnos, $n?', 0), +(@ID, 'esMX', 'La máscara que tienes es una máscara de gas Jurapenas, y al parecer está en buen estado. Con ella podremos causar muchos problemas en Campamento Forja: Inquina. ¿Te interesa ayudarnos, $n?', 0); +-- 10813 Los ojos de Grillok +-- https://es.wowhead.com/quest=10813 +SET @ID := 10813; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Ojo de Grillok devuelto', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Los orcos del clan Foso Sangrante fueron oscuros aliados hace tiempo... Ahora son enemigos todavía más oscuros.', 0), +(@ID, 'esMX', 'Los orcos del clan Foso Sangrante fueron oscuros aliados hace tiempo... Ahora son enemigos todavía más oscuros.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Estoy en deuda contigo, $n. Te has vuelto a adentrar en Zeth\'Gor y su oscuridad ha rozado tu corazón. Estudiaré el ojo y puede que comprenda los secretos de su maestro, Grillok.$B$B¡Esperemos que no pueda usar su magia!', 0), +(@ID, 'esMX', 'Estoy en deuda contigo, $n. Te has vuelto a adentrar en Zeth\'Gor y su oscuridad ha rozado tu corazón. Estudiaré el ojo y puede que comprenda los secretos de su maestro, Grillok.$B$B¡Esperemos que no pueda usar su magia!', 0); +-- 10814 La historia de Neltharaku +-- https://es.wowhead.com/quest=10814 +SET @ID := 10814; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Permíteme terminar de contarl mi historia.', 0), +(@ID, 'esMX', 'Permíteme terminar de contarl mi historia.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Entonces nos ayudarás?', 0), +(@ID, 'esMX', '¿Entonces nos ayudarás?', 0); +-- 10816 Reclamar los terrenos sagrados +-- https://es.wowhead.com/quest=10816 +SET @ID := 10816; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Salve, $n. ¿Qué novedades traes?', 0), +(@ID, 'esMX', 'Salve, $n. ¿Qué novedades traes?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Un trabajo excelente, $c. Que la Luz siga protegiéndote.', 0), +(@ID, 'esMX', 'Un trabajo excelente, $c. Que la Luz siga protegiéndote.', 0); +-- 10817 El gran castigo +-- https://es.tbc.wowhead.com/quest=10817 +SET @ID := 10817; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Salve, $n. ¿Qué novedades traes?', 0), +(@ID, 'esMX', 'Salve, $n. ¿Qué novedades traes?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Hoy te has ganado mi respeto, $n.$B$BMatar a un orco vil no es tarea fácil. Masacrar a muchos de ellos es... heroico.', 0), +(@ID, 'esMX', 'Hoy te has ganado mi respeto, $n.$B$BMatar a un orco vil no es tarea fácil. Masacrar a muchos de ellos es... heroico.', 0); +-- 10818 El Barón Sablecrín ha solicitado tu presencia +-- https://es.wowhead.com/quest=10818 +SET @ID := 10818; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Ah, veo que has decidido tomarte tu tiempo para responder a mi llamada.$B$BNo importa, tengo mucho tiempo para ejecutar mi venganza, ¡y mi intención es que seas mi $gapoderado:apoderada; en la próxima batalla!', 0), +(@ID, 'esMX', 'Ah, veo que has decidido tomarte tu tiempo para responder a mi llamada.$B$BNo importa, tengo mucho tiempo para ejecutar mi venganza, ¡y mi intención es que seas mi $gapoderado:apoderada; en la próxima batalla!', 0); +-- 10819 La máscara de gas jurapenas +-- https://es.wowhead.com/quest=10819 +SET @ID := 10819; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡¿Qué significa esto?! ¡Nadie me invoca a mí! ¡Habla o yo haré que calles para siempre!', 0), +(@ID, 'esMX', '¡¿Qué significa esto?! ¡Nadie me invoca a mí! ¡Habla o yo haré que calles para siempre!', 0); +-- 10820 Engañar al enemigo +-- https://es.wowhead.com/quest=10820 +SET @ID := 10820; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Mi paciencia se agota, ¿por qué no has terminado?', 0), +(@ID, 'esMX', 'Mi paciencia se agota, ¿por qué no has terminado?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Así aprenderán los que no hacen lo que digo...$B$BPor cierto..., ¿dónde está la pregonera de fatalidad? ¿Por qué me has informado a mí de esta revuelta y no a ella?', 0), +(@ID, 'esMX', 'Así aprenderán los que no hacen lo que digo...$B$BPor cierto..., ¿dónde está la pregonera de fatalidad? ¿Por qué me has informado a mí de esta revuelta y no a ella?', 0); +-- 10821 ¡Largo de aquí! +-- https://es.wowhead.com/quest=10821 +SET @ID := 10821; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Quieres unirte a mi lista de prescindibles? ¡Consigue esas llaves y silencia a la Pregonera de fatalidad!', 0), +(@ID, 'esMX', '¿Quieres unirte a mi lista de prescindibles? ¡Consigue esas llaves y silencia a la Pregonera de fatalidad!', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Eso son grandes noticias, sin duda, $n. No podría haber pedido un resultado mejor. Tu servicio a nuestro pueblo se aprecia enormemente, escoge uno de los siguientes objetos heroicos.$B$BTu nombre se recordará siempre en el corazón de nuestro pueblo.', 0), +(@ID, 'esMX', 'Eso son grandes noticias, sin duda, $n. No podría haber pedido un resultado mejor. Tu servicio a nuestro pueblo se aprecia enormemente, escoge uno de los siguientes objetos heroicos.$B$BTu nombre se recordará siempre en el corazón de nuestro pueblo.', 0); +-- 10824 Sellos Furia del Sol +-- https://es.wowhead.com/quest=10824 +SET @ID := 10824; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Adelante, $n. Habla.', 0), +(@ID, 'esMX', 'Adelante, $n. Habla.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Los elfos de Kael están extremadamente bien entrenados. Excelente trabajo.', 0), +(@ID, 'esMX', 'Los elfos de Kael están extremadamente bien entrenados. Excelente trabajo.', 0); +-- 10825 La verdad sin orbes +-- https://es.wowhead.com/quest=10825 +SET @ID := 10825; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$c, ¿sientes eso? Noto algo sobrenatural y maligno cerca.', 0), +(@ID, 'esMX', '$c, ¿sientes eso? Noto algo sobrenatural y maligno cerca.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡Sí, es ese orbe que tienes ahí! Es extraño, parece tener diseño de los arakkoa. ¿Estuviste en Grishnath hace poco?$B$BDe acuerdo, eso lo explica, pero me pregunto qué propósito diabólico cumple este objeto. Aunque irradia mal, también parece que, de alguna manera, está conectado con el mundo natural.$B$BDame, permíteme intentar activarlo. El mal es tan fuerte en su interior que hay algún tipo de memoria residual aquí...', 0), +(@ID, 'esMX', '¡Sí, es ese orbe que tienes ahí! Es extraño, parece tener diseño de los arakkoa. ¿Estuviste en Grishnath hace poco?$B$BDe acuerdo, eso lo explica, pero me pregunto qué propósito diabólico cumple este objeto. Aunque irradia mal, también parece que, de alguna manera, está conectado con el mundo natural.$B$BDame, permíteme intentar activarlo. El mal es tan fuerte en su interior que hay algún tipo de memoria residual aquí...', 0); +-- 10826 Marcas de Sargeras +-- https://es.wowhead.com/quest=10826 +SET @ID := 10826; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Tienes alguna insignia de nuestros enemigos, $n?', 0), +(@ID, 'esMX', '¿Tienes alguna insignia de nuestros enemigos, $n?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Tu coraje es fuerte, $gamigo:amiga;. ¡Que todos sepan que eres $gun verdadero aliado:una verdadera aliada; del sacerdocio!', 0), +(@ID, 'esMX', 'Tu coraje es fuerte, $gamigo:amiga;. ¡Que todos sepan que eres $gun verdadero aliado:una verdadera aliada; del sacerdocio!', 0); +-- 10829 Troncárbol debe saber +-- https://es.tbc.wowhead.com/quest=10829 +SET @ID := 10829; +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Saludos, $gpequeño:pequeña; $r. Los pájaros de mis pensamientos me susurraron que ibas a venir.$B$B¿Estás aquí para ayudar a liberar a los árboles del bosque de su maligna posesión?', 0), +(@ID, 'esMX', 'Saludos, $gpequeño:pequeña; $r. Los pájaros de mis pensamientos me susurraron que ibas a venir.$B$B¿Estás aquí para ayudar a liberar a los árboles del bosque de su maligna posesión?', 0); +-- 10830 El exorcismo de los árboles +-- https://es.tbc.wowhead.com/quest=10830 +SET @ID := 10830; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Exorcismo de hojabarba realizado', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'El mal que habita en los árboles está comenzando a filtrarse en todas las cosas naturales del bosque.$B$B¡Debes actuar rápido, $N, antes de que todo se pierda!', 0), +(@ID, 'esMX', 'El mal que habita en los árboles está comenzando a filtrarse en todas las cosas naturales del bosque.$B$B¡Debes actuar rápido, $N, antes de que todo se pierda!', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¡El mal está abandonando el Bosque del Cuervo! ¿Puedes sentirlo, $n?$B$BNos has salvado a todos y a toda la flora de una muerte segura.$B$BTengo cuatro anillos mágicos guardados para ocasiones como esta cuando un héroe realiza alguna hazaña como esta.$B$B¡Y tú eres $gese héroe:esa heroína;! En nombre de todo el Bosque del Cuervo, te doy las gracias.', 0), +(@ID, 'esMX', '¡El mal está abandonando el Bosque del Cuervo! ¿Puedes sentirlo, $n?$B$BNos has salvado a todos y a toda la flora de una muerte segura.$B$BTengo cuatro anillos mágicos guardados para ocasiones como esta cuando un héroe realiza alguna hazaña como esta.$B$B¡Y tú eres $gese héroe:esa heroína;! En nombre de todo el Bosque del Cuervo, te doy las gracias.', 0); +-- 10831 Convertirse en un sastre de tela lunar +-- https://es.tbc.wowhead.com/quest=10831 +SET @ID := 10831; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has creado la muestra de tela lunar primigenia?', 0), +(@ID, 'esMX', '¿Has creado la muestra de tela lunar primigenia?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BEsta es una muestra excelente, $N. Serás $gun:una; excelente sastre de tela lunar.', 0), +(@ID, 'esMX', '$B$BEsta es una muestra excelente, $N. Serás $gun:una; excelente sastre de tela lunar.', 0); +-- 10832 Convertirse en sastre de fuego de hechizo +-- https://es.tbc.wowhead.com/quest=10832 +SET @ID := 10832; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Conseguiste la muestra del ánima abisal?', 0), +(@ID, 'esMX', '¿Conseguiste la muestra del ánima abisal?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BIncluso esta pequeña muestra de la esencia de la criatura irradia poder. Tal vez entendí mal lo que está pasando. No estamos enojando a los espectros tomando energía del medio ambiente. Más bien, ¡los espectros y el entorno son lo mismo!$B$BNo dudes en avisarme si haces más descubrimientos, ahora que te has convertido en $gun:una; sastre de fuego de hechizos.', 0), +(@ID, 'esMX', '$B$BIncluso esta pequeña muestra de la esencia de la criatura irradia poder. Tal vez entendí mal lo que está pasando. No estamos enojando a los espectros tomando energía del medio ambiente. Más bien, ¡los espectros y el entorno son lo mismo!$B$BNo dudes en avisarme si haces más descubrimientos, ahora que te has convertido en $gun:una; sastre de fuego de hechizos.', 0); +-- 10833 Convertirse en un sastre de tejido de sombra +-- https://es.tbc.wowhead.com/quest=10833 +SET @ID := 10833; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Ajustar sintonía con El Altar de las Sombras', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Has usado el poder del cristal para profundizar tu sintonía con el Altar de las Sombras?', 0), +(@ID, 'esMX', '¿Has usado el poder del cristal para profundizar tu sintonía con el Altar de las Sombras?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Puedo ver que tu visita al altar ha sido todo un éxito. Hay una sutil diferencia en ti que muy pocos podrán ver, aunque no cabe ni la menor duda de que ahí está.', 0), +(@ID, 'esMX', 'Puedo ver que tu visita al altar ha sido todo un éxito. Hay una sutil diferencia en ti que muy pocos podrán ver, aunque no cabe ni la menor duda de que ahí está.', 0); +-- 10834 Grillok "Ojosombra" +-- https://es.tbc.wowhead.com/quest=10834 +SET @ID := 10834; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Los malvados orcos del clan Foso Sangrante no respetan ningún límite y solo sus parientes de la Mano Destrozada son un rival para ellos.', 0), +(@ID, 'esMX', 'Los malvados orcos del clan Foso Sangrante no respetan ningún límite y solo sus parientes de la Mano Destrozada son un rival para ellos.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Ah, sí. Igual que quienes pierden una mano o una pierna en la batalla a menudo sienten el dolor de su miembro perdido, me pregunto si Grillok sigue viendo su ojo perdido en sus oscuros sueños...$B$BYo también soñaré con esto y, si la fortuna está de nuestro lado, quizás descubre lo que llevó a Grillok y al clan Foso Sangrante a sucumbir ante los demonios.', 0), +(@ID, 'esMX', 'Ah, sí. Igual que quienes pierden una mano o una pierna en la batalla a menudo sienten el dolor de su miembro perdido, me pregunto si Grillok sigue viendo su ojo perdido en sus oscuros sueños...$B$BYo también soñaré con esto y, si la fortuna está de nuestro lado, quizás descubre lo que llevó a Grillok y al clan Foso Sangrante a sucumbir ante los demonios.', 0); +-- 10835 El boticario Antonivich +-- https://es.tbc.wowhead.com/quest=10835 +SET @ID := 10835; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Buenos días, $n. ¿Cómo es tu estancia en la Península del Fuego Infernal? Confío en que haya sido provechosa...', 0), +(@ID, 'esMX', 'Buenos días, $n. ¿Cómo es tu estancia en la Península del Fuego Infernal? Confío en que haya sido provechosa...', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Ah, ¿un informe de Albreck? Muy bien. La Sociedad Real de Boticarios trabaja febrilmente para determinar cómo los orcos de la Península del Fuego Infernal se convirtieron en orcos viles. Su traición es imperdonable... y debemos asegurarnos de que nuestros amigos orcos siempre estén a salvo de una corrupción futura.', 0), +(@ID, 'esMX', 'Ah, ¿un informe de Albreck? Muy bien. La Sociedad Real de Boticarios trabaja febrilmente para determinar cómo los orcos de la Península del Fuego Infernal se convirtieron en orcos viles. Su traición es imperdonable... y debemos asegurarnos de que nuestros amigos orcos siempre estén a salvo de una corrupción futura.', 0); +-- 10836 Infiltrarse en la Fortaleza Faucedraco +-- https://es.tbc.wowhead.com/quest=10836 +SET @ID := 10836; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Está hecho? Solo espero que no sea demasiado tarde...', 0), +(@ID, 'esMX', '¿Está hecho? Solo espero que no sea demasiado tarde...', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Bien hecho, $n. He descubierto una forma para poder liberar a los dracos esclavizados que son retenidos en la Fortaleza Faucedraco.', 0), +(@ID, 'esMX', 'Bien hecho, $n. He descubierto una forma para poder liberar a los dracos esclavizados que son retenidos en la Fortaleza Faucedraco.', 0); +-- 10837 ¡Al Arrecife del Ala Abisal! +-- https://es.tbc.wowhead.com/quest=10837 +SET @ID := 10837; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Necesito cristales de vid abisal.', 0), +(@ID, 'esMX', 'Necesito cristales de vid abisal.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BTe prepararé los cristales ahora.', 0), +(@ID, 'esMX', '$B$BTe prepararé los cristales ahora.', 0); +-- 10839 Velo Skith: Rocanegra de Terokk +-- https://es.tbc.wowhead.com/quest=10839 +SET @ID := 10839; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'La oscuridad nos rodea. ¿Qué tienes que decir sobre Velo Skith?', 0), +(@ID, 'esMX', 'La oscuridad nos rodea. ¿Qué tienes que decir sobre Velo Skith?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'He oído la explosión desde aquí. No con mis oídos, sino con mi corazón.$B$BSi el toque del naaru bendito, A\'dal, no es suficiente para que los arakkoa se rediman, nada lo será. Aquellos que no se hayan entregado a la Luz son meros sirvientes del mal.$B$BDeben ser destruidos.', 0), +(@ID, 'esMX', 'He oído la explosión desde aquí. No con mis oídos, sino con mi corazón.$B$BSi el toque del naaru bendito, A\'dal, no es suficiente para que los arakkoa se rediman, nada lo será. Aquellos que no se hayan entregado a la Luz son meros sirvientes del mal.$B$BDeben ser destruidos.', 0); +-- 10840 La Tumba de las Luces +-- https://es.tbc.wowhead.com/quest=10840 +SET @ID := 10840; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿Cuántos etéreos has destruido? Espero que sea suficiente para expulsarlos de la Tumba de las Luces.', 0), +(@ID, 'esMX', '¿Cuántos etéreos has destruido? Espero que sea suficiente para expulsarlos de la Tumba de las Luces.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Aquí fuera, en las zonas salvajes de Terrallende, somos débiles y solo tenemos la ayuda de algunos héroes para defender nuestros derechos, pero tú les has hecho tener miedo, $c. Creo que los etéreos tardarán en olvidar el fuerte brazo de $n.', 0), +(@ID, 'esMX', 'Aquí fuera, en las zonas salvajes de Terrallende, somos débiles y solo tenemos la ayuda de algunos héroes para defender nuestros derechos, pero tú les has hecho tener miedo, $c. Creo que los etéreos tardarán en olvidar el fuerte brazo de $n.', 0); +-- 10842 Almas vengativas +-- https://es.tbc.wowhead.com/quest=10842 +SET @ID := 10842; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Presagista vengativo derrotado', `VerifiedBuild` = 0 WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Nos has salvado a todos. ¿Cómo podemos agradecértelo?', 0), +(@ID, 'esMX', 'Nos has salvado a todos. ¿Cómo podemos agradecértelo?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'No te imaginas lo que has hecho, $n. Has salvado a tantos de nosotros de una eternidad de oscuridad... Hay poco que pueda hacer por los vivos y nada que pudiera darte serviría para agradecértelo lo suficiente. Toma lo que te parezca útil.', 0), +(@ID, 'esMX', 'No te imaginas lo que has hecho, $n. Has salvado a tantos de nosotros de una eternidad de oscuridad... Hay poco que pueda hacer por los vivos y nada que pudiera darte serviría para agradecértelo lo suficiente. Toma lo que te parezca útil.', 0); +-- 10843 Desde tiempos olvidados... +-- https://es.tbc.wowhead.com/quest=10843 +SET @ID := 10843; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Los Mok\'Nathal no aceptan el fracaso ni ponen excusas. ¡O vences a tu enemigo, o él te mata!$B$BYa que estás $gparado:parada; frente a mí, ya debes haber matado a Gnosh Brognat.', 0), +(@ID, 'esMX', 'Los Mok\'Nathal no aceptan el fracaso ni ponen excusas. ¡O vences a tu enemigo, o él te mata!$B$BYa que estás $gparado:parada; frente a mí, ya debes haber matado a Gnosh Brognat.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '$B$BLa muerte de Gnosh Brognat es una bendición para todos los Mok\'Nathal. Esto es bueno para ti.$B$BVeamos si podemos poner al límite tu valor un poco más.', 0), +(@ID, 'esMX', '$B$BLa muerte de Gnosh Brognat es una bendición para todos los Mok\'Nathal. Esto es bueno para ti.$B$BVeamos si podemos poner al límite tu valor un poco más.', 0); +-- 10845 Matar a la madre de linaje +-- https://es.tbc.wowhead.com/quest=10845 +SET @ID := 10845; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Aunque a mis ojos no te beneficiarás, no hay vergüenza en admitir que no estás a la altura del desafío de matar a la madre de los dracos inferiores de Cresta Canto.$B$B¿Es eso lo que has venido a decirme?', 0), +(@ID, 'esMX', 'Aunque a mis ojos no te beneficiarás, no hay vergüenza en admitir que no estás a la altura del desafío de matar a la madre de los dracos inferiores de Cresta Canto.$B$B¿Es eso lo que has venido a decirme?', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', '¿No? ¿Mataste a Alatemible? Quizás me equivocaba contigo, $c.$B$BQuizás.$B$BAun así, has matado a los jefes de las tres mayores amenazas a las que nos enfrentamos. Eso es algo de lo que estar $gorgulloso:orgullosa;.$B$BTe ofrezco un regalo en muestra de mi aprecio, pero no dejes que se te suba a la cabeza. Todavía no comprendes del todo lo que significa ser un Mok\'Nathal, y puede que nosotros todavía necesitemos de tus habilidades.', 0), +(@ID, 'esMX', '¿No? ¿Mataste a Alatemible? Quizás me equivocaba contigo, $c.$B$BQuizás.$B$BAun así, has matado a los jefes de las tres mayores amenazas a las que nos enfrentamos. Eso es algo de lo que estar $gorgulloso:orgullosa;.$B$BTe ofrezco un regalo en muestra de mi aprecio, pero no dejes que se te suba a la cabeza. Todavía no comprendes del todo lo que significa ser un Mok\'Nathal, y puede que nosotros todavía necesitemos de tus habilidades.', 0); +-- 10846 Comprender a los Mok'Nathal +-- https://es.tbc.wowhead.com/quest=10846 +SET @ID := 10846; +DELETE FROM `quest_request_items_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_request_items_locale` (`id`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Tenemos muchos enemigos. Algunos los hemos elegido y otros, como el Vehk\'nir, no.$B$BDe todos modos, mataremos a todos sus jefes hasta que ninguno se interponga ante nosotros.', 0), +(@ID, 'esMX', 'Tenemos muchos enemigos. Algunos los hemos elegido y otros, como el Vehk\'nir, no.$B$BDe todos modos, mataremos a todos sus jefes hasta que ninguno se interponga ante nosotros.', 0); +DELETE FROM `quest_offer_reward_locale` WHERE `id` = @ID AND `locale` IN('esES', 'esMX'); +INSERT INTO `quest_offer_reward_locale` (`id`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(@ID, 'esES', 'Los Vekh\'nir son los más inferiores de nuestros adversarios.$B$BAsí que sabes cómo matar a un pájaro grande. Eso no te convierte en $gun guerrero auténtico:una guerrera auténtica;. Eso no te da una comprensión total de nuestros hábitos.$B$BPero es un comienzo.', 0), +(@ID, 'esMX', 'Los Vekh\'nir son los más inferiores de nuestros adversarios.$B$BAsí que sabes cómo matar a un pájaro grande. Eso no te convierte en $gun guerrero auténtico:una guerrera auténtica;. Eso no te da una comprensión total de nuestros hábitos.$B$BPero es un comienzo.', 0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_14' WHERE sql_rev = '1647385217273847981'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_15.sql b/data/sql/updates/db_world/2022_03_18_15.sql new file mode 100644 index 000000000..6e0db2066 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_15.sql @@ -0,0 +1,218 @@ +-- DB update 2022_03_18_14 -> 2022_03_18_15 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_14'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_14 2022_03_18_15 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647201624014939664'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647201624014939664'); + +REPLACE INTO `quest_template_locale` (`ID`, `locale`, `Title`, `Details`, `Objectives`, `EndText`, `CompletedText`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES +(25495,'zhTW','開戰準備','沃金正在整裝,讓戰士們做好準備。他要我叫你去東邊的島上與他和凡妮拉碰面。$B$B他和他的戰士們會從那裡對札拉贊恩發動攻擊。$n,願先祖與你同在。如果不是因為你,這場戰役只會沉睡在陰影之中。和蝙蝠管理員馬恩雷克談談,他就在南邊,他會派隻蝙蝠載你去集結區域。','和蝙蝠管理員馬恩雷克交談以前往集結區域。在戰爭營地東邊的島上和沃金碰面。','','','','','','',0), +(25480,'zhTW','眾魂之舞','是時候了,應該開始想想我們該何時採取行動。勇士烏魯辛告訴我說,他的手下準備好了。你和凡妮拉做得很好,不僅取得敵人的情報,還找來新的盟友。$B$B現在呢,我們來看看兆示,看看我們該何時發動攻擊。$B$B到儀式舞者之環找巫醫赫茲托克,你準備好之後他會儘快開始施行儀式。','當你準備好觀看兆示時,到森金村外面的儀式舞者之環找巫醫赫茲托克。','','到森金村附近找沃金。','眾魂之舞','','','',0), +(14151,'zhTW','緋色紅寶石','緋色紅寶石是北裂境最好的寶石。它在陽光下如水晶玫瑰般閃耀。$b$b在我教你這個轉化技術之前,我要求你進行五次史詩級寶石轉化來做事前準備。你可以轉化你喜歡的寶石,或者重複轉化相同的寶石也行。$b$b當你真的準備好後回來找我。','達拉然的琳西‧黑栓要你用鍊金術成功的轉化5顆史詩級寶石。你可以轉化紫黃晶、祖爾之眼、懼石、王者琥珀和威嚴鋯石。','','到達拉然找琳西·黑栓。','史詩寶石轉化','','','',0), +(14152,'zhTW','海上救援','勇士、浪峰船長和她的船被派往北方襲擊赫魯斯加臺地的科瓦迪爾人,卻被朝聯賽場地而來的科瓦迪爾劫掠艦隊給攔截了。不幸的,科瓦迪爾的船員有著數量上的優勢,並逐漸佔領船隻。$B$B我們需要你往北方到海劫者航道上的浪峰號,就在聯賽場地和赫魯斯加臺地之間,幫助船員擊退來襲的敵人。你可以在航道的東邊看見這艘船。','前往北海殺掉正在攻擊浪峰號的8個科瓦迪爾狂戰士及3個科瓦迪爾魚叉手。','','到寒冰皇冠的銀白聯賽場地找娜拉希·雪曦。','','','','',0), +(14160,'zhTW','功績令狀','用優質的羊皮紙列著許多由$n所達成的成就是珠寶設計界的慣例。$b$b將這份文件繳回給達拉然的提摩西‧瓊斯來換取適當的獎賞。','把功績令狀送給達拉然的提摩西‧瓊斯。','','到達拉然的卡地亞珠寶公司找提摩西·瓊斯。','','','','',0), +(14167,'zhTW','死者的感激','真高興能再次見到朋友和親人,不過也許我做得有些太誇張了……我已經吃光了他們為我準備的一切!$B$B能不能幫我一個忙,再給我拿來一些那種美味的悼念糕餅?我會非常感激你的……$B$B我想,那邊的查普曼正在出售食譜。','弄到悼念糕餅,並把它交給鐵爐堡墓地的歡快的矮人靈魂。$B$B你必須使用一朵橙菊,才能看到那個隱形的靈魂。','','到丹莫羅鐵爐堡大門找附近的歡快的矮人靈魂。','','','','',0), +(14168,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給鐵爐堡墓地中興奮的地精靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','','','','','',0), +(14169,'zhTW','死者的感激','真高興能再次見到朋友和親人,不過也許我做得有些太誇張了……我已經吃光了他們為我準備的一切!$B$B能不能幫我一個忙,再給我拿來一些那種美味的悼念糕餅?我會非常感激你的……$B$B我想,那邊的查普曼正在出售食譜。','弄到悼念糕餅,並把它交給埃索達墓地的歡快的德萊尼靈魂。$B$B你必須使用一朵橙菊,才能看到那個隱形的靈魂。','','到秘藍島找歡快的德萊尼靈魂。','','','','',0), +(14170,'zhTW','感激的亡者','能再次看看朋友和家人的感覺真好,雖然我或許有點太超過了...我已經把他們今天給我準備的東西全吃光了!$B$B我能麻煩你幫我找些美味的亡者麵包嗎?我會非常感激...$B$B我想,那邊的小販有在賣食譜。','拿一些亡者麵包給達納蘇斯墓地中興奮的夜精靈靈魂。$B$B使用橘色金盞花可以看見這些隱形的靈魂。','','','','','','',0), +(14199,'zhTW','死亡證明:黑騎士','我的同事大法師提邁爾要求我給你一個重要的警告。你很快就將參與冰冠冰川中銀色演武場的冠軍的試煉。所以你必須時刻警惕一個可怕的敵人。我們只知道他是黑騎士。$B$B如果你能帶來他的靈魂碎片,肯瑞托就會知道這個可怕的敵人已經被除掉了。但如果你失敗了,那麼你將要付出的很可能是生命的代價。','達拉然的大法師蘭達洛克希望你能帶給他一片黑騎士的靈魂碎片。$B$B這個任務只能在英雄難度中完成。','','到達拉然找大法師朗達拉克。','','','','',0), +(14203,'zhTW','浸水的配方','看起來這似乎是張調配烈酒的破舊配方。也許達拉然的「勸君更進一杯酒」的老闆對它會有興趣...','將浸水的配方交給達拉然城的克利斯蒂‧斯托克頓。','','','','','','',0), +(14349,'zhTW','上級的命令','命令已經傳達下來了,$c。黑暗女王要求我把手下最能幹的特工派回幽暗城去,完成一項高度機密的任務。$B$B不幸的是,我最能幹的特工三年多以前就基本上死絕了,代替他們的是一大群不長腦子的蠢貨。$B$B<納薩諾斯冷冷地注視著你。>$B$B立即到幽暗城去向黑暗女王報告。不要給我添麻煩,$c!','到幽暗城去與希爾瓦娜斯女王談一談。','','','','','','',0), +(14350,'zhTW','紅衣信使','我們不能直接攻擊血色十字軍的指揮官,他們身邊的防禦力量太強大了。不過,抓住貓的辦法並不只一個。如果沒有了軍隊,他們也就沒有了作惡的力量。$B$B亡靈哨兵們一直在搜索那些十字軍在斯坦索姆週邊進行活動的情報。每天都有一份報告從他們的指揮中心被送往提爾之手。$r,那些報告就是我們取勝的關鍵!找到紅衣信使,取得那份報告。將它交給納薩諾斯。','返回東瘟疫之地,找到並殺死紅衣信使,拿到大十字軍的命令。$B$B把命令交給納薩諾斯·凋零者,並等待進一步的指示。','','到東瘟疫之地的瑪瑞斯農場找納薩諾斯·凋零者。','','','','',0), +(14351,'zhTW','希爾斯布萊德之戰','由於你在希爾斯布萊德戰役中的英勇表現,我已經向上級寫了這封褒獎狀以表揚你。$b$b,帶著這封密封的褒獎狀去見幽暗城的布拉貢·血拳吧。你可以滿懷驕傲地去見他,$c。','把達薩利亞的密封褒獎狀交給幽暗城的布拉貢·血拳。','','回幽暗城的皇家區找貝拉戈·血拳。','','','','',0), +(14352,'zhTW','邪惡的盟友','大人:$B$B您很清楚我們可以提供什麼。您佔領貧瘠之地及其它土地的機會非常大,我們也只想要您的幫助作為回報。所謂的幫助不過是讓您授予我們在這一帶行動的自由。$B$B請允許我們說得更遠些。我們擁有強大的力量,並願意與那些希望加入我們的聰明人分享。我當前仍待在剃刀高地外面。$B$B向您致以最高的敬意,$B瑪克林大使','把小卷軸交給幽暗城的布拉貢·血拳。','','回幽暗城的皇家區找貝拉戈·血拳。','','','','',0), +(14353,'zhTW','邪惡的盟友','看樣子,瑪克林就在剃刀高地外面。我們必須將他消滅。$b$b我在奧格瑞瑪的線人告訴我,他們的偵察兵在那裡發現了一些奇怪的跡象。那裡的野豬人身上發生了一些怪異的現象,他們的力量比以前強大了許多。不管天災軍團在那裡做了什麼,我們必須立刻阻止他們。$b$b找到那個瑪克林,消滅他。然後回來向我報告。','將瑪克林大師的信物交給幽暗城的布拉貢·血拳。','','回幽暗城的皇家區找貝拉戈·血拳。','','','','',0), +(14355,'zhTW','深入血色修道院','我駐紮在這的職責之一就是幫助被遺忘者照料他們的邊境,而這也是我要你幫我做的事情,$c。$b$b我也許能活著呼吸,但是血色十字軍會用他們最快的速度來殺戮我的不死族同胞們。他們在這邊是個大麻煩,而你必須幫忙些什麼。$b$b出發到修道院然後除掉高階審判官懷特邁恩以及她的爪牙們。','殺掉高階審判官懷特邁恩、血色十字軍指揮官莫格萊尼、血色十字軍勇士赫洛德和馴犬者洛克希,然後向幽暗城的貝拉戈·血拳回報。','','回幽暗城的皇家區找貝拉戈·血拳。','','','','',0), +(14356,'zhTW','毀滅之力...','聽好,$c。$b$b你可能還不知道奧格瑪出事情了。怒焰裂谷深處有一幫自稱灼刃氏族的暗影議會成員在進行邪惡的儀式。因為我對全是由獸人組成的蠻兵幫我帶來的重要訊息不是很放心,所以我希望你去那裡看看。$b$b他們手上應該有兩本書籍。我不要讓灼刃氏族跟被遺忘者持有那些書。拿到書以後直接帶來給我。','將《暗影法術研究》和《扭曲虛空的魔法》這兩本書交給幽暗城的貝拉戈·血拳。','','回幽暗城的皇家區找貝拉戈·血拳。','','','','',0), +(14409,'zhTW','謹慎的回訪','佔用你一點時間,$c。$b$b世事無常。我們又一次被迫離開了埃雷薩拉斯廢墟,走入外面的世界。我是來研究這座城市的,我不想走遠,但是也許你會對這個差事感興趣。$b$b我的同事準備轉至達納蘇斯去找那裡的高階祭司談談,希望能借此與他們達成共識。帶上這本日記去找神殿中的莫丹特·永影。這東西也許會對他的外交任務有幫助。','將達羅斯的日記帶給身處達納蘇斯的莫丹特·永影。','','去達納蘇斯找月神殿的大法師莫丹特·永影。','','','','',0), +(14418,'zhTW','亡靈哨兵','辛迪加?我竟然從來都沒有想到是他們,看來奧特蘭克的那些貴族們自從背叛聯盟以後真是愈加墮落了。$b$b霍克金斯知道了這些一定會非常高興,另外,既然你在這次偵查行動中表現得這麼出色,那麼,就由你把我們的調查結果給他送過去吧。$b$b啊,我怎麼可能忘了說這個呢!$b$b歡迎加入亡靈哨兵的行列。','將安德隆的帳本交給幽暗城黑暗女王大廳裡的霍克金斯。','','去銀松森林找幽暗城的阿勒瑞克·霍克金斯。','','','','',0), +(14419,'zhTW','亡靈哨兵','這封介紹信足以使安德隆認為你就是他正在等的那位信使。我之前已經見過安德隆了,估計以他那點腦子是根本不會懷疑你的。$b$b我們的領袖懷疑安德隆正在為某些其它的組織提供援助。他想知道那是個什麼組織,而且你要收集到充分的證據。$b$b我要求你在與安德隆的談話中把這些資訊都給套出來,他的店就在煉金房旁邊。','與幽暗城的安德隆·甘特交談。','','去銀松森林找幽暗城的安德隆·甘特。','','','','',0), +(14420,'zhTW','亡靈哨兵','想加入黑暗女王的精英衛隊——亡靈哨兵的話,你首先必須證明自己的價值。$b$b坦城地說吧,$n,你很可能在這種證明自己價值的任務中喪命,所以我勸你最好三思而行。$b$b現在,我有一個任務要你去完成。有一位來往于銀松森林與幽暗城之間的信使,他叫阿斯托·哈德恩,由於特殊的公務需要,我必須得到他身上的一些私人物品。至於採用怎樣的策略去得到這些物品,那是你的事情,不要問我。$b$b如果你的好奇心能小一點,不那麼關心這些物品的用途的話,你會過得更自在一些。完成這個任務之後,我會再和你談的。','得到阿斯托的介紹信,並將其交給盜賊區的米奈特·卡加德。','','到提里斯法林地的羅德隆廢墟找米奈特·卡加德。','','','','',0), +(14421,'zhTW','亡靈哨兵','你在我背後的書架上就可以找到記有你的主子最需要的資訊的帳本。把它交給他們,記得代我問他們好。哦,還有,告訴他們,如果他們覺得與我合作確實不錯,並且還打算按日程繼續合作下去的話,他們最好還是派你來。','將阿斯托的帳本交給幽暗城盜賊區的米奈特·卡加德。','','到提里斯法林地的羅德隆廢墟找米奈特·卡加德。','','','','',0), +(14436,'zhTW','矮人挖掘','有些矮人正準備在西北邊建立一個挖掘點。他們認為地底下埋藏著某些秘密,事實也的確如此,但挖空和破壞土地是不可能理解大地的教誨。$B$B收集矮人的挖掘工具,毀掉那些東西,然後把矮人損壞的工具帶來給我。$B$B你可以在熔爐邊破壞那些工具。你可以在雷霆崖找到熔爐,但任何一個熔爐 -- 甚至是矮人營地的熔爐 -- 都可以用來破壞工具。','收集5個勘察員的十字鎬。$B$B在熔爐砸爛這些勘察員的十字鎬以製造損壞的工具。$B$B將5個損壞的工具交給血蹄村的奧莫‧雷角。','','到莫高雷的血蹄村找奧莫·雷角。','','','','',0), +(14437,'zhTW','大地之母儀祭','要想繼續大地之母儀式,你必須先通過兩個小試煉。現在也正好是你去積累積累經驗的時候了,$n。$b$b到血蹄村去找那裡的艾莫·雷角。你可以在那兒繼續你的冒險歷程並得到雷霆崖的長老們的承認。$b$b把這個圖騰帶給艾莫·雷角。他會讀懂我刻在上面的符號,並説明你繼續修行。$b$b順著這條從納拉其營地通向外面的路快點出發吧,千萬別迷路了。','順著離開納拉其營地的路將鷹風圖騰帶給血蹄村的艾莫·雷角。','','到莫高雷的血蹄村找奧莫·雷角。','','','','',0), +(14438,'zhTW','土地之爭','這片土地上有很多紛爭,$n。我希望你不會像我們的長老一樣經歷那麼多的戰爭,不過我還是希望你去做一件事,讓你可以瞭解到,一個看似不值一提的小小威脅如果不加制止的話,會對我們的領土帶來多大的危害。$B$B白鬃豺狼人已經在西邊的一個洞穴中和血蹄村的南邊紮了營。我們曾試圖和他們交流,卻被他們無禮地拒絕了,而且他們還大肆屠殺莫高雷的野生動物。$B$B現在語言已經不能解決問題了,我們必須有所行動。','殺死15個白鬃豺狼人,然後回到血蹄村找奧莫‧雷角。','','到莫高雷的血蹄村找奧莫·雷角。','','','','',0), +(14439,'zhTW','雷霆崖之旅','你的聲望已遍及我們偉大的城市。任何完成大地之母儀祭的$r都會獲得這份榮譽。$b$b你的最後一個任務便是探訪我們年輕的領袖,貝恩·血蹄,他就居住在雷霆崖的最頂層。','和雷霆崖的貝恩·血蹄談一談。','','','','','','',0), +(14440,'zhTW','大地之母儀祭','你已經通過了大地之母儀祭,在雷霆崖贏得了你自己的一席之地。$b$b不過要維持你現在獲得的榮譽,你還必須不斷證明你自己的價值。$b$b我們生來就是獵手,$n。在莫高雷城下有一隻非常強大的科多獸,我們稱它為阿蘭其亞。把它的角帶來,向我證明你跟蹤和捕獵的能力。','雷霆崖的貝恩·血蹄要你將阿蘭其亞的角帶給他。','','到雷霆崖貝恩·血蹄。','','','','',0), +(14441,'zhTW','加爾魯什的親筆簽名','他們說加爾魯什·地獄咆哮是部落最偉大的英雄之一!等我長大了,我也要成為部落的一名英雄!$B$B你認識加爾魯什嗎,$N?你能幫我個忙嗎?能不能幫我要到一份他的親筆簽名?我不知道該如何開口問他,他那樣偉大的人可能不會理我這樣的人……但你可以!你是一名冒險者,就像他一樣!我敢說他一定會毫不猶豫地給你簽名的!$B$B求求你了?','轉至奧格瑞瑪,為你所監護的兒童取得加爾魯什·地獄咆哮的親筆簽名。','','去找獸人孤兒。','','','','',0), +(24429,'zhTW','難以置信的挑戰','你完成了一項不可能的任務。黑龍公主橫屍在你的面前。取下她的頭顱,把它交給阿納克‧火刃。','將奧妮克希亞的頭顱交給暗影裂口的阿納克‧火刃。','','到奧格瑪找阿納克·火刃。','','','','',0), +(24431,'zhTW','浸水的配方','看起來這似乎是張調配烈酒的破舊配方。也許達拉然的「勸君更進一杯酒」的老闆對它會有興趣...','將浸水的配方交給達拉然城的克利斯蒂‧斯托克頓。','','到達拉然的『勸君更進一杯酒』找克利斯蒂·斯托克頓。','','','','',0), +(24442,'zhTW','科瓦迪爾的作戰計畫','看著手中的攻擊計畫,你發現了一張東部王國和卡林多的地圖,且各個重大的據點都被劃上了標記。當你閱讀其中記載的細節,你發現科瓦迪爾的船長們正策劃著一連串的毀滅性攻擊。$B$B根據記載,這些攻擊即將在喚霧者伊格瓦「祈求迷霧之心」後展開。如果你可以取得位於赫魯斯加臺地西邊,喚霧者的洞穴之中所顯現的預兆,並通知審判者瑪瑞爾‧真心,那或許你就可以延緩他們的攻擊。','取得迷霧之心,並將其與科瓦迪爾攻擊計畫一同交給銀白聯賽場地的審判者瑪瑞爾‧真心。','','到寒冰皇冠的銀白聯賽場地找審判者瑪瑞爾·真心。','','','','',0), +(24857,'zhTW','納拉其營地的危機','在仔細查看了地圖之後,你意識到刺背野豬人的酋長正計畫著對納拉其營地展開進一步攻擊。$b$b鷹風酋長必須馬上得知這個消息。','將刺背野豬人的進攻計畫交給納拉其營地的鷹風酋長。','','到莫高雷的納拉其營地找鷹風酋長。','','','','',0), +(24869,'zhTW','思想淨化','我們本打算在詛咒教派中安排一名線人,以刺探巫妖王的計畫,但是,我們……低估了阿爾薩斯和他的黑暗部下,亡語者女士,的煽動能力。$B$B我們的線人,達爾納文,現在已經投靠他們了。$B$B請務必留意達爾納文的蹤跡。如果你能將他活著帶回來,我們可以嘗試解除詛咒教派對他所做的洗腦工作。','擊敗亡語者女士,同時確保達爾納文活著。','','去找內線米查爾。','拯救達納凡','','','',0), +(24870,'zhTW','保衛城牆','仿佛現在的局勢還不夠瘋狂一樣,我們又要在兩條戰連線作戰了!我們面前是天災軍團,而那些該死的聯盟卻在偷襲我們的後方!$B$B我們在這裡的任務是為我們的飛艇清理出一片安全的著陸點,但在那道城壘的另一側,一個大傢伙正在向所有靠近的東西投擲彈藥。這讓我們的規模船隻根本不能著陸。$B$B說實話,它對於我們來說的確是有些太大了。但你和你的朋友們似乎能夠對付它。','消滅腐爛的冰霜巨人。','','去找庫卡隆將領。','','','','',0), +(24871,'zhTW','保衛城牆','仿佛現在的局勢還不夠瘋狂一樣,我們又要在兩條戰連線作戰了!我們面前是天災軍團,而那些該死的部落卻在偷襲我們的後方!$B$B我們在這裡的任務是為我們的飛艇清理出一片安全的著陸點,但在那道城壘的另一側,一個大傢伙正在向所有靠近的東西投擲彈藥。這讓我們的規模船隻根本不能著陸。$B$B說實話,它對於我們來說的確是有些太大了。但你和你的朋友們似乎能夠對付它。','消滅腐爛的冰霜巨人。','','去找破天號將領。','','','','',0), +(24872,'zhTW','受苦靈魂的安息','你跟你的同伴都帶著這個生命水晶。它內含了來自龍骨荒野的翠綠龍殿中強大的能量,而這也是我能夠長久抵抗此地黑暗魔法的獨家秘方。$B$B當你迎戰辛德拉苟莎的時候,一但她開始呈現虛弱的狀態,就讓你的夥伴們使用這些水晶來誘導出她體內的精華。如果你隨後擊敗了她就會獲得精華,接著就把它帶回到龍骨荒野的龍眠神殿交還。','使用生命水晶來保存辛德拉苟莎的精華。','','','','','','',0), +(24873,'zhTW','藥劑融合','普崔塞德教授一直藏在他骯髒的實驗室裡,配製各種可怕的藥劑來戕害我們。如果我們能取得他的藥劑樣品,我們的研究人員就能研製出解藥。無數生命都將因此而得救。$B$B但問題是,這種藥劑樣品需要讓兩種成份在一個不幸的活體中融合。如果你……不幸成為了這樣的活體,請立刻回到這裡來,讓我們能借助你進行研究。','承受了橙色和綠色毒氣之後,返回到采煉師阿德里安娜那裡。','承受兩種毒氣之後返回。','去找冰冠堡壘的阿德里安娜。','','','','',0), +(24874,'zhTW','鮮血湧動','這些自稱薩萊因的天災吸血者們真讓我毛骨悚然。我們原本派了一名優秀的部下去監視他們,但是今天早上他一時疏忽被那些怪物給抓住了。他現在正在被女王親自刑審,他的淒慘叫聲一直回蕩在血色廳堂。拜託你了,救救他,否則一切都晚了!','在內線米查爾被處死之前將他救出來。','','去找米查爾。','拯救敏加','','','',0), +(24875,'zhTW','思想淨化','我們本打算在詛咒教派中安排一名線人,以刺探巫妖王的計畫,但是,我們……低估了阿爾薩斯和他的黑暗部下,亡語者女士,的煽動能力。$B$B我們的線人,達爾納文,現在已經投靠他們了。$B$B請務必留意達爾納文的蹤跡。如果你能將他活著帶回來,我們可以嘗試解除詛咒教派對他所做的洗腦工作。','擊敗亡語者女士,同時確保達爾納文活著。','','去找內線米查爾。','拯救達納凡','','','',0), +(24876,'zhTW','保衛城牆','仿佛現在的局勢還不夠瘋狂一樣,我們又要在兩條戰連線作戰了!我們面前是天災軍團,而那些該死的部落卻在偷襲我們的後方!$B$B我們在這裡的任務是為我們的飛艇清理出一片安全的著陸點,但在那道城壘的另一側,一個大傢伙正在向所有靠近的東西投擲彈藥。這讓我們的規模船隻根本不能著陸。$B$B說實話,它對於我們來說的確是有些太大了。但你和你的朋友們似乎能夠對付它。','消滅腐爛的冰霜巨人。','','去找破天號將領。','','','','',0), +(24877,'zhTW','保衛城牆','仿佛現在的局勢還不夠瘋狂一樣,我們又要在兩條戰連線作戰了!我們面前是天災軍團,而那些該死的聯盟卻在偷襲我們的後方!$B$B我們在這裡的任務是為我們的飛艇清理出一片安全的著陸點,但在那道城壘的另一側,一個大傢伙正在向所有靠近的東西投擲彈藥。這讓我們的規模船隻根本不能著陸。$B$B說實話,它對於我們來說的確是有些太大了。但你和你的朋友們似乎能夠對付它。','消滅腐爛的冰霜巨人。','','去找庫卡隆將領。','','','','',0), +(24878,'zhTW','藥劑融合','普崔塞德教授一直藏在他骯髒的實驗室裡,配製各種可怕的藥劑來戕害我們。如果我們能取得他的藥劑樣品,我們的研究人員就能研製出解藥。無數生命都將因此而得救。$B$B如果你恰巧遭遇了這種活體樣品,請立刻回到這裡來,這樣我們就能進行研究了。','承受了橙色和綠色毒氣之後,返回到采煉師阿德里安娜那裡。','承受兩種毒氣之後返回。','去找冰冠堡壘的阿德里安娜。','','','','',0), +(24879,'zhTW','鮮血湧動','這些自稱薩萊因的天災吸血者們真讓我毛骨悚然。我們原本派了一名優秀的部下去監視他們,但是今天早上他一時疏忽被那些怪物給抓住了。他現在正在被女王親自刑審,他的淒慘叫聲一直回蕩在血色廳堂。拜託你了,救救他,否則一切都晚了!','在內線米查爾被處死之前將他救出來。','','去找米查爾。','拯救敏加','','','',0), +(24880,'zhTW','受苦靈魂的安息','你跟你的同伴都帶著這個生命水晶。它內含了來自龍骨荒野的翠綠龍殿中強大的能量,而這也是我能夠長久抵抗此地黑暗魔法的獨家秘方。$B$B當你迎戰辛德拉苟莎的時候,一但她開始呈現虛弱的狀態,就讓你的夥伴們使用這些水晶來誘導出她體內的精華。如果你隨後擊敗了她就會獲得精華,接著就把它帶回到龍骨荒野的龍眠神殿交還。','使用生命水晶來保存辛德拉苟莎的精華。','','','','','','',0), +(25055,'zhTW','制服元素','這些元素簡直是不眠不休,朋友。肆虐這塊土地,並且有可能搗毀鐵爐堡的這些地震似乎並不尋常。陶土議會認為我們必須在這些元素將艾澤拉斯撕成碎片以前解決掉它們。我們需要你的協助,朋友。我會給你一個裝有陶土議會補給品的袋子。在裡面你會找到兩件物品,其中一項是元素靈契,而另一樣是淨化的圖騰。使用元素靈契以讓你看到元素的世界。然後使用淨化圖騰安撫那些激動的大地之靈。','風暴召喚者米爾拉要你使用陶土議會所提供的元素靈契和淨化圖騰制服20個激動的大地之靈。','','到鐵爐堡找風暴召喚者米爾拉。','','','','',0), +(25092,'zhTW','制服元素','這些元素簡直是不眠不休,朋友。肆虐這塊土地的地震和有可能燒掉奧格瑪的大火威脅似乎不太正常。陶土議會相信我們必須在這些元素將艾澤拉斯撕成碎片以前解決掉它們。我們需要你的協助,朋友。我會給你一個裝有陶土議會的補給品的袋子。在裡面你會找到兩件物品,其中一項是元素靈契,而另一樣是淨化的圖騰。使用元素靈契以讓你看到元素的世界。然後使用淨化圖騰安撫那些激動的火焰之靈。','大地治癒者諾爾莎拉要你使用陶土議會所提供的元素靈契和淨化圖騰制服20個激動的火焰之靈。','','到奧格瑪找大地治癒者諾爾莎拉。','','','','',0), +(25180,'zhTW','大地石板','不久前,布萊恩從奧杜亞給麥格尼國王發了一則緊急訊息。他說他發現了一個古老的泰坦寶箱,裡頭裝著神秘難解的重要聖物。烏瑞恩王派出他手下最快的船前往北裂境將信差送來。我本該在這裡和他碰面並檢驗那些碑文的,但不管在哪都看不見信差的身影。$B$B麥格尼國王還蠻擔心的,$n。信差到現在都還沒有消息。你願不願意去暴風港看看他到底來了沒?','將大地石板交給鐵爐堡的顧問貝爾格拉姆。','','','','','','',0), +(25181,'zhTW','火焰石板','我正在等候一位從北裂境過來的信差,他身上帶著古老的泰坦寶藏,這些寶藏能撥開烏雲、為我看見的那擾人光景射入陽光。這名薩滿應該要跟最近的飛艇航班一起抵達的,這讓我開始擔心是不是出了什麼問題。$B$B他應該要在奧格瑪大門西南方的飛艇塔和我碰面,不過我不想錯過和大酋長間的會晤機會。你願不願意幫我去看看,那名信差到底是被什麼給耽擱了?','將火焰石板交給奧格瑪的大地治癒者諾爾莎拉。','','','','','','',0), +(25199,'zhTW','基礎命令','喂!看起來你應該能幫得上忙!$B$B如果你要來幫我們達到目的,我們得先訓練訓練你。地精訓練可是相當嚴苛難捱的,所以我希望你做好準備了。$B$B先去找訓練中士蒸汽軸,他會告訴你一些該知道的事情。要確實照著他交付的命令去做,不然你永遠不會成功。$B$B我已經警告過你啦,這可是相當難熬的。等你辦到之後,回來這裡找我。','跟著訓練中士蒸汽軸的口號動作,然後向特瑞德‧炫鼻上尉回報。','','向特瑞德·炫鼻上尉回報。','向訓練中士敬禮','向訓練中士咆哮','為訓練中士歡呼','和訓練中士跳舞',0), +(25212,'zhTW','通風地平線','我們原本以為可以慢慢等諾姆瑞根周圍的輻射散去,不過情況看起來越來越糟。$B$B想要奪回我們的城市,先得確定我們的部隊能安全地走進去。$B$B帶著這些輻射測量器,跳上這邊這台『閃雷』號,然後把測量器丟進諾姆瑞根外部的通風孔裡頭。測量器會直接將輻射等級資料回傳到我這來。','搭乘駕駛員摩卓普拉克的飛行器,將輻射測量器丟進諾姆瑞根周圍的通風口中。','','與駕駛員摩卓普拉克交談。','在諾姆瑞根通風口設置輻射測量器','','','',0), +(25228,'zhTW','災難預言','奧格瑞瑪的街道上出現了一幫傢伙,他們滿嘴都是災難即將降臨的蠢話。這在奧格瑞瑪本不算什麼新鮮事。但這幫傢伙卻讓我相當擔憂。他們的行動很有組織性。暗巷區的許多人都受到了他們的影響。他們的勢力在那裡發展得相當迅速。$B$B我考慮過將他們剿除,或者制止他們的活動。但貿然行動只會讓他們轉入地下。我們需要對他們有更多瞭解。你能不能到暗巷區去,聽聽那些末日預言者都在傳播些什麼?你最好能找到一些與他們的理念相關的文字情報。','在暗巷區聽取一名末日預言者的演講,並取得名為《靈魂之元素火焰》、《萬物的終結對我有何意義?》和《在毀滅的世界中尋找安全與舒適》的小冊子。','','回到奧格瑪的力量谷向血衛士托雷克回報。','聽聽末日預言者的演說','','','',0), +(25253,'zhTW','末日預言','末日先驅走在暴風城的街道上,這已經不是什麼稀奇的事情了,不過最近出現的這群人讓我蠻擔心的。這些傢伙是有組織性的,在舊城區吸引了大批群眾目光,那邊似乎也是他們的集會場所。$B$B我想做點什麼,像是一口氣把他們包圍起來,或是打斷他們的活動之類的,不過這只會驅使他們躲在暗處偷偷活動。我們得找出更多的同黨。你願不願意去趟舊城區?去聽聽看末日預言者們到底在散佈些怎樣的訊息,盡量多收集一些關於他們理念的文宣品帶回來給我。','到舊城區聽聽末日預言者的演說,並且取得《靈魂所需的那把元素之火》、《「世界末日」對我來說代表什麼?》、《在註定毀滅的世界中找尋安全與寬慰》這幾份文宣。','','','聽聽末日預言者的演說','','','',0), +(25254,'zhTW','及時的標記','我們要採取行動,讓公眾對那個預言毀滅的教派失去興趣。但在我瞭解這個組織的幕後操控者之前,我很難決定該如何對這個組織下手。$B$B我已經讓我的部下在奧格瑞瑪行人最密集的地方做好了標記。帶上這些佈告,把它們張貼在有這種標記的地方。它們對於那些下定決心的追隨者們不會有多大作用。但它畢竟是揭露這個教派邪惡面的第一步。部落的敵人已經很多了。所以我們現在更不能任由這些傢伙四處散佈謊言。','在力量穀、暗巷區或者榮譽穀各處張貼5張報警佈告。','','返回奧格瑞瑪的力量穀,去找血衛士托雷克。','告示設置完畢','','','',0), +(25282,'zhTW','及時的標記','我們要採取行動,讓公眾對那個預言毀滅的教派失去興趣。但在我瞭解這個組織的幕後操控者之前,我很難決定該如何對這個組織下手。$B$B我已經讓我的部下在貿易區中行人最密集的地方做好了標記。帶上這些佈告,把它們張貼在有這種標記的地方。它們對於那些下定決心的追隨者們不會有多大作用。但它畢竟是揭露這個教派邪惡面的第一步。部落的敵人已經很多了。所以我們現在更不能任由這些傢伙四處散佈謊言。','在貿易區各處張貼5張報警佈告。','','返回暴風城的貿易區,去找安頓上尉。','告示設置完畢','','','',0), +(25283,'zhTW','研擬講稿','大工匠梅卡托克要我寫篇講稿,他要在開戰前發表一場演說,不過我分辨不出哪篇是好哪篇是壞。$B$B你想,你能不能幫我試一下,看看本地地精居民的反應?這裝置會投射出國王梅卡托克的影像,然後從每篇中挑幾句念出來。$B$B讓我知道哪篇比較好,沒問題吧?','對卡拉諾斯西邊的奧齊‧電環、鋼架補給站的米利‧羽哨、以及卡拉諾斯旅店外面的托格‧鏽鏈使用地精播放裝置。試過所有講稿之後,回去向托比‧柴吉爾回報。','','','對奧齊·電環發表演說','對米利·羽哨發表演說','對托格·銹鏈發表演說','',0), +(25285,'zhTW','進進出出','新的機械坦克已經整備完畢,隨時可以發動攻擊。你準備好要來看看這些狠角色的能耐嗎?!喔你當然準備好了!$b$b首先呢我們要確定的是,你進去之後有辦法出來。在戰鬥中,如果你覺得坦克快要爆炸了,先逃出來再說!我看過許多地精留在裡面的下場...坦克爆炸開來,那些地精也跟著爆開來。$B$B來吧,我已經幫這台坦克添加了彈射座椅的升級。幫我測試一下,好嗎?','測試彈射用機械坦克上的彈射系統。','','','彈射系統測試完畢','','','',0), +(25286,'zhTW','遞送演講稿','好哇,$N,演講稿完成了!它能夠為所有偉大的戰爭作序言……它鼓舞人心,雄辯無礙,能夠為侏儒們清晰地指明方向。再也沒有比這個更優秀的演講稿了!$B$B把這份演講稿交給崔德·火鑽隊長,然後再從他那裡乘坐交通工具,把它交給大工匠梅卡托克!','將演講稿交給鋼架補給站的崔德·火鑽隊長。','','轉至鋼架補給站,同崔德·火鑽交談。','','','','',0), +(25287,'zhTW','演說稿','好了士兵,現在是證明你自身價值的時刻了!$B$B帶著演說稿、搭上我身旁這台飛行器『閃雷』。要去見大工匠梅卡托克,這艘是最快速的飛船了,他現在在等的就是這篇演說稿。$B$B快出發!現在出發!','在鋼架補給站搭乘飛行器『閃雷』去見大工匠梅卡托克,然後把托比的演說稿交給他。','','将演說稿交给大工匠梅卡托克。','','','','',0), +(25288,'zhTW','滲透行動','關於那個奇怪教派的傳聞正在奧格瑞瑪的街巷間四處流傳。但對於它的來源和所作所為,卻沒有人清楚。$N,現在只有一個辦法能夠查清楚這群傢伙的底細。你要去加入他們。$B$B在暗巷區找到一個末日預言者,告訴他你想要入夥。如果你的運氣好,他們會把你引薦給他們的一個領導人,然後你就能知道他們的藏身之地了。你要穿上末日預言者給你的衣服,這樣你才能進入他們的秘密據點。','同奧格瑞瑪暗巷區的一名末日預言者交談,加入他們的教派,然後穿上信徒長袍。','','到奧格瑪外面的野豬農場找監督者金塔克。','加入末日教派','','','',0), +(25289,'zhTW','向前一步……','既然彈射系統性能可靠,那麼我們就可以進行下一步的測試了。這輛坦克有一個特殊的功能:自動規避能力!$b$b我想要你檢查一下它左腿和右腿的伺服系統,還有它的自動規避系統。$b$b這很容易,很快就能完成。','測試高機動型步行坦克的運動性。','','向崔德·火鑽隊長報告你的結果。','左腿電動機測試完畢','右腿電動機測試完畢','迴避動作系統測試完畢','',0), +(25290,'zhTW','滲透行動','現在已經很難讓這個奇怪教派遠離公眾視野了。關於他們的謠言已經傳遍了全城。我想讓你加入那個教派,儘量從他們中間獲取情報。$B$B在舊城區找到一個末日預言者,告訴他,你想要加入他們。那個末日預言者很可能會給你一件他們的制服,並讓你去他們的秘密據點,結識其它教徒。$N,按照他的指示去做。這是取得他們信任的唯一方法。','與暴風城舊城區中的一名末日預言者交談並加入末日教,然後穿上他給你的末日教派新兵長袍。','','','加入末日教派','','','',0), +(25293,'zhTW','失蹤人口','除了那個神秘教派在城市中散佈的混亂和猜疑之外,我們還收到了無數關於失蹤人口的報告。人們的母親、父親、兄弟姐妹都在無緣無故地消失。我有一種感覺,這些失蹤的人可能都在那個教派位於城外的某個基地中。如果我給你一些失蹤者的名字,你是否能在那個教派的一座營地中找到他們?那座營地就在奧格瑞瑪南邊的野豬農場。如果你要進入那座營地,首先要從暗巷區的末日預言者手中得到一件信徒長袍。','穿上教派偽裝,同杜隆塔爾野豬農場中的教徒卡加恩、教徒艾格塔、教徒托卡和教徒洛卡迦交談。','','到奧格瑪找血衛士托雷克。','和教徒卡嘎恩交談。','和教徒阿格塔交談。','和教徒托卡交談。','和教徒羅卡嘎交談。',0), +(25295,'zhTW','開火','安全系統已連線!發動機功能運作正常!現在我們需要的只剩確認槍械是否可以正常射擊。$b$b我想這應該不會太難,$n。背後那座山丘上有台機械坦克,上頭的子彈沒有殺傷力。只要朝附近的靶子射個幾發,然後向我回報就可以了。','利用附近的標的物來測試射擊用機械坦克的武器系統。','','','武器系統測試完畢','','','',0), +(25306,'zhTW','你現在入伍啦!','[ph] 戰爭!','[ph] Log Description','','','彈射系統測試完畢','','','',0), +(25343,'zhTW','主人的計畫','$N,你在這裡幹得很好。不過我們要做的不止是日常工作和傳播消息。相信你在加入我們的時候對我們的任務已經有所瞭解了。$B$B就像你所知道的那樣,這個世界即將結束。沒有準備的人只能痛苦地死去$B$B而我們已經得到了一份贈禮,一個讓自己更加強大的機會。先知戈拜茲正在這座農場東邊的祭壇準備一場祭典。去那裡找他。你可以從他那裡瞭解更多關於我們的知識。','在野豬農場東邊的祭壇瞭解更多關於末日教的計畫。','','到野豬農場找監督者金塔克。','丘加利的天啟','','','',0), +(25347,'zhTW','末日計畫','第一批元素裝置已經準備就緒。你的任務就是要把它們藏在奧格瑪內人口稠密的區域。這些裝置將會在適當的時間放出內部的火元素。不用怕,$N,在釋放出元素之前你會有足夠的時間可以離開。$B$B不要引起任何注意。$B$B<監督者交給你一包裝有數個元素裝置的包裹。這正是血衛士托雷克希望你找到的證據。你應該立即把這些裝置帶回去給他。>','帶著元素裝置到奧格瑪的力量谷找血衛士托雷克。','','帶著元素裝置到奧格瑪的力量谷找血衛士托雷克。','','','','',0), +(25348,'zhTW','阻止暮光之錘','被派進奧格瑪設置這些火元素裝置的人絕對不只你一個。在裡面的元素被釋放出來,讓這座城市化為火海之前,我們得趕快找出其它裝置並且全部關掉。$B$B你對這些裝置熟不熟悉?你有沒有辦法毀掉它們?最好的作法,你必須在裡頭的元素力量達到最高點之前先行將裝置毀掉。若是趁這些元素力量還不完全時釋放它們,你應該就可以輕易地將他們擊敗。那些教徒八成在整座城市都安裝了這種裝置。','破壞元素裝置、釋放被囚禁其中的元素並殺死5個狂怒火元素。','','到奧格瑪的力量谷找血衛士托雷克。','','','','',0), +(25351,'zhTW','警告我們的領袖','你成功地在暮光之錘帶來的威脅中保護了奧格瑪,$N而且沒讓我們的子民流下一滴血。我們的敵人不會安分太久的。我無法想像,丘加利會這麼簡單地承認失敗。$B$B卡爾洛斯·地獄吼是眾人皆知的部落英雄,他會知道該如何處理這件事情。去葛羅瑪許堡的智慧谷找他,去告訴年輕的地獄吼,敵人現身了,為了因應他們的捲土重來,我們必須做好準備。','到奧格瑪葛羅瑪許堡的智慧谷和卡爾洛斯·地獄吼交談。','','','','','','',0), +(25380,'zhTW','散播訊息','歡迎來到我們的農場,$N,。在這邊每個人藉由工作維持$g他的:她的;生活所需。有些人會照料牲畜,有些人會負責建築方面的事情,也有一些人會去人群中傳佈我們的訊息,我覺得這個地方對你來說是個很好的出發點。$B$B拿著這塊板子,上面寫的是闡述我們信念的簡短文字。戴上這塊板子,去拜訪奧格瑪城門外面的東飛艇塔和西飛艇塔、以及南邊的剃刀嶺。','戴上末日訊息板,拜訪東飛艇塔、西飛艇塔、以及剃刀嶺。','','到野豬農場找監督者金塔克。','在東飛艇塔散播訊息','在西飛艇塔散播訊息','在剃刀嶺塔散播訊息','',0), +(25393,'zhTW','行動:諾姆瑞根','對諾姆瑞根的波狀攻擊馬上就要展開了,而機電師瑟瑪普拉格和他的部下將會受到制裁!我們放任瑟瑪普拉格太久了,他待在深處毒化著我們的家園,被一群感染輻射的墮落軍隊所保護著。$B$B不消片刻,這次攻擊行動就要展開了!做好準備,新人,這場仗對懦弱的人來說可不好打。','協助國王梅卡托克對諾姆瑞根發動突襲。','','到地精區找國王梅卡托克。','取回諾姆瑞根地表的控制權','','','',0), +(25414,'zhTW','失蹤人口','除了那個神秘教派在城市中散佈的混亂和猜疑之外,我們還收到了無數關於失蹤人口的報告。人們的母親、父親、兄弟姐妹都在無緣無故地消失。我有一種感覺,這些失蹤的人可能都在那個教派位於城外的某個基地中。如果我給你一些失蹤者的名字,你是否能在那個教派的一座營地中找到他們?那座營地就在城門外西南方的明鏡湖果園。如果你要進入那座營地,首先要在舊城區找到一名末日預言者,通過他加入那個教派,並從他手中得到一件信徒長袍。','穿上末日教信徒長袍,同艾爾文森林中明鏡湖果園的教徒萊瑟琳、教徒卡伊瑪、教徒維曼和教徒奧倫交談。','','返回暴風城的貿易區,去找安頓上尉。','和教徒蕾瑟琳交談','和教徒凱馬交談','和教徒威曼交談','和教徒奧盧恩交談',0), +(25416,'zhTW','主人的計畫','$N,你在這裡幹得很好。不過我們要做的不止是日常工作和傳播消息。相信你在加入我們的時候對我們的任務已經有所瞭解了。$B$B就像你所知道的那樣,這個世界即將結束。沒有準備的人只能痛苦地死去$B$B而我們已經得到了一份贈禮,一個讓自己更加強大的機會。先知塔拉索正在這座果園北邊的祭壇準備一場祭典。去那裡找他。你可以從他那裡瞭解更多關於我們的知識。','在明鏡湖果園北邊的祭壇瞭解更多關於末日教的計畫。','','轉至明鏡湖果園,去找先知席蘭德拉。','丘加利的天啟','','','',0), +(25417,'zhTW','末日教計畫','第一批元素設備已經準備好了。你的任務就是將它們藏在暴風城人口密集的地方。等時刻一到,這些設備就會爆發出它們的元素力量。不要擔心,$N,那時你早已經到達安全地點了。$B$B注意不要引起任何人的注意。$B$B<那名監工遞給你一個裝了幾個元素設備的包袱。這正是安頓上尉想要得到的證據。你應該儘快把這些設備交給他。>','將元素設備交給暴風城貿易區的安頓上尉。','','將元素設備交給暴風城貿易區的安頓上尉。','','','','',0), +(25418,'zhTW','阻止暮光之錘','除了你以外,肯定還有其它人受命在暴風城中安放這種包含有火元素的設備。我們必須找到並拆除這些設備。否則它們裡面的風元素被釋放出來,整座城市都可能被風暴摧毀。$B$B你是否瞭解那種設備,有能力摧毀它們?你需要在它們裡面的風元素力量增長到巔峰之前打開它們。如果你能及時打開它們,裡面的風元素就會很弱小,容易被擊敗。你要在貿易區、教堂廣場和法師區尋找那些設備。快些行動吧!','打破元素設備,釋放其中的元素。你必須擊敗5個暴怒的風元素。','','返回暴風城的貿易區,去找安頓上尉。','','','','',0), +(25425,'zhTW','警告烏瑞恩國王','$N,你戰勝了暮光之錘,成功地保衛了暴風城,同時又沒有讓我們的人民有任何犧牲。當然,我們的敵人不會善罷甘休。古加爾不可能如此輕易就接受失敗。$B$B你必須把這個消息帶給瓦裡安·烏瑞恩國王。到暴風要塞的王座大廳去覲見他。讓我們的國王知道,我們的敵人已經出現,我們必須準備好抵抗他們的反擊。','同暴風要塞的瓦裡安·烏瑞恩國王交談。','','','','','','',0), +(25444,'zhTW','完美間諜','一無所知地走進去實在是很蠢很蠢,所以我要製造一些小小間諜,送進去幫沃金收集情報,他想知道島上發生的事情。$B$B如果你願意的話,來幫我個忙。我跟你說要怎麼做。你先到森金村附近的樹蔭下抓幾隻青蛙。$B$B抓到之後,帶到我的崗哨圖騰那邊,讓我的視覺和青蛙進行視覺同調。','捕捉5隻森金蛙,在凡妮拉的崗哨圖騰讓凡妮拉和捕捉到的青蛙進行視覺同調。','','到暗矛海灘找凡妮拉。','','被施法的森金青蛙','','',0), +(25445,'zhTW','札拉贊恩之殞','戰鬥的時刻到來了!我們很快就要朝群島出發,希望你們已經做好萬全準備。$B$B札拉贊恩沒多少時間可活了。','擊殺札拉贊恩,協助沃金奪回回音群島。','','到森金村外找沃金。','擊殺劄拉贊恩','','','',0), +(25446,'zhTW','起飛!放蛙!','青蛙準備好了,接下來我需要你幫我把青蛙送到島上去。$B$B去森金村的東面找蝙蝠管理員馬恩雷克,他幫沃金管理著手下斥候要用的蝙蝠,他可以借你一隻蝙蝠,讓你飛去島上。$B$B帶著這袋青蛙。我已經請求聖靈給予指引。聖靈會用煙指引你,最需要在哪些地方放置耳目。在蝙蝠上的時候,從袋子中把青蛙丟到白色煙幕的位置。','在騎乘蝙蝠的狀態下,使用青蛙袋在回音群島的標記地點上面放置12隻同調蛙。','','到森金村找凡妮拉。','放置同調蛙','','','',0), +(25461,'zhTW','搜尋志願者','沃金把他的戰鼓交給了我,讓我在這負責訓練新人。唯一的問題是,沒什麼新人可以讓我訓練。$B$B我在想,我可以把他的鼓借給你用一用,你去剃刀嶺以沃金之名敲擊戰鼓,可以吧?就算只有幾名食人妖受到感召願意加入這次行動,也會使狀況不一樣的。你說服新人加入之後,把他們帶回來接受訓練。去南邊和蝙蝠管理員馬恩雷克交談,他會借你一隻蝙蝠,讓你飛去剃刀嶺。','在剃刀嶺使用沃金的戰鼓召集5名食人妖居民。$B$B和蝙蝠管理員馬恩雷克交談,要求他派蝙蝠送你去剃刀嶺。','','到森金村找勇士烏魯辛。','招募的巨魔志願者','將食人妖志願者帶去勇士烏魯辛那裡','','',0), +(25470,'zhTW','虎群仕女','還記得那些成為我耳目的青蛙嗎?跟你說,青蛙們發現了件有趣的事情。$B$B在東南方的一座島上,他們發現虎群似乎懼怕著某隻老虎。我從來沒看過像這隻老虎一樣的東西。$B$B牠以虎類的本能狩獵著,但是心思卻像是個人。這個強悍的靈魂可以成為我們強大的盟友。$B$B我會讓猛虎之靈降臨在你身上。運用牠的天賦能力去找出這隻老虎,挑戰牠。看看你能不能贏得牠的援助,讓牠在奪回群島之戰中助我們一臂之力。','在受到猛虎之靈影響的這段時間,將猛虎族母引出巢穴,在戰鬥中盡可能地發揮你所獲得的新能力。','','到森金村找沃金。','挑戰猛虎族母','','','',0), +(13705,'zhTW','艾克索達驍士','歡迎,勇士。我已經聽過你不少的功績。你打算要加入艾克索達的聯賽代表隊嗎?$B$B你可以繼續磨練戰技並提升位階,就如同先前一樣。一旦你獲得艾克索達勇士的頭銜時,你的侍從將會能夠攜帶我們的旌旗進入戰鬥。','如果你想成為一位艾克索達驍士,再去和克羅索斯談談。','','','','','','',0), +(13733,'zhTW','一位勇士的出現','恭喜,$n。你已經熟習了各種戰鬥,並且克服了一切挑戰。無庸置疑,你已經準備好跟我們最優秀的戰士一起對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13734,'zhTW','一位勇士的出現','恭喜,$n。你已經熟習了各種戰鬥,並且克服了一切挑戰。無庸置疑,你已經準備好跟我們最優秀的戰士一起對抗其他主城的勇士。$B$B審判者瑪瑞爾‧真心想跟你談談,$n,並且正式宣佈你加入技擊大賽。','跟銀白聯賽場地的審判者瑪瑞爾‧真心談談。','','','','','','',0), +(13825,'zhTW','蛤蜊大餐','','','','','','','','',0), +(13826,'zhTW','釣魚專家納特‧帕格','','','','','','','','',0), +(13827,'zhTW','寶藏!','','','','去找海盜的寶箱。','','','','',0), +(13830,'zhTW','魅影鬼魚','任何一個北裂境有點水準的釣客都知道什麼是小巧的長印魚。牠不適合食用,但有時對鍊金師很有用。$b$b然而,在休拉薩盆地的大河之心,有一種隱匿的魚躲藏在長印魚中。魅影鬼魚。一離開水中,牠們會漸漸變得透明直到完全消失。有些人猜想他們回到了休拉薩,而其他人則更為...迷信。$b$b我要你去抓這種魚並用任何方法解開牠的謎團!','達拉然的瑪西亞‧切斯要你揭開魅影鬼魚的秘密。','揭開幽靈魚的秘密','到達拉然找瑪西亞‧切斯。','','','','',0), +(13832,'zhTW','下水道的珠寶','真的很難以置信,大多數的人在達拉然下水道垂釣只為了想釣大老鼠與變異魚。特別是當這些水裡充滿了無價的珠寶:被那些心碎的傻瓜、小偷和粗心大意的醉鬼丟棄的。$b$b要訣就是讓你的釣鉤沉到底部,然後釣到東西時別拉太用力。試試看,$n。我願意拿我自己的小飾品來交換你釣到的東西。','達拉然的瑪西亞‧切斯要你帶給她一塊被腐蝕的首飾。','','到達拉然找瑪西亞·切斯。','','','','',0), +(13833,'zhTW','血濃於水','血牙這種躁動的魚是治療感染傷口的藥方之一。如果你想要的話,我們可以做一些。$b$b一如其名,牠們相當嗜血。我只知道捕捉這些小惡魔的方法就是製造一灘血池後來釣牠。$b$b把你自己搞得全身都是血吧!在北風凍原殺掉一隻野獸,然後跳進水裡。這樣會立刻沖掉血跡,然後造出一個完美的釣魚點。','達拉然的瑪西亞‧切斯要你帶給她5尾血牙狂魚。','','到達拉然找瑪西亞·切斯。','','','','',0), +(13834,'zhTW','危險的美味','最棒的釣魚往往也是最危險的。那些無恥的傢伙總是在吹噓冬握湖有著最多也最豐富的漁獲量。$b$b事實上,那是唯一一個能釣到傳說中駭魚的地方:一種超致命也超美味的魚。幫我帶點來吧,我們可談點生意。','達拉然的瑪西亞‧切斯要你帶給她10尾駭魚。','','到達拉然找瑪西亞·切斯。','','','','',0), +(13836,'zhTW','少了隻胳膊!','我最近收到消息,在達拉然監獄中發生了件不幸的意外事故,監獄中有個狠毒的罪犯切斷守衛的手臂並丟進水中。$b$b急救診所說,只要我們能把斷掉的手臂帶回去,他們就有辦法接回去。$b$b你在監獄外面的水邊釣魚也很長一段時間了,我敢用我最心愛的釣魚竿打賭,手臂一定會浮出水面。找到那條手臂,然後把它帶給達拉然的歐莉珊拉。她知道該怎麼處理。','達拉然的仁慈的歐莉珊拉要你把斷裂的手臂帶給她。','','到達拉然城的急救你優先找仁慈的歐莉珊拉。','','','','',0), +(13840,'zhTW','重複使用','「咕咕嘎...咕咕嘎...咕咕!$B$B咕咕嘎...咕咕嘎...咕咕。」$B$B小雞抬頭看著你,然後伸出爪子探到地面上。你認為它是在拼寫某個單字,但是又不確定是什麼單字...難道是指薩丁農場嗎?在你發出詢問之前,小雞轉過身子,做它自己的事兒去了。','找一些特殊的雞飼料,把它交給友好的小雞。當你找到小雞的時候,在餵食它特殊的雞飼料之前對它做出拍動翅膀的表情。(使用/cheer 命令)','','找雞。','','','','',0), +(13843,'zhTW','廢物販賣機器人製造器','在資料庫中搜索了一番之後,你找到了一張有關廢物販賣機器人製造器的結構圖。正好你自己也是工程學方面的專家,因此你可以學習這張結構圖,以備將來製造自己的廢物販賣機器人製造器。','使用創世者的圖書館中的原型機控制台。','','','','','','',0), +(13845,'zhTW','密封的毒藥瓶','這個毒藥瓶看起來特別危險。也許達拉然的某個人會對它有興趣。','把這個密封的毒藥瓶交給達拉然下水道的鍊金師席尼斯拉。','','到達拉然的黑市找鍊金師席尼斯拉。','','','','',0), +(13887,'zhTW','毒皮暴掠龍蛋','你對毒皮暴掠龍的毒已經免疫而可以安全的駕馭毒皮暴掠龍並觸碰牠們的蛋。毒皮暴掠龍非常兇殘,所以必須從雛龍就開始訓練。$B$B如果你想要一隻毒皮暴掠龍坐騎,必須先要有一顆未孵化的蛋。沼澤地裡散佈著許多暴掠龍巢。去找一些蛋殼顏色較淡的龍蛋--那些蛋即將孵化出雛龍。$B$B如果你帶幾個來給我,我可以讓你保留一個,並指導你如何養大小暴掠龍。','帶4個毒皮暴掠龍蛋給沼澤地東南邊的莫維克。','','到安戈洛環形山的沼澤地找莫維克。','','','','',0), +(13889,'zhTW','嗷嗷待哺','毒皮小暴掠龍殷切地看著你,並在沙土上畫了幾個圖形。$B$B圖很潦草,但能分辨出那是雙帆龍、劍龍和翼手龍。畫完後,牠抬頭看著你,露出牙齒做出咬食的動作。$B$B你的毒皮小暴掠龍一定很想嚐嚐這些動物的鮮肉。殺死安戈洛環形山中任何種類的雙帆龍、劍龍或翼手龍,並以牠們的肉餵食你飢餓的小暴掠龍。','你的毒皮小暴掠龍要你餵牠15片新鮮的恐龍肉。','','找毒皮小暴掠龍交談。','用新鮮的恐龍肉餵食毒皮小暴掠龍','','','',0), +(13903,'zhTW','格里什幼蟲','毒皮小暴掠龍殷切地看著你,並在沙土上畫了幾個圖形。$B$B那些畫看起來像是數種巨大的昆蟲,可能是格里什異種蟲。畫完後,牠用短小的前臂指著圖然後做出咬食的動作並舔了舔嘴唇。$B$B牠必定是要你去安戈洛環形山南部中央的巨痕谷收集異種蟲肉。當你收集到肉時,餵食你飢餓的毒皮小暴掠龍。','你的毒皮小暴掠龍要你餵牠10片異種蟲肉。','','找毒皮小暴掠龍交談。','用異種蟲肉餵食毒皮小暴掠龍','','','',0), +(13904,'zhTW','煮熟?熱炒?還是生吃?','毒皮小暴掠龍指指餓得咕嚕咕嚕叫的胃引起了你的注意。牠在沙土上畫出了異種蟲,並在旁邊多畫了幾個小圓圈。牠指著小圓圈並殷切地看著你。$B$B這些圓圈一定是指異種蟲蛋。在塔納利斯西邊與安戈洛環形山交界的腐化之巢應該是個能找到小暴掠龍所要的蛋的好地方。','你的毒皮小暴掠龍要你餵牠12個異種蟲蛋。','','找毒皮小暴掠龍交談。','用異種蟲蛋餵食毒皮小暴掠龍','','','',0), +(13905,'zhTW','炎鵬羽毛','小暴掠龍看了你一會兒,彷彿在思考你是否會瞭解。牠在沙地上畫了一對羽毛,然後用爪子指著要黏在牠的肘部和膝蓋。$B$B牠看起來不太餓,那羽毛是要做什麼?$B$B牠一定是想要用它來裝飾自己,就像你看過的其他迅猛龍一樣。炎鵬有著最大最華麗的羽毛,它們大多盤據在塔納利斯西部,灌木谷的東北邊,那些大型生物的骨骸附近。','你的毒皮小暴掠龍要你帶給牠5片炎鵬全羽。','','找毒皮小暴掠龍。','','','','',0), +(13906,'zhTW','一暝大一吋','在你的專業照養之下,毒皮小暴掠龍長得非常快。當他們不斷成長,乳牙會被恆齒替換。如果你保留牠們脫落的乳牙,會比較容易知道牠們何時大到可以訓練為坐騎。$B$B你的毒皮暴掠龍會讓你知道他想要什麼,所以要多關心牠。當牠的所有乳牙都脫落之後,帶著牠以及鞍座所需的材料來找我,剩下的部份就交給我吧。','帶著20顆毒皮乳牙、毒皮小暴掠龍、20塊符文布、20張硬甲皮以及80玫金幣去找安戈洛環形山沼澤地東南邊的莫維克。','','到安戈洛環形山的沼澤地找莫維克。','','','','',0), +(13908,'zhTW','好龍配好鞍','你的毒皮暴掠龍強壯而又健康。看來你的確是有了一個好戰友。等我給你做好了鞍子和韁繩,你就要準備騎上它了。就像你一樣,這些騎乘用具必須進行特殊加工,好讓它們能夠承受毒皮暴掠龍所產生的劇毒。$B$B你要給我拿來一些硬甲皮,符文布,以及一些用來購買其它必需物品的資金。這樣我立刻就能給你作出毒皮暴掠龍鞍了。','給位於安戈洛環形山沼澤地東南的莫維克帶去20塊硬甲皮、20張符文布和80金幣。','','到安戈洛環形山的沼澤地找莫維克。','','','','',0), +(13914,'zhTW','炎鵬的羽毛','這只幼崽一直在看著你,仿佛正在考慮你是否能明白它的意思。它在土地上用爪子畫出兩根羽毛的圖案,然後又指了指綁在它臂肘和膝蓋上的東西。$B$B它看上去並不餓,那麼它要羽毛幹什麼?$B$B它一定是想用羽毛做裝飾,就像你在其它暴掠龍身上見到過的那樣。炎鵬身上的羽毛是所有羽毛之中最大的。這種猛禽生活在塔納利斯西部,灌木穀的東北方。它們總喜歡聚集在巨大野獸的屍骨周圍。','你的毒皮暴掠龍幼崽想要你給它弄來5根炎鵬的羽毛。','','去找毒皮暴掠幼龍。','','','','',0), +(13915,'zhTW','饑餓的小龍','這只毒皮暴掠龍幼崽用期待的眼神看著你,然後又在土地上畫出了一些圖案。$B$B這些圖案都很粗糙,不過你還是能依稀從裡面看出雙帆龍,劍龍和翼手龍的形象。這只龍崽畫完之後,又向你抬起了頭,還露出了牙齒,做了一個咬的動作。$B$B你的毒皮暴掠龍幼崽一定是想要吃這些恐龍的肉了。你要在安戈洛環形山找到並獵殺這些雙帆龍、劍龍和翼手龍,取得恐龍肉,喂飽你饑餓的龍崽。','你的毒皮暴掠龍幼崽想要你喂它15片鮮嫩的恐龍肉。','','去找毒皮暴掠幼龍。','用新鮮的恐龍肉餵食毒皮小暴掠龍','','','',0), +(13916,'zhTW','水煮、爆炒還是生吃?','這只毒皮暴掠龍崽的肚皮發出“咕咕”的響聲。它揮舞胳膊,引起了你的注意。然後它在土地上畫出一些異種蠍,又在蠍子下面畫了一些小的橢圓形。$B$B那一定是異種蠍的卵。你可以到位於塔納利斯西部,靠近安戈洛環形山邊界的腐化之巢去。那裡可是一個收集異種蠍卵的好地方。','你的毒皮暴掠龍幼崽想要你喂它12枚異種蠍卵。','','去找毒皮暴掠幼龍。','用異種蟲蛋餵食毒皮小暴掠龍','','','',0), +(13917,'zhTW','格裡什幼蟲','這只毒皮暴掠龍幼崽用期待的眼神看著你,然後又在土地上畫出了一些圖案。$B$B這些圖案所表現的似乎是一些大型昆蟲,一些格裡什異種蠍。龍崽畫完以後,就用前臂指指圖畫,憑空猛咬了一口,又舔舔嘴唇。$B$B它一定是想讓你去位於安戈洛環形山南部中心處的巨痕穀,在那裡收集一些異種蠍肉。得到異種蠍肉之後,就用它來餵養你饑餓的龍崽吧。','你的毒皮暴掠龍幼崽想要你喂它10塊異種蠍肉。','','去找毒皮暴掠幼龍。','用異種蟲肉餵食毒皮小暴掠龍','','','',0), +(13931,'zhTW','又過了一年,又一個紀念品。','我們不但供應每個人啤酒,同時還贈送酒杯!只要用合法的方式就可以換取漂亮的紀念杯!這張兌換卷給你。$b$b跟啤酒節營地後方的布力克斯談話。他是個怪傢伙,甚至現在也還戴著那副護目鏡。他會幫你處理那張兌換券,而所有啤酒節的交易也都可以找他。','把啤酒節酒杯兌換券交給啤酒節營地後方的布力克斯‧修械。','','','','','','',0), +(13932,'zhTW','又是一年美酒飄香時。','美酒節除了賽羊會外,還有一項傳統,那就是飲酒狂歡!如果你有時間的話,就將這張禮品券交給貝爾比吧。她就在美酒節營地的後面。要是你看不見她,沒關係,她一定會看見你的。$B$B無論如何,將禮品券交給她,你就能免費領到一隻美酒節酒杯。她還出售各種美酒哦。','在美酒節營地的貝爾比處兌換禮品券。','','去找丹莫羅的貝爾比。','','','','',0), +(13959,'zhTW','返回孤兒院','我們和你一起度過了最棒的時光,$n。我們好希望你現在可以當我們的$g爸爸:媽媽;,但你必須帶我們回去找達拉然孤兒監護員阿瑞雅了。$B$B也許你改天能再來找我們?我們喜歡去看看冬鰭的小朋友們和龍后。沒有人會相信我們會見了一位偉大之神的!$B$B我們會想念你的,$n。我們保證改天會寫信給你,好嗎?','帶著你的被監護人回到達拉然孤兒院並把神諭者孤兒哨交回給達拉然的孤兒監護員阿瑞雅。','','到達拉然找孤兒監護員阿瑞雅。','','','','',0), +(13960,'zhTW','返回孤兒院','你知道嗎?其實你沒有那麼壞,$n。你帶恰嘎去很多有趣的地方。恰嘎遇到了很多新朋友而且經歷了其他小獾狼怪沒經歷過的。$B$B你,還有赫米特‧奈辛瓦里,以及落雪林地的小獾狼怪都是最好的新朋友。也許改天你會帶一本荊棘谷的青山給恰嘎?恰嘎保證有空時也會寫信告訴你近況。也許有時候會對大舌頭小孩友善一點。$B$B恰嘎要回去照顧孤兒的女士阿瑞雅那裡了,回到紫色的人類城市。','帶著你的被監護人回到達拉然孤兒院並把獾狼怪孤兒哨交回給達拉然的孤兒監護員阿瑞雅。','','到達拉然找孤兒監護員阿瑞雅。','','','','',0), +(13986,'zhTW','一位受傷的同僚','我想你也很清楚,$c,這裡的戰鬥越來越激烈了。我們依然堅守著,但不是每個人都毫髮無傷。$b$b我們其中一員戰士,阿波尼·亮鬃,因為手臂上的傷口感染而飽受煎熬。她被帶回雷霆崖休養。看來她在混亂中把盾牌遺落在前線了,然而 - 你能帶著我們衷心的祝福把盾牌拿回去給她嗎?我們很想念她的笑容。$b$b你能夠在雷霆崖的長者高地找到她。','把這個破損的部族盾牌拿給雷霆崖長者高地的阿波尼·亮鬃。','','到莫高雷找阿波尼·亮鬃。','','','','',0), +(13997,'zhTW','如果在我戰鬥的時候,你讀到了這個……','丹是這世界上最厲害的程式設計師...是指在魔獸世界裡!$B$B你不覺得以前當我在戰鬥中時你不能跟我說話這種設定很奇怪嗎?再也不會這樣了,朋友,現在丹在我的生物旗標中做了一個重大的改良!$B$B你將能和我一起在戰鬥中消滅那些醜惡生物直到永遠,為此慶祝吧!','ELM暈眩目標要求你為了丹及偉大的正義殺掉5個ELM攻擊者!','','到設計者之島找ELM暈眩目標。','','','','',0), +(14032,'zhTW','清剿狗頭人營地','你的第一個任務是清剿一群惡徒,$N。一群狗頭人正在北方的那片森林中為非作歹。到那裡去,消滅你找到的狗頭人歹徒,削減他們的數量,讓我們最終能將他們徹底趕出北郡。','消滅8個狗頭人歹徒,然後回去見治安官瑪克布萊德。','','去找治安官瑪克布萊德。','','','','',0), +(14082,'zhTW','在艾克索達學習騎術','這本介紹著騎術訓練與購買坐騎的小手冊是阿露恩送來的。$B$B阿露恩就在藍謎島的艾克索達入口處。','到藍謎島的艾克索達外頭,把這本小手冊繳回給阿露恩。','','','','','','',0), +(14083,'zhTW','在丹莫洛學習騎術','這本介紹著騎術訓練與購買坐騎的小手冊是奧薩姆‧鐵角送來的。$B$B奧薩姆就在丹莫洛的凍石農場,沿著鐵爐堡外的路向東走即可抵達。','到丹莫洛的凍石農場,把這本小手冊繳回給奧薩姆‧鐵角。','','','','','','',0), +(14084,'zhTW','在丹莫洛學習騎術','這本介紹著騎術訓練與購買坐騎的小手冊是賓吉‧羽哨送來的。$B$B賓吉就在鋼架補給站,丹莫洛卡拉諾斯的東北方。','到丹莫洛的鋼架補給站,把這本小手冊繳回給賓吉‧羽哨。','','','','','','',0), +(14085,'zhTW','在達納蘇斯學習騎術','這本介紹著騎術訓練與購買坐騎的小手冊是賈薩姆送來的。$B$B賈薩姆就在達納蘇斯的塞納里奧區。','到達納蘇斯的塞納里奧區,把這本小手冊繳回給賈薩姆。','','','','','','',0), +(14086,'zhTW','馳騁在奧格瑞瑪','這本關於騎乘訓練和坐騎購買的廣告小冊子是由基爾達派發出來的。$B$B你可以在奧格瑞瑪的榮譽谷找到基爾達。','將這本小冊子交給奧格瑞瑪榮耀谷的基爾達。','','到艾薩拉找基爾達。','','','','',0), +(14087,'zhTW','在莫高雷學習騎術','這本介紹著騎術訓練與購買坐騎的小手冊是卡爾‧雷詠送來的。$B$B卡爾就在莫高雷的血蹄村。','到莫高雷的血蹄村,把這本小手冊繳回給卡爾‧雷詠。','','','','','','',0), +(14089,'zhTW','在提里斯法林地學習騎術','這本介紹著騎術訓練與購買坐騎的小手冊是維爾瑪‧瓦納姆送來的。$B$B維爾瑪就在提里斯法林地的布瑞爾。','到提里斯法林地的布瑞爾,把這本小手冊繳回給維爾瑪‧瓦納姆。','','','','','','',0), +(14100,'zhTW','大地之環的遺跡','$N,你已經掌握了許多技能,能夠自如地控制四大元素了。而你要努力去做的就是維持四大元素的平衡。只要經過不懈的聯繫,你就能只攜帶一枚聖物,而不必再攜帶全部四件圖騰了。$B$B同奧格瑞瑪智慧谷的戈圖拉·林風談談,在那裡繼續磨礪你控制元素的技藝吧。','將你的四大元素圖騰交給奧格瑞瑪的戈圖拉·林風。','','到奧格瑞瑪找戈圖拉·林風。','','','','',0), +(14103,'zhTW','泰坦鋼粉末','','','','到水晶之歌森林找提摩西·瓊斯。','','','','',0), +(14111,'zhTW','大地之環的遺跡','$N,你已經掌握了許多技能,能夠自如地控制四大元素了。而你要努力去做的就是維持四大元素的平衡。只要經過不懈的練習,你就能只攜帶一枚聖物,而不必再攜帶全部四件圖騰了。$B$B同鐵爐堡大熔爐附近的先知安努談談,在那裡繼續磨礪你控制元素的技藝吧。','帶著你的四件圖騰去見鐵爐堡的先知安努。','','到鐵爐堡找先知安努。','','','','',0), +(13433,'zhTW','糖果桶','','','','','','','','',0), +(13434,'zhTW','糖果桶','','','','','','','','',0), +(13435,'zhTW','糖果桶','','','','','','','','',0), +(13436,'zhTW','糖果桶','','','','','','','','',0), +(13437,'zhTW','糖果桶','','','','','','','','',0), +(13438,'zhTW','糖果桶','','','','','','','','',0), +(13439,'zhTW','糖果桶','','','','','','','','',0), +(13448,'zhTW','糖果桶','','','','','','','','',0), +(13382,'zhTW','持續轟炸:逝望山谷','戰鬥必須繼續!你有新指令來了,前往轟炸地與其後的逝望山谷進行長程轟炸 -- 等你準備好,找凱倫要一架轟炸機,把那些炸彈和火箭通通倒在天譴軍團頭上!','碁伯里·基羅赫茲要你殺掉50個轟炸地步兵、20個石像鬼伏擊者、12個霜育哨兵與12個天譴戰爭機器。','','到寒冰皇冠的奧多薩:荒寂之門找碁伯里·基羅赫茲。','','','','',0), +(13381,'zhTW','下個目標','帶好你的幸運符,$n,選篇你最喜歡的禱告辭。下個任務就要測試你的反應跟耐性,好像你丈母娘要來一樣! $B$B找凱倫·諾談話再索取一架轟炸機。駕著它飛越轟炸地深入逝望山谷。這次的目標更多,天上飛的跟地上爬的都有。看好你的護盾,子彈通通上膛,$n!結束以後回來找我。','碁伯里·基羅赫茲要你殺掉轟炸地步兵、石像鬼伏擊者、霜育哨兵與天譴戰爭機器。','','到寒冰皇冠的奧多薩:荒寂之門找碁伯里·基羅赫茲。','','','','',0), +(13242,'zhTW','當黑暗降臨','黑暗來臨了,$N。永恆之王的預兆中浮現了一個悲劇。很快地,你的人民將被仇恨與憤怒所吞噬。烽煙即將升起。$B$B紅龍軍團已經竭盡所能,而他們的任務現已到了盡頭。未來將掌握在艾澤拉斯的生民手中。$B$B遺憾地,你的任務將從這份哀慟中開始。今天一個父親痛失愛子,你必須背負著這弔聞。搜集薩魯法爾的戰甲回報老薩魯法爾。','由戰場上蒐集薩魯法爾的戰甲帶回給薩魯法爾霸王,他就在北風凍原的戰歌堡。','','到北風凍原的戰歌堡找薩魯法爾霸王。','','','','',0), +(13083,'zhTW','黑暗中的一絲微光','<十字軍布理登布萊特的外袍,靜靜地安躺在箱子的底部,咆哮的北風從箱子的縫隙灌入,一方衣角輕擺著。>$B$B提里奧會想看到這個的,偉大戰士的最後遺物。$B$B到寒冰皇冠的十字軍之巔找大領主提里奧·弗丁。','將十字軍布理登布萊特的外袍帶給十字軍之巔的大領主提里奧·弗丁。','','到寒冰皇冠的十字軍之巔找大領主提里奧·弗丁。','','','','',0), +(13052,'zhTW','空中監視','你幫助威斯修理飛行器,這件事做得很好。$B$B如果你想進一步幫助我們,現在有個奇怪的異常氣象正從西北方逐漸逼近。我已經派了位駕駛員在處理這件事了,但我想他可能會需要一位副駕駛。$B$B如果你想要幫忙的話,你可以飛去湖畔起降場。告訴維克是我派你去的。','卡爾微特教授要你飛到湖畔起降場,與駕駛員維克交談。','','','','','','',0), +(12872,'zhTW','諾甘農之殼','發明者圓盤資料傳輸中。$B$B圓盤資料傳輸完畢。$B$B緊急伽瑪射線措施準備中。$B$B緊急伽瑪射線措施準備完成。請以充能圓盤啟動諾甘農之殼管理員梅查頓。一旦您的身分確認完成,管理員會立刻給您諾甘農之殼。$B$B祝您擁有愉快的千年。','從管理員梅查頓那取回諾甘農之殼。','','用布萊恩的通訊器聯絡布萊恩·銅鬚。$B$B要是你遺失了布萊恩的通訊器,跟霜堡的考古學家安多林談話。','','','','',0), +(12863,'zhCN','表示感谢','啊!感谢你来到这里,朋友。$B$B根据你慌张的眼神和颤抖的双手来判断,我想你是个新手吧。看来你应该先去拜访一下我们那些热情好客的东道主!$B$B我们有一些额外的医疗物资……说实话,我们从未预料到能找到如此安逸的营地。去把这箱医疗物资交给格罗萨吧,如果你愿意的话,也尽可能地去帮帮他们。我们可不希望被别人看成不懂得知恩图报的混球。','将医疗物资箱交给冰霜堡的格罗萨·硬须。','','去风暴峭壁找冰霜堡的格罗萨·硬须。','','','','',0), +(12331,'zhTW','糖果桶','','','','','','','','',0), +(12332,'zhTW','糖果桶','','','','','','','','',0), +(12333,'zhTW','糖果桶','','','','','','','','',0), +(12334,'zhTW','糖果桶','','','','','','','','',0), +(12335,'zhTW','糖果桶','','','','','','','','',0), +(12336,'zhTW','糖果桶','','','','','','','','',0), +(12337,'zhTW','糖果桶','','','','','','','','',0), +(12338,'zhTW','糖果桶','','','','','','','','',0), +(12339,'zhTW','糖果桶','','','','','','','','',0), +(12340,'zhTW','糖果桶','','','','','','','','',0), +(12341,'zhTW','糖果桶','','','','','','','','',0), +(12342,'zhTW','糖果桶','','','','','','','','',0), +(12343,'zhTW','糖果桶','','','','','','','','',0), +(12344,'zhTW','糖果桶','','','','','','','','',0), +(12345,'zhTW','糖果桶','','','','','','','','',0), +(12346,'zhTW','糖果桶','','','','','','','','',0), +(12347,'zhTW','糖果桶','','','','','','','','',0), +(12348,'zhTW','糖果桶','','','','','','','','',0), +(12349,'zhTW','糖果桶','','','','','','','','',0), +(12350,'zhTW','糖果桶','','','','','','','','',0), +(12351,'zhTW','糖果桶','','','','','','','','',0), +(12352,'zhTW','糖果桶','','','','','','','','',0), +(12353,'zhTW','糖果桶','','','','','','','','',0), +(12354,'zhTW','糖果桶','','','','','','','','',0), +(12355,'zhTW','糖果桶','','','','','','','','',0), +(12356,'zhTW','糖果桶','','','','','','','','',0), +(12357,'zhTW','糖果桶','','','','','','','','',0), +(12358,'zhTW','糖果桶','','','','','','','','',0), +(12359,'zhTW','糖果桶','','','','','','','','',0), +(12360,'zhTW','糖果桶','','','','','','','','',0), +(12313,'zhTW','挽救啤酒節!','挽救啤酒節!和黑鐵酒吧的啤酒節間諜交談。','和黑鐵酒吧的啤酒節間諜交談。','','','','','','',0), +(11622,'zhTW','裂鞭的秘密','或許有人能夠解開這個謎團,$r。謠傳科瓦迪爾人讓一些納迦女祭司苟活下來,關在神殿中。$B$B高階女祭司薇迦一定很樂意把那些科瓦迪爾不速之客給趕走。或許她能告訴你更多石板文字的意義。','在北風凍原的裂鞭遺跡找到薇迦。','','','','','','',0), +(11488,'zhTW','博學者殿堂','歡迎來到太陽之井,$c。盡快把你自己安頓下來,還有很多事情等著我們!$b$b我?是的,我有些小事等你去做,不過我很懷疑你能不能勝任。$b$b我們有個線民潛伏在博學者殿堂收集情報,但他最近失去音訊,我開始有點擔心。$b$b殿堂就在東邊的高處。他收集的情報對我們的任務來說非常重要。$b$b你認為你能解決嗎,$r?','破碎之日會所的主教雷索爾要去你搜尋博學者殿堂,找到提里斯,一個血精靈間諜。','','','','','','',0), +(11405,'zhTW','召喚無頭騎士','許多陰鬱的蠟燭點綴在南瓜祭壇旁邊,嘲諷般地笑著...','帶著一根陰鬱蠟燭去零散翻覆的泥土那邊。','','到血色修道院找零散翻覆的泥土。','','','','',0), +(11261,'zhTW','斯考恩征服者!','你已經將派我們來要做的工作都完成了,$c。我得承認你是個戰鬥好手,你的族人並不如我一開始所想的那麼奇特。$B$B灰燼圖騰酋長一定很想聽到你成功的消息,不過,假使你決定在這多待一會,不論理由是什麼,我會繼續和你並肩作戰的。','將冬蹄紋章交給冬蹄營地的灰燼圖騰酋長。','','到凜風峽灣的冬蹄營地找灰燼圖騰酋長。','','','','',0), +(11260,'zhTW','阻止飛升!','這份巨大的卷軸是由龍皮做成。翻開它超過10呎長的內容,你可以看到塗抹在鱗狀表面的圖像描述著一道神秘的維酷儀式。$B$B一位維酷的族長,被某種外表像天使一般的東西環繞著,飛升上天。一個神秘,黑暗的人影隱約出現在圖像的背景中。$B$B你體內一陣刺痛告訴你斯考恩的族長正在附近著手準備進行這個儀式。你必須阻止這件事!斯考恩的頂端有一大堆的柴堆,就在族長的會所前。','在族長的柴堆附近使用維酷飛升卷軸將他召喚出來並殺掉他。之後,由於儀式的類型,你確定冬蹄營地的主母安卡會對這份卷軸相當感興趣。','','到凜風峽灣的冬蹄營地找主母安卡。','','','','',0), +(11259,'zhTW','厄運的哨塔','當我們經過斯考恩,我們一定要摧毀這些哨塔。$B$B只要你看過這些塔,你會看到塔頂安排了許多施法者。太靠近這些哨塔你的厄運就會降臨。$B$B然而,我們可以請求冬蹄營地的蠍尾獅進行空襲。要這麼做,我們得夠靠近,好讓你在塔頂施放煙霧信號彈。$B$B不過別太靠近就是了。','冬蹄勇者告訴你使用勇者信號彈標記出所有的四座斯考恩哨塔,以利空襲成功。','','去找冬蹄勇士。如果他不在附經那麼請使用你的冬蹄徽章召喚他。','標記西北方哨塔','標記東部哨塔','標記西南方哨塔','標記東南部哨塔',0), +(11258,'zhTW','燒啊,斯考恩,燒啊!','灰燼圖騰酋長命令我燒毀這裡的許多房子。$B$B不過,既然你是老大,這個責任就落到你肩上了,$n。$B$B我建議燒掉那兩間長屋,還有兵營,都在斯考恩低窪的地區。我們要做的,就是潛進裡面,用火炬點燃建築物。','冬蹄勇者建議你使用勇者火炬,在斯考恩東北與西北邊的長屋以及兵營縱火。','','去找冬蹄勇者。如果他不在附經那麼請使用你的冬蹄徽章召喚他。','點燃西北方的長屋','點燃東北方的長屋','放火燒掉兵營','',0), +(11257,'zhTW','駭人聽聞的必要工作','長老告訴我們,維酷族人可能會死而復生;不是你們說的天譴軍那種活死人喔,而是一種不同的不死生物。$B$B但千萬不能冒險。$B$B喏,把我的砍刀帶著。當我們通過這個地方以後,把我們殺掉的維酷人屍骨剁碎。$B$B我花了一整個早上把刀子磨利,就算是他們的骨頭也應該砍得斷。','冬蹄勇者要你使用勇者砍刀支解20名斯考恩的溫特斯考恩部族維酷人。','','去找冬蹄勇者。如果他不在附經那麼請使用你的冬蹄徽章召喚他。','肢解溫特斯考恩維酷人','','','',0), +(11164,'zhTW','長牙劫掠者','嘿,老兄!你是新來的對吧?讓我請你幫個忙。$b$b霸德正在重塑他的森林食人妖偽裝。說來已經快要完成了,只差最後一點。就剩那些長牙。$B$B我的剝皮天賦都被浪費了,那些噁心的食人妖長牙真讓我反胃。$b$b幫我帶10根食人妖長牙給我行嗎,兄弟?','皮格蒙需要你從祖阿曼的食人妖那邊收集10根森林食人妖長牙。把東西帶給他,他就在鬼魂之地的霸德營地。','','到鬼魂之地找皮格蒙。','','','','',0), +(11165,'zhTW','食人妖中的食人妖','聽著,兄弟,還有些別的事情得幫幫老皮格蒙。$b$b祖剛,我那無能表弟,被困在祖阿曼裡面。他一定還活著 - 我昨晚還看見帶著他印記的信號彈!$b$b我實在應該任由他爛在那裡面,因為他害我捲入這場大麻煩,但那個老小子還欠我好大一筆錢。$b$b想辦法把他弄出來吧,然後收錢的事就交給我!','皮格蒙希望你去尋找並且幫助他的表弟祖剛,人應該在祖阿曼中的某處。','','','','','','',0), +(11132,'zhTW','承諾,承諾...','我神秘的理論證實有大量的財寶藏在祖阿曼的謠言。$b$b每個人都可以有坐騎與豪宅!首先首先,你得要賺到自己的那一份,畢竟...$b$b我們先前的活動並沒有預期中的順利。事實上,我的地圖,還有向我借地圖的員工都失蹤了。他們那時在跟蹤一個叫做納羅拉克的食人妖。$b$b別管那些員工,但我需要我的地圖!要是成功的話,你一定會因為協助霸德·奈德瑞克揭開祖阿曼的秘密而名留青史!','戰斧嶺的霸德·奈德瑞克希望你能從高階祭司納羅拉克的露臺那邊找回他的地圖。','','到鬼魂之地找霸德·奈德瑞克。','','','','',0), +(11130,'zhTW','閃亮閃亮的東西!','過來過來,$G夥計:寶貝兒;!讓我老格裡伏塔看看那些閃亮閃亮的東西……$b$b嗯嗯,嘿,不錯不錯,但應該還有更好的。對,對,好上許多的。$b$b<格裡伏塔向你斜過身來,低聲耳語道。>$b$b很多地方呢,有許多許多寶貴的閃亮閃亮的小玩意,但你得知道哪裡有才行!不過今天呢,可就是你的幸運日了。我認識一個能幫你忙的傢伙,可以讓你找到無數亮閃閃的東西,多得你都拿不動。$b$b去吧,去找我的老朋友巴德,他就在祖阿曼附近。你呢,就跟他說是老格裡伏塔派你去的,他就會讓你參加他的新計畫啦。','格裡伏塔要求你將他的便箋交給幽魂之地的巴德,他就在祖阿曼外。','','到鬼魂之地找霸德·奈德瑞克。','','','','',0), +(11129,'zhTW','凱爾失蹤了!','幫幫我,$n!我最寶貝的寵物,凱爾跑丟了!我只知道牠平常會在血蹄村附近亂跑,牠現在一定是迷了路又餓著肚子。$B$B你願意幫我找到牠並且餵牠嗎?只要牠吃飽了,牠就會安靜下來並且回家來。$B$B你需要去找食物來餵牠。牠最喜歡的就是嫩陸行鳥肉了,在東邊有不少陸行鳥。你只需要獵殺一隻陸行鳥,並且拿牠那多汁的肉給凱爾。你要是看見凱爾在村子裡,將肉放在地上,牠一定會過來找你的。','莫高雷地區血蹄村的亞哈伯‧麥蹄希望你幫忙餵餵他寶貝的狗狗,狂亂的凱爾。$B$B餵凱爾吃嫩陸行鳥肉,然後回去找亞哈伯‧麥蹄。','','到莫高雷找亞哈伯·麥蹄。','餵飽凱爾','給凱雷餵食','','',0), +(11102,'zhTW','轟炸任務','你能化身烏鴉飛行...那又怎樣!你曾經在飛行的時候轟殺地上的東西嗎?想試試看嗎?$B$B北邊的煉冶場:憤怒,還有南邊的煉冶場:驚駭都是我的眼中釘,也對歐格利拉的和平造成威脅。對禦天者發射的滿天惡魔火砲使得我們無法前往他們的煉冶場進行破壞行動。$B$B你想證明你的能力嗎?拿著這些炸彈然後去炸毀他們的砲彈堆吧。小心別讓他們把你給射下來了!','使用禦天者炸彈摧毀15個惡魔砲彈堆。','','到劍刃山脈的禦天者前哨找天空士官樊德麗。','摧毀惡魔砲彈堆','','','',0), +(11100,'zhTW','指揮官阿克斯','龍喉只敢在我們的防守鬆懈時攻擊我們。如果他們在我們準備好的時候攻擊我們只會慘敗。$B$B我要你引他們來,$n。$B$B<希拉點點頭。>$B$B對...一個陷阱。帶著他們霸主給你的信號槍並將它送給指揮官阿克斯。他就在建築物外面站崗。','將龍喉信號槍帶到影月谷交給薩塔祭壇的指揮官阿克斯。','','到影月谷的薩塔祭壇找指揮官阿克斯。','','','','',0), +(11064,'zhTW','龍喉競賽:老邁克喬的民謠','別讓我的灰髮騙了你,蠻兵。我仍然是比你厲害十倍的騎手!別以為老狗就玩不出新把戲。$B$B現在你要做的就是跟隨我並試著不要被擊下你的坐騎。如果你可以做到,我就會承認失敗。$B$B等你準備好我們就起飛。','跟隨莫格‧老邁克喬並試著待在你的飛行坐騎上。如果你擊敗了莫格‧老邁克喬就將你的勝利回報給影月谷,龍喉營地的傑‧諾斯利。','擊敗莫爾戈·泥齒','到影月谷的虛空之翼岩架找傑‧諾斯利。','','','','',0), +(11026,'zhTW','驅逐惡魔','朋友,你到達的時間真是太完美了!我們真的需要幫助。你會得到一個非常稀有的物品作為回報,這樣你我兩方都能得到好處。$B$B我們已經不再是凶暴的巨魔了,不過附近的惡魔們威脅要侵擾我們和禦天者。對抗惡魔的問題是,他們一旦被殺死,就會以一個新的軀體重新回來!$B$B不過,如果你使用這個水晶來召喚一個驅逐傳送門,當他們在傳送門附近死亡時,他們的精華就會被抽走,並且放逐回他們的老家!','使用驅逐水晶來放逐劍刃山脈上煉冶場:憤怒與煉冶場:驚駭中的惡魔。','','到劍刃山脈的歐格利拉找克朗克。','驅逐惡魔','','','',0), +(11001,'zhTW','擊敗烏鴉神','在對付烏鴉神一事上,我們已經沒有時間浪費了。你必須將精華灌注的月亮石帶到一個具有強大魔力的地方,引誘烏鴉神離開對他而言是安全的翡翠夢境。$B$B前往塞司克大廳將月亮石鑲在烏鴉之爪上。這個地點位於鷹王的大廳之前的一個密室裡。$B$B我們必須讓安祖相信他的信徒已經聚集起來準備迎接他降臨這個世界。等他現身的時候,別放過他!','殺死烏鴉神並且回到塞納里奧避難所的莫西斯·語翼那裡。$B$B此任務只能在英雄難度的地城內完成。','','到贊加沼澤的塞納里奧避難所找莫西斯·語翼。','','','','',0), +(10999,'zhTW','見一個殺一個','我要8顆穴居怪的石牙。','我要8顆穴居怪的石牙。','','找喬·蘭姆西。','','','','',0), +(10994,'zhTW','尋找月亮石','如果能將三種精華與某種罕見的寶石——比如南國之怒月亮石——相結合,它們所釋放的能量就應該可以引出安蘇。$B$B眼下惟一的問題是南國之怒月亮石非常稀有,據說只有在艾薩拉的懸崖邊才能找到這種寶石。去艾薩拉的懸崖瀑布附近尋找吧。$B$B昨晚,有一隊暗夜精靈在搜尋南國之怒月亮石的過程中慘遭不幸。他們的船隻仍然停泊在河岸邊,他們就是在那裡看到月亮石的。多留心一點,在艾薩拉一岸仔細尋找吧。','將一塊南國之怒月亮石交給塞納裡奧庇護所的莫希斯·輕翼。','','到贊加沼澤的塞納里奧避難所找莫西斯·語翼。','','','','',0); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_15' WHERE sql_rev = '1647201624014939664'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_16.sql b/data/sql/updates/db_world/2022_03_18_16.sql new file mode 100644 index 000000000..79464fecf --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_16.sql @@ -0,0 +1,30 @@ +-- DB update 2022_03_18_15 -> 2022_03_18_16 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_15'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_15 2022_03_18_16 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647391921098550500'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647391921098550500'); + +-- Update target for quest credit +UPDATE `smart_scripts` SET `target_type` = 21, `target_param1` = 5 WHERE `entryorguid` = 7207 AND `id` = 1; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_16' WHERE sql_rev = '1647391921098550500'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_17.sql b/data/sql/updates/db_world/2022_03_18_17.sql new file mode 100644 index 000000000..66219b613 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_17.sql @@ -0,0 +1,31 @@ +-- DB update 2022_03_18_16 -> 2022_03_18_17 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_16'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_16 2022_03_18_17 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647192157346705100'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647192157346705100'); + +UPDATE `creature` SET `position_z`=2.05 WHERE `guid`=35251; +UPDATE `creature` SET `position_z`=7.93 WHERE `guid`=34164; +UPDATE `creature` SET `position_z`=0.71 WHERE `guid`=37376; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_17' WHERE sql_rev = '1647192157346705100'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_18.sql b/data/sql/updates/db_world/2022_03_18_18.sql new file mode 100644 index 000000000..2c1391aa3 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_18.sql @@ -0,0 +1,34 @@ +-- DB update 2022_03_18_17 -> 2022_03_18_18 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_17'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_17 2022_03_18_18 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647218276224332700'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647218276224332700'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 1449 AND `id` IN (7, 8); +DELETE FROM `smart_scripts` WHERE `entryorguid` = 1514 AND `id` = 5; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1449, 0, 7, 0, 20, 0, 100, 0, 349, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Witch Doctor Unbagwa - On Quest Complete - Set Faction 495'), +(1449, 0, 8, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 2, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Witch Doctor Unbagwa - On Just Died - Set Faction 35'), +(1514, 0, 5, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 2, 35, 0, 0, 0, 0, 0, 10, 1219, 1449, 0, 0, 0, 0, 0, 0, 'Mokk the Savage - On Just Died - Set Faction 35 to Doctor'); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_18' WHERE sql_rev = '1647218276224332700'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_19.sql b/data/sql/updates/db_world/2022_03_18_19.sql new file mode 100644 index 000000000..336e57862 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_19.sql @@ -0,0 +1,30 @@ +-- DB update 2022_03_18_18 -> 2022_03_18_19 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_18'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_18 2022_03_18_19 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1643931984499831200'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1643931984499831200'); + +UPDATE `gossip_menu` SET `TextId`=9192 WHERE `MenuID`=6648 AND `TextID`=9190; +UPDATE `conditions` SET `SourceEntry`=9192 WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=6648 AND `SourceEntry`=9190; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_19' WHERE sql_rev = '1643931984499831200'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_18_20.sql b/data/sql/updates/db_world/2022_03_18_20.sql new file mode 100644 index 000000000..fd0484c73 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_18_20.sql @@ -0,0 +1,30 @@ +-- DB update 2022_03_18_19 -> 2022_03_18_20 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_19'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_19 2022_03_18_20 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647208425086920700'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647208425086920700'); + +UPDATE `creature_template` SET `minlevel` = 25, `maxlevel` = 26 WHERE `entry` = 37984; +UPDATE `creature_template` SET `minlevel` = 33, `maxlevel` = 34 WHERE `entry` = 38006; + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_18_20' WHERE sql_rev = '1647208425086920700'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_21_00.sql b/data/sql/updates/db_world/2022_03_21_00.sql new file mode 100644 index 000000000..f1d2f5a03 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_21_00.sql @@ -0,0 +1,29 @@ +-- DB update 2022_03_18_20 -> 2022_03_21_00 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_18_20'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_18_20 2022_03_21_00 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1647791446104793800'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1647791446104793800'); + +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|512 WHERE `entry` IN (10184,36538); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_21_00' WHERE sql_rev = '1647791446104793800'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/data/sql/updates/db_world/2022_03_21_01.sql b/data/sql/updates/db_world/2022_03_21_01.sql new file mode 100644 index 000000000..6c67d32c2 --- /dev/null +++ b/data/sql/updates/db_world/2022_03_21_01.sql @@ -0,0 +1,29 @@ +-- DB update 2022_03_21_00 -> 2022_03_21_01 +DROP PROCEDURE IF EXISTS `updateDb`; +DELIMITER // +CREATE PROCEDURE updateDb () +proc:BEGIN DECLARE OK VARCHAR(100) DEFAULT 'FALSE'; +SELECT COUNT(*) INTO @COLEXISTS +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'version_db_world' AND COLUMN_NAME = '2022_03_21_00'; +IF @COLEXISTS = 0 THEN LEAVE proc; END IF; +START TRANSACTION; +ALTER TABLE version_db_world CHANGE COLUMN 2022_03_21_00 2022_03_21_01 bit; +SELECT sql_rev INTO OK FROM version_db_world WHERE sql_rev = '1643077401563937639'; IF OK <> 'FALSE' THEN LEAVE proc; END IF; +-- +-- START UPDATING QUERIES +-- + +INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1643077401563937639'); + +UPDATE `gameobject_loot_template` SET `Chance`= 25 WHERE `Entry`=9677 AND `Item` IN (10715, 10717, 10718, 10722); + +-- +-- END UPDATING QUERIES +-- +UPDATE version_db_world SET date = '2022_03_21_01' WHERE sql_rev = '1643077401563937639'; +COMMIT; +END // +DELIMITER ; +CALL updateDb(); +DROP PROCEDURE IF EXISTS `updateDb`; diff --git a/src/common/Collision/Management/MMapMgr.cpp b/src/common/Collision/Management/MMapMgr.cpp index d7beeb3c0..e1e64ac9f 100644 --- a/src/common/Collision/Management/MMapMgr.cpp +++ b/src/common/Collision/Management/MMapMgr.cpp @@ -141,7 +141,7 @@ namespace MMAP uint32 packedGridPos = packTileID(x, y); if (mmap->loadedTileRefs.find(packedGridPos) != mmap->loadedTileRefs.end()) { - LOG_DEBUG("maps", "MMAP:loadMap: Asked to load already loaded navmesh tile. {:03}{:02}{:02}.mmtile", mapId, x, y); + LOG_ERROR("maps", "MMAP:loadMap: Asked to load already loaded navmesh tile. {:03}{:02}{:02}.mmtile", mapId, x, y); return false; } diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h index fec93713d..0155d0ddb 100644 --- a/src/common/Debugging/Errors.h +++ b/src/common/Debugging/Errors.h @@ -56,7 +56,7 @@ AC_COMMON_API std::string GetDebugInfo(); #define WPAssert(cond, ...) do { if (!(cond)) Acore::Assert(__FILE__, __LINE__, __FUNCTION__, GetDebugInfo(), #cond, ##__VA_ARGS__); } while(0) #define WPAssert_NODEBUGINFO(cond) do { if (!(cond)) Acore::Assert(__FILE__, __LINE__, __FUNCTION__, "", #cond); } while(0) -#define WPFatal(cond, ...) do { if (!(cond)) Acore::Fatal(__FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); } while(0) +#define WPFatal(cond, ...) do { if (!(cond)) Acore::Fatal(__FILE__, __LINE__, __FUNCTION__, #cond, ##__VA_ARGS__); } while(0) #define WPError(cond, msg) do { if (!(cond)) Acore::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) #define WPWarning(cond, msg) do { if (!(cond)) Acore::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) #define WPAbort(...) do { Acore::Abort(__FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); } while(0) diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index 0c29dade5..ccb63cf7e 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -75,9 +75,8 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_DEL_IP_NOT_BANNED, "DELETE FROM ip_banned WHERE ip = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_ACCOUNT_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, ?, ?, 1)", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_ACCOUNT_NOT_BANNED, "UPDATE account_banned SET active = 0 WHERE id = ? AND active != 0", CONNECTION_ASYNC); - PrepareStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM, "DELETE FROM realmcharacters WHERE acctid = ? AND realmid = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_REALM_CHARACTERS, "DELETE FROM realmcharacters WHERE acctid = ?", CONNECTION_ASYNC); - PrepareStatement(LOGIN_INS_REALM_CHARACTERS, "INSERT INTO realmcharacters (numchars, acctid, realmid) VALUES (?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(LOGIN_REP_REALM_CHARACTERS, "REPLACE INTO realmcharacters (numchars, acctid, realmid) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_SUM_REALM_CHARACTERS, "SELECT SUM(numchars) FROM realmcharacters WHERE acctid = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_ACCOUNT, "INSERT INTO account(username, salt, verifier, expansion, joindate) VALUES(?, ?, ?, ?, NOW())", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_REALM_CHARACTERS_INIT, "INSERT INTO realmcharacters (realmid, acctid, numchars) SELECT realmlist.id, account.id, 0 FROM realmlist, account LEFT JOIN realmcharacters ON acctid=account.id WHERE acctid IS NULL", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h index 85fada57c..3a9bb4a82 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h @@ -59,9 +59,8 @@ enum LoginDatabaseStatements : uint32 LOGIN_SEL_ACCOUNT_BY_ID, LOGIN_INS_ACCOUNT_BANNED, LOGIN_UPD_ACCOUNT_NOT_BANNED, - LOGIN_DEL_REALM_CHARACTERS_BY_REALM, LOGIN_DEL_REALM_CHARACTERS, - LOGIN_INS_REALM_CHARACTERS, + LOGIN_REP_REALM_CHARACTERS, LOGIN_SEL_SUM_REALM_CHARACTERS, LOGIN_INS_ACCOUNT, LOGIN_INS_REALM_CHARACTERS_INIT, diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 2746e7a74..76c6d2edd 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -3844,6 +3844,10 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /* { l->push_back(owner); } + else if (me->IsSummon() && me->ToTempSummon()->GetSummonerUnit()) + { + l->push_back(me->ToTempSummon()->GetSummonerUnit()); + } } else if (go) { diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index cdb3523a4..2aca121e6 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -64,7 +64,7 @@ void SmartWaypointMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 SmartAI Waypoint Paths. DB table `waypoints` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 SmartAI Waypoint Paths. DB table `waypoints` is empty."); LOG_INFO("server.loading", " "); return; } @@ -136,7 +136,7 @@ void SmartAIMgr::LoadSmartAIFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 SmartAI scripts. DB table `smart_scripts` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 SmartAI scripts. DB table `smart_scripts` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index cf937c257..5d12cd8db 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2455,7 +2455,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaList() if (sAchievementCriteriaStore.GetNumRows() == 0) { - LOG_INFO("server.loading", ">> Loaded 0 achievement criteria."); + LOG_WARN("server.loading", ">> Loaded 0 achievement criteria."); LOG_INFO("server.loading", " "); return; } @@ -2604,7 +2604,7 @@ void AchievementGlobalMgr::LoadAchievementReferenceList() if (sAchievementStore.GetNumRows() == 0) { - LOG_INFO("server.loading", ">> Loaded 0 achievement references."); + LOG_WARN("server.loading", ">> Loaded 0 achievement references."); LOG_INFO("server.loading", " "); return; } @@ -2635,7 +2635,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 additional achievement criteria data. DB table `achievement_criteria_data` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 additional achievement criteria data. DB table `achievement_criteria_data` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2776,7 +2776,7 @@ void AchievementGlobalMgr::LoadCompletedAchievements() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 completed achievements. DB table `character_achievement` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 completed achievements. DB table `character_achievement` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2818,7 +2818,7 @@ void AchievementGlobalMgr::LoadRewards() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 achievement rewards. DB table `achievement_reward` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 achievement rewards. DB table `achievement_reward` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2939,7 +2939,7 @@ void AchievementGlobalMgr::LoadRewardLocales() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 achievement reward locale strings. DB table `achievement_reward_locale` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 achievement reward locale strings. DB table `achievement_reward_locale` is empty"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp index 8a9c58772..396babbda 100644 --- a/src/server/game/Addons/AddonMgr.cpp +++ b/src/server/game/Addons/AddonMgr.cpp @@ -42,7 +42,7 @@ namespace AddonMgr QueryResult result = CharacterDatabase.Query("SELECT name, crc FROM addons"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 known addons. DB table `addons` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 known addons. DB table `addons` is empty!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/ArenaSpectator/ArenaSpectator.cpp b/src/server/game/ArenaSpectator/ArenaSpectator.cpp index cc31c7d8a..6048b7636 100644 --- a/src/server/game/ArenaSpectator/ArenaSpectator.cpp +++ b/src/server/game/ArenaSpectator/ArenaSpectator.cpp @@ -137,7 +137,7 @@ bool ArenaSpectator::HandleSpectatorSpectateCommand(ChatHandler* handler, std::s if (uint32 inviteInstanceId = player->GetPendingSpectatorInviteInstanceId()) { - if (Battleground* tbg = sBattlegroundMgr->GetBattleground(inviteInstanceId)) + if (Battleground* tbg = sBattlegroundMgr->GetBattleground(inviteInstanceId, BATTLEGROUND_TYPE_NONE)) tbg->RemoveToBeTeleported(player->GetGUID()); player->SetPendingSpectatorInviteInstanceId(0); } diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 2d88c21d1..e31fd234c 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -493,7 +493,7 @@ void AuctionHouseMgr::LoadAuctionItems() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 auction items. DB table `auctionhouse` or `item_instance` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 auction items. DB table `auctionhouse` or `item_instance` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -538,7 +538,7 @@ void AuctionHouseMgr::LoadAuctions() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 auctions. DB table `auctionhouse` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 auctions. DB table `auctionhouse` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp index fe6e7a439..dfb84271d 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -312,6 +312,10 @@ void Arena::EndBattleground(TeamId winnerTeamId) } } + // update previous opponents for arena queue + winnerArenaTeam->SetPreviousOpponents(loserArenaTeam->GetId()); + loserArenaTeam->SetPreviousOpponents(winnerArenaTeam->GetId()); + // save the stat changes if (bValidArena) { diff --git a/src/server/game/Battlegrounds/ArenaScore.h b/src/server/game/Battlegrounds/ArenaScore.h index 0528d4830..b51dacf95 100644 --- a/src/server/game/Battlegrounds/ArenaScore.h +++ b/src/server/game/Battlegrounds/ArenaScore.h @@ -61,7 +61,7 @@ protected: { RatingChange = ratingChange; MatchmakerRating = matchMakerRating; - TeamName = teamName; + TeamName = std::string(teamName); } void BuildRatingInfoBlock(WorldPacket& data); diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index fd541fd06..e9eea7da2 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -345,7 +345,7 @@ void ArenaTeam::DelMember(ObjectGuid guid, bool cleanDb) WorldPacket data; playerMember->RemoveBattlegroundQueueId(bgQueue); sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, nullptr, playerMember->GetBattlegroundQueueIndex(bgQueue), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); - queue.RemovePlayer(playerMember->GetGUID(), true, 0); + queue.RemovePlayer(playerMember->GetGUID(), true); playerMember->GetSession()->SendPacket(&data); } } diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h index 67d77a6d5..6a5054d60 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.h +++ b/src/server/game/Battlegrounds/ArenaTeam.h @@ -209,6 +209,9 @@ public: void FinishWeek(); void FinishGame(int32 mod, const Map* bgMap); + void SetPreviousOpponents(uint32 arenaTeamId) { PreviousOpponents = arenaTeamId; } + uint32 GetPreviousOpponents() { return PreviousOpponents; } + void CreateTempArenaTeam(std::vector playerList, uint8 type, std::string const& teamName); // Containers @@ -233,5 +236,7 @@ protected: MemberList Members; ArenaTeamStats Stats; + + uint32 PreviousOpponents = 0; }; #endif diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp index acce71e3e..3ac05c425 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp @@ -157,7 +157,7 @@ void ArenaTeamMgr::LoadArenaTeams() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 arena teams. DB table `arena_team` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 arena teams. DB table `arena_team` is empty!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 86041b446..3ac6b1922 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -232,6 +232,9 @@ Battleground::~Battleground() m_Map = nullptr; } + // remove from bg free slot queue + RemoveFromBGFreeSlotQueue(); + for (auto const& itr : PlayerScores) delete itr.second; } @@ -251,8 +254,21 @@ void Battleground::Update(uint32 diff) if (!GetPlayersSize()) { + //BG is empty + // if there are no players invited, delete BG + // this will delete arena or bg object, where any player entered + // [[ but if you use battleground object again (more battles possible to be played on 1 instance) + // then this condition should be removed and code: + // if (!GetInvitedCount(TEAM_HORDE) && !GetInvitedCount(TEAM_ALLIANCE)) + // AddToFreeBGObjectsQueue(); // not yet implemented + // should be used instead of current + // ]] + // Battleground Template instance cannot be updated, because it would be deleted if (!GetInvitedCount(TEAM_HORDE) && !GetInvitedCount(TEAM_ALLIANCE)) + { m_SetDeleteThis = true; + } + return; } @@ -768,6 +784,7 @@ void Battleground::EndBattleground(PvPTeamId winnerTeamId) if (GetStatus() == STATUS_WAIT_LEAVE) return; + RemoveFromBGFreeSlotQueue(); SetStatus(STATUS_WAIT_LEAVE); SetWinner(winnerTeamId); @@ -956,13 +973,17 @@ void Battleground::RemovePlayerAtLeave(Player* player) // if the player was a match participant if (participant) { - WorldPacket data; - player->ClearAfkReports(); + WorldPacket data; sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetCurrentBattlegroundQueueSlot(), STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); player->GetSession()->SendPacket(&data); + BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetBgTypeID(), GetArenaType()); + + // this call is important, because player, when joins to battleground, this method is not called, so it must be called when leaving bg + player->RemoveBattlegroundQueueId(bgQueueTypeId); + // remove from raid group if player is member if (Group* group = GetBgRaid(teamId)) if (group->IsMember(player->GetGUID())) @@ -977,6 +998,19 @@ void Battleground::RemovePlayerAtLeave(Player* player) if (isBattleground() && !player->IsGameMaster() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_CAST_DESERTER)) if (status == STATUS_IN_PROGRESS || status == STATUS_WAIT_JOIN) player->ScheduleDelayedOperation(DELAYED_SPELL_CAST_DESERTER); + + DecreaseInvitedCount(teamId); + + //we should update battleground queue, but only if bg isn't ending + if (isBattleground() && GetStatus() < STATUS_WAIT_LEAVE) + { + BattlegroundTypeId bgTypeId = GetBgTypeID(); + BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(GetBgTypeID(), GetArenaType()); + + // a player has left the battleground, so there are free slots -> add to queue + AddToBGFreeSlotQueue(); + sBattlegroundMgr->ScheduleQueueUpdate(0, 0, bgQueueTypeId, bgTypeId, GetBracketId()); + } } // Remove shapeshift auras @@ -1009,6 +1043,7 @@ void Battleground::Init() m_BgInvitedPlayers[TEAM_ALLIANCE] = 0; m_BgInvitedPlayers[TEAM_HORDE] = 0; + _InBGFreeSlotQueue = false; m_Players.clear(); @@ -1028,9 +1063,15 @@ void Battleground::StartBattleground() SetStartTime(0); SetLastResurrectTime(0); + // add BG to free slot queue + AddToBGFreeSlotQueue(); + // add bg to update list // this must be done here, because we need to have already invited some players when first Battleground::Update() method is executed sBattlegroundMgr->AddBattleground(this); + + if (m_IsRated) + LOG_DEBUG("bg.arena", "Arena match type: {} for Team1Id: {} - Team2Id: {} started.", m_ArenaType, m_ArenaTeamIds[TEAM_ALLIANCE], m_ArenaTeamIds[TEAM_HORDE]); } void Battleground::AddPlayer(Player* player) @@ -1129,6 +1170,26 @@ void Battleground::AddOrSetPlayerToCorrectBgGroup(Player* player, TeamId teamId) } } +// This method should be called only once ... it adds pointer to queue +void Battleground::AddToBGFreeSlotQueue() +{ + if (!_InBGFreeSlotQueue && isBattleground()) + { + sBattlegroundMgr->AddToBGFreeSlotQueue(m_RealTypeID, this); + _InBGFreeSlotQueue = true; + } +} + +// This method removes this battleground from free queue - it must be called when deleting battleground +void Battleground::RemoveFromBGFreeSlotQueue() +{ + if (_InBGFreeSlotQueue) + { + sBattlegroundMgr->RemoveFromBGFreeSlotQueue(m_RealTypeID, m_InstanceID); + _InBGFreeSlotQueue = false; + } +} + uint32 Battleground::GetFreeSlotsForTeam(TeamId teamId) const { if (!(GetStatus() == STATUS_IN_PROGRESS || GetStatus() == STATUS_WAIT_JOIN)) @@ -1332,7 +1393,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float // without this, UseButtonOrDoor caused the crash, since it tried to get go info from godata // iirc that was changed, so adding to go data map is no longer required if that was the only function using godata from GameObject without checking if it existed GameObjectData& data = sObjectMgr->NewGOData(spawnId); - data.spawnId = spawnId; + data.id = entry; data.mapid = GetMapId(); data.posX = x; @@ -1611,6 +1672,7 @@ void Battleground::SendMessage2ToAll(uint32 entry, ChatMsg type, Player const* s void Battleground::EndNow() { + RemoveFromBGFreeSlotQueue(); SetStatus(STATUS_WAIT_LEAVE); SetEndTime(0); } @@ -1777,6 +1839,12 @@ GraveyardStruct const* Battleground::GetClosestGraveyard(Player* player) return sGraveyard->GetClosestGraveyard(player, player->GetBgTeamId()); } +void Battleground::SetBracket(PvPDifficultyEntry const* bracketEntry) +{ + m_BracketId = bracketEntry->GetBracketId(); + SetLevelRange(bracketEntry->minLevel, bracketEntry->maxLevel); +} + void Battleground::StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry) { for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr) diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 4908df399..80c409047 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -317,6 +317,7 @@ public: // Get methods: [[nodiscard]] std::string GetName() const { return m_Name; } [[nodiscard]] BattlegroundTypeId GetBgTypeID(bool GetRandom = false) const { return GetRandom ? m_RandomTypeID : m_RealTypeID; } + [[nodiscard]] BattlegroundBracketId GetBracketId() const { return m_BracketId; } [[nodiscard]] uint32 GetInstanceID() const { return m_InstanceID; } [[nodiscard]] BattlegroundStatus GetStatus() const { return m_Status; } [[nodiscard]] uint32 GetClientInstanceID() const { return m_ClientInstanceID; } @@ -342,6 +343,7 @@ public: void SetName(std::string_view name) { m_Name = std::string(name); } void SetBgTypeID(BattlegroundTypeId TypeID) { m_RealTypeID = TypeID; } void SetRandomTypeID(BattlegroundTypeId TypeID) { m_RandomTypeID = TypeID; } + void SetBracket(PvPDifficultyEntry const* bracketEntry); void SetInstanceID(uint32 InstanceID) { m_InstanceID = InstanceID; } void SetStatus(BattlegroundStatus Status) { m_Status = Status; } void SetClientInstanceID(uint32 InstanceID) { m_ClientInstanceID = InstanceID; } @@ -362,6 +364,9 @@ public: void SetMaxPlayersPerTeam(uint32 MaxPlayers) { m_MaxPlayersPerTeam = MaxPlayers; } void SetMinPlayersPerTeam(uint32 MinPlayers) { m_MinPlayersPerTeam = MinPlayers; } + void AddToBGFreeSlotQueue(); // this queue will be useful when more battlegrounds instances will be available + void RemoveFromBGFreeSlotQueue(); // this method could delete whole BG instance, if another free is available + void DecreaseInvitedCount(TeamId teamId) { if (m_BgInvitedPlayers[teamId]) --m_BgInvitedPlayers[teamId]; } void IncreaseInvitedCount(TeamId teamId) { ++m_BgInvitedPlayers[teamId]; } [[nodiscard]] uint32 GetInvitedCount(TeamId teamId) const { return m_BgInvitedPlayers[teamId]; } @@ -643,7 +648,9 @@ private: uint32 m_ValidStartPositionTimer; int32 m_EndTime; // it is set to 120000 when bg is ending and it decreases itself uint32 m_LastResurrectTime; + BattlegroundBracketId m_BracketId{ BG_BRACKET_ID_FIRST }; uint8 m_ArenaType; // 2=2v2, 3=3v3, 5=5v5 + bool _InBGFreeSlotQueue{ false }; // used to make sure that BG is only once inserted into the BattlegroundMgr.BGFreeSlotQueue[bgTypeId] deque bool m_SetDeleteThis; // used for safe deletion of the bg after end / all players leave bool m_IsArena; PvPTeamId m_WinnerId; diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index aee60c95a..84caf57b1 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -48,15 +48,22 @@ #include "WorldPacket.h" #include +bool BattlegroundTemplate::IsArena() const +{ + return BattlemasterEntry->type == MAP_ARENA; +} + /*********************************************************/ /*** BATTLEGROUND MANAGER ***/ /*********************************************************/ -BattlegroundMgr::BattlegroundMgr() : m_ArenaTesting(false), m_Testing(false), - m_lastClientVisibleInstanceId(0), m_NextAutoDistributionTime(0), m_AutoDistributionTimeChecker(0), m_NextPeriodicQueueUpdateTime(5 * IN_MILLISECONDS) +BattlegroundMgr::BattlegroundMgr() : + m_ArenaTesting(false), + m_Testing(false), + m_NextAutoDistributionTime(0), + m_AutoDistributionTimeChecker(0), + m_NextPeriodicQueueUpdateTime(5 * IN_MILLISECONDS) { - for (uint32 qtype = BATTLEGROUND_QUEUE_NONE; qtype < MAX_BATTLEGROUND_QUEUE_TYPES; ++qtype) - m_BattlegroundQueues[qtype].SetBgTypeIdAndArenaType(BGTemplateId(BattlegroundQueueTypeId(qtype)), BGArenaType(BattlegroundQueueTypeId(qtype))); } BattlegroundMgr::~BattlegroundMgr() @@ -72,47 +79,68 @@ BattlegroundMgr* BattlegroundMgr::instance() void BattlegroundMgr::DeleteAllBattlegrounds() { - while (!m_Battlegrounds.empty()) - delete m_Battlegrounds.begin()->second; - m_Battlegrounds.clear(); + for (auto& [_, data] : bgDataStore) + { + while (!data._Battlegrounds.empty()) + delete data._Battlegrounds.begin()->second; - while (!m_BattlegroundTemplates.empty()) - delete m_BattlegroundTemplates.begin()->second; - m_BattlegroundTemplates.clear(); + data._Battlegrounds.clear(); + + while (!data.BGFreeSlotQueue.empty()) + delete data.BGFreeSlotQueue.front(); + } + + bgDataStore.clear(); } // used to update running battlegrounds, and delete finished ones void BattlegroundMgr::Update(uint32 diff) { // update all battlegrounds and delete if needed - for (BattlegroundContainer::iterator itr = m_Battlegrounds.begin(), itrDelete; itr != m_Battlegrounds.end(); ) + for (auto& [_, bgData] : bgDataStore) { - itrDelete = itr++; - Battleground* bg = itrDelete->second; - bg->Update(diff); - if (bg->ToBeDeleted()) + auto& bgList = bgData._Battlegrounds; + auto itrDelete = bgList.begin(); + + // first one is template and should not be deleted + for (BattlegroundContainer::iterator itr = ++itrDelete; itr != bgList.end();) { - itrDelete->second = nullptr; - m_Battlegrounds.erase(itrDelete); - delete bg; + itrDelete = itr++; + Battleground* bg = itrDelete->second; + + bg->Update(diff); + if (bg->ToBeDeleted()) + { + itrDelete->second = nullptr; + bgList.erase(itrDelete); + + BattlegroundClientIdsContainer& clients = bgData._ClientBattlegroundIds[bg->GetBracketId()]; + if (!clients.empty()) + clients.erase(bg->GetClientInstanceID()); + + delete bg; + } } } // update events - for (int qtype = BATTLEGROUND_QUEUE_NONE; qtype < MAX_BATTLEGROUND_QUEUE_TYPES; ++qtype) + for (uint8 qtype = BATTLEGROUND_QUEUE_NONE; qtype < MAX_BATTLEGROUND_QUEUE_TYPES; ++qtype) m_BattlegroundQueues[qtype].UpdateEvents(diff); // update using scheduled tasks (used only for rated arenas, initial opponent search works differently than periodic queue update) - if (!m_ArenaQueueUpdateScheduler.empty()) + if (!m_QueueUpdateScheduler.empty()) { std::vector scheduled; - std::swap(scheduled, m_ArenaQueueUpdateScheduler); + std::swap(scheduled, m_QueueUpdateScheduler); + for (uint8 i = 0; i < scheduled.size(); i++) { - uint32 arenaRatedTeamId = scheduled[i] >> 32; + uint32 arenaMMRating = scheduled[i] >> 32; + uint8 arenaType = scheduled[i] >> 24 & 255; BattlegroundQueueTypeId bgQueueTypeId = BattlegroundQueueTypeId(scheduled[i] >> 16 & 255); + BattlegroundTypeId bgTypeId = BattlegroundTypeId((scheduled[i] >> 8) & 255); BattlegroundBracketId bracket_id = BattlegroundBracketId(scheduled[i] & 255); - m_BattlegroundQueues[bgQueueTypeId].BattlegroundQueueUpdate(diff, bracket_id, true, arenaRatedTeamId); // pussywizard: looking for opponents only for this team + m_BattlegroundQueues[bgQueueTypeId].BattlegroundQueueUpdate(diff, bgTypeId, bracket_id, arenaType, arenaMMRating > 0, arenaMMRating); } } @@ -121,16 +149,16 @@ void BattlegroundMgr::Update(uint32 diff) { m_NextPeriodicQueueUpdateTime = 5 * IN_MILLISECONDS; + LOG_TRACE("bg.arena", "BattlegroundMgr: UPDATING ARENA QUEUES"); + // for rated arenas for (uint32 qtype = BATTLEGROUND_QUEUE_2v2; qtype < MAX_BATTLEGROUND_QUEUE_TYPES; ++qtype) + { for (uint32 bracket = BG_BRACKET_ID_FIRST; bracket < MAX_BATTLEGROUND_BRACKETS; ++bracket) - m_BattlegroundQueues[qtype].BattlegroundQueueUpdate(m_NextPeriodicQueueUpdateTime, BattlegroundBracketId(bracket), true, 0); // pussywizard: 0 for rated means looking for opponents for every team - - // for battlegrounds and not rated arenas - // in first loop try to fill already running battlegrounds, then in a second loop try to create new battlegrounds - for (uint32 qtype = BATTLEGROUND_QUEUE_AV; qtype < MAX_BATTLEGROUND_QUEUE_TYPES; ++qtype) - for (uint32 bracket = BG_BRACKET_ID_FIRST; bracket < MAX_BATTLEGROUND_BRACKETS; ++bracket) - m_BattlegroundQueues[qtype].BattlegroundQueueUpdate(m_NextPeriodicQueueUpdateTime, BattlegroundBracketId(bracket), false, 0); + { + m_BattlegroundQueues[qtype].BattlegroundQueueUpdate(diff, BATTLEGROUND_AA, BattlegroundBracketId(bracket), BattlegroundMgr::BGArenaType(BattlegroundQueueTypeId(qtype)), true, 0); + } + } } else m_NextPeriodicQueueUpdateTime -= diff; @@ -225,36 +253,108 @@ void BattlegroundMgr::BuildPlayerJoinedBattlegroundPacket(WorldPacket* data, Pla *data << player->GetGUID(); } -Battleground* BattlegroundMgr::GetBattleground(uint32 instanceId) +Battleground* BattlegroundMgr::GetBattlegroundThroughClientInstance(uint32 instanceId, BattlegroundTypeId bgTypeId) +{ + //cause at HandleBattlegroundJoinOpcode the clients sends the instanceid he gets from + //SMSG_BATTLEFIELD_LIST we need to find the battleground with this clientinstance-id + Battleground* bg = GetBattlegroundTemplate(bgTypeId); + if (!bg) + return nullptr; + + if (bg->isArena()) + return GetBattleground(instanceId, bgTypeId); + + auto const& it = bgDataStore.find(bgTypeId); + if (it == bgDataStore.end()) + return nullptr; + + for (auto const& itr : it->second._Battlegrounds) + { + if (itr.second->GetClientInstanceID() == instanceId) + return itr.second; + } + + return nullptr; +} + +Battleground* BattlegroundMgr::GetBattleground(uint32 instanceId, BattlegroundTypeId bgTypeId) { if (!instanceId) return nullptr; - BattlegroundContainer::const_iterator itr = m_Battlegrounds.find(instanceId); - if (itr != m_Battlegrounds.end()) - return itr->second; + auto GetBgWithInstanceID = [instanceId](BattlegroundData const* bgData) -> Battleground* + { + auto const& itr = bgData->_Battlegrounds.find(instanceId); + if (itr != bgData->_Battlegrounds.end()) + return itr->second; + + return nullptr; + }; + + if (bgTypeId == BATTLEGROUND_TYPE_NONE) + { + for (auto const& [bgType, bgData] : bgDataStore) + { + if (auto bg = GetBgWithInstanceID(&bgData)) + return bg; + } + } + else + { + auto const& itr = bgDataStore.find(bgTypeId); + if (itr == bgDataStore.end()) + return nullptr; + + if (auto bg = GetBgWithInstanceID(&itr->second)) + return bg; + } return nullptr; } Battleground* BattlegroundMgr::GetBattlegroundTemplate(BattlegroundTypeId bgTypeId) { - BattlegroundTemplateContainer::const_iterator itr = m_BattlegroundTemplates.find(bgTypeId); - if (itr != m_BattlegroundTemplates.end()) - return itr->second; + BattlegroundDataContainer::const_iterator itr = bgDataStore.find(bgTypeId); + if (itr == bgDataStore.end()) + return nullptr; - return nullptr; + BattlegroundContainer const& bgs = itr->second._Battlegrounds; + + // map is sorted and we can be sure that lowest instance id has only BG template + return bgs.empty() ? nullptr : bgs.begin()->second; } -uint32 BattlegroundMgr::GetNextClientVisibleInstanceId() +uint32 BattlegroundMgr::CreateClientVisibleInstanceId(BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id) { - return ++m_lastClientVisibleInstanceId; + if (IsArenaType(bgTypeId)) + return 0; // arenas don't have client-instanceids + + // we create here an instanceid, which is just for + // displaying this to the client and without any other use.. + // the client-instanceIds are unique for each battleground-type + // the instance-id just needs to be as low as possible, beginning with 1 + // the following works, because std::set is default ordered with "<" + // the optimalization would be to use as bitmask std::vector - but that would only make code unreadable + + BattlegroundClientIdsContainer& clientIds = bgDataStore[bgTypeId]._ClientBattlegroundIds[bracket_id]; + uint32 lastId = 0; + + for (BattlegroundClientIdsContainer::const_iterator itr = clientIds.begin(); itr != clientIds.end();) + { + if ((++lastId) != *itr) // if there is a gap between the ids, we will break.. + break; + + lastId = *itr; + } + + clientIds.emplace(++lastId); + return lastId; } // create a new battleground that will really be used to play -Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId originalBgTypeId, uint32 minLevel, uint32 maxLevel, uint8 arenaType, bool isRated) +Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId originalBgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated) { - BattlegroundTypeId bgTypeId = GetRandomBG(originalBgTypeId, minLevel); + BattlegroundTypeId bgTypeId = GetRandomBG(originalBgTypeId, bracketEntry->minLevel); if (originalBgTypeId == BATTLEGROUND_AA) originalBgTypeId = bgTypeId; @@ -262,9 +362,13 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId original // get the template BG Battleground* bg_template = GetBattlegroundTemplate(bgTypeId); if (!bg_template) + { + LOG_ERROR("bg.battleground", "Battleground: CreateNewBattleground - bg template not found for {}", bgTypeId); return nullptr; + } Battleground* bg = nullptr; + // create a copy of the BG template if (BattlegroundMgr::bgTypeToTemplate.find(bgTypeId) == BattlegroundMgr::bgTypeToTemplate.end()) { @@ -275,9 +379,9 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId original bool isRandom = bgTypeId != originalBgTypeId && !bg->isArena(); - bg->SetLevelRange(minLevel, maxLevel); + bg->SetBracket(bracketEntry); bg->SetInstanceID(sMapMgr->GenerateInstanceId()); - bg->SetClientInstanceID(IsArenaType(originalBgTypeId) ? 0 : GetNextClientVisibleInstanceId()); + bg->SetClientInstanceID(CreateClientVisibleInstanceId(originalBgTypeId, bracketEntry->GetBracketId())); bg->Init(); bg->SetStatus(STATUS_WAIT_JOIN); // start the joining of the bg bg->SetArenaType(arenaType); @@ -298,37 +402,40 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId original } // used to create the BG templates -bool BattlegroundMgr::CreateBattleground(CreateBattlegroundData& data) +bool BattlegroundMgr::CreateBattleground(BattlegroundTemplate const* bgTemplate) { // Create the BG - Battleground* bg = nullptr; - bg = BattlegroundMgr::bgtypeToBattleground[data.bgTypeId]; + Battleground* bg = GetBattlegroundTemplate(bgTemplate->Id); - if (bg == nullptr) - return false; + if (!bg) + { + bg = BattlegroundMgr::bgtypeToBattleground[bgTemplate->Id]; - if (data.bgTypeId == BATTLEGROUND_RB) - bg->SetRandom(true); + ASSERT(bg); - bg->SetMapId(data.MapID); - bg->SetBgTypeID(data.bgTypeId); - bg->SetInstanceID(0); - bg->SetArenaorBGType(data.IsArena); - bg->SetMinPlayersPerTeam(data.MinPlayersPerTeam); - bg->SetMaxPlayersPerTeam(data.MaxPlayersPerTeam); - bg->SetName(data.BattlegroundName); - bg->SetTeamStartPosition(TEAM_ALLIANCE, data.StartLocation[TEAM_ALLIANCE]); - bg->SetTeamStartPosition(TEAM_HORDE, data.StartLocation[TEAM_HORDE]); - bg->SetStartMaxDist(data.StartMaxDist); - bg->SetLevelRange(data.LevelMin, data.LevelMax); - bg->SetScriptId(data.scriptId); + if (bgTemplate->Id == BATTLEGROUND_RB) + bg->SetRandom(true); - AddBattleground(bg); + bg->SetBgTypeID(bgTemplate->Id); + bg->SetInstanceID(0); + AddBattleground(bg); + } + + bg->SetMapId(bgTemplate->BattlemasterEntry->mapid[0]); + bg->SetName(bgTemplate->BattlemasterEntry->name[sWorld->GetDefaultDbcLocale()]); + bg->SetArenaorBGType(bgTemplate->IsArena()); + bg->SetMinPlayersPerTeam(bgTemplate->MinPlayersPerTeam); + bg->SetMaxPlayersPerTeam(bgTemplate->MaxPlayersPerTeam); + bg->SetTeamStartPosition(TEAM_ALLIANCE, bgTemplate->StartLocation[TEAM_ALLIANCE]); + bg->SetTeamStartPosition(TEAM_HORDE, bgTemplate->StartLocation[TEAM_HORDE]); + bg->SetStartMaxDist(bgTemplate->MaxStartDistSq); + bg->SetLevelRange(bgTemplate->MinLevel, bgTemplate->MaxLevel); + bg->SetScriptId(bgTemplate->ScriptId); return true; } -void BattlegroundMgr::CreateInitialBattlegrounds() +void BattlegroundMgr::LoadBattlegroundTemplates() { uint32 oldMSTime = getMSTime(); @@ -344,13 +451,11 @@ void BattlegroundMgr::CreateInitialBattlegrounds() return; } - uint32 count = 0; - do { Field* fields = result->Fetch(); - uint32 bgTypeId = fields[0].Get(); + BattlegroundTypeId bgTypeId = static_cast(fields[0].Get()); if (DisableMgr::IsDisabledFor(DISABLE_TYPE_BATTLEGROUND, bgTypeId, nullptr)) continue; @@ -363,72 +468,69 @@ void BattlegroundMgr::CreateInitialBattlegrounds() continue; } - CreateBattlegroundData data; - data.bgTypeId = BattlegroundTypeId(bgTypeId); - data.IsArena = (bl->type == TYPE_ARENA); - data.MinPlayersPerTeam = fields[1].Get(); - data.MaxPlayersPerTeam = fields[2].Get(); - data.LevelMin = fields[3].Get(); - data.LevelMax = fields[4].Get(); + BattlegroundTemplate bgTemplate; + bgTemplate.Id = bgTypeId; + bgTemplate.MinPlayersPerTeam = fields[1].Get(); + bgTemplate.MaxPlayersPerTeam = fields[2].Get(); + bgTemplate.MinLevel = fields[3].Get(); + bgTemplate.MaxLevel = fields[4].Get(); float dist = fields[9].Get(); - data.StartMaxDist = dist * dist; - data.Weight = fields[10].Get(); + bgTemplate.MaxStartDistSq = dist * dist; + bgTemplate.Weight = fields[10].Get(); + bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[11].Get()); + bgTemplate.BattlemasterEntry = bl; - data.scriptId = sObjectMgr->GetScriptId(fields[11].Get()); - data.BattlegroundName = bl->name[sWorld->GetDefaultDbcLocale()]; - data.MapID = bl->mapid[0]; - - if (data.MaxPlayersPerTeam == 0 || data.MinPlayersPerTeam > data.MaxPlayersPerTeam) + if (bgTemplate.MaxPlayersPerTeam == 0 || bgTemplate.MinPlayersPerTeam > bgTemplate.MaxPlayersPerTeam) { - LOG_ERROR("bg.battleground", "Table `battleground_template` for id {} has bad values for MinPlayersPerTeam ({}) and MaxPlayersPerTeam({})", - data.bgTypeId, data.MinPlayersPerTeam, data.MaxPlayersPerTeam); + LOG_ERROR("sql.sql", "Table `battleground_template` for id {} contains bad values for MinPlayersPerTeam ({}) and MaxPlayersPerTeam({}).", + bgTemplate.Id, bgTemplate.MinPlayersPerTeam, bgTemplate.MaxPlayersPerTeam); + continue; } - if (data.LevelMin == 0 || data.LevelMax == 0 || data.LevelMin > data.LevelMax) + if (bgTemplate.MinLevel == 0 || bgTemplate.MaxLevel == 0 || bgTemplate.MinLevel > bgTemplate.MaxLevel) { - LOG_ERROR("bg.battleground", "Table `battleground_template` for id {} has bad values for LevelMin ({}) and LevelMax({})", - data.bgTypeId, data.LevelMin, data.LevelMax); + LOG_ERROR("sql.sql", "Table `battleground_template` for id {} has bad values for LevelMin ({}) and LevelMax({})", + bgTemplate.Id, bgTemplate.MinLevel, bgTemplate.MaxLevel); continue; } - if (data.bgTypeId != BATTLEGROUND_AA && data.bgTypeId != BATTLEGROUND_RB) + if (bgTemplate.Id != BATTLEGROUND_AA && bgTemplate.Id != BATTLEGROUND_RB) { uint32 startId = fields[5].Get(); if (GraveyardStruct const* start = sGraveyard->GetGraveyard(startId)) { - data.StartLocation[TEAM_ALLIANCE].Relocate(start->x, start->y, start->z, fields[6].Get()); + bgTemplate.StartLocation[TEAM_ALLIANCE].Relocate(start->x, start->y, start->z, fields[6].Get()); } else { - LOG_ERROR("sql.sql", "Table `battleground_template` for id %u contains a non-existing WorldSafeLocs.dbc id %u in field `AllianceStartLoc`. BG not created.", data.bgTypeId, startId); + LOG_ERROR("sql.sql", "Table `battleground_template` for id {} contains a non-existing WorldSafeLocs.dbc id {} in field `AllianceStartLoc`. BG not created.", bgTemplate.Id, startId); continue; } startId = fields[7].Get(); if (GraveyardStruct const* start = sGraveyard->GetGraveyard(startId)) { - data.StartLocation[TEAM_HORDE].Relocate(start->x, start->y, start->z, fields[8].Get()); + bgTemplate.StartLocation[TEAM_HORDE].Relocate(start->x, start->y, start->z, fields[8].Get()); } else { - LOG_ERROR("sql.sql", "Table `battleground_template` for id %u contains a non-existing WorldSafeLocs.dbc id %u in field `HordeStartLoc`. BG not created.", data.bgTypeId, startId); + LOG_ERROR("sql.sql", "Table `battleground_template` for id {} contains a non-existing WorldSafeLocs.dbc id {} in field `HordeStartLoc`. BG not created.", bgTemplate.Id, startId); continue; } } - if (!CreateBattleground(data)) + if (!CreateBattleground(&bgTemplate)) continue; - _battlegroundTemplates[BattlegroundTypeId(bgTypeId)] = data; + _battlegroundTemplates[bgTypeId] = bgTemplate; - if (bl->mapid[1] == -1) // in this case we have only one mapId - _battlegroundMapTemplates[bl->mapid[0]] = &_battlegroundTemplates[BattlegroundTypeId(bgTypeId)]; + if (bgTemplate.BattlemasterEntry->mapid[1] == -1) // in this case we have only one mapId + _battlegroundMapTemplates[bgTemplate.BattlemasterEntry->mapid[0]] = &_battlegroundTemplates[bgTypeId]; - ++count; } while (result->NextRow()); - LOG_INFO("server.loading", ">> Loaded {} battlegrounds in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", ">> Loaded {} battlegrounds in {} ms", _battlegroundTemplates.size(), GetMSTimeDiffToNow(oldMSTime)); LOG_INFO("server.loading", " "); } @@ -499,23 +601,31 @@ void BattlegroundMgr::BuildBattlegroundListPacket(WorldPacket* data, ObjectGuid size_t count_pos = data->wpos(); *data << uint32(0); // number of bg instances - if (Battleground* bgt = GetBattlegroundTemplate(bgTypeId)) - if (GetBattlegroundBracketByLevel(bgt->GetMapId(), player->getLevel())) + auto const& it = bgDataStore.find(bgTypeId); + if (it != bgDataStore.end()) + { + // expected bracket entry + if (PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(it->second._Battlegrounds.begin()->second->GetMapId(), player->getLevel())) { uint32 count = 0; - /*for (BattlegroundClientIdsContainer::const_iterator itr = clientIds.begin(); itr != clientIds.end(); ++itr) + BattlegroundBracketId bracketId = bracketEntry->GetBracketId(); + BattlegroundClientIdsContainer& clientIds = it->second._ClientBattlegroundIds[bracketId]; + + for (auto const& itr : clientIds) { - *data << uint32(*itr); + *data << uint32(itr); ++count; - }*/ + } + data->put(count_pos, count); } + } } } void BattlegroundMgr::SendToBattleground(Player* player, uint32 instanceId, BattlegroundTypeId bgTypeId) { - if (Battleground* bg = GetBattleground(instanceId)) + if (Battleground* bg = GetBattleground(instanceId, bgTypeId)) { uint32 mapid = bg->GetMapId(); Position const* pos = bg->GetTeamStartPosition(player->GetBgTeamId()); @@ -636,11 +746,25 @@ void BattlegroundMgr::SetHolidayWeekends(uint32 mask) } } -void BattlegroundMgr::ScheduleArenaQueueUpdate(uint32 arenaRatedTeamId, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundBracketId bracket_id) +void BattlegroundMgr::ScheduleQueueUpdate(uint32 arenaMatchmakerRating, uint8 arenaType, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id) { - uint64 const scheduleId = ((uint64)arenaRatedTeamId << 32) | (bgQueueTypeId << 16) | bracket_id; - if (std::find(m_ArenaQueueUpdateScheduler.begin(), m_ArenaQueueUpdateScheduler.end(), scheduleId) == m_ArenaQueueUpdateScheduler.end()) - m_ArenaQueueUpdateScheduler.push_back(scheduleId); + //This method must be atomic, @todo add mutex + //we will use only 1 number created of bgTypeId and bracket_id + uint64 const scheduleId = ((uint64)arenaMatchmakerRating << 32) | ((uint64)arenaType << 24) | ((uint64)bgQueueTypeId << 16) | ((uint64)bgTypeId << 8) | (uint64)bracket_id; + if (std::find(m_QueueUpdateScheduler.begin(), m_QueueUpdateScheduler.end(), scheduleId) == m_QueueUpdateScheduler.end()) + m_QueueUpdateScheduler.emplace_back(scheduleId); +} + +uint32 BattlegroundMgr::GetMaxRatingDifference() const +{ + uint32 diff = sWorld->getIntConfig(CONFIG_ARENA_MAX_RATING_DIFFERENCE); + + if (diff == 0) + { + diff = 5000; + } + + return diff; } uint32 BattlegroundMgr::GetRatingDiscardTimer() const @@ -663,7 +787,7 @@ void BattlegroundMgr::LoadBattleMastersEntry() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 battlemaster entries. DB table `battlemaster_entry` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 battlemaster entries. DB table `battlemaster_entry` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -766,24 +890,23 @@ bool BattlegroundMgr::IsBGWeekend(BattlegroundTypeId bgTypeId) BattlegroundTypeId BattlegroundMgr::GetRandomBG(BattlegroundTypeId bgTypeId, uint32 minLevel) { - if (GetBattlegroundTemplateByTypeId(bgTypeId)) + if (BattlegroundTemplate const* bgTemplate = GetBattlegroundTemplateByTypeId(bgTypeId)) { std::vector ids; ids.reserve(16); std::vector weights; weights.reserve(16); - BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId); - for (int32 mapId : bl->mapid) + for (int32 mapId : bgTemplate->BattlemasterEntry->mapid) { if (mapId == -1) break; - if (CreateBattlegroundData const* bg = GetBattlegroundTemplateByMapId(mapId)) + if (BattlegroundTemplate const* bg = GetBattlegroundTemplateByMapId(mapId)) { - if (bg->LevelMin <= minLevel) + if (bg->MinLevel <= minLevel) { - ids.push_back(bg->bgTypeId); + ids.push_back(bg->Id); weights.push_back(bg->Weight); } } @@ -795,30 +918,38 @@ BattlegroundTypeId BattlegroundMgr::GetRandomBG(BattlegroundTypeId bgTypeId, uin return BATTLEGROUND_TYPE_NONE; } +BGFreeSlotQueueContainer& BattlegroundMgr::GetBGFreeSlotQueueStore(BattlegroundTypeId bgTypeId) +{ + return bgDataStore[bgTypeId].BGFreeSlotQueue; +} + +void BattlegroundMgr::AddToBGFreeSlotQueue(BattlegroundTypeId bgTypeId, Battleground* bg) +{ + bgDataStore[bgTypeId].BGFreeSlotQueue.push_front(bg); +} + +void BattlegroundMgr::RemoveFromBGFreeSlotQueue(BattlegroundTypeId bgTypeId, uint32 instanceId) +{ + BGFreeSlotQueueContainer& queues = bgDataStore[bgTypeId].BGFreeSlotQueue; + for (BGFreeSlotQueueContainer::iterator itr = queues.begin(); itr != queues.end(); ++itr) + if ((*itr)->GetInstanceID() == instanceId) + { + queues.erase(itr); + return; + } +} + void BattlegroundMgr::AddBattleground(Battleground* bg) { - if (bg->GetInstanceID() == 0) - m_BattlegroundTemplates[bg->GetBgTypeID()] = bg; - else - m_Battlegrounds[bg->GetInstanceID()] = bg; + if (bg) + bgDataStore[bg->GetBgTypeID()]._Battlegrounds[bg->GetInstanceID()] = bg; sScriptMgr->OnBattlegroundCreate(bg); } void BattlegroundMgr::RemoveBattleground(BattlegroundTypeId bgTypeId, uint32 instanceId) { - if (instanceId == 0) - m_BattlegroundTemplates.erase(bgTypeId); - else - m_Battlegrounds.erase(instanceId); -} - -void BattlegroundMgr::DoForAllBattlegrounds(std::function const& worker) -{ - for (auto const& [_, bg] : m_Battlegrounds) - { - worker(bg); - } + bgDataStore[bgTypeId]._Battlegrounds.erase(instanceId); } // init/update unordered_map diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h index ce5930ac6..bdb17651a 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.h +++ b/src/server/game/Battlegrounds/BattlegroundMgr.h @@ -27,29 +27,38 @@ #include typedef std::map BattlegroundContainer; +typedef std::set BattlegroundClientIdsContainer; typedef std::unordered_map BattleMastersMap; typedef Battleground* (*bgRef)(Battleground*); typedef void(*bgMapRef)(WorldPacket*, Battleground::BattlegroundScoreMap::const_iterator); typedef void(*bgTypeRef)(WorldPacket*, Battleground::BattlegroundScoreMap::const_iterator, Battleground*); -struct CreateBattlegroundData +// this container can't be deque, because deque doesn't like removing the last element - if you remove it, it invalidates next iterator and crash appears +using BGFreeSlotQueueContainer = std::list; + +struct BattlegroundData { - BattlegroundTypeId bgTypeId; - bool IsArena; - uint32 MinPlayersPerTeam; - uint32 MaxPlayersPerTeam; - uint32 LevelMin; - uint32 LevelMax; - char const* BattlegroundName; - uint32 MapID; - float StartMaxDist; - std::array StartLocation; - uint32 scriptId; - uint8 Weight; + BattlegroundContainer _Battlegrounds; + std::array _ClientBattlegroundIds; + BGFreeSlotQueueContainer BGFreeSlotQueue; }; -struct GroupQueueInfo; +struct BattlegroundTemplate +{ + BattlegroundTypeId Id; + uint16 MinPlayersPerTeam; + uint16 MaxPlayersPerTeam; + uint8 MinLevel; + uint8 MaxLevel; + std::array StartLocation; + float MaxStartDistSq; + uint8 Weight; + uint32 ScriptId; + BattlemasterListEntry const* BattlemasterEntry; + + bool IsArena() const; +}; class BattlegroundMgr { @@ -71,21 +80,25 @@ public: void SendAreaSpiritHealerQueryOpcode(Player* player, Battleground* bg, ObjectGuid guid); /* Battlegrounds */ - Battleground* GetBattleground(uint32 InstanceID); + Battleground* GetBattlegroundThroughClientInstance(uint32 instanceId, BattlegroundTypeId bgTypeId); + Battleground* GetBattleground(uint32 instanceID, BattlegroundTypeId bgTypeId); Battleground* GetBattlegroundTemplate(BattlegroundTypeId bgTypeId); - Battleground* CreateNewBattleground(BattlegroundTypeId bgTypeId, uint32 minLevel, uint32 maxLevel, uint8 arenaType, bool isRated); + Battleground* CreateNewBattleground(BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated); void AddBattleground(Battleground* bg); void RemoveBattleground(BattlegroundTypeId bgTypeId, uint32 instanceId); + void AddToBGFreeSlotQueue(BattlegroundTypeId bgTypeId, Battleground* bg); + void RemoveFromBGFreeSlotQueue(BattlegroundTypeId bgTypeId, uint32 instanceId); + BGFreeSlotQueueContainer& GetBGFreeSlotQueueStore(BattlegroundTypeId bgTypeId); - void CreateInitialBattlegrounds(); + void LoadBattlegroundTemplates(); void DeleteAllBattlegrounds(); void SendToBattleground(Player* player, uint32 InstanceID, BattlegroundTypeId bgTypeId); /* Battleground queues */ BattlegroundQueue& GetBattlegroundQueue(BattlegroundQueueTypeId bgQueueTypeId) { return m_BattlegroundQueues[bgQueueTypeId]; } - void ScheduleArenaQueueUpdate(uint32 arenaRatedTeamId, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundBracketId bracket_id); + void ScheduleQueueUpdate(uint32 arenaMatchmakerRating, uint8 arenaType, BattlegroundQueueTypeId bgQueueTypeId, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id); uint32 GetPrematureFinishTime() const; void ToggleArenaTesting(); @@ -105,10 +118,12 @@ public: static BattlegroundTypeId WeekendHolidayIdToBGType(HolidayIds holiday); static bool IsBGWeekend(BattlegroundTypeId bgTypeId); - uint32 GetRatingDiscardTimer() const; + uint32 GetMaxRatingDifference() const; + uint32 GetRatingDiscardTimer() const; void InitAutomaticArenaPointDistribution(); void LoadBattleMastersEntry(); void CheckBattleMasters(); + BattlegroundTypeId GetBattleMasterBG(uint32 entry) const { BattleMastersMap::const_iterator itr = mBattleMastersMap.find(entry); @@ -117,8 +132,6 @@ public: return BATTLEGROUND_TYPE_NONE; } - const BattlegroundContainer& GetBattlegroundList() { return m_Battlegrounds; } // pussywizard - static std::unordered_map bgToQueue; // BattlegroundTypeId -> BattlegroundQueueTypeId static std::unordered_map queueToBg; // BattlegroundQueueTypeId -> BattlegroundTypeId static std::unordered_map bgtypeToBattleground; // BattlegroundTypeId -> Battleground* @@ -128,48 +141,46 @@ public: static std::unordered_map ArenaTypeToQueue; // ArenaType -> BattlegroundQueueTypeId static std::unordered_map QueueToArenaType; // BattlegroundQueueTypeId -> ArenaType - void DoForAllBattlegrounds(std::function const& worker); - private: - bool CreateBattleground(CreateBattlegroundData& data); - uint32 GetNextClientVisibleInstanceId(); + bool CreateBattleground(BattlegroundTemplate const* bgTemplate); + uint32 CreateClientVisibleInstanceId(BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id); BattlegroundTypeId GetRandomBG(BattlegroundTypeId id, uint32 minLevel); - typedef std::map BattlegroundTemplateContainer; - BattlegroundTemplateContainer m_BattlegroundTemplates; - BattlegroundContainer m_Battlegrounds; + typedef std::map BattlegroundDataContainer; + BattlegroundDataContainer bgDataStore; BattlegroundQueue m_BattlegroundQueues[MAX_BATTLEGROUND_QUEUE_TYPES]; - std::vector m_ArenaQueueUpdateScheduler; + std::vector m_QueueUpdateScheduler; bool m_ArenaTesting; bool m_Testing; - uint32 m_lastClientVisibleInstanceId; Seconds m_NextAutoDistributionTime; uint32 m_AutoDistributionTimeChecker; uint32 m_NextPeriodicQueueUpdateTime; BattleMastersMap mBattleMastersMap; - CreateBattlegroundData const* GetBattlegroundTemplateByTypeId(BattlegroundTypeId id) + BattlegroundTemplate const* GetBattlegroundTemplateByTypeId(BattlegroundTypeId id) { - BattlegroundTemplateMap::const_iterator itr = _battlegroundTemplates.find(id); + auto const& itr = _battlegroundTemplates.find(id); if (itr != _battlegroundTemplates.end()) return &itr->second; + return nullptr; } - CreateBattlegroundData const* GetBattlegroundTemplateByMapId(uint32 mapId) + BattlegroundTemplate const* GetBattlegroundTemplateByMapId(uint32 mapId) { - BattlegroundMapTemplateContainer::const_iterator itr = _battlegroundMapTemplates.find(mapId); + auto const& itr = _battlegroundMapTemplates.find(mapId); if (itr != _battlegroundMapTemplates.end()) return itr->second; + return nullptr; } typedef std::map BattlegroundSelectionWeightMap; - typedef std::map BattlegroundTemplateMap; - typedef std::map BattlegroundMapTemplateContainer; + typedef std::map BattlegroundTemplateMap; + typedef std::map BattlegroundMapTemplateContainer; BattlegroundTemplateMap _battlegroundTemplates; BattlegroundMapTemplateContainer _battlegroundMapTemplates; }; diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index d8bab21c6..2e1ea708f 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -35,7 +35,7 @@ /*** BATTLEGROUND QUEUE SYSTEM ***/ /*********************************************************/ -BattlegroundQueue::BattlegroundQueue() : m_bgTypeId(BATTLEGROUND_TYPE_NONE), m_arenaType(ArenaType(0)) +BattlegroundQueue::BattlegroundQueue() { for (uint32 i = 0; i < PVP_TEAMS_COUNT; ++i) { @@ -128,23 +128,25 @@ bool BattlegroundQueue::SelectionPool::AddGroup(GroupQueueInfo* ginfo, uint32 de /*********************************************************/ // add group or player (grp == nullptr) to bg queue with the given leader and bg specifications -GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, PvPDifficultyEntry const* bracketEntry, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 arenateamid) +GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated, bool isPremade, + uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId /*= 0*/, uint32 opponentsArenaTeamId /*= 0*/) { BattlegroundBracketId bracketId = bracketEntry->GetBracketId(); // create new ginfo auto* ginfo = new GroupQueueInfo; - ginfo->BgTypeId = m_bgTypeId; - ginfo->ArenaType = m_arenaType; - ginfo->ArenaTeamId = arenateamid; + ginfo->BgTypeId = bgTypeId; + ginfo->ArenaType = arenaType; + ginfo->ArenaTeamId = arenaTeamId; ginfo->IsRated = isRated; ginfo->IsInvitedToBGInstanceGUID = 0; ginfo->JoinTime = GameTime::GetGameTimeMS().count(); ginfo->RemoveInviteTime = 0; ginfo->teamId = leader->GetTeamId(); ginfo->RealTeamID = leader->GetTeamId(true); - ginfo->ArenaTeamRating = ArenaRating; - ginfo->ArenaMatchmakerRating = MatchmakerRating; + ginfo->ArenaTeamRating = arenaRating; + ginfo->ArenaMatchmakerRating = matchmakerRating; + ginfo->PreviousOpponentsTeamId = opponentsArenaTeamId; ginfo->OpponentsTeamRating = 0; ginfo->OpponentsMatchmakerRating = 0; @@ -159,33 +161,30 @@ GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, PvPDiffi if (ginfo->teamId == TEAM_HORDE) index++; - sScriptMgr->OnAddGroup(this, ginfo, index, leader, grp, bracketEntry, isPremade); + sScriptMgr->OnAddGroup(this, ginfo, index, leader, group, bgTypeId, bracketEntry, + arenaType, isRated, isPremade, arenaRating, matchmakerRating, arenaTeamId, opponentsArenaTeamId); - LOG_DEBUG("bg.battleground", "Adding Group to BattlegroundQueue bgTypeId: {}, bracket_id: {}, index: {}", m_bgTypeId, bracketId, index); + LOG_DEBUG("bg.battleground", "Adding Group to BattlegroundQueue bgTypeId: {}, bracket_id: {}, index: {}", bgTypeId, bracketId, index); // pussywizard: store indices at which GroupQueueInfo is in m_QueuedGroups - ginfo->_bracketId = bracketId; - ginfo->_groupType = index; + ginfo->BracketId = bracketId; + ginfo->GroupType = index; //add players from group to ginfo - if (grp) + if (group) { - for (GroupReference* itr = grp->GetFirstMember(); itr != nullptr; itr = itr->next()) + group->DoForAllMembers([this, ginfo](Player* member) { - Player* member = itr->GetSource(); - if (!member) - continue; - ASSERT(m_QueuedPlayers.count(member->GetGUID()) == 0); m_QueuedPlayers[member->GetGUID()] = ginfo; - ginfo->Players.insert(member->GetGUID()); - } + ginfo->Players.emplace(member->GetGUID()); + }); } else { ASSERT(m_QueuedPlayers.count(leader->GetGUID()) == 0); m_QueuedPlayers[leader->GetGUID()] = ginfo; - ginfo->Players.insert(leader->GetGUID()); + ginfo->Players.emplace(leader->GetGUID()); } //add GroupInfo to m_QueuedGroups @@ -220,10 +219,10 @@ void BattlegroundQueue::PlayerInvitedToBGUpdateAverageWaitTime(GroupQueueInfo* g return; // pointer to last index - uint32* lastIndex = &m_WaitTimeLastIndex[team_index][ginfo->_bracketId]; + uint32* lastIndex = &m_WaitTimeLastIndex[team_index][ginfo->BracketId]; // set time at index to new value - m_WaitTimes[team_index][ginfo->_bracketId][*lastIndex] = timeInQueue; + m_WaitTimes[team_index][ginfo->BracketId][*lastIndex] = timeInQueue; // set last index to next one (*lastIndex)++; @@ -244,11 +243,11 @@ uint32 BattlegroundQueue::GetAverageQueueWaitTime(GroupQueueInfo* ginfo) const return 0; // if there are enough values: - if (m_WaitTimes[team_index][ginfo->_bracketId][COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME - 1]) + if (m_WaitTimes[team_index][ginfo->BracketId][COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME - 1]) { uint32 sum = 0; for (uint32 i = 0; i < COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME; ++i) - sum += m_WaitTimes[team_index][ginfo->_bracketId][i]; + sum += m_WaitTimes[team_index][ginfo->BracketId][i]; return sum / COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME; } else @@ -256,56 +255,59 @@ uint32 BattlegroundQueue::GetAverageQueueWaitTime(GroupQueueInfo* ginfo) const } //remove player from queue and from group info, if group info is empty then remove it too -void BattlegroundQueue::RemovePlayer(ObjectGuid guid, bool sentToBg, uint32 playerQueueSlot) +void BattlegroundQueue::RemovePlayer(ObjectGuid guid, bool decreaseInvitedCount) { - // pussywizard: leave queue packet - if (playerQueueSlot < PLAYER_MAX_BATTLEGROUND_QUEUES) - if (Player* p = ObjectAccessor::FindConnectedPlayer(guid)) - { - WorldPacket data; - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, nullptr, playerQueueSlot, STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); - p->GetSession()->SendPacket(&data); - } - //remove player from map, if he's there - auto itr = m_QueuedPlayers.find(guid); + auto const& itr = m_QueuedPlayers.find(guid); if (itr == m_QueuedPlayers.end()) { - ABORT(); + //This happens if a player logs out while in a bg because WorldSession::LogoutPlayer() notifies the bg twice + std::string playerName = "Unknown"; + + if (Player* player = ObjectAccessor::FindPlayer(guid)) + { + playerName = player->GetName(); + } + + LOG_ERROR("bg.battleground", "BattlegroundQueue: couldn't find player {} ({})", playerName, guid.ToString()); + //ABORT("BattlegroundQueue: couldn't find player {} ({})", playerName, guid.ToString()); return; } GroupQueueInfo* groupInfo = itr->second; - uint32 _bracketId = groupInfo->_bracketId; - uint32 _groupType = groupInfo->_groupType; + uint32 _bracketId = groupInfo->BracketId; + uint32 _groupType = groupInfo->GroupType; // find iterator auto group_itr = m_QueuedGroups[_bracketId][_groupType].end(); - for (auto k = m_QueuedGroups[_bracketId][_groupType].begin(); k != m_QueuedGroups[_bracketId][_groupType].end(); ++k) + + for (auto k = m_QueuedGroups[_bracketId][_groupType].begin(); k != m_QueuedGroups[_bracketId][_groupType].end(); k++) if ((*k) == groupInfo) { group_itr = k; break; } - //player can't be in queue without group, but just in case + // player can't be in queue without group, but just in case if (group_itr == m_QueuedGroups[_bracketId][_groupType].end()) { - ABORT(); + LOG_ERROR("bg.battleground", "BattlegroundQueue: ERROR Cannot find groupinfo for {}", guid.ToString()); + //ABORT("BattlegroundQueue: ERROR Cannot find groupinfo for {}", guid.ToString()); return; } + LOG_DEBUG("bg.battleground", "BattlegroundQueue: Removing {}, from bracket_id {}", guid.ToString(), _bracketId); + // remove player from group queue info - auto pitr = groupInfo->Players.find(guid); + auto const& pitr = groupInfo->Players.find(guid); ASSERT(pitr != groupInfo->Players.end()); if (pitr != groupInfo->Players.end()) groupInfo->Players.erase(pitr); - // if invited to bg, then always decrease invited count when removed from queue - // sending player to bg will increase it again - if (groupInfo->IsInvitedToBGInstanceGUID) - if (Battleground* bg = sBattlegroundMgr->GetBattleground(groupInfo->IsInvitedToBGInstanceGUID)) + // if invited to bg, and should decrease invited count, then do it + if (decreaseInvitedCount && groupInfo->IsInvitedToBGInstanceGUID) + if (Battleground* bg = sBattlegroundMgr->GetBattleground(groupInfo->IsInvitedToBGInstanceGUID, groupInfo->BgTypeId)) bg->DecreaseInvitedCount(groupInfo->teamId); // remove player queue info @@ -315,13 +317,20 @@ void BattlegroundQueue::RemovePlayer(ObjectGuid guid, bool sentToBg, uint32 play SendExitMessageArenaQueue(groupInfo); // if player leaves queue and he is invited to a rated arena match, then count it as he lost - if (groupInfo->IsInvitedToBGInstanceGUID && groupInfo->IsRated && !sentToBg) + if (groupInfo->IsInvitedToBGInstanceGUID && groupInfo->IsRated && decreaseInvitedCount) + { if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(groupInfo->ArenaTeamId)) { + LOG_DEBUG("bg.battleground", "UPDATING memberLost's personal arena rating for {} by opponents rating: {}", guid.ToString(), groupInfo->OpponentsTeamRating); + if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) + { at->MemberLost(player, groupInfo->OpponentsMatchmakerRating); + } + at->SaveToDB(); } + } // remove group queue info no players left if (groupInfo->Players.empty()) @@ -335,17 +344,20 @@ void BattlegroundQueue::RemovePlayer(ObjectGuid guid, bool sentToBg, uint32 play // if it's a rated arena and any member leaves when group not yet invited - everyone from group leaves too! if (groupInfo->IsRated && !groupInfo->IsInvitedToBGInstanceGUID) { - uint32 queueSlot = PLAYER_MAX_BATTLEGROUND_QUEUES; - if (Player* plr = ObjectAccessor::FindConnectedPlayer(*(groupInfo->Players.begin()))) { + Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(groupInfo->BgTypeId); BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(groupInfo->BgTypeId, groupInfo->ArenaType); - queueSlot = plr->GetBattlegroundQueueIndex(bgQueueTypeId); + uint32 queueSlot = plr->GetBattlegroundQueueIndex(bgQueueTypeId); plr->RemoveBattlegroundQueueId(bgQueueTypeId); + + WorldPacket data; + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); + plr->SendDirectMessage(&data); } // recursive call - RemovePlayer(*(groupInfo->Players.begin()), false, queueSlot); + RemovePlayer(*groupInfo->Players.begin(), decreaseInvitedCount); } } @@ -377,79 +389,116 @@ bool BattlegroundQueue::GetPlayerGroupInfoData(ObjectGuid guid, GroupQueueInfo* } // this function is filling pools given free slots on both sides, result is ballanced -void BattlegroundQueue::FillPlayersToBG(Battleground* bg, const int32 aliFree, const int32 hordeFree, BattlegroundBracketId bracket_id) +void BattlegroundQueue::FillPlayersToBG(Battleground* bg, BattlegroundBracketId bracket_id) { - if (!sScriptMgr->CanFillPlayersToBG(this, bg, aliFree, hordeFree, bracket_id)) - return; - - // clear selection pools - m_SelectionPools[TEAM_ALLIANCE].Init(); - m_SelectionPools[TEAM_HORDE].Init(); - - // quick check if nothing we can do: - if (!sBattlegroundMgr->isTesting()) - if ((aliFree > hordeFree && m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].empty()) || - (hordeFree > aliFree && m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].empty())) - return; - - // ally: at first fill as much as possible - auto Ali_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].begin(); - for (; Ali_itr != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].end() && m_SelectionPools[TEAM_ALLIANCE].AddGroup((*Ali_itr), aliFree); ++Ali_itr); - - // horde: at first fill as much as possible - auto Horde_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].begin(); - for (; Horde_itr != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].end() && m_SelectionPools[TEAM_HORDE].AddGroup((*Horde_itr), hordeFree); ++Horde_itr); - - // calculate free space after adding - int32 aliDiff = aliFree - int32(m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()); - int32 hordeDiff = hordeFree - int32(m_SelectionPools[TEAM_HORDE].GetPlayerCount()); - - int32 invType = sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE); - int32 invDiff = 0; - - // check balance configuration and set the max difference between teams - switch (invType) + if (!sScriptMgr->CanFillPlayersToBG(this, bg, bracket_id)) { - case BG_QUEUE_INVITATION_TYPE_NO_BALANCE: - return; - case BG_QUEUE_INVITATION_TYPE_BALANCED: - invDiff = 1; - break; - case BG_QUEUE_INVITATION_TYPE_EVEN: - break; - default: - return; + return; } - // balance the teams based on the difference allowed - while (std::abs(aliDiff - hordeDiff) > invDiff && (m_SelectionPools[TEAM_HORDE].GetPlayerCount() > 0 || m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() > 0)) - { - // if results in more alliance players than horde: - if (aliDiff < hordeDiff) - { - // no more alliance in pool, invite whatever we can from horde - if (!m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()) - break; + int32 hordeFree = bg->GetFreeSlotsForTeam(TEAM_HORDE); + int32 aliFree = bg->GetFreeSlotsForTeam(TEAM_ALLIANCE); + uint32 aliCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].size(); + uint32 hordeCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].size(); - // kick alliance, returns true if kicked more than needed, so then try to fill up - if (m_SelectionPools[TEAM_ALLIANCE].KickGroup(hordeDiff - aliDiff)) - for (; Ali_itr != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].end() && m_SelectionPools[TEAM_ALLIANCE].AddGroup((*Ali_itr), aliFree >= hordeDiff ? aliFree - hordeDiff : 0); ++Ali_itr); + // try to get even teams + if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_EVEN) + { + // check if the teams are even + if (hordeFree == 1 && aliFree == 1) + { + // if we are here, the teams have the same amount of players + // then we have to allow to join the same amount of players + int32 hordeExtra = hordeCount - aliCount; + int32 aliExtra = aliCount - hordeCount; + + hordeExtra = std::max(hordeExtra, 0); + aliExtra = std::max(aliExtra, 0); + + if (aliCount != hordeCount) + { + aliFree -= aliExtra; + hordeFree -= hordeExtra; + + aliFree = std::max(aliFree, 0); + hordeFree = std::max(hordeFree, 0); + } + } + } + + GroupsQueueType::const_iterator Ali_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].begin(); + //count of groups in queue - used to stop cycles + + //index to queue which group is current + uint32 aliIndex = 0; + for (; aliIndex < aliCount && m_SelectionPools[TEAM_ALLIANCE].AddGroup((*Ali_itr), aliFree); aliIndex++) + ++Ali_itr; + + //the same thing for horde + GroupsQueueType::const_iterator Horde_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].begin(); + + uint32 hordeIndex = 0; + for (; hordeIndex < hordeCount && m_SelectionPools[TEAM_HORDE].AddGroup((*Horde_itr), hordeFree); hordeIndex++) + ++Horde_itr; + + //if ofc like BG queue invitation is set in config, then we are happy + if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_NO_BALANCE) + return; + + /* + if we reached this code, then we have to solve NP - complete problem called Subset sum problem + So one solution is to check all possible invitation subgroups, or we can use these conditions: + 1. Last time when BattlegroundQueue::Update was executed we invited all possible players - so there is only small possibility + that we will invite now whole queue, because only 1 change has been made to queues from the last BattlegroundQueue::Update call + 2. Other thing we should consider is group order in queue + */ + + // At first we need to compare free space in bg and our selection pool + int32 diffAli = aliFree - int32(m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()); + int32 diffHorde = hordeFree - int32(m_SelectionPools[TEAM_HORDE].GetPlayerCount()); + + while (std::abs(diffAli - diffHorde) > 1 && (m_SelectionPools[TEAM_HORDE].GetPlayerCount() > 0 || m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() > 0)) + { + //each cycle execution we need to kick at least 1 group + if (diffAli < diffHorde) + { + //kick alliance group, add to pool new group if needed + if (m_SelectionPools[TEAM_ALLIANCE].KickGroup(diffHorde - diffAli)) + { + for (; aliIndex < aliCount && m_SelectionPools[TEAM_ALLIANCE].AddGroup((*Ali_itr), (aliFree >= diffHorde) ? aliFree - diffHorde : 0); aliIndex++) + ++Ali_itr; + } + + //if ali selection is already empty, then kick horde group, but if there are less horde than ali in bg - break; + if (!m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()) + { + if (aliFree <= diffHorde + 1) + break; + + m_SelectionPools[TEAM_HORDE].KickGroup(diffHorde - diffAli); + } } - // if results in more horde players than alliance: else { - // no more horde in pool, invite whatever we can from alliance - if (!m_SelectionPools[TEAM_HORDE].GetPlayerCount()) - break; + //kick horde group, add to pool new group if needed + if (m_SelectionPools[TEAM_HORDE].KickGroup(diffAli - diffHorde)) + { + for (; hordeIndex < hordeCount && m_SelectionPools[TEAM_HORDE].AddGroup((*Horde_itr), (hordeFree >= diffAli) ? hordeFree - diffAli : 0); hordeIndex++) + ++Horde_itr; + } - // kick horde, returns true if kicked more than needed, so then try to fill up - if (m_SelectionPools[TEAM_HORDE].KickGroup(aliDiff - hordeDiff)) - for (; Horde_itr != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].end() && m_SelectionPools[TEAM_HORDE].AddGroup((*Horde_itr), hordeFree >= aliDiff ? hordeFree - aliDiff : 0); ++Horde_itr); + if (!m_SelectionPools[TEAM_HORDE].GetPlayerCount()) + { + if (hordeFree <= diffAli + 1) + break; + + m_SelectionPools[TEAM_ALLIANCE].KickGroup(diffAli - diffHorde); + } } - // recalculate free space after adding - aliDiff = aliFree - static_cast(m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()); - hordeDiff = hordeFree - static_cast(m_SelectionPools[TEAM_HORDE].GetPlayerCount()); + //count diffs after small update + diffAli = aliFree - int32(m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()); + diffHorde = hordeFree - int32(m_SelectionPools[TEAM_HORDE].GetPlayerCount()); } } @@ -457,136 +506,191 @@ void BattlegroundQueue::FillPlayersToBG(Battleground* bg, const int32 aliFree, c // then after 30 mins (default) in queue it moves premade group to normal queue bool BattlegroundQueue::CheckPremadeMatch(BattlegroundBracketId bracket_id, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam) { - // clear selection pools - m_SelectionPools[TEAM_ALLIANCE].Init(); - m_SelectionPools[TEAM_HORDE].Init(); - if (!m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() && !m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty()) { - // find premade group for both factions: + //start premade match + //if groups aren't invited GroupsQueueType::const_iterator ali_group, horde_group; for (ali_group = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].begin(); ali_group != m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].end(); ++ali_group) - if (!(*ali_group)->IsInvitedToBGInstanceGUID && (*ali_group)->Players.size() >= MinPlayersPerTeam) + if (!(*ali_group)->IsInvitedToBGInstanceGUID) break; + for (horde_group = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].begin(); horde_group != m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].end(); ++horde_group) - if (!(*horde_group)->IsInvitedToBGInstanceGUID && (*horde_group)->Players.size() >= MinPlayersPerTeam) + if (!(*horde_group)->IsInvitedToBGInstanceGUID) break; // if found both groups if (ali_group != m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].end() && horde_group != m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].end()) { - // add premade groups to selection pools m_SelectionPools[TEAM_ALLIANCE].AddGroup((*ali_group), MaxPlayersPerTeam); m_SelectionPools[TEAM_HORDE].AddGroup((*horde_group), MaxPlayersPerTeam); - // battleground will be immediately filled (after calling this function and creating new battleground) with more players from normal queue + //add groups/players from normal queue to size of bigger group + uint32 maxPlayers = std::min(m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount(), m_SelectionPools[TEAM_HORDE].GetPlayerCount()); + GroupsQueueType::const_iterator itr; - return m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= MinPlayersPerTeam && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= MinPlayersPerTeam; + for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) + { + for (itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].begin(); itr != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].end(); ++itr) + { + //if itr can join BG and player count is less that maxPlayers, then add group to selectionpool + if (!(*itr)->IsInvitedToBGInstanceGUID && !m_SelectionPools[i].AddGroup((*itr), maxPlayers)) + break; + } + } + + //premade selection pools are set + return true; } } - // now check if we can move groups from premade queue to normal queue - // this happens if timer has expired or group size lowered - - uint32 premade_time = sWorld->getIntConfig(CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH); - uint32 time_before = GameTime::GetGameTimeMS().count() >= premade_time ? GameTime::GetGameTimeMS().count() - premade_time : 0; + // now check if we can move group from Premade queue to normal queue (timer has expired) or group size lowered!! + // this could be 2 cycles but i'm checking only first team in queue - it can cause problem - + // if first is invited to BG and seconds timer expired, but we can ignore it, because players have only 80 seconds to click to enter bg + // and when they click or after 80 seconds the queue info is removed from queue + uint32 time_before = GameTime::GetGameTimeMS().count() - sWorld->getIntConfig(CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH); for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) + { if (!m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE + i].empty()) - for (auto itr = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE + i].begin(); itr != m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE + i].end(); ) + { + GroupsQueueType::iterator itr = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE + i].begin(); + if (!(*itr)->IsInvitedToBGInstanceGUID && ((*itr)->JoinTime < time_before || (*itr)->Players.size() < MinPlayersPerTeam)) { - if (!(*itr)->IsInvitedToBGInstanceGUID && ((*itr)->JoinTime < time_before || (*itr)->Players.size() < MinPlayersPerTeam)) - { - (*itr)->_groupType = BG_QUEUE_NORMAL_ALLIANCE + i; // pussywizard: update GroupQueueInfo internal variable - m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].push_front((*itr)); - m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE + i].erase(itr++); - continue; - } - ++itr; + //we must insert group to normal queue and erase pointer from premade queue + (*itr)->GroupType = BG_QUEUE_NORMAL_ALLIANCE + i; // pussywizard: update GroupQueueInfo internal variable + m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].push_front((*itr)); + m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE + i].erase(itr); } + } + } + //selection pools are not set return false; } // this method tries to create battleground or arena with MinPlayersPerTeam against MinPlayersPerTeam bool BattlegroundQueue::CheckNormalMatch(Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers) { - uint32 Coef = 1; + if (sScriptMgr->IsCheckNormalMatch(this, bgTemplate, bracket_id, minPlayers, maxPlayers)) + { + return true; + } - sScriptMgr->OnCheckNormalMatch(this, Coef, bgTemplate, bracket_id, minPlayers, maxPlayers); + GroupsQueueType::const_iterator itr_team[PVP_TEAMS_COUNT]; + for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) + { + itr_team[i] = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].begin(); + for (; itr_team[i] != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].end(); ++(itr_team[i])) + { + if (!(*(itr_team[i]))->IsInvitedToBGInstanceGUID) + { + m_SelectionPools[i].AddGroup(*(itr_team[i]), maxPlayers); + if (m_SelectionPools[i].GetPlayerCount() >= minPlayers) + break; + } + } + } - minPlayers = minPlayers * Coef; + //try to invite same number of players - this cycle may cause longer wait time even if there are enough players in queue, but we want ballanced bg + uint32 j = TEAM_ALLIANCE; + if (m_SelectionPools[TEAM_HORDE].GetPlayerCount() < m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()) + j = TEAM_HORDE; - FillPlayersToBG(bgTemplate, maxPlayers, maxPlayers, bracket_id); + if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) != BG_QUEUE_INVITATION_TYPE_NO_BALANCE + && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers) + { + //we will try to invite more groups to team with less players indexed by j + ++(itr_team[j]); //this will not cause a crash, because for cycle above reached break; + for (; itr_team[j] != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + j].end(); ++(itr_team[j])) + { + if (!(*(itr_team[j]))->IsInvitedToBGInstanceGUID) + if (!m_SelectionPools[j].AddGroup(*(itr_team[j]), m_SelectionPools[(j + 1) % PVP_TEAMS_COUNT].GetPlayerCount())) + break; + } + + // do not allow to start bg with more than 2 players more on 1 faction + if (std::abs((int32)(m_SelectionPools[TEAM_HORDE].GetPlayerCount() - m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount())) > 2) + return false; + } //allow 1v0 if debug bg if (sBattlegroundMgr->isTesting() && bgTemplate->isBattleground() && (m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() || m_SelectionPools[TEAM_HORDE].GetPlayerCount())) return true; - switch (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE)) - { - case BG_QUEUE_INVITATION_TYPE_NO_BALANCE: // in this case, as soon as both teams have > mincount, start - return m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers; - - case BG_QUEUE_INVITATION_TYPE_BALANCED: // check difference between selection pools - if = 1 or less start. - return std::abs(static_cast(m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()) - static_cast(m_SelectionPools[TEAM_HORDE].GetPlayerCount())) <= 1 && m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers; - - case BG_QUEUE_INVITATION_TYPE_EVEN: // if both counts are same then it's an even match - return (m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() == m_SelectionPools[TEAM_HORDE].GetPlayerCount()) && m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers; - - default: // same as unbalanced (in case wrong setting is entered...) - return m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers; - } + //return true if there are enough players in selection pools - enable to work .debug bg command correctly + return m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers; } // this method will check if we can invite players to same faction skirmish match bool BattlegroundQueue::CheckSkirmishForSameFaction(BattlegroundBracketId bracket_id, uint32 minPlayersPerTeam) { - for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) - if (!m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].empty()) + if (m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() < minPlayersPerTeam && m_SelectionPools[TEAM_HORDE].GetPlayerCount() < minPlayersPerTeam) + return false; + + TeamId teamIndex = TEAM_ALLIANCE; + TeamId otherTeam = TEAM_HORDE; + + if (m_SelectionPools[TEAM_HORDE].GetPlayerCount() == minPlayersPerTeam) + { + teamIndex = TEAM_HORDE; + otherTeam = TEAM_ALLIANCE; + } + + //clear other team's selection + m_SelectionPools[otherTeam].Init(); + + //store last ginfo pointer + GroupQueueInfo* ginfo = m_SelectionPools[teamIndex].SelectedGroups.back(); + + //set itr_team to group that was added to selection pool latest + GroupsQueueType::iterator itr_team = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + static_cast(teamIndex)].begin(); + for (; itr_team != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + static_cast(teamIndex)].end(); ++itr_team) + if (ginfo == *itr_team) + break; + + if (itr_team == m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + static_cast(teamIndex)].end()) + return false; + + GroupsQueueType::iterator itr_team2 = itr_team; + ++itr_team2; + + //invite players to other selection pool + for (; itr_team2 != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + static_cast(teamIndex)].end(); ++itr_team2) + { + //if selection pool is full then break; + if (!(*itr_team2)->IsInvitedToBGInstanceGUID && !m_SelectionPools[otherTeam].AddGroup(*itr_team2, minPlayersPerTeam)) + break; + } + + if (m_SelectionPools[otherTeam].GetPlayerCount() != minPlayersPerTeam) + return false; + + //here we have correct 2 selections and we need to change one teams team and move selection pool teams to other team's queue + for (GroupsQueueType::iterator itr = m_SelectionPools[otherTeam].SelectedGroups.begin(); itr != m_SelectionPools[otherTeam].SelectedGroups.end(); ++itr) + { + //set correct team + (*itr)->teamId = otherTeam; + (*itr)->GroupType = static_cast(BG_QUEUE_NORMAL_ALLIANCE) + static_cast(otherTeam); + + //add team to other queue + m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + static_cast(otherTeam)].push_front(*itr); + + //remove team from old queue + GroupsQueueType::iterator itr2 = itr_team; + ++itr2; + + for (; itr2 != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + static_cast(teamIndex)].end(); ++itr2) { - // clear selection pools - m_SelectionPools[TEAM_ALLIANCE].Init(); - m_SelectionPools[TEAM_HORDE].Init(); - - // fill one queue to both selection pools - for (auto itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].begin(); itr != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].end(); ++itr) - for (uint32 j = 0; j < PVP_TEAMS_COUNT; j++) // try to add this group to both pools - if (m_SelectionPools[TEAM_ALLIANCE + j].GetPlayerCount() < minPlayersPerTeam) // if this pool is not full - if (m_SelectionPools[TEAM_ALLIANCE + j].AddGroup((*itr), minPlayersPerTeam)) // successfully added - { - // if both selection pools are full - if (m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayersPerTeam && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayersPerTeam) - { - // need to move groups from one pool to another queue (for another faction) - TeamId wrongTeamId = (i == 0 ? TEAM_HORDE : TEAM_ALLIANCE); - - for (auto pitr = m_SelectionPools[wrongTeamId].SelectedGroups.begin(); pitr != m_SelectionPools[wrongTeamId].SelectedGroups.end(); ++pitr) - { - // update internal GroupQueueInfo data - (*pitr)->teamId = wrongTeamId; - (*pitr)->_groupType = static_cast(BG_QUEUE_NORMAL_ALLIANCE) + wrongTeamId; - - // add GroupQueueInfo to new queue - m_QueuedGroups[bracket_id][static_cast(BG_QUEUE_NORMAL_ALLIANCE) + wrongTeamId].push_front(*pitr); - - // remove GroupQueueInfo from old queue - for (auto qitr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].begin(); qitr != m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].end(); ++qitr) - if (*qitr == *pitr) - { - m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + i].erase(qitr); - break; - } - } - - return true; - } - - break; // added to one pool, prevent adding it to the second pool - } + if (*itr2 == *itr) + { + m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE + static_cast(teamIndex)].erase(itr2); + break; + } } + } - return false; + return true; } void BattlegroundQueue::UpdateEvents(uint32 diff) @@ -594,123 +698,117 @@ void BattlegroundQueue::UpdateEvents(uint32 diff) m_events.Update(diff); } -void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundBracketId bracket_id, bool isRated, uint32 arenaRatedTeamId) +void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating) { // if no players in queue - do nothing if (IsAllQueuesEmpty(bracket_id)) return; - Battleground* bg_template = sBattlegroundMgr->GetBattlegroundTemplate(m_bgTypeId); + auto InviteAllGroupsToBg = [this](Battleground* bg) + { + // invite those selection pools + for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) + { + for (auto const& citr : m_SelectionPools[TEAM_ALLIANCE + i].SelectedGroups) + { + InviteGroupToBG(citr, bg, citr->teamId); + } + } + }; + + // battleground with free slot for player should be always in the beggining of the queue + // maybe it would be better to create bgfreeslotqueue for each bracket_id + BGFreeSlotQueueContainer& bgQueues = sBattlegroundMgr->GetBGFreeSlotQueueStore(bgTypeId); + for (BGFreeSlotQueueContainer::iterator itr = bgQueues.begin(); itr != bgQueues.end();) + { + Battleground* bg = *itr; ++itr; + // DO NOT allow queue manager to invite new player to rated games + if (!bg->isRated() && bg->GetBgTypeID() == bgTypeId && bg->GetBracketId() == bracket_id && + bg->GetStatus() > STATUS_WAIT_QUEUE && bg->GetStatus() < STATUS_WAIT_LEAVE) + { + // clear selection pools + m_SelectionPools[TEAM_ALLIANCE].Init(); + m_SelectionPools[TEAM_HORDE].Init(); + + // call a function that does the job for us + FillPlayersToBG(bg, bracket_id); + + // now everything is set, invite players + InviteAllGroupsToBg(bg); + + if (!bg->HasFreeSlots()) + bg->RemoveFromBGFreeSlotQueue(); + } + } + + Battleground* bg_template = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId); if (!bg_template) + { + LOG_ERROR("bg.battleground", "Battleground: Update: bg template not found for {}", bgTypeId); return; + } PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketById(bg_template->GetMapId(), bracket_id); if (!bracketEntry) - return; - - // battlegrounds with free slots should be populated first using players in queue - if (!BattlegroundMgr::IsArenaType(m_bgTypeId)) { - std::vector bgsToCheck; - - // sort from most needing (most empty) to least needing using a std::set with functor - sBattlegroundMgr->DoForAllBattlegrounds([&](Battleground* bg) - { - if (!BattlegroundMgr::IsArenaType(bg->GetBgTypeID()) && - (bg->GetBgTypeID(true) == m_bgTypeId || m_bgTypeId == BATTLEGROUND_RB) && - bg->HasFreeSlots() && bg->GetMinLevel() <= bracketEntry->minLevel && - bg->GetMaxLevel() >= bracketEntry->maxLevel) - { - bgsToCheck.emplace_back(bg); - } - }); - - std::sort(bgsToCheck.begin(), bgsToCheck.end(), [](Battleground* const& bg1, Battleground* const& bg2) - { - return ((float)bg1->GetMaxFreeSlots() / (float)bg1->GetMaxPlayersPerTeam()) > ((float)bg2->GetMaxFreeSlots() / (float)bg2->GetMaxPlayersPerTeam()); - }); - - // now iterate needing battlegrounds - for (auto const& bg : bgsToCheck) - { - // call a function that fills whatever we can from normal queues - FillPlayersToBG(bg, bg->GetFreeSlotsForTeam(TEAM_ALLIANCE), bg->GetFreeSlotsForTeam(TEAM_HORDE), bracket_id); - - // invite players - for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) - for (auto itr : m_SelectionPools[TEAM_ALLIANCE + i].SelectedGroups) - InviteGroupToBG(itr, bg, itr->RealTeamID); - } - - // prevent new BGs to be created if there are some non-empty BGs running - // TODO: note that this is a workaround, - // however it shouldn't cause issues as the queue update is constantly called - if (!bg_template->isArena() && !bgsToCheck.empty()) - return; + LOG_ERROR("bg.battleground", "Battleground: Update: bg bracket entry not found for map {} bracket id {}", bg_template->GetMapId(), bracket_id); + return; } - // finished iterating through battlegrounds with free slots, maybe we need to create a new bg - // get min and max players per team uint32 MinPlayersPerTeam = bg_template->GetMinPlayersPerTeam(); uint32 MaxPlayersPerTeam = bg_template->GetMaxPlayersPerTeam(); if (bg_template->isArena()) { - MinPlayersPerTeam = sBattlegroundMgr->isArenaTesting() ? 1 : m_arenaType; - MaxPlayersPerTeam = m_arenaType; + MinPlayersPerTeam = sBattlegroundMgr->isArenaTesting() ? 1 : arenaType; + MaxPlayersPerTeam = arenaType; } + else if (sBattlegroundMgr->isTesting()) + MinPlayersPerTeam = 1; - sScriptMgr->OnQueueUpdate(this, bracket_id, isRated, arenaRatedTeamId); + sScriptMgr->OnQueueUpdate(this, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating); + + m_SelectionPools[TEAM_ALLIANCE].Init(); + m_SelectionPools[TEAM_HORDE].Init(); // check if can start new premade battleground - if (bg_template->isBattleground() && m_bgTypeId != BATTLEGROUND_RB) - if (CheckPremadeMatch(bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)) + if (bg_template->isBattleground() && bgTypeId != BATTLEGROUND_RB && CheckPremadeMatch(bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)) + { + // create new battleground + Battleground* bg = sBattlegroundMgr->CreateNewBattleground(bgTypeId, bracketEntry, 0, false); + if (!bg) { - // create new battleground - Battleground* bg = sBattlegroundMgr->CreateNewBattleground(m_bgTypeId, bracketEntry->minLevel, bracketEntry->maxLevel, 0, false); - if (!bg) - return; - - // invite players - for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) - for (auto& SelectedGroup : m_SelectionPools[TEAM_ALLIANCE + i].SelectedGroups) - InviteGroupToBG(SelectedGroup, bg, SelectedGroup->teamId); - - bg->StartBattleground(); - - // now fill the premade bg if possible (only one team for each side has been invited yet) - if (bg->HasFreeSlots()) - { - // call a function that fills whatever we can from normal queues - FillPlayersToBG(bg, bg->GetFreeSlotsForTeam(TEAM_ALLIANCE), bg->GetFreeSlotsForTeam(TEAM_HORDE), bracket_id); - - // invite players - for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) - for (auto& SelectedGroup : m_SelectionPools[TEAM_ALLIANCE + i].SelectedGroups) - InviteGroupToBG(SelectedGroup, bg, SelectedGroup->teamId); - } + LOG_ERROR("bg.battleground", "BattlegroundQueue::Update - Cannot create battleground: {}", bgTypeId); + return; } + // invite those selection pools + InviteAllGroupsToBg(bg); + + bg->StartBattleground(); + + // clear structures + m_SelectionPools[TEAM_ALLIANCE].Init(); + m_SelectionPools[TEAM_HORDE].Init(); + } + // check if can start new normal battleground or non-rated arena if (!isRated) { if (CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam) || - (bg_template->isArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam))) + (bg_template->isArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam))) { - BattlegroundTypeId newBgTypeId = m_bgTypeId; - uint32 minLvl = bracketEntry->minLevel; - uint32 maxLvl = bracketEntry->maxLevel; - // create new battleground - Battleground* bg = sBattlegroundMgr->CreateNewBattleground(newBgTypeId, minLvl, maxLvl, m_arenaType, false); + Battleground* bg = sBattlegroundMgr->CreateNewBattleground(bgTypeId, bracketEntry, arenaType, false); if (!bg) + { + LOG_ERROR("bg.battleground", "BattlegroundQueue::Update - Cannot create battleground: {}", bgTypeId); return; + } // invite players - for (uint32 i = 0; i < PVP_TEAMS_COUNT; i++) - for (auto& SelectedGroup : m_SelectionPools[TEAM_ALLIANCE + i].SelectedGroups) - InviteGroupToBG(SelectedGroup, bg, SelectedGroup->teamId); + InviteAllGroupsToBg(bg); bg->StartBattleground(); } @@ -718,163 +816,134 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundBracket // check if can start new rated arenas (can create many in single queue update) else if (bg_template->isArena()) { - // pussywizard: everything inside this section is mine, do NOT destroy! + // found out the minimum and maximum ratings the newly added team should battle against + // arenaRating is the rating of the latest joined team, or 0 + // 0 is on (automatic update call) and we must set it to team's with longest wait time + if (!arenaRating) + { + GroupQueueInfo* front1 = nullptr; + GroupQueueInfo* front2 = nullptr; - const uint32 currMSTime = GameTime::GetGameTimeMS().count(); - const uint32 discardTime = sBattlegroundMgr->GetRatingDiscardTimer(); - const uint32 maxDefaultRatingDifference = (MaxPlayersPerTeam > 2 ? 300 : 200); - const uint32 maxCountedMMR = 2500; + if (!m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty()) + { + front1 = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].front(); + arenaRating = front1->ArenaMatchmakerRating; + } + + if (!m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty()) + { + front2 = m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].front(); + arenaRating = front2->ArenaMatchmakerRating; + } + + if (front1 && front2) + { + if (front1->JoinTime < front2->JoinTime) + arenaRating = front1->ArenaMatchmakerRating; + } + else if (!front1 && !front2) + return; // queues are empty + } + + //set rating range + uint32 arenaMinRating = (arenaRating <= sBattlegroundMgr->GetMaxRatingDifference()) ? 0 : arenaRating - sBattlegroundMgr->GetMaxRatingDifference(); + uint32 arenaMaxRating = arenaRating + sBattlegroundMgr->GetMaxRatingDifference(); + + // if max rating difference is set and the time past since server startup is greater than the rating discard time + // (after what time the ratings aren't taken into account when making teams) then + // the discard time is current_time - time_to_discard, teams that joined after that, will have their ratings taken into account + // else leave the discard time on 0, this way all ratings will be discarded + // this has to be signed value - when the server starts, this value would be negative and thus overflow + int32 discardTime = GameTime::GetGameTimeMS().count() - sBattlegroundMgr->GetRatingDiscardTimer(); + + // timer for previous opponents + int32 discardOpponentsTime = GameTime::GetGameTimeMS().count() - sWorld->getIntConfig(CONFIG_ARENA_PREV_OPPONENTS_DISCARD_TIMER); // we need to find 2 teams which will play next game GroupsQueueType::iterator itr_teams[PVP_TEAMS_COUNT]; + uint8 found = 0; + uint8 team = 0; - bool increaseItr = true; - bool reverse1 = urand(0, 1) != 0; - for (uint8 ii = BG_QUEUE_PREMADE_ALLIANCE; ii <= BG_QUEUE_PREMADE_HORDE; ii++) + for (uint8 i = BG_QUEUE_PREMADE_ALLIANCE; i < BG_QUEUE_NORMAL_ALLIANCE; i++) { - uint8 i = reverse1 ? (BG_QUEUE_PREMADE_HORDE - ii) : ii; - for (auto itr = m_QueuedGroups[bracket_id][i].begin(); itr != m_QueuedGroups[bracket_id][i].end(); (increaseItr ? ++itr : itr)) + // take the group that joined first + GroupsQueueType::iterator itr2 = m_QueuedGroups[bracket_id][i].begin(); + for (; itr2 != m_QueuedGroups[bracket_id][i].end(); ++itr2) { - increaseItr = true; - - // if arenaRatedTeamId is set - look for oponents only for one team, if not - pair every possible team - if (arenaRatedTeamId != 0 && arenaRatedTeamId != (*itr)->ArenaTeamId) - continue; - if ((*itr)->IsInvitedToBGInstanceGUID) - continue; - - uint32 MMR1 = std::min((*itr)->ArenaMatchmakerRating, maxCountedMMR); - - GroupsQueueType::iterator oponentItr; - uint8 oponentQueue = BG_QUEUE_MAX; - uint32 minOponentMMRDiff = 0xffffffff; - uint8 oponentValid = 0; - - bool reverse2 = urand(0, 1) != 0; - for (uint8 jj = BG_QUEUE_PREMADE_ALLIANCE; jj <= BG_QUEUE_PREMADE_HORDE; jj++) + // if group match conditions, then add it to pool + if (!(*itr2)->IsInvitedToBGInstanceGUID + && (((*itr2)->ArenaMatchmakerRating >= arenaMinRating && (*itr2)->ArenaMatchmakerRating <= arenaMaxRating) + || (int32)(*itr2)->JoinTime < discardTime)) { - uint8 j = reverse2 ? (BG_QUEUE_PREMADE_HORDE - jj) : jj; - bool brk = false; - for (auto itr2 = m_QueuedGroups[bracket_id][j].begin(); itr2 != m_QueuedGroups[bracket_id][j].end(); ++itr2) - { - if ((*itr)->ArenaTeamId == (*itr2)->ArenaTeamId) - continue; - if ((*itr2)->IsInvitedToBGInstanceGUID) - continue; - uint32 MMR2 = std::min((*itr2)->ArenaMatchmakerRating, maxCountedMMR); - uint32 MMRDiff = (MMR2 >= MMR1 ? MMR2 - MMR1 : MMR1 - MMR2); - - uint32 maxAllowedDiff = maxDefaultRatingDifference; - uint32 shorterWaitTime, longerWaitTime; - if (currMSTime - (*itr)->JoinTime <= currMSTime - (*itr2)->JoinTime) - { - shorterWaitTime = currMSTime - (*itr)->JoinTime; - longerWaitTime = currMSTime - (*itr2)->JoinTime; - } - else - { - shorterWaitTime = currMSTime - (*itr2)->JoinTime; - longerWaitTime = currMSTime - (*itr)->JoinTime; - } - if (longerWaitTime >= discardTime) - maxAllowedDiff += 150; - maxAllowedDiff += shorterWaitTime / 600; // increased by 100 for each minute - - // now check if this team is more appropriate than previous ones: - - if (currMSTime - (*itr)->JoinTime >= 20 * MINUTE * IN_MILLISECONDS && (oponentValid < 3 || MMRDiff < minOponentMMRDiff)) // after 20 minutes of waiting, pair with closest mmr, regardless the difference - { - oponentValid = 3; - minOponentMMRDiff = MMRDiff; - oponentItr = itr2; - oponentQueue = j; - } - else if (MMR1 >= 2000 && MMR2 >= 2000 && longerWaitTime >= 2 * discardTime && (oponentValid < 2 || MMRDiff < minOponentMMRDiff)) // after 6 minutes of waiting, pair any 2000+ vs 2000+ - { - oponentValid = 2; - minOponentMMRDiff = MMRDiff; - oponentItr = itr2; - oponentQueue = j; - } - else if (oponentValid < 2 && MMRDiff < minOponentMMRDiff) - { - if (!oponentValid) - { - minOponentMMRDiff = MMRDiff; - oponentItr = itr2; - oponentQueue = j; - if (MMRDiff <= maxAllowedDiff) - oponentValid = 1; - } - if ((MMR1 < 1800 || MMR2 < 1800) && MaxPlayersPerTeam == 2 && MMRDiff <= maxDefaultRatingDifference) // in 2v2 below 1800 mmr - priority for default allowed difference - { - minOponentMMRDiff = MMRDiff; - oponentItr = itr2; - oponentQueue = j; - brk = true; - break; - } - } - } - if (brk) - break; - } - - if (oponentQueue != BG_QUEUE_MAX) - { - if (oponentValid) - { - itr_teams[i] = itr; - itr_teams[i == 0 ? 1 : 0] = oponentItr; - - { - GroupQueueInfo* aTeam = *itr_teams[TEAM_ALLIANCE]; - GroupQueueInfo* hTeam = *itr_teams[TEAM_HORDE]; - Battleground* arena = sBattlegroundMgr->CreateNewBattleground(m_bgTypeId, bracketEntry->minLevel, bracketEntry->maxLevel, m_arenaType, true); - if (!arena) - return; - - aTeam->OpponentsTeamRating = hTeam->ArenaTeamRating; - hTeam->OpponentsTeamRating = aTeam->ArenaTeamRating; - aTeam->OpponentsMatchmakerRating = hTeam->ArenaMatchmakerRating; - hTeam->OpponentsMatchmakerRating = aTeam->ArenaMatchmakerRating; - - // now we must move team if we changed its faction to another faction queue, because then we will spam log by errors in Queue::RemovePlayer - if (aTeam->teamId != TEAM_ALLIANCE) - { - aTeam->_groupType = BG_QUEUE_PREMADE_ALLIANCE; - m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].push_front(aTeam); - m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].erase(itr_teams[TEAM_ALLIANCE]); - increaseItr = false; - itr = m_QueuedGroups[bracket_id][i].begin(); - } - if (hTeam->teamId != TEAM_HORDE) - { - hTeam->_groupType = BG_QUEUE_PREMADE_HORDE; - m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].push_front(hTeam); - m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].erase(itr_teams[TEAM_HORDE]); - increaseItr = false; - itr = m_QueuedGroups[bracket_id][i].begin(); - } - - arena->SetArenaMatchmakerRating(TEAM_ALLIANCE, aTeam->ArenaMatchmakerRating); - arena->SetArenaMatchmakerRating(TEAM_HORDE, hTeam->ArenaMatchmakerRating); - InviteGroupToBG(aTeam, arena, TEAM_ALLIANCE); - InviteGroupToBG(hTeam, arena, TEAM_HORDE); - - arena->StartBattleground(); - } - - if (arenaRatedTeamId) - return; - else - continue; - } - else if (arenaRatedTeamId) - return; + itr_teams[found++] = itr2; + team = i; + break; } } } + + if (!found) + return; + + if (found == 1) + { + for (GroupsQueueType::iterator itr3 = itr_teams[0]; itr3 != m_QueuedGroups[bracket_id][team].end(); ++itr3) + { + if (!(*itr3)->IsInvitedToBGInstanceGUID + && (((*itr3)->ArenaMatchmakerRating >= arenaMinRating && (*itr3)->ArenaMatchmakerRating <= arenaMaxRating) || (int32)(*itr3)->JoinTime < discardTime) + && ((*itr_teams[0])->ArenaTeamId != (*itr3)->PreviousOpponentsTeamId || ((int32)(*itr3)->JoinTime < discardOpponentsTime)) + && (*itr_teams[0])->ArenaTeamId != (*itr3)->ArenaTeamId) + { + itr_teams[found++] = itr3; + break; + } + } + } + + //if we have 2 teams, then start new arena and invite players! + if (found == 2) + { + GroupQueueInfo* aTeam = *itr_teams[TEAM_ALLIANCE]; + GroupQueueInfo* hTeam = *itr_teams[TEAM_HORDE]; + + Battleground* arena = sBattlegroundMgr->CreateNewBattleground(bgTypeId, bracketEntry, arenaType, true); + if (!arena) + { + LOG_ERROR("bg.battleground", "BattlegroundQueue::Update couldn't create arena instance for rated arena match!"); + return; + } + + aTeam->OpponentsTeamRating = hTeam->ArenaTeamRating; + hTeam->OpponentsTeamRating = aTeam->ArenaTeamRating; + aTeam->OpponentsMatchmakerRating = hTeam->ArenaMatchmakerRating; + hTeam->OpponentsMatchmakerRating = aTeam->ArenaMatchmakerRating; + + LOG_DEBUG("bg.battleground", "setting oposite teamrating for team {} to {}", aTeam->ArenaTeamId, aTeam->OpponentsTeamRating); + LOG_DEBUG("bg.battleground", "setting oposite teamrating for team {} to {}", hTeam->ArenaTeamId, hTeam->OpponentsTeamRating); + + // now we must move team if we changed its faction to another faction queue, because then we will spam log by errors in Queue::RemovePlayer + if (aTeam->teamId != TEAM_ALLIANCE) + { + aTeam->GroupType = BG_QUEUE_PREMADE_ALLIANCE; + m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].push_front(aTeam); + m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].erase(itr_teams[TEAM_ALLIANCE]); + } + + if (hTeam->teamId != TEAM_HORDE) + { + hTeam->GroupType = BG_QUEUE_PREMADE_HORDE; + m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].push_front(hTeam); + m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].erase(itr_teams[TEAM_HORDE]); + } + + arena->SetArenaMatchmakerRating(TEAM_ALLIANCE, aTeam->ArenaMatchmakerRating); + arena->SetArenaMatchmakerRating(TEAM_HORDE, hTeam->ArenaMatchmakerRating); + InviteGroupToBG(aTeam, arena, TEAM_ALLIANCE); + InviteGroupToBG(hTeam, arena, TEAM_HORDE); + + LOG_DEBUG("bg.battleground", "Starting rated arena match!"); + arena->StartBattleground(); + } } if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_TIMED)) @@ -1096,16 +1165,17 @@ int32 BattlegroundQueue::GetQueueAnnouncementTimer(uint32 bracketId) const void BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg, TeamId teamId) { - if (ginfo->IsInvitedToBGInstanceGUID) - return; - // set side if needed if (teamId != TEAM_NEUTRAL) ginfo->teamId = teamId; + if (ginfo->IsInvitedToBGInstanceGUID) + return; + // set invitation ginfo->IsInvitedToBGInstanceGUID = bg->GetInstanceID(); + BattlegroundTypeId bgTypeId = bg->GetBgTypeID(); BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(ginfo->BgTypeId, ginfo->ArenaType); BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); @@ -1129,25 +1199,31 @@ void BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg, // increase invited counter for each invited player bg->IncreaseInvitedCount(ginfo->teamId); + player->SetInviteForBattlegroundQueueType(bgQueueTypeId, ginfo->IsInvitedToBGInstanceGUID); + // create remind invite events - BGQueueInviteEvent* inviteEvent = new BGQueueInviteEvent(player->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, ginfo->BgTypeId, ginfo->ArenaType, ginfo->RemoveInviteTime); + BGQueueInviteEvent* inviteEvent = new BGQueueInviteEvent(player->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, bgTypeId, ginfo->ArenaType, ginfo->RemoveInviteTime); bgQueue.AddEvent(inviteEvent, INVITATION_REMIND_TIME); + // create automatic remove events - BGQueueRemoveEvent* removeEvent = new BGQueueRemoveEvent(player->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, bgQueueTypeId, ginfo->RemoveInviteTime); + BGQueueRemoveEvent* removeEvent = new BGQueueRemoveEvent(player->GetGUID(), ginfo->IsInvitedToBGInstanceGUID, bgTypeId, bgQueueTypeId, ginfo->RemoveInviteTime); bgQueue.AddEvent(removeEvent, INVITE_ACCEPT_WAIT_TIME); // Check queueSlot uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId); ASSERT(queueSlot < PLAYER_MAX_BATTLEGROUND_QUEUES); + LOG_DEBUG("bg.battleground", "Battleground: invited player {} {} to BG instance {} queueindex {} bgtype {}", + player->GetName(), player->GetGUID().ToString(), bg->GetInstanceID(), queueSlot, bgTypeId); + // send status packet WorldPacket data; - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType, TEAM_NEUTRAL, bg->isRated(), ginfo->BgTypeId); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType, TEAM_NEUTRAL, bg->isRated()); player->GetSession()->SendPacket(&data); // pussywizard: if (bg->isArena() && bg->isRated()) - bg->ArenaLogEntries[player->GetGUID()].Fill(player->GetName().c_str(), player->GetGUID().GetCounter(), player->GetSession()->GetAccountId(), ginfo->ArenaTeamId, player->GetSession()->GetRemoteAddress()); + bg->ArenaLogEntries[player->GetGUID()].Fill(player->GetName(), player->GetGUID().GetCounter(), player->GetSession()->GetAccountId(), ginfo->ArenaTeamId, player->GetSession()->GetRemoteAddress()); } } @@ -1163,7 +1239,7 @@ bool BGQueueInviteEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) if (!player) return true; - Battleground* bg = sBattlegroundMgr->GetBattleground(m_BgInstanceGUID); + Battleground* bg = sBattlegroundMgr->GetBattleground(m_BgInstanceGUID, m_BgTypeId); // if battleground ended, do nothing if (!bg) @@ -1201,7 +1277,7 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) if (!player) return true; - Battleground* bg = sBattlegroundMgr->GetBattleground(m_BgInstanceGUID); + Battleground* bg = sBattlegroundMgr->GetBattleground(m_BgInstanceGUID, m_BgTypeId); // battleground can be already deleted, bg may be nullptr! @@ -1226,8 +1302,19 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) sScriptMgr->OnBattlegroundDesertion(player, BG_DESERTION_TYPE_NO_ENTER_BUTTON); } + + LOG_DEBUG("bg.battleground", "Battleground: removing player {} from bg queue for instance {} because of not pressing enter battle in time.", player->GetGUID().ToString(), m_BgInstanceGUID); + player->RemoveBattlegroundQueueId(m_BgQueueTypeId); - bgQueue.RemovePlayer(m_PlayerGuid, false, queueSlot); + bgQueue.RemovePlayer(m_PlayerGuid, true); + + //update queues if battleground isn't ended + if (bg && bg->isBattleground() && bg->GetStatus() != STATUS_WAIT_LEAVE) + sBattlegroundMgr->ScheduleQueueUpdate(0, 0, m_BgQueueTypeId, m_BgTypeId, bg->GetBracketId()); + + WorldPacket data; + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); + player->SendDirectMessage(&data); } } diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h index b2b10eb09..1ea357fe7 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.h +++ b/src/server/game/Battlegrounds/BattlegroundQueue.h @@ -25,7 +25,7 @@ #include #include -#define COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME 10 +constexpr auto COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME = 10; struct GroupQueueInfo // stores information about the group in queue (also used when joined as solo!) { @@ -43,10 +43,9 @@ struct GroupQueueInfo // stores informatio uint32 ArenaMatchmakerRating; // if rated match, inited to the rating of the team uint32 OpponentsTeamRating; // for rated arena matches uint32 OpponentsMatchmakerRating; // for rated arena matches - - // pussywizard: for internal use - uint8 _bracketId; - uint8 _groupType; + uint32 PreviousOpponentsTeamId; // excluded from the current queue until the timer is met + uint8 BracketId; // BattlegroundBracketId + uint8 GroupType; // BattlegroundQueueGroupTypes }; enum BattlegroundQueueGroupTypes @@ -61,22 +60,21 @@ enum BattlegroundQueueGroupTypes BG_QUEUE_MAX = 10 }; -class Battleground; class BattlegroundQueue { public: BattlegroundQueue(); ~BattlegroundQueue(); - void BattlegroundQueueUpdate(uint32 diff, BattlegroundBracketId bracket_id, bool isRated, uint32 arenaRatedTeamId); + void BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating); void UpdateEvents(uint32 diff); - void FillPlayersToBG(Battleground* bg, int32 aliFree, int32 hordeFree, BattlegroundBracketId bracket_id); + void FillPlayersToBG(Battleground* bg, BattlegroundBracketId bracket_id); bool CheckPremadeMatch(BattlegroundBracketId bracket_id, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam); bool CheckNormalMatch(Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers); bool CheckSkirmishForSameFaction(BattlegroundBracketId bracket_id, uint32 minPlayersPerTeam); - GroupQueueInfo* AddGroup(Player* leader, Group* group, PvPDifficultyEntry const* bracketEntry, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 ArenaTeamId); - void RemovePlayer(ObjectGuid guid, bool sentToBg, uint32 playerQueueSlot); + GroupQueueInfo* AddGroup(Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId = 0, uint32 opponentsArenaTeamId = 0); + void RemovePlayer(ObjectGuid guid, bool decreaseInvitedCount); bool IsPlayerInvitedToRatedArena(ObjectGuid pl_guid); bool IsPlayerInvited(ObjectGuid pl_guid, uint32 bgInstanceGuid, uint32 removeTime); bool GetPlayerGroupInfoData(ObjectGuid guid, GroupQueueInfo* ginfo); @@ -89,7 +87,6 @@ public: void SendJoinMessageArenaQueue(Player* leader, GroupQueueInfo* ginfo, PvPDifficultyEntry const* bracketEntry, bool isRated); void SendExitMessageArenaQueue(GroupQueueInfo* ginfo); - void SetBgTypeIdAndArenaType(BattlegroundTypeId b, uint8 a) { m_bgTypeId = b; m_arenaType = ArenaType(a); } // pussywizard void AddEvent(BasicEvent* Event, uint64 e_time); typedef std::map QueuedPlayersMap; @@ -127,15 +124,10 @@ public: //one selection pool for horde, other one for alliance SelectionPool m_SelectionPools[PVP_TEAMS_COUNT]; - ArenaType GetArenaType() { return m_arenaType; } - BattlegroundTypeId GetBGTypeID() { return m_bgTypeId; } - void SetQueueAnnouncementTimer(uint32 bracketId, int32 timer, bool isCrossFactionBG = true); [[nodiscard]] int32 GetQueueAnnouncementTimer(uint32 bracketId) const; private: - BattlegroundTypeId m_bgTypeId; - ArenaType m_arenaType; uint32 m_WaitTimes[PVP_TEAMS_COUNT][MAX_BATTLEGROUND_BRACKETS][COUNT_OF_PLAYERS_TO_AVERAGE_WAIT_TIME]; uint32 m_WaitTimeLastIndex[PVP_TEAMS_COUNT][MAX_BATTLEGROUND_BRACKETS]; @@ -176,9 +168,8 @@ private: class BGQueueRemoveEvent : public BasicEvent { public: - BGQueueRemoveEvent(ObjectGuid pl_guid, uint32 bgInstanceGUID, BattlegroundQueueTypeId bgQueueTypeId, uint32 removeTime) - : m_PlayerGuid(pl_guid), m_BgInstanceGUID(bgInstanceGUID), m_RemoveTime(removeTime), m_BgQueueTypeId(bgQueueTypeId) - {} + BGQueueRemoveEvent(ObjectGuid pl_guid, uint32 bgInstanceGUID, BattlegroundTypeId BgTypeId, BattlegroundQueueTypeId bgQueueTypeId, uint32 removeTime) : + m_PlayerGuid(pl_guid), m_BgInstanceGUID(bgInstanceGUID), m_RemoveTime(removeTime), m_BgTypeId(BgTypeId), m_BgQueueTypeId(bgQueueTypeId) { } ~BGQueueRemoveEvent() override = default; @@ -188,6 +179,7 @@ private: ObjectGuid m_PlayerGuid; uint32 m_BgInstanceGUID; uint32 m_RemoveTime; + BattlegroundTypeId m_BgTypeId; BattlegroundQueueTypeId m_BgQueueTypeId; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index 554705ba6..403664faf 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -287,18 +287,6 @@ protected: uint32 BasesDefended = 0; }; -struct CaptureABPointInfo -{ - CaptureABPointInfo() : _ownerTeamId(TEAM_NEUTRAL), _iconNone(0), _iconCapture(0), _state(BG_AB_NODE_STATE_NEUTRAL), _captured(false) {} - - TeamId _ownerTeamId; - uint32 _iconNone; - uint32 _iconCapture; - uint8 _state; - - bool _captured; -}; - class AC_GAME_API BattlegroundAB : public Battleground { public: @@ -323,10 +311,7 @@ public: bool IsTeamScores500Disadvantage(TeamId teamId) const { return _teamScores500Disadvantage[teamId]; } TeamId GetPrematureWinner() override; - - [[nodiscard]] CaptureABPointInfo const& GetCapturePointInfo(uint32 node) const { return _capturePointInfo[node]; } - -private : +private: void PostUpdateImpl(uint32 diff) override; void DeleteBanner(uint8 node); @@ -336,7 +321,21 @@ private : void NodeDeoccupied(uint8 node); void ApplyPhaseMask(); - CaptureABPointInfo _capturePointInfo[BG_AB_DYNAMIC_NODES_COUNT]; + struct CapturePointInfo + { + CapturePointInfo() : _ownerTeamId(TEAM_NEUTRAL), _iconNone(0), _iconCapture(0), _state(BG_AB_NODE_STATE_NEUTRAL), _captured(false) + { + } + + TeamId _ownerTeamId; + uint32 _iconNone; + uint32 _iconCapture; + uint8 _state; + + bool _captured; + }; + + CapturePointInfo _capturePointInfo[BG_AB_DYNAMIC_NODES_COUNT]; EventMap _bgEvents; uint32 _honorTics; uint32 _reputationTics; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index c151117f5..4e364df5b 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -376,25 +376,6 @@ protected: uint32 FlagCaptures = 0; }; -struct CaptureEYPointInfo -{ - CaptureEYPointInfo() : _ownerTeamId(TEAM_NEUTRAL), _barStatus(BG_EY_PROGRESS_BAR_STATE_MIDDLE), _areaTrigger(0) - { - _playersCount[TEAM_ALLIANCE] = 0; - _playersCount[TEAM_HORDE] = 0; - } - - Player* player = nullptr; - TeamId _ownerTeamId; - int8 _barStatus; - uint32 _areaTrigger; - int8 _playersCount[PVP_TEAMS_COUNT]; - - bool IsUnderControl(TeamId teamId) const { return _ownerTeamId == teamId; } - bool IsUnderControl() const { return _ownerTeamId != TEAM_NEUTRAL; } - bool IsUncontrolled() const { return _ownerTeamId == TEAM_NEUTRAL; } -}; - class AC_GAME_API BattlegroundEY : public Battleground { public: @@ -434,8 +415,6 @@ public: bool AllNodesConrolledByTeam(TeamId teamId) const override; TeamId GetPrematureWinner() override; - [[nodiscard]] CaptureEYPointInfo const& GetCapturePointInfo(uint32 node) const { return _capturePointInfo[node]; } - private: void PostUpdateImpl(uint32 diff) override; @@ -451,7 +430,26 @@ private: /* Scorekeeping */ void AddPoints(TeamId teamId, uint32 points); - CaptureEYPointInfo _capturePointInfo[EY_POINTS_MAX]; + struct CapturePointInfo + { + CapturePointInfo() : _ownerTeamId(TEAM_NEUTRAL), _barStatus(BG_EY_PROGRESS_BAR_STATE_MIDDLE), _areaTrigger(0) + { + _playersCount[TEAM_ALLIANCE] = 0; + _playersCount[TEAM_HORDE] = 0; + } + + TeamId _ownerTeamId; + int8 _barStatus; + uint32 _areaTrigger; + int8 _playersCount[PVP_TEAMS_COUNT]; + Player* player = nullptr; + + bool IsUnderControl(TeamId teamId) const { return _ownerTeamId == teamId; } + bool IsUnderControl() const { return _ownerTeamId != TEAM_NEUTRAL; } + bool IsUncontrolled() const { return _ownerTeamId == TEAM_NEUTRAL; } + }; + + CapturePointInfo _capturePointInfo[EY_POINTS_MAX]; EventMap _bgEvents; uint32 _honorTics; uint8 _ownedPointsCount[PVP_TEAMS_COUNT]; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index e8ec81bf0..6a6b40188 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -983,9 +983,6 @@ public: bool AllNodesConrolledByTeam(TeamId teamId) const override; // overwrited bool IsResourceGlutAllowed(TeamId teamId) const; void DoAction(uint32 action, ObjectGuid guid) override; - - [[nodiscard]] ICNodePoint const& GetICNodePoint(uint8 index) { return nodePoint[index]; } - private: uint32 closeFortressDoorsTimer; bool doorsClosed; diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp index 3eb76c783..bd1f0a952 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.cpp +++ b/src/server/game/Chat/Channels/ChannelMgr.cpp @@ -56,7 +56,7 @@ void ChannelMgr::LoadChannels() QueryResult result = CharacterDatabase.Query("SELECT channelId, name, team, announce, ownership, password FROM channels ORDER BY channelId ASC"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 channels. DB table `channels` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 channels. DB table `channels` is empty."); return; } @@ -171,7 +171,7 @@ void ChannelMgr::LoadChannelRights() QueryResult result = CharacterDatabase.Query("SELECT name, flags, speakdelay, joinmessage, delaymessage, moderators FROM channels_rights"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 Channel Rights!"); + LOG_WARN("server.loading", ">> Loaded 0 Channel Rights!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 4fb805da1..163412d25 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -61,19 +61,27 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) } case CONDITION_ITEM: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - // don't allow 0 items (it's checked during table load) - ASSERT(ConditionValue2); - bool checkBank = !!ConditionValue3; - condMeets = player->HasItemCount(ConditionValue1, ConditionValue2, checkBank); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + // don't allow 0 items (it's checked during table load) + ASSERT(ConditionValue2); + bool checkBank = !!ConditionValue3; + condMeets = player->HasItemCount(ConditionValue1, ConditionValue2, checkBank); + } } break; } case CONDITION_ITEM_EQUIPPED: { - if (Player* player = object->ToPlayer()) - condMeets = player->HasItemOrGemWithIdEquipped(ConditionValue1, 1); + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->HasItemOrGemWithIdEquipped(ConditionValue1, 1); + } + } break; } case CONDITION_ZONEID: @@ -81,26 +89,39 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) break; case CONDITION_REPUTATION_RANK: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - if (FactionEntry const* faction = sFactionStore.LookupEntry(ConditionValue1)) - condMeets = (ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction))); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + if (FactionEntry const* faction = sFactionStore.LookupEntry(ConditionValue1)) + { + condMeets = (ConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction))); + } + } } break; } case CONDITION_ACHIEVEMENT: { - if (Player* player = object->ToPlayer()) - condMeets = player->HasAchieved(ConditionValue1); + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->HasAchieved(ConditionValue1); + } + } break; } case CONDITION_TEAM: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - // Xinef: DB Data compatibility... - uint32 teamOld = player->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE; - condMeets = teamOld == ConditionValue1; + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + // Xinef: DB Data compatibility... + uint32 teamOld = player->GetTeamId() == TEAM_ALLIANCE ? ALLIANCE : HORDE; + condMeets = teamOld == ConditionValue1; + } } break; } @@ -118,56 +139,83 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) } case CONDITION_GENDER: { - if (Player* player = object->ToPlayer()) - condMeets = player->getGender() == ConditionValue1; + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->getGender() == ConditionValue1; + } + } break; } case CONDITION_SKILL: { - if (Player* player = object->ToPlayer()) - condMeets = player->HasSkill(ConditionValue1) && player->GetBaseSkillValue(ConditionValue1) >= ConditionValue2; + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->HasSkill(ConditionValue1) && player->GetBaseSkillValue(ConditionValue1) >= ConditionValue2; + } + } break; } case CONDITION_QUESTREWARDED: { - if (Player* player = object->ToPlayer()) - condMeets = player->GetQuestRewardStatus(ConditionValue1); + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->GetQuestRewardStatus(ConditionValue1); + } + } break; } case CONDITION_QUESTTAKEN: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - QuestStatus status = player->GetQuestStatus(ConditionValue1); - condMeets = (status == QUEST_STATUS_INCOMPLETE); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + QuestStatus status = player->GetQuestStatus(ConditionValue1); + condMeets = (status == QUEST_STATUS_INCOMPLETE); + } } break; } case CONDITION_QUEST_COMPLETE: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - QuestStatus status = player->GetQuestStatus(ConditionValue1); - condMeets = (status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(ConditionValue1)); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + QuestStatus status = player->GetQuestStatus(ConditionValue1); + condMeets = (status == QUEST_STATUS_COMPLETE && !player->GetQuestRewardStatus(ConditionValue1)); + } } break; } case CONDITION_QUEST_NONE: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - QuestStatus status = player->GetQuestStatus(ConditionValue1); - condMeets = (status == QUEST_STATUS_NONE); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + QuestStatus status = player->GetQuestStatus(ConditionValue1); + condMeets = (status == QUEST_STATUS_NONE); + } } break; } case CONDITION_QUEST_SATISFY_EXCLUSIVE: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - // Xinef: cannot be null, checked at loading - const Quest* quest = sObjectMgr->GetQuestTemplate(ConditionValue1); - condMeets = !player->IsQuestRewarded(ConditionValue1) && player->SatisfyQuestExclusiveGroup(quest, false); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + // Xinef: cannot be null, checked at loading + const Quest* quest = sObjectMgr->GetQuestTemplate(ConditionValue1); + condMeets = !player->IsQuestRewarded(ConditionValue1) && player->SatisfyQuestExclusiveGroup(quest, false); + } } break; } @@ -183,18 +231,18 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) { switch (ConditionValue3) { - case INSTANCE_INFO_DATA: - condMeets = instance->GetData(ConditionValue1) == ConditionValue2; - break; - case INSTANCE_INFO_GUID_DATA: - condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2)); - break; - case INSTANCE_INFO_BOSS_STATE: - condMeets = instance->GetBossState(ConditionValue1) == EncounterState(ConditionValue2); - break; - case INSTANCE_INFO_DATA64: - condMeets = instance->GetData64(ConditionValue1) == ConditionValue2; - break; + case INSTANCE_INFO_DATA: + condMeets = instance->GetData(ConditionValue1) == ConditionValue2; + break; + case INSTANCE_INFO_GUID_DATA: + condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2)); + break; + case INSTANCE_INFO_BOSS_STATE: + condMeets = instance->GetBossState(ConditionValue1) == EncounterState(ConditionValue2); + break; + case INSTANCE_INFO_DATA64: + condMeets = instance->GetData64(ConditionValue1) == ConditionValue2; + break; } } } @@ -208,8 +256,13 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) break; case CONDITION_SPELL: { - if (Player* player = object->ToPlayer()) - condMeets = player->HasSpell(ConditionValue1); + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->HasSpell(ConditionValue1); + } + } break; } case CONDITION_LEVEL: @@ -220,8 +273,13 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) } case CONDITION_DRUNKENSTATE: { - if (Player* player = object->ToPlayer()) - condMeets = (uint32) Player::GetDrunkenstateByValue(player->GetDrunkValue()) >= ConditionValue1; + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = (uint32)Player::GetDrunkenstateByValue(player->GetDrunkValue()) >= ConditionValue1; + } + } break; } case CONDITION_NEAR_CREATURE: @@ -248,14 +306,14 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) { switch (object->GetTypeId()) { - case TYPEID_UNIT: - condMeets &= object->ToCreature()->GetSpawnId() == ConditionValue3; - break; - case TYPEID_GAMEOBJECT: - condMeets &= object->ToGameObject()->GetSpawnId() == ConditionValue3; - break; - default: - break; + case TYPEID_UNIT: + condMeets &= object->ToCreature()->GetSpawnId() == ConditionValue3; + break; + case TYPEID_GAMEOBJECT: + condMeets &= object->ToGameObject()->GetSpawnId() == ConditionValue3; + break; + default: + break; } } } @@ -276,24 +334,24 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) { switch (ConditionValue2) { - case RELATION_SELF: - condMeets = unit == toUnit; - break; - case RELATION_IN_PARTY: - condMeets = unit->IsInPartyWith(toUnit); - break; - case RELATION_IN_RAID_OR_PARTY: - condMeets = unit->IsInRaidWith(toUnit); - break; - case RELATION_OWNED_BY: - condMeets = unit->GetOwnerGUID() == toUnit->GetGUID(); - break; - case RELATION_PASSENGER_OF: - condMeets = unit->IsOnVehicle(toUnit); - break; - case RELATION_CREATED_BY: - condMeets = unit->GetCreatorGUID() == toUnit->GetGUID(); - break; + case RELATION_SELF: + condMeets = unit == toUnit; + break; + case RELATION_IN_PARTY: + condMeets = unit->IsInPartyWith(toUnit); + break; + case RELATION_IN_RAID_OR_PARTY: + condMeets = unit->IsInRaidWith(toUnit); + break; + case RELATION_OWNED_BY: + condMeets = unit->GetOwnerGUID() == toUnit->GetGUID(); + break; + case RELATION_PASSENGER_OF: + condMeets = unit->IsOnVehicle(toUnit); + break; + case RELATION_CREATED_BY: + condMeets = unit->GetCreatorGUID() == toUnit->GetGUID(); + break; } } } @@ -346,8 +404,13 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) } case CONDITION_TITLE: { - if (Player* player = object->ToPlayer()) - condMeets = player->HasTitle(ConditionValue1); + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->HasTitle(ConditionValue1); + } + } break; } case CONDITION_SPAWNMASK: @@ -382,35 +445,52 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) } case CONDITION_QUESTSTATE: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - uint32 queststateConditionValue1 = player->GetQuestStatus(ConditionValue1); - if (((ConditionValue2 & (1 << QUEST_STATUS_NONE)) && (queststateConditionValue1 == QUEST_STATUS_NONE)) || ((ConditionValue2 & (1 << QUEST_STATUS_COMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_COMPLETE)) || ((ConditionValue2 & (1 << QUEST_STATUS_INCOMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_INCOMPLETE)) || ((ConditionValue2 & (1 << QUEST_STATUS_FAILED)) && (queststateConditionValue1 == QUEST_STATUS_FAILED)) || - ((ConditionValue2 & (1 << QUEST_STATUS_REWARDED)) && player->GetQuestRewardStatus(ConditionValue1))) + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) { - condMeets = true; + uint32 queststateConditionValue1 = player->GetQuestStatus(ConditionValue1); + if (((ConditionValue2 & (1 << QUEST_STATUS_NONE)) && (queststateConditionValue1 == QUEST_STATUS_NONE)) || + ((ConditionValue2 & (1 << QUEST_STATUS_COMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_COMPLETE)) || + ((ConditionValue2 & (1 << QUEST_STATUS_INCOMPLETE)) && (queststateConditionValue1 == QUEST_STATUS_INCOMPLETE)) || + ((ConditionValue2 & (1 << QUEST_STATUS_FAILED)) && (queststateConditionValue1 == QUEST_STATUS_FAILED)) || + ((ConditionValue2 & (1 << QUEST_STATUS_REWARDED)) && player->GetQuestRewardStatus(ConditionValue1))) + { + condMeets = true; + } } } break; } case CONDITION_DAILY_QUEST_DONE: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - condMeets = player->IsDailyQuestDone(ConditionValue1); + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->IsDailyQuestDone(ConditionValue1); + } } break; } case CONDITION_QUEST_OBJECTIVE_PROGRESS: { - if (Player* player = object->ToPlayer()) + if (Unit* unit = object->ToUnit()) { - const Quest* quest = ASSERT_NOTNULL(sObjectMgr->GetQuestTemplate(ConditionValue1)); - uint16 log_slot = player->FindQuestSlot(quest->GetQuestId()); - if (log_slot >= MAX_QUEST_LOG_SIZE) - break; - if (player->GetQuestSlotCounter(log_slot, ConditionValue2) == ConditionValue3) - condMeets = true; + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + Quest const* quest = ASSERT_NOTNULL(sObjectMgr->GetQuestTemplate(ConditionValue1)); + uint16 log_slot = player->FindQuestSlot(quest->GetQuestId()); + if (log_slot >= MAX_QUEST_LOG_SIZE) + { + break; + } + + if (player->GetQuestSlotCounter(log_slot, ConditionValue2) == ConditionValue3) + { + condMeets = true; + } + } } break; } @@ -427,15 +507,27 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) } case CONDITION_PET_TYPE: { - if (Player* player = object->ToPlayer()) - if (Pet* pet = player->GetPet()) - condMeets = (((1 << pet->getPetType()) & ConditionValue1) != 0); + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + if (Pet* pet = player->GetPet()) + { + condMeets = (((1 << pet->getPetType()) & ConditionValue1) != 0); + } + } + } break; } case CONDITION_TAXI: { - if (Player* player = object->ToPlayer()) - condMeets = player->IsInFlight(); + if (Unit* unit = object->ToUnit()) + { + if (Player* player = unit->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + condMeets = player->IsInFlight(); + } + } break; } case CONDITION_CHARMED: @@ -935,7 +1027,7 @@ void ConditionMgr::LoadConditions(bool isReload) if (!result) { - LOG_ERROR("server.loading", ">> Loaded 0 conditions. DB table `conditions` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 conditions. DB table `conditions` is empty!"); return; } diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp index d31413cc6..e9fbe974a 100644 --- a/src/server/game/Conditions/DisableMgr.cpp +++ b/src/server/game/Conditions/DisableMgr.cpp @@ -63,7 +63,7 @@ namespace DisableMgr if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 disables. DB table `disables` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 disables. DB table `disables` is empty!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/DataStores/M2Stores.cpp b/src/server/game/DataStores/M2Stores.cpp index ca8f5008f..e2b81712a 100644 --- a/src/server/game/DataStores/M2Stores.cpp +++ b/src/server/game/DataStores/M2Stores.cpp @@ -250,7 +250,7 @@ void LoadM2Cameras(std::string const& dataPath) LOG_ERROR("server.loading", "Camera file %s is damaged. Camera references position beyond file end", filename.string().c_str()); } - LOG_INFO("server.loading", ">> Loaded %u cinematic waypoint sets in %u ms", (uint32)sFlyByCameraStore.size(), GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", ">> Loaded {} cinematic waypoint sets in {} ms", (uint32)sFlyByCameraStore.size(), GetMSTimeDiffToNow(oldMSTime)); } std::vector const* GetFlyByCameras(uint32 cinematicCameraId) diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 7f763775c..3dad1840d 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1708,7 +1708,7 @@ namespace lfg if (bgQueueTypeId != BATTLEGROUND_QUEUE_NONE) { plr->RemoveBattlegroundQueueId(bgQueueTypeId); - sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId).RemovePlayer(plr->GetGUID(), false, i); + sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId).RemovePlayer(plr->GetGUID(), true); } } } diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 4ce30904b..b80f32d81 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -206,7 +206,7 @@ Creature::Creature(bool isWorldObject): Unit(isWorldObject), MovableMapObject(), m_transportCheckTimer(1000), lootPickPocketRestoreTime(0), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_moveInLineOfSightDisabled(false), m_moveInLineOfSightStrictlyDisabled(false), - m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_detectionDistance(20.0f), m_waypointID(0), m_path_id(0), m_formation(nullptr), _lastDamagedTime(nullptr), m_cannotReachTimer(0), + m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_detectionDistance(20.0f), m_waypointID(0), m_path_id(0), m_formation(nullptr), _lastDamagedTime(nullptr), m_cannotReachTarget(false), m_cannotReachTimer(0), _isMissingSwimmingFlagOutOfCombat(false), m_assistanceTimer(0) { m_regenTimer = CREATURE_REGEN_INTERVAL; @@ -1299,7 +1299,6 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) m_spawnId = sObjectMgr->GenerateCreatureSpawnId(); CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId); - data.spawnId = m_spawnId; uint32 displayId = GetNativeDisplayId(); uint32 npcflag = GetUInt32Value(UNIT_NPC_FLAGS); @@ -3421,19 +3420,15 @@ bool Creature::IsMovementPreventedByCasting() const return false; } -bool Creature::SetCannotReachTarget(bool cannotReach, bool isChase /*= true*/) +void Creature::SetCannotReachTarget(bool cannotReach) { - if (!isChase || !Unit::SetCannotReachTarget(cannotReach)) - { - return false; - } - + if (cannotReach == m_cannotReachTarget) + return; + m_cannotReachTarget = cannotReach; m_cannotReachTimer = 0; if (cannotReach) LOG_DEBUG("entities.unit", "Creature::SetCannotReachTarget() called with true. Details: {}", GetDebugInfo()); - - return true; } time_t Creature::GetLastDamagedTime() const diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 07dc9c4a7..1d14b6fe5 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -359,7 +359,6 @@ typedef std::unordered_map EquipmentInfo struct CreatureData { CreatureData() = default; - ObjectGuid::LowType spawnId{0}; uint32 id1{0}; // entry in creature_template uint32 id2{0}; // entry in creature_template uint32 id3{0}; // entry in creature_template diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index 84c73a892..161919439 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -86,7 +86,7 @@ void FormationMgr::LoadCreatureFormations() QueryResult result = WorldDatabase.Query("SELECT leaderGUID, memberGUID, dist, angle, groupAI, point_1, point_2 FROM creature_formations ORDER BY leaderGUID"); if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 creatures in formations. DB table `creature_formations` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 creatures in formations. DB table `creature_formations` is empty!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index a40e75b4f..ff5b9a8f5 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1009,7 +1009,6 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask, bool // update in loaded data (changing data only in this place) GameObjectData& data = sObjectMgr->NewGOData(m_spawnId); - data.spawnId = m_spawnId; data.id = GetEntry(); data.mapid = mapid; @@ -2547,17 +2546,32 @@ void GameObject::SetLootRecipient(Map* map) bool GameObject::IsLootAllowedFor(Player const* player) const { if (!m_lootRecipient && !m_lootRecipientGroup) + { return true; + } if (player->GetGUID() == m_lootRecipient) + { return true; + } if (player->HasPendingBind()) + { return false; + } + // if we dont have a group we arent the recipient + // if go doesnt have group bound it means it was solo killed by someone else Group const* playerGroup = player->GetGroup(); - if (!playerGroup || playerGroup != GetLootRecipientGroup()) // if we dont have a group we arent the recipient - return false; // if go doesnt have group bound it means it was solo killed by someone else + if (!playerGroup || playerGroup != GetLootRecipientGroup()) + { + return false; + } + + if (!HasAllowedLooter(player->GetGUID())) + { + return false; + } return true; } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 0ae0052bf..a9337760e 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -721,7 +721,6 @@ enum GOState struct GameObjectData { explicit GameObjectData() = default; - ObjectGuid::LowType spawnId{0}; uint32 id{0}; // entry in gamobject_template uint16 mapid{0}; uint32 phaseMask{0}; diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index 78754bb46..7e17d61aa 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -73,7 +73,7 @@ void LoadRandomEnchantmentsTable() } else { - LOG_ERROR("sql.sql", ">> Loaded 0 Item Enchantment definitions. DB table `item_enchantment_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 Item Enchantment definitions. DB table `item_enchantment_template` is empty."); LOG_INFO("server.loading", " "); } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a0507b65a..06d42758b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -248,7 +248,10 @@ Player::Player(WorldSession* session): Unit(true), m_mover(this) m_swingErrorMsg = 0; for (uint8 j = 0; j < PLAYER_MAX_BATTLEGROUND_QUEUES; ++j) - m_bgBattlegroundQueueID[j] = BATTLEGROUND_QUEUE_NONE; + { + _BgBattlegroundQueueID[j].bgQueueTypeId = BATTLEGROUND_QUEUE_NONE; + _BgBattlegroundQueueID[j].invitedToInstance = 0; + } m_logintime = GameTime::GetGameTime().count(); m_Last_tick = m_logintime; @@ -2423,23 +2426,23 @@ void Player::GiveLevel(uint8 level) PlayerClassLevelInfo classInfo; sObjectMgr->GetPlayerClassLevelInfo(getClass(), level, &classInfo); - // send levelup info to client - WorldPacket data(SMSG_LEVELUP_INFO, (4 + 4 + MAX_POWERS * 4 + MAX_STATS * 4)); - data << uint32(level); - data << uint32(int32(classInfo.basehealth) - int32(GetCreateHealth())); - // for (int i = 0; i < MAX_POWERS; ++i) // Powers loop (0-6) - data << uint32(int32(classInfo.basemana) - int32(GetCreateMana())); - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); - data << uint32(0); - // end for - for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) // Stats loop (0-4) - data << uint32(int32(info.stats[i]) - GetCreateStat(Stats(i))); + WorldPackets::Misc::LevelUpInfo packet; + packet.Level = level; + packet.HealthDelta = int32(classInfo.basehealth) - int32(GetCreateHealth()); - GetSession()->SendPacket(&data); + /// @todo find some better solution + // for (int i = 0; i < MAX_POWERS; ++i) + packet.PowerDelta[0] = int32(classInfo.basemana) - int32(GetCreateMana()); + packet.PowerDelta[1] = 0; + packet.PowerDelta[2] = 0; + packet.PowerDelta[3] = 0; + packet.PowerDelta[4] = 0; + packet.PowerDelta[5] = 0; + + for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) + packet.StatDelta[i] = int32(info.stats[i]) - GetCreateStat(Stats(i)); + + SendDirectMessage(packet.Write()); SetUInt32Value(PLAYER_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(level)); @@ -6970,7 +6973,7 @@ void Player::ApplyItemEquipSpell(Item* item, bool apply, bool form_change) continue; // Spells that should stay on the caster after removing the item. - constexpr std::array spellExceptions = { /*Electromagnetic Gigaflux Reactivator*/ 11826 }; + constexpr std::array spellExceptions = { /*Electromagnetic Gigaflux Reactivator*/ 11826 }; const auto found = std::find(std::begin(spellExceptions), std::end(spellExceptions), spellData.SpellId); // wrong triggering type @@ -9226,7 +9229,15 @@ void Player::TextEmote(std::string_view text, WorldObject const* /*= nullptr*/, WorldPacket data; ChatHandler::BuildChatPacket(data, CHAT_MSG_EMOTE, LANG_UNIVERSAL, this, this, _text); - SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true, !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHAT)); + + if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_EMOTE)) + { + SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true); + } + else + { + SendMessageToSetInRange_OwnTeam(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), true); + } } void Player::TextEmote(uint32 textId, WorldObject const* target /*= nullptr*/, bool /*isBossEmote = false*/) @@ -11027,6 +11038,8 @@ void Player::LeaveBattleground(Battleground* bg) sScriptMgr->OnBattlegroundDesertion(this, BG_DESERTION_TYPE_LEAVE_BG); } + bg->RemovePlayerAtLeave(this); + // xinef: reset corpse reclaim time m_deathExpireTime = GameTime::GetGameTime().count(); @@ -11855,10 +11868,102 @@ Battleground* Player::GetBattleground(bool create) const if (GetBattlegroundId() == 0) return nullptr; - Battleground* bg = sBattlegroundMgr->GetBattleground(GetBattlegroundId()); + Battleground* bg = sBattlegroundMgr->GetBattleground(GetBattlegroundId(), GetBattlegroundTypeId()); return (create || (bg && bg->FindBgMap()) ? bg : nullptr); } +bool Player::InBattlegroundQueue(bool ignoreArena) const +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (_BgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_NONE && + (!ignoreArena || (_BgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_2v2 && + _BgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_3v3 && + _BgBattlegroundQueueID[i].bgQueueTypeId != BATTLEGROUND_QUEUE_5v5))) + return true; + return false; +} + +BattlegroundQueueTypeId Player::GetBattlegroundQueueTypeId(uint32 index) const +{ + return _BgBattlegroundQueueID[index].bgQueueTypeId; +} + +uint32 Player::GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (_BgBattlegroundQueueID[i].bgQueueTypeId == bgQueueTypeId) + return i; + + return PLAYER_MAX_BATTLEGROUND_QUEUES; +} + +bool Player::IsInvitedForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (_BgBattlegroundQueueID[i].bgQueueTypeId == bgQueueTypeId) + return _BgBattlegroundQueueID[i].invitedToInstance != 0; + + return false; +} + +bool Player::InBattlegroundQueueForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const +{ + return GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES; +} + +uint32 Player::AddBattlegroundQueueId(BattlegroundQueueTypeId val) +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + { + if (_BgBattlegroundQueueID[i].bgQueueTypeId == BATTLEGROUND_QUEUE_NONE || _BgBattlegroundQueueID[i].bgQueueTypeId == val) + { + _BgBattlegroundQueueID[i].bgQueueTypeId = val; + _BgBattlegroundQueueID[i].invitedToInstance = 0; + return i; + } + } + + return PLAYER_MAX_BATTLEGROUND_QUEUES; +} + +bool Player::HasFreeBattlegroundQueueId() const +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (_BgBattlegroundQueueID[i].bgQueueTypeId == BATTLEGROUND_QUEUE_NONE) + return true; + + return false; +} + +void Player::RemoveBattlegroundQueueId(BattlegroundQueueTypeId val) +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + { + if (_BgBattlegroundQueueID[i].bgQueueTypeId == val) + { + _BgBattlegroundQueueID[i].bgQueueTypeId = BATTLEGROUND_QUEUE_NONE; + _BgBattlegroundQueueID[i].invitedToInstance = 0; + return; + } + } +} + +void Player::SetInviteForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, uint32 instanceId) +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (_BgBattlegroundQueueID[i].bgQueueTypeId == bgQueueTypeId) + _BgBattlegroundQueueID[i].invitedToInstance = instanceId; +} + +bool Player::IsInvitedForBattlegroundInstance(uint32 instanceId) const +{ + for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) + if (_BgBattlegroundQueueID[i].invitedToInstance == instanceId) + return true; + + return false; +} + bool Player::InArena() const { Battleground* bg = GetBattleground(); @@ -11870,16 +11975,6 @@ bool Player::InArena() const void Player::SetBattlegroundId(uint32 id, BattlegroundTypeId bgTypeId, uint32 queueSlot, bool invited, bool isRandom, TeamId teamId) { - // if leaving current bg (and was invited) - decrease invited count for current one - if (m_bgData.bgInstanceID && m_bgData.isInvited) - if (Battleground* bg = sBattlegroundMgr->GetBattleground(m_bgData.bgInstanceID)) - bg->DecreaseInvitedCount(m_bgData.bgTeamId); - - // if entering new bg (and is invited) - increase invited count for new one - if (id && invited) - if (Battleground* bg = sBattlegroundMgr->GetBattleground(id)) - bg->IncreaseInvitedCount(teamId); - m_bgData.bgInstanceID = id; m_bgData.bgTypeID = bgTypeId; m_bgData.bgQueueSlot = queueSlot; @@ -11910,21 +12005,11 @@ bool Player::GetBGAccessByLevel(BattlegroundTypeId bgTypeId) const float Player::GetReputationPriceDiscount(Creature const* creature) const { - FactionTemplateEntry const* vendorFaction = creature->GetFactionTemplateEntry(); - if (!vendorFaction) - { - return 1.0f; - } - - return GetReputationPriceDiscount(vendorFaction); -} - -float Player::GetReputationPriceDiscount(FactionTemplateEntry const* vendorFaction) const -{ - if (!vendorFaction->faction) + FactionTemplateEntry const* vendor_faction = creature->GetFactionTemplateEntry(); + if (!vendor_faction || !vendor_faction->faction) return 1.0f; - ReputationRank rank = GetReputationRank(vendorFaction->faction); + ReputationRank rank = GetReputationRank(vendor_faction->faction); if (rank <= REP_NEUTRAL) return 1.0f; @@ -15850,9 +15935,3 @@ uint32 Player::GetSpellCooldownDelay(uint32 spell_id) const SpellCooldowns::const_iterator itr = m_spellCooldowns.find(spell_id); return uint32(itr != m_spellCooldowns.end() && itr->second.end > getMSTime() ? itr->second.end - getMSTime() : 0); } - -void Player::ResetSpeakTimers() -{ - m_speakTime = 0; - m_speakCount = 0; -} diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 6ebfe61d1..1d2b0246b 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -177,7 +177,7 @@ enum TalentTree // talent tabs // Spell modifier (used for modify other spells) struct SpellModifier { - SpellModifier(Aura* _ownerAura = nullptr) : op(SPELLMOD_DAMAGE), type(SPELLMOD_FLAT), charges(0), mask(), ownerAura(_ownerAura) {} + SpellModifier(Aura* _ownerAura = nullptr) : op(SPELLMOD_DAMAGE), type(SPELLMOD_FLAT), charges(0), mask(), ownerAura(_ownerAura) {} SpellModOp op : 8; SpellModType type : 8; int16 charges : 16; @@ -662,7 +662,7 @@ enum PlayerSlots #define INVENTORY_SLOT_BAG_0 255 -enum EquipmentSlots : uint32 // 19 slots +enum EquipmentSlots // 19 slots { EQUIPMENT_SLOT_START = 0, EQUIPMENT_SLOT_HEAD = 0, @@ -1323,7 +1323,6 @@ public: bool _StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int32 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore); float GetReputationPriceDiscount(Creature const* creature) const; - float GetReputationPriceDiscount(FactionTemplateEntry const* vendorFaction) const; [[nodiscard]] Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : nullptr; } [[nodiscard]] TradeData* GetTradeData() const { return m_trade; } @@ -2189,59 +2188,20 @@ public: void SetBGData(BGData& bgdata) { m_bgData = bgdata; } [[nodiscard]] Battleground* GetBattleground(bool create = false) const; - [[nodiscard]] bool InBattlegroundQueue() const - { - for (auto i : m_bgBattlegroundQueueID) - if (i != BATTLEGROUND_QUEUE_NONE) - return true; - return false; - } + [[nodiscard]] bool InBattlegroundQueue(bool ignoreArena = false) const; + [[nodiscard]] bool IsDeserter() const { return HasAura(26013); } - [[nodiscard]] BattlegroundQueueTypeId GetBattlegroundQueueTypeId(uint32 index) const { return m_bgBattlegroundQueueID[index]; } - - [[nodiscard]] uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const - { - for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) - if (m_bgBattlegroundQueueID[i] == bgQueueTypeId) - return i; - return PLAYER_MAX_BATTLEGROUND_QUEUES; - } - - [[nodiscard]] bool InBattlegroundQueueForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const - { - return GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES; - } + [[nodiscard]] BattlegroundQueueTypeId GetBattlegroundQueueTypeId(uint32 index) const; + [[nodiscard]] uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const; + [[nodiscard]] bool IsInvitedForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const; + [[nodiscard]] bool InBattlegroundQueueForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const; void SetBattlegroundId(uint32 id, BattlegroundTypeId bgTypeId, uint32 queueSlot, bool invited, bool isRandom, TeamId teamId); - - uint32 AddBattlegroundQueueId(BattlegroundQueueTypeId val) - { - for (uint8 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) - if (m_bgBattlegroundQueueID[i] == BATTLEGROUND_QUEUE_NONE || m_bgBattlegroundQueueID[i] == val) - { - m_bgBattlegroundQueueID[i] = val; - return i; - } - return PLAYER_MAX_BATTLEGROUND_QUEUES; - } - - bool HasFreeBattlegroundQueueId() - { - for (auto & i : m_bgBattlegroundQueueID) - if (i == BATTLEGROUND_QUEUE_NONE) - return true; - return false; - } - - void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val) - { - for (auto & i : m_bgBattlegroundQueueID) - if (i == val) - { - i = BATTLEGROUND_QUEUE_NONE; - return; - } - } + uint32 AddBattlegroundQueueId(BattlegroundQueueTypeId val); + bool HasFreeBattlegroundQueueId() const; + void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val); + void SetInviteForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, uint32 instanceId); + bool IsInvitedForBattlegroundInstance(uint32 instanceId) const; [[nodiscard]] TeamId GetBgTeamId() const { return m_bgData.bgTeamId != TEAM_NEUTRAL ? m_bgData.bgTeamId : GetTeamId(); } @@ -2578,9 +2538,7 @@ public: [[nodiscard]] PlayerSetting GetPlayerSetting(std::string source, uint8 index); void UpdatePlayerSetting(std::string source, uint8 index, uint32 value); - void ResetSpeakTimers(); - -protected: + protected: // Gamemaster whisper whitelist WhisperListContainer WhisperList; @@ -2604,7 +2562,13 @@ protected: /*** BATTLEGROUND SYSTEM ***/ /*********************************************************/ - BattlegroundQueueTypeId m_bgBattlegroundQueueID[PLAYER_MAX_BATTLEGROUND_QUEUES]; + struct BgBattlegroundQueueID_Rec + { + BattlegroundQueueTypeId bgQueueTypeId; + uint32 invitedToInstance; + }; + + std::array _BgBattlegroundQueueID; BGData m_bgData; bool m_IsBGRandomWinner; diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index e02967da0..b41ba319d 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -6180,6 +6180,8 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult) { + time_t cur_time = GameTime::GetGameTime().count(); + m_mail.clear(); std::unordered_map mailById; @@ -6205,6 +6207,12 @@ void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mail m->stationery = fields[11].Get(); m->mailTemplateId = fields[12].Get(); + if (cur_time > m->expire_time) + { + LOG_DEBUG("entities.player", "Player::_LoadMail: Mail ({}) has expired - ignored.", m->messageID); + continue; + } + if (m->mailTemplateId && !sMailTemplateStore.LookupEntry(m->mailTemplateId)) { LOG_ERROR("entities.player", "Player::_LoadMail: Mail ({}) has nonexistent MailTemplateId ({}), remove at load", m->messageID, m->mailTemplateId); @@ -7304,9 +7312,7 @@ void Player::_SaveInventory(CharacterDatabaseTransaction trans) // update enchantment durations for (EnchantDurationList::iterator itr = m_enchantDuration.begin(); itr != m_enchantDuration.end(); ++itr) - { itr->item->SetEnchantmentDuration(itr->slot, itr->leftduration, this); - } // if no changes if (m_itemUpdateQueue.empty()) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ad3f6025f..b813e83ef 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -212,7 +212,6 @@ Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject), m_vehicleKit(nullptr), m_unitTypeMask(UNIT_MASK_NONE), m_HostileRefMgr(this), - m_cannotReachTarget(false), m_comboTarget(nullptr), m_comboPoints(0) { @@ -7234,6 +7233,12 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere if (!victim) return false; + // Do not proc from Glyph of Holy Light and Judgement of Light + if (procSpell->Id == 20267 || procSpell->Id == 54968) + { + return false; + } + Unit* beaconTarget = triggeredByAura->GetBase()->GetCaster(); if (!beaconTarget || beaconTarget == this || !beaconTarget->GetAura(53563, victim->GetGUID())) return false; @@ -9132,8 +9137,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg case 14189: // Seal Fate (Netherblade set) case 14157: // Ruthlessness { - if (!victim || victim == this) - return false; + victim = nullptr; // Need add combopoint AFTER finish movie (or they dropped in finish phase) break; } @@ -9673,7 +9677,7 @@ ReputationRank Unit::GetFactionReactionTo(FactionTemplateEntry const* factionTem // xinef: check forced reputation for self also if (Player const* selfPlayerOwner = GetAffectingPlayer()) - if (ReputationRank const* repRank = selfPlayerOwner->GetReputationMgr().GetForcedRankIfAny(targetFactionTemplateEntry)) + if (ReputationRank const* repRank = selfPlayerOwner->GetReputationMgr().GetForcedRankIfAny(target->GetFactionTemplateEntry())) return *repRank; if (Player const* targetPlayerOwner = target->GetAffectingPlayer()) @@ -9700,32 +9704,15 @@ ReputationRank Unit::GetFactionReactionTo(FactionTemplateEntry const* factionTem } } - return GetFactionReactionTo(factionTemplateEntry, targetFactionTemplateEntry); -} - -ReputationRank Unit::GetFactionReactionTo(FactionTemplateEntry const* factionTemplateEntry, FactionTemplateEntry const* targetFactionTemplateEntry) -{ // common faction based check if (factionTemplateEntry->IsHostileTo(*targetFactionTemplateEntry)) - { return REP_HOSTILE; - } - if (factionTemplateEntry->IsFriendlyTo(*targetFactionTemplateEntry)) - { return REP_FRIENDLY; - } - if (targetFactionTemplateEntry->IsFriendlyTo(*factionTemplateEntry)) - { return REP_FRIENDLY; - } - if (factionTemplateEntry->factionFlags & FACTION_TEMPLATE_FLAG_HATES_ALL_EXCEPT_FRIENDS) - { return REP_HOSTILE; - } - // neutral by default return REP_NEUTRAL; } @@ -15830,7 +15817,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u continue; } - switch(triggeredByAura->GetAuraType()) + switch (triggeredByAura->GetAuraType()) { case SPELL_AURA_PROC_TRIGGER_SPELL: { @@ -15970,6 +15957,19 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u break; takeCharges = true; break; + case SPELL_AURA_ADD_FLAT_MODIFIER: + case SPELL_AURA_ADD_PCT_MODIFIER: + { + if (SpellModifier* mod = triggeredByAura->GetSpellModifier()) + { + if (mod->op == SPELLMOD_CASTING_TIME && procSpell && (procSpell->GetTriggeredCastFlags() & TRIGGERED_CAST_DIRECTLY) != 0) + { + break; + } + } + takeCharges = true; + break; + } default: takeCharges = true; break; @@ -18304,24 +18304,12 @@ void Unit::SendPlaySpellVisual(uint32 id) SendMessageToSet(&data, true); } -void Unit::SendPlaySpellVisual(ObjectGuid guid, uint32 id) -{ - WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 8 + 4); - data << guid; - data << uint32(id); // SpellVisualKit.dbc index - SendMessageToSet(&data, true); -} - void Unit::SendPlaySpellImpact(ObjectGuid guid, uint32 id) { WorldPacket data(SMSG_PLAY_SPELL_IMPACT, 8 + 4); data << guid; // target data << uint32(id); // SpellVisualKit.dbc index - - if (IsPlayer()) - ToPlayer()->SendDirectMessage(&data); - else - SendMessageToSet(&data, true); + SendMessageToSet(&data, true); } void Unit::ApplyResilience(Unit const* victim, float* crit, int32* damage, bool isCrit, CombatRating type) @@ -20541,15 +20529,3 @@ bool Unit::CanRestoreMana(SpellInfo const* spellInfo) const return false; } - -bool Unit::SetCannotReachTarget(bool cannotReach, bool /*isChase = true*/) -{ - if (cannotReach == m_cannotReachTarget) - { - return false; - } - - m_cannotReachTarget = cannotReach; - - return true; -} diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 373ac7c8d..59c8adf04 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1442,7 +1442,6 @@ public: ReputationRank GetReactionTo(Unit const* target, bool checkOriginalFaction = false) const; ReputationRank GetFactionReactionTo(FactionTemplateEntry const* factionTemplateEntry, Unit const* target) const; - static ReputationRank GetFactionReactionTo(FactionTemplateEntry const* factionTemplateEntry, FactionTemplateEntry const* targetFactionTemplateEntry); bool IsHostileTo(Unit const* unit) const; [[nodiscard]] bool IsHostileToPlayers() const; @@ -1663,7 +1662,6 @@ public: Aura* AddAura(SpellInfo const* spellInfo, uint8 effMask, Unit* target); void SetAuraStack(uint32 spellId, Unit* target, uint32 stack); void SendPlaySpellVisual(uint32 id); - void SendPlaySpellVisual(ObjectGuid guid, uint32 id); void SendPlaySpellImpact(ObjectGuid guid, uint32 id); void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown); void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns); @@ -2383,9 +2381,6 @@ public: [[nodiscard]] bool CanRestoreMana(SpellInfo const* spellInfo) const; - virtual bool SetCannotReachTarget(bool cannotReach, bool isChase = true); - [[nodiscard]] bool CanNotReachTarget() const { return m_cannotReachTarget; } - protected: explicit Unit (bool isWorldObject); @@ -2468,8 +2463,6 @@ protected: bool IsAlwaysDetectableFor(WorldObject const* seer) const override; bool _instantCast; - bool m_cannotReachTarget; - private: bool IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent, ProcEventInfo const& eventInfo); bool HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 2902bb661..54787a29b 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -246,7 +246,7 @@ void GameEventMgr::LoadFromDB() if (!result) { mGameEvent.clear(); - LOG_ERROR("sql.sql", ">> Loaded 0 game events. DB table `game_event` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 game events. DB table `game_event` is empty."); LOG_INFO("server.loading", " "); return; } @@ -314,7 +314,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 game event saves in game events. DB table `game_event_save` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 game event saves in game events. DB table `game_event_save` is empty."); LOG_INFO("server.loading", " "); } else @@ -359,7 +359,7 @@ void GameEventMgr::LoadFromDB() QueryResult result = WorldDatabase.Query("SELECT eventEntry, prerequisite_event FROM game_event_prerequisite"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 game event prerequisites in game events. DB table `game_event_prerequisite` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 game event prerequisites in game events. DB table `game_event_prerequisite` is empty."); LOG_INFO("server.loading", " "); } else @@ -410,7 +410,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creatures in game events. DB table `game_event_creature` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 creatures in game events. DB table `game_event_creature` is empty"); LOG_INFO("server.loading", " "); } else @@ -458,7 +458,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 gameobjects in game events. DB table `game_event_gameobject` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 gameobjects in game events. DB table `game_event_gameobject` is empty."); LOG_INFO("server.loading", " "); } else @@ -507,7 +507,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 model/equipment changes in game events. DB table `game_event_model_equip` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 model/equipment changes in game events. DB table `game_event_model_equip` is empty."); LOG_INFO("server.loading", " "); } else @@ -566,7 +566,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 quests additions in game events. DB table `game_event_creature_quest` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quests additions in game events. DB table `game_event_creature_quest` is empty."); LOG_INFO("server.loading", " "); } else @@ -606,7 +606,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 go quests additions in game events. DB table `game_event_gameobject_quest` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 go quests additions in game events. DB table `game_event_gameobject_quest` is empty."); LOG_INFO("server.loading", " "); } else @@ -646,7 +646,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 quest event conditions in game events. DB table `game_event_quest_condition` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest event conditions in game events. DB table `game_event_quest_condition` is empty."); LOG_INFO("server.loading", " "); } else @@ -688,7 +688,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 conditions in game events. DB table `game_event_condition` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 conditions in game events. DB table `game_event_condition` is empty."); LOG_INFO("server.loading", " "); } else @@ -729,7 +729,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 condition saves in game events. DB table `game_event_condition_save` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 condition saves in game events. DB table `game_event_condition_save` is empty."); LOG_INFO("server.loading", " "); } else @@ -776,7 +776,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 npcflags in game events. DB table `game_event_npcflag` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 npcflags in game events. DB table `game_event_npcflag` is empty."); LOG_INFO("server.loading", " "); } else @@ -815,7 +815,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 seasonal quests additions in game events. DB table `game_event_seasonal_questrelation` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 seasonal quests additions in game events. DB table `game_event_seasonal_questrelation` is empty."); LOG_INFO("server.loading", " "); } else @@ -861,7 +861,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 vendor additions in game events. DB table `game_event_npc_vendor` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 vendor additions in game events. DB table `game_event_npc_vendor` is empty."); LOG_INFO("server.loading", " "); } else @@ -926,7 +926,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 battleground holidays in game events. DB table `game_event_battleground_holiday` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 battleground holidays in game events. DB table `game_event_battleground_holiday` is empty."); LOG_INFO("server.loading", " "); } else @@ -964,7 +964,7 @@ void GameEventMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 pools for game events. DB table `game_event_pool` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 pools for game events. DB table `game_event_pool` is empty."); LOG_INFO("server.loading", " "); } else @@ -1012,7 +1012,7 @@ void GameEventMgr::LoadHolidayDates() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 holiday dates. DB table `holiday_dates` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 holiday dates. DB table `holiday_dates` is empty."); return; } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index f7ad45fa4..427cb7c6a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -497,7 +497,7 @@ void ObjectMgr::LoadCreatureTemplates() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature template definitions. DB table `creature_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature template definitions. DB table `creature_template` is empty."); return; } @@ -663,7 +663,7 @@ void ObjectMgr::LoadCreatureTemplateResistances() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature template resistance definitions. DB table `creature_template_resistance` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature template resistance definitions. DB table `creature_template_resistance` is empty."); LOG_INFO("server.loading", " "); return; } @@ -709,7 +709,7 @@ void ObjectMgr::LoadCreatureTemplateSpells() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature template spell definitions. DB table `creature_template_spell` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature template spell definitions. DB table `creature_template_spell` is empty."); LOG_INFO("server.loading", " "); return; } @@ -755,7 +755,7 @@ void ObjectMgr::LoadCreatureTemplateAddons() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature template addon definitions. DB table `creature_template_addon` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature template addon definitions. DB table `creature_template_addon` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1235,7 +1235,7 @@ void ObjectMgr::LoadCreatureAddons() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature addon definitions. DB table `creature_addon` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature addon definitions. DB table `creature_addon` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1336,7 +1336,7 @@ void ObjectMgr::LoadGameObjectAddons() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 gameobject addon definitions. DB table `gameobject_addon` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 gameobject addon definitions. DB table `gameobject_addon` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1446,7 +1446,7 @@ void ObjectMgr::LoadEquipmentTemplates() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature equipment templates. DB table `creature_equip_template` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 creature equipment templates. DB table `creature_equip_template` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -1535,7 +1535,7 @@ void ObjectMgr::LoadCreatureMovementOverrides() "LEFT JOIN creature_template_movement AS ctm ON ctm.CreatureId = c.id1"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature movement overrides. DB table `creature_movement_override` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 creature movement overrides. DB table `creature_movement_override` is empty!"); return; } @@ -1660,7 +1660,7 @@ void ObjectMgr::LoadCreatureModelInfo() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature model definitions. DB table `creature_model_info` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature model definitions. DB table `creature_model_info` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1718,7 +1718,7 @@ void ObjectMgr::LoadLinkedRespawn() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 linked respawns. DB table `linked_respawn` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 linked respawns. DB table `linked_respawn` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1949,7 +1949,7 @@ void ObjectMgr::LoadTempSummons() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 temp summons. DB table `creature_summon_groups` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 temp summons. DB table `creature_summon_groups` is empty."); return; } @@ -2042,7 +2042,7 @@ void ObjectMgr::LoadCreatures() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 creatures. DB table `creature` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creatures. DB table `creature` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2090,7 +2090,6 @@ void ObjectMgr::LoadCreatures() continue; } CreatureData& data = _creatureDataStore[spawnId]; - data.spawnId = spawnId; data.id1 = id1; data.id2 = id2; data.id3 = id3; @@ -2258,7 +2257,6 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float ObjectGuid::LowType spawnId = GenerateGameObjectSpawnId(); GameObjectData& data = NewGOData(spawnId); - data.spawnId = spawnId; data.id = entry; data.mapid = mapId; data.posX = x; @@ -2311,7 +2309,7 @@ uint32 ObjectMgr::AddCreData(uint32 entry, uint32 mapId, float x, float y, float ObjectGuid::LowType spawnId = GenerateCreatureSpawnId(); CreatureData& data = NewOrExistCreatureData(spawnId); - data.spawnId = spawnId; + data.spawnMask = spawnId; data.id1 = entry; data.id2 = 0; data.id3 = 0; @@ -2369,7 +2367,7 @@ void ObjectMgr::LoadGameobjects() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 gameobjects. DB table `gameobject` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 gameobjects. DB table `gameobject` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2417,7 +2415,7 @@ void ObjectMgr::LoadGameobjects() } GameObjectData& data = _gameObjectDataStore[guid]; - data.spawnId = guid; + data.id = entry; data.mapid = fields[2].Get(); data.posX = fields[3].Get(); @@ -2619,7 +2617,7 @@ void ObjectMgr::LoadItemTemplates() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 item templates. DB table `item_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 item templates. DB table `item_template` is empty."); LOG_INFO("server.loading", " "); return; } @@ -3225,7 +3223,7 @@ void ObjectMgr::LoadItemSetNames() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 item set names. DB table `item_set_names` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 item set names. DB table `item_set_names` is empty."); LOG_INFO("server.loading", " "); return; } @@ -3297,7 +3295,7 @@ void ObjectMgr::LoadVehicleTemplateAccessories() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 vehicle template accessories. DB table `vehicle_template_accessory` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 vehicle template accessories. DB table `vehicle_template_accessory` is empty."); LOG_INFO("server.loading", " "); return; } @@ -3353,7 +3351,7 @@ void ObjectMgr::LoadVehicleAccessories() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 Vehicle Accessories in {} ms", GetMSTimeDiffToNow(oldMSTime)); + LOG_WARN("server.loading", ">> Loaded 0 Vehicle Accessories in {} ms", GetMSTimeDiffToNow(oldMSTime)); LOG_INFO("server.loading", " "); return; } @@ -3393,7 +3391,7 @@ void ObjectMgr::LoadPetLevelInfo() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 level pet stats definitions. DB table `pet_levelstats` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 level pet stats definitions. DB table `pet_levelstats` is empty."); LOG_INFO("server.loading", " "); return; } @@ -3534,7 +3532,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { LOG_INFO("server.loading", " "); - LOG_ERROR("sql.sql", ">> Loaded 0 player create definitions. DB table `playercreateinfo` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 player create definitions. DB table `playercreateinfo` is empty."); exit(1); } else @@ -3620,7 +3618,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 custom player create items. DB table `playercreateinfo_item` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 custom player create items. DB table `playercreateinfo_item` is empty."); LOG_INFO("server.loading", " "); } else @@ -3691,7 +3689,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { - LOG_ERROR("server.loading", ">> Loaded 0 player create skills. DB table `playercreateinfo_skills` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 player create skills. DB table `playercreateinfo_skills` is empty."); } else { @@ -3765,7 +3763,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 player create spells. DB table `playercreateinfo_spell_custom` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 player create spells. DB table `playercreateinfo_spell_custom` is empty."); } else { @@ -3823,7 +3821,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { - LOG_ERROR("server.loading", ">> Loaded 0 player create cast spells. DB table `playercreateinfo_cast_spell` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 player create cast spells. DB table `playercreateinfo_cast_spell` is empty."); } else { @@ -3881,7 +3879,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 player create actions. DB table `playercreateinfo_action` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 player create actions. DB table `playercreateinfo_action` is empty."); LOG_INFO("server.loading", " "); } else @@ -4009,7 +4007,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 level stats definitions. DB table `player_levelstats` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 level stats definitions. DB table `player_levelstats` is empty."); LOG_INFO("server.loading", " "); exit(1); } @@ -4122,7 +4120,7 @@ void ObjectMgr::LoadPlayerInfo() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 xp for level definitions. DB table `player_xp_for_level` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 xp for level definitions. DB table `player_xp_for_level` is empty."); LOG_INFO("server.loading", " "); exit(1); } @@ -4312,7 +4310,7 @@ void ObjectMgr::LoadQuests() " FROM quest_template"); if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 quests definitions. DB table `quest_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quests definitions. DB table `quest_template` is empty."); LOG_INFO("server.loading", " "); return; } @@ -4354,7 +4352,7 @@ void ObjectMgr::LoadQuests() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 quest details. DB table `quest_details` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest details. DB table `quest_details` is empty."); } else { @@ -4377,7 +4375,7 @@ void ObjectMgr::LoadQuests() if (!result) { - LOG_ERROR("server.loading", ">> Loaded 0 quest request items. DB table `quest_request_items` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest request items. DB table `quest_request_items` is empty."); } else { @@ -4400,7 +4398,7 @@ void ObjectMgr::LoadQuests() if (!result) { - LOG_ERROR("server.loading", ">> Loaded 0 quest reward emotes. DB table `quest_offer_reward` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest reward emotes. DB table `quest_offer_reward` is empty."); } else { @@ -4425,7 +4423,7 @@ void ObjectMgr::LoadQuests() if (!result) { - LOG_ERROR("server.loading", ">> Loaded 0 quest template addons. DB table `quest_template_addon` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest template addons. DB table `quest_template_addon` is empty."); } else { @@ -5081,7 +5079,7 @@ void ObjectMgr::LoadScripts(ScriptsType type) if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 script definitions. DB table `{}` is empty!", tableName); + LOG_WARN("server.loading", ">> Loaded 0 script definitions. DB table `{}` is empty!", tableName); LOG_INFO("server.loading", " "); return; } @@ -5479,7 +5477,7 @@ void ObjectMgr::LoadSpellScriptNames() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell script names. DB table `spell_script_names` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 spell script names. DB table `spell_script_names` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -5608,7 +5606,7 @@ void ObjectMgr::LoadPageTexts() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 page texts. DB table `page_text` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 page texts. DB table `page_text` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -5687,7 +5685,7 @@ void ObjectMgr::LoadInstanceTemplate() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 instance templates. DB table `page_text` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 instance templates. DB table `page_text` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -5737,7 +5735,7 @@ void ObjectMgr::LoadInstanceEncounters() QueryResult result = WorldDatabase.Query("SELECT entry, creditType, creditEntry, lastEncounterDungeon FROM instance_encounters"); if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 instance encounters, table is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 instance encounters, table is empty!"); LOG_INFO("server.loading", " "); return; } @@ -5839,7 +5837,7 @@ void ObjectMgr::LoadGossipText() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 npc texts, table is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 npc texts, table is empty!"); LOG_INFO("server.loading", " "); return; } @@ -6066,7 +6064,7 @@ void ObjectMgr::LoadQuestAreaTriggers() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 quest trigger points. DB table `areatrigger_involvedrelation` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest trigger points. DB table `areatrigger_involvedrelation` is empty."); LOG_INFO("server.loading", " "); return; } @@ -6138,7 +6136,7 @@ void ObjectMgr::LoadQuestGreetings() QueryResult result = WorldDatabase.Query("SELECT ID, Type, GreetEmoteType, GreetEmoteDelay, Greeting FROM quest_greeting"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 quest greetings. DB table `quest_greeting` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest greetings. DB table `quest_greeting` is empty."); return; } @@ -6193,7 +6191,7 @@ void ObjectMgr::LoadQuestGreetingsLocales() QueryResult result = WorldDatabase.Query("SELECT ID, Type, Locale, Greeting FROM quest_greeting_locale"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 quest_greeting locales. DB table `quest_greeting_locale` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest_greeting locales. DB table `quest_greeting_locale` is empty."); return; } @@ -6308,7 +6306,7 @@ void ObjectMgr::LoadTavernAreaTriggers() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 tavern triggers. DB table `areatrigger_tavern` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 tavern triggers. DB table `areatrigger_tavern` is empty."); LOG_INFO("server.loading", " "); return; } @@ -6346,7 +6344,7 @@ void ObjectMgr::LoadAreaTriggerScripts() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 areatrigger scripts. DB table `areatrigger_scripts` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 areatrigger scripts. DB table `areatrigger_scripts` is empty."); LOG_INFO("server.loading", " "); return; } @@ -6487,7 +6485,7 @@ void ObjectMgr::LoadAreaTriggers() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 area trigger definitions. DB table `areatrigger` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 area trigger definitions. DB table `areatrigger` is empty."); LOG_INFO("server.loading", " "); return; } @@ -6538,7 +6536,7 @@ void ObjectMgr::LoadAreaTriggerTeleports() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 area trigger teleport definitions. DB table `areatrigger_teleport` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 area trigger teleport definitions. DB table `areatrigger_teleport` is empty."); LOG_INFO("server.loading", " "); return; } @@ -6624,7 +6622,7 @@ void ObjectMgr::LoadAccessRequirements() QueryResult access_template_result = WorldDatabase.Query("SELECT id, map_id, difficulty, min_level, max_level, min_avg_item_level FROM dungeon_access_template"); if (!access_template_result) { - LOG_INFO("server.loading", ">> Loaded 0 access requirement definitions. DB table `dungeon_access_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 access requirement definitions. DB table `dungeon_access_template` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7010,7 +7008,7 @@ void ObjectMgr::LoadGameObjectTemplate() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 gameobject definitions. DB table `gameobject_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 gameobject definitions. DB table `gameobject_template` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7190,7 +7188,7 @@ void ObjectMgr::LoadGameObjectTemplateAddons() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 gameobject template addon definitions. DB table `gameobject_template_addon` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 gameobject template addon definitions. DB table `gameobject_template_addon` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7253,7 +7251,7 @@ void ObjectMgr::LoadExplorationBaseXP() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 BaseXP definitions. DB table `exploration_basexp` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 BaseXP definitions. DB table `exploration_basexp` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7293,7 +7291,7 @@ void ObjectMgr::LoadPetNames() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 pet name parts. DB table `pet_name_generation` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 pet name parts. DB table `pet_name_generation` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -7461,7 +7459,7 @@ void ObjectMgr::LoadReputationOnKill() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 creature award reputation definitions. DB table `creature_onkill_reputation` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature award reputation definitions. DB table `creature_onkill_reputation` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7642,7 +7640,7 @@ void ObjectMgr::LoadPointsOfInterest() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 Points of Interest definitions. DB table `points_of_interest` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 Points of Interest definitions. DB table `points_of_interest` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7690,7 +7688,7 @@ void ObjectMgr::LoadQuestPOI() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 quest POI definitions. DB table `quest_poi` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest POI definitions. DB table `quest_poi` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7763,7 +7761,7 @@ void ObjectMgr::LoadNPCSpellClickSpells() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 spellclick spells. DB table `npc_spellclick_spells` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spellclick spells. DB table `npc_spellclick_spells` is empty."); LOG_INFO("server.loading", " "); return; } @@ -7852,7 +7850,7 @@ void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, std::string const& if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 quest relations from `{}`, table is empty.", table); + LOG_WARN("server.loading", ">> Loaded 0 quest relations from `{}`, table is empty.", table); LOG_INFO("server.loading", " "); return; } @@ -7951,7 +7949,7 @@ void ObjectMgr::LoadReservedPlayersNames() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 reserved player names. DB table `reserved_name` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 reserved player names. DB table `reserved_name` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -8172,7 +8170,7 @@ void ObjectMgr::LoadGameObjectForQuests() if (sObjectMgr->GetGameObjectTemplates()->empty()) { - LOG_INFO("server.loading", ">> Loaded 0 GameObjects for quests"); + LOG_WARN("server.loading", ">> Loaded 0 GameObjects for quests"); LOG_INFO("server.loading", " "); return; } @@ -8247,7 +8245,7 @@ bool ObjectMgr::LoadAcoreStrings() QueryResult result = WorldDatabase.Query("SELECT entry, content_default, locale_koKR, locale_frFR, locale_deDE, locale_zhCN, locale_zhTW, locale_esES, locale_esMX, locale_ruRU FROM acore_string"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 acore strings. DB table `acore_strings` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 acore strings. DB table `acore_strings` is empty."); LOG_INFO("server.loading", " "); return false; } @@ -8297,7 +8295,7 @@ void ObjectMgr::LoadFishingBaseSkillLevel() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 areas for fishing base skill level. DB table `skill_fishing_base_level` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 areas for fishing base skill level. DB table `skill_fishing_base_level` is empty."); LOG_INFO("server.loading", " "); return; } @@ -8438,7 +8436,7 @@ void ObjectMgr::LoadGameTele() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 GameTeleports. DB table `game_tele` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 GameTeleports. DB table `game_tele` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -8578,7 +8576,7 @@ void ObjectMgr::LoadMailLevelRewards() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 level dependent mail rewards. DB table `mail_level_reward` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 level dependent mail rewards. DB table `mail_level_reward` is empty."); LOG_INFO("server.loading", " "); return; } @@ -8725,7 +8723,7 @@ void ObjectMgr::LoadTrainerSpell() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 Trainers. DB table `npc_trainer` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 Trainers. DB table `npc_trainer` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -8807,7 +8805,7 @@ void ObjectMgr::LoadVendors() if (!result) { LOG_INFO("server.loading", " "); - LOG_ERROR("sql.sql", ">> Loaded 0 Vendors. DB table `npc_vendor` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 Vendors. DB table `npc_vendor` is empty!"); return; } @@ -8853,7 +8851,7 @@ void ObjectMgr::LoadGossipMenu() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 gossip_menu entries. DB table `gossip_menu` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 gossip_menu entries. DB table `gossip_menu` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -8893,7 +8891,7 @@ void ObjectMgr::LoadGossipMenuItems() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 gossip_menu_option IDs. DB table `gossip_menu_option` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 gossip_menu_option IDs. DB table `gossip_menu_option` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -9159,7 +9157,7 @@ void ObjectMgr::LoadBroadcastTexts() QueryResult result = WorldDatabase.Query("SELECT ID, LanguageID, MaleText, FemaleText, EmoteID1, EmoteID2, EmoteID3, EmoteDelay1, EmoteDelay2, EmoteDelay3, SoundEntriesID, EmotesID, Flags FROM broadcast_text"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 broadcast texts. DB table `broadcast_text` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 broadcast texts. DB table `broadcast_text` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9243,7 +9241,7 @@ void ObjectMgr::LoadBroadcastTextLocales() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 broadcast text locales. DB table `broadcast_text_locale` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 broadcast text locales. DB table `broadcast_text_locale` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9309,7 +9307,7 @@ void ObjectMgr::LoadCreatureClassLevelStats() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature base stats. DB table `creature_classlevelstats` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature base stats. DB table `creature_classlevelstats` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9392,7 +9390,7 @@ void ObjectMgr::LoadFactionChangeAchievements() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 faction change achievement pairs. DB table `player_factionchange_achievement` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 faction change achievement pairs. DB table `player_factionchange_achievement` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9428,7 +9426,7 @@ void ObjectMgr::LoadFactionChangeItems() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 faction change item pairs. DB table `player_factionchange_items` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 faction change item pairs. DB table `player_factionchange_items` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9464,7 +9462,7 @@ void ObjectMgr::LoadFactionChangeQuests() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 faction change quest pairs. DB table `player_factionchange_quests` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 faction change quest pairs. DB table `player_factionchange_quests` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9500,7 +9498,7 @@ void ObjectMgr::LoadFactionChangeReputations() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 faction change reputation pairs. DB table `player_factionchange_reputations` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 faction change reputation pairs. DB table `player_factionchange_reputations` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9536,7 +9534,7 @@ void ObjectMgr::LoadFactionChangeSpells() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 faction change spell pairs. DB table `player_factionchange_spells` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 faction change spell pairs. DB table `player_factionchange_spells` is empty."); LOG_INFO("server.loading", " "); return; } @@ -9572,7 +9570,7 @@ void ObjectMgr::LoadFactionChangeTitles() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 faction change title pairs. DB table `player_factionchange_title` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 faction change title pairs. DB table `player_factionchange_title` is empty."); return; } @@ -9666,7 +9664,7 @@ void ObjectMgr::LoadGameObjectQuestItems() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 gameobject quest items. DB table `gameobject_questitem` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 gameobject quest items. DB table `gameobject_questitem` is empty."); return; } @@ -9696,7 +9694,7 @@ void ObjectMgr::LoadCreatureQuestItems() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creature quest items. DB table `creature_questitem` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creature quest items. DB table `creature_questitem` is empty."); return; } @@ -9727,7 +9725,7 @@ void ObjectMgr::LoadQuestMoneyRewards() QueryResult result = WorldDatabase.Query("SELECT `Level`, Money0, Money1, Money2, Money3, Money4, Money5, Money6, Money7, Money8, Money9 FROM `quest_money_reward` ORDER BY `Level`"); if (!result) { - LOG_ERROR("server.loading", ">> Loaded 0 quest money rewards. DB table `quest_money_reward` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 quest money rewards. DB table `quest_money_reward` is empty."); return; } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 7549e58eb..c638cfbf0 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -2189,6 +2189,11 @@ ObjectGuid Group::GetLeaderGUID() const return m_leaderGuid; } +Player* Group::GetLeader() +{ + return ObjectAccessor::FindConnectedPlayer(m_leaderGuid); +} + ObjectGuid Group::GetGUID() const { return m_guid; @@ -2425,3 +2430,15 @@ void Group::SetDifficultyChangePrevention(DifficultyPreventionChangeType type) _difficultyChangePreventionTime = GameTime::GetGameTime().count() + MINUTE; _difficultyChangePreventionType = type; } + +void Group::DoForAllMembers(std::function const& worker) +{ + for (GroupReference* itr = GetFirstMember(); itr != nullptr; itr = itr->next()) + { + Player* member = itr->GetSource(); + if (!member) + continue; + + worker(member); + } +} diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index c38838518..a1d142fb8 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -23,6 +23,7 @@ #include "LootMgr.h" #include "QueryResult.h" #include "SharedDefines.h" +#include class Battlefield; class Battleground; @@ -43,7 +44,7 @@ struct MapEntry; #define MAX_RAID_SUBGROUPS MAXRAIDSIZE/MAXGROUPSIZE #define TARGETICONCOUNT 8 -enum RollVote : uint32 +enum RollVote { PASS = 0, NEED = 1, @@ -135,7 +136,7 @@ enum DifficultyPreventionChangeType #define GROUP_UPDATE_FLAGS_COUNT 20 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 -static const uint8 GroupUpdateLength[GROUP_UPDATE_FLAGS_COUNT] = { 0, 2, 2, 2, 1, 2, 2, 2, 2, 4, 8, 8, 1, 2, 2, 2, 1, 2, 2, 8 }; +static const uint8 GroupUpdateLength[GROUP_UPDATE_FLAGS_COUNT] = { 0, 2, 2, 2, 1, 2, 2, 2, 2, 4, 8, 8, 1, 2, 2, 2, 1, 2, 2, 8}; class Roll : public LootValidatorRef { @@ -214,6 +215,7 @@ public: bool isBGGroup() const; bool IsCreated() const; ObjectGuid GetLeaderGUID() const; + Player* GetLeader(); ObjectGuid GetGUID() const; const char* GetLeaderName() const; LootMethod GetLootMethod() const; @@ -250,12 +252,10 @@ public: GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot); void ChangeMembersGroup(ObjectGuid guid, uint8 group); + void SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid); void SetGroupMemberFlag(ObjectGuid guid, bool apply, GroupMemberFlags flag); void RemoveUniqueGroupMemberFlag(GroupMemberFlags flag); - void SetTargetIcon(uint8 id, ObjectGuid whoGuid, ObjectGuid targetGuid); - ObjectGuid const GetTargetIcon(uint8 id) const { return m_targetIcons[id]; } - Difficulty GetDifficulty(bool isRaid) const; Difficulty GetDungeonDifficulty() const; Difficulty GetRaidDifficulty() const; @@ -294,8 +294,6 @@ public: bool CountRollVote(ObjectGuid playerGUID, ObjectGuid Guid, uint8 Choise); void EndRoll(Loot* loot, Map* allowedMap); - Rolls GetRolls() const { return RollId; } - // related to disenchant rolls void ResetMaxEnchantingLevel(); @@ -317,6 +315,8 @@ public: DifficultyPreventionChangeType GetDifficultyChangePreventionReason() const { return _difficultyChangePreventionType; } void SetDifficultyChangePrevention(DifficultyPreventionChangeType type); + void DoForAllMembers(std::function const& worker); + protected: void _homebindIfInstance(Player* player); void _cancelHomebindIfInstance(Player* player); diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp index af9567aa1..de74e204f 100644 --- a/src/server/game/Groups/GroupMgr.cpp +++ b/src/server/game/Groups/GroupMgr.cpp @@ -121,7 +121,7 @@ void GroupMgr::LoadGroups() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 group definitions. DB table `groups` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 group definitions. DB table `groups` is empty!"); LOG_INFO("server.loading", " "); } else @@ -161,7 +161,7 @@ void GroupMgr::LoadGroups() QueryResult result = CharacterDatabase.Query("SELECT guid, memberGuid, memberFlags, subgroup, roles FROM group_member ORDER BY guid"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 group members. DB table `group_member` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 group members. DB table `group_member` is empty!"); LOG_INFO("server.loading", " "); } else diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 4550509f9..39a156606 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -830,7 +830,7 @@ bool Guild::BankMoveItemData::HasStoreRights(MoveItemData* pOther) const // Do not check rights if item is being swapped within the same bank tab if (pOther->IsBank() && pOther->GetContainer() == m_container) return true; - return m_pGuild->MemberHasTabRights(m_pPlayer->GetGUID(), m_container, GUILD_BANK_RIGHT_DEPOSIT_ITEM); + return m_pGuild->_MemberHasTabRights(m_pPlayer->GetGUID(), m_container, GUILD_BANK_RIGHT_DEPOSIT_ITEM); } bool Guild::BankMoveItemData::HasWithdrawRights(MoveItemData* pOther) const @@ -1214,7 +1214,7 @@ void Guild::HandleRoster(WorldSession* session) } } - bool sendOfficerNote = HasRankRight(session->GetPlayer(), GR_RIGHT_VIEWOFFNOTE); + bool sendOfficerNote = _HasRankRight(session->GetPlayer(), GR_RIGHT_VIEWOFFNOTE); for (auto const& [guid, member] : m_members) { WorldPackets::Guild::GuildRosterMemberData& memberData = roster.MemberData.emplace_back(); @@ -1270,7 +1270,7 @@ void Guild::HandleSetMOTD(WorldSession* session, std::string_view motd) return; // Player must have rights to set MOTD - if (!HasRankRight(session->GetPlayer(), GR_RIGHT_SETMOTD)) + if (!_HasRankRight(session->GetPlayer(), GR_RIGHT_SETMOTD)) SendCommandResult(session, GUILD_COMMAND_EDIT_MOTD, ERR_GUILD_PERMISSIONS); else { @@ -1293,7 +1293,7 @@ void Guild::HandleSetInfo(WorldSession* session, std::string_view info) return; // Player must have rights to set guild's info - if (HasRankRight(session->GetPlayer(), GR_RIGHT_MODIFY_GUILD_INFO)) + if (_HasRankRight(session->GetPlayer(), GR_RIGHT_MODIFY_GUILD_INFO)) { m_info = info; @@ -1326,12 +1326,6 @@ void Guild::HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo) } } -void Guild::HandleSetEmblem(EmblemInfo const& emblemInfo) -{ - m_emblemInfo = emblemInfo; - m_emblemInfo.SaveToDB(m_id); -} - void Guild::HandleSetLeader(WorldSession* session, std::string_view name) { Player* player = session->GetPlayer(); @@ -1368,7 +1362,7 @@ void Guild::HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string void Guild::HandleSetMemberNote(WorldSession* session, std::string_view name, std::string_view note, bool isPublic) { // Player must have rights to set public/officer note - if (!HasRankRight(session->GetPlayer(), isPublic ? GR_RIGHT_EPNOTE : GR_RIGHT_EOFFNOTE)) + if (!_HasRankRight(session->GetPlayer(), isPublic ? GR_RIGHT_EPNOTE : GR_RIGHT_EOFFNOTE)) SendCommandResult(session, GUILD_COMMAND_PUBLIC_NOTE, ERR_GUILD_PERMISSIONS); else if (Member* member = GetMember(name)) { @@ -1401,29 +1395,6 @@ void Guild::HandleSetRankInfo(WorldSession* session, uint8 rankId, std::string_v } } -void Guild::HandleSetRankInfo(uint8 rankId, uint32 rights, std::string_view name, uint32 moneyPerDay) -{ - if (RankInfo* rankInfo = GetRankInfo(rankId)) - { - if (!name.empty()) - { - rankInfo->SetName(name); - } - - if (rights > 0) - { - rankInfo->SetRights(rights); - } - - if (moneyPerDay > 0) - { - _SetRankBankMoneyPerDay(rankId, moneyPerDay); - } - - _BroadcastEvent(GE_RANK_UPDATED, ObjectGuid::Empty, std::to_string(rankId), rankInfo->GetName(), std::to_string(m_ranks.size())); - } -} - void Guild::HandleBuyBankTab(WorldSession* session, uint8 tabId) { Player* player = session->GetPlayer(); @@ -1486,7 +1457,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name) return; } // Inviting player must have rights to invite - if (!HasRankRight(player, GR_RIGHT_INVITE)) + if (!_HasRankRight(player, GR_RIGHT_INVITE)) { SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_GUILD_PERMISSIONS); return; @@ -1557,7 +1528,7 @@ void Guild::HandleRemoveMember(WorldSession* session, std::string_view name) { Player* player = session->GetPlayer(); // Player must have rights to remove members - if (!HasRankRight(player, GR_RIGHT_REMOVE)) + if (!_HasRankRight(player, GR_RIGHT_REMOVE)) SendCommandResult(session, GUILD_COMMAND_REMOVE, ERR_GUILD_PERMISSIONS); else if (Member* member = GetMember(name)) { @@ -1587,7 +1558,7 @@ void Guild::HandleUpdateMemberRank(WorldSession* session, std::string_view name, Player* player = session->GetPlayer(); GuildCommandType type = demote ? GUILD_COMMAND_DEMOTE : GUILD_COMMAND_PROMOTE; // Player must have rights to promote - if (!HasRankRight(player, demote ? GR_RIGHT_DEMOTE : GR_RIGHT_PROMOTE)) + if (!_HasRankRight(player, demote ? GR_RIGHT_DEMOTE : GR_RIGHT_PROMOTE)) SendCommandResult(session, type, ERR_GUILD_PERMISSIONS); // Promoted player must be a member of guild else if (Member* member = GetMember(name)) @@ -1849,7 +1820,7 @@ void Guild::SendPermissions(WorldSession* session) const WorldPackets::Guild::GuildPermissionsQueryResults queryResult; queryResult.RankID = rankId; queryResult.WithdrawGoldLimit = _GetRankBankMoneyPerDay(rankId); - queryResult.Flags = GetRankRights(rankId); + queryResult.Flags = _GetRankRights(rankId); queryResult.NumTabs = _GetPurchasedTabsSize(); for (uint8 tabId = 0; tabId < GUILD_BANK_MAX_TABS; ++tabId) @@ -2117,13 +2088,13 @@ bool Guild::Validate() // Broadcasts void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::string_view msg, uint32 language) const { - if (session && session->GetPlayer() && HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK)) + if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK)) { WorldPacket data; ChatHandler::BuildChatPacket(data, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, Language(language), session->GetPlayer(), nullptr, msg); for (auto const& [guid, member] : m_members) if (Player* player = member.FindPlayer()) - if (HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) && !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUID())) + if (_HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) && !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUID())) player->GetSession()->SendPacket(&data); } } @@ -2526,7 +2497,7 @@ inline std::string Guild::_GetRankName(uint8 rankId) const return ""; } -uint32 Guild::GetRankRights(uint8 rankId) const +inline uint32 Guild::_GetRankRights(uint8 rankId) const { if (const RankInfo* rankInfo = GetRankInfo(rankId)) return rankInfo->GetRights(); @@ -2575,7 +2546,7 @@ inline int32 Guild::_GetMemberRemainingMoney(Member const& member) const if (rankId == GR_GUILDMASTER) return static_cast(GUILD_WITHDRAW_MONEY_UNLIMITED); - if ((GetRankRights(rankId) & (GR_RIGHT_WITHDRAW_REPAIR | GR_RIGHT_WITHDRAW_GOLD)) != 0) + if ((_GetRankRights(rankId) & (GR_RIGHT_WITHDRAW_REPAIR | GR_RIGHT_WITHDRAW_GOLD)) != 0) { int32 remaining = _GetRankBankMoneyPerDay(rankId) - member.GetBankWithdrawValue(GUILD_BANK_MAX_TABS); if (remaining > 0) @@ -2595,7 +2566,7 @@ inline void Guild::_UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans } } -bool Guild::MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const +inline bool Guild::_MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const { if (const Member* member = GetMember(guid)) { @@ -2607,19 +2578,6 @@ bool Guild::MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) cons return false; } -bool Guild::HasRankRight(Player* player, uint32 right) const -{ - if (player) - { - if (Member const* member = GetMember(player->GetGUID())) - { - return (GetRankRights(member->GetRankId()) & right) != GR_RIGHT_EMPTY; - } - } - - return false; -} - // Add new event log record inline void Guild::_LogEvent(GuildEventLogTypes eventType, ObjectGuid playerGuid1, ObjectGuid playerGuid2, uint8 newRank) { @@ -2765,7 +2723,7 @@ bool Guild::_DoItemsMove(MoveItemData* pSrc, MoveItemData* pDest, bool sendError void Guild::_SendBankContent(WorldSession* session, uint8 tabId, bool sendAllSlots) const { ObjectGuid guid = session->GetPlayer()->GetGUID(); - if (!MemberHasTabRights(guid, tabId, GUILD_BANK_RIGHT_VIEW_TAB)) + if (!_MemberHasTabRights(guid, tabId, GUILD_BANK_RIGHT_VIEW_TAB)) return; _SendBankList(session, tabId, sendAllSlots); @@ -2925,7 +2883,7 @@ void Guild::_SendBankList(WorldSession* session /* = nullptr*/, uint8 tabId /*= packet.Write(); for (auto const& [guid, member] : m_members) { - if (!MemberHasTabRights(member.GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB)) + if (!_MemberHasTabRights(member.GetGUID(), tabId, GUILD_BANK_RIGHT_VIEW_TAB)) continue; Player* player = member.FindPlayer(); if (!player) diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index 42bfeb4cf..df5c288e0 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -241,8 +241,7 @@ enum GuildMemberFlags class EmblemInfo { public: - EmblemInfo(uint32 style = 0, uint32 color = 0, uint32 borderStyle = 0, uint32 borderColor = 0, uint32 backgroundColor = 0) : - m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { } + EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { } void LoadFromDB(Field* fields); void SaveToDB(uint32 guildId) const; @@ -693,13 +692,11 @@ public: void HandleQuery(WorldSession* session); void HandleSetMOTD(WorldSession* session, std::string_view motd); void HandleSetInfo(WorldSession* session, std::string_view info); - void HandleSetEmblem(WorldSession* session, EmblemInfo const& emblemInfo); - void HandleSetEmblem(EmblemInfo const& emblemInfo); + void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo); void HandleSetLeader(WorldSession* session, std::string_view name); void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon); void HandleSetMemberNote(WorldSession* session, std::string_view name, std::string_view note, bool officer); void HandleSetRankInfo(WorldSession* session, uint8 rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array const& rightsAndSlots); - void HandleSetRankInfo(uint8 rankId, uint32 rights = 0, std::string_view name = "", uint32 moneyPerDay = 0); void HandleBuyBankTab(WorldSession* session, uint8 tabId); void HandleInviteMember(WorldSession* session, std::string const& name); void HandleAcceptMember(WorldSession* session); @@ -778,10 +775,6 @@ public: [[nodiscard]] bool ModifyBankMoney(CharacterDatabaseTransaction trans, const uint64& amount, bool add) { return _ModifyBankMoney(trans, amount, add); } [[nodiscard]] uint32 GetMemberSize() const { return m_members.size(); } - bool MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const; - bool HasRankRight(Player* player, uint32 right) const; - uint32 GetRankRights(uint8 rankId) const; - protected: uint32 m_id; std::string m_name; @@ -806,6 +799,13 @@ private: inline uint8 _GetRanksSize() const { return uint8(m_ranks.size()); } inline const RankInfo* GetRankInfo(uint8 rankId) const { return rankId < _GetRanksSize() ? &m_ranks[rankId] : nullptr; } inline RankInfo* GetRankInfo(uint8 rankId) { return rankId < _GetRanksSize() ? &m_ranks[rankId] : nullptr; } + inline bool _HasRankRight(Player* player, uint32 right) const + { + if (player) + if (Member const* member = GetMember(player->GetGUID())) + return (_GetRankRights(member->GetRankId()) & right) != GR_RIGHT_EMPTY; + return false; + } inline uint8 _GetLowestRankId() const { return uint8(m_ranks.size() - 1); } @@ -836,6 +836,7 @@ private: void _SetRankBankMoneyPerDay(uint8 rankId, uint32 moneyPerDay); void _SetRankBankTabRightsAndSlots(uint8 rankId, GuildBankRightsAndSlots rightsAndSlots, bool saveToDB = true); int8 _GetRankBankTabRights(uint8 rankId, uint8 tabId) const; + uint32 _GetRankRights(uint8 rankId) const; int32 _GetRankBankMoneyPerDay(uint8 rankId) const; int32 _GetRankBankTabSlotsPerDay(uint8 rankId, uint8 tabId) const; std::string _GetRankName(uint8 rankId) const; @@ -843,6 +844,7 @@ private: int32 _GetMemberRemainingSlots(Member const& member, uint8 tabId) const; int32 _GetMemberRemainingMoney(Member const& member) const; void _UpdateMemberWithdrawSlots(CharacterDatabaseTransaction trans, ObjectGuid guid, uint8 tabId); + bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const; void _LogEvent(GuildEventLogTypes eventType, ObjectGuid playerGuid1, ObjectGuid playerGuid2 = ObjectGuid::Empty, uint8 newRank = 0); void _LogBankEvent(CharacterDatabaseTransaction trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0); diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index 30a38aa8e..69668c6a7 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -106,7 +106,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild definitions. DB table `guild` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild definitions. DB table `guild` is empty."); LOG_INFO("server.loading", " "); } else @@ -146,7 +146,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild ranks. DB table `guild_rank` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild ranks. DB table `guild_rank` is empty."); LOG_INFO("server.loading", " "); } else @@ -187,7 +187,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild members. DB table `guild_member` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild members. DB table `guild_member` is empty."); LOG_INFO("server.loading", " "); } else @@ -223,7 +223,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild bank tab rights. DB table `guild_bank_right` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild bank tab rights. DB table `guild_bank_right` is empty."); LOG_INFO("server.loading", " "); } else @@ -257,7 +257,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild event logs. DB table `guild_eventlog` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild event logs. DB table `guild_eventlog` is empty."); LOG_INFO("server.loading", " "); } else @@ -292,7 +292,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild bank event logs. DB table `guild_bank_eventlog` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild bank event logs. DB table `guild_bank_eventlog` is empty."); LOG_INFO("server.loading", " "); } else @@ -327,7 +327,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild bank tabs. DB table `guild_bank_tab` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild bank tabs. DB table `guild_bank_tab` is empty."); LOG_INFO("server.loading", " "); } else @@ -364,7 +364,7 @@ void GuildMgr::LoadGuilds() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 guild bank tab items. DB table `guild_bank_item` or `item_instance` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 guild bank tab items. DB table `guild_bank_item` or `item_instance` is empty."); LOG_INFO("server.loading", " "); } else diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index ddf30758f..ae8da6564 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -72,8 +72,9 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) { ObjectGuid guid; uint32 bgTypeId_; - uint32 instanceId; // sent to queue for particular bg from battlemaster's list, currently not used + uint32 instanceId; uint8 joinAsGroup; + bool isPremade = false; recvData >> guid; // battlemaster guid recvData >> bgTypeId_; // battleground type id (DBC id) @@ -82,7 +83,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) // entry not found if (!sBattlemasterListStore.LookupEntry(bgTypeId_)) + { + LOG_ERROR("network", "Battleground: invalid bgtype ({}) received. possible cheater? player {}", bgTypeId_, _player->GetGUID().ToString()); return; + } // chosen battleground type is disabled if (DisableMgr::IsDisabledFor(DISABLE_TYPE_BATTLEGROUND, bgTypeId_, nullptr)) @@ -91,6 +95,8 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) return; } + LOG_DEBUG("network", "WORLD: Recvd CMSG_BATTLEMASTER_JOIN Message from {}", guid.ToString()); + // get queue typeid and random typeid to check if already queued for them BattlegroundTypeId bgTypeId = BattlegroundTypeId(bgTypeId_); BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bgTypeId, 0); @@ -100,35 +106,26 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) if (bgQueueTypeId == BATTLEGROUND_QUEUE_NONE) return; - // get bg template - Battleground* bgt = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId); - if (!bgt) + // ignore if player is already in BG + if (_player->InBattleground()) + return; + + // get bg instance or bg template if instance not found + Battleground* bg = nullptr; + if (instanceId) + bg = sBattlegroundMgr->GetBattlegroundThroughClientInstance(instanceId, bgTypeId); + + if (!bg) + bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId); + + if (!bg) return; // expected bracket entry - PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bgt->GetMapId(), _player->getLevel()); + PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bg->GetMapId(), _player->getLevel()); if (!bracketEntry) return; - // pussywizard: if trying to queue for already queued - // just remove from queue and it will requeue! - uint32 qSlot = _player->GetBattlegroundQueueIndex(bgQueueTypeId); - if (qSlot < PLAYER_MAX_BATTLEGROUND_QUEUES) - { - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); - - if (bgQueue.IsPlayerInvitedToRatedArena(_player->GetGUID())) - { - WorldPacket data; - sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_BATTLEGROUND_JOIN_FAILED); - SendPacket(&data); - return; - } - - bgQueue.RemovePlayer(_player->GetGUID(), false, qSlot); - _player->RemoveBattlegroundQueueId(bgQueueTypeId); - } - // must have free queue slot if (!_player->HasFreeBattlegroundQueueId()) { @@ -139,7 +136,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) } // queue result (default ok) - GroupJoinBattlegroundResult err = GroupJoinBattlegroundResult(bgt->GetBgTypeID()); + GroupJoinBattlegroundResult err = GroupJoinBattlegroundResult(bg->GetBgTypeID()); if (!sScriptMgr->CanJoinInBattlegroundQueue(_player, guid, bgTypeId, joinAsGroup, err) && err <= 0) { @@ -149,6 +146,8 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) return; } + BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); + // check if player can queue: if (!joinAsGroup) { @@ -169,6 +168,10 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) { err = ERR_IN_RANDOM_BG; } + else if (_player->InBattlegroundQueueForBattlegroundQueueType(bgQueueTypeId)) // queued for this bg + { + err = ERR_BATTLEGROUND_NONE; + } else if (_player->InBattlegroundQueue() && bgTypeId == BATTLEGROUND_RB) // already in queue, so can't queue for random { err = ERR_IN_NON_RANDOM_BG; @@ -193,15 +196,13 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) return; } - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); - GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, nullptr, bracketEntry, false, false, 0, 0, 0); + GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, nullptr, bgTypeId, bracketEntry, 0, false, isPremade, 0, 0); uint32 avgWaitTime = bgQueue.GetAverageQueueWaitTime(ginfo); - uint32 queueSlot = _player->AddBattlegroundQueueId(bgQueueTypeId); // send status packet WorldPacket data; - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bgt, queueSlot, STATUS_WAIT_QUEUE, avgWaitTime, 0, 0, TEAM_NEUTRAL); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgWaitTime, 0, 0, TEAM_NEUTRAL); SendPacket(&data); sScriptMgr->OnPlayerJoinBG(_player); @@ -214,30 +215,6 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) if (!grp || grp->GetLeaderGUID() != _player->GetGUID()) return; - // pussywizard: for party members - remove queues for which leader is not queued to! - std::set leaderQueueTypeIds; - for (uint32 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) - leaderQueueTypeIds.insert((uint32)_player->GetBattlegroundQueueTypeId(i)); - for (GroupReference* itr = grp->GetFirstMember(); itr != nullptr; itr = itr->next()) - if (Player* member = itr->GetSource()) - for (uint32 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) - if (BattlegroundQueueTypeId mqtid = member->GetBattlegroundQueueTypeId(i)) - if (leaderQueueTypeIds.count((uint32)mqtid) == 0) - { - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(mqtid); - - if (bgQueue.IsPlayerInvitedToRatedArena(member->GetGUID())) - { - WorldPacket data; - sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_BATTLEGROUND_JOIN_FAILED); - SendPacket(&data); - return; - } - - bgQueue.RemovePlayer(member->GetGUID(), false, i); - member->RemoveBattlegroundQueueId(mqtid); - } - if (_player->InBattlegroundQueueForBattlegroundQueueType(bgQueueTypeIdRandom)) // queued for random bg, so can't queue for anything else err = ERR_IN_RANDOM_BG; else if (_player->InBattlegroundQueue() && bgTypeId == BATTLEGROUND_RB) // already in queue, so can't queue for random @@ -248,44 +225,42 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) err = ERR_BATTLEGROUND_QUEUED_FOR_RATED; if (err > 0) - err = grp->CanJoinBattlegroundQueue(bgt, bgQueueTypeId, 0, bgt->GetMaxPlayersPerTeam(), false, 0); + err = grp->CanJoinBattlegroundQueue(bg, bgQueueTypeId, 0, bg->GetMaxPlayersPerTeam(), false, 0); - bool isPremade = (grp->GetMembersCount() >= bgt->GetMinPlayersPerTeam() && bgTypeId != BATTLEGROUND_RB); + isPremade = (grp->GetMembersCount() >= bg->GetMinPlayersPerTeam() && bgTypeId != BATTLEGROUND_RB); uint32 avgWaitTime = 0; if (err > 0) { - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); - GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, grp, bracketEntry, false, isPremade, 0, 0, 0); + GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, grp, bgTypeId, bracketEntry, 0, false, isPremade, 0, 0); avgWaitTime = bgQueue.GetAverageQueueWaitTime(ginfo); } - WorldPacket data; - for (GroupReference* itr = grp->GetFirstMember(); itr != nullptr; itr = itr->next()) + grp->DoForAllMembers([bg, err, bgQueueTypeId, avgWaitTime](Player* member) { - Player* member = itr->GetSource(); - if (!member) - continue; + WorldPacket data; if (err <= 0) { sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); member->GetSession()->SendPacket(&data); - continue; + return; } uint32 queueSlot = member->AddBattlegroundQueueId(bgQueueTypeId); // send status packet - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bgt, queueSlot, STATUS_WAIT_QUEUE, avgWaitTime, 0, 0, TEAM_NEUTRAL); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgWaitTime, 0, 0, TEAM_NEUTRAL); member->GetSession()->SendPacket(&data); sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); member->GetSession()->SendPacket(&data); sScriptMgr->OnPlayerJoinBG(member); - } + }); } + + sBattlegroundMgr->ScheduleQueueUpdate(0, 0, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId()); } void WorldSession::HandleBattlegroundPlayerPositionsOpcode(WorldPacket& /*recvData*/) @@ -373,7 +348,10 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket& recvData) BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId); if (!bl) + { + LOG_DEBUG("bg.battleground", "BattlegroundHandler: invalid bgtype ({}) with player (Name: {}, {}) received.", bgTypeId, _player->GetName(), _player->GetGUID().ToString()); return; + } WorldPacket data; sBattlegroundMgr->BuildBattlegroundListPacket(&data, ObjectGuid::Empty, _player, BattlegroundTypeId(bgTypeId), fromWhere); @@ -382,21 +360,27 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket& recvData) void WorldSession::HandleBattleFieldPortOpcode(WorldPacket& recvData) { - uint8 arenaType; // arenatype if arena - uint8 unk2; // unk, can be 0x0 (may be if was invited?) and 0x1 - uint32 bgTypeId_; // type id from dbc - uint16 unk; // 0x1F90 constant? - uint8 action; // enter battle 0x1, leave queue 0x0 + uint8 arenaType; // arenatype if arena + uint8 unk2; // unk, can be 0x0 (may be if was invited?) and 0x1 + uint32 bgTypeId_; // type id from dbc + uint16 unk; // 0x1F90 constant? + uint8 action; // enter battle 0x1, leave queue 0x0 recvData >> arenaType >> unk2 >> bgTypeId_ >> unk >> action; // bgTypeId not valid if (!sBattlemasterListStore.LookupEntry(bgTypeId_)) + { + LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT {} ArenaType: {}, Unk: {}, BgType: {}, Action: {}. Invalid BgType!", GetPlayerInfo(), arenaType, unk2, bgTypeId_, action); return; + } // player not in any queue, so can't really answer if (!_player->InBattlegroundQueue()) + { + LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT {} ArenaType: {}, Unk: {}, BgType: {}, Action: {}. Player not in queue!", GetPlayerInfo(), arenaType, unk2, bgTypeId_, action); return; + } // get BattlegroundQueue for received BattlegroundTypeId bgTypeId = BattlegroundTypeId(bgTypeId_); @@ -409,20 +393,40 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket& recvData) // get group info from queue GroupQueueInfo ginfo; if (!bgQueue.GetPlayerGroupInfoData(_player->GetGUID(), &ginfo)) + { + LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT {} ArenaType: {}, Unk: {}, BgType: {}, Action: {}. Player not in queue (No player Group Info)!", + GetPlayerInfo(), arenaType, unk2, bgTypeId_, action); return; + } // to accept, player must be invited to particular battleground id if (!ginfo.IsInvitedToBGInstanceGUID && action == 1) + { + LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT {} ArenaType: {}, Unk: {}, BgType: {}, Action: {}. Player is not invited to any bg!", + GetPlayerInfo(), arenaType, unk2, bgTypeId_, action); return; + } - Battleground* bg = sBattlegroundMgr->GetBattleground(ginfo.IsInvitedToBGInstanceGUID); - - // use template if leaving queue (instance might not be created yet) - if (!bg && action == 0) - bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId); - + Battleground* bg = sBattlegroundMgr->GetBattleground(ginfo.IsInvitedToBGInstanceGUID, bgTypeId); if (!bg) - return; + { + if (action) + { + LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT {} ArenaType: {}, Unk: {}, BgType: {}, Action: {}. Cant find BG with id {}!", + GetPlayerInfo(), arenaType, unk2, bgTypeId_, action, ginfo.IsInvitedToBGInstanceGUID); + return; + } + + bg = sBattlegroundMgr->GetBattlegroundTemplate(bgTypeId); + if (!bg) + { + LOG_ERROR("network", "BattlegroundHandler: bg_template not found for type id {}.", bgTypeId); + return; + } + } + + LOG_DEBUG("bg.battleground", "CMSG_BATTLEFIELD_PORT {} ArenaType: {}, Unk: {}, BgType: {}, Action: {}.", + GetPlayerInfo(), arenaType, unk2, bgTypeId_, action); // expected bracket entry PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bg->GetMapId(), _player->getLevel()); @@ -439,74 +443,90 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket& recvData) sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS); SendPacket(&data); action = 0; + LOG_DEBUG("bg.battleground", "Player {} {} has a deserter debuff, do not port him to battleground!", _player->GetName(), _player->GetGUID().ToString()); } if (_player->getLevel() > bg->GetMaxLevel()) + { + LOG_ERROR("network", "Player {} {} has level ({}) higher than maxlevel ({}) of battleground ({})! Do not port him to battleground!", + _player->GetName(), _player->GetGUID().ToString(), _player->getLevel(), bg->GetMaxLevel(), bg->GetBgTypeID()); action = 0; + } } // get player queue slot index for this bg (can be in up to 2 queues at the same time) uint32 queueSlot = _player->GetBattlegroundQueueIndex(bgQueueTypeId); - WorldPacket data; - switch (action) + + if (action) // accept { - case 1: // accept + // check Freeze debuff + if (_player->HasAura(9454)) + return; + + if (!_player->IsInvitedForBattlegroundQueueType(bgQueueTypeId)) + return; // cheating? + + // set entry point if not in battleground + if (!_player->InBattleground()) + _player->SetEntryPoint(); + + // resurrect the player + if (!_player->IsAlive()) + { + _player->ResurrectPlayer(1.0f); + _player->SpawnCorpseBones(); + } + + TeamId teamId = ginfo.teamId; + + // send status packet + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), teamId); + SendPacket(&data); + + // remove battleground queue status from BGmgr + bgQueue.RemovePlayer(_player->GetGUID(), false); + + // this is still needed here if battleground "jumping" shouldn't add deserter debuff + // also this is required to prevent stuck at old battleground after SetBattlegroundId set to new + if (Battleground* currentBg = _player->GetBattleground()) + currentBg->RemovePlayerAtLeave(_player); + + // Remove from LFG queues + sLFGMgr->LeaveAllLfgQueues(_player->GetGUID(), false); + + _player->SetBattlegroundId(bg->GetInstanceID(), bg->GetBgTypeID(), queueSlot, true, bgTypeId == BATTLEGROUND_RB, teamId); + sBattlegroundMgr->SendToBattleground(_player, ginfo.IsInvitedToBGInstanceGUID, bgTypeId); + + LOG_DEBUG("bg.battleground", "Battleground: player {} {} joined battle for bg {}, bgtype {}, queue type {}.", _player->GetName(), _player->GetGUID().ToString(), bg->GetInstanceID(), bg->GetBgTypeID(), bgQueueTypeId); + } + else // leave queue + { + bgQueue.RemovePlayer(_player->GetGUID(), true); + _player->RemoveBattlegroundQueueId(bgQueueTypeId); + + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_NONE, 0, 0, 0, TEAM_NEUTRAL); + SendPacket(&data); + + LOG_DEBUG("bg.battleground", "Battleground: player {} {} left queue for bgtype {}, queue type {}.", _player->GetName(), _player->GetGUID().ToString(), bg->GetBgTypeID(), bgQueueTypeId); + + // player left queue, we should update it - do not update Arena Queue + if (!ginfo.ArenaType) + sBattlegroundMgr->ScheduleQueueUpdate(ginfo.ArenaMatchmakerRating, ginfo.ArenaType, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId()); + + // track if player refuses to join the BG after being invited + if (bg->isBattleground() && (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)) + { + if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS)) { - // set entry point if not in battleground - if (!_player->InBattleground()) - _player->SetEntryPoint(); - - // resurrect the player - if (!_player->IsAlive()) - { - _player->ResurrectPlayer(1.0f); - _player->SpawnCorpseBones(); - } - - TeamId teamId = ginfo.teamId; - - // remove player from all bg queues - for (uint32 qslot = 0; qslot < PLAYER_MAX_BATTLEGROUND_QUEUES; ++qslot) - if (BattlegroundQueueTypeId q = _player->GetBattlegroundQueueTypeId(qslot)) - { - BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(q); - queue.RemovePlayer(_player->GetGUID(), (bgQueueTypeId == q), qslot); - _player->RemoveBattlegroundQueueId(q); - } - - // send status packet - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), teamId); - SendPacket(&data); - - // Remove from LFG queues - sLFGMgr->LeaveAllLfgQueues(_player->GetGUID(), false); - - _player->SetBattlegroundId(bg->GetInstanceID(), bg->GetBgTypeID(), queueSlot, true, bgTypeId == BATTLEGROUND_RB, teamId); - sBattlegroundMgr->SendToBattleground(_player, ginfo.IsInvitedToBGInstanceGUID, bgTypeId); + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); + stmt->SetData(0, _player->GetGUID().GetCounter()); + stmt->SetData(1, BG_DESERTION_TYPE_LEAVE_QUEUE); + CharacterDatabase.Execute(stmt); } - break; - case 0: // leave queue - { - bgQueue.RemovePlayer(_player->GetGUID(), false, queueSlot); - _player->RemoveBattlegroundQueueId(bgQueueTypeId); - // track if player refuses to join the BG after being invited - if (bg->isBattleground() && (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)) - { - if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS)) - { - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); - stmt->SetData(0, _player->GetGUID().GetCounter()); - stmt->SetData(1, BG_DESERTION_TYPE_LEAVE_QUEUE); - CharacterDatabase.Execute(stmt); - } - sScriptMgr->OnBattlegroundDesertion(_player, BG_DESERTION_TYPE_LEAVE_QUEUE); - } - } - break; - default: - break; + sScriptMgr->OnBattlegroundDesertion(_player, BG_DESERTION_TYPE_LEAVE_QUEUE); + } } } @@ -562,7 +582,7 @@ void WorldSession::HandleBattlefieldStatusOpcode(WorldPacket& /*recvData*/) // if invited - send STATUS_WAIT_JOIN if (ginfo.IsInvitedToBGInstanceGUID) { - Battleground* bg = sBattlegroundMgr->GetBattleground(ginfo.IsInvitedToBGInstanceGUID); + Battleground* bg = sBattlegroundMgr->GetBattleground(ginfo.IsInvitedToBGInstanceGUID, bgTypeId); if (!bg) continue; @@ -591,10 +611,12 @@ void WorldSession::HandleBattlefieldStatusOpcode(WorldPacket& /*recvData*/) void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) { - ObjectGuid guid; // arena Battlemaster guid - uint8 arenaslot; // 2v2, 3v3 or 5v5 - uint8 asGroup; // asGroup - uint8 isRated; // isRated + LOG_DEBUG("network", "WORLD: CMSG_BATTLEMASTER_JOIN_ARENA"); + + ObjectGuid guid; // arena Battlemaster guid + uint8 arenaslot; // 2v2, 3v3 or 5v5 + uint8 asGroup; // asGroup + uint8 isRated; // isRated recvData >> guid >> arenaslot >> asGroup >> isRated; @@ -602,6 +624,10 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) if (isRated && !asGroup) return; + // ignore if we already in BG or BG queue + if (_player->InBattleground()) + return; + // find creature by guid Creature* unit = GetPlayer()->GetMap()->GetCreature(guid); if (!unit || !unit->IsBattleMaster()) @@ -609,6 +635,11 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) // get arena type uint8 arenatype = 0; + uint32 ateamId = 0; + uint32 arenaRating = 0; + uint32 matchmakerRating = 0; + uint32 previousOpponents = 0; + switch (arenaslot) { case 0: @@ -621,13 +652,17 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) arenatype = ARENA_TYPE_5v5; break; default: + LOG_ERROR("network", "Unknown arena slot {} at HandleBattlemasterJoinArena()", arenaslot); return; } // get template for all arenas Battleground* bgt = sBattlegroundMgr->GetBattlegroundTemplate(BATTLEGROUND_AA); if (!bgt) + { + LOG_ERROR("network", "Battleground: template bg (all arenas) not found"); return; + } // arenas disabled if (DisableMgr::IsDisabledFor(DISABLE_TYPE_BATTLEGROUND, BATTLEGROUND_AA, nullptr)) @@ -637,32 +672,12 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) } BattlegroundTypeId bgTypeId = bgt->GetBgTypeID(); - BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bgTypeId, arenatype); // expected bracket entry PvPDifficultyEntry const* bracketEntry = GetBattlegroundBracketByLevel(bgt->GetMapId(), _player->getLevel()); if (!bracketEntry) return; - // pussywizard: if trying to queue for already queued - // just remove from queue and it will requeue! - uint32 qSlot = _player->GetBattlegroundQueueIndex(bgQueueTypeId); - if (qSlot < PLAYER_MAX_BATTLEGROUND_QUEUES) - { - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); - - if (bgQueue.IsPlayerInvitedToRatedArena(_player->GetGUID())) - { - WorldPacket data; - sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_BATTLEGROUND_JOIN_FAILED); - SendPacket(&data); - return; - } - - bgQueue.RemovePlayer(_player->GetGUID(), false, qSlot); - _player->RemoveBattlegroundQueueId(bgQueueTypeId); - } - // must have free queue slot // pussywizard: allow being queued only in one arena queue, and it even cannot be together with bg queues if (_player->InBattlegroundQueue()) @@ -684,6 +699,9 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) return; } + BattlegroundQueueTypeId bgQueueTypeId = BattlegroundMgr::BGQueueTypeId(bgTypeId, arenatype); + BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); + // check if player can queue: if (!asGroup) { @@ -705,16 +723,25 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) return; } - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); - GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, nullptr, bracketEntry, false, false, 0, 0, 0); - uint32 avgWaitTime = bgQueue.GetAverageQueueWaitTime(ginfo); + // check if already in queue + if (_player->GetBattlegroundQueueIndex(bgQueueTypeId) < PLAYER_MAX_BATTLEGROUND_QUEUES) + //player is already in this queue + return; + // check if has free queue slots + if (!_player->HasFreeBattlegroundQueueId()) + return; + + GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, nullptr, bgTypeId, bracketEntry, arenatype, isRated != 0, false, arenaRating, matchmakerRating, ateamId, previousOpponents); + uint32 avgWaitTime = bgQueue.GetAverageQueueWaitTime(ginfo); uint32 queueSlot = _player->AddBattlegroundQueueId(bgQueueTypeId); WorldPacket data; sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bgt, queueSlot, STATUS_WAIT_QUEUE, avgWaitTime, 0, arenatype, TEAM_NEUTRAL); SendPacket(&data); + LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena, skirmish, bg queue type {} bg type {}: {}, NAME {}", bgQueueTypeId, bgTypeId, _player->GetGUID().ToString(), _player->GetName()); + sScriptMgr->OnPlayerJoinArena(_player); } // check if group can queue: @@ -725,34 +752,6 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) if (!grp || grp->GetLeaderGUID() != _player->GetGUID()) return; - // pussywizard: for party members - remove queues for which leader is not queued to! - std::set leaderQueueTypeIds; - for (uint32 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) - leaderQueueTypeIds.insert((uint32)_player->GetBattlegroundQueueTypeId(i)); - for (GroupReference* itr = grp->GetFirstMember(); itr != nullptr; itr = itr->next()) - if (Player* member = itr->GetSource()) - for (uint32 i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) - if (BattlegroundQueueTypeId mqtid = member->GetBattlegroundQueueTypeId(i)) - if (leaderQueueTypeIds.count((uint32)mqtid) == 0) - { - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(mqtid); - - if (bgQueue.IsPlayerInvitedToRatedArena(member->GetGUID())) - { - WorldPacket data; - sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_BATTLEGROUND_JOIN_FAILED); - SendPacket(&data); - return; - } - - bgQueue.RemovePlayer(member->GetGUID(), false, i); - member->RemoveBattlegroundQueueId(mqtid); - } - - uint32 ateamId = 0; - uint32 arenaRating = 0; - uint32 matchmakerRating = 0; - // additional checks for rated arenas if (isRated) { @@ -775,15 +774,40 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) matchmakerRating = at->GetAverageMMR(grp); if (arenaRating <= 0) arenaRating = 1; + + previousOpponents = at->GetPreviousOpponents(); } err = grp->CanJoinBattlegroundQueue(bgt, bgQueueTypeId, arenatype, arenatype, (bool)isRated, arenaslot); + // Check queue group members + if (err) + { + grp->DoForAllMembers([&bgQueue, &err](Player* member) + { + if (bgQueue.IsPlayerInvitedToRatedArena(member->GetGUID())) + { + err = ERR_BATTLEGROUND_JOIN_FAILED; + } + }); + } + uint32 avgWaitTime = 0; if (err > 0) { - BattlegroundQueue& bgQueue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); - GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, grp, bracketEntry, isRated, false, arenaRating, matchmakerRating, ateamId); + LOG_DEBUG("bg.battleground", "Battleground: arena join as group start"); + + if (isRated) + { + LOG_DEBUG("bg.battleground", "Battleground: arena team id {}, leader {} queued with matchmaker rating {} for type {}", _player->GetArenaTeamId(arenaslot), _player->GetName(), matchmakerRating, arenatype); + bgt->SetRated(true); + } + else + { + bgt->SetRated(false); + } + + GroupQueueInfo* ginfo = bgQueue.AddGroup(_player, grp, bgTypeId, bracketEntry, arenatype, isRated != 0, false, arenaRating, matchmakerRating, ateamId, previousOpponents); avgWaitTime = bgQueue.GetAverageQueueWaitTime(ginfo); } @@ -810,13 +834,13 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); member->GetSession()->SendPacket(&data); + LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type {} bg type {}: {}, NAME {}", bgQueueTypeId, bgTypeId, member->GetGUID().ToString(), member->GetName()); + sScriptMgr->OnPlayerJoinArena(member); } - - // pussywizard: schedule update for rated arena - if (ateamId) - sBattlegroundMgr->ScheduleArenaQueueUpdate(ateamId, bgQueueTypeId, bracketEntry->GetBracketId()); } + + sBattlegroundMgr->ScheduleQueueUpdate(matchmakerRating, arenatype, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId()); } void WorldSession::HandleReportPvPAFK(WorldPacket& recvData) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 6ec3b2fca..abd1f2b67 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -58,9 +58,19 @@ #include "WorldPacket.h" #include "WorldSession.h" -LoginQueryHolder::LoginQueryHolder(uint32 accountId, ObjectGuid guid) : m_accountId(accountId), m_guid(guid) +class LoginQueryHolder : public CharacterDatabaseQueryHolder { -} +private: + uint32 m_accountId; + ObjectGuid m_guid; +public: + LoginQueryHolder(uint32 accountId, ObjectGuid guid) + : m_accountId(accountId), m_guid(guid) { } + + ObjectGuid GetGuid() const { return m_guid; } + uint32 GetAccountId() const { return m_accountId; } + bool Initialize(); +}; bool LoginQueryHolder::Initialize() { @@ -551,12 +561,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData) newChar->SaveToDB(characterTransaction, true, false); createInfo->CharCount++; - LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM); - stmt->SetData(0, GetAccountId()); - stmt->SetData(1, realm.Id.Realm); - trans->Append(stmt); - - stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS); + LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_REALM_CHARACTERS); stmt->SetData(0, createInfo->CharCount); stmt->SetData(1, GetAccountId()); stmt->SetData(2, realm.Id.Realm); @@ -892,7 +897,8 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder const& holder) CharacterDatabase.Execute(stmt); LoginDatabasePreparedStatement* loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_ONLINE); - loginStmt->SetData(0, GetAccountId()); + loginStmt->SetData(0, realm.Id.Realm); + loginStmt->SetData(1, GetAccountId()); LoginDatabase.Execute(loginStmt); pCurrChar->SetInGameTime(GameTime::GetGameTimeMS().count()); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index e4d6c4886..540273a2a 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -170,7 +170,7 @@ void WorldSession::HandleMoveWorldportAck() if (uint32 inviteInstanceId = _player->GetPendingSpectatorInviteInstanceId()) { - if (Battleground* tbg = sBattlegroundMgr->GetBattleground(inviteInstanceId)) + if (Battleground* tbg = sBattlegroundMgr->GetBattleground(inviteInstanceId, BATTLEGROUND_TYPE_NONE)) tbg->RemoveToBeTeleported(_player->GetGUID()); _player->SetPendingSpectatorInviteInstanceId(0); } @@ -904,14 +904,14 @@ void WorldSession::ComputeNewClockDelta() std::vector latencies; std::vector clockDeltasAfterFiltering; - for (auto pair : _timeSyncClockDeltaQueue.content()) + for (auto& pair : _timeSyncClockDeltaQueue.content()) latencies.push_back(pair.second); uint32 latencyMedian = median(latencies); uint32 latencyStandardDeviation = standard_deviation(latencies); uint32 sampleSizeAfterFiltering = 0; - for (auto pair : _timeSyncClockDeltaQueue.content()) + for (auto& pair : _timeSyncClockDeltaQueue.content()) { if (pair.second <= latencyMedian + latencyStandardDeviation) { clockDeltasAfterFiltering.push_back(pair.first); diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index 4e3509708..389348a4f 100644 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -116,7 +116,7 @@ bool InstanceSaveMgr::DeleteInstanceSaveIfNeeded(uint32 InstanceId, bool skipMap return DeleteInstanceSaveIfNeeded(GetInstanceSave(InstanceId), skipMapCheck); } -bool InstanceSaveMgr::DeleteInstanceSaveIfNeeded(InstanceSave* save, bool skipMapCheck) +bool InstanceSaveMgr::DeleteInstanceSaveIfNeeded(InstanceSave* save, bool skipMapCheck, bool deleteSave /*= true*/) { // pussywizard: save is removed only when there are no more players bound AND the map doesn't exist // pussywizard: this function is called when unbinding a player and when unloading a map @@ -136,7 +136,11 @@ bool InstanceSaveMgr::DeleteInstanceSaveIfNeeded(InstanceSave* save, bool skipMa // clear respawn times (if map is loaded do it just to be sure, if already unloaded it won't do it by itself) Map::DeleteRespawnTimesInDB(save->GetMapId(), save->GetInstanceId()); - delete save; + if (deleteSave) + { + delete save; + } + return true; } return false; @@ -216,11 +220,22 @@ void InstanceSave::AddPlayer(ObjectGuid guid) bool InstanceSave::RemovePlayer(ObjectGuid guid, InstanceSaveMgr* ism) { - std::lock_guard guard(_lock); - m_playerList.remove(guid); + bool deleteSave = false; + { + std::lock_guard lg(_lock); + m_playerList.remove(guid); - // ism passed as an argument to avoid calling via singleton (might result in a deadlock) - return ism->DeleteInstanceSaveIfNeeded(this->GetInstanceId(), false); + // ism passed as an argument to avoid calling via singleton (might result in a deadlock) + deleteSave = ism->DeleteInstanceSaveIfNeeded(this, false, false); + } + + // Delete save now (avoid mutex memory corruption) + if (deleteSave) + { + delete this; + } + + return deleteSave; } void InstanceSaveMgr::LoadInstances() @@ -787,7 +802,12 @@ void InstanceSaveMgr::CopyBinds(ObjectGuid from, ObjectGuid to, Player* toPlr) void InstanceSaveMgr::UnbindAllFor(InstanceSave* save) { - GuidList& pList = save->m_playerList; - while (!pList.empty()) - PlayerUnbindInstance(*(pList.begin()), save->GetMapId(), save->GetDifficulty(), true, ObjectAccessor::FindConnectedPlayer(*(pList.begin()))); + uint32 mapId = save->GetMapId(); + Difficulty difficulty = save->GetDifficulty(); + GuidList players = save->m_playerList; + + for (ObjectGuid const& guid : players) + { + PlayerUnbindInstance(guid, mapId, difficulty, true, ObjectAccessor::FindConnectedPlayer(guid)); + } } diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index cb4ee8f39..b2adb2869 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -166,7 +166,7 @@ public: InstanceSave* AddInstanceSave(uint32 mapId, uint32 instanceId, Difficulty difficulty, bool startup = false); bool DeleteInstanceSaveIfNeeded(uint32 InstanceId, bool skipMapCheck); - bool DeleteInstanceSaveIfNeeded(InstanceSave* save, bool skipMapCheck); + bool DeleteInstanceSaveIfNeeded(InstanceSave* save, bool skipMapCheck, bool deleteSave = true); InstanceSave* GetInstanceSave(uint32 InstanceId); diff --git a/src/server/game/Loot/LootItemStorage.cpp b/src/server/game/Loot/LootItemStorage.cpp index def74faff..3f111a842 100644 --- a/src/server/game/Loot/LootItemStorage.cpp +++ b/src/server/game/Loot/LootItemStorage.cpp @@ -43,7 +43,7 @@ void LootItemStorage::LoadStorageFromDB() PreparedQueryResult result = CharacterDatabase.Query(stmt); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 stored items!"); + LOG_WARN("server.loading", ">> Loaded 0 stored items!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 90809919b..7e3b6d94f 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -1923,7 +1923,7 @@ void LoadLootTemplates_Creature() if (count) LOG_INFO("server.loading", ">> Loaded {} creature loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 creature loot templates. DB table `creature_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 creature loot templates. DB table `creature_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -1958,7 +1958,7 @@ void LoadLootTemplates_Disenchant() if (count) LOG_INFO("server.loading", ">> Loaded {} disenchanting loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 disenchanting loot templates. DB table `disenchant_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 disenchanting loot templates. DB table `disenchant_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -1983,7 +1983,7 @@ void LoadLootTemplates_Fishing() if (count) LOG_INFO("server.loading", ">> Loaded {} fishing loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 fishing loot templates. DB table `fishing_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 fishing loot templates. DB table `fishing_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2019,7 +2019,7 @@ void LoadLootTemplates_Gameobject() if (count) LOG_INFO("server.loading", ">> Loaded {} gameobject loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 gameobject loot templates. DB table `gameobject_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 gameobject loot templates. DB table `gameobject_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2045,7 +2045,7 @@ void LoadLootTemplates_Item() if (count) LOG_INFO("server.loading", ">> Loaded {} item loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 item loot templates. DB table `item_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 item loot templates. DB table `item_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2076,7 +2076,7 @@ void LoadLootTemplates_Milling() if (count) LOG_INFO("server.loading", ">> Loaded {} milling loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 milling loot templates. DB table `milling_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 milling loot templates. DB table `milling_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2112,7 +2112,7 @@ void LoadLootTemplates_Pickpocketing() if (count) LOG_INFO("server.loading", ">> Loaded {} pickpocketing loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 pickpocketing loot templates. DB table `pickpocketing_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 pickpocketing loot templates. DB table `pickpocketing_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2143,7 +2143,7 @@ void LoadLootTemplates_Prospecting() if (count) LOG_INFO("server.loading", ">> Loaded {} prospecting loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 prospecting loot templates. DB table `prospecting_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 prospecting loot templates. DB table `prospecting_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2169,7 +2169,7 @@ void LoadLootTemplates_Mail() if (count) LOG_INFO("server.loading", ">> Loaded {} mail loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 mail loot templates. DB table `mail_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 mail loot templates. DB table `mail_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2205,7 +2205,7 @@ void LoadLootTemplates_Skinning() if (count) LOG_INFO("server.loading", ">> Loaded {} skinning loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 skinning loot templates. DB table `skinning_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 skinning loot templates. DB table `skinning_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2249,7 +2249,7 @@ void LoadLootTemplates_Spell() if (count) LOG_INFO("server.loading", ">> Loaded {} spell loot templates in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); else - LOG_ERROR("sql.sql", ">> Loaded 0 spell loot templates. DB table `spell_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 spell loot templates. DB table `spell_loot_template` is empty"); LOG_INFO("server.loading", " "); } @@ -2268,7 +2268,7 @@ void LoadLootTemplates_Player() } else { - LOG_ERROR("sql.sql", ">> Loaded 0 player loot templates. DB table `player_loot_template` is empty"); + LOG_WARN("server.loading", ">> Loaded 0 player loot templates. DB table `player_loot_template` is empty"); } LOG_INFO("server.loading", " "); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index d597ae441..6db9298d2 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2803,6 +2803,7 @@ InstanceMap::~InstanceMap() { delete instance_data; instance_data = nullptr; + sInstanceSaveMgr->DeleteInstanceSaveIfNeeded(GetInstanceId(), true); } void InstanceMap::InitVisibilityDistance() diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index 502ccf27f..ec11e11c9 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -55,7 +55,7 @@ void TransportMgr::LoadTransportTemplates() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 transport templates. DB table `gameobject_template` has no transports!"); + LOG_WARN("server.loading", ">> Loaded 0 transport templates. DB table `gameobject_template` has no transports!"); return; } diff --git a/src/server/game/Misc/GameGraveyard.cpp b/src/server/game/Misc/GameGraveyard.cpp index 34a8d4a15..8fbdea561 100644 --- a/src/server/game/Misc/GameGraveyard.cpp +++ b/src/server/game/Misc/GameGraveyard.cpp @@ -36,7 +36,7 @@ void Graveyard::LoadGraveyardFromDB() QueryResult result = WorldDatabase.Query("SELECT ID, Map, x, y, z, Comment FROM game_graveyard"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 graveyard. Table `game_graveyard` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 graveyard. Table `game_graveyard` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -367,7 +367,7 @@ void Graveyard::LoadGraveyardZones() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 graveyard-zone links. DB table `graveyard_zone` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 graveyard-zone links. DB table `graveyard_zone` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Movement/Waypoints/WaypointMgr.cpp b/src/server/game/Movement/Waypoints/WaypointMgr.cpp index 9fda92109..9be0b3bd0 100644 --- a/src/server/game/Movement/Waypoints/WaypointMgr.cpp +++ b/src/server/game/Movement/Waypoints/WaypointMgr.cpp @@ -52,7 +52,7 @@ void WaypointMgr::Load() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 waypoints. DB table `waypoint_data` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 waypoints. DB table `waypoint_data` is empty!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp index da080b709..57fe3166b 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp @@ -52,7 +52,7 @@ void OutdoorPvPMgr::InitOutdoorPvP() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 outdoor PvP definitions. DB table `outdoorpvp_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 outdoor PvP definitions. DB table `outdoorpvp_template` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Petitions/PetitionMgr.cpp b/src/server/game/Petitions/PetitionMgr.cpp index c2b7fc30d..a3c5c69ff 100644 --- a/src/server/game/Petitions/PetitionMgr.cpp +++ b/src/server/game/Petitions/PetitionMgr.cpp @@ -45,7 +45,7 @@ void PetitionMgr::LoadPetitions() QueryResult result = CharacterDatabase.Query("SELECT ownerguid, petitionguid, name, type FROM petition"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 Petitions!"); + LOG_WARN("server.loading", ">> Loaded 0 Petitions!"); LOG_INFO("server.loading", " "); return; } @@ -70,7 +70,7 @@ void PetitionMgr::LoadSignatures() QueryResult result = CharacterDatabase.Query("SELECT petitionguid, playerguid, player_account FROM petition_sign"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 Petition signs!"); + LOG_WARN("server.loading", ">> Loaded 0 Petition signs!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index 84d3c55e5..37a9bc41f 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -581,7 +581,7 @@ void PoolMgr::LoadFromDB() if (!result) { mPoolTemplate.clear(); - LOG_INFO("server.loading", ">> Loaded 0 object pools. DB table `pool_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 object pools. DB table `pool_template` is empty."); LOG_INFO("server.loading", " "); return; } @@ -614,7 +614,7 @@ void PoolMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 creatures in pools. DB table `pool_creature` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 creatures in pools. DB table `pool_creature` is empty."); LOG_INFO("server.loading", " "); } else @@ -672,7 +672,7 @@ void PoolMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 gameobjects in pools. DB table `pool_gameobject` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 gameobjects in pools. DB table `pool_gameobject` is empty."); LOG_INFO("server.loading", " "); } else @@ -742,7 +742,7 @@ void PoolMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 pools in pools"); + LOG_WARN("server.loading", ">> Loaded 0 pools in pools"); LOG_INFO("server.loading", " "); } else @@ -832,7 +832,7 @@ void PoolMgr::LoadFromDB() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 quests in pools"); + LOG_WARN("server.loading", ">> Loaded 0 quests in pools"); LOG_INFO("server.loading", " "); } else diff --git a/src/server/game/Scripting/ScriptDefines/BGScript.cpp b/src/server/game/Scripting/ScriptDefines/BGScript.cpp index 602cb342a..3e06e2ce3 100644 --- a/src/server/game/Scripting/ScriptDefines/BGScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/BGScript.cpp @@ -66,58 +66,41 @@ void ScriptMgr::OnBattlegroundRemovePlayerAtLeave(Battleground* bg, Player* play }); } -void ScriptMgr::OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* grp, PvPDifficultyEntry const* bracketEntry, bool isPremade) +void ScriptMgr::OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, + uint8 arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId, uint32 opponentsArenaTeamId) { ExecuteScript([&](BGScript* script) { - script->OnAddGroup(queue, ginfo, index, leader, grp, bracketEntry, isPremade); + script->OnAddGroup(queue, ginfo, index, leader, group, bgTypeId, bracketEntry, + arenaType, isRated, isPremade, arenaRating, matchmakerRating, arenaTeamId, opponentsArenaTeamId); }); } -bool ScriptMgr::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, const int32 aliFree, const int32 hordeFree, BattlegroundBracketId bracket_id) +bool ScriptMgr::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id) { auto ret = IsValidBoolScript([&](BGScript* script) { - return !script->CanFillPlayersToBG(queue, bg, aliFree, hordeFree, bracket_id); + return !script->CanFillPlayersToBG(queue, bg, bracket_id); }); - if (ret && *ret) - { - return false; - } - - return true; + return ReturnValidBool(ret); } -bool ScriptMgr::CanFillPlayersToBGWithSpecific(BattlegroundQueue* queue, Battleground* bg, const int32 aliFree, const int32 hordeFree, - BattlegroundBracketId thisBracketId, BattlegroundQueue* specificQueue, BattlegroundBracketId specificBracketId) +bool ScriptMgr::IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers) { auto ret = IsValidBoolScript([&](BGScript* script) { - return !script->CanFillPlayersToBGWithSpecific(queue, bg, aliFree, hordeFree, thisBracketId, specificQueue, specificBracketId); + return script->IsCheckNormalMatch(queue, bgTemplate, bracket_id, minPlayers, maxPlayers); }); - if (ret && *ret) - { - return false; - } - - return true; + return ReturnValidBool(ret, true); } -void ScriptMgr::OnCheckNormalMatch(BattlegroundQueue* queue, uint32& Coef, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32& minPlayers, uint32& maxPlayers) +void ScriptMgr::OnQueueUpdate(BattlegroundQueue* queue, uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating) { ExecuteScript([&](BGScript* script) { - script->OnCheckNormalMatch(queue, Coef, bgTemplate, bracket_id, minPlayers, maxPlayers); - }); -} - -void ScriptMgr::OnQueueUpdate(BattlegroundQueue* queue, BattlegroundBracketId bracket_id, bool isRated, uint32 arenaRatedTeamId) -{ - ExecuteScript([&](BGScript* script) - { - script->OnQueueUpdate(queue, bracket_id, isRated, arenaRatedTeamId); + script->OnQueueUpdate(queue, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating); }); } @@ -128,12 +111,7 @@ bool ScriptMgr::CanSendMessageBGQueue(BattlegroundQueue* queue, Player* leader, return !script->CanSendMessageBGQueue(queue, leader, bg, bracketEntry); }); - if (ret && *ret) - { - return false; - } - - return true; + return ReturnValidBool(ret); } bool ScriptMgr::OnBeforeSendJoinMessageArenaQueue(BattlegroundQueue* queue, Player* leader, GroupQueueInfo* ginfo, PvPDifficultyEntry const* bracketEntry, bool isRated) @@ -143,12 +121,7 @@ bool ScriptMgr::OnBeforeSendJoinMessageArenaQueue(BattlegroundQueue* queue, Play return !script->OnBeforeSendJoinMessageArenaQueue(queue, leader, ginfo, bracketEntry, isRated); }); - if (ret && *ret) - { - return false; - } - - return true; + return ReturnValidBool(ret); } bool ScriptMgr::OnBeforeSendExitMessageArenaQueue(BattlegroundQueue* queue, GroupQueueInfo* ginfo) @@ -158,12 +131,7 @@ bool ScriptMgr::OnBeforeSendExitMessageArenaQueue(BattlegroundQueue* queue, Grou return !script->OnBeforeSendExitMessageArenaQueue(queue, ginfo); }); - if (ret && *ret) - { - return false; - } - - return true; + return ReturnValidBool(ret); } void ScriptMgr::OnBattlegroundEnd(Battleground* bg, TeamId winnerTeam) diff --git a/src/server/game/Scripting/ScriptDefines/DatabaseScript.cpp b/src/server/game/Scripting/ScriptDefines/DatabaseScript.cpp index c3f92c583..b4debdf2f 100644 --- a/src/server/game/Scripting/ScriptDefines/DatabaseScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/DatabaseScript.cpp @@ -18,21 +18,6 @@ #include "ScriptMgr.h" #include "ScriptMgrMacros.h" -bool ScriptMgr::OnDatabasesLoading() -{ - auto ret = IsValidBoolScript([&](DatabaseScript* script) - { - return !script->OnDatabasesLoading(); - }); - - if (ret && *ret) - { - return false; - } - - return true; -} - void ScriptMgr::OnAfterDatabasesLoaded(uint32 updateFlags) { ExecuteScript([&](DatabaseScript* script) @@ -40,43 +25,3 @@ void ScriptMgr::OnAfterDatabasesLoaded(uint32 updateFlags) script->OnAfterDatabasesLoaded(updateFlags); }); } - -void ScriptMgr::OnDatabasesKeepAlive() -{ - ExecuteScript([&](DatabaseScript* script) - { - script->OnDatabasesKeepAlive(); - }); -} - -void ScriptMgr::OnDatabasesClosing() -{ - ExecuteScript([&](DatabaseScript* script) - { - script->OnDatabasesClosing(); - }); -} - -void ScriptMgr::OnDatabaseWarnAboutSyncQueries(bool apply) -{ - ExecuteScript([&](DatabaseScript* script) - { - script->OnDatabaseWarnAboutSyncQueries(apply); - }); -} - -void ScriptMgr::OnDatabaseSelectIndexLogout(Player* player, uint32& statementIndex, uint32& statementParam) -{ - ExecuteScript([&](DatabaseScript* script) - { - script->OnDatabaseSelectIndexLogout(player, statementIndex, statementParam); - }); -} - -void ScriptMgr::OnDatabaseGetDBRevision(std::string& revision) -{ - ExecuteScript([&](DatabaseScript* script) - { - script->OnDatabaseGetDBRevision(revision); - }); -} diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 6dce72b72..1f2bcd9b3 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -305,14 +305,6 @@ void ScriptMgr::OnPlayerUpdate(Player* player, uint32 p_time) }); } -void ScriptMgr::OnAfterPlayerUpdate(Player* player, uint32 diff) -{ - ExecuteScript([&](PlayerScript* script) - { - script->OnAfterUpdate(player, diff); - }); -} - void ScriptMgr::OnPlayerLogin(Player* player) { ExecuteScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptDefines/ServerScript.cpp b/src/server/game/Scripting/ScriptDefines/ServerScript.cpp index 9e10e12c3..ca8f7cf67 100644 --- a/src/server/game/Scripting/ScriptDefines/ServerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/ServerScript.cpp @@ -74,15 +74,6 @@ bool ScriptMgr::CanPacketReceive(WorldSession* session, WorldPacket const& packe return true; } -void ScriptMgr::OnPacketReceived(WorldSession* session, WorldPacket const& packet) -{ - WorldPacket copy(packet); - ExecuteScript([&](ServerScript* script) - { - script->OnPacketReceived(session, copy); - }); -} - bool ScriptMgr::CanPacketSend(WorldSession* session, WorldPacket const& packet) { ASSERT(session); diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 52fc2b0fc..a505613f6 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1568,16 +1568,14 @@ public: // Remove player at leave BG virtual void OnBattlegroundRemovePlayerAtLeave(Battleground* /*bg*/, Player* /*player*/) { } - virtual void OnQueueUpdate(BattlegroundQueue* /*queue*/, BattlegroundBracketId /*bracket_id*/, bool /*isRated*/, uint32 /*arenaRatedTeamId*/) { } + virtual void OnQueueUpdate(BattlegroundQueue* /*queue*/, uint32 /* diff */, BattlegroundTypeId /* bgTypeId */, BattlegroundBracketId /* bracket_id */, uint8 /* arenaType */, bool /* isRated */, uint32 /* arenaRating */) { } - virtual void OnAddGroup(BattlegroundQueue* /*queue*/, GroupQueueInfo* /*ginfo*/, uint32& /*index*/, Player* /*leader*/, Group* /*grp*/, PvPDifficultyEntry const* /*bracketEntry*/, bool /*isPremade*/) { } + virtual void OnAddGroup(BattlegroundQueue* /*queue*/, GroupQueueInfo* /*ginfo*/, uint32& /*index*/, Player* /*leader*/, Group* /*group*/, BattlegroundTypeId /* bgTypeId */, PvPDifficultyEntry const* /* bracketEntry */, + uint8 /* arenaType */, bool /* isRated */, bool /* isPremade */, uint32 /* arenaRating */, uint32 /* matchmakerRating */, uint32 /* arenaTeamId */, uint32 /* opponentsArenaTeamId */) { } - [[nodiscard]] virtual bool CanFillPlayersToBG(BattlegroundQueue* /*queue*/, Battleground* /*bg*/, const int32 /*aliFree*/, const int32 /*hordeFree*/, BattlegroundBracketId /*bracket_id*/) { return true; } + [[nodiscard]] virtual bool CanFillPlayersToBG(BattlegroundQueue* /*queue*/, Battleground* /*bg*/, BattlegroundBracketId /*bracket_id*/) { return true; } - [[nodiscard]] virtual bool CanFillPlayersToBGWithSpecific(BattlegroundQueue* /*queue*/, Battleground* /*bg*/, const int32 /*aliFree*/, const int32 /*hordeFree*/, - BattlegroundBracketId /*thisBracketId*/, BattlegroundQueue* /*specificQueue*/, BattlegroundBracketId /*specificBracketId*/) { return true; } - - virtual void OnCheckNormalMatch(BattlegroundQueue* /*queue*/, uint32& /*Coef*/, Battleground* /*bgTemplate*/, BattlegroundBracketId /*bracket_id*/, uint32& /*minPlayers*/, uint32& /*maxPlayers*/) { } + [[nodiscard]] virtual bool IsCheckNormalMatch(BattlegroundQueue* /*queue*/, Battleground* /*bgTemplate*/, BattlegroundBracketId /*bracket_id*/, uint32 /*minPlayers*/, uint32 /*maxPlayers*/) { return false; }; [[nodiscard]] virtual bool CanSendMessageBGQueue(BattlegroundQueue* /*queue*/, Player* /*leader*/, Battleground* /*bg*/, PvPDifficultyEntry const* /*bracketEntry*/) { return true; } @@ -2443,12 +2441,11 @@ public: /* BGScript */ void OnBattlegroundAddPlayer(Battleground* bg, Player* player); void OnBattlegroundBeforeAddPlayer(Battleground* bg, Player* player); void OnBattlegroundRemovePlayerAtLeave(Battleground* bg, Player* player); - void OnQueueUpdate(BattlegroundQueue* queue, BattlegroundBracketId bracket_id, bool isRated, uint32 arenaRatedTeamId); - void OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* grp, PvPDifficultyEntry const* bracketEntry, bool isPremade); - bool CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, const int32 aliFree, const int32 hordeFree, BattlegroundBracketId bracket_id); - bool CanFillPlayersToBGWithSpecific(BattlegroundQueue* queue, Battleground* bg, const int32 aliFree, const int32 hordeFree, - BattlegroundBracketId thisBracketId, BattlegroundQueue* specificQueue, BattlegroundBracketId specificBracketId); - void OnCheckNormalMatch(BattlegroundQueue* queue, uint32& Coef, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32& minPlayers, uint32& maxPlayers); + void OnQueueUpdate(BattlegroundQueue* queue, uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating); + void OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, + uint8 arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId, uint32 opponentsArenaTeamId); + bool CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id); + bool IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers); bool CanSendMessageBGQueue(BattlegroundQueue* queue, Player* leader, Battleground* bg, PvPDifficultyEntry const* bracketEntry); bool OnBeforeSendJoinMessageArenaQueue(BattlegroundQueue* queue, Player* leader, GroupQueueInfo* ginfo, PvPDifficultyEntry const* bracketEntry, bool isRated); bool OnBeforeSendExitMessageArenaQueue(BattlegroundQueue* queue, GroupQueueInfo* ginfo); diff --git a/src/server/game/Scripting/ScriptMgrMacros.h b/src/server/game/Scripting/ScriptMgrMacros.h index 82fef5168..a26c6d71b 100644 --- a/src/server/game/Scripting/ScriptMgrMacros.h +++ b/src/server/game/Scripting/ScriptMgrMacros.h @@ -64,4 +64,9 @@ inline void ExecuteScript(std::function executeHook) } } +inline bool ReturnValidBool(Optional ret, bool need = false) +{ + return ret && *ret ? need : !need; +} + #endif // _SCRIPT_MGR_MACRO_H_ diff --git a/src/server/game/Scripting/ScriptSystem.cpp b/src/server/game/Scripting/ScriptSystem.cpp index 73760cb8c..7ca83b623 100644 --- a/src/server/game/Scripting/ScriptSystem.cpp +++ b/src/server/game/Scripting/ScriptSystem.cpp @@ -48,7 +48,7 @@ void SystemMgr::LoadScriptWaypoints() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 Script Waypoints. DB table `script_waypoint` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 Script Waypoints. DB table `script_waypoint` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 4ae3fc5b5..cf192ade6 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -31,6 +31,20 @@ WorldPacket const* WorldPackets::Misc::Weather::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Misc::LevelUpInfo::Write() +{ + _worldPacket << uint32(Level); + _worldPacket << uint32(HealthDelta); + + for (uint32 power : PowerDelta) + _worldPacket << power; + + for (uint32 stat : StatDelta) + _worldPacket << stat; + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Misc::PlayMusic::Write() { _worldPacket << SoundKitID; diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 50ae9fda7..78844d29a 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -41,6 +41,19 @@ namespace WorldPackets WeatherState WeatherID = WeatherState(0); }; + class LevelUpInfo final : public ServerPacket + { + public: + LevelUpInfo() : ServerPacket(SMSG_LEVELUP_INFO, 56) { } + + WorldPacket const* Write() override; + + uint32 Level = 0; + uint32 HealthDelta = 0; + std::array PowerDelta = { }; + std::array StatDelta = { }; + }; + class AC_GAME_API PlayMusic final : public ServerPacket { public: diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index f1fecad50..865d68bcc 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -37,10 +37,10 @@ #include "ObjectMgr.h" #include "Opcodes.h" #include "OutdoorPvPMgr.h" -#include "QueryHolder.h" #include "PacketUtilities.h" #include "Pet.h" #include "Player.h" +#include "QueryHolder.h" #include "ScriptMgr.h" #include "SocialMgr.h" #include "Transport.h" @@ -604,8 +604,6 @@ void WorldSession::LogoutPlayer(bool save) for (int i = 0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i) if (BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(i)) { - _player->RemoveBattlegroundQueueId(bgQueueTypeId); - sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId).RemovePlayer(_player->GetGUID(), false, i); // track if player logs out after invited to join BG if (_player->IsInvitedForBattlegroundInstance()) { @@ -616,8 +614,12 @@ void WorldSession::LogoutPlayer(bool save) stmt->SetData(1, BG_DESERTION_TYPE_INVITE_LOGOUT); CharacterDatabase.Execute(stmt); } + sScriptMgr->OnBattlegroundDesertion(_player, BG_DESERTION_TYPE_INVITE_LOGOUT); } + + _player->RemoveBattlegroundQueueId(bgQueueTypeId); + sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId).RemovePlayer(_player->GetGUID(), true); } ///- If the player is in a guild, update the guild roster and broadcast a logout message to other guild members diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp index 1ec03570d..f597ef06c 100644 --- a/src/server/game/Skills/SkillDiscovery.cpp +++ b/src/server/game/Skills/SkillDiscovery.cpp @@ -54,7 +54,7 @@ void LoadSkillDiscoveryTable() if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 skill discovery definitions. DB table `skill_discovery_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 skill discovery definitions. DB table `skill_discovery_template` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Skills/SkillExtraItems.cpp b/src/server/game/Skills/SkillExtraItems.cpp index 763d229e3..e6b757a2f 100644 --- a/src/server/game/Skills/SkillExtraItems.cpp +++ b/src/server/game/Skills/SkillExtraItems.cpp @@ -60,7 +60,7 @@ void LoadSkillPerfectItemTable() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell perfection definitions. DB table `skill_perfect_item_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell perfection definitions. DB table `skill_perfect_item_template` is empty."); LOG_INFO("server.loading", " "); return; } @@ -146,7 +146,7 @@ void LoadSkillExtraItemTable() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell specialization definitions. DB table `skill_extra_item_template` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell specialization definitions. DB table `skill_extra_item_template` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 27ce8407f..3959d4f79 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -892,9 +892,16 @@ void AuraEffect::Update(uint32 diff, Unit* caster) { if (m_isPeriodic && (GetBase()->GetDuration() >= 0 || GetBase()->IsPassive() || GetBase()->IsPermanent())) { + uint32 totalTicks = GetTotalTicks(); + m_periodicTimer -= int32(diff); while (m_periodicTimer <= 0) { + if (!GetBase()->IsPermanent() && (m_tickNumber + 1) > totalTicks) + { + break; + } + ++m_tickNumber; // update before tick (aura can be removed in TriggerSpell or PeriodicTick calls) @@ -6993,3 +7000,19 @@ void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurA LOG_DEBUG("spells.aura", "AuraEffect::HandleRaidProcFromChargeWithValueAuraProc: Triggering spell {} from aura {} proc", triggerSpellId, GetId()); target->CastCustomSpell(target, triggerSpellId, &value, nullptr, nullptr, true, nullptr, this, GetCasterGUID()); } + +int32 AuraEffect::GetTotalTicks() const +{ + uint32 totalTicks = 1; + if (m_amplitude) + { + totalTicks = GetBase()->GetMaxDuration() / m_amplitude; + + if (m_spellInfo->HasAttribute(SPELL_ATTR5_EXTRA_INITIAL_PERIOD)) + { + ++totalTicks; + } + } + + return totalTicks; +} diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 290aea429..b85984341 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -84,7 +84,7 @@ public: void UpdatePeriodic(Unit* caster); uint32 GetTickNumber() const { return m_tickNumber; } - int32 GetTotalTicks() const { return m_amplitude ? (GetBase()->GetMaxDuration() / m_amplitude) : 1;} + int32 GetTotalTicks() const; void ResetPeriodic(bool resetPeriodicTimer = false) { if (resetPeriodicTimer) m_periodicTimer = m_amplitude; m_tickNumber = 0;} void ResetTicks() { m_tickNumber = 0; } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index a76168571..febc675ed 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -589,6 +589,8 @@ public: [[nodiscard]] uint32 GetTriggeredByAuraTickNumber() const { return m_triggeredByAuraSpell.tickNumber; } + [[nodiscard]] TriggerCastFlags GetTriggeredCastFlags() const { return _triggeredCastFlags; } + protected: bool HasGlobalCooldown() const; void TriggerGlobalCooldown(); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 1bf041b42..fd383e71b 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5877,7 +5877,7 @@ void Spell::EffectKillCreditPersonal(SpellEffIndex effIndex) if (!unitTarget) return; - Player* player = unitTarget->ToPlayer(); + Player* player = unitTarget->GetCharmerOrOwnerPlayerOrPlayerItself(); if (!player) { return; @@ -5894,7 +5894,7 @@ void Spell::EffectKillCredit(SpellEffIndex effIndex) if (!unitTarget) return; - Player* player = unitTarget->ToPlayer(); + Player* player = unitTarget->GetCharmerOrOwnerPlayerOrPlayerItself(); if (!player) { return; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index f19f55562..5a7c615d1 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1300,7 +1300,7 @@ void SpellMgr::LoadSpellRanks() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell rank records. DB table `spell_ranks` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell rank records. DB table `spell_ranks` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1411,7 +1411,7 @@ void SpellMgr::LoadSpellRequired() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell required records. DB table `spell_required` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell required records. DB table `spell_required` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1528,7 +1528,7 @@ void SpellMgr::LoadSpellTargetPositions() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell target coordinates. DB table `spell_target_position` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell target coordinates. DB table `spell_target_position` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1632,7 +1632,7 @@ void SpellMgr::LoadSpellGroups() QueryResult result = WorldDatabase.Query("SELECT id, spell_id, special_flag FROM spell_group"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell group definitions. DB table `spell_group` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell group definitions. DB table `spell_group` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1692,7 +1692,7 @@ void SpellMgr::LoadSpellGroupStackRules() QueryResult result = WorldDatabase.Query("SELECT group_id, stack_rule FROM spell_group_stack_rules"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell group stack rules. DB table `spell_group_stack_rules` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell group stack rules. DB table `spell_group_stack_rules` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1743,7 +1743,7 @@ void SpellMgr::LoadSpellProcEvents() QueryResult result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, procFlags, procEx, procPhase, ppmRate, CustomChance, Cooldown FROM spell_proc_event"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell proc event conditions. DB table `spell_proc_event` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell proc event conditions. DB table `spell_proc_event` is empty."); return; } @@ -1837,7 +1837,7 @@ void SpellMgr::LoadSpellProcs() QueryResult result = WorldDatabase.Query("SELECT spellId, schoolMask, spellFamilyName, spellFamilyMask0, spellFamilyMask1, spellFamilyMask2, typeMask, spellTypeMask, spellPhaseMask, hitMask, attributesMask, ratePerMinute, chance, cooldown, charges FROM spell_proc"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell proc conditions and data. DB table `spell_proc` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell proc conditions and data. DB table `spell_proc` is empty."); LOG_INFO("server.loading", " "); return; } @@ -1975,7 +1975,7 @@ void SpellMgr::LoadSpellBonusess() QueryResult result = WorldDatabase.Query("SELECT entry, direct_bonus, dot_bonus, ap_bonus, ap_dot_bonus FROM spell_bonus_data"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell bonus data. DB table `spell_bonus_data` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell bonus data. DB table `spell_bonus_data` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2016,7 +2016,7 @@ void SpellMgr::LoadSpellThreats() QueryResult result = WorldDatabase.Query("SELECT entry, flatMod, pctMod, apPctMod FROM spell_threat"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 aggro generating spells. DB table `spell_threat` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 aggro generating spells. DB table `spell_threat` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2057,7 +2057,7 @@ void SpellMgr::LoadSpellMixology() QueryResult result = WorldDatabase.Query("SELECT entry, pctMod FROM spell_mixology"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 mixology bonuses. DB table `spell_mixology` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 mixology bonuses. DB table `spell_mixology` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2115,7 +2115,7 @@ void SpellMgr::LoadSpellPetAuras() QueryResult result = WorldDatabase.Query("SELECT spell, effectId, pet, aura FROM spell_pet_auras"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell pet auras. DB table `spell_pet_auras` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell pet auras. DB table `spell_pet_auras` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2219,7 +2219,7 @@ void SpellMgr::LoadSpellEnchantProcData() QueryResult result = WorldDatabase.Query("SELECT entry, customChance, PPMChance, procEx FROM spell_enchant_proc_data"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell enchant proc event conditions. DB table `spell_enchant_proc_data` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell enchant proc event conditions. DB table `spell_enchant_proc_data` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2263,7 +2263,7 @@ void SpellMgr::LoadSpellLinked() QueryResult result = WorldDatabase.Query("SELECT spell_trigger, spell_effect, type FROM spell_linked_spell"); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 linked spells. DB table `spell_linked_spell` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 linked spells. DB table `spell_linked_spell` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2505,7 +2505,7 @@ void SpellMgr::LoadSpellAreas() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell area requirements. DB table `spell_area` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell area requirements. DB table `spell_area` is empty."); LOG_INFO("server.loading", " "); return; } @@ -2776,7 +2776,7 @@ void SpellMgr::LoadSpellInfoCustomAttributes() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 spell custom attributes from DB. DB table `spell_custom_attr` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 spell custom attributes from DB. DB table `spell_custom_attr` is empty."); } else { diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index b0f82b65e..8e66af3ac 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -91,7 +91,7 @@ void CreatureTextMgr::LoadCreatureTexts() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 ceature texts. DB table `creature_texts` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 ceature texts. DB table `creature_texts` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 6cf59cba4..9b19143ac 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -313,7 +313,7 @@ void TicketMgr::LoadTickets() PreparedQueryResult result = CharacterDatabase.Query(stmt); if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 GM tickets. DB table `gm_ticket` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 GM tickets. DB table `gm_ticket` is empty!"); return; } diff --git a/src/server/game/Warden/WardenCheckMgr.cpp b/src/server/game/Warden/WardenCheckMgr.cpp index 18b575587..301659781 100644 --- a/src/server/game/Warden/WardenCheckMgr.cpp +++ b/src/server/game/Warden/WardenCheckMgr.cpp @@ -50,7 +50,7 @@ void WardenCheckMgr::LoadWardenChecks() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 Warden checks. DB table `warden_checks` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 Warden checks. DB table `warden_checks` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -176,7 +176,7 @@ void WardenCheckMgr::LoadWardenOverrides() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 Warden action overrides. DB table `warden_action` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 Warden action overrides. DB table `warden_action` is empty!"); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index 0ff17a875..b1a22c2e5 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -96,7 +96,7 @@ namespace WeatherMgr if (!result) { - LOG_ERROR("sql.sql", ">> Loaded 0 weather definitions. DB table `game_weather` is empty."); + LOG_WARN("server.loading", ">> Loaded 0 weather definitions. DB table `game_weather` is empty."); LOG_INFO("server.loading", " "); return; } diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index bcbd7cbd1..04c18ab62 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -307,6 +307,7 @@ enum WorldIntConfigs CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_LIMIT_MIN_PLAYERS, CONFIG_ARENA_MAX_RATING_DIFFERENCE, CONFIG_ARENA_RATING_DISCARD_TIMER, + CONFIG_ARENA_PREV_OPPONENTS_DISCARD_TIMER, CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS, CONFIG_ARENA_GAMES_REQUIRED, CONFIG_ARENA_SEASON_ID, @@ -596,7 +597,6 @@ public: [[nodiscard]] virtual std::string const& GetRealmName() const = 0; virtual void SetRealmName(std::string name) = 0; virtual void RemoveOldCorpses() = 0; - virtual SQLQueryHolderCallback& AddQueryHolderCallback(SQLQueryHolderCallback&& callback) = 0; }; #endif //AZEROTHCORE_IWORLD_H diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index eddf48c14..5f091c9d1 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -66,7 +66,6 @@ #include "ObjectMgr.h" #include "Opcodes.h" #include "OutdoorPvPMgr.h" -#include "QueryHolder.h" #include "PetitionMgr.h" #include "Player.h" #include "PlayerDump.h" @@ -1164,25 +1163,26 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_BATTLEGROUND_SPEED_BUFF_RESPAWN] = 150; } - m_int_configs[CONFIG_ARENA_MAX_RATING_DIFFERENCE] = sConfigMgr->GetOption ("Arena.MaxRatingDifference", 150); - m_int_configs[CONFIG_ARENA_RATING_DISCARD_TIMER] = sConfigMgr->GetOption ("Arena.RatingDiscardTimer", 10 * MINUTE * IN_MILLISECONDS); + m_int_configs[CONFIG_ARENA_MAX_RATING_DIFFERENCE] = sConfigMgr->GetOption("Arena.MaxRatingDifference", 150); + m_int_configs[CONFIG_ARENA_RATING_DISCARD_TIMER] = sConfigMgr->GetOption("Arena.RatingDiscardTimer", 10 * MINUTE * IN_MILLISECONDS); + m_int_configs[CONFIG_ARENA_PREV_OPPONENTS_DISCARD_TIMER] = sConfigMgr->GetOption("Arena.PreviousOpponentsDiscardTimer", 2 * MINUTE * IN_MILLISECONDS); m_bool_configs[CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS] = sConfigMgr->GetOption("Arena.AutoDistributePoints", false); - m_int_configs[CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS] = sConfigMgr->GetOption ("Arena.AutoDistributeInterval", 7); // pussywizard: spoiled by implementing constant day and hour, always 7 now - m_int_configs[CONFIG_ARENA_GAMES_REQUIRED] = sConfigMgr->GetOption ("Arena.GamesRequired", 10); - m_int_configs[CONFIG_ARENA_SEASON_ID] = sConfigMgr->GetOption ("Arena.ArenaSeason.ID", 1); - m_int_configs[CONFIG_ARENA_START_RATING] = sConfigMgr->GetOption ("Arena.ArenaStartRating", 0); - m_int_configs[CONFIG_ARENA_START_PERSONAL_RATING] = sConfigMgr->GetOption ("Arena.ArenaStartPersonalRating", 1000); - m_int_configs[CONFIG_ARENA_START_MATCHMAKER_RATING] = sConfigMgr->GetOption ("Arena.ArenaStartMatchmakerRating", 1500); + m_int_configs[CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS] = sConfigMgr->GetOption("Arena.AutoDistributeInterval", 7); // pussywizard: spoiled by implementing constant day and hour, always 7 now + m_int_configs[CONFIG_ARENA_GAMES_REQUIRED] = sConfigMgr->GetOption("Arena.GamesRequired", 10); + m_int_configs[CONFIG_ARENA_SEASON_ID] = sConfigMgr->GetOption("Arena.ArenaSeason.ID", 1); + m_int_configs[CONFIG_ARENA_START_RATING] = sConfigMgr->GetOption("Arena.ArenaStartRating", 0); + m_int_configs[CONFIG_ARENA_START_PERSONAL_RATING] = sConfigMgr->GetOption("Arena.ArenaStartPersonalRating", 1000); + m_int_configs[CONFIG_ARENA_START_MATCHMAKER_RATING] = sConfigMgr->GetOption("Arena.ArenaStartMatchmakerRating", 1500); m_bool_configs[CONFIG_ARENA_SEASON_IN_PROGRESS] = sConfigMgr->GetOption("Arena.ArenaSeason.InProgress", true); m_float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_1] = sConfigMgr->GetOption("Arena.ArenaWinRatingModifier1", 48.0f); m_float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_2] = sConfigMgr->GetOption("Arena.ArenaWinRatingModifier2", 24.0f); m_float_configs[CONFIG_ARENA_LOSE_RATING_MODIFIER] = sConfigMgr->GetOption("Arena.ArenaLoseRatingModifier", 24.0f); m_float_configs[CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER] = sConfigMgr->GetOption("Arena.ArenaMatchmakerRatingModifier", 24.0f); - m_bool_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetOption ("Arena.QueueAnnouncer.Enable", false); - m_bool_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetOption ("Arena.QueueAnnouncer.PlayerOnly", false); + m_bool_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetOption("Arena.QueueAnnouncer.Enable", false); + m_bool_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetOption("Arena.QueueAnnouncer.PlayerOnly", false); m_bool_configs[CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN] = sConfigMgr->GetOption("OffhandCheckAtSpellUnlearn", true); - m_int_configs[CONFIG_CREATURE_STOP_FOR_PLAYER] = sConfigMgr->GetOption("Creature.MovingStopTimeForPlayer", 3 * MINUTE * IN_MILLISECONDS); + m_int_configs[CONFIG_CREATURE_STOP_FOR_PLAYER] = sConfigMgr->GetOption("Creature.MovingStopTimeForPlayer", 3 * MINUTE * IN_MILLISECONDS); if (int32 clientCacheId = sConfigMgr->GetOption("ClientCacheVersion", 0)) { @@ -2047,7 +2047,7 @@ void World::SetInitialWorldSettings() ///- Initialize Battlegrounds LOG_INFO("server.loading", "Starting Battleground System"); - sBattlegroundMgr->CreateInitialBattlegrounds(); + sBattlegroundMgr->LoadBattlegroundTemplates(); sBattlegroundMgr->InitAutomaticArenaPointDistribution(); ///- Initialize outdoor pvp @@ -2201,7 +2201,7 @@ void World::LoadAutobroadcasts() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!"); + LOG_WARN("server.loading", ">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty for this realm!"); return; } @@ -2459,7 +2459,6 @@ void World::Update(uint32 diff) CharacterDatabase.KeepAlive(); LoginDatabase.KeepAlive(); WorldDatabase.KeepAlive(); - sScriptMgr->OnDatabasesKeepAlive(); } { @@ -3045,12 +3044,7 @@ void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount) LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction(); - LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM); - stmt->SetData(0, accountId); - stmt->SetData(1, realm.Id.Realm); - trans->Append(stmt); - - stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS); + LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_REALM_CHARACTERS); stmt->SetData(0, charCount); stmt->SetData(1, accountId); stmt->SetData(2, realm.Id.Realm); @@ -3273,9 +3267,9 @@ void World::LoadDBVersion() void World::LoadDBRevision() { - QueryResult resultWorld = WorldDatabase.Query("SELECT date FROM version_db_world ORDER BY date DESC LIMIT 1"); + QueryResult resultWorld = WorldDatabase.Query("SELECT date FROM version_db_world ORDER BY date DESC LIMIT 1"); QueryResult resultCharacter = CharacterDatabase.Query("SELECT date FROM version_db_characters ORDER BY date DESC LIMIT 1"); - QueryResult resultAuth = LoginDatabase.Query("SELECT date FROM version_db_auth ORDER BY date DESC LIMIT 1"); + QueryResult resultAuth = LoginDatabase.Query("SELECT date FROM version_db_auth ORDER BY date DESC LIMIT 1"); if (resultWorld) { @@ -3298,20 +3292,16 @@ void World::LoadDBRevision() if (m_WorldDBRevision.empty()) { - m_WorldDBRevision = "Unknown World Database Revision"; + m_WorldDBRevision = "Unkown World Database Revision"; } - if (m_CharacterDBRevision.empty()) { - m_CharacterDBRevision = "Unknown Character Database Revision"; + m_CharacterDBRevision = "Unkown Character Database Revision"; } - if (m_AuthDBRevision.empty()) { - m_AuthDBRevision = "Unknown Auth Database Revision"; + m_AuthDBRevision = "Unkown Auth Database Revision"; } - - sScriptMgr->OnDatabaseGetDBRevision(m_PlayerbotsDBRevision); } void World::UpdateAreaDependentAuras() @@ -3333,7 +3323,7 @@ void World::LoadWorldStates() if (!result) { - LOG_INFO("server.loading", ">> Loaded 0 world states. DB table `worldstates` is empty!"); + LOG_WARN("server.loading", ">> Loaded 0 world states. DB table `worldstates` is empty!"); LOG_INFO("server.loading", " "); return; } @@ -3379,12 +3369,6 @@ uint64 World::getWorldState(uint32 index) const void World::ProcessQueryCallbacks() { _queryProcessor.ProcessReadyCallbacks(); - _queryHolderProcessor.ProcessReadyCallbacks(); -} - -SQLQueryHolderCallback& World::AddQueryHolderCallback(SQLQueryHolderCallback&& callback) -{ - return _queryHolderProcessor.AddCallback(std::move(callback)); } void World::RemoveOldCorpses() diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index a09db5d31..4ec0f7ded 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -344,11 +344,9 @@ public: [[nodiscard]] char const* GetWorldDBRevision() const override { return m_WorldDBRevision.c_str(); } [[nodiscard]] char const* GetCharacterDBRevision() const override { return m_CharacterDBRevision.c_str(); } [[nodiscard]] char const* GetAuthDBRevision() const override { return m_AuthDBRevision.c_str(); } - #ifdef MOD_PLAYERBOTS [[nodiscard]] char const* GetPlayerbotsDBRevision() const { return m_PlayerbotsDBRevision.c_str(); } #endif - void LoadAutobroadcasts() override; void UpdateAreaDependentAuras() override; @@ -379,9 +377,6 @@ protected: void ResetRandomBG(); void CalendarDeleteOldEvents(); void ResetGuildCap(); - - SQLQueryHolderCallback& AddQueryHolderCallback(SQLQueryHolderCallback&& callback) override; - private: static std::atomic_long m_stopEvent; static uint8 m_ExitCode; @@ -462,7 +457,6 @@ private: void ProcessQueryCallbacks(); QueryCallbackProcessor _queryProcessor; - AsyncCallbackProcessor _queryHolderProcessor; /** * @brief Executed when a World Session is being finalized. Be it from a normal login or via queue popping. diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index b8a792627..b50068b6d 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -412,7 +412,7 @@ public: return false; } - Battleground* bg = sBattlegroundMgr->CreateNewBattleground(randomizedArenaBgTypeId, 80, 80, ArenaType(hcnt >= 2 ? hcnt : 2), false); + Battleground* bg = sBattlegroundMgr->CreateNewBattleground(randomizedArenaBgTypeId, GetBattlegroundBracketById(bgt->GetMapId(), bgt->GetBracketId()), ArenaType(hcnt >= 2 ? hcnt : 2), false); if (!bg) { handler->PSendSysMessage("Couldn't create arena map!"); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index d3090818e..e34b16183 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -224,7 +224,6 @@ public: { ObjectGuid::LowType guid = sObjectMgr->GenerateCreatureSpawnId(); CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid); - data.spawnId = guid; data.id1 = id; data.phaseMask = chr->GetPhaseMaskForSpawn(); data.posX = chr->GetTransOffsetX(); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 8cb93cf28..a705a82e2 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -215,7 +215,7 @@ public: static bool HandleReloadBattlegroundTemplate(ChatHandler* handler) { LOG_INFO("server.loading", "Re-Loading Battleground Templates..."); - sBattlegroundMgr->CreateInitialBattlegrounds(); + sBattlegroundMgr->LoadBattlegroundTemplates(); handler->SendGlobalGMSysMessage("DB table `battleground_template` reloaded."); return true; } diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 4e5600f09..ce6c9aa67 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -224,6 +224,10 @@ public: handler->PSendSysMessage("CharacterDatabase queue size: %zu", CharacterDatabase.QueueSize()); handler->PSendSysMessage("WorldDatabase queue size: %zu", WorldDatabase.QueueSize()); + if (Acore::Module::GetEnableModulesList().empty()) + handler->SendSysMessage("No modules enabled"); + else + handler->SendSysMessage("> List enable modules:"); #ifdef MOD_PLAYERBOTS handler->PSendSysMessage("PlayerbotsDatabase queue size: %zu", PlayerbotsDatabase.QueueSize()); #endif diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h index c3a409dce..fe371cba8 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h @@ -20,7 +20,7 @@ #include "CreatureAIImpl.h" -uint32 const EncounterCount = 8; +constexpr uint32 EncounterCount = 8; #define BWLScriptName "instance_blackwing_lair" #define DataHeader "BWL" @@ -59,7 +59,22 @@ enum BWLCreatureIds NPC_FLAMEGOR = 11981, NPC_CHROMAGGUS = 14020, NPC_VICTOR_NEFARIUS = 10162, - NPC_NEFARIAN = 11583 + NPC_NEFARIAN = 11583, + + // Nefarian fight + NPC_BLACK_SPAWNER = 14307, + NPC_RED_SPAWNER = 14309, + NPC_GREEN_SPAWNER = 14310, + NPC_BRONZE_SPAWNER = 14311, + NPC_BLUE_SPAWNER = 14312, + + NPC_BRONZE_DRAKONID = 14263, + NPC_BLUE_DRAKONID = 14261, + NPC_RED_DRAKONID = 14264, + NPC_GREEN_DRAKONID = 14262, + NPC_BLACK_DRAKONID = 14265, + NPC_CHROMATIC_DRAKONID = 14302, + NPC_BONE_CONSTRUCT = 14605 }; enum BWLGameObjectIds @@ -90,7 +105,12 @@ enum BWLMisc DATA_EGG_EVENT = 2, TALK_EGG_BROKEN_RAND = 3, - SAY_NEFARIAN_VAEL_INTRO = 14 + SAY_NEFARIAN_VAEL_INTRO = 14, + + // Nefarian fight + DATA_NEFARIAN_LEFT_TUNNEL = 15, + DATA_NEFARIAN_RIGHT_TUNNEL = 16, + ACTION_NEFARIUS_ADD_KILLED = 2 }; template diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index aa85b1f07..7073db104 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -30,7 +30,8 @@ enum Events { // Victor Nefarius - EVENT_SPAWN_ADD = 1, + EVENT_SPAWN_ADDS = 1, + EVENT_CHECK_PHASE_2, EVENT_START_EVENT, EVENT_SHADOW_BOLT, EVENT_FEAR, @@ -53,7 +54,8 @@ enum Events EVENT_SUCCESS_3, ACTION_RESET = 0, - ACTION_KILLED = 1 + ACTION_KILLED = 1, + ACTION_ADD_KILLED = 2 }; enum Says @@ -106,13 +108,6 @@ enum GameObjects enum Creatures { - NPC_BRONZE_DRAKANOID = 14263, - NPC_BLUE_DRAKANOID = 14261, - NPC_RED_DRAKANOID = 14264, - NPC_GREEN_DRAKANOID = 14262, - NPC_BLACK_DRAKANOID = 14265, - NPC_CHROMATIC_DRAKANOID = 14302, - NPC_BONE_CONSTRUCT = 14605, NPC_TOTEM_C_FIRE_NOVA = 14662, NPC_TOTEM_C_STONESKIN = 14663, NPC_TOTEM_C_HEALING = 14664, @@ -137,6 +132,14 @@ enum Spells SPELL_NEFARIANS_BARRIER = 22663, + // Drakonid Spawner + SPELL_SPAWN_BLACK_DRAKONID = 22654, + SPELL_SPAWN_RED_DRAKONID = 22655, + SPELL_SPAWN_GREEN_DRAKONID = 22656, + SPELL_SPAWN_BRONZE_DRAKONID = 22657, + SPELL_SPAWN_BLUE_DRAKONID = 22658, + SPELL_SPAWN_CHROMATIC_DRAKONID = 22680, + // Nefarian SPELL_SHADOWFLAME_INITIAL = 22992, SPELL_SHADOWFLAME = 22539, @@ -168,15 +171,27 @@ enum Spells SPELL_CORRUPTED_WINDFURY_TOTEM = 23423 }; -Position const DrakeSpawnLoc[2] = // drakonid +enum Misc { - {-7591.151855f, -1204.051880f, 476.800476f, 3.0f}, - {-7514.598633f, -1150.448853f, 476.796570f, 3.0f} + MAX_DRAKONID_KILLED = 42 +}; + +Position const spawnerPositions[2] = // drakonid +{ + {-7599.32f, -1191.72f, 475.545f, 3.05f}, + {-7526.27f, -1135.04f, 473.445f, 5.76f} }; Position const NefarianSpawn = { -7348.849f, -1495.134f, 552.5152f, 1.798f }; -uint32 const Entry[5] = {NPC_BRONZE_DRAKANOID, NPC_BLUE_DRAKANOID, NPC_RED_DRAKANOID, NPC_GREEN_DRAKANOID, NPC_BLACK_DRAKANOID}; +std::unordered_map spawnerSpells = +{ + { NPC_BLACK_SPAWNER, SPELL_SPAWN_BLACK_DRAKONID }, + { NPC_BLUE_SPAWNER, SPELL_SPAWN_BLUE_DRAKONID }, + { NPC_BRONZE_SPAWNER, SPELL_SPAWN_BRONZE_DRAKONID }, + { NPC_GREEN_SPAWNER, SPELL_SPAWN_GREEN_DRAKONID }, + { NPC_RED_SPAWNER, SPELL_SPAWN_RED_DRAKONID } +}; class boss_victor_nefarius : public CreatureScript { @@ -188,6 +203,25 @@ public: boss_victor_nefariusAI(Creature* creature) : BossAI(creature, DATA_NEFARIAN) { Initialize(); + + _nefarianLeftTunnel = instance->GetData(DATA_NEFARIAN_LEFT_TUNNEL); + _nefarianRightTunnel = instance->GetData(DATA_NEFARIAN_RIGHT_TUNNEL); + + if (!_nefarianLeftTunnel || !_nefarianRightTunnel) + { + // Victor Nefarius weekly mechanic drakonid spawn + // Pick 2 drakonids and keep them for the whole save duration (the drakonids can't be repeated). + std::vector nefarianDrakonidSpawners = { NPC_BLACK_SPAWNER, NPC_BLUE_SPAWNER, NPC_BRONZE_SPAWNER, NPC_GREEN_SPAWNER, NPC_RED_SPAWNER }; + _nefarianRightTunnel = Acore::Containers::SelectRandomContainerElement(nefarianDrakonidSpawners); + // delete the previous picked one so we don't get any repeated. + nefarianDrakonidSpawners.erase(std::remove(nefarianDrakonidSpawners.begin(), nefarianDrakonidSpawners.end(), _nefarianRightTunnel), nefarianDrakonidSpawners.end()); + // Pick another one + _nefarianLeftTunnel = Acore::Containers::SelectRandomContainerElement(nefarianDrakonidSpawners); + + // save it to instance + instance->SetData(DATA_NEFARIAN_LEFT_TUNNEL, _nefarianLeftTunnel); + instance->SetData(DATA_NEFARIAN_RIGHT_TUNNEL, _nefarianRightTunnel); + } } void Initialize() @@ -237,6 +271,11 @@ public: summons.DespawnAll(); } + if (action == ACTION_ADD_KILLED) + { + KilledAdds++; + } + if (action == ACTION_KILLED) { Unit::Kill(me, me); @@ -263,19 +302,8 @@ public: events.ScheduleEvent(EVENT_FEAR, urand(10000, 20000)); events.ScheduleEvent(EVENT_SILENCE, urand(20000, 25000)); events.ScheduleEvent(EVENT_MIND_CONTROL, urand(30000, 35000)); - events.ScheduleEvent(EVENT_SPAWN_ADD, 10000); - } - - void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override - { - if (summon->GetEntry() != NPC_NEFARIAN) - { - summon->UpdateEntry(NPC_BONE_CONSTRUCT); - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - summon->SetReactState(REACT_PASSIVE); - summon->SetStandState(UNIT_STAND_STATE_DEAD); - ++KilledAdds; - } + events.ScheduleEvent(EVENT_SPAWN_ADDS, 10000); + events.ScheduleEvent(EVENT_CHECK_PHASE_2, 10000); } void JustSummoned(Creature* summon) override { summons.Summon(summon); } @@ -348,7 +376,7 @@ public: } // Only do this if we haven't spawned nefarian yet - if (UpdateVictim() && KilledAdds <= 42) + if (UpdateVictim() && KilledAdds <= MAX_DRAKONID_KILLED) { events.Update(diff); @@ -390,39 +418,33 @@ public: DoCastSelf(SPELL_SHADOWBLINK); events.ScheduleEvent(EVENT_SHADOWBLINK, urand(30000, 40000)); break; - case EVENT_SPAWN_ADD: - for (uint8 i=0; i<2; ++i) + case EVENT_SPAWN_ADDS: + // Spawn the spawners. + me->SummonCreature(_nefarianLeftTunnel, spawnerPositions[0]); + me->SummonCreature(_nefarianRightTunnel, spawnerPositions[1]); + break; + case EVENT_CHECK_PHASE_2: + if (KilledAdds >= MAX_DRAKONID_KILLED) { - uint32 CreatureID; - if (urand(0, 2) == 0) - CreatureID = NPC_CHROMATIC_DRAKANOID; - else - CreatureID = Entry[urand(0, 4)]; - if (Creature* dragon = me->SummonCreature(CreatureID, DrakeSpawnLoc[i])) + if (Creature* nefarian = me->SummonCreature(NPC_NEFARIAN, NefarianSpawn)) { - dragon->SetFaction(FACTION_DRAGONFLIGHT_BLACK); - dragon->AI()->AttackStart(me->GetVictim()); - } - - if (KilledAdds >= 42) - { - if (Creature* nefarian = me->SummonCreature(NPC_NEFARIAN, NefarianSpawn)) - { - nefarian->setActive(true); - nefarian->SetCanFly(true); - nefarian->SetDisableGravity(true); - nefarian->GetMotionMaster()->MovePath(NEFARIAN_PATH, false); - } - events.CancelEvent(EVENT_MIND_CONTROL); - events.CancelEvent(EVENT_FEAR); - events.CancelEvent(EVENT_SHADOW_BOLT); - events.CancelEvent(EVENT_SILENCE); - DoCastSelf(SPELL_ROOT_SELF, true); - me->SetVisible(false); - return; + nefarian->setActive(true); + nefarian->SetCanFly(true); + nefarian->SetDisableGravity(true); + nefarian->GetMotionMaster()->MovePath(NEFARIAN_PATH, false); } + events.CancelEvent(EVENT_MIND_CONTROL); + events.CancelEvent(EVENT_FEAR); + events.CancelEvent(EVENT_SHADOW_BOLT); + events.CancelEvent(EVENT_SILENCE); + DoCastSelf(SPELL_ROOT_SELF, true); + me->SetVisible(false); + // Despawn the spawners. + summons.DespawnEntry(_nefarianLeftTunnel); + summons.DespawnEntry(_nefarianRightTunnel); + return; } - events.ScheduleEvent(EVENT_SPAWN_ADD, 4000); + events.ScheduleEvent(EVENT_CHECK_PHASE_2, 1000); break; } @@ -453,6 +475,8 @@ public: private: uint32 KilledAdds; + uint32 _nefarianRightTunnel; + uint32 _nefarianLeftTunnel; }; CreatureAI* GetAI(Creature* creature) const override @@ -755,12 +779,12 @@ struct npc_corrupted_totem : public ScriptedAI std::vector mobsEntries; mobsEntries.push_back(NPC_NEFARIAN); mobsEntries.push_back(NPC_BONE_CONSTRUCT); - mobsEntries.push_back(NPC_BRONZE_DRAKANOID); - mobsEntries.push_back(NPC_BLUE_DRAKANOID); - mobsEntries.push_back(NPC_RED_DRAKANOID); - mobsEntries.push_back(NPC_GREEN_DRAKANOID); - mobsEntries.push_back(NPC_BLACK_DRAKANOID); - mobsEntries.push_back(NPC_CHROMATIC_DRAKANOID); + mobsEntries.push_back(NPC_BRONZE_DRAKONID); + mobsEntries.push_back(NPC_BLUE_DRAKONID); + mobsEntries.push_back(NPC_RED_DRAKONID); + mobsEntries.push_back(NPC_GREEN_DRAKONID); + mobsEntries.push_back(NPC_BLACK_DRAKONID); + mobsEntries.push_back(NPC_CHROMATIC_DRAKONID); for (auto& entry : mobsEntries) { @@ -1155,6 +1179,33 @@ class spell_shadowblink : public SpellScript } }; +// 22659 +class spell_spawn_drakonid : public SpellScript +{ + PrepareSpellScript(spell_spawn_drakonid); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SPAWN_BLACK_DRAKONID, SPELL_SPAWN_BLUE_DRAKONID, SPELL_SPAWN_BRONZE_DRAKONID, SPELL_SPAWN_GREEN_DRAKONID, SPELL_SPAWN_RED_DRAKONID }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (!caster) + { + return; + } + + caster->CastSpell(caster, spawnerSpells[caster->GetEntry()], true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_spawn_drakonid::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_boss_nefarian() { new boss_victor_nefarius(); @@ -1167,4 +1218,5 @@ void AddSC_boss_nefarian() RegisterSpellScript(aura_class_call_berserk); RegisterSpellScript(spell_corrupted_totems); RegisterSpellScript(spell_shadowblink); + RegisterSpellScript(spell_spawn_drakonid); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index 7f1ac7fa0..d7dfb96ac 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -75,6 +75,8 @@ public: // Razorgore EggCount = 0; EggEvent = 0; + NefarianLeftTunnel = 0; + NefarianRightTunnel = 0; } void OnCreatureCreate(Creature* creature) override @@ -102,6 +104,24 @@ public: case NPC_VICTOR_NEFARIUS: victorNefariusGUID = creature->GetGUID(); break; + case NPC_BLACK_DRAKONID: + case NPC_BLUE_DRAKONID: + case NPC_BRONZE_DRAKONID: + case NPC_CHROMATIC_DRAKONID: + case NPC_GREEN_DRAKONID: + case NPC_RED_DRAKONID: + if (Creature* nefarius = instance->GetCreature(victorNefariusGUID)) + { + if (CreatureAI* nefariusAI = nefarius->AI()) + { + nefariusAI->JustSummoned(creature); + } + } + if (creature->AI()) + { + creature->AI()->DoZoneInCombat(); + } + break; default: break; } @@ -166,6 +186,21 @@ public: } } + uint32 GetData(uint32 data) const override + { + switch (data) + { + case DATA_NEFARIAN_LEFT_TUNNEL: + return NefarianLeftTunnel; + case DATA_NEFARIAN_RIGHT_TUNNEL: + return NefarianRightTunnel; + default: + break; + } + + return 0; + } + bool CheckRequiredBosses(uint32 bossId, Player const* /* player */) const override { switch (bossId) @@ -268,6 +303,16 @@ public: break; } } + + if (type == DATA_NEFARIAN_LEFT_TUNNEL) + { + NefarianLeftTunnel = data; + } + + if (type == DATA_NEFARIAN_RIGHT_TUNNEL) + { + NefarianRightTunnel = data; + } } ObjectGuid GetGuidData(uint32 type) const override @@ -276,6 +321,8 @@ public: { case DATA_RAZORGORE_THE_UNTAMED: return razorgoreGUID; + case DATA_LORD_VICTOR_NEFARIUS: + return victorNefariusGUID; case DATA_CHROMAGGUS: return chromaggusGUID; case DATA_GO_CHROMAGGUS_DOOR: @@ -292,6 +339,32 @@ public: //! HACK, needed because of buggy CreatureAI after charm if (unit->GetEntry() == NPC_RAZORGORE && GetBossState(DATA_RAZORGORE_THE_UNTAMED) != DONE) SetBossState(DATA_RAZORGORE_THE_UNTAMED, DONE); + + switch (unit->GetEntry()) + { + case NPC_BLACK_DRAKONID: + case NPC_BLUE_DRAKONID: + case NPC_BRONZE_DRAKONID: + case NPC_CHROMATIC_DRAKONID: + case NPC_GREEN_DRAKONID: + case NPC_RED_DRAKONID: + if (Creature* summon = unit->ToCreature()) + { + summon->UpdateEntry(NPC_BONE_CONSTRUCT); + summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + summon->SetReactState(REACT_PASSIVE); + summon->SetStandState(UNIT_STAND_STATE_DEAD); + + if (Creature* nefarius = instance->GetCreature(victorNefariusGUID)) + { + if (nefarius->AI()) + { + nefarius->AI()->DoAction(ACTION_NEFARIUS_ADD_KILLED); + } + } + } + break; + } } void Update(uint32 diff) override @@ -329,6 +402,54 @@ public: } } + std::string GetSaveData() override + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << "B W L " << GetBossSaveData() << NefarianLeftTunnel << ' ' << NefarianRightTunnel; + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(char const* data) override + { + if (!data) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(data); + + char dataHead1, dataHead2, dataHead3; + + std::istringstream loadStream(data); + loadStream >> dataHead1 >> dataHead2 >> dataHead3; + + if (dataHead1 == 'B' && dataHead2 == 'W' && dataHead3 == 'L') + { + for (uint32 i = 0; i < EncounterCount; ++i) + { + uint32 tmpState; + loadStream >> tmpState; + if (tmpState == IN_PROGRESS || tmpState == FAIL || tmpState > SPECIAL) + tmpState = NOT_STARTED; + SetBossState(i, EncounterState(tmpState)); + } + + loadStream >> NefarianLeftTunnel; + loadStream >> NefarianRightTunnel; + } + else + { + OUT_LOAD_INST_DATA_FAIL; + } + + OUT_LOAD_INST_DATA_COMPLETE; + } + protected: ObjectGuid razorgoreGUID; ObjectGuid chromaggusGUID; @@ -342,6 +463,10 @@ public: uint32 EggEvent; GuidList EggList; + // Nefarian + uint32 NefarianLeftTunnel; + uint32 NefarianRightTunnel; + // Misc EventMap _events; }; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 6c5162bb5..9336da65e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -78,7 +78,6 @@ enum Events EVENT_HAND_OF_RAGNAROS, EVENT_MIGHT_OF_RAGNAROS, EVENT_LAVA_BURST, - EVENT_MAGMA_BLAST_MELEE_CHECK, EVENT_MAGMA_BLAST, EVENT_SUBMERGE, EVENT_LAVA_BURST_TRIGGER, @@ -122,6 +121,7 @@ public: boss_ragnarosAI(Creature* creature) : BossAI(creature, DATA_RAGNAROS), _isIntroDone(false), _hasYelledMagmaBurst(false), + _processingMagmaBurst(false), _hasSubmergedOnce(false), _isKnockbackEmoteAllowed(true) { @@ -143,6 +143,7 @@ public: } _hasYelledMagmaBurst = false; + _processingMagmaBurst = false; _hasSubmergedOnce = false; _isKnockbackEmoteAllowed = true; me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); @@ -231,6 +232,28 @@ public: } } + void EnterEvadeMode() override + { + if (!me->getThreatMgr().getThreatList().empty()) + { + if (!_processingMagmaBurst) + { + // Boss try to evade, but still got some targets on threat list - it means that none of these targets are in melee range - cast magma blast + _processingMagmaBurst = true; + events.ScheduleEvent(EVENT_MAGMA_BLAST, 4000, PHASE_EMERGED, PHASE_EMERGED); + } + } + else + { + BossAI::EnterEvadeMode(); + } + } + + bool CanAIAttack(Unit const* victim) const override + { + return me->IsWithinMeleeRange(victim); + } + void UpdateAI(uint32 diff) override { if (!extraEvents.Empty()) @@ -297,7 +320,10 @@ public: if (!UpdateVictim()) { - return; + if (!_processingMagmaBurst) + { + return; + } } events.Update(diff); @@ -340,38 +366,10 @@ public: DoCastAOE(SPELL_LAVA_BURST); break; } - case EVENT_MAGMA_BLAST_MELEE_CHECK: - { - if (Unit* target = ObjectAccessor::GetUnit(*me, me->GetTarget())) - { - if (!target->IsAlive()) - { - me->SetTarget(ObjectGuid::Empty); - } - } - - if (!IsVictimWithinMeleeRange()) - { - if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, [&](Unit* u) { return u && u->IsPlayer() && me->IsWithinMeleeRange(u); })) - { - me->AttackerStateUpdate(target); - me->SetTarget(target->GetGUID()); - events.RepeatEvent(500); - } - else - { - events.ScheduleEvent(EVENT_MAGMA_BLAST, 4000, PHASE_EMERGED, PHASE_EMERGED); - } - } - else - { - _hasYelledMagmaBurst = false; - events.RepeatEvent(500); - } - break; - } case EVENT_MAGMA_BLAST: { + _processingMagmaBurst = false; + if (!IsVictimWithinMeleeRange()) { DoCastRandomTarget(SPELL_MAGMA_BLAST); @@ -383,7 +381,6 @@ public: } } - events.RescheduleEvent(EVENT_MAGMA_BLAST_MELEE_CHECK, 500, PHASE_EMERGED, PHASE_EMERGED); break; } case EVENT_MIGHT_OF_RAGNAROS: @@ -444,6 +441,7 @@ public: EventMap extraEvents; bool _isIntroDone; bool _hasYelledMagmaBurst; + bool _processingMagmaBurst; bool _hasSubmergedOnce; bool _isKnockbackEmoteAllowed; // Prevents possible text overlap @@ -480,7 +478,6 @@ public: events.RescheduleEvent(EVENT_WRATH_OF_RAGNAROS, 30000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_HAND_OF_RAGNAROS, 25000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_LAVA_BURST, 10000, PHASE_EMERGED, PHASE_EMERGED); - events.RescheduleEvent(EVENT_MAGMA_BLAST_MELEE_CHECK, 10000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_SUBMERGE, 180000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_MIGHT_OF_RAGNAROS, 11000, PHASE_EMERGED, PHASE_EMERGED); } diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp index fccec7652..be316716f 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_hummel.cpp @@ -71,7 +71,8 @@ enum ApothecaryMisc NPC_VIAL_BUNNY = 36530, NPC_CROWN_APOTHECARY = 36885, PHASE_ALL = 0, - PHASE_INTRO = 1 + PHASE_INTRO = 1, + PHASE_COMBAT = 2 }; Position const BaxterMovePos = { -221.4115f, 2206.825f, 79.93151f, 0.0f }; @@ -108,22 +109,21 @@ public: _deadCount = 0; _isDead = false; _phase = PHASE_ALL; + summons.DespawnAll(); me->SetFaction(FACTION_FRIENDLY); me->SummonCreatureGroup(1); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } - void EnterEvadeMode() override + void JustSummoned(Creature* summon) override { - summons.DespawnAll(); - _EnterEvadeMode(); + summons.Summon(summon); } void DoAction(int32 action) override { - if (action == ACTION_START_EVENT && events.IsInPhase(PHASE_ALL)) + if (action == ACTION_START_EVENT && _phase == PHASE_ALL) { - events.SetPhase(PHASE_INTRO); _phase = PHASE_INTRO; _scheduler.Schedule(1ms, [this](TaskContext /*context*/) { @@ -140,6 +140,7 @@ public: .Schedule(12s, [this](TaskContext context) { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + _phase = PHASE_COMBAT; DoZoneInCombat(); context.Schedule(6s, [this](TaskContext /*context*/) // Call Baxter diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index 8b89a3a46..d667691f8 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -51,6 +51,15 @@ public: case NPC_DND_CRAZED_APOTHECARY_GENERATOR: _crazedApothecaryGeneratorGUIDs.push_back(creature->GetGUID()); break; + case NPC_APOTHECARY_HUMMEL: + _apothecaryHummel = creature->GetGUID(); + break; + case NPC_CRAZED_APOTHECARY: + if (Creature* hummel = instance->GetCreature(_apothecaryHummel)) + { + hummel->AI()->JustSummoned(creature); + } + break; default: break; } @@ -132,6 +141,7 @@ public: private: uint32 _encounters[MAX_ENCOUNTERS]; GuidVector _crazedApothecaryGeneratorGUIDs; + ObjectGuid _apothecaryHummel; }; }; diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h index 74bef34d2..fada11a7a 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h @@ -36,7 +36,9 @@ enum DataTypes enum SKCreatures { - NPC_DND_CRAZED_APOTHECARY_GENERATOR = 36212 + NPC_DND_CRAZED_APOTHECARY_GENERATOR = 36212, + NPC_APOTHECARY_HUMMEL = 36296, + NPC_CRAZED_APOTHECARY = 36568 }; enum GameObjects diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 6f28e80ff..be63141eb 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -426,7 +426,7 @@ public: bool OnGossipHello(Player* /*player*/, GameObject* go) override { - if (go->GetInstanceScript()) + if (go->GetInstanceScript() && !go->FindNearestCreature(NPC_ARLOKK, 25.0f)) { go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); go->SendCustomAnim(0); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index 3a2bcab66..5d29229f5 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -45,12 +45,6 @@ public: LoadDoorData(doorData); } - bool IsEncounterInProgress() const override - { - // not active in Zul'Gurub - return false; - } - void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index a36a5290f..a3e11aafc 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -1154,8 +1154,15 @@ public: go->SetGoState(GO_STATE_ACTIVE); if (!me->GetMap()->GetPlayers().IsEmpty()) + { if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource()) - player->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 0); + { + if (GameObject* chest = player->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 0)) + { + chest->SetLootRecipient(me->GetMap()); + } + } + } } ScheduleNextEvent(currentEvent, 10000); break; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index 145201998..6a2951841 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -280,7 +280,10 @@ public: { if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource()) { - player->SummonGameObject(RAID_MODE(GO_HORSEMEN_CHEST_10, GO_HORSEMEN_CHEST_25), 2514.8f, -2944.9f, 245.55f, 5.51f, 0, 0, 0, 0, 0); + if (GameObject* chest = player->SummonGameObject(RAID_MODE(GO_HORSEMEN_CHEST_10, GO_HORSEMEN_CHEST_25), 2514.8f, -2944.9f, 245.55f, 5.51f, 0, 0, 0, 0, 0)) + { + chest->SetLootRecipient(me); + } } } if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HORSEMEN_GATE))) diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 6ffa0cdc2..40eac39df 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -1401,8 +1401,15 @@ public: break; case 1: me->CastSpell(773.98f, 1285.97f, 266.254f, SPELL_ALEXSTRASZA_GIFT, true); - me->SummonGameObject(ALEXSTRASZA_GIFT, 773.98f, 1285.97f, 266.254f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0); - me->SummonGameObject(HEART_OF_MAGIC, 773.98f, 1275.97f, 266.254f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0); + if (GameObject* chest = me->SummonGameObject(ALEXSTRASZA_GIFT, 773.98f, 1285.97f, 266.254f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0)) + { + chest->SetLootRecipient(me->GetMap()); + } + + if (GameObject* heart = me->SummonGameObject(HEART_OF_MAGIC, 773.98f, 1275.97f, 266.254f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0)) + { + heart->SetLootRecipient(me->GetMap()); + } Talk(SAY_ALEXSTRASZA_ONE); events.RescheduleEvent(2, 6000); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 5c4a802bd..b998bbc06 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -160,7 +160,17 @@ public: case DATA_EREGOS: m_auiEncounter[DATA_EREGOS] = data; if (data == DONE) + { DoRespawnGameObject(EregosCacheGUID, 7 * DAY); + + if (GameObject* cache = instance->GetGameObject(EregosCacheGUID)) + { + if (Creature* eregos = instance->GetCreature(uiEregosGUID)) + { + cache->SetLootRecipient(eregos); + } + } + } break; case DATA_CC_COUNT: if( CentrifugeCount < 10 ) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 13c420021..f8fe9fb6f 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -739,14 +739,22 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_RENAME); break; case EVENT_OUTRO_2: + { + Player* lootRecipent = me->GetLootRecipient(); _EnterEvadeMode(); + // LootRecipent is cleared in _EnterEvadeMode, restore it + me->SetLootRecipient(lootRecipent); me->GetMotionMaster()->MovePoint(POINT_ALGALON_OUTRO, AlgalonOutroPos); break; + } case EVENT_OUTRO_3: me->CastSpell((Unit*)nullptr, SPELL_KILL_CREDIT); // Summon Chest if (GameObject* go = me->SummonGameObject(RAID_MODE(GO_ALGALON_CHEST, GO_ALGALON_CHEST_HERO), 1632.1f, -306.561f, 417.321f, 4.69494f, 0, 0, 0, 1, 0)) + { go->SetUInt32Value(GAMEOBJECT_FLAGS, 0); + go->SetLootRecipient(me); + } break; case EVENT_OUTRO_4: me->CastSpell((Unit*)nullptr, SPELL_SUPERMASSIVE_FAIL); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 917ca584e..8322ed085 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -370,7 +370,10 @@ public: me->DespawnOrUnsummon(5000); if (GameObject* go = me->SummonGameObject(chestId, 2345.61f, -71.20f, 425.104f, 3.0f, 0, 0, 0, 0, 0)) + { go->SetUInt32Value(GAMEOBJECT_FLAGS, 0); + go->SetLootRecipient(me->GetMap()); + } // Defeat credit if (m_pInstance) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 1619b72c4..9776efdc6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -310,6 +310,7 @@ public: me->RemoveGameObject(go, false); go->SetSpellId(1); // hack to make it despawn go->SetUInt32Value(GAMEOBJECT_FLAGS, 0); + go->SetLootRecipient(me); } if (Creature* arm = ObjectAccessor::GetCreature(*me, _left)) arm->DespawnOrUnsummon(3000); // visual diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 9bc1c38b3..fb755a115 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -818,9 +818,14 @@ public: me->Yell(TEXT_VOLTRON_DEATH, LANG_UNIVERSAL); me->PlayDirectSound(SOUND_VOLTRON_DEATH); // spawn chest - if( uint32 chestId = (hardmode ? RAID_MODE(GO_MIMIRON_CHEST_HARD, GO_MIMIRON_CHEST_HERO_HARD) : RAID_MODE(GO_MIMIRON_CHEST, GO_MIMIRON_CHEST_HERO)) ) - if( GameObject* go = me->SummonGameObject(chestId, 2744.65f, 2569.46f, 364.397f, 0, 0, 0, 0, 0, 0) ) + if (uint32 chestId = (hardmode ? RAID_MODE(GO_MIMIRON_CHEST_HARD, GO_MIMIRON_CHEST_HERO_HARD) : RAID_MODE(GO_MIMIRON_CHEST, GO_MIMIRON_CHEST_HERO))) + { + if (GameObject* go = me->SummonGameObject(chestId, 2744.65f, 2569.46f, 364.397f, 0, 0, 0, 0, 0, 0)) + { go->SetUInt32Value(GAMEOBJECT_FLAGS, 0); + go->SetLootRecipient(me->GetMap()); + } + } events.ScheduleEvent(EVENT_DISAPPEAR, 15000); break; case EVENT_DISAPPEAR: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 106023b6b..fa30eef41 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -592,7 +592,10 @@ public: chestId += 1; // hard mode offset if ((go = me->SummonGameObject(chestId, 2134.73f, -286.32f, 419.51f, 0.0f, 0, 0, 0, 0, 0))) + { go->SetUInt32Value(GAMEOBJECT_FLAGS, 0); + go->SetLootRecipient(me->GetMap()); + } // Defeat credit if (m_pInstance) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 20f02eda0..128c96544 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -634,10 +634,18 @@ public: { case TYPE_HODIR: if (hmHodir) + { if (GameObject* go = instance->GetGameObject(m_hodirHardmodeChest)) + { go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->SetLootRecipient(instance); + } + } if (GameObject* go = instance->GetGameObject(m_hodirNormalChest)) + { go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->SetLootRecipient(instance); + } break; } } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 6da67612c..6af289974 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1289,7 +1289,8 @@ class spell_gen_adaptive_warding : public AuraScript 45826 - East Frostwolf Warmaster 45828 - Dun Baldar North Marshal 45829 - Dun Baldar South Marshal - 45830 - Stonehearth Marshal */ + 45830 - Stonehearth Marshal + 45831 - Icewing Marshal */ class spell_gen_av_drekthar_presence : public AuraScript { PrepareAuraScript(spell_gen_av_drekthar_presence); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 5448eebe6..189f7a667 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -664,6 +664,14 @@ class spell_sha_earthliving_weapon : public AuraScript return false; } + if (SpellInfo const* spellInfo = eventInfo.GetSpellInfo()) + { + if (spellInfo->Id == SPELL_SHAMAN_EARTH_SHIELD_HEAL) + { + return false; + } + } + if (AuraEffect const* aurEff = caster->GetAuraEffectOfRankedSpell(SPELL_SHAMAN_BLESSING_OF_THE_ETERNALS_R1, EFFECT_1, caster->GetGUID())) { if (eventInfo.GetProcTarget()->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT)) diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index a74414756..a2ba11e09 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -660,8 +660,21 @@ class spell_warl_seed_of_corruption : public SpellScript void FilterTargets(std::list& targets) { - if (GetExplTargetUnit()) - targets.remove(GetExplTargetUnit()); + targets.remove_if([&](WorldObject const* target) + { + if (Unit const* unitTarget = target->ToUnit()) + { + if (WorldLocation const* dest = GetExplTargetDest()) + { + if (!unitTarget->IsWithinLOS(dest->GetPositionX(), dest->GetPositionY(), dest->GetPositionZ())) + { + return true; + } + } + } + + return false; + }); } void Register() override diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 9e71e41f5..8ce91057e 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -488,12 +488,12 @@ class spell_warr_bloodthirst_heal : public SpellScript void HandleHeal(SpellEffIndex /*effIndex*/) { if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_WARRIOR_BLOODTHIRST_DAMAGE)) - SetHitHeal(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster()))); + SetEffectValue(GetCaster()->CountPctFromMaxHealth(spellInfo->Effects[EFFECT_1].CalcValue(GetCaster()))); } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_warr_bloodthirst_heal::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); + OnEffectLaunchTarget += SpellEffectFn(spell_warr_bloodthirst_heal::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); } }; diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp index f984bcfcc..002eabbbf 100644 --- a/src/server/scripts/World/npc_professions.cpp +++ b/src/server/scripts/World/npc_professions.cpp @@ -18,7 +18,7 @@ /* ScriptData SDName: Npc_Professions SD%Complete: 80 -SDComment: Provides learn/unlearn/relearn-options for professions. Not supported: Unlearn engineering, re-learn engineering, re-learn leatherworking. +SDComment: Provides learn/unlearn/relearn-options for professions. Not supported: Unlearn engineering, re-learn engineering. SDCategory: NPCs EndScriptData */ @@ -86,10 +86,6 @@ there is no difference here (except that default text is chosen with `gameobject #define BOX_UNLEARN_WEAPON_SPEC "Do you really want to unlearn your weaponsmith specialty and lose all associated recipes? \n Cost: " -#define GOSSIP_LEARN_DRAGON "I wish to learn Dragonscale Leatherworking" -#define GOSSIP_LEARN_ELEMENTAL "I wish to learn Elemental Leatherworking" -#define GOSSIP_LEARN_TRIBAL "I wish to learn Tribal Leatherworking" - #define GOSSIP_LEARN_SPELLFIRE "Please teach me how to become a Spellcloth tailor" #define GOSSIP_UNLEARN_SPELLFIRE "I wish to unlearn Spellfire Tailoring" #define GOSSIP_LEARN_MOONCLOTH "Please teach me how to become a Mooncloth tailor" @@ -230,6 +226,37 @@ enum SpecializationQuests Q_MASTER_POTION = 10897, }; +// All referred to gossips (menu, menu_opt, actions) +enum Gossips +{ + // Leatherworking + GOSSIP_MENU_PETER_GALEN = 3067, + GOSSIP_MENU_THORKAF_DRAGONEYE = 3068, + GOSSIP_MENU_BRUMN_WINTERHOOF = 3069, + GOSSIP_MENU_SARAH_TANNER = 3070, + GOSSIP_MENU_CARYSSIA_MOONHUNTER = 3072, + GOSSIP_MENU_SEJIB = 3073, + + GOSSIP_MENU_UNLEARN_CONFIRM_DRAGONSCALE = 3075, + GOSSIP_MENU_UNLEARN_CONFIRM_ELEMENTAL = 3076, + GOSSIP_MENU_UNLEARN_CONFIRM_TRIBAL = 3077, + + GOSSIP_MENU_OPTION_TRAIN = 0, + GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_DRAGONSCALE = 1, + GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_ELEMENTAL = 1, + GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_TRIBAL = 1, + + GOSSIP_TEXT_UNLEARN_CONFIRM_DRAGONSCALE = 10304, + GOSSIP_TEXT_UNLEARN_CONFIRM_ELEMENTAL = 10302, + GOSSIP_TEXT_UNLEARN_CONFIRM_TRIBAL = 10303, + + GOSSIP_MENU_GO_SOOTHSAYING_FOR_DUMMIES = 7058, + GOSSIP_MENU_OPTION_GO_LEARN_DRAGONSCALE = 4, + GOSSIP_MENU_OPTION_GO_LEARN_ELEMENTAL = 5, + GOSSIP_MENU_OPTION_GO_LEARN_TRIBAL = 6, + +}; + /*### # formulas to calculate unlearning cost ###*/ @@ -347,7 +374,11 @@ void ProfessionUnlearnSpells(Player* player, uint32 type) player->removeSpell(36259, SPEC_MASK_ALL, false); // Lionheart Executioner break; case S_UNLEARN_DRAGON: // S_UNLEARN_DRAGON + player->removeSpell(10619, SPEC_MASK_ALL, false); // Dragonscale Guantlets + player->removeSpell(10650, SPEC_MASK_ALL, false); // Dragonscale Breastplate player->removeSpell(36076, SPEC_MASK_ALL, false); // Dragonstrike Leggings + player->removeSpell(24655, SPEC_MASK_ALL, false); // Green Dragonscale Gauntlets + player->removeSpell(24654, SPEC_MASK_ALL, false); // Blue Dragonscale Leggings player->removeSpell(36079, SPEC_MASK_ALL, false); // Golden Dragonstrike Breastplate player->removeSpell(35576, SPEC_MASK_ALL, false); // Ebon Netherscale Belt player->removeSpell(35577, SPEC_MASK_ALL, false); // Ebon Netherscale Bracers @@ -362,6 +393,8 @@ void ProfessionUnlearnSpells(Player* player, uint32 type) player->removeSpell(35590, SPEC_MASK_ALL, false); // Primalstrike Belt player->removeSpell(35591, SPEC_MASK_ALL, false); // Primalstrike Bracers player->removeSpell(35589, SPEC_MASK_ALL, false); // Primalstrike Vest + player->removeSpell(10630, SPEC_MASK_ALL, false); // Gauntlets of the Sea + player->removeSpell(10632, SPEC_MASK_ALL, false); // Helm of Fire break; case S_UNLEARN_TRIBAL: // S_UNLEARN_TRIBAL player->removeSpell(35585, SPEC_MASK_ALL, false); // Windhawk Hauberk @@ -369,6 +402,8 @@ void ProfessionUnlearnSpells(Player* player, uint32 type) player->removeSpell(35588, SPEC_MASK_ALL, false); // Windhawk Bracers player->removeSpell(36075, SPEC_MASK_ALL, false); // Wildfeather Leggings player->removeSpell(36078, SPEC_MASK_ALL, false); // Living Crystal Breastplate + player->removeSpell(10621, SPEC_MASK_ALL, false); // Wolfshead Helm + player->removeSpell(10647, SPEC_MASK_ALL, false); // Feathered Breastplate break; case S_UNLEARN_SPELLFIRE: // S_UNLEARN_SPELLFIRE player->removeSpell(26752, SPEC_MASK_ALL, false); // Spellfire Belt @@ -950,44 +985,39 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { + ClearGossipMenuFor(player); + if (creature->IsQuestGiver()) + { player->PrepareQuestMenu(creature->GetGUID()); + } - if (creature->IsVendor()) - AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - - // pussywizard: NO UNLEARNING! LEATHERWORKING SPECIALTY IS A PERMANENT DECISION AND CANNOT BE CHANGED IN ANY WAY! - // pussywizard: CAN RE-LEARN ONLY THE ONE FOR WHICH QUEST IS COMPLETED! - - if (player->HasSkill(SKILL_LEATHERWORKING) && player->GetBaseSkillValue(SKILL_LEATHERWORKING) >= 250 && player->getLevel() > 49) + if (player->HasSkill(SKILL_LEATHERWORKING) && player->GetBaseSkillValue(SKILL_LEATHERWORKING) >= 225 && player->getLevel() > 40) { switch (creature->GetEntry()) { - case N_TRAINER_DRAGON1: //Peter Galen - case N_TRAINER_DRAGON2: //Thorkaf Dragoneye - if (!HasLeatherSpecialty(player) && (player->GetQuestRewardStatus(5141) || player->GetQuestRewardStatus(5145))) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_DRAGON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + case N_TRAINER_DRAGON1: //Peter Galen + case N_TRAINER_DRAGON2: //Thorkaf Dragoneye if (player->HasSpell(S_DRAGON)) { - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_DRAGON1 ? GOSSIP_MENU_PETER_GALEN : GOSSIP_MENU_THORKAF_DRAGONEYE, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_DRAGON1 ? GOSSIP_MENU_PETER_GALEN : GOSSIP_MENU_THORKAF_DRAGONEYE, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_DRAGONSCALE, GOSSIP_SENDER_MAIN, GOSSIP_MENU_UNLEARN_CONFIRM_DRAGONSCALE); } break; - case N_TRAINER_ELEMENTAL1: //Sarah Tanner - case N_TRAINER_ELEMENTAL2: //Brumn Winterhoof - if (!HasLeatherSpecialty(player) && (player->GetQuestRewardStatus(5144) || player->GetQuestRewardStatus(5146))) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELEMENTAL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + case N_TRAINER_ELEMENTAL1: //Sarah Tanner + case N_TRAINER_ELEMENTAL2: //Brumn Winterhoof if (player->HasSpell(S_ELEMENTAL)) { - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_ELEMENTAL1 ? GOSSIP_MENU_SARAH_TANNER : GOSSIP_MENU_BRUMN_WINTERHOOF, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_ELEMENTAL1 ? GOSSIP_MENU_SARAH_TANNER : GOSSIP_MENU_BRUMN_WINTERHOOF, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_ELEMENTAL, GOSSIP_SENDER_MAIN, GOSSIP_MENU_UNLEARN_CONFIRM_ELEMENTAL); } break; - case N_TRAINER_TRIBAL1: //Caryssia Moonhunter - case N_TRAINER_TRIBAL2: //Se'Jib - if (!HasLeatherSpecialty(player) && (player->GetQuestRewardStatus(5143) || player->GetQuestRewardStatus(5148))) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRIBAL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + case N_TRAINER_TRIBAL1: //Caryssia Moonhunter + case N_TRAINER_TRIBAL2: //Se'Jib if (player->HasSpell(S_TRIBAL)) { - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_TRIBAL1 ? GOSSIP_MENU_CARYSSIA_MOONHUNTER : GOSSIP_MENU_SEJIB, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_TRIBAL1 ? GOSSIP_MENU_CARYSSIA_MOONHUNTER : GOSSIP_MENU_SEJIB, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_TRIBAL, GOSSIP_SENDER_MAIN, GOSSIP_MENU_UNLEARN_CONFIRM_TRIBAL); } break; } @@ -997,36 +1027,35 @@ public: return true; } - void SendActionMenu(Player* player, Creature* creature, uint32 action) + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { + ClearGossipMenuFor(player); + switch (action) { - case GOSSIP_ACTION_TRADE: - player->GetSession()->SendListInventory(creature->GetGUID()); - break; case GOSSIP_ACTION_TRAIN: player->GetSession()->SendTrainerList(creature->GetGUID()); break; - // Learn Leather + case GOSSIP_MENU_UNLEARN_CONFIRM_DRAGONSCALE: + AddGossipItemFor(player, GOSSIP_MENU_UNLEARN_CONFIRM_DRAGONSCALE, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_DRAGONSCALE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1, DoMedUnlearnCost(player)); + SendGossipMenuFor(player, GOSSIP_TEXT_UNLEARN_CONFIRM_DRAGONSCALE, creature); + break; + case GOSSIP_MENU_UNLEARN_CONFIRM_ELEMENTAL: + AddGossipItemFor(player, GOSSIP_MENU_UNLEARN_CONFIRM_ELEMENTAL, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_ELEMENTAL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2, DoMedUnlearnCost(player)); + SendGossipMenuFor(player, GOSSIP_TEXT_UNLEARN_CONFIRM_ELEMENTAL, creature); + break; + case GOSSIP_MENU_UNLEARN_CONFIRM_TRIBAL: + AddGossipItemFor(player, GOSSIP_MENU_UNLEARN_CONFIRM_TRIBAL, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_TRIBAL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3, DoMedUnlearnCost(player)); + SendGossipMenuFor(player, GOSSIP_TEXT_UNLEARN_CONFIRM_TRIBAL, creature); + break; case GOSSIP_ACTION_INFO_DEF + 1: - ProcessCastaction(player, creature, S_DRAGON, S_LEARN_DRAGON, 0); + ProcessUnlearnAction(player, creature, S_UNLEARN_DRAGON, 0, DoMedUnlearnCost(player)); break; case GOSSIP_ACTION_INFO_DEF + 2: - ProcessCastaction(player, creature, S_ELEMENTAL, S_LEARN_ELEMENTAL, 0); + ProcessUnlearnAction(player, creature, S_UNLEARN_ELEMENTAL, 0, DoMedUnlearnCost(player)); break; case GOSSIP_ACTION_INFO_DEF + 3: - ProcessCastaction(player, creature, S_TRIBAL, S_LEARN_TRIBAL, 0); - break; - } - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override - { - ClearGossipMenuFor(player); - switch (sender) - { - case GOSSIP_SENDER_MAIN: - SendActionMenu(player, creature, action); + ProcessUnlearnAction(player, creature, S_UNLEARN_TRIBAL, 0, DoMedUnlearnCost(player)); break; } return true; @@ -1210,9 +1239,14 @@ class go_evil_book_for_dummies : public GameObjectScript public: go_evil_book_for_dummies() : GameObjectScript("go_evil_book_for_dummies") { } + inline bool HasLeatherSpecialty(Player* player) + { + return (player->HasSpell(S_DRAGON) || player->HasSpell(S_ELEMENTAL) || player->HasSpell(S_TRIBAL)); + } + bool OnGossipHello(Player* player, GameObject* gameobject) override { - //TAILORING SPEC + //ENGINEERING SPEC if (player->HasSkill(SKILL_ENGINEERING) && player->GetBaseSkillValue(SKILL_ENGINEERING) >= 225 && player->getLevel() >= 35) { if (player->GetQuestRewardStatus(3643) || player->GetQuestRewardStatus(3641) || player->GetQuestRewardStatus(3639)) @@ -1233,6 +1267,17 @@ public: } } + //LEATHERWORKING SPEC + if (player->HasSkill(SKILL_LEATHERWORKING) && player->GetBaseSkillValue(SKILL_LEATHERWORKING) >= 225 && player->getLevel() >= 40) + { + if (!HasLeatherSpecialty(player) && (player->GetQuestRewardStatus(5141) || player->GetQuestRewardStatus(5143) || player->GetQuestRewardStatus(5144) || player->GetQuestRewardStatus(5145) || player->GetQuestRewardStatus(5146) || player->GetQuestRewardStatus(5148))) + { + AddGossipItemFor(player, GOSSIP_MENU_GO_SOOTHSAYING_FOR_DUMMIES, GOSSIP_MENU_OPTION_GO_LEARN_DRAGONSCALE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + AddGossipItemFor(player, GOSSIP_MENU_GO_SOOTHSAYING_FOR_DUMMIES, GOSSIP_MENU_OPTION_GO_LEARN_ELEMENTAL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + AddGossipItemFor(player, GOSSIP_MENU_GO_SOOTHSAYING_FOR_DUMMIES, GOSSIP_MENU_OPTION_GO_LEARN_TRIBAL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + } + } + SendGossipMenuFor(player, player->GetGossipTextId(gameobject), gameobject->GetGUID()); return true; } @@ -1257,6 +1302,18 @@ public: case GOSSIP_ACTION_INFO_DEF + 4: ProcessUnlearnAction(player, nullptr, S_UNLEARN_GNOMISH, 0, DoHighUnlearnCost(player)); break; + //Learn Dragon + case GOSSIP_ACTION_INFO_DEF + 5: + ProcessCastaction(player, nullptr, S_DRAGON, S_LEARN_DRAGON, 0); + break; + //Learn Elemental + case GOSSIP_ACTION_INFO_DEF + 6: + ProcessCastaction(player, nullptr, S_ELEMENTAL, S_LEARN_ELEMENTAL, 0); + break; + //Learn Tribal + case GOSSIP_ACTION_INFO_DEF + 7: + ProcessCastaction(player, nullptr, S_TRIBAL, S_LEARN_TRIBAL, 0); + break; } } diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 902bb72c5..28ab446c2 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2923,6 +2923,14 @@ Arena.MaxRatingDifference = 150 Arena.RatingDiscardTimer = 600000 +# +# Arena.PreviousOpponentsDiscardTimer +# Description: Time (in milliseconds) after which the previous opponents will be ignored. +# Default: 120000 - (Enabled, 2 minutes - Blizzlike) +# 0 - (Disabled) + +Arena.PreviousOpponentsDiscardTimer = 120000 + # # Arena.AutoDistributePoints # Description: Automatically distribute arena points.