NPC related changes.
This commit is contained in:
@@ -21,5 +21,4 @@ INSERT IGNORE INTO `grandboss_data` (`boss_id`,`loc_x`,`loc_y`,`loc_z`,`heading`
|
||||
(29068, 185708, 114298, -8221,32768, 62802301, 1998000), -- Antharas
|
||||
(29118, 0, 0, 0, 0, 4109288, 1220547), -- Beleth
|
||||
(25286, 185080, -12613, -5499, 16550, 556345880, 86847), -- Anakim
|
||||
(25283, 185062, -9605, -5499, 15640, 486021997, 79600), -- Lilith
|
||||
(26124, 0, 0, 0, 0, 13945521, 50920); -- Kelbim
|
||||
(25283, 185062, -9605, -5499, 15640, 486021997, 79600); -- Lilith
|
@@ -431,9 +431,6 @@
|
||||
<item npcId="25322"> <!-- Demon's Agent Falston -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11" />
|
||||
</item>
|
||||
<item npcId="25263"> <!-- Kernon's Faithful Servant Kelone -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11" />
|
||||
</item>
|
||||
<item npcId="25337"> <!-- Anakazel -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11" />
|
||||
</item>
|
||||
@@ -467,9 +464,6 @@
|
||||
<item npcId="25325"> <!-- Flame of Splendor Barakiel -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11" />
|
||||
</item>
|
||||
<item npcId="25453"> <!-- Meanas Anor -->
|
||||
<detail chance="20" absorbType="PARTY_ONE_RANDOM" levelList="10, 11" />
|
||||
</item>
|
||||
<item npcId="25328"> <!-- Eilhalder von Hellmann -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11" />
|
||||
</item>
|
||||
@@ -507,21 +501,12 @@
|
||||
<item npcId="25054"> <!-- Kernon -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25229"> <!-- Storm Winged Naga -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25244"> <!-- Last Lesser Giant Olkuth -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25249"> <!-- Palatanos of Horrific Power -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25266"> <!-- Bloody Empress Decarbia -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25276"> <!-- Death Lord Ipos -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25282"> <!-- Death Lord Shax -->
|
||||
<detail chance="5" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
@@ -540,9 +525,6 @@
|
||||
<item npcId="25245"> <!-- Last Lesser Giant Glaki -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25290"> <!-- Daimon the White-Eyed -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
<item npcId="25293"> <!-- Hestia, Guardian Deity of the Hot Springs -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12" />
|
||||
</item>
|
||||
@@ -576,24 +558,12 @@
|
||||
<item npcId="25299"> <!-- Ketra's Hero Hekaton -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
<item npcId="25302"> <!-- Ketra's Commander Tayr -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
<item npcId="25305"> <!-- Ketra's Chief Brakki -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
<item npcId="25306"> <!-- Soul of Fire Nastron -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
<item npcId="25309"> <!-- Varka's Hero Shadith -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
<item npcId="25312"> <!-- Varka's Commander Mos -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
<item npcId="25315"> <!-- Varka's Chief Horus -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
<item npcId="25316"> <!-- Soul of Water Ashutar -->
|
||||
<detail chance="3" absorbType="PARTY_ONE_RANDOM" levelList="10, 11, 12, 13" />
|
||||
</item>
|
||||
|
@@ -57,7 +57,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center><button action="bypass -h admin_move_to 175471 148183 -11652" value="Spezion" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td align=center><button action="bypass -h admin_move_to -55059 52009 -2161" value="Kelbim" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td align=center></td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
@@ -1,7 +0,0 @@
|
||||
<html><body>Shadai's Disciple Kaysia:<br>
|
||||
Grandpa Shadai? <br>
|
||||
After Faeron Village came to the Material Realm, I started wandering around. I was worried at first, but our story spread throughout the continent, so it wasn't that dangerous.<br>
|
||||
I met Grandpa Toma as I wandered through the continent. He told me how he was also the wandering type, and that he traveled a lot when he was young. He was the one who introduced me to Grandpa Shadai.<br>
|
||||
Grandpa Shadai said that it would be better for me to learn a skill for when I decided to settle down, and taught me his skills.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||
</body></html>
|
@@ -1,9 +0,0 @@
|
||||
<html><body>Shadai's Disciple Kaysia:<br>
|
||||
Oh, hello! I'm Kaysia.<br>
|
||||
I'm a blacksmith, and I learned from Grandpa Shadai. Well, I'm not a blacksmith officially. I don't really like being tied down in one place. Heh.<br>
|
||||
However, I did find a strange Atelia piece, so I'm trying to find out more about it and will be staying here for a while.<br>
|
||||
Even amongst those, <font color="LEVEL">Kelbim's Atelia Fragment</font> is very special. If you can bring me one, I'll work on that <font color="LEVEL">Kelbim's Atelia Fragment</font> and make you a <font color="LEVEL">Kelbim weapon</font>. Not bad, right?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">"How do you know Shadia?"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 2131"><font color="LEVEL">"I want a Kelbim weapon made with Kelbim's Atelia Fragment."</font></Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Refugee Neti:<br>
|
||||
A group of armed Orcs and Dark Elves came into Gludin. They drove out the guards and captured the people to occupy the village.<br>
|
||||
They call themselves the <font color="LEVEL">Ashen Shadow Revolutionaries</font>. It looks like the Kingdom doesn't really see them as a threat. But things might get worse if we don't do something.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Refugee Neti:<br>
|
||||
In order to exchange a Shadow weapon for one that can be exchanged, you need <font color="LEVEL">1 +10 Shadow weapon</font> and <font color="LEVEL">10 Shadow Ingots</font>.<br>
|
||||
You don't have a Shadow weapon, though. Make sure to get one first.
|
||||
</body></html>
|
@@ -1,9 +0,0 @@
|
||||
<html><body>Refugee Neti:<br>
|
||||
Gludin as been occupied. There are people who have escaped like me, but I'm not sure if the rest of them are safe.<br>
|
||||
I thought about helping them, but I had to let others know what happened. That's why I came here.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">"What happened in Gludin?"</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h menu_select?ask=-9991&reply=1">"I'll fight those Ashen Shadow Revolutionaries!"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3409501">"I want to exchange a weapon with the Shadow Weapon Coupon."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3409500">"I want to exchange a Shadow weapon for one that can be exchanged."</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,74 +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 ai.areas.EnchantedValley;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* AI from Flower Bud in Enchanted Valley, after kill random spawn<br>
|
||||
* [Nymph Rose (Elegant), Nymph Lily (Elegant), Nymph Tulip (Elegant), Nymph Cosmos (Elegant)]
|
||||
* @author Gigi
|
||||
*/
|
||||
public final class FlowerBud extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int FLOWER_BUD = 19600;
|
||||
private static final List<Integer> FLOWER_SPAWNS = new ArrayList<>();
|
||||
static
|
||||
{
|
||||
FLOWER_SPAWNS.add(23582);
|
||||
FLOWER_SPAWNS.add(23583);
|
||||
FLOWER_SPAWNS.add(23584);
|
||||
FLOWER_SPAWNS.add(23585);
|
||||
}
|
||||
|
||||
private FlowerBud()
|
||||
{
|
||||
addKillId(FLOWER_BUD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (event.equals("spawn") && npc.isDead())
|
||||
{
|
||||
final L2Npc elegant = addSpawn(FLOWER_SPAWNS.get(Rnd.get(FLOWER_SPAWNS.size())), npc, false, 120000, false);
|
||||
addAttackPlayerDesire(elegant, player);
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
|
||||
startQuestTimer("spawn", 3000, npc, killer);
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new FlowerBud();
|
||||
}
|
||||
}
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Merlot:<br>
|
||||
Currently, dimensional teleportation is not available. We can't just send you whenever we want.<br>
|
||||
We can only send you <font color="LEVEL">on weeks when there are no Dimensional Sieges</font>.<br>
|
||||
Also, you must be above <font color="LEVEL">Lv. 99</font>, since the other dimension is very dangerous.
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Merlot:<br>
|
||||
If you have an Atelia Crystal that you received from defeating the Embryo in this dimension, I'll give you 1 Dimensional Coin and 14 million SP.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Merlot give_coin">"I have an Atelia Crystal."</Button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Merlot:<br>
|
||||
I'm exchanging rewards for Dimensional Coins.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3401800">"I want to exchange a Dimensional Coin for a reward."</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3401801">"I want to exchange a Enhancement Stone Coupon."</button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Merlot:<br>
|
||||
You don't have an Atelia Energy Crystal. Please check again.<br>
|
||||
</body></html>
|
@@ -1,10 +0,0 @@
|
||||
<html><body>Merlot:<br>
|
||||
Hello! I'm Merlot.<br>
|
||||
Did you know that the Embryo have started appearing in the other dimension? I've been told by Master Mermoden to defeat those Embryo, and I've been searching for people to help me.<br>
|
||||
And... I came here... and met Aria... and I kind of, uh... fell in love.<br>
|
||||
Well, I'm just here to look for someone who will help me defeat the enemy.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Merlot dimensional_raid">"I want to go into the Dimensional Raid."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Merlot 34018-2.htm">"I want to exchange an Atelia Crystal for a Dimensional Coin."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Merlot 34018-3.htm">"I want to exchange rewards."</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -1,101 +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 ai.areas.HuntersVillage.Merlot;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.QuestSound;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Merlot AI.
|
||||
* @author crystalgarden
|
||||
*/
|
||||
public final class Merlot extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int MERLOT = 34018;
|
||||
// Item
|
||||
private static final int ATELIA_CRYSTAL = 45610;
|
||||
private static final int DIMENSIONAL_COIN = 45941;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 99;
|
||||
// Location
|
||||
private static final Location DIMENSIONAL_RAID = new Location(116503, 75392, -2712); // Merlot Position
|
||||
|
||||
private Merlot()
|
||||
{
|
||||
addStartNpc(MERLOT);
|
||||
addTalkId(MERLOT);
|
||||
addFirstTalkId(MERLOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34018-2.htm":
|
||||
case "34018-3.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "give_coin":
|
||||
{
|
||||
if (hasQuestItems(player, ATELIA_CRYSTAL))
|
||||
{
|
||||
giveItems(player, DIMENSIONAL_COIN, 1);
|
||||
addExpAndSp(player, 0, 14000000);
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "34018-5.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "dimensional_raid": // Need TODO Dimensional Raid
|
||||
{
|
||||
if (player.getLevel() < MIN_LEVEL)
|
||||
{
|
||||
htmltext = "34018-1.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
player.teleToLocation(DIMENSIONAL_RAID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
return "34018.htm";
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Merlot();
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Teleport Device:<br>
|
||||
Cannot enter the Atelia Castle.<br>
|
||||
(Kelbim has not appeared in the Atelia Fortress so you cannot enter.)
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Teleport Device:<br>
|
||||
(A command channel needs at least %min% members to challenge Kelbim.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Teleport Device:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
(The players who belong to an association can only enter through the Association Leader.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Teleport Device:<br>
|
||||
I'll help you enter the Atelia Castle.<br1>
|
||||
Would you like to enter?<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest Kelbim">"Yes, please."</Button>
|
||||
</body></html>
|
@@ -1,435 +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 ai.bosses.Kelbim;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.Rnd;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import com.l2jmobius.gameserver.enums.Movie;
|
||||
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.L2Party;
|
||||
import com.l2jmobius.gameserver.model.Location;
|
||||
import com.l2jmobius.gameserver.model.StatsSet;
|
||||
import com.l2jmobius.gameserver.model.TeleportWhereType;
|
||||
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.quest.QuestTimer;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.Earthquake;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
|
||||
import com.l2jmobius.gameserver.util.Broadcast;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Kelbim AI<br>
|
||||
* @author LasTravel<br>
|
||||
* @video https://www.youtube.com/watch?v=qVkk2BJoGoU
|
||||
*/
|
||||
public class Kelbim extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static final int ALIVE = 0;
|
||||
private static final int WAITING = 1;
|
||||
private static final int FIGHTING = 2;
|
||||
private static final int DEAD = 3;
|
||||
// NPCs
|
||||
private static final int ENTER_DEVICE = 34052;
|
||||
private static final int TELEPORT_DEVICE = 34053;
|
||||
private static final int KELBIM_SHOUT = 19597;
|
||||
private static final int KELBIM = 26124;
|
||||
private static final int GUARDIAN_SINISTRA = 26126;
|
||||
private static final int GUARDIAN_DESTRA = 26127;
|
||||
private static final int[] KELBIM_GUARDIANS =
|
||||
{
|
||||
GUARDIAN_SINISTRA,
|
||||
GUARDIAN_DESTRA
|
||||
};
|
||||
private static final int KELBIM_GUARD = 26129;
|
||||
private static final int KELBIM_ALTAR = 26130;
|
||||
private static final int[] KELBIM_MINIONS =
|
||||
{
|
||||
GUARDIAN_SINISTRA,
|
||||
GUARDIAN_DESTRA,
|
||||
KELBIM_GUARD
|
||||
};
|
||||
private static final int[] ALL_MONSTERS =
|
||||
{
|
||||
KELBIM,
|
||||
KELBIM_MINIONS[0],
|
||||
KELBIM_MINIONS[1],
|
||||
KELBIM_MINIONS[2],
|
||||
KELBIM_ALTAR
|
||||
};
|
||||
// Doors
|
||||
private static final int DOOR1 = 18190002;
|
||||
private static final int DOOR2 = 18190004;
|
||||
// Skills
|
||||
private static final Skill METEOR_CRASH = SkillData.getInstance().getSkill(23692, 1);
|
||||
private static final Skill WATER_DROP = SkillData.getInstance().getSkill(23693, 1);
|
||||
private static final Skill TORNADO_SACKLE = SkillData.getInstance().getSkill(23694, 1);
|
||||
private static final Skill FLAME_THROWER = SkillData.getInstance().getSkill(23699, 1);
|
||||
private static final Skill[] AREA_SKILLS =
|
||||
{
|
||||
METEOR_CRASH,
|
||||
WATER_DROP,
|
||||
TORNADO_SACKLE,
|
||||
FLAME_THROWER
|
||||
};
|
||||
// Misc
|
||||
private static final L2ZoneType ZONE = ZoneManager.getInstance().getZoneById(60023);
|
||||
private static final Location KELBIM_LOCATION = new Location(-55386, 58939, -274);
|
||||
// Vars
|
||||
private static L2Npc _kelbimBoss;
|
||||
private static long _lastAction;
|
||||
private static int _bossStage;
|
||||
private static ArrayList<L2Npc> _minions = new ArrayList<>();
|
||||
|
||||
public Kelbim()
|
||||
{
|
||||
addTalkId(ENTER_DEVICE, TELEPORT_DEVICE);
|
||||
addStartNpc(ENTER_DEVICE, TELEPORT_DEVICE);
|
||||
addFirstTalkId(ENTER_DEVICE, TELEPORT_DEVICE);
|
||||
addAttackId(ALL_MONSTERS);
|
||||
addKillId(KELBIM);
|
||||
|
||||
// Unlock
|
||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM);
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
{
|
||||
startQuestTimer("unlock_kelbim", time, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
openDoor(DOOR1, 0);
|
||||
openDoor(DOOR2, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "unlock_kelbim":
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, ALIVE);
|
||||
Broadcast.toAllOnlinePlayers(new Earthquake(-55754, 59903, -269, 20, 10));
|
||||
openDoor(DOOR1, 0);
|
||||
openDoor(DOOR2, 0);
|
||||
break;
|
||||
}
|
||||
case "check_activity_task":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, ALIVE);
|
||||
for (L2Character charInside : ZONE.getCharactersInside())
|
||||
{
|
||||
if (charInside != null)
|
||||
{
|
||||
if (charInside.isNpc())
|
||||
{
|
||||
charInside.deleteMe();
|
||||
}
|
||||
else if (charInside.isPlayer())
|
||||
{
|
||||
charInside.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(charInside, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
startQuestTimer("end_kelbim", 2000, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("check_activity_task", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "stage_1_start":
|
||||
{
|
||||
_bossStage = 1;
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, FIGHTING);
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_KELBIM_OPENING);
|
||||
startQuestTimer("stage_1_kelbim_spawn", 25000, null, null);
|
||||
break;
|
||||
}
|
||||
case "stage_1_kelbim_spawn":
|
||||
{
|
||||
_kelbimBoss = addSpawn(KELBIM, -56340, 60801, -269, 54262, false, 0);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
startQuestTimer("check_activity_task", 60000, null, null, true);
|
||||
startQuestTimer("stage_all_random_area_attack", Rnd.get(2, 3) * 60000, null, null);
|
||||
break;
|
||||
}
|
||||
case "stage_all_spawn_minions":
|
||||
{
|
||||
for (int i = 0; i < Rnd.get((_bossStage * 5) / 2, _bossStage * 5); i++)
|
||||
{
|
||||
L2Npc minion = addSpawn(KELBIM_GUARD, _kelbimBoss.getX(), _kelbimBoss.getY(), _kelbimBoss.getZ(), 0, true, 0, true, 0);
|
||||
minion.setIsRunning(true);
|
||||
((L2Attackable) minion).setIsRaidMinion(true);
|
||||
_minions.add(minion);
|
||||
}
|
||||
for (int i = 0; i < Rnd.get((_bossStage * 2) / 2, _bossStage * 2); i++)
|
||||
{
|
||||
L2Npc minion = addSpawn(KELBIM_GUARDIANS[Rnd.get(KELBIM_GUARDIANS.length)], _kelbimBoss.getX(), _kelbimBoss.getY(), _kelbimBoss.getZ(), 0, true, 0, true, 0);
|
||||
minion.setIsRunning(true);
|
||||
((L2Attackable) minion).setIsRaidMinion(true);
|
||||
_minions.add(minion);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "stage_all_random_area_attack":
|
||||
{
|
||||
if ((_bossStage > 0) && (_bossStage < 7))
|
||||
{
|
||||
if (_kelbimBoss.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = AREA_SKILLS[Rnd.get(AREA_SKILLS.length)];
|
||||
ArrayList<L2Npc> _skillNpcs = new ArrayList<>();
|
||||
for (L2PcInstance pl : ZONE.getPlayersInside())
|
||||
{
|
||||
if (pl == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (Rnd.get(100) > 40)
|
||||
{
|
||||
L2Npc skillMob = addSpawn(KELBIM_SHOUT, pl.getX(), pl.getY(), pl.getZ() + 10, 0, true, 60000, false, 0);
|
||||
_skillNpcs.add(skillMob);
|
||||
_minions.add(skillMob);
|
||||
}
|
||||
}
|
||||
for (L2Npc skillNpc : _skillNpcs)
|
||||
{
|
||||
if (skillNpc == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
skillNpc.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
startQuestTimer("stage_all_random_area_attack", Rnd.get(1, 2) * 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "cancel_timers":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("check_activity_task", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "end_kelbim":
|
||||
{
|
||||
_bossStage = 0;
|
||||
ZONE.oustAllPlayers();
|
||||
if (_kelbimBoss != null)
|
||||
{
|
||||
_kelbimBoss.deleteMe();
|
||||
}
|
||||
if (!_minions.isEmpty())
|
||||
{
|
||||
for (L2Npc minion : _minions)
|
||||
{
|
||||
if (minion == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
minion.deleteMe();
|
||||
}
|
||||
}
|
||||
_minions.clear();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case TELEPORT_DEVICE:
|
||||
{
|
||||
player.teleToLocation(-55730, 55643, -1954);
|
||||
break;
|
||||
}
|
||||
case ENTER_DEVICE:
|
||||
{
|
||||
return "34052.html";
|
||||
}
|
||||
}
|
||||
return super.onFirstTalk(npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (npc.getId() == ENTER_DEVICE)
|
||||
{
|
||||
int status = GrandBossManager.getInstance().getBossStatus(KELBIM);
|
||||
if (status > ALIVE)
|
||||
{
|
||||
return "34052-1.html";
|
||||
}
|
||||
|
||||
if (!player.isInParty())
|
||||
{
|
||||
final NpcHtmlMessage packet = new NpcHtmlMessage(npc.getObjectId());
|
||||
packet.setHtml(getHtm(player.getHtmlPrefix(), "34052-2.html"));
|
||||
packet.replace("%min%", Integer.toString(Config.KELBIM_MIN_PLAYERS));
|
||||
player.sendPacket(packet);
|
||||
return null;
|
||||
}
|
||||
|
||||
final L2Party party = player.getParty();
|
||||
final boolean isInCC = party.isInCommandChannel();
|
||||
final List<L2PcInstance> members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
|
||||
final boolean isPartyLeader = (isInCC) ? party.getCommandChannel().isLeader(player) : party.isLeader(player);
|
||||
if (!isPartyLeader)
|
||||
{
|
||||
return "34052-3.html";
|
||||
}
|
||||
else if ((members.size() < Config.KELBIM_MIN_PLAYERS) || (members.size() > Config.KELBIM_MAX_PLAYERS))
|
||||
{
|
||||
final NpcHtmlMessage packet = new NpcHtmlMessage(npc.getObjectId());
|
||||
packet.setHtml(getHtm(player.getHtmlPrefix(), "34052-2.html"));
|
||||
packet.replace("%min%", Integer.toString(Config.KELBIM_MIN_PLAYERS));
|
||||
player.sendPacket(packet);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
if (member.isInsideRadius(npc, 1000, true, false))
|
||||
{
|
||||
member.teleToLocation(KELBIM_LOCATION, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (status == ALIVE)
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, WAITING);
|
||||
startQuestTimer("stage_1_start", Config.KELBIM_WAIT_TIME * 60 * 1000, null, null);
|
||||
}
|
||||
}
|
||||
return super.onTalk(npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
|
||||
{
|
||||
if (npc.getId() == KELBIM)
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
|
||||
switch (_bossStage)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
if (npc.getCurrentHp() < (npc.getMaxHp() * 0.80))
|
||||
{
|
||||
_bossStage = 2;
|
||||
notifyEvent("stage_all_spawn_minions", null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
if (npc.getCurrentHp() < (npc.getMaxHp() * 0.60))
|
||||
{
|
||||
_bossStage = 3;
|
||||
notifyEvent("stage_all_spawn_minions", null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
if (npc.getCurrentHp() < (npc.getMaxHp() * 0.40))
|
||||
{
|
||||
_bossStage = 4;
|
||||
notifyEvent("stage_all_spawn_minions", null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
if (npc.getCurrentHp() < (npc.getMaxHp() * 0.20))
|
||||
{
|
||||
_bossStage = 5;
|
||||
notifyEvent("stage_all_spawn_minions", null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
if (npc.getCurrentHp() < (npc.getMaxHp() * 0.05))
|
||||
{
|
||||
_bossStage = 6;
|
||||
notifyEvent("stage_all_spawn_minions", null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
|
||||
{
|
||||
_bossStage = 7;
|
||||
|
||||
addSpawn(TELEPORT_DEVICE, -54331, 58331, -264, 16292, false, 1800000);
|
||||
|
||||
notifyEvent("cancel_timers", null, null);
|
||||
|
||||
closeDoor(DOOR1, 0);
|
||||
closeDoor(DOOR2, 0);
|
||||
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, DEAD);
|
||||
final long respawnTime = (Config.KELBIM_SPAWN_INTERVAL + getRandom(-Config.KELBIM_SPAWN_RANDOM, Config.KELBIM_SPAWN_RANDOM)) * 3600000;
|
||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM);
|
||||
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
|
||||
GrandBossManager.getInstance().setStatsSet(KELBIM, info);
|
||||
|
||||
startQuestTimer("unlock_kelbim", respawnTime, null, null);
|
||||
startQuestTimer("end_kelbim", 1800000, null, null);
|
||||
|
||||
return super.onKill(npc, killer, isPet);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Kelbim();
|
||||
}
|
||||
}
|
@@ -1,9 +0,0 @@
|
||||
<html><body>Adventure Guildsman:<br>
|
||||
Welcome to Underground Gainak, a place with endless adventures.<br>
|
||||
I've been dispatched here from the Adventurer's Guild.<br>
|
||||
We know anything and everything that can help you in your adventures. We are also <font color="LEVEL">exchanging Adventurer's Marks and Seals</font>. How can I help you?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest AdventureGuildsman questList">"Tell me about quests."</Button>
|
||||
<Button ALIGN="LEFT" ICON="NORMAL" action="bypass -h npc_%objectId%_Quest">"I want to exchange Adventurer's Marks and Seals."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest AdventureGuildsman AdventureGuildsman-Gludin.html">"I'd like to use a Life Crystal."</Button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
@@ -47,9 +47,9 @@ public final class AdventureGuildsman extends AbstractNpcAI
|
||||
31835, 31837, 31838,
|
||||
31840, 31841, 31991,
|
||||
31992, 31993, 31995,
|
||||
33946, 34187, 31812,
|
||||
31813, 31811, 31801,
|
||||
31802, 31803
|
||||
33946, 31812, 31813,
|
||||
31811, 31801, 31802,
|
||||
31803
|
||||
};
|
||||
// @formatter:on
|
||||
// Skills
|
||||
|
@@ -46,18 +46,12 @@ public final class AreaSkillNpc extends AbstractNpcAI
|
||||
13323, // Whisper of Fear
|
||||
13324, // Whisper of Fear
|
||||
13325, // Whisper of Fear
|
||||
13458, // Whisper of Fear
|
||||
13459, // Whisper of Fear
|
||||
13460, // Whisper of Fear
|
||||
13310, // Solo Dance
|
||||
13377, // Solo Dance
|
||||
13378, // Solo Dance
|
||||
13379, // Solo Dance
|
||||
13380, // Solo Dance
|
||||
13381, // Solo Dance
|
||||
13452, // Solo Dance
|
||||
13453, // Solo Dance
|
||||
13454, // Solo Dance
|
||||
};
|
||||
private static final int[] TOTEMS = // ai_totem_of_body
|
||||
{
|
||||
|
@@ -36,15 +36,10 @@ public final class GateOfUnlimitedSummoning extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final Map<Integer, Integer> DEATH_GATE = new HashMap<>();
|
||||
|
||||
static
|
||||
{
|
||||
DEATH_GATE.put(14927, 1); // Death Gate
|
||||
DEATH_GATE.put(15200, 2); // Death Gate
|
||||
DEATH_GATE.put(15201, 3); // Death Gate
|
||||
DEATH_GATE.put(15202, 4); // Death Gate
|
||||
}
|
||||
|
||||
// Skills
|
||||
private static final int GATE_ROOT = 11289;
|
||||
private static final int GATE_VORTEX = 11291;
|
||||
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Wealthy Merchant Red:<br>
|
||||
Hello, I'm Red. I'm the leader of the Red Libra.<br>
|
||||
Our group has a long history. My great-great-grandfather started it. We wander here and there, and we came to Aden because we heard there are lots of people.<br>
|
||||
We have very rare items as well. Go meet our merchants to find out more.
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Elder Green:<br>
|
||||
I'm Green from the Red Libra merchants. I've been together with them since Red's grandfather was in charge. I'm old and very experienced.<br>
|
||||
We visited Talking Island Village before arriving in the Town of Giran. I met Raina there, and she told me about the dual class.<br>
|
||||
That's how I came to realize something about the dual class. And I found the secret behind reawakening the dual class.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest RedLibra 34211-2.htm">"Can I reawaken my Awakened dual class?"</Button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Elder Green:<br>
|
||||
Raina isn't as experienced, so she can't maintain a character's level when reawakening the dual class. However, I, am experienced. When <font color="LEVEL">reawakening the dual class</font>, I can <font color="LEVEL">let you keep your level</font>. However, instant reawakening does come with its flaws. You'll have to learn the skills yourself.<br>
|
||||
In order to rewaken your dual class, bring <font color="LEVEL">your current dual class' cloak</font>, <font color="LEVEL">1 Proof of Red</font>, and <font color="LEVEL">667 Gemstones (R-grade)</font>. I'm a merchant, so no free passes here.<br>
|
||||
You need <font color="LEVEL">Red Tears</font> in order to work with us. Talk to <font color="LEVEL">Bodyguard Blue</font> and help him to get some.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Raina reawekenDualclass">"I would like to reawaken my dual class."</Button>
|
||||
</body></html>
|
@@ -1,7 +0,0 @@
|
||||
<html><body>Artisan Black:<br>
|
||||
I'm Black, and I deal with the great weapons of the Red Libra merchants. I'm the best in the world at creating and repairing weapons. I'm a master.<br>
|
||||
I heard about the Mammon blacksmiths, but I can guarantee you that I'm much better than them. I can change those <font color="LEVEL">R-grade weapons</font> into <font color="LEVEL">other types</font> as well.<br>
|
||||
I'm also selling <font color="LEVEL">Elysium weapons</font>. Mind you, I'm the only one in the world who can make them.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest RedLibra 34212-2.htm">"I want to change my weapon into another type."</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest RedLibra 34212-3.htm">"I want to purchase an Elysium weapon."</button>
|
||||
</body></html>
|
@@ -1,10 +0,0 @@
|
||||
<html><body>Artisan Black:<br>
|
||||
Do you want to get another weapon type? That's easy. But we are merchants! Nothing is free.<br>
|
||||
We don't trade with just anyone. If you want to trade, give me <font color="LEVEL">1 Proof of Red</font>. Also, some <font color="LEVEL">Gemstones</font>. The amount depends on the grade of the weapon.<br>
|
||||
When you switch a weapon, the <font color="LEVEL">enchantment, Soul Crystal, augmenting, and attributes</font> will remain the same. However, the appearance will be changed, so keep that in mind.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_exc_multisell 3421201">"I want to change an R-grade weapon."</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_exc_multisell 3421202">"I want to change an R95-grade weapon."</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_exc_multisell 3421203">"I want to change an R99-grade weapon."</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_exc_multisell 3421204">"I want to exchange a Tauti and Kelbim weapon."</button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="link ev_libra_black001.htm">Back</button>
|
||||
</body></html>
|
@@ -1,7 +0,0 @@
|
||||
<html><body>Artisan Black:<br>
|
||||
Elysium weapons can only be created in Elysium. They are great weapons. There's one issue with them though. They can only be used while we are staying here, since the weapons are greatly affected by Elysium.<br>
|
||||
Once we leave, the Elysium weapons will also disappear. But I can guarantee that the weapons will be amazing.<br>
|
||||
It's very precious, so I can't just give it to you for free. Just give me <font color="LEVEL">1 Scroll: Enchant Weapon (R-grade)</font>. Pretty cheap, right?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3421205">"I want to purchase an Elysium weapon."</button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest RedLibra 34212-1.htm">Back.</button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Grocer Pink:<br>
|
||||
I'm Grocer Pink, one of the Red Libra merchants. I'm the prettiest and cutest out of us.<br>
|
||||
I've been collecting <font color="LEVEL">dyes</font> from this place. If you have anything you need, take a look around.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest RedLibra 34213-2.htm">"I want to exchange dyes."</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest RedLibra 34213-3.htm">"I want to exchange supplies."</button>
|
||||
</body></html>
|
@@ -1,8 +0,0 @@
|
||||
<html><body>Grocer Pink:<br>
|
||||
I was so surprised when I first saw the dyes in Aden. That's why I'm trying to collect as many as possible. I'm trying out different techniques with those dyes. Sell those to me, and I'll give you a <font color="LEVEL">Rudi</font>, which is a mixture of those dyes.<br>
|
||||
If you have <font color="LEVEL">Rudies</font>, I can create some great dyes from those. I can use Rudies to create <font color="LEVEL">Lv. 5 Giant Dye Packs</font>. I can create <font color="LEVEL">10</font> at a time.<br>
|
||||
One thing to keep in mind though is that the Rudies are a combination of various dyes, so the type of dye I can create is random. Anyway, are you up to test your luck?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_exc_multisell 3421301">"I want to sell dyes."</button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3421302">"I want to purchase dyes."</button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest RedLibra 34213-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Grocer Pink:<br>
|
||||
We thoroughly investigate our destinations before going. We always carry various items.<br>
|
||||
We brought some items that you might like, so make sure to take a look around.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3421303">"I want to purchase your items."</button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest RedLibra 34213-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Bodyguard Blue:<br>
|
||||
I'm Blue, a bodyguard of the Red Libra merchants. I go to the most dangerous places.<br>
|
||||
I'm the only bodyguard that accompanied the merchants this time. We are in charge of going ahead of the group and dealing with monsters, but since I'm the only one here now, we haven't been able to go through.<br>
|
||||
That's why I'm looking for people to help us out. I'll give you something that will allow you to trade with one of our merchants in exchange. Interested?<br>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h Quest">"What do I need to do?"</button>
|
||||
</body></html>
|
@@ -1,78 +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 events.RedLibra;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.LongTimeEvent;
|
||||
|
||||
/**
|
||||
* Red Libra<br>
|
||||
* Info - http://www.lineage2.com/en/news/events/01202016-red-libra.php
|
||||
* @author Mobius
|
||||
*/
|
||||
public final class RedLibra extends LongTimeEvent
|
||||
{
|
||||
// NPCs
|
||||
private static final int RED = 34210;
|
||||
private static final int GREEN = 34211;
|
||||
private static final int BLACK = 34212;
|
||||
private static final int PINK = 34213;
|
||||
private static final int BLUE = 34214;
|
||||
|
||||
private RedLibra()
|
||||
{
|
||||
addStartNpc(RED, GREEN, BLACK, PINK, BLUE);
|
||||
addFirstTalkId(RED, GREEN, BLACK, PINK, BLUE);
|
||||
addTalkId(RED, GREEN, BLACK, PINK, BLUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34210-1.htm":
|
||||
case "34211-1.htm":
|
||||
case "34211-2.htm":
|
||||
case "34212-1.htm":
|
||||
case "34212-2.htm":
|
||||
case "34212-3.htm":
|
||||
case "34213-1.htm":
|
||||
case "34213-2.htm":
|
||||
case "34213-3.htm":
|
||||
case "34214-1.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
return npc.getId() + "-1.htm";
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new RedLibra();
|
||||
}
|
||||
}
|
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<event name="Red Libra" active="20 01 1016-03 02 2016" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/eventConfig.xsd">
|
||||
<spawnlist>
|
||||
<add npc="34210" x="81010" y="149003" z="-3464" heading="65404" />
|
||||
<add npc="34211" x="80986" y="149064" z="-3464" heading="8749" />
|
||||
<add npc="34212" x="80981" y="148940" z="-3464" heading="65404" />
|
||||
<add npc="34213" x="80941" y="149137" z="-3464" heading="65404" />
|
||||
<add npc="34214" x="80940" y="148874" z="-3464" heading="65404" />
|
||||
<add npc="34215" x="80834" y="149143" z="-3464" heading="65404" />
|
||||
<add npc="34215" x="80847" y="148876" z="-3464" heading="65404" />
|
||||
<add npc="34216" x="80834" y="149017" z="-3464" heading="65404" />
|
||||
</spawnlist>
|
||||
<messages>
|
||||
<add type="onEnd" text="Red Libra: Event end!" />
|
||||
<add type="onEnter" text="Red Libra: Event ongoing!" />
|
||||
</messages>
|
||||
</event>
|
@@ -1,14 +1,10 @@
|
||||
245 Come to Me
|
||||
353 Power of Darkness
|
||||
480 Another Legacy of Cruma Tower
|
||||
482 Recertification of Value
|
||||
504 Competition for the Bandit Stronghold
|
||||
505 Blood Offering
|
||||
655 A Grand Plan for Taming Wild Beasts
|
||||
665 Great Pirate Zaken's Treasure
|
||||
666 Leona Blackbird's Treasure
|
||||
667 Queen Beora's Legacy
|
||||
668 The Gladiator's Treasure
|
||||
669 High Priest's Treasure
|
||||
670 Turek Orc's Treasure
|
||||
750 Seven Flowers
|
||||
759 The Dwarven Nightmare Continues
|
||||
767 Banishing Evil
|
||||
@@ -21,24 +17,15 @@
|
||||
781 Utilize the Darkness - Seed of Annihilation
|
||||
782 Utilize the Darkness - Seed of Hellfire
|
||||
789 Waiting for Pa'agrio
|
||||
816 Plans to Repair the Stronghold
|
||||
824 Attack the Command Post
|
||||
826 In Search of the Secret Weapon
|
||||
827 Einhasad's Order
|
||||
828 Eva's Blessing
|
||||
829 Maphr's Salvation
|
||||
830 The Way of the Giant's Pawn
|
||||
831 Sayha's Scheme
|
||||
833 Devil's Treasure, Tauti
|
||||
834 Against Dragonclaw
|
||||
835 Pitiable Melisa
|
||||
10352 Legacy of Cruma Tower
|
||||
10357 Altar of Blood that Awakens Destruction
|
||||
10374 That Place Succubus
|
||||
10456 Operation: Rescue
|
||||
10457 Kefensis' Illusion
|
||||
10458 To the Desert Quarry
|
||||
10506 Diana's Request
|
||||
10463 The Soul of a Sword
|
||||
10506 Paddy's Request
|
||||
10507 Paddy's Request
|
||||
10508 Paddy's Request
|
||||
10713 The Hero's Journey: Bloody Swampland
|
||||
10714 The Hero's Journey: Seed of Annihilation
|
||||
10715 The Hero's Journey: Harnak Underground Ruins
|
||||
@@ -67,6 +54,3 @@
|
||||
10806 The Dimensional Warp, Part 6
|
||||
10807 The Dimensional Warp, Part 7
|
||||
10809 The Hero's Journey: Blazing Swamp
|
||||
10844 Bloody Battle - Seizing Supplies
|
||||
10845 Bloody Battle - Rescue the Smiths
|
||||
10846 Bloody Battle - Meeting the Commander
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Maestro Nikola:<br>
|
||||
Have you given Lorain a great deal of help?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00188_SealRemoval 30621-02.html">Show him a metal piece and explain the situation to him.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Maestro Nikola:<br>
|
||||
Hmm... This damage is too extensive for me to repair, but I know a person who can do work of this kind.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00188_SealRemoval 30621-03.html">"Who is it? Tell me."</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Maestro Nikola:<br>
|
||||
<font color="LEVEL">Locksmith Dorothy in Heine</font> is the foremost expert for this kind of work. I know it's a long journey, but I think it would be worth your while to go visit her.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00188_SealRemoval 30621-04.html">"I understand. Dorothy, you said?"</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Maestro Nikola:<br>
|
||||
That's right. <font color="LEVEL">Locksmith Dorothy</font>. I am sure she can help you in this matter.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Maestro Nikola:<br>
|
||||
Didn't you already tell me that? Go and find <font color="LEVEL">Dorothy</font>.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
Good to see you! I tried to reconstruct these broken metal pieces, but it's beyond my skill. I think we must ask <font color="LEVEL">Nikola</font> for help -- he knows a lot of people, one of whom may be able to repair this. I know I should probably visit him myself, but I'm still a litle worried about the argument we had before. Would you help me?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00188_SealRemoval 30673-03.htm">"You can count on me."</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
I've been studying the metal plate you brought me. I'm very pleased that I can continue my research...<br>
|
||||
(Only characters level 41 and above are permitted to undertake this quest.)
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
Tell him these metal fragments are actually parts of an ancient recording device, and ask him if he knows how to restore it. If there's a way to do so, I trust you to see that it gets done.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
Did you visit <font color="LEVEL">Nikola</font>? Please find a way to repair these broken metal pieces.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
Why have you come to see me?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00188_SealRemoval 30970-02.html">"Nikola thought you might be able to repair these broken metal pieces."</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
Hmm, this is badly broken. Where did you get it?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00188_SealRemoval 30970-03.html">"I found it on the 2nd floor of Cruma Tower, a place that looked like the Giants' research laboratory."</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
This might be a recording device... I assume you'd like me to try and repair it so you can recover whatever information it contains?<br>
|
||||
This is going to take some time, but I'll give it my best.<br>
|
||||
Come back later and we'll see what we find.
|
||||
</body></html>
|
@@ -1,185 +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 quests.Q00188_SealRemoval;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
|
||||
import quests.Q00184_ArtOfPersuasion.Q00184_ArtOfPersuasion;
|
||||
import quests.Q00185_NikolasCooperation.Q00185_NikolasCooperation;
|
||||
import quests.Q00186_ContractExecution.Q00186_ContractExecution;
|
||||
import quests.Q00187_NikolasHeart.Q00187_NikolasHeart;
|
||||
|
||||
/**
|
||||
* Seal Removal (188)
|
||||
* @author ivantotov
|
||||
*/
|
||||
public final class Q00188_SealRemoval extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int MAESTRO_NIKOLA = 30621;
|
||||
private static final int RESEARCHER_LORAIN = 30673;
|
||||
private static final int DOROTHY_LOCKSMITH = 30970;
|
||||
// Items
|
||||
private static final int LORAINES_CERTIFICATE = 10362;
|
||||
private static final int BROKEN_METAL_PIECES = 10369;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 41;
|
||||
private static final int MAX_LEVEL_FOR_EXP_SP = 47;
|
||||
|
||||
public Q00188_SealRemoval()
|
||||
{
|
||||
super(188);
|
||||
addStartNpc(RESEARCHER_LORAIN);
|
||||
addTalkId(RESEARCHER_LORAIN, MAESTRO_NIKOLA, DOROTHY_LOCKSMITH);
|
||||
registerQuestItems(BROKEN_METAL_PIECES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30673-03.htm":
|
||||
{
|
||||
if (qs.isCreated())
|
||||
{
|
||||
qs.startQuest();
|
||||
qs.setMemoState(1);
|
||||
giveItems(player, BROKEN_METAL_PIECES, 1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30621-02.html":
|
||||
{
|
||||
if (qs.isMemoState(1))
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30621-03.html":
|
||||
{
|
||||
if (qs.isMemoState(1))
|
||||
{
|
||||
qs.setMemoState(2);
|
||||
qs.setCond(2, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30621-04.html":
|
||||
{
|
||||
if (qs.isMemoState(2))
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30970-02.html":
|
||||
{
|
||||
if (qs.isMemoState(2))
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30970-03.html":
|
||||
{
|
||||
if (qs.isMemoState(2))
|
||||
{
|
||||
giveAdena(player, 98583, true);
|
||||
if (player.getLevel() < MAX_LEVEL_FOR_EXP_SP)
|
||||
{
|
||||
addExpAndSp(player, 285935, 18711);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
if ((npc.getId() == RESEARCHER_LORAIN) && !hasQuestItems(player, LORAINES_CERTIFICATE))
|
||||
{
|
||||
final QuestState q184 = player.getQuestState(Q00184_ArtOfPersuasion.class.getSimpleName());
|
||||
final QuestState q185 = player.getQuestState(Q00185_NikolasCooperation.class.getSimpleName());
|
||||
final QuestState q186 = player.getQuestState(Q00186_ContractExecution.class.getSimpleName());
|
||||
final QuestState q187 = player.getQuestState(Q00187_NikolasHeart.class.getSimpleName());
|
||||
if (((q184 != null) && q184.isCompleted()) || ((q185 != null) && q185.isCompleted() && (q186 == null) && (q187 == null)))
|
||||
{
|
||||
htmltext = (player.getLevel() >= MIN_LEVEL) ? "30673-01.htm" : "30673-02.htm";
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case RESEARCHER_LORAIN:
|
||||
{
|
||||
htmltext = "30673-04.html";
|
||||
break;
|
||||
}
|
||||
case MAESTRO_NIKOLA:
|
||||
{
|
||||
if (qs.isMemoState(1))
|
||||
{
|
||||
htmltext = "30621-01.html";
|
||||
}
|
||||
else if (qs.isMemoState(2))
|
||||
{
|
||||
htmltext = "30621-05.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DOROTHY_LOCKSMITH:
|
||||
{
|
||||
if (qs.isMemoState(2))
|
||||
{
|
||||
htmltext = "30970-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted() && (npc.getId() == RESEARCHER_LORAIN))
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Priest Shegfield:<br>
|
||||
How can I help you?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00191_VainConclusion 30068-02.html">"I want to know about the last remaining Cruma."</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Priest Shegfield:<br>
|
||||
Cruma...<br>
|
||||
Where did you hear that name?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00191_VainConclusion 30068-03.html">"It was mentioned in an old record of the Giants we recovered from the ruins of the Tower of Cruma."</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Priest Shegfield:<br>
|
||||
Hmm. Unfortunately, the Cruma are extinct.<br>
|
||||
You know of the ancient war between Elves and Humans? At that time, the Cruma became our greatest ally. But we were overwhelmed by the Humans' sheer numbers and forced to retreat. The Cruma fought a valiant rearguard action, giving us time to reach a safe haven. It was mortally wounded, however, and fell in the place now known as the Sea of Spores. That was the last of its noble kind...
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Priest Shegfield:<br>
|
||||
I already told you about the fate of the Cruma. Your search is in vain, adventurer. I advise you turn your feet onto another path.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Head Blacksmith Kusto:<br>
|
||||
Long time no see. How is Lorain progressing with her assignment?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00191_VainConclusion 30512-02.html">Explain what has happened.</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Head Blacksmith Kusto:<br>
|
||||
I see. Hmm... Researching Cruma, eh? Interesting... Although there is nothing to be gained financially from it, unfortunately... But I suppose the research may still have some value, eh? Thank you for your help. Please take this in exchange for what you've done. I will send word later if I need your further help, adventurer. In the meantime, may Maphr thicken your beard and strengthen your sinews!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
You sure took your time! How did it go?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00191_VainConclusion 30673-02.html">Show him the repaired metal plate.</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
You decoded it! Amazing...<br>
|
||||
Hmm... experiments concerning the life force... To think that a Cruma may still exist! We must find it. I'm sure that <font color="LEVEL">Priest Shegfield, the Elven priest for the Town of Dion</font>, knows more about this matter. I'm sorry to impose on you further, but I'm reluctant to leave here right now. Would you seek out Shegfield and question him?
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
Please visit <font color="LEVEL">Priest Shegfield in the Town of Dion</font> and question him about the whereabouts of the Cruma.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
I see... Well, if the Cruma are extinct, then I suppose we don't need the section concerning it. Thank you for your help, though. Please go report all this to <font color="LEVEL">Kusto</font>. I'm sure that he will reward you for your hard work. Farewell, and may the hammer of Maphr make clear your path!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Researcher Lorain:<br>
|
||||
Many thanks for your trouble. I suppose there's nothing left for you to do here. Please go report all this to <font color="LEVEL">Kusto</font>. Farewell, and may the hammer of Maphr make clear your path!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
Welcome, my young friend! I just now finished the repair work you requested. Do you wish to take the item now?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00191_VainConclusion 30970-03.htm">"Yes, thank you."</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
I am attempting to repair the metal fragments you brought me. Please wait -- this will take some time.<br>
|
||||
(Only characters level 42 and above are permitted to undertake this quest.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
I also checked the inner workings of the machine in order to make sure everything is functional. Consider that service on the house... but I am going to have to charge you for the other repair costs.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00191_VainConclusion 30970-04.htm">"Perhaps you could send the bill to Nikola?"</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
Nikola, you say?<br>
|
||||
Yes, I think it would be best to charge Nikola for my time. Farewell and good luck!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Locksmith Dorothy:<br>
|
||||
The task that brought you here before has already been accomplished. Do you have something else for me?
|
||||
</body></html>
|
@@ -1,219 +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 quests.Q00191_VainConclusion;
|
||||
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
|
||||
import quests.Q00188_SealRemoval.Q00188_SealRemoval;
|
||||
|
||||
/**
|
||||
* Vain Conclusion (191)
|
||||
* @author ivantotov
|
||||
*/
|
||||
public final class Q00191_VainConclusion extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int SHEGFIELD = 30068;
|
||||
private static final int HEAD_BLACKSMITH_KUSTO = 30512;
|
||||
private static final int RESEARCHER_LORAIN = 30673;
|
||||
private static final int DOROTHY_LOCKSMITH = 30970;
|
||||
// Items
|
||||
private static final int REPAIRED_METALLOGRAPH = 10371;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 42;
|
||||
private static final int MAX_LEVEL_FOR_EXP_SP = 48;
|
||||
|
||||
public Q00191_VainConclusion()
|
||||
{
|
||||
super(191);
|
||||
addStartNpc(DOROTHY_LOCKSMITH);
|
||||
addTalkId(DOROTHY_LOCKSMITH, HEAD_BLACKSMITH_KUSTO, RESEARCHER_LORAIN, SHEGFIELD);
|
||||
registerQuestItems(REPAIRED_METALLOGRAPH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30970-03.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30970-04.htm":
|
||||
{
|
||||
if (qs.isCreated())
|
||||
{
|
||||
qs.startQuest();
|
||||
qs.setMemoState(1);
|
||||
giveItems(player, REPAIRED_METALLOGRAPH, 1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30068-02.html":
|
||||
{
|
||||
if (qs.isMemoState(2))
|
||||
{
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30068-03.html":
|
||||
{
|
||||
if (qs.isMemoState(2))
|
||||
{
|
||||
qs.setMemoState(3);
|
||||
qs.setCond(3, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30512-02.html":
|
||||
{
|
||||
if (qs.isMemoState(4))
|
||||
{
|
||||
giveAdena(player, 117327, true);
|
||||
if (player.getLevel() < MAX_LEVEL_FOR_EXP_SP)
|
||||
{
|
||||
addExpAndSp(player, 309467, 20614);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30673-02.html":
|
||||
{
|
||||
if (qs.isMemoState(1))
|
||||
{
|
||||
qs.setMemoState(2);
|
||||
qs.setCond(2, true);
|
||||
takeItems(player, REPAIRED_METALLOGRAPH, -1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
if (npc.getId() == DOROTHY_LOCKSMITH)
|
||||
{
|
||||
final QuestState q188 = player.getQuestState(Q00188_SealRemoval.class.getSimpleName());
|
||||
if ((q188 != null) && q188.isCompleted())
|
||||
{
|
||||
htmltext = (player.getLevel() >= MIN_LEVEL) ? "30970-01.htm" : "30970-02.htm";
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case DOROTHY_LOCKSMITH:
|
||||
{
|
||||
if (qs.getMemoState() >= 1)
|
||||
{
|
||||
htmltext = "30970-05.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SHEGFIELD:
|
||||
{
|
||||
switch (qs.getCond())
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
htmltext = "30068-01.html";
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
htmltext = "30068-04.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case HEAD_BLACKSMITH_KUSTO:
|
||||
{
|
||||
if (qs.isMemoState(4))
|
||||
{
|
||||
htmltext = "30512-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RESEARCHER_LORAIN:
|
||||
{
|
||||
switch (qs.getCond())
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
htmltext = "30673-01.html";
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
htmltext = "30673-03.html";
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
qs.setMemoState(4);
|
||||
qs.setCond(4, true);
|
||||
htmltext = "30673-04.html";
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
htmltext = "30673-05.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == DOROTHY_LOCKSMITH)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -32,7 +32,7 @@ import com.l2jmobius.gameserver.network.NpcStringId;
|
||||
|
||||
/**
|
||||
* Little Wing (420)
|
||||
* @author Pandragon / Stayway (Rework Helios)
|
||||
* @author Pandragon / Stayway
|
||||
*/
|
||||
public final class Q00420_LittleWing extends Quest
|
||||
{
|
||||
@@ -81,19 +81,22 @@ public final class Q00420_LittleWing extends Quest
|
||||
private static final int LETO_WARRIOR = 20580;
|
||||
private static final int[] DELUXE_STONE_BREAKERS =
|
||||
{
|
||||
23566, // Nymph Rose
|
||||
23567, // Nymph Rose
|
||||
23568, // Nymph Lily
|
||||
23569, // Nymph Lily
|
||||
23570, // Nymph Tulip
|
||||
23571, // Nymph Tulip
|
||||
23572, // Nymph Cosmos
|
||||
23573, // Nymph Cosmos
|
||||
23578, // Nymph Guardian
|
||||
23579, // Buoyant Seed
|
||||
23580, // Fluttering Seed
|
||||
23581, // Apherus
|
||||
23582, // Nymph Rose
|
||||
20589, // Fline
|
||||
20590, // Liele
|
||||
20591, // Valley Treant
|
||||
20592, // Satyr
|
||||
20593, // Unicorn
|
||||
20594, // Forest Runner
|
||||
20595, // Fline Elder
|
||||
20596, // Liele Elder
|
||||
20597, // Valley Treant Elder
|
||||
20598, // Satyr Elder
|
||||
20599, // Unicorn Elder
|
||||
27185, // Fairy Tree of Wind (Quest Monster)
|
||||
27186, // Fairy Tree of Star (Quest Monster)
|
||||
27187, // Fairy Tree of Twilight (Quest Monster)
|
||||
27188, // Fairy Tree of Abyss (Quest Monster)
|
||||
27189, // Soul of Tree Guardian (Quest Monster)
|
||||
};
|
||||
// Rewards
|
||||
private static final int DRAGONFLUTE_OF_WIND = 3500;
|
||||
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Captain Kurtiz:<br>
|
||||
Do you know about <font color="LEVEL">Nightmare Kamaloka</font>? It's a place for those who had to leave their homes, waiting for the right moment to go back.<br>
|
||||
The way to Nightmare Kamaloka is very dangerous and it changes every time, so it's not just for anyone. The reason why people still went though, is because it was a safe place.<br>
|
||||
Most of those people were fugitives or those whose lives were threatened.<br>
|
||||
<button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00760_BlockTheExit 30870-02.htm">"I see."</button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Captain Kurtiz:<br>
|
||||
Those creatures grew stronger there and whenever the gates opened, they were able to go to the places they wanted.<br>
|
||||
However, when the <font color="LEVEL">Seal of Punishment</font> was released, it affected multiple dimensions. A lot of things were changed because of that impact, and even Nightmare Kamaloka was affected. I'm not sure about the details, but the various paths to Nightmare Kamaloka stopped working.<br>
|
||||
The problem is that the dimensional door is linked to a place near Aden.<br>
|
||||
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00760_BlockTheExit 30870-03.htm">"I see..."</button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Captain Kurtiz:<br>
|
||||
Those creatures in Nightmare Kamaloka have been trying to come out to Aden. That's why we had to plan a battle there. The difference in the dimensions is making it difficult, though. It's because they keep appearing out from the other dimensions, even if we get rid of them.<br>
|
||||
We have to defeat the creatures from each of the dimensions. In order to do that, we need the help of as many adventurers as possible. Thanks for listening to me.<br>
|
||||
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00760_BlockTheExit 30870-04.html">"I'll help you."</button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Captain Kurtiz:<br>
|
||||
I'll tell you again. Please don't let them use Aden as an exit. Go to Nightmare Kamaloka and defeat <font color="LEVEL">Tracker Mino, Ill-fated Princess Sola, Fallen Angel Ariar, and Confined Princess Sirra</font>, in that order. Lastly, defeat <font color="LEVEL">Betrayed Dark Rider</font>.<br>
|
||||
The monsters in Nightmare Kamaloka won't be easy to defeat, so make sure to take your friends with you. I won't say thanks until you come back safe and sound.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Captain Kurtiz:<br>
|
||||
Glad to see you are safe. How's the Nightmare Kamaloka mission going?<br>
|
||||
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00760_BlockTheExit 30870-06.html">"I've completed it."</button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Captain Kurtiz:<br>
|
||||
Oh, thank you very much! Aden is a safer place now thanks to you. Please help us next time someone tries to invade again. Go and rest up!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Kurtiz:<br>
|
||||
Please, go away.<br>
|
||||
(This quest is available for characters lvls 99-105.)
|
||||
</body></html>
|
@@ -1,146 +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 quests.Q00760_BlockTheExit;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.QuestType;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import com.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
/**
|
||||
* Block the Exit (760)
|
||||
* @author St3eT
|
||||
*/
|
||||
public final class Q00760_BlockTheExit extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int KURTIZ = 30870;
|
||||
private static final int DARK_RIDER = 26102;
|
||||
// Items
|
||||
private static final int REWARD_BOX = 46560; // Curtiz's Reward Box
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 99;
|
||||
|
||||
public Q00760_BlockTheExit()
|
||||
{
|
||||
super(760);
|
||||
addStartNpc(KURTIZ);
|
||||
addTalkId(KURTIZ);
|
||||
addKillId(DARK_RIDER);
|
||||
addCondMinLevel(MIN_LEVEL, "30870-07.htm");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final QuestState st = getQuestState(player, false);
|
||||
if (st == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30870-02.htm":
|
||||
case "30870-03.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30870-04.html":
|
||||
{
|
||||
st.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30870-06.html":
|
||||
{
|
||||
if (st.isCond(2))
|
||||
{
|
||||
if (player.getLevel() >= MIN_LEVEL)
|
||||
{
|
||||
st.exitQuest(QuestType.DAILY, true);
|
||||
giveItems(player, REWARD_BOX, 1);
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = getNoQuestLevelRewardMsg(player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
final QuestState st = getQuestState(player, true);
|
||||
String htmltext = null;
|
||||
|
||||
switch (st.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
htmltext = "30870-01.htm";
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
htmltext = st.isCond(2) ? "30870-05.html" : "30870-04.html";
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
if (st.isNowAvailable())
|
||||
{
|
||||
st.setState(State.CREATED);
|
||||
htmltext = "30870-01.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player, QuestType.DAILY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
executeForEachPlayer(killer, npc, isSummon, true, false);
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionForEachPlayer(L2PcInstance player, L2Npc npc, boolean isSummon)
|
||||
{
|
||||
final QuestState st = getQuestState(player, false);
|
||||
if ((st != null) && st.isCond(1))
|
||||
{
|
||||
st.setCond(2, true);
|
||||
}
|
||||
super.actionForEachPlayer(player, npc, isSummon);
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Leona Blackbird:<br>
|
||||
The Phantasmal Ridge is one of the most dangerous in Hellbound. If you are not strong enough, it's better for you to not go.<br>
|
||||
(This quest is only available for characters with Lv. 99 or above who have completed the "Elikia's Letter" quest.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||
@TODO Need retail HTML text<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00783_VestigeOfTheMagicPower 31595-02.htm">"NEXT 1"</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||
@TODO Need retail HTML text<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00783_VestigeOfTheMagicPower 31595-03.htm">"NEXT 2"</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||
@TODO Need retail HTML text<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00783_VestigeOfTheMagicPower 31595-04.htm">"NEXT 3"</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||
@TODO Need retail HTML text<br>
|
||||
Starrt Quest
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||
@TODO Need retail HTML text<br>
|
||||
Quest Progress
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||
@TODO Need retail HTML text<br>
|
||||
Quest Condition 2
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00783_VestigeOfTheMagicPower 31595-07.html">"NEXT 4"</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fire Dragon Bride Leona Blackbird:<br>
|
||||
@TODO Need retail HTML text<br>
|
||||
Quest Finish
|
||||
</body></html>
|
@@ -1,192 +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 quests.Q00783_VestigeOfTheMagicPower;
|
||||
|
||||
import com.l2jmobius.gameserver.enums.QuestSound;
|
||||
import com.l2jmobius.gameserver.enums.QuestType;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.quest.Quest;
|
||||
import com.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import com.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
import quests.Q10455_ElikiasLetter.Q10455_ElikiasLetter;
|
||||
|
||||
/**
|
||||
* Vestige of the Magic Power (783)
|
||||
* @URL https://l2wiki.com/Vestige_of_the_Magic_Power
|
||||
* @author Gigi
|
||||
*/
|
||||
public class Q00783_VestigeOfTheMagicPower extends Quest
|
||||
{
|
||||
// NPC's
|
||||
private static final int LEONA_BLACKBIRD = 31595;
|
||||
// Monster's
|
||||
private static final int[] MONSTERS =
|
||||
{
|
||||
23384, // Smaug
|
||||
23385, // Lunatikan
|
||||
23386, // Jabberwok
|
||||
23387, // Kanzaroth
|
||||
23388, // Kandiloth
|
||||
23395, // Garion
|
||||
23396, // Garion Neti
|
||||
23397, // Desert Wendigo
|
||||
23398, // Koraza
|
||||
23399 // Bend Beetle
|
||||
};
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 99;
|
||||
private static final int HIGH_GRADE_FRAGMENT_OF_CHAOS = 46557;
|
||||
private static final int LEONAS_REWARD_BOX = 46558;
|
||||
private static final int BLOODIED_DEMONIC_TOME = 37893;
|
||||
|
||||
public Q00783_VestigeOfTheMagicPower()
|
||||
{
|
||||
super(783);
|
||||
addStartNpc(LEONA_BLACKBIRD);
|
||||
addTalkId(LEONA_BLACKBIRD);
|
||||
addKillId(MONSTERS);
|
||||
registerQuestItems(HIGH_GRADE_FRAGMENT_OF_CHAOS);
|
||||
addCondMinLevel(MIN_LEVEL, "31595-00.htm");
|
||||
addCondCompletedQuest(Q10455_ElikiasLetter.class.getSimpleName(), "31595-00.htm");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return getNoQuestMsg(player);
|
||||
}
|
||||
switch (event)
|
||||
{
|
||||
case "31595-02.htm":
|
||||
case "31595-03.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "31595-04.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "31595-07.html":
|
||||
{
|
||||
if ((getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) >= 250) && (getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) < 500))
|
||||
{
|
||||
addExpAndSp(player, 3876316782L, 9303137);
|
||||
giveItems(player, LEONAS_REWARD_BOX, 1);
|
||||
takeItems(player, HIGH_GRADE_FRAGMENT_OF_CHAOS, -1);
|
||||
giveItems(player, BLOODIED_DEMONIC_TOME, 1);
|
||||
qs.exitQuest(QuestType.REPEATABLE, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
else if ((getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) >= 500) && (getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) < 750))
|
||||
{
|
||||
addExpAndSp(player, 7752633564L, 18606274);
|
||||
giveItems(player, LEONAS_REWARD_BOX, 2);
|
||||
takeItems(player, HIGH_GRADE_FRAGMENT_OF_CHAOS, -1);
|
||||
giveItems(player, BLOODIED_DEMONIC_TOME, 1);
|
||||
qs.exitQuest(QuestType.REPEATABLE, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
else if ((getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) >= 750) && (getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) < 1000))
|
||||
{
|
||||
addExpAndSp(player, 11628950346L, 27909411);
|
||||
giveItems(player, LEONAS_REWARD_BOX, 3);
|
||||
takeItems(player, HIGH_GRADE_FRAGMENT_OF_CHAOS, -1);
|
||||
giveItems(player, BLOODIED_DEMONIC_TOME, 1);
|
||||
qs.exitQuest(QuestType.REPEATABLE, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
else if (getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) >= 1000)
|
||||
{
|
||||
addExpAndSp(player, 15505267128L, 37212548);
|
||||
giveItems(player, LEONAS_REWARD_BOX, 4);
|
||||
takeItems(player, HIGH_GRADE_FRAGMENT_OF_CHAOS, -1);
|
||||
giveItems(player, BLOODIED_DEMONIC_TOME, 1);
|
||||
qs.exitQuest(QuestType.REPEATABLE, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
if (npc.getId() == LEONA_BLACKBIRD)
|
||||
{
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
htmltext = "31595-01.htm";
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "31595-05.html";
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "31595-06.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isStarted() && (getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) < 1000))
|
||||
{
|
||||
giveItems(player, HIGH_GRADE_FRAGMENT_OF_CHAOS, 1);
|
||||
if (getQuestItemsCount(player, HIGH_GRADE_FRAGMENT_OF_CHAOS) >= 250)
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
I don't think you'll be able to complete this mission. You seem passionate, but you don't have enough experience. Please come back when you've become stronger.<br>
|
||||
(Only characters above Lv. 100.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
Are you an adventurer? I don't think we've met, but can you help us? I'll make sure to reward you for your efforts!<br>
|
||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-02.htm">"Yes?"</Button>
|
||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-04.html">"This isn't the first time we've met."</Button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
Ah, adventurer! There you are again. How about helping us some more? <br>
|
||||
What do you say? If you don't remember what the mission was, I can tell you again.<br>
|
||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-01.htm">"Please tell me about the mission again."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-05.htm">"I know what I've got to do."</Button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
Adventurer! Good to see you. Since you've helped us so much already, how about helping us some more? <br>
|
||||
What do you say? If you don't remember what the mission was, I can tell you again.<br>
|
||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-01.htm">"Please tell me about the mission again."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-05.htm">"I know what I've got to do."</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
I've been waiting for you, adventurer. Well since you are here now, will you listen to me? I know I can trust you, but if you complete this mission, we'll become better allies and your pockets will get heavier. What do you say? Or do you need me to explain the mission again?<br>
|
||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-01.htm">"Please tell me about the mission again."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-05.htm">"I know what I've got to do."</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
We're investigating the area around the Garden of Spirits. However, we are being threatened by the spirits there. That's why we must do something.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-03.htm">"What is it?"</Button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
We know of a way to defeat those spirits, at least temporarily. <br>
|
||||
I'll make sure to reward you if you do this mission. And each time you complete the mission, I'll give you an item that will prove our trust.<br>
|
||||
You can prove the level of trust between us. The higher the level, the better the rewards. Also, I'll be able to give you top secret missions. However, these marks do disappear with time, so in order to keep our trust, you must continue doing missions from time to time.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-05.htm">"Alright."</Button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
This isn't the first time we've met? You've completed a mission before? I see... Well, I don't really have a good memory.<br>
|
||||
If you have completed a mission before, then that means you must have a Mark of Trust. What? You don't have one?<br>
|
||||
Then you are either a liar, or you haven't been here in a long time. My trust is something you must continously try to maintain. Will you listen to me?<br>
|
||||
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-01.htm">"Yes, tell me about the mission."</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
Alright. Here's the mission. Hunt the <font color="LEVEL">Kerberos Leger, Kerberos Fort, Kerberos Nero, Fury Sylph Barrena, Fury Sylph Labido, Fury Sylph Purka, Fury Kerberos Leger, and the Fury Kerberos Nero</font>, and collect their <font color="LEVEL">Mutated Spirit's Souls</font> as proof.<br>You can get rewards only if you bring at least 200. Of course, you'll get more rewards if you bring more.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
Like I said, you need to bring back at least <font color="LEVEL">200 Mutated Spirit's Souls</font>. Of course, it would be better if you can bring more.
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
You want to finish already? Well, I can still give you a reward... But it won't be something good. Of course I'll give you a Mark of Trust since you helped us... Are you sure?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-08.html">"I'll keep hunting, then."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-09.html">"Yes, I'm sure."</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
You want to finish already? Well, I can still give you a reward... But it won't be something good. Are you sure? <br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-08.html">"I'll keep hunting, then."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-09a.html">"Yes, I'm sure."</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
You want to finish already? Well, I can still give you a reward... But it won't be something good. Are you sure? <br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-08.html">"I'll keep hunting, then."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-09b.html">"Yes, I'm sure."</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
You want to finish already? Well, I can still give you a reward... But it won't be something good. Are you sure?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-08.html">"I'll keep hunting, then."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00790_ObtainingFerinsTrust 34055-09c.html">"Yes, I'm sure."</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Master Cyphona:<br>
|
||||
Good idea. The more Mutated Spirit's Souls you bring, the more safely we can investigate, and the better reward you will get.
|
||||
</body></html>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user