Some syncs with l2jserver.
Also QuestState cleanup.
This commit is contained in:
parent
84f82612cf
commit
c4f94bcc0f
@ -26480,7 +26480,7 @@ INSERT INTO `spawnlist` VALUES
|
||||
-- Separated Soul
|
||||
("dragon_valley", 1, 32870, 146014, 111226, -3560, 0, 0, 2366, 60, 0, 0, 0),
|
||||
-- Dragon Vortex
|
||||
("dragon_valley", 1, 32871, 92225, 113873, -3062, 0, 0, 34000, 60, 0, 0, 0),
|
||||
("dragon_valley", 1, 32871, 92225, 113873, -3062, 0, 0, 0, 60, 0, 0, 0),
|
||||
|
||||
-- [22_22]
|
||||
|
||||
@ -32367,9 +32367,9 @@ INSERT INTO `spawnlist` VALUES
|
||||
-- Separated Soul
|
||||
("dragon_valley", 1, 32867, 116946, 113555, -3056, 0, 0, 2002, 60, 0, 0, 0),
|
||||
-- Dragon Vortex
|
||||
("dragon_valley", 1, 32871, 108924, 111992, -3028, 0, 0, 34000, 60, 0, 0, 0),
|
||||
("dragon_valley", 1, 32871, 110116, 125500, -3664, 0, 0, 34000, 60, 0, 0, 0),
|
||||
("dragon_valley", 1, 32871, 121172, 113348, -3776, 0, 0, 34000, 60, 0, 0, 0),
|
||||
("dragon_valley", 1, 32871, 108924, 111992, -3028, 0, 0, 0, 60, 0, 0, 0),
|
||||
("dragon_valley", 1, 32871, 110116, 125500, -3664, 0, 0, 0, 60, 0, 0, 0),
|
||||
("dragon_valley", 1, 32871, 121172, 113348, -3776, 0, 0, 0, 60, 0, 0, 0),
|
||||
-- Ruiman
|
||||
("dragon_valley", 1, 32890, 99434, 109868, -3664, 0, 0, 21929, 60, 0, 0, 0),
|
||||
|
||||
|
@ -1287,6 +1287,22 @@
|
||||
<id>16068</id> <!-- Guardian's Strider -->
|
||||
<id>16071</id> <!-- Maguen -->
|
||||
<id>16072</id> <!-- Elite Maguen -->
|
||||
<id>1601</id> <!-- Super Feline Queen Z -->
|
||||
<id>1602</id> <!-- Super Kat the Cat Z -->
|
||||
<id>1603</id> <!-- Super Mew the Cat Z -->
|
||||
<id>1561</id> <!-- Baby Rudolph -->
|
||||
<id>1562</id> <!-- Desheloph -->
|
||||
<id>1563</id> <!-- Hyum -->
|
||||
<id>1564</id> <!-- Lekang -->
|
||||
<id>1565</id> <!-- Lilias -->
|
||||
<id>1566</id> <!-- Lapham -->
|
||||
<id>1567</id> <!-- Mafum -->
|
||||
<id>1568</id> <!-- Desheloph -->
|
||||
<id>1569</id> <!-- Hyum -->
|
||||
<id>1570</id> <!-- Lekang -->
|
||||
<id>1571</id> <!-- Lilias -->
|
||||
<id>1572</id> <!-- Lapham -->
|
||||
<id>1573</id> <!-- Mafum -->
|
||||
</category>
|
||||
<category name="KNIGHT_GROUP">
|
||||
<id>4</id> <!-- Human Knight -->
|
||||
@ -1441,20 +1457,23 @@
|
||||
<id>16052</id> <!-- Toy Knight -->
|
||||
<id>16053</id> <!-- Turtle Ascetic -->
|
||||
<id>16067</id> <!-- Deinonychus -->
|
||||
<id>1601</id> <!-- Super Feline Queen Z -->
|
||||
<id>1602</id> <!-- Super Kat the Cat Z -->
|
||||
<id>1603</id> <!-- Super Mew the Cat Z -->
|
||||
<id>16068</id> <!-- Guardian's Strider -->
|
||||
<id>16071</id> <!-- Maguen -->
|
||||
<id>16072</id> <!-- Elite Maguen -->
|
||||
<id>1561</id> <!-- Baby Rudolph -->
|
||||
<id>1538</id> <!-- Baby Rudolph -->
|
||||
<id>1562</id> <!-- Deseloph -->
|
||||
<id>1562</id> <!-- Desheloph -->
|
||||
<id>1563</id> <!-- Hyum -->
|
||||
<id>1564</id> <!-- Rekang -->
|
||||
<id>1564</id> <!-- Lekang -->
|
||||
<id>1565</id> <!-- Lilias -->
|
||||
<id>1566</id> <!-- Lapham -->
|
||||
<id>1567</id> <!-- Mafum -->
|
||||
<id>1568</id> <!-- Deseloph -->
|
||||
<id>1568</id> <!-- Desheloph -->
|
||||
<id>1569</id> <!-- Hyum -->
|
||||
<id>1570</id> <!-- Rekang -->
|
||||
<id>1570</id> <!-- Lekang -->
|
||||
<id>1571</id> <!-- Lilias -->
|
||||
<id>1572</id> <!-- Lapham -->
|
||||
<id>1573</id> <!-- Mafum -->
|
||||
@ -1575,10 +1594,11 @@
|
||||
<id>12</id> <!-- Sorcerer -->
|
||||
<id>13</id> <!-- Necromancer -->
|
||||
<id>14</id> <!-- Warlock -->
|
||||
<id>10</id> <!-- Human Mystic -->
|
||||
|
||||
<id>15</id> <!-- Cleric -->
|
||||
<id>16</id> <!-- Bishop -->
|
||||
<id>17</id> <!-- Prophet -->
|
||||
<id>94</id> <!-- Archmage -->
|
||||
<id>95</id> <!-- Soultaker -->
|
||||
<id>96</id> <!-- Arcana Lord -->
|
||||
<id>97</id> <!-- Cardinal -->
|
||||
@ -2043,6 +2063,8 @@
|
||||
<id>96</id> <!-- Arcana Lord -->
|
||||
<id>104</id> <!-- Elemental Master -->
|
||||
<id>111</id> <!-- Spectral Master -->
|
||||
<id>13</id> <!-- Necromancer -->
|
||||
<id>95</id> <!-- Soultaker -->
|
||||
</category>
|
||||
<category name="SUB_GROUP_WARRIOR">
|
||||
<id>3</id> <!-- Warlord -->
|
||||
|
@ -1,41 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
|
||||
<item id="2375" price="0" /> <!-- Wolf Collar -->
|
||||
<item id="3500" price="0" /> <!-- Dragonflute of Wind -->
|
||||
<item id="3501" price="0" /> <!-- Dragonflute of Star -->
|
||||
<item id="3502" price="0" /> <!-- Dragonflute of Twilight -->
|
||||
<item id="4422" price="0" /> <!-- Dragon Bugle of Wind -->
|
||||
<item id="4423" price="0" /> <!-- Dragon Bugle of Star -->
|
||||
<item id="4424" price="0" /> <!-- Dragon Bugle of Twilight -->
|
||||
<item id="4425" price="0" /> <!-- Penitent's Manacles -->
|
||||
<item id="6648" price="0" /> <!-- Baby Buffalo Panpipe -->
|
||||
<item id="6649" price="0" /> <!-- Baby Cougar Chime -->
|
||||
<item id="6650" price="0" /> <!-- Baby Kookaburra Ocarina -->
|
||||
<item id="10311" price="0" /> <!-- Improved Buffalo Panpipe -->
|
||||
<item id="10312" price="0" /> <!-- Improved Cougar Chime -->
|
||||
<item id="10312" price="0" /> <!-- Improved Cougar Chime -->
|
||||
<item id="10313" price="0" /> <!-- Improved Kookaburra Ocarina -->
|
||||
<item id="6649" price="0" /> <!-- Baby Cougar Chime -->
|
||||
<item id="9882" price="0" /> <!-- Great Wolf Necklace -->
|
||||
<item id="10307" price="0" /> <!-- Great Snow Wolf Necklace -->
|
||||
<item id="10308" price="0" /> <!-- Red Dragon Bugle of Wind -->
|
||||
<item id="10309" price="0" /> <!-- Red Dragon Bugle of Star -->
|
||||
<item id="10310" price="0" /> <!-- Red Dragon Bugle of Twilight -->
|
||||
<item id="10311" price="0" /> <!-- Improved Buffalo Panpipe -->
|
||||
<item id="10313" price="0" /> <!-- Improved Kookaburra Ocarina -->
|
||||
<item id="10312" price="0" /> <!-- Improved Cougar Chime -->
|
||||
<item id="10426" price="0" /> <!-- Fenrir Necklace -->
|
||||
<item id="10611" price="0" /> <!-- Snow Fenrir Necklace -->
|
||||
<item id="10307" price="0" /> <!-- Great Snow Wolf Necklace -->
|
||||
<item id="2375" price="0" /> <!-- Wolf Collar -->
|
||||
<item id="14828" price="0" /> <!-- Deinonychus Mesozoic Stone -->
|
||||
<item id="14819" price="0" /> <!-- Guardian's Dragon Bugle -->
|
||||
<item id="13020" price="0" /> <!-- Fox Shaman Hunting Helper Necklace -->
|
||||
<item id="13019" price="0" /> <!-- Wild Beast Fighter Hunting Helper Necklace -->
|
||||
<item id="13017" price="0" /> <!-- White Weasel Hunting Helper Necklace -->
|
||||
<item id="13018" price="0" /> <!-- Fairy Princess Hunting Helper Necklace -->
|
||||
<item id="13019" price="0" /> <!-- Wild Beast Fighter Hunting Helper Necklace -->
|
||||
<item id="13020" price="0" /> <!-- Fox Shaman Hunting Helper Necklace -->
|
||||
<item id="14061" price="0" /> <!-- Toy Knight Summon Whistle -->
|
||||
<item id="14062" price="0" /> <!-- Spirit Shaman Summon Whistle -->
|
||||
<item id="14063" price="0" /> <!-- Owl Monk Summon Whistle -->
|
||||
<item id="14064" price="0" /> <!-- Turtle Ascetic Summon Whistle -->
|
||||
<item id="13548" price="0" /> <!-- Toy Knight Summon Whistle -->
|
||||
<item id="13549" price="0" /> <!-- Soul Monk Summon Whistle -->
|
||||
<item id="13550" price="0" /> <!-- Owl Monk Summon Whistle -->
|
||||
<item id="13551" price="0" /> <!-- Turtle Ascetic Summon Whistle -->
|
||||
<item id="20760" price="0" /> <!-- Rudolph Necklace (Event) -->
|
||||
<item id="20761" price="0" /> <!-- Rudolph Necklace -->
|
||||
<item id="14063" price="0" /> <!-- Owl Monk Summon Whistle -->
|
||||
<item id="14828" price="0" /> <!-- Deinonychus Mesozoic Stone -->
|
||||
<item id="14819" price="0" /> <!-- Guardian's Dragon Bugle -->
|
||||
<item id="15488" price="0" /> <!-- Maguen Pet Collar -->
|
||||
<item id="15489" price="0" /> <!-- Elite Maguen Pet Collar -->
|
||||
</list>
|
||||
<item id="20760" price="0" /> <!-- Rudolph Necklace (Event) -->
|
||||
<item id="20761" price="0" /> <!-- Rudolph Necklace -->
|
||||
<item id="20908" price="0" /> <!-- Deseloph Rose Necklace (Event) - Summon duration - 3 hours -->
|
||||
<item id="20909" price="0" /> <!-- Hyum Rose Necklace (Event) - Summon duration - 3 hours -->
|
||||
<item id="20910" price="0" /> <!-- Rekang Rose Necklace (Event) - Summon duration - 3 hours -->
|
||||
<item id="20911" price="0" /> <!-- Lilias Rose Necklace (Event) - Summon duration - 3 hours -->
|
||||
<item id="20912" price="0" /> <!-- Lapham Rose Necklace (Event) - Summon duration - 3 hours -->
|
||||
<item id="20913" price="0" /> <!-- Mafum Rose Necklace (Event) - Summon duration - 3 hours -->
|
||||
<item id="20915" price="0" /> <!-- Improved Deseloph Rose Necklace (Event) - Summon duration - 5 hours -->
|
||||
<item id="20916" price="0" /> <!-- Improved Hyum Rose Necklace (Event) - Summon duration - 5 hours -->
|
||||
<item id="20917" price="0" /> <!-- Improved Rekang Rose Necklace (Event) - Summon duration - 5 hours -->
|
||||
<item id="20918" price="0" /> <!-- Improved Lilias Rose Necklace (Event) - Summon duration - 5 hours -->
|
||||
<item id="20919" price="0" /> <!-- Improved Lapham Rose Necklace (Event) - Summon duration - 5 hours -->
|
||||
<item id="20920" price="0" /> <!-- Improved Mafum Rose Necklace (Event) - Summon duration - 5 hours -->
|
||||
<item id="21916" price="0" /> <!-- Super Kat the Cat Z Summon Necklace -->
|
||||
<item id="21917" price="0" /> <!-- Super Feline Queen Z Summon Necklace -->
|
||||
<item id="21918" price="0" /> <!-- Super Mew the Cat Z Summon Necklace -->
|
||||
</list>
|
10
L2J_Mobius_HighFive/dist/game/data/buylists/0135628.xml
vendored
Normal file
10
L2J_Mobius_HighFive/dist/game/data/buylists/0135628.xml
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
|
||||
<npcs>
|
||||
<npc>35628</npc> <!-- Quigby -->
|
||||
</npcs>
|
||||
<item id="6902" /> <!-- Pledge Shield -->
|
||||
<item id="6643" /> <!-- Old Golden Spice -->
|
||||
<item id="1829" count="5" restock_delay="60" /> <!-- Scroll of Escape: Clan Hall -->
|
||||
<item id="5169" count="5" restock_delay="60" /> <!-- Deluxe Food for Strider -->
|
||||
</list>
|
10
L2J_Mobius_HighFive/dist/game/data/buylists/0135640.xml
vendored
Normal file
10
L2J_Mobius_HighFive/dist/game/data/buylists/0135640.xml
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
|
||||
<npcs>
|
||||
<npc>35640</npc> <!-- Bandello -->
|
||||
</npcs>
|
||||
<item id="6902" /> <!-- Pledge Shield -->
|
||||
<item id="6316" /> <!-- Food for Wyvern -->
|
||||
<item id="1829" count="5" restock_delay="60" /> <!-- Scroll of Escape: Clan Hall -->
|
||||
<item id="5169" count="5" restock_delay="60" /> <!-- Deluxe Food for Strider -->
|
||||
</list>
|
@ -10,8 +10,10 @@
|
||||
<item id="952" count="1" restock_delay="240" /> <!-- Scroll: Enchant Armor (C-Grade) -->
|
||||
<item id="7133" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Goddard -->
|
||||
<item id="7132" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Aden -->
|
||||
<item id="8644" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Life (A-Grade) (100%) -->
|
||||
<item id="8650" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Mental Strength (A-Grade) (100%) -->
|
||||
<item id="8645" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Life (S-Grade) (100%) -->
|
||||
<item id="8651" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Mental Strength (S-Grade) (100%) -->
|
||||
<item id="9952" count="2" restock_delay="120" /> <!-- Orange Talisman - Hot Springs CP Potion -->
|
||||
<item id="10166" count="1" restock_delay="120" /> <!-- Hot Springs CP Potion -->
|
||||
<item id="8751" count="1" restock_delay="120" /> <!-- High-Grade Life Stone - Level 70 -->
|
||||
<item id="948" count="1" restock_delay="240" /> <!-- Scroll: Enchant Armor (B-Grade) -->
|
||||
<item id="17018" count="1" restock_delay="60" /> <!-- Hot Springs Potion -->
|
||||
</list>
|
||||
|
18
L2J_Mobius_HighFive/dist/game/data/buylists/0235628.xml
vendored
Normal file
18
L2J_Mobius_HighFive/dist/game/data/buylists/0235628.xml
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
|
||||
<npcs>
|
||||
<npc>35628</npc> <!-- Quigby -->
|
||||
</npcs>
|
||||
<item id="6902" /> <!-- Pledge Shield -->
|
||||
<item id="6643" /> <!-- Old Golden Spice -->
|
||||
<item id="1829" count="5" restock_delay="60" /> <!-- Scroll of Escape: Clan Hall -->
|
||||
<item id="5858" count="2" restock_delay="60" /> <!-- Blessed Scroll of Escape: Clan Hall -->
|
||||
<item id="5169" count="10" restock_delay="60" /> <!-- Deluxe Food for Strider -->
|
||||
<item id="952" count="1" restock_delay="120" /> <!-- Scroll: Enchant Armor (C-Grade) -->
|
||||
<item id="7133" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Goddard -->
|
||||
<item id="7132" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Aden -->
|
||||
<item id="8645" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Life (S-Grade) (100%) -->
|
||||
<item id="8651" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Mental Strength (S-Grade) (100%) -->
|
||||
<item id="8751" count="1" restock_delay="120" /> <!-- High-Grade Life Stone - Level 70 -->
|
||||
<item id="948" count="1" restock_delay="240" /> <!-- Scroll: Enchant Armor (B-Grade) -->
|
||||
</list>
|
19
L2J_Mobius_HighFive/dist/game/data/buylists/0235640.xml
vendored
Normal file
19
L2J_Mobius_HighFive/dist/game/data/buylists/0235640.xml
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
|
||||
<npcs>
|
||||
<npc>35640</npc> <!-- Bandello -->
|
||||
</npcs>
|
||||
<item id="6902" /> <!-- Pledge Shield -->
|
||||
<item id="6316" /> <!-- Food for Wyvern -->
|
||||
<item id="1829" count="5" restock_delay="60" /> <!-- Scroll of Escape: Clan Hall -->
|
||||
<item id="5858" count="3" restock_delay="60" /> <!-- Blessed Scroll of Escape: Clan Hall -->
|
||||
<item id="5169" count="10" restock_delay="60" /> <!-- Deluxe Food for Strider -->
|
||||
<item id="956" count="1" restock_delay="120" /> <!-- Scroll: Enchant Armor (D-Grade) -->
|
||||
<item id="952" count="1" restock_delay="300" /> <!-- Scroll: Enchant Armor (C-Grade) -->
|
||||
<item id="948" count="1" restock_delay="150" /> <!-- Scroll: Enchant Armor (B-Grade) -->
|
||||
<item id="7134" count="1" restock_delay="60" /> <!-- Scroll of Escape: Rune Township -->
|
||||
<item id="7126" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Giran -->
|
||||
<item id="8645" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Life (S-Grade) (100%) -->
|
||||
<item id="8651" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Mental Strength (S-Grade) (100%) -->
|
||||
<item id="8751" count="1" restock_delay="120" /> <!-- High-Grade Life Stone - Level 70 -->
|
||||
</list>
|
@ -17,7 +17,6 @@
|
||||
<item id="6930" count="1" restock_delay="60" /> <!-- Recipe: Greater Antidote (100%) -->
|
||||
<item id="6932" count="1" restock_delay="60" /> <!-- Recipe: Emergency Dressing (100%) -->
|
||||
<item id="6937" count="1" restock_delay="60" /> <!-- Recipe: Magic Haste Potion (100%) -->
|
||||
<item id="6930" count="1" restock_delay="60" /> <!-- Recipe: Greater Antidote (100%) -->
|
||||
<item id="6920" count="1" restock_delay="60" /> <!-- Recipe: Greater Fish Oil (100%) -->
|
||||
<item id="8364" count="1" restock_delay="60" /> <!-- Recipe: Party Hat (100%) -->
|
||||
<item id="6925" count="1" restock_delay="60" /> <!-- Recipe: Monocle (100%) -->
|
||||
@ -37,16 +36,22 @@
|
||||
<item id="6999" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of MEN (100%) -->
|
||||
<item id="7000" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of WIT (100%) -->
|
||||
<item id="7001" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of WIT (100%) -->
|
||||
<item id="8645" count="1" restock_delay="60" /> <!-- Recipe: Elixir of Life (S-Grade) (100%) -->
|
||||
<item id="8651" count="1" restock_delay="60" /> <!-- Recipe: Elixir of Mental Strength (S-Grade) (100%) -->
|
||||
<item id="9605" count="1" restock_delay="60" /> <!-- Agathion Seal Bracelet - Rainbow Clan Hall -->
|
||||
<item id="10141" count="1" restock_delay="60" /> <!-- Grey Talisman - Yeti Transform -->
|
||||
<item id="8645" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Life (S-Grade) (100%) -->
|
||||
<item id="8651" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Mental Strength (S-Grade) (100%) -->
|
||||
<item id="9605" /> <!-- Agathion Seal Bracelet - Rainbow Clan Hall -->
|
||||
<item id="10141" count="1" restock_delay="120" /> <!-- Grey Talisman - Yeti Transform -->
|
||||
<item id="9952" count="2" restock_delay="120" /> <!-- Orange Talisman - Hot Springs CP Potion -->
|
||||
<item id="8751" count="1" restock_delay="120" /> <!-- High-Grade Life Stone - Level 70 -->
|
||||
<item id="8762" count="1" restock_delay="720" /> <!-- Top-Grade Life Stone - Level 76 -->
|
||||
<item id="16117" /> <!-- Recipe - Refined Penguin Hat (10%) -->
|
||||
<item id="16120" /> <!-- Recipe - Refined Turtle Hat (10%) -->
|
||||
<item id="8752" count="1" restock_delay="240" /> <!-- High-Grade Life Stone - Level 76 -->
|
||||
<item id="8761" count="1" restock_delay="361" /> <!-- Top-Grade Life Stone - Level 70 -->
|
||||
<item id="948" count="1" restock_delay="240" /> <!-- Scroll: Enchant Armor (B-Grade) -->
|
||||
<item id="947" count="1" restock_delay="361" /> <!-- Scroll: Enchant Weapon (B-Grade) -->
|
||||
<item id="730" count="1" restock_delay="361" /> <!-- Scroll: Enchant Armor (A-Grade) -->
|
||||
<item id="9898" count="1" restock_delay="480" /> <!-- SP Scroll: Highest Grade -->
|
||||
<item id="16117" count="1" restock_delay="1428" /> <!-- Recipe - Refined Penguin Hat (10%) -->
|
||||
<item id="16120" count="1" restock_delay="1428" /> <!-- Recipe - Refined Turtle Hat (10%) -->
|
||||
<item id="8762" count="1" restock_delay="722" /> <!-- Top-Grade Life Stone - Level 76 -->
|
||||
<item id="16129" count="10" restock_delay="60" /> <!-- Fabric of Refined Penguin Hat -->
|
||||
<item id="16132" count="10" restock_delay="60" /> <!-- Fabric of Refined Turtle Hat -->
|
||||
<item id="10166" count="1" restock_delay="120" /> <!-- Hot Springs CP Potion -->
|
||||
<item id="17018" count="1" restock_delay="60" /> <!-- Hot Springs Potion -->
|
||||
</list>
|
||||
|
54
L2J_Mobius_HighFive/dist/game/data/buylists/0335628.xml
vendored
Normal file
54
L2J_Mobius_HighFive/dist/game/data/buylists/0335628.xml
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
|
||||
<npcs>
|
||||
<npc>35628</npc> <!-- Quigby -->
|
||||
</npcs>
|
||||
<item id="6902" /> <!-- Pledge Shield -->
|
||||
<item id="6643" /> <!-- Old Golden Spice -->
|
||||
<item id="1829" count="5" restock_delay="60" /> <!-- Scroll of Escape: Clan Hall -->
|
||||
<item id="5858" count="2" restock_delay="60" /> <!-- Blessed Scroll of Escape: Clan Hall -->
|
||||
<item id="5169" count="10" restock_delay="60" /> <!-- Deluxe Food for Strider -->
|
||||
<item id="952" count="1" restock_delay="120" /> <!-- Scroll: Enchant Armor (C-Grade) -->
|
||||
<item id="7133" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Goddard -->
|
||||
<item id="7132" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Aden -->
|
||||
<item id="7583" count="1" restock_delay="120" /> <!-- Pet Exchange Ticket: Buffalo -->
|
||||
<item id="6927" count="1" restock_delay="60" /> <!-- Recipe: Healing Potion (100%) -->
|
||||
<item id="6933" count="1" restock_delay="60" /> <!-- Recipe: Haste Potion (100%) -->
|
||||
<item id="6934" count="1" restock_delay="60" /> <!-- Recipe: Alacrity Potion (100%) -->
|
||||
<item id="6930" count="1" restock_delay="60" /> <!-- Recipe: Greater Antidote (100%) -->
|
||||
<item id="6932" count="1" restock_delay="60" /> <!-- Recipe: Emergency Dressing (100%) -->
|
||||
<item id="6937" count="1" restock_delay="60" /> <!-- Recipe: Magic Haste Potion (100%) -->
|
||||
<item id="6920" count="1" restock_delay="60" /> <!-- Recipe: Greater Fish Oil (100%) -->
|
||||
<item id="8368" count="1" restock_delay="60" /> <!-- Recipe: Artisan's Goggles (100%) -->
|
||||
<item id="6924" count="1" restock_delay="60" /> <!-- Recipe: Pirate's Eye Patch (100%) -->
|
||||
<item id="6943" count="1" restock_delay="60" /> <!-- Recipe: Dye Potion - A (100%) -->
|
||||
<item id="6944" count="1" restock_delay="60" /> <!-- Recipe: Dye Potion - B (100%) -->
|
||||
<item id="6945" count="1" restock_delay="60" /> <!-- Recipe: Dye Potion - C (100%) -->
|
||||
<item id="6946" count="1" restock_delay="60" /> <!-- Recipe: Dye Potion - D (100%) -->
|
||||
<item id="6990" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of STR <Str+3 Con-3> (100%) -->
|
||||
<item id="6991" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of STR <Str+3 Dex-3> (100%) -->
|
||||
<item id="6992" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of CON <Con+3 Str-3> (100%) -->
|
||||
<item id="6993" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of CON <Con+3 Dex-3> (100%) -->
|
||||
<item id="6994" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of DEX <Dex+3 Str-3> (100%) -->
|
||||
<item id="6995" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of DEX <Dex+3 Con-3> (100%) -->
|
||||
<item id="6996" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of INT <Int+3 Men-3> (100%) -->
|
||||
<item id="6997" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of INT <Int+3 Wit-3> (100%) -->
|
||||
<item id="6998" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of MEN <Men+3 Int-3> (100%) -->
|
||||
<item id="6999" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of MEN <Men+3 Wit-3> (100%) -->
|
||||
<item id="7000" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of WIT <Wit+3 Int-3> (100%) -->
|
||||
<item id="7001" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of WIT <Wit+3 Men-3> (100%) -->
|
||||
<item id="8645" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Life (S-Grade) (100%) -->
|
||||
<item id="8651" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Mental Strength (S-Grade) (100%) -->
|
||||
<item id="9606" /> <!-- Agathion Seal Bracelet - Wild Beast Reserve -->
|
||||
<item id="10142" count="1" restock_delay="120" /> <!-- Grey Talisman - Buffalo Transform -->
|
||||
<item id="8751" count="1" restock_delay="120" /> <!-- High-Grade Life Stone - Level 70 -->
|
||||
<item id="8752" count="1" restock_delay="240" /> <!-- High-Grade Life Stone - Level 76 -->
|
||||
<item id="8761" count="1" restock_delay="361" /> <!-- Top-Grade Life Stone - Level 70 -->
|
||||
<item id="948" count="1" restock_delay="240" /> <!-- Scroll: Enchant Armor (B-Grade) -->
|
||||
<item id="947" count="1" restock_delay="361" /> <!-- Scroll: Enchant Weapon (B-Grade) -->
|
||||
<item id="730" count="1" restock_delay="361" /> <!-- Scroll: Enchant Armor (A-Grade) -->
|
||||
<item id="9898" count="1" restock_delay="480" /> <!-- SP Scroll: Highest Grade -->
|
||||
<item id="16121" count="1" restock_delay="1428" /> <!-- Recipe - Refined Cow Hat (10%) -->
|
||||
<item id="8762" count="1" restock_delay="722" /> <!-- Top-Grade Life Stone - Level 76 -->
|
||||
<item id="16133" count="10" restock_delay="60" /> <!-- Fabric of Refined Cow Hat -->
|
||||
</list>
|
57
L2J_Mobius_HighFive/dist/game/data/buylists/0335640.xml
vendored
Normal file
57
L2J_Mobius_HighFive/dist/game/data/buylists/0335640.xml
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
|
||||
<npcs>
|
||||
<npc>35640</npc> <!-- Bandello -->
|
||||
</npcs>
|
||||
<item id="6902" /> <!-- Pledge Shield -->
|
||||
<item id="6316" /> <!-- Food for Wyvern -->
|
||||
<item id="1829" count="5" restock_delay="60" /> <!-- Scroll of Escape: Clan Hall -->
|
||||
<item id="5858" count="3" restock_delay="60" /> <!-- Blessed Scroll of Escape: Clan Hall -->
|
||||
<item id="5169" count="10" restock_delay="60" /> <!-- Deluxe Food for Strider -->
|
||||
<item id="952" count="1" restock_delay="120" /> <!-- Scroll: Enchant Armor (C-Grade) -->
|
||||
<item id="948" count="1" restock_delay="300" /> <!-- Scroll: Enchant Armor (B-Grade) -->
|
||||
<item id="730" count="1" restock_delay="150" /> <!-- Scroll: Enchant Armor (A-Grade) -->
|
||||
<item id="7134" count="1" restock_delay="60" /> <!-- Scroll of Escape: Rune Township -->
|
||||
<item id="7126" count="1" restock_delay="60" /> <!-- Scroll of Escape: Town of Giran -->
|
||||
<item id="7584" count="1" restock_delay="120" /> <!-- Pet Exchange Ticket: Cougar -->
|
||||
<item id="6928" count="1" restock_delay="60" /> <!-- Recipe: Greater Healing Potion (100%) -->
|
||||
<item id="6935" count="1" restock_delay="60" /> <!-- Recipe: Greater Haste Potion (100%) -->
|
||||
<item id="6936" count="1" restock_delay="60" /> <!-- Recipe: Greater Swift Attack Potion (100%) -->
|
||||
<item id="6938" count="1" restock_delay="60" /> <!-- Recipe: Greater Magic Haste Potion (100%) -->
|
||||
<item id="6921" count="1" restock_delay="60" /> <!-- Recipe: Premium Fish Oil(100%) -->
|
||||
<item id="8366" count="1" restock_delay="60" /> <!-- Recipe: Feathered Hat (100%) -->
|
||||
<item id="7699" count="1" restock_delay="60" /> <!-- Recipe: Forget-me-not Hairpin (100%) -->
|
||||
<item id="6939" count="1" restock_delay="60" /> <!-- Recipe: Mystery Potion (100%) -->
|
||||
<item id="6947" count="1" restock_delay="60" /> <!-- Recipe: Hair Style Change Potion - A (100%) -->
|
||||
<item id="6948" count="1" restock_delay="60" /> <!-- Recipe: Hair Style Change Potion - B (100%) -->
|
||||
<item id="6949" count="1" restock_delay="60" /> <!-- Recipe: Hair Style Change Potion - C (100%) -->
|
||||
<item id="6950" count="1" restock_delay="60" /> <!-- Recipe: Hair Style Change Potion - D (100%) -->
|
||||
<item id="6951" count="1" restock_delay="60" /> <!-- Recipe: Hair Style Change Potion - E (100%) -->
|
||||
<item id="6952" count="1" restock_delay="60" /> <!-- Recipe: Hair Style Change Potion - F (100%) -->
|
||||
<item id="6953" count="1" restock_delay="60" /> <!-- Recipe: Hair Style Change Potion - G (100%) -->
|
||||
<item id="7002" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of STR <Str+4 Con-4> (100%) -->
|
||||
<item id="7003" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of STR <Str+4 Dex-4> (100%) -->
|
||||
<item id="7004" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of CON <Con+4 Str-4> (100%) -->
|
||||
<item id="7005" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of CON <Con+4 Dex-4> (100%) -->
|
||||
<item id="7006" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of DEX <Dex+4 Str-4> (100%) -->
|
||||
<item id="7007" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of DEX <Dex+4 Con-4> (100%) -->
|
||||
<item id="7008" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of INT <Int+4 Men-4> (100%) -->
|
||||
<item id="7009" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of INT <Int+4 Wit-4> (100%) -->
|
||||
<item id="7010" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of MEN <Men+4 Int-4> (100%) -->
|
||||
<item id="7011" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of MEN <Men+4 Wit-4> (100%) -->
|
||||
<item id="7012" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of WIT <Wit+4 Int-4> (100%) -->
|
||||
<item id="7013" count="1" restock_delay="60" /> <!-- Recipe: Greater Dye of WIT <Wit+4 Men-4> (100%) -->
|
||||
<item id="8645" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Life (S-Grade) (100%) -->
|
||||
<item id="8651" count="1" restock_delay="120" /> <!-- Recipe: Elixir of Mental Strength (S-Grade) (100%) -->
|
||||
<item id="8751" count="1" restock_delay="120" /> <!-- High-Grade Life Stone - Level 70 -->
|
||||
<item id="8752" count="1" restock_delay="240" /> <!-- High-Grade Life Stone - Level 76 -->
|
||||
<item id="8761" count="1" restock_delay="361" /> <!-- Top-Grade Life Stone - Level 70 -->
|
||||
<item id="729" count="1" restock_delay="722" /> <!-- Scroll: Enchant Weapon (A-Grade) -->
|
||||
<item id="960" count="1" restock_delay="1428" /> <!-- Scroll: Enchant Armor (S-Grade) -->
|
||||
<item id="9898" count="1" restock_delay="480" /> <!-- SP Scroll: Highest Grade -->
|
||||
<item id="16118" count="1" restock_delay="1428" /> <!-- Recipe - Refined Brown Turban (10%) -->
|
||||
<item id="16119" count="1" restock_delay="1428" /> <!-- Recipe - Refined Yellow Turban (10%) -->
|
||||
<item id="8762" count="1" restock_delay="722" /> <!-- Top-Grade Life Stone - Level 76 -->
|
||||
<item id="16130" count="10" restock_delay="60" /> <!-- Fabric of Refined Brown Turban -->
|
||||
<item id="16131" count="10" restock_delay="60" /> <!-- Fabric of Refined Yellow Turban -->
|
||||
</list>
|
4
L2J_Mobius_HighFive/dist/game/data/html/default/30980.htm
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/html/default/30980.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Ark Guardian's Corpse:<br>
|
||||
What an odd-looking corpse. Who could have done this?<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
5
L2J_Mobius_HighFive/dist/game/data/html/default/32792.htm
vendored
Normal file
5
L2J_Mobius_HighFive/dist/game/data/html/default/32792.htm
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><html>Eris' Evil Thoughts:<br>
|
||||
Finally we meet, Successors of Fate. At last, this endless cycle may be given a chance to end.<br>
|
||||
<a action="bypass -h Quest MonasteryOfSilence1 EXIT">"I'd like to go outside."</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,4 +1,4 @@
|
||||
<html><body>Elmore-Aden's Saintess Solina:<br>
|
||||
<html><body>Elmoreden's Saintess Solina:<br>
|
||||
For an eternity, I've been waiting for you.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
4
L2J_Mobius_HighFive/dist/game/data/html/default/32794.htm
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/html/default/32794.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Elmoreden's Saintess Solina:<br>
|
||||
I am Solina!<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
4
L2J_Mobius_HighFive/dist/game/data/html/default/32795.htm
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/html/default/32795.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Solina's Disciple Eris:<br>
|
||||
I am Eris!!<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
4
L2J_Mobius_HighFive/dist/game/data/html/default/32796.htm
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/html/default/32796.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Priest of Splendor Anais:<br>
|
||||
I am Anais!!!!<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,4 +1,4 @@
|
||||
<html><body>Jude van Etina:<br>
|
||||
What we need now is silence, I care not for any truth or confession.<br>
|
||||
What we need now is silence, I care not for any truth nor confession.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>You hear a low vibrating sound from the giant Movement Control Device.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
You hear a low vibrating sound from the giant Teleport Control Device.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>There's a book shaped hole in the giant Barrier Device.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
There's a book shaped hole in the giant Barrier Device.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>There's a shield-shaped hole in the giant Barrier Device.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
There's a shield-shaped hole in the giant Barrier Device.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>There's a small hole in the giant Barrier Device. It looks like you can place a sword shaped relic in there.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
There's a small hole in the giant Barrier Device. It looks like you can place a sword shaped relic in there.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>There's a cain shaped hole in the giant Barrier Device. It looks like you can put a cain relic in here to activate it.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
There's a cain shaped hole in the giant Barrier Device. It looks like you can put a cain relic in here to activate it.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>Movement Control Device:<br>Only Solina's disciples may enter.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>Teleport Control Device:<br>
|
||||
Only Solina's disciples may enter.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>This is a lavishly decorated tomb.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
This is a lavishly decorated tomb.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
4
L2J_Mobius_HighFive/dist/game/data/html/default/32844.htm
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/html/default/32844.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>
|
||||
The Teleport Control Device gives off a subtle and mysterious light.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>A sacred object, shaped like a huge staff, floats effortlessly above the altar.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
A sacred object, shaped like a huge staff, floats effortlessly above the altar.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>A sacred object shaped like a large sword hovers gently above the altar.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
A sacred object shaped like a large sword hovers gently above the altar.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>There's a large book looking relic floating in the air above the altar.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
There's a large book-looking relic floating in the air above the altar.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,4 @@
|
||||
<html><body>A sacred object in the shape of a huge shield floats above the altar, slowly rotating.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
<html><body>
|
||||
A sacred object in the shape of a huge shield floats above the altar, slowly rotating.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
9
L2J_Mobius_HighFive/dist/game/data/instances/CastleDungeon.xml
vendored
Normal file
9
L2J_Mobius_HighFive/dist/game/data/instances/CastleDungeon.xml
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance name="Dungeon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<activityTime val="60" />
|
||||
<allowSummon val="false" />
|
||||
<emptyDestroyTime val="240" />
|
||||
<reenter additionStyle="ON_INSTANCE_ENTER">
|
||||
<reset time="14400000" />
|
||||
</reenter>
|
||||
</instance>
|
@ -9,4 +9,5 @@
|
||||
<reset day="Wednesday" hour="6" minute="30" />
|
||||
<reset day="Friday" hour="6" minute="30" />
|
||||
</reenter>
|
||||
<removeBuffs type="ALL" />
|
||||
</instance>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance name="Elcadia's Tent" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<activityTime val="30" />
|
||||
<activityTime val="45" />
|
||||
<allowSummon val="false" />
|
||||
<emptyDestroyTime val="1" />
|
||||
<exitPoint x="43275" y="-87928" z="-2835" />
|
||||
<exitPoint x="43347" y="-87923" z="-2820" />
|
||||
<spawnlist>
|
||||
<group name="general">
|
||||
<!-- Elcadia -->
|
||||
|
@ -1,47 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance name="Monastery Of Silence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<activityTime val="30" />
|
||||
<activityTime val="60" />
|
||||
<allowSummon val="false" />
|
||||
<emptyDestroyTime val="1" />
|
||||
<exitPoint x="115983" y="-87351" z="-3397" />
|
||||
<removeBuffs type="ALL" />
|
||||
<doorlist>
|
||||
<door doorId="21100001" /><!-- opened="true"-->
|
||||
<door doorId="21100002" /><!-- opened="true"-->
|
||||
<door doorId="21100003" /><!-- opened="true"-->
|
||||
<door doorId="21100004" /><!-- opened="true"-->
|
||||
<door doorId="21100005" /><!-- opened="true"-->
|
||||
<door doorId="21100006" /><!-- opened="true"-->
|
||||
<door doorId="21100007" /><!-- opened="true"-->
|
||||
<door doorId="21100008" /><!-- opened="true"-->
|
||||
<door doorId="21100009" /><!-- opened="true"-->
|
||||
<door doorId="21100010" /><!-- opened="true"-->
|
||||
<door doorId="21100011" /><!-- opened="true"-->
|
||||
<door doorId="21100012" /><!-- opened="true"-->
|
||||
<door doorId="21100013" /><!-- opened="true"-->
|
||||
<door doorId="21100014" /><!-- opened="true"-->
|
||||
<door doorId="21100015" /><!-- opened="true"-->
|
||||
<door doorId="21100016" /><!-- opened="true"-->
|
||||
<door doorId="21100018" /><!-- opened="false"-->
|
||||
<door doorId="21100101" /><!-- opened="false"-->
|
||||
<door doorId="21100102" /><!-- opened="false"-->
|
||||
<door doorId="21100103" /><!-- opened="false"-->
|
||||
<door doorId="21100104" /><!-- opened="false"-->
|
||||
<door doorId="21100001" />
|
||||
<door doorId="21100002" />
|
||||
<door doorId="21100003" />
|
||||
<door doorId="21100004" />
|
||||
<door doorId="21100005" />
|
||||
<door doorId="21100006" />
|
||||
<door doorId="21100007" />
|
||||
<door doorId="21100008" />
|
||||
<door doorId="21100009" />
|
||||
<door doorId="21100010" />
|
||||
<door doorId="21100011" />
|
||||
<door doorId="21100012" />
|
||||
<door doorId="21100013" />
|
||||
<door doorId="21100014" />
|
||||
<door doorId="21100015" />
|
||||
<door doorId="21100016" />
|
||||
<door doorId="21100018" />
|
||||
<door doorId="21100101" />
|
||||
<door doorId="21100102" />
|
||||
<door doorId="21100103" />
|
||||
<door doorId="21100104" />
|
||||
</doorlist>
|
||||
<spawnlist>
|
||||
<group name="general">
|
||||
<!-- Eris's Evil Thoughts -->
|
||||
<spawn npcId="32792" x="120881" y="-86496" z="-3392" heading="49080" respawn="0" />
|
||||
<spawn npcId="32792" x="120881" y="-86496" z="-3399" heading="-16456" respawn="0" />
|
||||
<!-- Relic Guardian -->
|
||||
<spawn npcId="32803" x="85792" y="-249624" z="-8296" heading="0" respawn="0" />
|
||||
<!-- Teleport Control Device -->
|
||||
<spawn npcId="32817" x="86674" y="-249624" z="-8296" heading="32960" respawn="0" />
|
||||
<spawn npcId="32818" x="84909" y="-249625" z="-8296" heading="0" respawn="0" />
|
||||
<spawn npcId="32819" x="85792" y="-250512" z="-8296" heading="16400" respawn="0" />
|
||||
<spawn npcId="32820" x="85792" y="-248739" z="-8296" heading="49212" respawn="0" />
|
||||
<spawn npcId="32817" x="86674" y="-249624" z="-8308" heading="-32576" respawn="0" />
|
||||
<spawn npcId="32818" x="84909" y="-249625" z="-8311" heading="0" respawn="0" />
|
||||
<spawn npcId="32819" x="85792" y="-250512" z="-8310" heading="16400" respawn="0" />
|
||||
<spawn npcId="32820" x="85792" y="-248739" z="-8308" heading="-16324" respawn="0" />
|
||||
<!-- Relic Watcher -->
|
||||
<spawn npcId="32804" x="88672" y="-249625" z="-8296" heading="32592" respawn="0" />
|
||||
<spawn npcId="32805" x="82528" y="-249616" z="-8296" heading="0" respawn="0" />
|
||||
<spawn npcId="32805" x="82528" y="-249616" z="-8304" heading="0" respawn="0" />
|
||||
<spawn npcId="32806" x="85788" y="-252497" z="-8296" heading="16852" respawn="0" />
|
||||
<spawn npcId="32807" x="85790" y="-246730" z="-8296" heading="48120" respawn="0" />
|
||||
<!-- Reading Desk -->
|
||||
@ -61,91 +61,96 @@
|
||||
<spawn npcId="32834" x="86888" y="-246734" z="-8320" heading="0" respawn="0" />
|
||||
<spawn npcId="32835" x="85793" y="-245640" z="-8320" heading="0" respawn="0" />
|
||||
<spawn npcId="32836" x="84705" y="-246730" z="-8320" heading="0" respawn="0" />
|
||||
<!-- Spawn: Seven Signs, Solina's Tomb -->
|
||||
<spawn npcId="18949" x="76625" y="-240824" z="-10832" heading="0" respawn="0" />
|
||||
<spawn npcId="18956" x="55498" y="-252781" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="18957" x="55520" y="-252160" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="18958" x="56635" y="-252776" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="18959" x="56672" y="-252156" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="44269" y="-251082" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="43811" y="-248086" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="44314" y="-250726" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="44246" y="-248658" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="44197" y="-251121" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="44371" y="-248136" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="44314" y="-250726" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27407" x="44210" y="-248554" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27409" x="46844" y="-248629" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27409" x="46933" y="-248040" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27410" x="46412" y="-248590" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27410" x="46376" y="-248447" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27410" x="46952" y="-248499" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27410" x="47053" y="-248080" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27410" x="46933" y="-248180" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27410" x="46613" y="-248050" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="43590" y="-249404" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45280" y="-251316" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45285" y="-247479" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="43584" y="-249935" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45469" y="-247502" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45584" y="-251289" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="47438" y="-249349" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="43356" y="-249461" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45218" y="-251733" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="47142" y="-249793" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45183" y="-247956" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="43254" y="-249948" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45548" y="-251690" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="47582" y="-249770" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27412" x="45533" y="-247983" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="47224" y="-249486" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="43710" y="-249384" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45220" y="-251386" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45255" y="-247569" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45554" y="-251309" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="47458" y="-249439" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45519" y="-247442" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="43326" y="-249451" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45258" y="-251763" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="47222" y="-249823" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45203" y="-247896" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45568" y="-251690" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="47522" y="-249920" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="45563" y="-247923" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="43724" y="-249935" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27413" x="43214" y="-249908" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27414" x="44125" y="-251134" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27414" x="43945" y="-251134" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27414" x="44331" y="-248096" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27414" x="44211" y="-248106" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27414" x="43994" y="-250706" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27414" x="44154" y="-250736" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27414" x="44210" y="-250736" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27417" x="47005" y="-250679" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27417" x="46365" y="-250819" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27417" x="46872" y="-251280" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27417" x="46368" y="-251176" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27418" x="46405" y="-250739" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27418" x="46725" y="-250809" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27418" x="46728" y="-251267" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="27418" x="46512" y="-251072" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="32793" x="56097" y="-250576" z="-6757" heading="0" respawn="0" />
|
||||
<spawn npcId="32794" x="56430" y="-239226" z="-7224" heading="0" respawn="0" />
|
||||
<spawn npcId="32795" x="56379" y="-239233" z="-7224" heading="0" respawn="0" />
|
||||
<spawn npcId="32796" x="56495" y="-239445" z="-7224" heading="0" respawn="0" />
|
||||
<spawn npcId="32797" x="56347" y="-239448" z="-7224" heading="0" respawn="0" />
|
||||
<spawn npcId="32820" x="85792" y="-248739" z="-8296" heading="0" respawn="0" />
|
||||
<spawn npcId="32837" x="45398" y="-249639" z="-6728" heading="0" respawn="0" />
|
||||
<spawn npcId="32838" x="45413" y="-251556" z="-6744" heading="0" respawn="0" />
|
||||
<spawn npcId="32839" x="47333" y="-249648" z="-6744" heading="0" respawn="0" />
|
||||
<spawn npcId="32840" x="45392" y="-247720" z="-6744" heading="0" respawn="0" />
|
||||
<spawn npcId="32841" x="43472" y="-249632" z="-6744" heading="0" respawn="0" />
|
||||
<spawn npcId="32842" x="56080" y="-251648" z="-6760" heading="0" respawn="0" />
|
||||
<spawn npcId="32843" x="56116" y="-252480" z="-6736" heading="0" respawn="0" />
|
||||
<spawn npcId="32857" x="44123" y="-248367" z="-6720" heading="0" respawn="0" />
|
||||
<spawn npcId="32858" x="46672" y="-248368" z="-6720" heading="0" respawn="0" />
|
||||
<spawn npcId="32859" x="44114" y="-250912" z="-6720" heading="0" respawn="0" />
|
||||
<spawn npcId="32860" x="46672" y="-250915" z="-6720" heading="0" respawn="0" />
|
||||
<!-- Q10295 -->
|
||||
<!-- Altar of Hallows -->
|
||||
<spawn npcId="32857" x="44123" y="-248367" z="-6715" heading="0" respawn="0" />
|
||||
<spawn npcId="32858" x="46672" y="-248368" z="-6724" heading="0" respawn="0" />
|
||||
<spawn npcId="32859" x="44114" y="-250912" z="-6718" heading="0" respawn="0" />
|
||||
<spawn npcId="32860" x="46672" y="-250915" z="-6722" heading="0" respawn="0" />
|
||||
<!-- Teleport Control Device -->
|
||||
<spawn npcId="32837" x="45398" y="-249639" z="-6694" heading="0" respawn="0" />
|
||||
<spawn npcId="32842" x="56080" y="-251648" z="-6768" heading="0" respawn="0" />
|
||||
<spawn npcId="32844" x="56080" y="-253232" z="-6768" heading="0" respawn="0" />
|
||||
<!-- Tomb of the Saintess -->
|
||||
<spawn npcId="32843" x="56116" y="-252480" z="-6730" heading="0" respawn="0" />
|
||||
<!-- Solina's Evil Thoughts -->
|
||||
<spawn npcId="32793" x="56097" y="-250576" z="-6757" heading="0" respawn="0" />
|
||||
<!-- Jude van Etina -->
|
||||
<spawn npcId="32797" x="56347" y="-239448" z="-7228" heading="6992" respawn="0" />
|
||||
<!-- Anais -->
|
||||
<spawn npcId="32796" x="56495" y="-239445" z="-7216" heading="31196" respawn="0" />
|
||||
<!-- Solina -->
|
||||
<spawn npcId="32794" x="56430" y="-239226" z="-7232" heading="-15832" respawn="0" />
|
||||
<!-- Eris -->
|
||||
<spawn npcId="32795" x="56379" y="-239233" z="-7232" heading="-5760" respawn="0" />
|
||||
<!-- Powerful Device -->
|
||||
<spawn npcId="32838" x="45413" y="-251556" z="-6734" heading="0" respawn="0" />
|
||||
<spawn npcId="32839" x="47333" y="-249648" z="-6687" heading="0" respawn="0" />
|
||||
<spawn npcId="32840" x="45392" y="-247720" z="-6680" heading="0" respawn="0" />
|
||||
<spawn npcId="32841" x="43472" y="-249632" z="-6710" heading="0" respawn="0" />
|
||||
<!-- Monsters -->
|
||||
<spawn npcId="27417" x="43778" y="-248710" z="-6799" heading="-6599" respawn="0" />
|
||||
<spawn npcId="27407" x="44367" y="-248710" z="-6799" heading="-6599" respawn="0" />
|
||||
<spawn npcId="27414" x="44510" y="-248433" z="-6799" heading="-6599" respawn="0" />
|
||||
<spawn npcId="27414" x="43780" y="-248436" z="-6799" heading="-6599" respawn="0" />
|
||||
<spawn npcId="27405" x="43731" y="-248246" z="-6802" heading="-6602" respawn="0" />
|
||||
<spawn npcId="27407" x="44531" y="-248246" z="-6802" heading="-6602" respawn="0" />
|
||||
<spawn npcId="27414" x="44529" y="-248046" z="-6802" heading="-6602" respawn="0" />
|
||||
<spawn npcId="27414" x="43739" y="-248046" z="-6802" heading="-6602" respawn="0" />
|
||||
<spawn npcId="27420" x="46340" y="-248694" z="-6789" heading="-6589" respawn="0" />
|
||||
<spawn npcId="27410" x="46929" y="-248694" z="-6789" heading="-6589" respawn="0" />
|
||||
<spawn npcId="27410" x="47072" y="-248417" z="-6789" heading="-6589" respawn="0" />
|
||||
<spawn npcId="27410" x="46342" y="-248420" z="-6789" heading="-6589" respawn="0" />
|
||||
<spawn npcId="27420" x="46293" y="-248230" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27410" x="47093" y="-248230" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27410" x="47091" y="-248030" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27410" x="46301" y="-248030" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27417" x="46332" y="-251293" z="-6797" heading="-6597" respawn="0" />
|
||||
<spawn npcId="27418" x="46921" y="-251293" z="-6797" heading="-6597" respawn="0" />
|
||||
<spawn npcId="27417" x="47064" y="-251016" z="-6797" heading="-6597" respawn="0" />
|
||||
<spawn npcId="27418" x="46334" y="-251019" z="-6797" heading="-6597" respawn="0" />
|
||||
<spawn npcId="27417" x="46285" y="-250829" z="-6800" heading="-6600" respawn="0" />
|
||||
<spawn npcId="27418" x="47085" y="-250829" z="-6800" heading="-6600" respawn="0" />
|
||||
<spawn npcId="27417" x="47083" y="-250629" z="-6800" heading="-6600" respawn="0" />
|
||||
<spawn npcId="27418" x="46293" y="-250629" z="-6800" heading="-6600" respawn="0" />
|
||||
<spawn npcId="27405" x="43801" y="-251290" z="-6791" heading="-6591" respawn="0" />
|
||||
<spawn npcId="27407" x="44390" y="-251290" z="-6791" heading="-6591" respawn="0" />
|
||||
<spawn npcId="27414" x="44533" y="-251013" z="-6791" heading="-6591" respawn="0" />
|
||||
<spawn npcId="27414" x="43803" y="-251016" z="-6791" heading="-6591" respawn="0" />
|
||||
<spawn npcId="27405" x="43754" y="-250826" z="-6798" heading="-6598" respawn="0" />
|
||||
<spawn npcId="27407" x="44554" y="-250826" z="-6798" heading="-6598" respawn="0" />
|
||||
<spawn npcId="27414" x="44552" y="-250626" z="-6798" heading="-6598" respawn="0" />
|
||||
<spawn npcId="27414" x="43762" y="-250626" z="-6798" heading="-6598" respawn="0" />
|
||||
<spawn npcId="27412" x="45473" y="-248033" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27413" x="45673" y="-248033" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27412" x="45459" y="-247622" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27413" x="45659" y="-247622" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27412" x="45095" y="-247619" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27413" x="45295" y="-247619" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27412" x="45083" y="-248026" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27413" x="45283" y="-248026" z="-6794" heading="-6594" respawn="0" />
|
||||
<spawn npcId="27412" x="47442" y="-249940" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27413" x="47642" y="-249940" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27412" x="47428" y="-249529" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27413" x="47628" y="-249529" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27412" x="47064" y="-249526" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27413" x="47264" y="-249526" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27412" x="47052" y="-249933" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27413" x="47252" y="-249933" z="-6790" heading="-6590" respawn="0" />
|
||||
<spawn npcId="27412" x="45488" y="-251880" z="-6793" heading="-6593" respawn="0" />
|
||||
<spawn npcId="27413" x="45688" y="-251880" z="-6793" heading="-6593" respawn="0" />
|
||||
<spawn npcId="27412" x="45474" y="-251469" z="-6793" heading="-6593" respawn="0" />
|
||||
<spawn npcId="27413" x="45674" y="-251469" z="-6793" heading="-6593" respawn="0" />
|
||||
<spawn npcId="27412" x="45110" y="-251466" z="-6793" heading="-6593" respawn="0" />
|
||||
<spawn npcId="27413" x="45310" y="-251466" z="-6793" heading="-6593" respawn="0" />
|
||||
<spawn npcId="27412" x="43544" y="-249975" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27413" x="43744" y="-249975" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27412" x="43530" y="-249564" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27413" x="43730" y="-249564" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27412" x="43166" y="-249561" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27413" x="43366" y="-249561" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27412" x="43154" y="-249968" z="-6792" heading="-6592" respawn="0" />
|
||||
<spawn npcId="27413" x="43354" y="-249968" z="-6792" heading="-6592" respawn="0" />
|
||||
</group>
|
||||
</spawnlist>
|
||||
</instance>
|
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<instance name="Rim Pailaka: Castle Dungeon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
|
||||
<activityTime val="60" />
|
||||
<allowSummon val="false" />
|
||||
<emptyDestroyTime val="300" />
|
||||
</instance>
|
@ -4,6 +4,10 @@
|
||||
<allowSummon val="false" />
|
||||
<emptyDestroyTime val="900" />
|
||||
<exitPoint x="-248717" y="250260" z="4337" />
|
||||
<reenter additionStyle="ON_INSTANCE_FINISH" >
|
||||
<reset day="Wednesday" hour="6" minute="30" />
|
||||
<reset day="Saturday" hour="6" minute="30" />
|
||||
</reenter>
|
||||
<doorlist>
|
||||
<door doorId="12240001" />
|
||||
<door doorId="12240002" />
|
||||
|
14
L2J_Mobius_HighFive/dist/game/data/scripts.cfg
vendored
14
L2J_Mobius_HighFive/dist/game/data/scripts.cfg
vendored
@ -15,6 +15,7 @@ ai/npc/Abercrombie/Abercrombie.java
|
||||
ai/npc/Alarm/Alarm.java
|
||||
ai/npc/Alexandria/Alexandria.java
|
||||
ai/npc/ArenaManager/ArenaManager.java
|
||||
ai/npc/Asamah/Asamah.java
|
||||
ai/npc/AvantGarde/AvantGarde.java
|
||||
ai/npc/BlackJudge/BlackJudge.java
|
||||
ai/npc/BlackMarketeerOfMammon/BlackMarketeerOfMammon.java
|
||||
@ -39,6 +40,7 @@ ai/npc/FreyasSteward/FreyasSteward.java
|
||||
ai/npc/Jinia/Jinia.java
|
||||
ai/npc/Katenar/Katenar.java
|
||||
ai/npc/KetraOrcSupport/KetraOrcSupport.java
|
||||
ai/npc/Kier/Kier.java
|
||||
ai/npc/ManorManager/ManorManager.java
|
||||
ai/npc/MercenaryCaptain/MercenaryCaptain.java
|
||||
ai/npc/Minigame/Minigame.java
|
||||
@ -55,6 +57,7 @@ ai/npc/Summons/MerchantGolem/GolemTrader.java
|
||||
ai/npc/Summons/Servitors/Servitors.java
|
||||
ai/npc/SupportUnitCaptain/SupportUnitCaptain.java
|
||||
ai/npc/SymbolMaker/SymbolMaker.java
|
||||
ai/npc/Teleports/Asher/Asher.java
|
||||
ai/npc/Teleports/CrumaTower/CrumaTower.java
|
||||
ai/npc/Teleports/DelusionTeleport/DelusionTeleport.java
|
||||
ai/npc/Teleports/ElrokiTeleporters/ElrokiTeleporters.java
|
||||
@ -137,16 +140,21 @@ ai/individual/Venom/Venom.java
|
||||
ai/individual/Anais.java
|
||||
ai/individual/Ballista.java
|
||||
ai/individual/Beleth.java
|
||||
ai/individual/BlackdaggerWing.java
|
||||
ai/individual/BleedingFly.java
|
||||
ai/individual/CrimsonHatuOtis.java
|
||||
ai/individual/Core.java
|
||||
ai/individual/DarkWaterDragon.java
|
||||
ai/individual/DivineBeast.java
|
||||
ai/individual/DrChaos.java
|
||||
ai/individual/DustRider.java
|
||||
ai/individual/EmeraldHorn.java
|
||||
ai/individual/Epidos.java
|
||||
ai/individual/EvasGiftBox.java
|
||||
ai/individual/FrightenedRagnaOrc.java
|
||||
ai/individual/Gordon.java
|
||||
ai/individual/GraveRobbers.java
|
||||
ai/individual/MuscleBomber.java
|
||||
ai/individual/Orfen.java
|
||||
ai/individual/QueenAnt.java
|
||||
ai/individual/QueenShyeed.java
|
||||
@ -154,6 +162,7 @@ ai/individual/RagnaOrcCommander.java
|
||||
ai/individual/RagnaOrcHero.java
|
||||
ai/individual/RagnaOrcSeer.java
|
||||
ai/individual/ScarletVanHalisha.java
|
||||
ai/individual/ShadowSummoner.java
|
||||
ai/individual/SinEater.java
|
||||
ai/individual/SinWardens.java
|
||||
ai/individual/Valakas.java
|
||||
@ -189,11 +198,6 @@ hellbound/HellboundLoader.java
|
||||
# Quests Section
|
||||
quests/QuestMasterHandler.java
|
||||
quests/TerritoryWarScripts/TerritoryWarSuperClass.java
|
||||
#quests/335_TheSongOfTheHunter/__init__.py
|
||||
#quests/348_ArrogantSearch/__init__.py
|
||||
#quests/384_WarehouseKeepersPastime/__init__.py
|
||||
#quests/620_FourGoblets/__init__.py
|
||||
#quests/663_SeductiveWhispers/__init__.py
|
||||
|
||||
# Features
|
||||
features/SkillTransfer/SkillTransfer.java
|
||||
|
122
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/BlackdaggerWing.java
vendored
Normal file
122
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/BlackdaggerWing.java
vendored
Normal file
@ -0,0 +1,122 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.individual;
|
||||
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Blackdagger Wing AI.
|
||||
* @author Zoey76
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public class BlackdaggerWing extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int BLACKDAGGER_WING = 25721;
|
||||
// Skills
|
||||
private static final SkillHolder POWER_STRIKE = new SkillHolder(6833, 1);
|
||||
private static final SkillHolder RANGE_MAGIC_ATTACK = new SkillHolder(6834, 1);
|
||||
// Variables
|
||||
private static final String MID_HP_FLAG = "MID_HP_FLAG";
|
||||
private static final String POWER_STRIKE_CAST_COUNT = "POWER_STRIKE_CAST_COUNT";
|
||||
// Timers
|
||||
private static final String DAMAGE_TIMER = "DAMAGE_TIMER";
|
||||
// Misc
|
||||
private static final int MAX_CHASE_DIST = 2500;
|
||||
private static final double MID_HP_PERCENTAGE = 0.50;
|
||||
|
||||
public BlackdaggerWing()
|
||||
{
|
||||
super(BlackdaggerWing.class.getSimpleName(), "ai/individual");
|
||||
addAttackId(BLACKDAGGER_WING);
|
||||
addSeeCreatureId(BLACKDAGGER_WING);
|
||||
addSpellFinishedId(BLACKDAGGER_WING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
if (Util.calculateDistance(npc, npc.getSpawn(), false, false) > MAX_CHASE_DIST)
|
||||
{
|
||||
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
|
||||
}
|
||||
|
||||
if ((npc.getCurrentHp() < (npc.getMaxHp() * MID_HP_PERCENTAGE)) && !npc.getVariables().getBoolean(MID_HP_FLAG, false))
|
||||
{
|
||||
npc.getVariables().set(MID_HP_FLAG, true);
|
||||
startQuestTimer(DAMAGE_TIMER, 10000, npc, attacker);
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSeeCreature(L2Npc npc, L2Character creature, boolean isSummon)
|
||||
{
|
||||
if (npc.getVariables().getBoolean(MID_HP_FLAG, false))
|
||||
{
|
||||
final L2Character mostHated = ((L2Attackable) npc).getMostHated();
|
||||
if ((mostHated != null) && mostHated.isPlayer() && (mostHated != creature))
|
||||
{
|
||||
if (getRandom(5) < 1)
|
||||
{
|
||||
addSkillCastDesire(npc, creature, RANGE_MAGIC_ATTACK, 99999);
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
if (skill.getId() == POWER_STRIKE.getSkillId())
|
||||
{
|
||||
npc.getVariables().set(POWER_STRIKE_CAST_COUNT, npc.getVariables().getInt(POWER_STRIKE_CAST_COUNT) + 1);
|
||||
if (npc.getVariables().getInt(POWER_STRIKE_CAST_COUNT) > 3)
|
||||
{
|
||||
addSkillCastDesire(npc, player, RANGE_MAGIC_ATTACK, 99999);
|
||||
npc.getVariables().set(POWER_STRIKE_CAST_COUNT, 0);
|
||||
}
|
||||
}
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (DAMAGE_TIMER.equals(event))
|
||||
{
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK);
|
||||
startQuestTimer(DAMAGE_TIMER, 30000, npc, player);
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new BlackdaggerWing();
|
||||
}
|
||||
}
|
136
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/BleedingFly.java
vendored
Normal file
136
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/BleedingFly.java
vendored
Normal file
@ -0,0 +1,136 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.individual;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Bleeding Fly AI.
|
||||
* @author Zoey76
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public class BleedingFly extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int BLEEDING_FLY = 25720;
|
||||
private static final int PARASITIC_LEECH = 25734;
|
||||
// Skills
|
||||
private static final SkillHolder SUMMON_PARASITE_LEECH = new SkillHolder(6832, 1);
|
||||
private static final SkillHolder NPC_ACUMEN_LVL_3 = new SkillHolder(6915, 3);
|
||||
// Variables
|
||||
private static final String MID_HP_FLAG = "MID_HP_FLAG";
|
||||
private static final String LOW_HP_FLAG = "LOW_HP_FLAG";
|
||||
private static final String MID_HP_MINION_COUNT = "MID_HP_MINION_COUNT";
|
||||
private static final String LOW_HP_MINION_COUNT = "LOW_HP_MINION_COUNT";
|
||||
// Timers
|
||||
private static final String TIMER_MID_HP = "TIMER_MID_HP";
|
||||
private static final String TIMER_LOW_HP = "TIMER_LOW_HP";
|
||||
// Misc
|
||||
private static final int MAX_CHASE_DIST = 2500;
|
||||
private static final double MID_HP_PERCENTAGE = 0.50;
|
||||
private static final double MIN_HP_PERCENTAGE = 0.25;
|
||||
|
||||
public BleedingFly()
|
||||
{
|
||||
super(BleedingFly.class.getSimpleName(), "ai/individual");
|
||||
addAttackId(BLEEDING_FLY);
|
||||
addSpawnId(BLEEDING_FLY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
npc.getVariables().set(MID_HP_MINION_COUNT, 5);
|
||||
npc.getVariables().set(LOW_HP_MINION_COUNT, 10);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
if (Util.calculateDistance(npc, npc.getSpawn(), false, false) > MAX_CHASE_DIST)
|
||||
{
|
||||
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
|
||||
}
|
||||
|
||||
if ((npc.getCurrentHp() < (npc.getMaxHp() * MID_HP_PERCENTAGE)) && !npc.getVariables().getBoolean(MID_HP_FLAG, false))
|
||||
{
|
||||
npc.getVariables().set(MID_HP_FLAG, true);
|
||||
startQuestTimer(TIMER_MID_HP, 1000, npc, null);
|
||||
}
|
||||
|
||||
if ((npc.getCurrentHp() < (npc.getMaxHp() * MIN_HP_PERCENTAGE)) && !npc.getVariables().getBoolean(LOW_HP_FLAG, false))
|
||||
{
|
||||
npc.getVariables().set(MID_HP_FLAG, false);
|
||||
npc.getVariables().set(LOW_HP_FLAG, true);
|
||||
startQuestTimer(TIMER_LOW_HP, 1000, npc, null);
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (npc.isDead())
|
||||
{
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
if (TIMER_MID_HP.equals(event))
|
||||
{
|
||||
if (npc.getVariables().getInt(MID_HP_MINION_COUNT) > 0)
|
||||
{
|
||||
npc.getVariables().set(MID_HP_MINION_COUNT, npc.getVariables().getInt(MID_HP_MINION_COUNT) - 1);
|
||||
addSkillCastDesire(npc, npc, SUMMON_PARASITE_LEECH, 99999);
|
||||
addSpawn(PARASITIC_LEECH, npc.getX() + getRandom(150), npc.getY() + getRandom(150), npc.getZ(), npc.getHeading(), false, 0);
|
||||
addSpawn(PARASITIC_LEECH, npc.getX() + getRandom(150), npc.getY() + getRandom(150), npc.getZ(), npc.getHeading(), false, 0);
|
||||
|
||||
if (npc.getVariables().getBoolean(MID_HP_FLAG, false))
|
||||
{
|
||||
startQuestTimer(TIMER_MID_HP, 140000, npc, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (TIMER_LOW_HP.equals(event))
|
||||
{
|
||||
if (npc.getVariables().getInt(LOW_HP_MINION_COUNT) > 0)
|
||||
{
|
||||
npc.getVariables().set(LOW_HP_MINION_COUNT, npc.getVariables().getInt(LOW_HP_MINION_COUNT) - 1);
|
||||
addSkillCastDesire(npc, npc, SUMMON_PARASITE_LEECH, 99999);
|
||||
addSkillCastDesire(npc, npc, NPC_ACUMEN_LVL_3, 99999);
|
||||
addSpawn(PARASITIC_LEECH, npc.getX() + getRandom(150), npc.getY() + getRandom(150), npc.getZ(), npc.getHeading(), false, 0);
|
||||
addSpawn(PARASITIC_LEECH, npc.getX() + getRandom(150), npc.getY() + getRandom(150), npc.getZ(), npc.getHeading(), false, 0);
|
||||
|
||||
if (npc.getVariables().getBoolean(LOW_HP_FLAG, false))
|
||||
{
|
||||
startQuestTimer(TIMER_LOW_HP, 80000, npc, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new BleedingFly();
|
||||
}
|
||||
}
|
68
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/DustRider.java
vendored
Normal file
68
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/DustRider.java
vendored
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.individual;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Dust Rider AI.
|
||||
* @author Zoey76
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public class DustRider extends AbstractNpcAI
|
||||
{
|
||||
private static final int DUST_RIDER = 25719;
|
||||
// Skills
|
||||
private static final SkillHolder NPC_HASTE_LVL_3 = new SkillHolder(6914, 3);
|
||||
// Variables
|
||||
private static final String CAST_FLAG = "CAST_FLAG";
|
||||
// Misc
|
||||
private static final int MAX_CHASE_DIST = 2500;
|
||||
private static final double MIN_HP_PERCENTAGE = 0.30;
|
||||
|
||||
public DustRider()
|
||||
{
|
||||
super(DustRider.class.getSimpleName(), "ai/individual");
|
||||
addAttackId(DUST_RIDER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
if (Util.calculateDistance(npc, npc.getSpawn(), false, false) > MAX_CHASE_DIST)
|
||||
{
|
||||
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
|
||||
}
|
||||
|
||||
if (!npc.getVariables().getBoolean(CAST_FLAG, false) && (npc.getCurrentHp() < (npc.getMaxHp() * MIN_HP_PERCENTAGE)))
|
||||
{
|
||||
npc.getVariables().set(CAST_FLAG, true);
|
||||
addSkillCastDesire(npc, npc, NPC_HASTE_LVL_3, 99999);
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new DustRider();
|
||||
}
|
||||
}
|
134
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/EmeraldHorn.java
vendored
Normal file
134
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/EmeraldHorn.java
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.individual;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Emerald Horn AI.
|
||||
* @author Zoey76
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public class EmeraldHorn extends AbstractNpcAI
|
||||
{
|
||||
private static final int EMERALD_HORN = 25718;
|
||||
// Skills
|
||||
private static final SkillHolder REFLECT_ATTACK = new SkillHolder(6823, 1);
|
||||
private static final SkillHolder PIERCING_STORM = new SkillHolder(6824, 1);
|
||||
private static final SkillHolder BLEED_LVL_1 = new SkillHolder(6825, 1);
|
||||
private static final SkillHolder BLEED_LVL_2 = new SkillHolder(6825, 2);
|
||||
// Variables
|
||||
private static final String HIGH_DAMAGE_FLAG = "HIGH_DAMAGE_FLAG";
|
||||
private static final String TOTAL_DAMAGE_COUNT = "TOTAL_DAMAGE_COUNT";
|
||||
private static final String CAST_FLAG = "CAST_FLAG";
|
||||
// Timers
|
||||
private static final String DAMAGE_TIMER_15S = "DAMAGE_TIMER_15S";
|
||||
// Misc
|
||||
private static final int MAX_CHASE_DIST = 2500;
|
||||
|
||||
public EmeraldHorn()
|
||||
{
|
||||
super(EmeraldHorn.class.getSimpleName(), "ai/individual");
|
||||
addAttackId(EMERALD_HORN);
|
||||
addSpellFinishedId(EMERALD_HORN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
if (Util.calculateDistance(npc, npc.getSpawn(), false, false) > MAX_CHASE_DIST)
|
||||
{
|
||||
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
|
||||
}
|
||||
|
||||
if (npc.isAffectedBySkill(REFLECT_ATTACK.getSkillId()))
|
||||
{
|
||||
if (npc.getVariables().getBoolean(CAST_FLAG, false))
|
||||
{
|
||||
npc.getVariables().set(TOTAL_DAMAGE_COUNT, npc.getVariables().getInt(TOTAL_DAMAGE_COUNT) + damage);
|
||||
}
|
||||
}
|
||||
|
||||
if (npc.getVariables().getInt(TOTAL_DAMAGE_COUNT) > 5000)
|
||||
{
|
||||
addSkillCastDesire(npc, attacker, BLEED_LVL_2, 99999);
|
||||
npc.getVariables().set(TOTAL_DAMAGE_COUNT, 0);
|
||||
npc.getVariables().set(CAST_FLAG, false);
|
||||
npc.getVariables().set(HIGH_DAMAGE_FLAG, true);
|
||||
}
|
||||
|
||||
if (npc.getVariables().getInt(TOTAL_DAMAGE_COUNT) > 10000)
|
||||
{
|
||||
addSkillCastDesire(npc, attacker, BLEED_LVL_1, 99999);
|
||||
npc.getVariables().set(TOTAL_DAMAGE_COUNT, 0);
|
||||
npc.getVariables().set(CAST_FLAG, false);
|
||||
npc.getVariables().set(HIGH_DAMAGE_FLAG, true);
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
|
||||
{
|
||||
if (getRandom(5) < 1)
|
||||
{
|
||||
npc.getVariables().set(TOTAL_DAMAGE_COUNT, 0);
|
||||
npc.getVariables().set(CAST_FLAG, true);
|
||||
addSkillCastDesire(npc, npc, REFLECT_ATTACK, 99999);
|
||||
startQuestTimer(DAMAGE_TIMER_15S, 15 * 1000, npc, player);
|
||||
}
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (DAMAGE_TIMER_15S.equals(event))
|
||||
{
|
||||
if (!npc.getVariables().getBoolean(HIGH_DAMAGE_FLAG, false))
|
||||
{
|
||||
final L2Character mostHated = ((L2Attackable) npc).getMostHated();
|
||||
if (mostHated != null)
|
||||
{
|
||||
if (mostHated.isDead())
|
||||
{
|
||||
((L2Attackable) npc).stopHating(mostHated);
|
||||
}
|
||||
else
|
||||
{
|
||||
addSkillCastDesire(npc, mostHated, PIERCING_STORM, 99999);
|
||||
}
|
||||
}
|
||||
}
|
||||
npc.getVariables().set(CAST_FLAG, false);
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new EmeraldHorn();
|
||||
}
|
||||
}
|
112
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/MuscleBomber.java
vendored
Normal file
112
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/MuscleBomber.java
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.individual;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Muscle Bomber AI.
|
||||
* @author Zoey76
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public class MuscleBomber extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int MUSCLE_BOMBER = 25724;
|
||||
private static final int DRAKOS_ASSASSIN = 22823;
|
||||
// Skills
|
||||
private static final SkillHolder ENHANCE_LVL_1 = new SkillHolder(6842, 1);
|
||||
private static final SkillHolder ENHANCE_LVL_2 = new SkillHolder(6842, 2);
|
||||
// Variables
|
||||
private static final String HIGH_HP_FLAG = "HIGH_HP_FLAG";
|
||||
private static final String MED_HP_FLAG = "MED_HP_FLAG";
|
||||
private static final String LIMIT_FLAG = "LIMIT_FLAG";
|
||||
// Timers
|
||||
private static final String TIMER_SUMMON = "TIMER_SUMMON";
|
||||
private static final String TIMER_LIMIT = "TIMER_LIMIT";
|
||||
// Misc
|
||||
private static final int MAX_CHASE_DIST = 2500;
|
||||
private static final double HIGH_HP_PERCENTAGE = 0.80;
|
||||
private static final double MED_HP_PERCENTAGE = 0.50;
|
||||
|
||||
public MuscleBomber()
|
||||
{
|
||||
super(MuscleBomber.class.getSimpleName(), "ai/individual");
|
||||
addAttackId(MUSCLE_BOMBER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
if (Util.calculateDistance(npc, npc.getSpawn(), false, false) > MAX_CHASE_DIST)
|
||||
{
|
||||
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
|
||||
}
|
||||
|
||||
if ((npc.getCurrentHp() < (npc.getMaxHp() * HIGH_HP_PERCENTAGE)) && !npc.getVariables().getBoolean(HIGH_HP_FLAG, false))
|
||||
{
|
||||
npc.getVariables().set(HIGH_HP_FLAG, true);
|
||||
addSkillCastDesire(npc, npc, ENHANCE_LVL_1, 99999);
|
||||
}
|
||||
|
||||
if ((npc.getCurrentHp() < (npc.getMaxHp() * MED_HP_PERCENTAGE)) && !npc.getVariables().getBoolean(MED_HP_FLAG, false))
|
||||
{
|
||||
npc.getVariables().set(MED_HP_FLAG, true);
|
||||
addSkillCastDesire(npc, npc, ENHANCE_LVL_2, 99999);
|
||||
startQuestTimer(TIMER_SUMMON, 60000, npc, attacker);
|
||||
startQuestTimer(TIMER_LIMIT, 300000, npc, attacker);
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case TIMER_LIMIT:
|
||||
{
|
||||
npc.getVariables().set(LIMIT_FLAG, true);
|
||||
break;
|
||||
}
|
||||
case TIMER_SUMMON:
|
||||
{
|
||||
if (!npc.isDead() && !npc.getVariables().getBoolean(LIMIT_FLAG, false))
|
||||
{
|
||||
if (player != null)
|
||||
{
|
||||
addAttackDesire(addSpawn(DRAKOS_ASSASSIN, npc.getX() + getRandom(100), npc.getY() + getRandom(10), npc.getZ(), npc.getHeading(), false, 0), player);
|
||||
addAttackDesire(addSpawn(DRAKOS_ASSASSIN, npc.getX() + getRandom(100), npc.getY() + getRandom(10), npc.getZ(), npc.getHeading(), false, 0), player);
|
||||
}
|
||||
startQuestTimer(TIMER_SUMMON, 60000, npc, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new MuscleBomber();
|
||||
}
|
||||
}
|
134
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/ShadowSummoner.java
vendored
Normal file
134
L2J_Mobius_HighFive/dist/game/data/scripts/ai/individual/ShadowSummoner.java
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.individual;
|
||||
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Shadow Summoner AI.
|
||||
* @author Zoey76
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public class ShadowSummoner extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int SHADOW_SUMMONER = 25722;
|
||||
private static final int DEMONS_BANQUET_1 = 25730;
|
||||
private static final int DEMONS_BANQUET_2 = 25731;
|
||||
// Skills
|
||||
private static final SkillHolder SUMMON_SKELETON = new SkillHolder(6835, 1);
|
||||
// Variables
|
||||
private static final String LOW_HP_FLAG = "LOW_HP_FLAG";
|
||||
private static final String LIMIT_FLAG = "LIMIT_FLAG";
|
||||
// Timers
|
||||
private static final String SUMMON_TIMER = "SUMMON_TIMER";
|
||||
private static final String FEED_TIMER = "FEED_TIMER";
|
||||
private static final String LIMIT_TIMER = "LIMIT_TIMER";
|
||||
private static final String DELAY_TIMER = "DELAY_TIMER";
|
||||
// Misc
|
||||
private static final int MAX_CHASE_DIST = 2500;
|
||||
private static final double MIN_HP_PERCENTAGE = 0.25;
|
||||
|
||||
public ShadowSummoner()
|
||||
{
|
||||
super(ShadowSummoner.class.getSimpleName(), "ai/individual");
|
||||
addAttackId(SHADOW_SUMMONER);
|
||||
addSeeCreatureId(SHADOW_SUMMONER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
if (Util.calculateDistance(npc, npc.getSpawn(), false, false) > MAX_CHASE_DIST)
|
||||
{
|
||||
npc.teleToLocation(npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ());
|
||||
}
|
||||
|
||||
if ((npc.getCurrentHp() < (npc.getMaxHp() * MIN_HP_PERCENTAGE)) && !npc.getVariables().getBoolean(LOW_HP_FLAG, false))
|
||||
{
|
||||
npc.getVariables().set(LOW_HP_FLAG, true);
|
||||
startQuestTimer(SUMMON_TIMER, 1000, npc, attacker);
|
||||
startQuestTimer(FEED_TIMER, 30000, npc, attacker);
|
||||
startQuestTimer(LIMIT_TIMER, 600000, npc, attacker);
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSeeCreature(L2Npc npc, L2Character creature, boolean isSummon)
|
||||
{
|
||||
if (!creature.isPlayer())
|
||||
{
|
||||
if (creature.getId() == DEMONS_BANQUET_2)
|
||||
{
|
||||
((L2Attackable) npc).clearAggroList();
|
||||
addAttackDesire(npc, creature, 99999);
|
||||
}
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (npc.isDead())
|
||||
{
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
if (SUMMON_TIMER.equals(event))
|
||||
{
|
||||
if (!npc.getVariables().getBoolean(LIMIT_FLAG, false))
|
||||
{
|
||||
startQuestTimer(DELAY_TIMER, 5000, npc, player);
|
||||
startQuestTimer(SUMMON_TIMER, 30000, npc, player);
|
||||
}
|
||||
}
|
||||
else if (FEED_TIMER.equals(event))
|
||||
{
|
||||
if (!npc.getVariables().getBoolean(LIMIT_FLAG, false))
|
||||
{
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK);
|
||||
startQuestTimer(FEED_TIMER, 30000, npc, player);
|
||||
}
|
||||
}
|
||||
else if (LIMIT_TIMER.equals(event))
|
||||
{
|
||||
npc.getVariables().set(LIMIT_FLAG, true);
|
||||
}
|
||||
else if (DELAY_TIMER.equals(event))
|
||||
{
|
||||
addSkillCastDesire(npc, npc, SUMMON_SKELETON, 99999);
|
||||
final L2Npc demonsBanquet = addSpawn(getRandom(2) < 1 ? DEMONS_BANQUET_1 : DEMONS_BANQUET_2, npc.getX() + 150, npc.getY() + 150, npc.getZ(), npc.getHeading(), false, 0);
|
||||
addAttackDesire(demonsBanquet, player, 10000);
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ShadowSummoner();
|
||||
}
|
||||
}
|
@ -39,13 +39,13 @@ public final class Alexandria extends AbstractNpcAI
|
||||
// Items
|
||||
private static final ItemHolder[] REQUIRED_ITEMS = new ItemHolder[]
|
||||
{
|
||||
new ItemHolder(57, 3550000),
|
||||
new ItemHolder(5094, 400),
|
||||
new ItemHolder(6471, 200),
|
||||
new ItemHolder(9814, 40),
|
||||
new ItemHolder(9815, 30),
|
||||
new ItemHolder(9816, 50),
|
||||
new ItemHolder(9817, 50),
|
||||
new ItemHolder(57, 7500000),
|
||||
new ItemHolder(5094, 50),
|
||||
new ItemHolder(6471, 25),
|
||||
new ItemHolder(9814, 4),
|
||||
new ItemHolder(9815, 3),
|
||||
new ItemHolder(9816, 5),
|
||||
new ItemHolder(9817, 5),
|
||||
};
|
||||
// Agathions
|
||||
private static final QuestItemHolder[] LITTLE_DEVILS = new QuestItemHolder[]
|
||||
@ -97,7 +97,7 @@ public final class Alexandria extends AbstractNpcAI
|
||||
for (QuestItemHolder agathion : AGATHIONS.get(event))
|
||||
{
|
||||
chance3 += agathion.getChance();
|
||||
if ((chance >= chance2) && (chance2 < chance3))
|
||||
if ((chance2 <= chance) && (chance < chance3))
|
||||
{
|
||||
if (takeAllItems(player, REQUIRED_ITEMS))
|
||||
{
|
||||
|
8
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-01.htm
vendored
Normal file
8
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-01.htm
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<html><body>Asamah:<br>
|
||||
I am Asamah, son of Mushika, chief of the Elroki tribe. These are our lands. In them lies perhaps our last hope to return to our ancient ancestral home. But these days are evil, and our hope is waning before this threat.<br>
|
||||
Our strength has run out like water from a broken pot, and although my ancestors would be shamed to ask for aid, I believe only an outsider like yourself can save us now.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a><br>
|
||||
<a action="bypass -h Quest Asamah 32115-03.htm">Find out how to use the capture skill.</a><br>
|
||||
<a action="bypass -h npc_%objectId%_multisell 577">Equip the trap.</a><br>
|
||||
<a action="bypass -h npc_%objectId%_multisell 578">Buy</a>
|
||||
</body></html>
|
7
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-02.htm
vendored
Normal file
7
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-02.htm
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>Asamah:<br>
|
||||
I am Asamah, son of Mushika, chief of the Elroki tribe. These are our lands. In them lies perhaps our last hope to return to our ancient ancestral home. But these days are evil, and our hope is waning before this threat.<br>
|
||||
Our strength has run out like water from a broken pot, and although my ancestors would be shamed to ask for aid, I believe only an outsider like yourself can save us now.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a><br>
|
||||
<a action="bypass -h Quest Asamah 32115-03.htm">Find out how to use the capture skill.</a><br>
|
||||
<a action="bypass -h npc_%objectId%_multisell 578">Buy</a>
|
||||
</body></html>
|
6
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-03.htm
vendored
Normal file
6
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-03.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Asamah:<br>
|
||||
If you have a trap, then you may use at least 3 types of capture skills. You can only use a capture skill on the predatory Tyrannosaurus.<br>
|
||||
If you are capturing a Tyrannosaurus for the first time, you will use the <font color="LEVEL">Kabokula</font> technique most among the three capture skills. But you cannot completely capture this powerful predatory dinosaur with just one skill type!<br>
|
||||
At this point, watch the Tyrannosaurus' reactions and use the proper skill to maintain its state of captivity. Nothing is a better teacher than your own experience, but since you have come all this way, I will tell you the traditional capture method of the Elkrohki. Listen carefully.<br>
|
||||
<a action="bypass -h Quest Asamah 32115-04.htm">Next.</a>
|
||||
</body></html>
|
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-04.htm
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/32115-04.htm
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Asamah:<br>
|
||||
You must know which action to use when a Tyrannosaurus tries to cancel a capture skill. When the beast <font color="LEVEL">roars, shakes and writhes</font>, the appropriate capture skills to use are <font color="LEVEL">kabokula, tapirawa and shabonoba</font>. Watch each action of the Tyrannosaurus carefully and respond with the correct skill.<br>
|
||||
Remember that using a capture skill consumes both capture stones and MP. Be sure to prepare enough of them both! May Shilen bless your efforts!
|
||||
</body></html>
|
65
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/Asamah.java
vendored
Normal file
65
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Asamah/Asamah.java
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.npc.Asamah;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
import quests.Q00111_ElrokianHuntersProof.Q00111_ElrokianHuntersProof;
|
||||
|
||||
/**
|
||||
* Asamah AI.
|
||||
* @author Adry_85
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public final class Asamah extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int ASAMAH = 32115;
|
||||
|
||||
public Asamah()
|
||||
{
|
||||
super(Asamah.class.getSimpleName(), "ai/npc");
|
||||
addFirstTalkId(ASAMAH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
if (event.equals("32115-03.htm") || event.equals("32115-04.htm"))
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final QuestState st = player.getQuestState(Q00111_ElrokianHuntersProof.class.getSimpleName());
|
||||
return ((st != null) && (st.isCompleted())) ? "32115-01.htm" : "32115-02.htm";
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Asamah();
|
||||
}
|
||||
}
|
3
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/DragonVortex/32871-02.html
vendored
Normal file
3
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/DragonVortex/32871-02.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Dragon Vortex:<br>
|
||||
You can't summon the monster this soon. Please wait a little.
|
||||
</body></html>
|
@ -1,3 +0,0 @@
|
||||
<html><body>Dragon Vortex:<br>
|
||||
No high commanding dragon can be summoned at this time, since they are already summoned.
|
||||
</body></html>
|
@ -1,5 +1,6 @@
|
||||
<html><body>Dragon Vortex:<br>
|
||||
A mysterious vortex which has the power to summon one of Antharas's high commanding dragons. To call forth one of these creatures you must use a <font color="LEVEL">Large Dragon Bone</font> to entice it.<br>
|
||||
Summoned Dragons: <font color="LEVEL">Emerald Horn, Dust Rider, Bleeding Fly, Blackdagger Wing, Shadow Summoner, Spike Slasher, & Muscle Bomber</font><br>
|
||||
<a action="bypass -h Quest DragonVortex Spawn">Use a Large Dragon Bone</a>
|
||||
A mysterious vortex which has the power to summon one of Antharas' high commanding dragons.<br>
|
||||
To call forth one of these creatures, you must use a <font color="LEVEL">Large Dragon Bone</font>.<br>
|
||||
Dragons to be summoned: <font color="LEVEL">Emerald Horn Dust Rider Bleeding Fly Blackdagger Wing Shadow Summoner Spike Slasher Muscle Bomber</font><br>
|
||||
<a action="bypass -h Quest DragonVortex RAIDBOSS">Use a Large Dragon Bone</a>
|
||||
</body></html>
|
@ -16,11 +16,7 @@
|
||||
*/
|
||||
package ai.npc.DragonVortex;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jmobius.gameserver.datatables.SpawnTable;
|
||||
import com.l2jmobius.gameserver.model.L2Spawn;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
|
||||
@ -28,158 +24,131 @@ import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Dragon Vortex AI.
|
||||
* @author UnAfraid, improved by Adry_85 & DreamStage
|
||||
* @author Adry_85
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public final class DragonVortex extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int VORTEX = 32871;
|
||||
private static final int DRAGON_VORTEX = 32871;
|
||||
// Raids
|
||||
private static final int[][] RAIDS =
|
||||
{
|
||||
{
|
||||
25718, // Emerald Horn 29.2%
|
||||
292
|
||||
},
|
||||
{
|
||||
25719, // Dust Rider 22.4%
|
||||
224
|
||||
},
|
||||
{
|
||||
25720, // Bleeding Fly 17.6%
|
||||
176
|
||||
},
|
||||
{
|
||||
25721, // Blackdagger Wing 11.6%
|
||||
116
|
||||
},
|
||||
{
|
||||
25723, // Spike Slasher 9.2%
|
||||
92
|
||||
},
|
||||
{
|
||||
25722, // Shadow Summoner 5.6%
|
||||
56
|
||||
},
|
||||
{
|
||||
25724, // Muscle Bomber 4.4%
|
||||
44
|
||||
}
|
||||
};
|
||||
private static final int EMERALD_HORN = 25718;
|
||||
private static final int DUST_RIDER = 25719;
|
||||
private static final int BLEEDING_FLY = 25720;
|
||||
private static final int BLACKDAGGER_WING = 25721;
|
||||
private static final int SHADOW_SUMMONER = 25722;
|
||||
private static final int SPIKE_SLASHER = 25723;
|
||||
private static final int MUSCLE_BOMBER = 25724;
|
||||
// Item
|
||||
private static final int LARGE_DRAGON_BONE = 17248;
|
||||
// Misc
|
||||
private static final int DESPAWN_DELAY = 1800000; // 30min
|
||||
// Variables
|
||||
private static final String I_QUEST0 = "I_QUEST0";
|
||||
// Locations
|
||||
private static final Location SPOT_1 = new Location(92744, 114045, -3072);
|
||||
private static final Location SPOT_2 = new Location(110112, 124976, -3624);
|
||||
private static final Location SPOT_3 = new Location(121637, 113657, -3792);
|
||||
private static final Location SPOT_4 = new Location(109346, 111849, -3040);
|
||||
|
||||
private DragonVortex()
|
||||
{
|
||||
super(DragonVortex.class.getSimpleName(), "ai/npc");
|
||||
addStartNpc(VORTEX);
|
||||
addFirstTalkId(VORTEX);
|
||||
addTalkId(VORTEX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
return "32871.html";
|
||||
addStartNpc(DRAGON_VORTEX);
|
||||
addFirstTalkId(DRAGON_VORTEX);
|
||||
addTalkId(DRAGON_VORTEX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if ("Spawn".equals(event))
|
||||
switch (event)
|
||||
{
|
||||
if (hasQuestItems(player, LARGE_DRAGON_BONE))
|
||||
case "RAIDBOSS":
|
||||
{
|
||||
final int chance = getRandom(1000);
|
||||
final List<int[]> unspawnedRaids = new ArrayList<>();
|
||||
final List<int[]> unspawnedCandidates = new ArrayList<>();
|
||||
int raidChanceIncrease = 0;
|
||||
|
||||
// Iterate over all Raids and check which ones are currently spawned, sum spawned Raids chance for unspawnedRaids List distribution
|
||||
for (int[] raidsList : RAIDS)
|
||||
if (hasQuestItems(player, LARGE_DRAGON_BONE))
|
||||
{
|
||||
final int raidChance = raidsList[1];
|
||||
if (checkIfNpcSpawned(raidsList[0]))
|
||||
if (!npc.getVariables().getBoolean(I_QUEST0, false))
|
||||
{
|
||||
raidChanceIncrease += raidChance;
|
||||
takeItems(player, LARGE_DRAGON_BONE, 1);
|
||||
final int random = getRandom(100);
|
||||
int raid = 0;
|
||||
if (random < 3)
|
||||
{
|
||||
raid = MUSCLE_BOMBER;
|
||||
}
|
||||
else if (random < 8)
|
||||
{
|
||||
raid = SHADOW_SUMMONER;
|
||||
}
|
||||
else if (random < 15)
|
||||
{
|
||||
raid = SPIKE_SLASHER;
|
||||
}
|
||||
else if (random < 25)
|
||||
{
|
||||
raid = BLACKDAGGER_WING;
|
||||
}
|
||||
else if (random < 45)
|
||||
{
|
||||
raid = BLEEDING_FLY;
|
||||
}
|
||||
else if (random < 67)
|
||||
{
|
||||
raid = DUST_RIDER;
|
||||
}
|
||||
else
|
||||
{
|
||||
raid = EMERALD_HORN;
|
||||
}
|
||||
|
||||
Location LOC = null;
|
||||
switch (npc.getX())
|
||||
{
|
||||
case 92225:
|
||||
{
|
||||
LOC = SPOT_1;
|
||||
break;
|
||||
}
|
||||
case 110116:
|
||||
{
|
||||
LOC = SPOT_2;
|
||||
break;
|
||||
}
|
||||
case 121172:
|
||||
{
|
||||
LOC = SPOT_3;
|
||||
break;
|
||||
}
|
||||
case 108924:
|
||||
{
|
||||
LOC = SPOT_4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
npc.getVariables().set(I_QUEST0, true);
|
||||
addSpawn(raid, LOC, false, 0, true);
|
||||
startQuestTimer("CANSPAWN", 60000, npc, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
unspawnedRaids.add(new int[]
|
||||
{
|
||||
raidsList[0],
|
||||
raidChance
|
||||
});
|
||||
return "32871-02.html";
|
||||
}
|
||||
}
|
||||
|
||||
// If there are unspawnedRaids onto the new List, distribute the amount of increased chances for each one and spawn a new Raid from the new chances
|
||||
if (!unspawnedRaids.isEmpty())
|
||||
else
|
||||
{
|
||||
final int unspawnedRaidsSize = unspawnedRaids.size();
|
||||
final int chanceIncrease = (raidChanceIncrease / unspawnedRaidsSize);
|
||||
int raidChanceValue = 0;
|
||||
|
||||
for (int[] unspawnedRaidsList : unspawnedRaids)
|
||||
{
|
||||
raidChanceValue += unspawnedRaidsList[1] + chanceIncrease;
|
||||
unspawnedCandidates.add(new int[]
|
||||
{
|
||||
unspawnedRaidsList[0],
|
||||
raidChanceValue
|
||||
});
|
||||
}
|
||||
|
||||
for (int[] unspawnedCandidatesList : unspawnedCandidates)
|
||||
{
|
||||
if (chance <= unspawnedCandidatesList[1])
|
||||
{
|
||||
spawnRaid(unspawnedCandidatesList[0], npc, player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return "32871-01.html";
|
||||
}
|
||||
return "32871-noboss.html";
|
||||
break;
|
||||
}
|
||||
case "CANSPAWN":
|
||||
{
|
||||
npc.getVariables().set(I_QUEST0, false);
|
||||
break;
|
||||
}
|
||||
return "32871-no.html";
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used for spawning a Dragon Vortex Raid and take a Large Dragon Bone from the Player
|
||||
* @param raidId
|
||||
* @param npc
|
||||
* @param player
|
||||
*/
|
||||
public void spawnRaid(int raidId, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final L2Spawn spawnDat = addSpawn(raidId, npc.getX() + getRandom(-500, 500), npc.getY() + getRandom(-500, 500), npc.getZ() + 10, 0, false, DESPAWN_DELAY, true).getSpawn();
|
||||
SpawnTable.getInstance().addNewSpawn(spawnDat, false);
|
||||
takeItems(player, LARGE_DRAGON_BONE, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used for checking if npc is spawned
|
||||
* @param npcId
|
||||
* @return if npc is spawned
|
||||
*/
|
||||
public boolean checkIfNpcSpawned(int npcId)
|
||||
{
|
||||
for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(npcId))
|
||||
{
|
||||
final L2Npc spawnedWarpgate = spawn.getLastSpawn();
|
||||
if ((spawnedWarpgate != null))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new DragonVortex();
|
||||
|
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-01.html
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-01.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>
|
||||
(This one is different than the ones I saw before. This one is isolated, and somehow sad looking.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Look around.</a>
|
||||
</body></html>
|
3
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-02.html
vendored
Normal file
3
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-02.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>
|
||||
(It's a stone statue that looks like a human being. Otherwise it looks normal.)
|
||||
</body></html>
|
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-03.html
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-03.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>
|
||||
(This is Kier, a member of Jinia Guild who was turned into an ice sculpture by the Ice Queen Freya.)<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Look around the ice sculpture.</a>
|
||||
</body></html>
|
3
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-04.html
vendored
Normal file
3
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/32022-04.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>
|
||||
(A former member of the Jinia Guild. Now he's an ice sculpture of Kier by the Ice Queen.)
|
||||
</body></html>
|
76
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/Kier.java
vendored
Normal file
76
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Kier/Kier.java
vendored
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.npc.Kier;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
import quests.Q00115_TheOtherSideOfTruth.Q00115_TheOtherSideOfTruth;
|
||||
import quests.Q10283_RequestOfIceMerchant.Q10283_RequestOfIceMerchant;
|
||||
|
||||
/**
|
||||
* Kier AI.
|
||||
* @author Adry_85
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public final class Kier extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int KIER = 32022;
|
||||
|
||||
private Kier()
|
||||
{
|
||||
super(Kier.class.getSimpleName(), "ai/npc");
|
||||
addFirstTalkId(KIER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState st_Q00115 = player.getQuestState(Q00115_TheOtherSideOfTruth.class.getSimpleName());
|
||||
if (st_Q00115 == null)
|
||||
{
|
||||
htmltext = "32022-02.html";
|
||||
}
|
||||
else if (!st_Q00115.isCompleted())
|
||||
{
|
||||
htmltext = "32022-01.html";
|
||||
}
|
||||
|
||||
final QuestState st_Q10283 = player.getQuestState(Q10283_RequestOfIceMerchant.class.getSimpleName());
|
||||
if (st_Q10283 != null)
|
||||
{
|
||||
if (st_Q10283.isMemoState(2))
|
||||
{
|
||||
htmltext = "32022-03.html";
|
||||
}
|
||||
else if (st_Q10283.isCompleted())
|
||||
{
|
||||
htmltext = "32022-04.html";
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Kier();
|
||||
}
|
||||
}
|
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/32714-01.html
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/32714-01.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Gatekeeper Asher:<br>
|
||||
Since the the seal was broken, various trees on the island have begun to "leak" large amounts of Mana, drawing it out from reserves far underground.<br>
|
||||
It is now possible to regenerate MP simply by standing near some of these large trees!
|
||||
</body></html>
|
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/32714-02.html
vendored
Normal file
4
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/32714-02.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<html><body>Gatekeeper Asher:<br>
|
||||
You don't have enough money.<br>
|
||||
Teleporting to Rune Township requires 50,000 Adena.
|
||||
</body></html>
|
7
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/32714.html
vendored
Normal file
7
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/32714.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>Gatekeeper Asher:<br>
|
||||
For thousands of years, Primeval Isle had been sealed to prevent its inhabitants from leaving through this Gate. Now, however, adventurers' activities seem to have finally weakened the seal enough to permit departures.<br>
|
||||
You may now teleport to the mainland, but only to Rune Township. Would you like to do so?<br>
|
||||
<a action="bypass -h Quest Asher teleport">Teleport to Rune Township (50,000 Adena).</a><br>
|
||||
<a action="bypass -h Quest Asher 32714-01.html">Ask about the effects of the weakened seal.</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
73
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/Asher.java
vendored
Normal file
73
L2J_Mobius_HighFive/dist/game/data/scripts/ai/npc/Teleports/Asher/Asher.java
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.npc.Teleports.Asher;
|
||||
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Asher AI.
|
||||
* @author Adry_85
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public class Asher extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int ASHER = 32714;
|
||||
// Location
|
||||
private static final Location LOCATION = new Location(43835, -47749, -792);
|
||||
// Misc
|
||||
private static final int ADENA = 50000;
|
||||
|
||||
private Asher()
|
||||
{
|
||||
super(Asher.class.getSimpleName(), "ai/npc/Teleports");
|
||||
addFirstTalkId(ASHER);
|
||||
addStartNpc(ASHER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (event.equals("teleport"))
|
||||
{
|
||||
if (player.getAdena() >= ADENA)
|
||||
{
|
||||
player.teleToLocation(LOCATION);
|
||||
takeItems(player, Inventory.ADENA_ID, ADENA);
|
||||
}
|
||||
else
|
||||
{
|
||||
return "32714-02.html";
|
||||
}
|
||||
}
|
||||
else if (event.equals("32714-01.html"))
|
||||
{
|
||||
return event;
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Asher();
|
||||
}
|
||||
}
|
@ -196,6 +196,11 @@ public abstract class AbstractInstance extends AbstractNpcAI
|
||||
|
||||
protected abstract void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance);
|
||||
|
||||
protected boolean checkConditions(L2PcInstance player, int templateId)
|
||||
{
|
||||
return checkConditions(player);
|
||||
}
|
||||
|
||||
protected boolean checkConditions(L2PcInstance player)
|
||||
{
|
||||
return true;
|
||||
|
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-02.html
vendored
Normal file
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-02.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>
|
||||
One of your party members is not a member of the clan who owns the castle...
|
||||
</body></html>
|
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-03.html
vendored
Normal file
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-03.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>
|
||||
It is already in use. Once training has begun, you must wait 4 hours before entering.
|
||||
</body></html>
|
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-04.html
vendored
Normal file
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-04.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>
|
||||
You cannot enter the Prison 2 hours prior to a siege. Access will be granted once the siege ends. Also, you can't access the underground dungeon until a castle lord announces the siege after the battle.
|
||||
</body></html>
|
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-05.html
vendored
Normal file
3
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403-05.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>
|
||||
The threat to civic order in the territory is a great deal more pressing than a training session in the prison.<br> (You cannot enter the prison without a contract with the fortress.)
|
||||
</body></html>
|
6
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403.html
vendored
Normal file
6
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/36403.html
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Prison Manager:<br>
|
||||
This is a dangerous place. Don't come around here unless you're ready for a fight!<br><br>
|
||||
<a action="bypass -h npc_%objectId%_Chat 0">"I heard a rumor about Rim Pailaka."</a><br>
|
||||
<a action="bypass -h Quest CastleDungeon">"I want to enter the prison."</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
233
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/CastleDungeon.java
vendored
Normal file
233
L2J_Mobius_HighFive/dist/game/data/scripts/instances/CastleDungeon/CastleDungeon.java
vendored
Normal file
@ -0,0 +1,233 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package instances.CastleDungeon;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.entity.Castle;
|
||||
import com.l2jmobius.gameserver.model.entity.Fort;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceWorld;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* Castle Dungeon instance zone.
|
||||
* @author Adry_85
|
||||
* @since 2.6.0.0
|
||||
*/
|
||||
public final class CastleDungeon extends AbstractInstance
|
||||
{
|
||||
protected class CDWorld extends InstanceWorld
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Locations
|
||||
private static final Location[] ENTER_LOC =
|
||||
{
|
||||
new Location(12188, -48770, -3008),
|
||||
new Location(12218, -48770, -3008),
|
||||
new Location(12248, -48770, -3008),
|
||||
};
|
||||
|
||||
private static final Location RAIDS_LOC = new Location(11793, -49190, -3008, 0);
|
||||
// Misc
|
||||
private static final Map<Integer, Integer> CASTLE_DUNGEON = new HashMap<>();
|
||||
private static final Map<Integer, List<Integer>> FORTRESS = new HashMap<>();
|
||||
static
|
||||
{
|
||||
CASTLE_DUNGEON.put(36403, 13); // Gludio
|
||||
CASTLE_DUNGEON.put(36404, 14); // Dion
|
||||
CASTLE_DUNGEON.put(36405, 15); // Giran
|
||||
CASTLE_DUNGEON.put(36406, 16); // Oren
|
||||
CASTLE_DUNGEON.put(36407, 17); // Aden
|
||||
CASTLE_DUNGEON.put(36408, 18); // Innadril
|
||||
CASTLE_DUNGEON.put(36409, 19); // Goddard
|
||||
CASTLE_DUNGEON.put(36410, 20); // Rune
|
||||
CASTLE_DUNGEON.put(36411, 21); // Schuttgart
|
||||
FORTRESS.put(1, Arrays.asList(101, 102, 112, 113)); // Gludio Castle
|
||||
FORTRESS.put(2, Arrays.asList(103, 112, 114, 115)); // Dion Castle
|
||||
FORTRESS.put(3, Arrays.asList(104, 114, 116, 118, 119)); // Giran Castle
|
||||
FORTRESS.put(4, Arrays.asList(105, 113, 115, 116, 117)); // Oren Castle
|
||||
FORTRESS.put(5, Arrays.asList(106, 107, 117, 118)); // Aden Castle
|
||||
FORTRESS.put(6, Arrays.asList(108, 119)); // Innadril Castle
|
||||
FORTRESS.put(7, Arrays.asList(109, 117, 120)); // Goddard Castle
|
||||
FORTRESS.put(8, Arrays.asList(110, 120, 121)); // Rune Castle
|
||||
FORTRESS.put(9, Arrays.asList(111, 121)); // Schuttgart Castle
|
||||
}
|
||||
|
||||
// Raid Bosses
|
||||
protected static final int[] RAIDS1 =
|
||||
{
|
||||
25546, // Rhianna the Traitor
|
||||
25549, // Tesla the Deceiver
|
||||
25552, // Soul Hunter Chakundel
|
||||
};
|
||||
protected static final int[] RAIDS2 =
|
||||
{
|
||||
25553, // Durango the Crusher
|
||||
25554, // Brutus the Obstinate
|
||||
25557, // Ranger Karankawa
|
||||
25560, // Sargon the Mad
|
||||
};
|
||||
protected static final int[] RAIDS3 =
|
||||
{
|
||||
25563, // Beautiful Atrielle
|
||||
25566, // Nagen the Tomboy
|
||||
25569, // Jax the Destroyer
|
||||
};
|
||||
|
||||
public CastleDungeon()
|
||||
{
|
||||
super(CastleDungeon.class.getSimpleName());
|
||||
addFirstTalkId(CASTLE_DUNGEON.keySet());
|
||||
addStartNpc(CASTLE_DUNGEON.keySet());
|
||||
addTalkId(CASTLE_DUNGEON.keySet());
|
||||
addKillId(RAIDS1);
|
||||
addKillId(RAIDS2);
|
||||
addKillId(RAIDS3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance)
|
||||
{
|
||||
if (firstEntrance)
|
||||
{
|
||||
if (player.getParty() == null)
|
||||
{
|
||||
teleportPlayer(player, ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId());
|
||||
world.addAllowed(player.getObjectId());
|
||||
}
|
||||
else
|
||||
{
|
||||
for (L2PcInstance partyMember : player.getParty().getMembers())
|
||||
{
|
||||
teleportPlayer(partyMember, ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId());
|
||||
world.addAllowed(partyMember.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
world.setStatus(0);
|
||||
spawnRaid((CDWorld) world);
|
||||
}
|
||||
else
|
||||
{
|
||||
teleportPlayer(player, ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
return "36403.html";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
|
||||
{
|
||||
InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
|
||||
if (tmpworld instanceof CDWorld)
|
||||
{
|
||||
CDWorld world = (CDWorld) tmpworld;
|
||||
if (Util.contains(RAIDS3, npc.getId()))
|
||||
{
|
||||
finishInstance(world);
|
||||
}
|
||||
else
|
||||
{
|
||||
world.incStatus();
|
||||
spawnRaid(world);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final L2Party party = player.getParty();
|
||||
if (party == null)
|
||||
{
|
||||
return "36403-01.html";
|
||||
}
|
||||
|
||||
final Castle castle = npc.getCastle();
|
||||
if (castle.getSiege().isInProgress())
|
||||
{
|
||||
return "36403-04.html";
|
||||
}
|
||||
|
||||
if ((npc.isMyLord(player) || ((player.getClan() != null) && (npc.getCastle().getResidenceId() == player.getClan().getCastleId()) && (player.getClan().getCastleId() > 0))))
|
||||
{
|
||||
final int numFort = ((castle.getResidenceId() == 1) || (castle.getResidenceId() == 5)) ? 2 : 1;
|
||||
final List<Integer> fort = FORTRESS.get(castle.getResidenceId());
|
||||
for (int i = 0; i < numFort; i++)
|
||||
{
|
||||
final Fort fortress = FortManager.getInstance().getFortById(fort.get(i));
|
||||
if (fortress.getFortState() == 0)
|
||||
{
|
||||
return "36403-05.html";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (L2PcInstance partyMember : party.getMembers())
|
||||
{
|
||||
if ((partyMember.getClan() == null) || (partyMember.getClan().getCastleId() != castle.getResidenceId()))
|
||||
{
|
||||
return "36403-02.html";
|
||||
}
|
||||
|
||||
if (System.currentTimeMillis() < InstanceManager.getInstance().getInstanceTime(partyMember.getObjectId(), CASTLE_DUNGEON.get(npc.getId())))
|
||||
{
|
||||
return "36403-03.html";
|
||||
}
|
||||
}
|
||||
|
||||
enterInstance(player, new CDWorld(), "CastleDungeon.xml", CASTLE_DUNGEON.get(npc.getId()));
|
||||
return super.onTalk(npc, player);
|
||||
}
|
||||
|
||||
protected void spawnRaid(CDWorld world)
|
||||
{
|
||||
int spawnId;
|
||||
if (world.getStatus() == 0)
|
||||
{
|
||||
spawnId = RAIDS1[getRandom(RAIDS1.length)];
|
||||
}
|
||||
else if (world.getStatus() == 1)
|
||||
{
|
||||
spawnId = RAIDS2[getRandom(RAIDS2.length)];
|
||||
}
|
||||
else
|
||||
{
|
||||
spawnId = RAIDS3[getRandom(RAIDS3.length)];
|
||||
}
|
||||
|
||||
addSpawn(spawnId, RAIDS_LOC, false, 0, false, world.getInstanceId());
|
||||
}
|
||||
}
|
@ -27,7 +27,7 @@ import instances.AbstractInstance;
|
||||
import quests.Q10292_SevenSignsGirlOfDoubt.Q10292_SevenSignsGirlOfDoubt;
|
||||
import quests.Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom;
|
||||
import quests.Q10294_SevenSignsToTheMonasteryOfSilence.Q10294_SevenSignsToTheMonasteryOfSilence;
|
||||
import quests.Q10296_SevenSignsPowerOfTheSeal.Q10296_SevenSignsPowerOfTheSeal;
|
||||
import quests.Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal;
|
||||
|
||||
/**
|
||||
* Elcadia's Tent instance zone.
|
||||
@ -35,12 +35,17 @@ import quests.Q10296_SevenSignsPowerOfTheSeal.Q10296_SevenSignsPowerOfTheSeal;
|
||||
*/
|
||||
public final class ElcadiasTent extends AbstractInstance
|
||||
{
|
||||
protected class ETWorld extends InstanceWorld
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// NPCs
|
||||
private static final int ELCADIA = 32784;
|
||||
private static final int GRUFF_LOOKING_MAN = 32862;
|
||||
// Locations
|
||||
private static final Location START_LOC = new Location(89706, -238074, -9632, 0, 0);
|
||||
private static final Location EXIT_LOC = new Location(43316, -87986, -2832, 0, 0);
|
||||
private static final Location START_LOC = new Location(89797, -238081, -9632);
|
||||
private static final Location EXIT_LOC = new Location(43347, -87923, -2820);
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 158;
|
||||
|
||||
@ -57,17 +62,17 @@ public final class ElcadiasTent extends AbstractInstance
|
||||
{
|
||||
if (npc.getId() == GRUFF_LOOKING_MAN)
|
||||
{
|
||||
final QuestState GirlOfDoubt = talker.getQuestState(Q10292_SevenSignsGirlOfDoubt.class.getSimpleName());
|
||||
final QuestState ForbiddenBook = talker.getQuestState(Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.class.getSimpleName());
|
||||
final QuestState Monastery = talker.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName());
|
||||
final QuestState PowerOfSeal = talker.getQuestState(Q10296_SevenSignsPowerOfTheSeal.class.getSimpleName());
|
||||
if (((GirlOfDoubt != null) && GirlOfDoubt.isStarted()) //
|
||||
|| ((GirlOfDoubt != null) && GirlOfDoubt.isCompleted() && (ForbiddenBook == null)) //
|
||||
|| ((ForbiddenBook != null) && ForbiddenBook.isStarted()) //
|
||||
|| ((ForbiddenBook != null) && ForbiddenBook.isCompleted() && (Monastery == null)) //
|
||||
|| ((PowerOfSeal != null) && PowerOfSeal.isStarted()))
|
||||
final QuestState Q10292 = talker.getQuestState(Q10292_SevenSignsGirlOfDoubt.class.getSimpleName());
|
||||
final QuestState Q10293 = talker.getQuestState(Q10293_SevenSignsForbiddenBookOfTheElmoreAdenKingdom.class.getSimpleName());
|
||||
final QuestState Q10294 = talker.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName());
|
||||
final QuestState Q10296 = talker.getQuestState(Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.class.getSimpleName());
|
||||
if (((Q10292 != null) && Q10292.isStarted()) //
|
||||
|| ((Q10292 != null) && Q10292.isCompleted() && (Q10293 == null)) //
|
||||
|| ((Q10293 != null) && Q10293.isStarted()) //
|
||||
|| ((Q10293 != null) && Q10293.isCompleted() && (Q10294 == null)) //
|
||||
|| ((Q10296 != null) && (Q10296.getMemoState() > 2) && (Q10296.getMemoState() < 4)))
|
||||
{
|
||||
enterInstance(talker, "ElcadiasTent.xml", TEMPLATE_ID);
|
||||
enterInstance(talker, new ETWorld(), "ElcadiasTent.xml", TEMPLATE_ID);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -19,6 +19,7 @@ package instances;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import instances.CastleDungeon.CastleDungeon;
|
||||
import instances.CavernOfThePirateCaptain.CavernOfThePirateCaptain;
|
||||
import instances.ChambersOfDelusion.ChamberOfDelusionEast;
|
||||
import instances.ChambersOfDelusion.ChamberOfDelusionNorth;
|
||||
@ -42,12 +43,10 @@ import instances.Kamaloka.Kamaloka;
|
||||
import instances.LibraryOfSages.LibraryOfSages;
|
||||
import instances.MithrilMine.MithrilMine;
|
||||
import instances.MonasteryOfSilence1.MonasteryOfSilence1;
|
||||
import instances.MonasteryOfSilence2.MonasteryOfSilence2;
|
||||
import instances.NornilsGarden.NornilsGarden;
|
||||
import instances.NornilsGardenQuest.NornilsGardenQuest;
|
||||
import instances.PailakaDevilsLegacy.PailakaDevilsLegacy;
|
||||
import instances.PailakaSongOfIceAndFire.PailakaSongOfIceAndFire;
|
||||
import instances.RimKamaloka.RimKamaloka;
|
||||
import instances.SanctumOftheLordsOfDawn.SanctumOftheLordsOfDawn;
|
||||
|
||||
/**
|
||||
@ -60,6 +59,7 @@ public final class InstanceLoader
|
||||
|
||||
private static final Class<?>[] SCRIPTS =
|
||||
{
|
||||
CastleDungeon.class,
|
||||
CavernOfThePirateCaptain.class,
|
||||
CrystalCaverns.class,
|
||||
DarkCloudMansion.class,
|
||||
@ -83,12 +83,10 @@ public final class InstanceLoader
|
||||
LibraryOfSages.class,
|
||||
MithrilMine.class,
|
||||
MonasteryOfSilence1.class,
|
||||
MonasteryOfSilence2.class,
|
||||
NornilsGarden.class,
|
||||
NornilsGardenQuest.class,
|
||||
PailakaDevilsLegacy.class,
|
||||
PailakaSongOfIceAndFire.class,
|
||||
RimKamaloka.class,
|
||||
SanctumOftheLordsOfDawn.class,
|
||||
};
|
||||
|
||||
|
@ -1,5 +0,0 @@
|
||||
<html><html>Sister of Silence Eris:<br>
|
||||
Finally we meet, Successors of Fate. In the end, the endless Bridle of Eternity will be back where it belongs.<br>
|
||||
<a action="bypass -h Quest MonasteryOfSilence1 EXIT">"I'd like to go outside."</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
|
||||
</body></html>
|
@ -1,3 +1,3 @@
|
||||
<html><body>Teleportation Device: Move to East Watcher's Room.<br><br>
|
||||
<html><body>Teleportation Device: Move to East Watcher's Room.<br>
|
||||
<a action="bypass -h Quest MonasteryOfSilence1 EAST">Move to East Watcher's Room</a>
|
||||
</body></html>
|
@ -1,3 +1,3 @@
|
||||
<html><body>Teleportation Device: Move to West Watcher's Room.<br><br>
|
||||
<html><body>Teleportation Device: Move to West Watcher's Room.<br>
|
||||
<a action="bypass -h Quest MonasteryOfSilence1 WEST">Move to West Watcher's Room</a>
|
||||
</body></html>
|
5
L2J_Mobius_HighFive/dist/game/data/scripts/instances/MonasteryOfSilence1/32843-01.html
vendored
Normal file
5
L2J_Mobius_HighFive/dist/game/data/scripts/instances/MonasteryOfSilence1/32843-01.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Tomb of Saintess:<br>
|
||||
You look at the tomb, and see these words.<br>
|
||||
"For the Saintess Solina, who devoted all her life to serve Einhasad and the Elmoreden Kingdom...to be remembered forever by those she saved and those who loved her...may punishing find the feet of those who ignored Solina's teachings."<br>
|
||||
This is not Solina's real tomb.
|
||||
</body></html>
|
@ -16,16 +16,22 @@
|
||||
*/
|
||||
package instances.MonasteryOfSilence1;
|
||||
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceWorld;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import com.l2jmobius.gameserver.network.NpcStringId;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
import quests.Q10294_SevenSignsToTheMonasteryOfSilence.Q10294_SevenSignsToTheMonasteryOfSilence;
|
||||
import quests.Q10295_SevenSignsSolinasTomb.Q10295_SevenSignsSolinasTomb;
|
||||
import quests.Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal;
|
||||
|
||||
/**
|
||||
* Monastery of Silence instance zone.
|
||||
@ -36,6 +42,8 @@ public final class MonasteryOfSilence1 extends AbstractInstance
|
||||
protected static final class MoSWorld extends InstanceWorld
|
||||
{
|
||||
protected L2Npc elcadia = null;
|
||||
protected int deadTombGuardianCount = 0;
|
||||
protected int deadSolinaGuardianCount = 0;
|
||||
}
|
||||
|
||||
// NPCs
|
||||
@ -51,6 +59,24 @@ public final class MonasteryOfSilence1 extends AbstractInstance
|
||||
private static final int TELEPORT_CONTROL_DEVICE2 = 32818;
|
||||
private static final int TELEPORT_CONTROL_DEVICE3 = 32819;
|
||||
private static final int TELEPORT_CONTROL_DEVICE4 = 32820;
|
||||
private static final int TOMB_OF_THE_SAINTESS = 32843;
|
||||
// Monsters
|
||||
private static final int TRAINEE_OF_REST = 27403;
|
||||
private static final int SUPPLICANT_OF_REST = 27404;
|
||||
private static final int ETIS_VAN_ETINA = 18949;
|
||||
private static final int SOLINAS_GUARDIAN_1 = 18952;
|
||||
private static final int SOLINAS_GUARDIAN_2 = 18953;
|
||||
private static final int SOLINAS_GUARDIAN_3 = 18954;
|
||||
private static final int SOLINAS_GUARDIAN_4 = 18955;
|
||||
private static final int GUARDIAN_OF_THE_TOMB_1 = 18956;
|
||||
private static final int GUARDIAN_OF_THE_TOMB_2 = 18957;
|
||||
private static final int GUARDIAN_OF_THE_TOMB_3 = 18958;
|
||||
private static final int GUARDIAN_OF_THE_TOMB_4 = 18959;
|
||||
// Items
|
||||
private static final int SCROLL_OF_ABSTINENCE = 17228;
|
||||
private static final int SHIELD_OF_SACRIFICE = 17229;
|
||||
private static final int SWORD_OF_HOLY_SPIRIT = 17230;
|
||||
private static final int STAFF_OF_BLESSING = 17231;
|
||||
// Skills
|
||||
private static final SkillHolder[] BUFFS =
|
||||
{
|
||||
@ -59,28 +85,109 @@ public final class MonasteryOfSilence1 extends AbstractInstance
|
||||
new SkillHolder(6730, 1), // Greater Battle Heal of Elcadia
|
||||
};
|
||||
// Locations
|
||||
private static final Location START_LOC = new Location(120710, -86971, -3392);
|
||||
private static final Location EXIT_LOC = new Location(115983, -87351, -3397, 0, 0);
|
||||
private static final Location START_LOC = new Location(120717, -86879, -3424);
|
||||
private static final Location EXIT_LOC = new Location(115983, -87351, -3397);
|
||||
private static final Location CENTRAL_ROOM_LOC = new Location(85794, -249788, -8320);
|
||||
private static final Location SOUTH_WATCHERS_ROOM_LOC = new Location(85798, -246566, -8320);
|
||||
private static final Location WEST_WATCHERS_ROOM_LOC = new Location(82531, -249405, -8320);
|
||||
private static final Location EAST_WATCHERS_ROOM_LOC = new Location(88665, -249784, -8320);
|
||||
private static final Location NORTH_WATCHERS_ROOM_LOC = new Location(85792, -252336, -8320);
|
||||
private static final Location BACK_LOC = new Location(120710, -86971, -3392);
|
||||
// NpcString
|
||||
private static final NpcStringId[] ELCADIA_DIALOGS =
|
||||
private static final Location START_LOC_Q10295 = new Location(45545, -249423, -6788);
|
||||
private static final Location CASKET_ROOM_LOC = new Location(56033, -252944, -6792);
|
||||
private static final Location SOLINAS_RESTING_PLACE_LOC = new Location(55955, -250394, -6792);
|
||||
private static final Location DIRECTORS_ROOM_LOC = new Location(120717, -86879, -3424);
|
||||
private static final Location GUARDIAN_OF_THE_TOMB_1_LOC = new Location(55498, -252781, -6752, 0);
|
||||
private static final Location GUARDIAN_OF_THE_TOMB_2_LOC = new Location(55520, -252160, -6752, 0);
|
||||
private static final Location GUARDIAN_OF_THE_TOMB_3_LOC = new Location(56635, -252776, -6752, -32180);
|
||||
private static final Location GUARDIAN_OF_THE_TOMB_4_LOC = new Location(56672, -252156, -6754, 32252);
|
||||
private static final Location SOLINAS_GUARDIAN_1_LOC = new Location(45399, -253051, -6765, 16584);
|
||||
private static final Location SOLINAS_GUARDIAN_2_LOC = new Location(48736, -249632, -6768, -32628);
|
||||
private static final Location SOLINAS_GUARDIAN_3_LOC = new Location(45392, -246303, -6768, -16268);
|
||||
private static final Location SOLINAS_GUARDIAN_4_LOC = new Location(42016, -249648, -6764, 0);
|
||||
private static final Location ELCADIA_LOC = new Location(115927, -87005, -3392);
|
||||
private static final Location SPACE_LOC = new Location(76736, -241021, -10780);
|
||||
private static final Location ETIS_VAN_ETINA_LOC = new Location(76625, -240824, -10832, 0);
|
||||
private static final Location[] SLAVE_SPAWN_1_LOC =
|
||||
{
|
||||
new Location(55680, -252832, -6752),
|
||||
new Location(55825, -252792, -6752),
|
||||
new Location(55687, -252718, -6752),
|
||||
new Location(55824, -252679, -6752),
|
||||
};
|
||||
private static final Location[] SLAVE_SPAWN_2_LOC =
|
||||
{
|
||||
new Location(55672, -252099, -6751),
|
||||
new Location(55810, -252262, -6752),
|
||||
new Location(55824, -252112, -6752),
|
||||
new Location(55669, -252227, -6752),
|
||||
};
|
||||
private static final Location[] SLAVE_SPAWN_3_LOC =
|
||||
{
|
||||
new Location(56480, -252833, -6751),
|
||||
new Location(56481, -252725, -6752),
|
||||
new Location(56368, -252787, -6752),
|
||||
new Location(56368, -252669, -6752),
|
||||
};
|
||||
private static final Location[] SLAVE_SPAWN_4_LOC =
|
||||
{
|
||||
new Location(56463, -252225, -6751),
|
||||
new Location(56469, -252108, -6752),
|
||||
new Location(56336, -252168, -6752),
|
||||
new Location(56336, -252288, -6752),
|
||||
};
|
||||
// NpcString
|
||||
private static final NpcStringId[] ELCADIA_DIALOGS_Q010294 =
|
||||
{
|
||||
NpcStringId.IT_SEEMS_THAT_YOU_CANNOT_REMEMBER_TO_THE_ROOM_OF_THE_WATCHER_WHO_FOUND_THE_BOOK,
|
||||
NpcStringId.WE_MUST_SEARCH_HIGH_AND_LOW_IN_EVERY_ROOM_FOR_THE_READING_DESK_THAT_CONTAINS_THE_BOOK_WE_SEEK,
|
||||
NpcStringId.REMEMBER_THE_CONTENT_OF_THE_BOOKS_THAT_YOU_FOUND_YOU_CAN_T_TAKE_THEM_OUT_WITH_YOU
|
||||
NpcStringId.REMEMBER_THE_CONTENT_OF_THE_BOOKS_THAT_YOU_FOUND_YOU_CAN_T_TAKE_THEM_OUT_WITH_YOU,
|
||||
NpcStringId.IT_SEEMS_THAT_YOU_CANNOT_REMEMBER_TO_THE_ROOM_OF_THE_WATCHER_WHO_FOUND_THE_BOOK
|
||||
};
|
||||
|
||||
private static final NpcStringId[] ELCADIA_DIALOGS_Q010295 =
|
||||
{
|
||||
NpcStringId.THE_GUARDIAN_OF_THE_SEAL_DOESN_T_SEEM_TO_GET_INJURED_AT_ALL_UNTIL_THE_BARRIER_IS_DESTROYED,
|
||||
NpcStringId.THE_DEVICE_LOCATED_IN_THE_ROOM_IN_FRONT_OF_THE_GUARDIAN_OF_THE_SEAL_IS_DEFINITELY_THE_BARRIER_THAT_CONTROLS_THE_GUARDIAN_S_POWER,
|
||||
NpcStringId.TO_REMOVE_THE_BARRIER_YOU_MUST_FIND_THE_RELICS_THAT_FIT_THE_BARRIER_AND_ACTIVATE_THE_DEVICE
|
||||
};
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 151;
|
||||
// Doors
|
||||
private static final int TOMB_DOOR = 21100018;
|
||||
private static final int[] DOORS =
|
||||
{
|
||||
21100014,
|
||||
21100001,
|
||||
21100006,
|
||||
21100010,
|
||||
21100003,
|
||||
21100008,
|
||||
21100012,
|
||||
21100016,
|
||||
21100002,
|
||||
21100015,
|
||||
21100005,
|
||||
21100004,
|
||||
21100009,
|
||||
21100007,
|
||||
21100013,
|
||||
21100011
|
||||
};
|
||||
|
||||
private static final int[] FAKE_TOMB_DOORS =
|
||||
{
|
||||
21100101,
|
||||
21100102,
|
||||
21100103,
|
||||
21100104
|
||||
};
|
||||
|
||||
public MonasteryOfSilence1()
|
||||
{
|
||||
super(MonasteryOfSilence1.class.getSimpleName());
|
||||
addFirstTalkId(TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
|
||||
addFirstTalkId(TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4);
|
||||
addKillId(SOLINAS_GUARDIAN_1, SOLINAS_GUARDIAN_2, SOLINAS_GUARDIAN_3, SOLINAS_GUARDIAN_4, GUARDIAN_OF_THE_TOMB_1, GUARDIAN_OF_THE_TOMB_2, GUARDIAN_OF_THE_TOMB_3, GUARDIAN_OF_THE_TOMB_4, ETIS_VAN_ETINA);
|
||||
addSpawnId(ERIS_EVIL_THOUGHTS, TOMB_OF_THE_SAINTESS);
|
||||
addStartNpc(ODD_GLOBE, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
|
||||
addTalkId(ODD_GLOBE, ERIS_EVIL_THOUGHTS, RELIC_GUARDIAN, RELIC_WATCHER1, RELIC_WATCHER2, RELIC_WATCHER3, RELIC_WATCHER4, TELEPORT_CONTROL_DEVICE1, TELEPORT_CONTROL_DEVICE2, TELEPORT_CONTROL_DEVICE3, TELEPORT_CONTROL_DEVICE4, ERIS_EVIL_THOUGHTS);
|
||||
}
|
||||
@ -99,91 +206,338 @@ public final class MonasteryOfSilence1 extends AbstractInstance
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final InstanceWorld tmpworld = InstanceManager.getInstance().getPlayerWorld(player);
|
||||
if (!(tmpworld instanceof MoSWorld))
|
||||
final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
|
||||
if (tmpworld instanceof MoSWorld)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
final MoSWorld world = (MoSWorld) tmpworld;
|
||||
switch (event)
|
||||
{
|
||||
case "TELE2":
|
||||
final MoSWorld world = (MoSWorld) tmpworld;
|
||||
switch (event)
|
||||
{
|
||||
teleportPlayer(player, CENTRAL_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(CENTRAL_ROOM_LOC, 0, world.getInstanceId());
|
||||
startQuestTimer("START_MOVIE", 2000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "EXIT":
|
||||
{
|
||||
cancelQuestTimer("FOLLOW", npc, player);
|
||||
teleportPlayer(player, EXIT_LOC, 0);
|
||||
world.elcadia.deleteMe();
|
||||
break;
|
||||
}
|
||||
case "START_MOVIE":
|
||||
{
|
||||
player.showQuestMovie(24);
|
||||
break;
|
||||
}
|
||||
case "BACK":
|
||||
{
|
||||
teleportPlayer(player, BACK_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(BACK_LOC, 0, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "EAST":
|
||||
{
|
||||
teleportPlayer(player, EAST_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(EAST_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "WEST":
|
||||
{
|
||||
teleportPlayer(player, WEST_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(WEST_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "NORTH":
|
||||
{
|
||||
teleportPlayer(player, NORTH_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(NORTH_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "SOUTH":
|
||||
{
|
||||
teleportPlayer(player, SOUTH_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(SOUTH_WATCHERS_ROOM_LOC, 0, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "CENTER":
|
||||
{
|
||||
teleportPlayer(player, CENTRAL_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(CENTRAL_ROOM_LOC, 0, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "FOLLOW":
|
||||
{
|
||||
npc.setIsRunning(true);
|
||||
npc.getAI().startFollow(player);
|
||||
if (player.isInCombat())
|
||||
case "TELE2":
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOUR_WORK_HERE_IS_DONE_SO_RETURN_TO_THE_CENTRAL_GUARDIAN);
|
||||
npc.setTarget(player);
|
||||
npc.doCast(BUFFS[getRandom(BUFFS.length)].getSkill());
|
||||
teleportPlayer(player, CENTRAL_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(CENTRAL_ROOM_LOC, world.getInstanceId(), 0);
|
||||
startQuestTimer("START_MOVIE", 2000, npc, player);
|
||||
break;
|
||||
}
|
||||
else
|
||||
case "EXIT":
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, ELCADIA_DIALOGS[getRandom(ELCADIA_DIALOGS.length)]);
|
||||
cancelQuestTimer("FOLLOW", npc, player);
|
||||
cancelQuestTimer("DIALOG", npc, player);
|
||||
teleportPlayer(player, EXIT_LOC, 0);
|
||||
world.elcadia.deleteMe();
|
||||
break;
|
||||
}
|
||||
case "START_MOVIE":
|
||||
{
|
||||
player.showQuestMovie(24);
|
||||
break;
|
||||
}
|
||||
case "BACK":
|
||||
{
|
||||
teleportPlayer(player, BACK_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(BACK_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "EAST":
|
||||
{
|
||||
teleportPlayer(player, EAST_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(EAST_WATCHERS_ROOM_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "WEST":
|
||||
{
|
||||
teleportPlayer(player, WEST_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(WEST_WATCHERS_ROOM_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "NORTH":
|
||||
{
|
||||
teleportPlayer(player, NORTH_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(NORTH_WATCHERS_ROOM_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "SOUTH":
|
||||
{
|
||||
teleportPlayer(player, SOUTH_WATCHERS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(SOUTH_WATCHERS_ROOM_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "CENTER":
|
||||
{
|
||||
teleportPlayer(player, CENTRAL_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(CENTRAL_ROOM_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "FOLLOW":
|
||||
{
|
||||
npc.setIsRunning(true);
|
||||
npc.getAI().startFollow(player);
|
||||
if (player.isInCombat())
|
||||
{
|
||||
npc.doCast(BUFFS[getRandom(BUFFS.length)].getSkill());
|
||||
}
|
||||
startQuestTimer("FOLLOW", 5000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "DIALOG":
|
||||
{
|
||||
final QuestState st_Q10294 = player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName());
|
||||
final QuestState st_Q10295 = player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName());
|
||||
if ((st_Q10294 != null) && st_Q10294.isStarted())
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, ELCADIA_DIALOGS_Q010294[getRandom(ELCADIA_DIALOGS_Q010294.length)]);
|
||||
}
|
||||
if ((st_Q10295 != null) && st_Q10295.isMemoState(1))
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, ELCADIA_DIALOGS_Q010295[getRandom(ELCADIA_DIALOGS_Q010295.length)]);
|
||||
}
|
||||
startQuestTimer("DIALOG", 10000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "ENTER_Q10295":
|
||||
{
|
||||
teleportPlayer(player, START_LOC_Q10295, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(START_LOC_Q10295, world.getInstanceId(), 0);
|
||||
startQuestTimer("START_MOVIE_Q10295", 2000, npc, player);
|
||||
break;
|
||||
}
|
||||
case "START_MOVIE_Q10295":
|
||||
{
|
||||
player.showQuestMovie(26);
|
||||
break;
|
||||
}
|
||||
case "CASKET_ROOM":
|
||||
{
|
||||
teleportPlayer(player, CASKET_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(CASKET_ROOM_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "SOLINAS_RESTING_PLACE":
|
||||
{
|
||||
teleportPlayer(player, SOLINAS_RESTING_PLACE_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(SOLINAS_RESTING_PLACE_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "ERIS_OFFICE":
|
||||
{
|
||||
teleportPlayer(player, START_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(START_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "OPEN_DOORS":
|
||||
{
|
||||
for (int doorId : DOORS)
|
||||
{
|
||||
openDoor(doorId, world.getInstanceId());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "DIRECTORS_ROOM":
|
||||
{
|
||||
teleportPlayer(player, DIRECTORS_ROOM_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(DIRECTORS_ROOM_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "USE_SCROLL":
|
||||
{
|
||||
// TODO (Adry_85): Missing area debuff
|
||||
if (hasQuestItems(player, SCROLL_OF_ABSTINENCE))
|
||||
{
|
||||
takeItems(player, SCROLL_OF_ABSTINENCE, 1);
|
||||
addSpawn(SOLINAS_GUARDIAN_1, SOLINAS_GUARDIAN_1_LOC, false, 0, false, world.getInstanceId());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "USE_SHIELD":
|
||||
{
|
||||
// TODO (Adry_85): Missing area debuff
|
||||
if (hasQuestItems(player, SHIELD_OF_SACRIFICE))
|
||||
{
|
||||
takeItems(player, SHIELD_OF_SACRIFICE, 1);
|
||||
addSpawn(SOLINAS_GUARDIAN_2, SOLINAS_GUARDIAN_2_LOC, false, 0, false, world.getInstanceId());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "USE_SWORD":
|
||||
{
|
||||
// TODO (Adry_85): Missing area debuff
|
||||
if (hasQuestItems(player, SWORD_OF_HOLY_SPIRIT))
|
||||
{
|
||||
takeItems(player, SWORD_OF_HOLY_SPIRIT, 1);
|
||||
addSpawn(SOLINAS_GUARDIAN_3, SOLINAS_GUARDIAN_3_LOC, false, 0, false, world.getInstanceId());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "USE_STAFF":
|
||||
{
|
||||
// TODO (Adry_85): Missing area debuff
|
||||
if (hasQuestItems(player, STAFF_OF_BLESSING))
|
||||
{
|
||||
takeItems(player, STAFF_OF_BLESSING, 1);
|
||||
addSpawn(SOLINAS_GUARDIAN_4, SOLINAS_GUARDIAN_4_LOC, false, 0, false, world.getInstanceId());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CLOSE_TOMB_DOORS":
|
||||
{
|
||||
for (int doorId : FAKE_TOMB_DOORS)
|
||||
{
|
||||
closeDoor(doorId, world.getInstanceId());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "TOMB_GUARDIAN_SPAWN":
|
||||
{
|
||||
for (int doorId : FAKE_TOMB_DOORS)
|
||||
{
|
||||
openDoor(doorId, world.getInstanceId());
|
||||
}
|
||||
|
||||
addSpawn(GUARDIAN_OF_THE_TOMB_1, GUARDIAN_OF_THE_TOMB_1_LOC, false, 0, false, world.getInstanceId());
|
||||
|
||||
for (Location LOC : SLAVE_SPAWN_1_LOC)
|
||||
{
|
||||
L2Attackable mob = (L2Attackable) addSpawn(TRAINEE_OF_REST, LOC, false, 0, false, world.getInstanceId());
|
||||
mob.setIsRunning(true);
|
||||
mob.addDamageHate(player, 0, 999);
|
||||
mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
|
||||
}
|
||||
|
||||
addSpawn(GUARDIAN_OF_THE_TOMB_2, GUARDIAN_OF_THE_TOMB_2_LOC, false, 0, false, world.getInstanceId());
|
||||
|
||||
for (Location LOC : SLAVE_SPAWN_2_LOC)
|
||||
{
|
||||
L2Attackable mob = (L2Attackable) addSpawn(TRAINEE_OF_REST, LOC, false, 0, false, world.getInstanceId());
|
||||
mob.setIsRunning(true);
|
||||
mob.addDamageHate(player, 0, 999);
|
||||
mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
|
||||
}
|
||||
|
||||
addSpawn(GUARDIAN_OF_THE_TOMB_3, GUARDIAN_OF_THE_TOMB_3_LOC, false, 0, false, world.getInstanceId());
|
||||
|
||||
for (Location LOC : SLAVE_SPAWN_3_LOC)
|
||||
{
|
||||
L2Attackable mob = (L2Attackable) addSpawn(SUPPLICANT_OF_REST, LOC, false, 0, false, world.getInstanceId());
|
||||
mob.setIsRunning(true);
|
||||
mob.addDamageHate(player, 0, 999);
|
||||
mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
|
||||
}
|
||||
|
||||
addSpawn(GUARDIAN_OF_THE_TOMB_4, GUARDIAN_OF_THE_TOMB_4_LOC, false, 0, false, world.getInstanceId());
|
||||
|
||||
for (Location LOC : SLAVE_SPAWN_4_LOC)
|
||||
{
|
||||
L2Attackable mob = (L2Attackable) addSpawn(SUPPLICANT_OF_REST, LOC, false, 0, false, world.getInstanceId());
|
||||
mob.setIsRunning(true);
|
||||
mob.addDamageHate(player, 0, 999);
|
||||
mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
|
||||
}
|
||||
return "32843-01.html";
|
||||
}
|
||||
case "START_MOVIE_Q10296":
|
||||
{
|
||||
player.showQuestMovie(29);
|
||||
startQuestTimer("TELEPORT_SPACE", 60000, npc, player);
|
||||
world.elcadia.teleToLocation(ELCADIA_LOC, world.getInstanceId(), 0);
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_SPACE":
|
||||
{
|
||||
teleportPlayer(player, SPACE_LOC, world.getInstanceId());
|
||||
world.elcadia.teleToLocation(SPACE_LOC, world.getInstanceId(), 0);
|
||||
addSpawn(ETIS_VAN_ETINA, ETIS_VAN_ETINA_LOC, false, 0, false, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_TO_PLAYER":
|
||||
{
|
||||
world.elcadia.teleToLocation(player.getX(), player.getY(), player.getZ(), 0, world.getInstanceId());
|
||||
break;
|
||||
}
|
||||
startQuestTimer("FOLLOW", 10000, npc, player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
|
||||
{
|
||||
InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
|
||||
if (tmpworld instanceof MoSWorld)
|
||||
{
|
||||
MoSWorld world = (MoSWorld) tmpworld;
|
||||
switch (npc.getId())
|
||||
{
|
||||
case GUARDIAN_OF_THE_TOMB_1:
|
||||
case GUARDIAN_OF_THE_TOMB_2:
|
||||
case GUARDIAN_OF_THE_TOMB_3:
|
||||
case GUARDIAN_OF_THE_TOMB_4:
|
||||
{
|
||||
world.deadTombGuardianCount++;
|
||||
if (world.deadTombGuardianCount == 4)
|
||||
{
|
||||
openDoor(TOMB_DOOR, world.getInstanceId());
|
||||
final QuestState st = player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName());
|
||||
if ((st != null) && st.isMemoState(2))
|
||||
{
|
||||
st.setMemoState(3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SOLINAS_GUARDIAN_1:
|
||||
case SOLINAS_GUARDIAN_2:
|
||||
case SOLINAS_GUARDIAN_3:
|
||||
case SOLINAS_GUARDIAN_4:
|
||||
{
|
||||
world.deadSolinaGuardianCount++;
|
||||
if (world.deadSolinaGuardianCount == 4)
|
||||
{
|
||||
player.showQuestMovie(27);
|
||||
final QuestState st = player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName());
|
||||
if ((st != null) && st.isMemoState(1))
|
||||
{
|
||||
st.setMemoState(2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ETIS_VAN_ETINA:
|
||||
{
|
||||
player.showQuestMovie(30);
|
||||
world.elcadia.teleToLocation(ELCADIA_LOC, world.getInstanceId(), 0);
|
||||
startQuestTimer("TELEPORT_TO_PLAYER", 63000, npc, player);
|
||||
final QuestState st = player.getQuestState(Q10296_SevenSignsOneWhoSeeksThePowerOfTheSeal.class.getSimpleName());
|
||||
if ((st != null) && st.isMemoState(2))
|
||||
{
|
||||
st.setMemoState(3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ERIS_EVIL_THOUGHTS:
|
||||
{
|
||||
startQuestTimer("OPEN_DOORS", 1000, npc, null);
|
||||
break;
|
||||
}
|
||||
case TOMB_OF_THE_SAINTESS:
|
||||
{
|
||||
startQuestTimer("CLOSE_TOMB_DOORS", 1000, npc, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance talker)
|
||||
{
|
||||
@ -200,7 +554,8 @@ public final class MonasteryOfSilence1 extends AbstractInstance
|
||||
{
|
||||
world.elcadia.deleteMe();
|
||||
}
|
||||
world.elcadia = addSpawn(ELCADIA_INSTANCE, player.getX(), player.getY(), player.getZ(), 0, false, 0, false, player.getInstanceId());
|
||||
startQuestTimer("FOLLOW", 3000, world.elcadia, player);
|
||||
world.elcadia = addSpawn(ELCADIA_INSTANCE, player.getX(), player.getY(), player.getZ(), 0, false, 0, false, world.getInstanceId());
|
||||
startQuestTimer("FOLLOW", 5000, world.elcadia, player);
|
||||
startQuestTimer("DIALOG", 10000, world.elcadia, player);
|
||||
}
|
||||
}
|
||||
|
@ -1,535 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package instances.MonasteryOfSilence2;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.datatables.SkillData;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Character;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.entity.Instance;
|
||||
import com.l2jmobius.gameserver.model.instancezone.InstanceWorld;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import com.l2jmobius.gameserver.model.quest.State;
|
||||
import com.l2jmobius.gameserver.network.NpcStringId;
|
||||
import com.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.NpcSay;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
import quests.Q10294_SevenSignsToTheMonasteryOfSilence.Q10294_SevenSignsToTheMonasteryOfSilence;
|
||||
import quests.Q10295_SevenSignsSolinasTomb.Q10295_SevenSignsSolinasTomb;
|
||||
import quests.Q10296_SevenSignsPowerOfTheSeal.Q10296_SevenSignsPowerOfTheSeal;
|
||||
|
||||
public class MonasteryOfSilence2 extends AbstractNpcAI
|
||||
{
|
||||
// Values
|
||||
private static final int INSTANCE_ID = 151;
|
||||
// NPC's
|
||||
private static final int OddGlobe = 32815;
|
||||
private static final int Elcadia_First_Room = 32787;
|
||||
private static final int Elcadia_Support = 32785;
|
||||
private static final int ErissEvilThoughts = 32792;
|
||||
private static final int SolinasEvilThoughts = 32793;
|
||||
private static final int RelicGuardian = 32803;
|
||||
private static final int WestRelicWatcher = 32804;
|
||||
private static final int NorthRelicWatcher = 32805;
|
||||
private static final int EastRelicWatcher = 32806;
|
||||
private static final int SouthRelicWatcher = 32807;
|
||||
private static final int EtisVanEtina = 32808;
|
||||
private static final int WestTeleportControlDevice = 32816;
|
||||
private static final int NorthTeleportControlDevice = 32817;
|
||||
private static final int EastTeleportControlDevice = 32818;
|
||||
private static final int SouthTeleportControlDevice = 32819;
|
||||
private static final int JudeVanEtinasEvilThoughts = 32888;
|
||||
private static final int TeleportControlDevice1 = 32837;
|
||||
private static final int TeleportControlDevice2 = 32842;
|
||||
private static final int TombOfTheSaintess = 32843;
|
||||
private static final int AltarOfHallows_Staff = 32857;
|
||||
private static final int AltarOfHallows_Sword = 32858;
|
||||
private static final int AltarOfHallows_Scroll = 32859;
|
||||
private static final int AltarOfHallows_Shield = 32860;
|
||||
// Teleport's
|
||||
private static final int ENTER = 0;
|
||||
private static final int HOLYGRAL = 1;
|
||||
private static final int EXIT = 2;
|
||||
private static final int TW = 3;
|
||||
private static final int TN = 4;
|
||||
private static final int TE = 5;
|
||||
private static final int TS = 6;
|
||||
private static final int RTE = 7;
|
||||
private static final int RTG = 8;
|
||||
private static final int ENTER1 = 9;
|
||||
private static final int MTS = 10;
|
||||
private static final int MTS2 = 11;
|
||||
private static final int EE = 12;
|
||||
private static final int[][] TELEPORTS =
|
||||
{
|
||||
{
|
||||
120664,
|
||||
-86968,
|
||||
-3392
|
||||
}, // Enter
|
||||
{
|
||||
85937,
|
||||
-249618,
|
||||
-8320
|
||||
}, // HolyBurailOpen
|
||||
{
|
||||
115944,
|
||||
-86952,
|
||||
-3392
|
||||
}, // ExitInstance
|
||||
{
|
||||
82434,
|
||||
-249546,
|
||||
-8320
|
||||
}, // TeleWest
|
||||
{
|
||||
85691,
|
||||
-252426,
|
||||
-8320
|
||||
}, // TeleNorth
|
||||
{
|
||||
88573,
|
||||
-249556,
|
||||
-8320
|
||||
}, // TeleEast
|
||||
{
|
||||
85675,
|
||||
-246630,
|
||||
-8320
|
||||
}, // TeleSouth
|
||||
{
|
||||
120727,
|
||||
-86868,
|
||||
-3392
|
||||
}, // ReturnToEris
|
||||
{
|
||||
85937,
|
||||
-249618,
|
||||
-8320
|
||||
}, // ReturnToGuardian
|
||||
{
|
||||
45545,
|
||||
-249423,
|
||||
-6760
|
||||
}, // Enter1
|
||||
{
|
||||
56033,
|
||||
-252944,
|
||||
-6760
|
||||
}, // MoveToSaintness
|
||||
{
|
||||
55955,
|
||||
-250394,
|
||||
-6760
|
||||
}, // MoveToSaintness2
|
||||
{
|
||||
76707,
|
||||
-241022,
|
||||
-10832
|
||||
}
|
||||
// EtisEtina
|
||||
};
|
||||
|
||||
private static final int[] TALK =
|
||||
{
|
||||
OddGlobe,
|
||||
Elcadia_Support,
|
||||
WestTeleportControlDevice,
|
||||
NorthTeleportControlDevice,
|
||||
EastTeleportControlDevice,
|
||||
SouthTeleportControlDevice,
|
||||
RelicGuardian,
|
||||
WestRelicWatcher,
|
||||
NorthRelicWatcher,
|
||||
EastRelicWatcher,
|
||||
SouthRelicWatcher,
|
||||
ErissEvilThoughts,
|
||||
EtisVanEtina,
|
||||
JudeVanEtinasEvilThoughts,
|
||||
SolinasEvilThoughts,
|
||||
TeleportControlDevice1,
|
||||
TeleportControlDevice2,
|
||||
TombOfTheSaintess,
|
||||
AltarOfHallows_Staff,
|
||||
AltarOfHallows_Sword,
|
||||
AltarOfHallows_Scroll,
|
||||
AltarOfHallows_Shield
|
||||
};
|
||||
|
||||
private static final int[] MageBuff =
|
||||
{
|
||||
6725,
|
||||
6721,
|
||||
6722,
|
||||
6717
|
||||
};
|
||||
private static final int[] FighterBuff =
|
||||
{
|
||||
6714,
|
||||
6715,
|
||||
6716,
|
||||
6717
|
||||
};
|
||||
|
||||
private final HashMap<Integer, InstanceHolder> instanceWorlds = new HashMap<>();
|
||||
|
||||
public static class InstanceHolder
|
||||
{
|
||||
List<L2Npc> mobs = new ArrayList<>();
|
||||
}
|
||||
|
||||
private class MoSWorld2 extends InstanceWorld
|
||||
{
|
||||
public MoSWorld2()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public MonasteryOfSilence2()
|
||||
{
|
||||
super(MonasteryOfSilence2.class.getSimpleName(), "instances");
|
||||
addStartNpc(OddGlobe);
|
||||
addStartNpc(WestTeleportControlDevice);
|
||||
addStartNpc(NorthTeleportControlDevice);
|
||||
addStartNpc(EastTeleportControlDevice);
|
||||
addStartNpc(SouthTeleportControlDevice);
|
||||
for (int NPC : TALK)
|
||||
{
|
||||
addTalkId(NPC);
|
||||
}
|
||||
}
|
||||
|
||||
private void teleportPlayer(L2Npc npc, L2PcInstance player, int[] coords, int instanceId)
|
||||
{
|
||||
for (L2Character cha : player.getKnownList().getKnownCharacters())
|
||||
{
|
||||
if (cha.isNpc() && ((((L2Npc) cha).getId() == Elcadia_Support) || (((L2Npc) cha).getId() == Elcadia_First_Room)))
|
||||
{
|
||||
cha.deleteMe();
|
||||
}
|
||||
}
|
||||
|
||||
InstanceHolder holder = instanceWorlds.get(instanceId);
|
||||
if ((holder == null) && (instanceId > 0))
|
||||
{
|
||||
holder = new InstanceHolder();
|
||||
instanceWorlds.put(Integer.valueOf(instanceId), holder);
|
||||
}
|
||||
player.stopAllEffectsExceptThoseThatLastThroughDeath();
|
||||
player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
||||
player.setInstanceId(instanceId);
|
||||
player.teleToLocation(coords[0], coords[1], coords[2], false);
|
||||
cancelQuestTimer("check_follow", npc, player);
|
||||
if (holder != null)
|
||||
{
|
||||
for (L2Npc h : holder.mobs)
|
||||
{
|
||||
h.deleteMe();
|
||||
}
|
||||
holder.mobs.clear();
|
||||
}
|
||||
|
||||
if ((holder != null) && (instanceId > 0))
|
||||
{
|
||||
final L2Npc support = addSpawn(Elcadia_Support, player.getX(), player.getY(), player.getZ(), 0, false, 0L, false, player.getInstanceId());
|
||||
holder.mobs.add(support);
|
||||
startQuestTimer("check_follow", 3000, support, player);
|
||||
}
|
||||
}
|
||||
|
||||
protected void enterInstance(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
|
||||
if (world != null)
|
||||
{
|
||||
if (!(world instanceof MoSWorld2))
|
||||
{
|
||||
player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_ENTERED_ANOTHER_INSTANCE_ZONE_THEREFORE_YOU_CANNOT_ENTER_CORRESPONDING_DUNGEON));
|
||||
return;
|
||||
}
|
||||
final Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
|
||||
if (inst != null)
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[ENTER], world.getInstanceId());
|
||||
}
|
||||
return;
|
||||
}
|
||||
final int instanceId = InstanceManager.getInstance().createDynamicInstance("MonasteryOfSilence.xml");
|
||||
|
||||
world = new MoSWorld2();
|
||||
world.setInstanceId(instanceId);
|
||||
world.setTemplateId(INSTANCE_ID);
|
||||
world.setStatus(0);
|
||||
InstanceManager.getInstance().addWorld(world);
|
||||
|
||||
world.addAllowed(player.getObjectId());
|
||||
|
||||
teleportPlayer(npc, player, TELEPORTS[ENTER], instanceId);
|
||||
return;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final String htmltext = getNoQuestMsg(player);
|
||||
QuestState st = player.getQuestState(MonasteryOfSilence2.class.getSimpleName());
|
||||
final QuestState qs = player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName());
|
||||
final QuestState qs1 = player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName());
|
||||
if (st == null)
|
||||
{
|
||||
st = newQuestState(player);
|
||||
}
|
||||
if ("check_follow".equals(event))
|
||||
{
|
||||
cancelQuestTimer("check_follow", npc, player);
|
||||
npc.getAI().stopFollow();
|
||||
npc.setIsRunning(true);
|
||||
npc.getAI().startFollow(player);
|
||||
if ((qs != null) && (qs.getCond() == 2))
|
||||
{
|
||||
if (getRandom(10) < 1)
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), NpcStringId.IT_SEEMS_THAT_YOU_CANNOT_REMEMBER_TO_THE_ROOM_OF_THE_WATCHER_WHO_FOUND_THE_BOOK));
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), NpcStringId.REMEMBER_THE_CONTENT_OF_THE_BOOKS_THAT_YOU_FOUND_YOU_CAN_T_TAKE_THEM_OUT_WITH_YOU));
|
||||
}
|
||||
}
|
||||
if ((qs != null) && (qs.getCond() == 3))
|
||||
{
|
||||
if (getRandom(8) < 1)
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), NpcStringId.YOUR_WORK_HERE_IS_DONE_SO_RETURN_TO_THE_CENTRAL_GUARDIAN));
|
||||
}
|
||||
}
|
||||
if ((qs1 != null) && (qs1.getCond() == 1))
|
||||
{
|
||||
if (getRandom(5) < 1)
|
||||
{
|
||||
if (getRandom(10) < 1)
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), NpcStringId.TO_REMOVE_THE_BARRIER_YOU_MUST_FIND_THE_RELICS_THAT_FIT_THE_BARRIER_AND_ACTIVATE_THE_DEVICE));
|
||||
}
|
||||
else if (getRandom(15) < 1)
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), NpcStringId.THE_GUARDIAN_OF_THE_SEAL_DOESN_T_SEEM_TO_GET_INJURED_AT_ALL_UNTIL_THE_BARRIER_IS_DESTROYED));
|
||||
}
|
||||
else
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.GENERAL, npc.getId(), NpcStringId.THE_DEVICE_LOCATED_IN_THE_ROOM_IN_FRONT_OF_THE_GUARDIAN_OF_THE_SEAL_IS_DEFINITELY_THE_BARRIER_THAT_CONTROLS_THE_GUARDIAN_S_POWER));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (player.getCurrentHp() < (player.getMaxHp() * 0.8D))
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doSimultaneousCast(SkillData.getInstance().getSkill(6724, 1));
|
||||
}
|
||||
if (player.getCurrentMp() < (player.getMaxMp() * 0.5D))
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doSimultaneousCast(SkillData.getInstance().getSkill(6728, 1));
|
||||
}
|
||||
startQuestTimer("check_follow", 20000, npc, player);
|
||||
return "";
|
||||
}
|
||||
else if ("enter".equals(event))
|
||||
{
|
||||
enterInstance(npc, player);
|
||||
return null;
|
||||
}
|
||||
if (npc.getId() == ErissEvilThoughts)
|
||||
{
|
||||
if ("Enter1".equals(event))
|
||||
{
|
||||
if (qs1.getInt("seal_removed") != 1)
|
||||
{
|
||||
qs1.startQuestTimer("StartMovie", 1000);
|
||||
teleportPlayer(npc, player, TELEPORTS[ENTER1], player.getInstanceId());
|
||||
}
|
||||
else
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[MTS2], player.getInstanceId());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if ("Enter3".equals(event))
|
||||
{
|
||||
if ((qs.getInt("book_" + 32821) + qs.getInt("book_" + 32828) + qs.getInt("book_" + 32831) + qs.getInt("book_" + 32834)) != 4)
|
||||
{
|
||||
qs.startQuestTimer("OpenMovie", 4000);
|
||||
}
|
||||
teleportPlayer(npc, player, TELEPORTS[HOLYGRAL], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if ("video".equals(event))
|
||||
{
|
||||
player.showQuestMovie(29);
|
||||
startQuestTimer("teleport", 60000, npc, player);
|
||||
cancelQuestTimer("check_follow", npc, player);
|
||||
final InstanceHolder holder = instanceWorlds.get(player.getInstanceId());
|
||||
if (holder != null)
|
||||
{
|
||||
for (L2Npc h : holder.mobs)
|
||||
{
|
||||
h.deleteMe();
|
||||
}
|
||||
holder.mobs.clear();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
else if ("teleport".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[EE], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if ("buff".equals(event))
|
||||
{
|
||||
if (player.isMageClass())
|
||||
{
|
||||
for (int h : MageBuff)
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doSimultaneousCast(SkillData.getInstance().getSkill(h, 1));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int h : FighterBuff)
|
||||
{
|
||||
npc.setTarget(player);
|
||||
npc.doSimultaneousCast(SkillData.getInstance().getSkill(h, 1));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
else if ("Exit".equals(event))
|
||||
{
|
||||
cancelQuestTimer("check_follow", npc, player);
|
||||
final InstanceHolder holder = instanceWorlds.get(player.getInstanceId());
|
||||
if (holder != null)
|
||||
{
|
||||
for (L2Npc h : holder.mobs)
|
||||
{
|
||||
h.deleteMe();
|
||||
}
|
||||
holder.mobs.clear();
|
||||
}
|
||||
teleportPlayer(npc, player, TELEPORTS[EXIT], 0);
|
||||
return null;
|
||||
}
|
||||
else if ("TeleWest".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[TW], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if (event.equalsIgnoreCase("TeleNorth"))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[TN], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if ("TeleEast".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[TE], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if ("TeleSouth".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[TS], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if ("ReturnToEris".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[RTE], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if ("ReturnToGuardian".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[RTG], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if ("MoveToSaintess".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[MTS], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
else if ("MoveToSaintess2".equals(event))
|
||||
{
|
||||
teleportPlayer(npc, player, TELEPORTS[MTS2], player.getInstanceId());
|
||||
return null;
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
QuestState st = player.getQuestState(MonasteryOfSilence2.class.getSimpleName());
|
||||
if (st == null)
|
||||
{
|
||||
st = newQuestState(player);
|
||||
}
|
||||
final int npcId = npc.getId();
|
||||
if (npcId == OddGlobe)
|
||||
{
|
||||
if ((player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()) != null) && (player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()).getState() == State.STARTED))
|
||||
{
|
||||
enterInstance(npc, player);
|
||||
return null;
|
||||
}
|
||||
if ((player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()) != null) && (player.getQuestState(Q10294_SevenSignsToTheMonasteryOfSilence.class.getSimpleName()).getState() == State.COMPLETED) && (player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()) == null))
|
||||
{
|
||||
enterInstance(npc, player);
|
||||
return null;
|
||||
}
|
||||
if ((player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()) != null) && (player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()).getState() != State.COMPLETED))
|
||||
{
|
||||
enterInstance(npc, player);
|
||||
return null;
|
||||
}
|
||||
if ((player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()) != null) && (player.getQuestState(Q10295_SevenSignsSolinasTomb.class.getSimpleName()).getState() == State.COMPLETED) && (player.getQuestState(Q10296_SevenSignsPowerOfTheSeal.class.getSimpleName()) == null))
|
||||
{
|
||||
enterInstance(npc, player);
|
||||
return null;
|
||||
}
|
||||
if ((player.getQuestState(Q10296_SevenSignsPowerOfTheSeal.class.getSimpleName()) != null) && (player.getQuestState(Q10296_SevenSignsPowerOfTheSeal.class.getSimpleName()).getState() != State.COMPLETED))
|
||||
{
|
||||
enterInstance(npc, player);
|
||||
return null;
|
||||
}
|
||||
htmltext = "<html><body>Odd Globe:<br>The huge mechanism in the form of the globe. Around silent cottons are heard and in air presence of any unknown energy, which which in a way doesn't come under to your influence is felt.</body></html>";
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new MonasteryOfSilence2();
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
First, I'll tell you about the enemies. <font color="LEVEL"> Kanabion </font> - not just a monster, a creature that appeared as a result of the connection of evil and darkness.<br>
|
||||
Our goal - to destroy them and prevent the spread Kamaloki the territory of Aden.<br>
|
||||
If you kill enough Kanabionov, then we'll give you some ammunition. In time we'll assign you a rank <font color="LEVEL"> from D to S </font> depending on your results.<br>
|
||||
Or we can return collected by you from Kanabionov <font color="LEVEL"> Essences Kanabionov </font>. But in the real world there are no places where you can take advantage of them.<br>
|
||||
Give them to us, if you think that you do not need. We offer appropriate compensation.<br>
|
||||
And if you die around Kamaloki, no one can help you before time runs out or stay until the moment when all will be defeated. It's your dream.<br>
|
||||
Thus, our technology will allow you to be around Kamaloki within <font color="LEVEL"> 20 minutes </font>. Do not forget about it.
|
||||
</body></html>
|
@ -1,5 +0,0 @@
|
||||
<html><body>Pathfinder Agent:<br>
|
||||
Once you enter the Chamber of Delusion, you will find managers for each area. There are 6 total, entry to which is regulated in the individual manager. Ask each manager for more details.<br>
|
||||
If you've been to the Dimensional Rift, you will understand quickly.<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest DelusionTeleport">Challenge the Chamber of Delusion.</a>
|
||||
</body></html>
|
@ -1,10 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
We trackers sent from the Ivory Tower to confront the invasion nightmare. We are waiting for a traveler like you, will challenge the Darkness around Kamaloki.<br>
|
||||
Environs Kamaloki - it was an invasion of darkness through dreams. If we do not stop it, then people will die in my sleep.<br>
|
||||
We have developed a way to counter. If you are brave enough challenge a outskirts Kamaloki!<br>
|
||||
<a Action="bypass -h npc_%objectId%_Quest RimKamaloka"> Challenge outlying Kamaloka</a><br>
|
||||
<a Action="bypass -h npc_%objectId%_Chat 1"> Ask about how to counter</a><br>
|
||||
<a Action="bypass -h npc_%objectId%_multisell 324840001"> Make a contribution in the form Essences Kanabiona </a> <br>
|
||||
<a Action="bypass -h npc_%objectId%_Quest 9011_KamalokaAch"> Check the list of the best achievements</a><br>
|
||||
<a action="bypass -h npc_%objectId%_Quest DelusionTeleport">Go to Chamber of Delusion.</a>
|
||||
</body></html>
|
@ -1,7 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
Battle is finished!<br>
|
||||
To you it seems strange that I appeared in you sleep? Don't warry! We, Pathfinders, are trained many skills, which heer occurs. I simply controlled your thoughts...<br>
|
||||
I shall describe to you, what you reached, and I shall help to get out from here.<br>
|
||||
With to know you results?<br>
|
||||
<a action="bypass -h npc_%objectId%_Quest RimKamaloka">To look results.</a>
|
||||
</body></html>
|
@ -1,7 +0,0 @@
|
||||
<html><body>Pathfinder Worker:<br>
|
||||
They are this is what the Environment of Kamaloka. After the visit of the peace of dreams you you will not be able again to enter into it to the complete the restoration of soul. Know this.<br>
|
||||
(In the Environment of Kamaloka it is possible to enter <font color="LEVEL">only once a day</font>.)<br>
|
||||
<a action="bypass -h Quest RimKamaloka 0">Enter Hall of Abyss (20~30 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 1">Enter Hall of Abyss (25~35 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 2">Enter Hall of Abyss (30~40 levels)</a>
|
||||
</body></html>
|
@ -1,6 +0,0 @@
|
||||
<html><body>Pathfinder Worker:<br>
|
||||
They are this is what the Environment of Kamaloka. After the visit of the peace of dreams you you will not be able again to enter into it to the complete the restoration of soul. Know this.<br>
|
||||
(In the Environment of Kamaloka it is possible to enter <font color="LEVEL">only once a day</font>.)<br>
|
||||
<a action="bypass -h Quest RimKamaloka 0">Enter Hall of Abyss (20~30 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 1">Enter Hall of Abyss (25~35 levels)</a>
|
||||
</body></html>
|
@ -1,9 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
Your result:<br>
|
||||
<center>Rank A</center><br>
|
||||
It is magnificent. You strongly lowered the rate of the intrusion through Kamaloka.<br>
|
||||
As in any other battle, the main thing to protect itself, when you inside the Environments of Kamaloka. We they must not attack rash.<br>
|
||||
We, pathfinders, prepared reward for those, who it reached the impressive results, in order to in following time they could carry out task still better.<br>
|
||||
You do want to obtain the reward, which corresponds to your level?<br>
|
||||
<a action="bypass -h Quest RimKamaloka Reward">To obtain the reward.</a>
|
||||
</body></html>
|
@ -1,9 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
Your result:<br>
|
||||
<center>Rank B</center><br>
|
||||
Very well. Your experience will help other to the finders of adventures.<br>
|
||||
Battle with Kanabions is deliberately weaker you.. You they are assured, it is worthwhile to enter precisely thus? We, pathfinders, consider that this is the simply waste of time.<br>
|
||||
We, pathfinders, prepared reward for those, who it reached the impressive results, in order to in following time they could carry out task still better.<br>
|
||||
You do want to obtain the reward, which corresponds to your level?<br>
|
||||
<a action="bypass -h Quest RimKamaloka Reward">To obtain the reward.</a>
|
||||
</body></html>
|
@ -1,9 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
Your result:<br>
|
||||
<center>Rank C</center><br>
|
||||
Good work. If the remaining finders adventures will show such results, this it will return to us hope.<br>
|
||||
It cannot be always rely on the aid of others. Sometimes for you it is necessary to act independently.<br>
|
||||
We, pathfinders, prepared reward for those, who it reached the impressive results, in order to in following time they could carry out task still better.<br>
|
||||
You do want to obtain the reward, which corresponds to your level?<br>
|
||||
<a action="bypass -h Quest RimKamaloka Reward">To obtain the reward.</a>
|
||||
</body></html>
|
@ -1,9 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
Your result:<br>
|
||||
<center>Rank D</center><br>
|
||||
This is poor result.<br>
|
||||
Me you seemed you will be better.<br>
|
||||
We, pathfinders, prepared reward for those, who it reached the impressive results, in order to in following time they could carry out task still better.<br>
|
||||
Do you want to obtain the reward, which corresponds to your level?<br>
|
||||
<a action="bypass -h Quest RimKamaloka Reward">To obtain the reward.</a>
|
||||
</body></html>
|
@ -1,7 +0,0 @@
|
||||
<html> <body>Pathfinder:<br>
|
||||
Here's your reward. <br>
|
||||
We were able to collect some essences Kanabionov. Here, hold. <br>
|
||||
We are in the chronology of your activities. If you want, we will tell you how effective the activities around Kamaloka, and who made the biggest contribution to our common cause. <br>
|
||||
First, leave the area. <br>
|
||||
<a Action="bypass -h Quest RimKamaloka Exit"> Exit </a>
|
||||
</body> </html>
|
@ -1,9 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
Your result:<br>
|
||||
<center>Rank S</center><br>
|
||||
This... These are the great reaching, is worthy of the heroes legends!<br>
|
||||
I see, you understood the essence of our matter and it is wonderful they managed the task assigned to you.<br>
|
||||
We, pathfinders, prepared reward for those, who it reached the impressive results, in order to in following time they could carry out task still better.<br>
|
||||
You do want to obtain the reward, which corresponds to your level?<br>
|
||||
<a action="bypass -h Quest RimKamaloka Reward">To obtain the reward.</a>
|
||||
</body></html>
|
@ -1,7 +0,0 @@
|
||||
<html><body>Pathfinder Worker:<br>
|
||||
They are this is what the Environment of Kamaloka. After the visit of the peace of dreams you you will not be able again to enter into it to the complete the restoration of soul. Know this.<br>
|
||||
(In the Environment of Kamaloka it is possible to enter <font color="LEVEL">only once a day</font>.)<br>
|
||||
<a action="bypass -h Quest RimKamaloka 2">Enter Hall of Abyss (30~40 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 3">Enter Hall of Abyss (35~45 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 4">Enter Hall of Abyss (40~50 levels)</a>
|
||||
</body></html>
|
@ -1,7 +0,0 @@
|
||||
<html><body>Pathfinder Worker:<br>
|
||||
They are this is what the Environment of Kamaloka. After the visit of the peace of dreams you you will not be able again to enter into it to the complete the restoration of soul. Know this.<br>
|
||||
(In the Environment of Kamaloka it is possible to enter <font color="LEVEL">only once a day</font>.)<br>
|
||||
<a action="bypass -h Quest RimKamaloka 2">Enter Hall of Abyss (30~40 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 3">Enter Hall of Abyss (35~45 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 4">Enter Hall of Abyss (40~50 levels)</a>
|
||||
</body></html>
|
@ -1,8 +0,0 @@
|
||||
<html><body>Pathfinder Worker:<br>
|
||||
They are this is what the Environment of Kamaloka. After the visit of the peace of dreams you you will not be able again to enter into it to the complete the restoration of soul. Know this.<br>
|
||||
(In the Environment of Kamaloka it is possible to enter <font color="LEVEL">only once a day</font>.)<br>
|
||||
<a action="bypass -h Quest RimKamaloka 3">Enter Hall of Abyss (35~45 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 4">Enter Hall of Abyss (40~50 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 5">Enter Hall of Abyss (45~55 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 6">Enter Hall of Abyss (50~60 levels)</a>
|
||||
</body></html>
|
@ -1,7 +0,0 @@
|
||||
<html><body>Pathfinder:<br>
|
||||
Here is your reward.<br>
|
||||
We succeeded in gathering a little the essences devastated by you Kanabions. Here, you hold.<br>
|
||||
We conduct the chronology of your activity. If you want, we will describe to you, to what extent is effective activity in the Environments of Kamaloka, and who made the largest contribution to our common work.<br>
|
||||
First leave this place.<br>
|
||||
<a action="bypass -h Quest RimKamaloka Exit">To leave Kamaloka.</a>
|
||||
</body></html>
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +0,0 @@
|
||||
<html><body>Pathfinder Worker:<br>
|
||||
They are this is what the Environment of Kamaloka. After the visit of the peace of dreams you you will not be able again to enter into it to the complete the restoration of soul. Know this.<br>
|
||||
(In the Environment of Kamaloka it is possible to enter <font color="LEVEL">only once a day</font>.)<br>
|
||||
<a action="bypass -h Quest RimKamaloka 7">Enter Hall of Abyss (55~65 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 8">Enter Hall of Abyss (60~70 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 9">Enter Hall of Abyss (65~75 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 10">Enter Hall of Abyss (70~80 levels)</a>
|
||||
</body></html>
|
@ -1,8 +0,0 @@
|
||||
<html><body>Pathfinder Worker:<br>
|
||||
hey are this is what the Environment of Kamaloka. After the visit of the peace of dreams you you will not be able again to enter into it to the complete the restoration of soul. Know this.<br>
|
||||
(In the Environment of Kamaloka it is possible to enter <font color="LEVEL">only once a day</font>.)<br>
|
||||
<a action="bypass -h Quest RimKamaloka 5">Enter Hall of Abyss (45~55 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 6">Enter Hall of Abyss (50~60 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 7">Enter Hall of Abyss (55~65 levels)</a><br>
|
||||
<a action="bypass -h Quest RimKamaloka 8">Enter Hall of Abyss (60~70 levels)</a>
|
||||
</body></html>
|
@ -139,10 +139,10 @@ public abstract class AbstractSagaQuest extends Quest
|
||||
final int xx = st2.getPlayer().getX();
|
||||
final int yy = st2.getPlayer().getY();
|
||||
final int zz = st2.getPlayer().getZ();
|
||||
final L2Npc Archon = st2.addSpawn(Mob[1], xx, yy, zz);
|
||||
final L2Npc Archon = addSpawn(Mob[1], xx, yy, zz, -1);
|
||||
addSpawn(st2, Archon);
|
||||
st2.set("spawned", "1");
|
||||
st2.startQuestTimer("Archon Hellisha has despawned", 600000, Archon);
|
||||
startQuestTimer("Archon Hellisha has despawned", 600000, Archon, player);
|
||||
autoChat(Archon, Text[13].replace("PLAYERNAME", st2.getPlayer().getName()));
|
||||
((L2Attackable) Archon).addDamageHate(st2.getPlayer(), 0, 99999);
|
||||
Archon.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st2.getPlayer(), null);
|
||||
@ -293,8 +293,8 @@ public abstract class AbstractSagaQuest extends Quest
|
||||
{
|
||||
final L2Npc Mob_1 = addSpawn(Mob[0], npcSpawnLocations[0], false, 0);
|
||||
st.set("spawned", "1");
|
||||
st.startQuestTimer("Mob_1 Timer 1", 500, Mob_1);
|
||||
st.startQuestTimer("Mob_1 has despawned", 300000, Mob_1);
|
||||
startQuestTimer("Mob_1 Timer 1", 500, Mob_1, player);
|
||||
startQuestTimer("Mob_1 has despawned", 300000, Mob_1, player);
|
||||
addSpawn(st, Mob_1);
|
||||
htmltext = "7-02.htm";
|
||||
}
|
||||
@ -331,10 +331,10 @@ public abstract class AbstractSagaQuest extends Quest
|
||||
st.set("Mob_2", String.valueOf(Mob_2.getObjectId()));
|
||||
st.set("Quest0", "1");
|
||||
st.set("Quest1", "45");
|
||||
st.startRepeatingQuestTimer("Mob_3 Timer 1", 500, Mob_3);
|
||||
st.startQuestTimer("Mob_3 has despawned", 59000, Mob_3);
|
||||
st.startQuestTimer("Mob_2 Timer 1", 500, Mob_2);
|
||||
st.startQuestTimer("Mob_2 has despawned", 60000, Mob_2);
|
||||
startQuestTimer("Mob_3 Timer 1", 500, Mob_3, player, true);
|
||||
startQuestTimer("Mob_3 has despawned", 59000, Mob_3, player);
|
||||
startQuestTimer("Mob_2 Timer 1", 500, Mob_2, player);
|
||||
startQuestTimer("Mob_2 has despawned", 60000, Mob_2, player);
|
||||
htmltext = "10-02.htm";
|
||||
}
|
||||
else if (st.getInt("Quest1") == 45)
|
||||
@ -387,7 +387,7 @@ public abstract class AbstractSagaQuest extends Quest
|
||||
return null;
|
||||
case "Mob_2 Timer 1":
|
||||
autoChat(npc, Text[7].replace("PLAYERNAME", player.getName()));
|
||||
st.startQuestTimer("Mob_2 Timer 2", 1500, npc);
|
||||
startQuestTimer("Mob_2 Timer 2", 1500, npc, player);
|
||||
if (st.getInt("Quest1") == 45)
|
||||
{
|
||||
st.set("Quest1", "0");
|
||||
@ -395,12 +395,12 @@ public abstract class AbstractSagaQuest extends Quest
|
||||
return null;
|
||||
case "Mob_2 Timer 2":
|
||||
autoChat(npc, Text[8].replace("PLAYERNAME", player.getName()));
|
||||
st.startQuestTimer("Mob_2 Timer 3", 10000, npc);
|
||||
startQuestTimer("Mob_2 Timer 3", 10000, npc, player);
|
||||
return null;
|
||||
case "Mob_2 Timer 3":
|
||||
if (st.getInt("Quest0") == 0)
|
||||
{
|
||||
st.startQuestTimer("Mob_2 Timer 3", 13000, npc);
|
||||
startQuestTimer("Mob_2 Timer 3", 13000, npc, player);
|
||||
if (getRandomBoolean())
|
||||
{
|
||||
autoChat(npc, Text[9].replace("PLAYERNAME", player.getName()));
|
||||
@ -429,7 +429,7 @@ public abstract class AbstractSagaQuest extends Quest
|
||||
}
|
||||
else
|
||||
{
|
||||
st.startQuestTimer("Mob_2 has despawned", 1000, npc);
|
||||
startQuestTimer("Mob_2 has despawned", 1000, npc, player);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ public class Q00021_HiddenTruth extends Quest
|
||||
final L2Npc ghost = addSpawn(GHOST_OF_VON_HELLMAN, GHOST_LOC, false, 0);
|
||||
ghost.broadcastPacket(new NpcSay(ghost.getObjectId(), ChatType.GENERAL, ghost.getId(), NpcStringId.WHO_AWOKE_ME));
|
||||
GHOST_SPAWNED = true;
|
||||
st.startQuestTimer("DESPAWN_GHOST", 1000 * 300, ghost);
|
||||
startQuestTimer("DESPAWN_GHOST", 1000 * 300, ghost, player);
|
||||
st.setCond(2);
|
||||
playSound(player, QuestSound.SKILLSOUND_HORROR_2);
|
||||
htmltext = event;
|
||||
@ -297,7 +297,7 @@ public class Q00021_HiddenTruth extends Quest
|
||||
if (MOVE_ENDED)
|
||||
{
|
||||
htmltext = "31525-02.html";
|
||||
st.startQuestTimer("DESPAWN", 3000, npc);
|
||||
startQuestTimer("DESPAWN", 3000, npc, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -449,7 +449,7 @@ public class Q00021_HiddenTruth extends Quest
|
||||
final QuestState st = L2World.getInstance().getPlayer(npc.getScriptValue()).getQuestState(getName());
|
||||
if (st != null)
|
||||
{
|
||||
st.startQuestTimer("DESPAWN", 15000, npc);
|
||||
startQuestTimer("DESPAWN", 15000, npc, null);
|
||||
MOVE_ENDED = true;
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user