Quest The Secret Ingredients (10745).

Contributed by Neanrakyr.
This commit is contained in:
mobius 2015-02-21 22:33:08 +00:00
parent 29f2b239fd
commit ded86c99d9
13 changed files with 501 additions and 27 deletions

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<instance name="Karaphon Habitat" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<activityTime val="15" />
<allowSummon val="false" />
<emptyDestroyTime val="5" />
<spawnPoint spawnX="-82250" spawnY="246406" spawnZ="-14152" />
<spawnlist>
<group name="general">
<!-- Karaphon -->
<spawn npcId="23459" x="-82384" y="245993" z="-14157" heading="0" respawn="0" />
<!-- Keen Honeybee -->
<spawn npcId="23460" x="-82484" y="246057" z="-14156" heading="0" respawn="0" />
<!-- Keen Growler -->
<spawn npcId="23461" x="-82280" y="246057" z="-14159" heading="0" respawn="0" />
</group>
</spawnlist>
</instance>

View File

@ -41,6 +41,7 @@ import instances.JiniaGuildHideout2.JiniaGuildHideout2;
import instances.JiniaGuildHideout3.JiniaGuildHideout3;
import instances.JiniaGuildHideout4.JiniaGuildHideout4;
import instances.Kamaloka.Kamaloka;
import instances.KaraphonHabitat.KaraphonHabitat;
import instances.LabyrinthOfBelis.LabyrinthOfBelis;
import instances.LibraryOfSages.LibraryOfSages;
import instances.MithrilMine.MithrilMine;
@ -87,6 +88,7 @@ public final class InstanceLoader
JiniaGuildHideout3.class,
JiniaGuildHideout4.class,
Kamaloka.class,
KaraphonHabitat.class,
LabyrinthOfBelis.class,
LibraryOfSages.class,
MithrilMine.class,

View File

@ -0,0 +1,91 @@
/*
* Copyright (C) 2004-2015 L2J Mobius DataPack
*
* This file is part of L2J Mobius DataPack.
*
* L2J Mobius DataPack 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.
*
* L2J Mobius DataPack is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.KaraphonHabitat;
import instances.AbstractInstance;
import quests.Q10745_TheSecretIngredients.Q10745_TheSecretIngredients;
import com.l2jserver.gameserver.instancemanager.InstanceManager;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
import com.l2jserver.gameserver.model.quest.QuestState;
/**
* @author Neanrakyr
*/
public class KaraphonHabitat extends AbstractInstance
{
// Npcs
private static final int DOLKIN = 33954;
private static final int DOLKIN_INSTANCE = 34002;
// Locations
private static final Location START_LOC = new Location(-82250, 246406, -14152);
private static final Location EXIT_LOC = new Location(-88240, 237450, -2880);
// Instance
private static final int TEMPLATE_ID = 253;
protected class KHWorld extends InstanceWorld
{
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = player.getQuestState(Q10745_TheSecretIngredients.class.getSimpleName());
if (qs == null)
{
return null;
}
if (event.equals("enter_instance"))
{
enterInstance(player, new KHWorld(), "KaraphonHabitat.xml", TEMPLATE_ID);
}
else if (event.equals("exit_instance"))
{
final InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
world.removeAllowed(player.getObjectId());
teleportPlayer(player, EXIT_LOC, 0);
}
return super.onAdvEvent(event, npc, player);
}
public KaraphonHabitat()
{
super(KaraphonHabitat.class.getSimpleName());
addStartNpc(DOLKIN);
addTalkId(DOLKIN, DOLKIN_INSTANCE);
}
@Override
public void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance)
{
if (firstEntrance)
{
world.addAllowed(player.getObjectId());
}
teleportPlayer(player, START_LOC, world.getInstanceId());
}
}

View File

@ -0,0 +1,5 @@
<html><body>Karla:<br>
I can tell you came from the Whispering Woods. How do I know? Um, I can feel Karaphon's power inside you.<br>
Haha, just kidding. There was a leaf stuck on you, that's all. You are quite guillible, aren't you? Anyway, what brings you here?
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10745_TheSecretIngredients 33933-02.html">"I'm running errands for Dolkin."</button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Karla:<br>
Ah... Dolkin, that old dwarf again!<br>
He's always taking advantage of nice kids like you. You brought his report, right? I will pay you for your troubles. Give me report.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Maestro Dolkin:<br>
Want to hear some good news? There is a very interesting creature living deep within the Whispering Woods. It looks like the Treant, but it's got a special characteristic all its own. How about it? Aren't you curious? If you help me, of course I'll give you something good in return!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10745_TheSecretIngredients 33954-02.html">"Okay, I'll help."</button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Maestro Dolkin:<br>
The creature in question is called <font color="LEVEL">Karaphon!</font> Its leaves are like scales, making them very tough.<br1>
The truth is, a Treant's leaves are also very good, but they can't compare to the leaves of a Karaphon.<br>
Bring me back its leaves and I'll give you something just as good. Will you go?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KaraphonHabitat enter_instance">"Fine, fine."</button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Maestro Dolkin:<br>
Oh, you've managed to come back in one piece!<br>
No no, don't look at me like that. I'm just relieved that you came back safely. I wasn't worried, if that's what you're thinking. Hm Hm.<br>
But, there is still something you need to do for me. I can continue to do research here thanks to <font color="LEVEL">Karla</font>, and she asks that I create a strong armor for a fox in return..<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10745_TheSecretIngredients 33954-04.html">"Armor for a fox ?"</button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Maestro Dolkin:<br>
Hey, you wanna do me a favor? I need to get <font color="LEVEL">Karla</font> the monthly progress update on my research. Why don't you stop by and drop it off for me?<br>
It's research about fox armor. She's been looking for one ever since her fox died that day. She doesn't like to talk about it, but you can tell it eats away at her.<br>
Well, run along now! She'll see to it that you don't walk away empty-handed.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Maestro Dolkin:<br>
You're better than I thought!<br>
Shall we step outside ?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest KaraphonHabitat exit_instance">"Let's go then."</button>
</body></html>

View File

@ -0,0 +1,219 @@
/*
* Copyright (C) 2004-2015 L2J Mobius DataPack
*
* This file is part of L2J Mobius DataPack.
*
* L2J Mobius DataPack 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.
*
* L2J Mobius DataPack 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.Q10745_TheSecretIngredients;
import com.l2jserver.gameserver.enums.Race;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
/**
* @author Neanrakyr
*/
public class Q10745_TheSecretIngredients extends Quest
{
// Npcs
private static final int DOLKIN = 33954;
private static final int DOLKIN_INSTANCE = 34002;
private static final int KARLA = 33933;
// Monsters
private static final int KARAPHON = 23459;
private static final int KEEN_HONEYBEE = 23460;
private static final int KEEN_GROWLER = 23461;
// Locations
private static final Location DOLKIN_INSTANCE_SPAWN = new Location(-82407, 246018, -14158);
// Items
private static final ItemHolder SECRET_INGREDIENTS = new ItemHolder(39533, 1);
private static final ItemHolder DOLKIN_REPORT = new ItemHolder(39534, 1);
private static final ItemHolder FAERON_SUPPORT_BOX = new ItemHolder(40262, 1);
private static final ItemHolder FAERON_SUPPORT_BOX_MAGE = new ItemHolder(40263, 1);
// Level Condition
private static final int MIN_LEVEL = 17;
private static final int MAX_LEVEL = 25;
public Q10745_TheSecretIngredients()
{
super(10745, Q10745_TheSecretIngredients.class.getSimpleName(), "The Secret Ingredients");
addStartNpc(DOLKIN);
addTalkId(DOLKIN, DOLKIN_INSTANCE, KARLA);
addKillId(KARAPHON, KEEN_HONEYBEE, KEEN_GROWLER);
registerQuestItems(SECRET_INGREDIENTS.getId(), DOLKIN_REPORT.getId());
addCondLevel(MIN_LEVEL, MAX_LEVEL, "fixme.html");
addCondRace(Race.ERTHEIA, "fixme.html");
}
@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 "33954-02.html":
{
qs.startQuest();
htmltext = event;
break;
}
case "33954-04.html":
{
if (qs.isCond(2))
{
qs.setCond(3);
takeItem(player, SECRET_INGREDIENTS);
giveItems(player, DOLKIN_REPORT);
htmltext = event;
}
break;
}
case "33933-02.html":
{
if (qs.isCond(3))
{
giveAdena(player, 48000, true);
addExpAndSp(player, 241076, 5);
if (player.isMageClass())
{
giveItems(player, FAERON_SUPPORT_BOX_MAGE);
}
else
{
giveItems(player, FAERON_SUPPORT_BOX);
}
showOnScreenMsg(player, NpcStringId.CHECK_YOUR_EQUIPMENT_IN_YOUR_INVENTORY, ExShowScreenMessage.TOP_CENTER, 4500);
qs.exitQuest(false, true);
htmltext = event;
}
break;
}
case "spawn_dolkin":
{
showOnScreenMsg(player, NpcStringId.TALK_TO_DOLKIN_AND_LEAVE_THE_KARAPHON_HABITAT, ExShowScreenMessage.TOP_CENTER, 4500);
addSpawn(DOLKIN_INSTANCE, DOLKIN_INSTANCE_SPAWN, false, 0, false, player.getInstanceId());
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (qs.isCompleted())
{
htmltext = getAlreadyCompletedMsg(player);
}
switch (npc.getId())
{
case DOLKIN:
{
if (qs.isCreated())
{
htmltext = "33954-01.htm";
}
else if (qs.isCond(2))
{
htmltext = "33954-03.html";
}
break;
}
case KARLA:
{
switch (qs.getCond())
{
case 3:
{
htmltext = "33933-01.html";
break;
}
}
}
case DOLKIN_INSTANCE:
{
switch (qs.getCond())
{
case 2:
{
htmltext = "34002.html";
break;
}
}
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
switch (npc.getId())
{
case KARAPHON:
{
qs.set("KARAPHON", 1);
break;
}
case KEEN_HONEYBEE:
{
qs.set("KEEN_HONEYBEE", 1);
break;
}
case KEEN_GROWLER:
{
qs.set("KEEN_GROWLER", 1);
break;
}
}
if ((qs.get("KARAPHON") != null) && (qs.get("KEEN_HONEYBEE") != null) && (qs.get("KEEN_GROWLER") != null))
{
giveItems(killer, SECRET_INGREDIENTS);
qs.setCond(2, true);
startQuestTimer("spawn_dolkin", 5000, npc, killer);
}
}
return super.onKill(npc, killer, isSummon);
}
}

View File

@ -208,6 +208,7 @@ import quests.Q10741_ADraughtForTheCold.Q10741_ADraughtForTheCold;
import quests.Q10742_AFurryFriend.Q10742_AFurryFriend;
import quests.Q10743_StrangeFungus.Q10743_StrangeFungus;
import quests.Q10744_StrongerThanSteel.Q10744_StrongerThanSteel;
import quests.Q10745_TheSecretIngredients.Q10745_TheSecretIngredients;
/**
* @author NosBit
@ -404,7 +405,8 @@ public class QuestMasterHandler
Q10741_ADraughtForTheCold.class,
Q10742_AFurryFriend.class,
Q10743_StrangeFungus.class,
Q10744_StrongerThanSteel.class
Q10744_StrongerThanSteel.class,
Q10745_TheSecretIngredients.class
};
public static void main(String[] args)

View File

@ -1403,52 +1403,160 @@
<height normal="30" />
</collision>
</npc>
<npc id="23459" level="85" type="L2Npc" name="Karaphon" title="Earth Spirit">
<npc id="23459" level="19" type="L2Monster" name="Karaphon" title="Earth Spirit">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<param name="MoveAroundSocial" value="0" />
<param name="MoveAroundSocial1" value="0" />
<param name="MoveAroundSocial2" value="0" />
</parameters>
<race>HUMAN</race>
<sex>FEMALE</sex>
<stats str="40" int="21" dex="30" wit="20" con="43" men="20">
<vitals hp="7324" hpRegen="7.5" mp="1345.8" mpRegen="2.7" />
<acquire expRate="8616" sp="2" />
<stats str="78" int="42" dex="41" wit="78" con="75" men="20">
<vitals hp="1019" hpRegen="2.5" mp="508" mpRegen="1.2" />
<attack physical="37.82932" magical="25.83252" random="30" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
<defence physical="81.34791" magical="54.1623558855199" />
<attribute>
<defence fire="20" water="20" wind="20" earth="20" holy="20" dark="20" />
</attribute>
<speed>
<walk ground="50" />
<run ground="120" />
</speed>
<hit_time>370</hit_time>
</stats>
<status attackable="false" />
<status undying="false" canBeSown="true" />
<skill_list>
<skill id="4408" level="1" /> <!--HP Increase (1x) -->
<skill id="4409" level="1" /> <!--MP Increase (1x) -->
<skill id="4410" level="11" /> <!--Average P. Atk. -->
<skill id="4411" level="11" /> <!--Average M. Atk. -->
<skill id="4412" level="11" /> <!--Average P. Def. -->
<skill id="4413" level="11" /> <!--Average M. Def. -->
<skill id="4414" level="2" /> <!--Standard Type -->
<skill id="4296" level="4" /> <!--Spirits -->
</skill_list>
<ex_crt_effect>false</ex_crt_effect>
<ai aggroRange="1000" clanHelpRange="300" isAggressive="false" />
<drop_lists>
<death>
<group chance="64.2">
<item id="57" min="6" max="13" chance="100" /> <!-- Adena -->
</group>
<group chance="3.8">
<item id="35" min="1" max="1" chance="33" /> <!-- Cloth Shoes -->
</group>
<group chance="0.3">
<item id="36546" min="1" max="1" chance="28.3333" /> <!-- Weapon Fragment (Low-grade) -->
</group>
</death>
<corpse>
<item id="36532" min="1" max="1" chance="0.3" /> <!-- Thin Braid -->
</corpse>
</drop_lists>
<collision>
<radius normal="25" />
<height normal="30" />
</collision>
</npc>
<npc id="23460" level="18" type="L2Monster" name="Keen Honeybee" title="">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<param name="MoveAroundSocial" value="0" />
<param name="MoveAroundSocial1" value="0" />
<param name="MoveAroundSocial2" value="0" />
</parameters>
<race>HUMAN</race>
<sex>MALE</sex>
<acquire expRate="205" sp="0" />
<stats str="78" int="42" dex="41" wit="78" con="75" men="20">
<vitals hp="239" hpRegen="1.5" mp="115.8" mpRegen="0.5" />
<attack physical="37.82932" magical="25.83252" random="30" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
<defence physical="81.34791" magical="54.1623558855199" />
<attribute>
<defence fire="20" water="20" wind="20" earth="20" holy="20" dark="20" />
</attribute>
<speed>
<walk ground="50" />
<run ground="120" />
</speed>
<hit_time>370</hit_time>
</stats>
<status undying="false" canBeSown="true" />
<skill_list>
<skill id="4410" level="11" /> <!--Average P. Atk. -->
<skill id="4293" level="4" /> <!--Animals -->
</skill_list>
<ex_crt_effect>false</ex_crt_effect>
<ai aggroRange="1000" clanHelpRange="300" isAggressive="false" />
<drop_lists>
<death>
<group chance="60.4">
<item id="57" min="6" max="13" chance="100" /> <!-- Adena -->
</group>
<group chance="5.7">
<item id="41" min="1" max="1" chance="33" /> <!-- Cloth Cap -->
</group>
<group chance="0.3">
<item id="36561" min="1" max="1" chance="28.3333" /> <!-- Coke -->
</group>
</death>
<corpse>
<item id="36532" min="1" max="1" chance="0.3" /> <!-- Thin Braid -->
</corpse>
</drop_lists>
<collision>
<radius normal="9.5" />
<height normal="22.4" />
</collision>
</npc>
<npc id="23460" level="85" type="L2Npc" name="Keen Honeybee" title="">
<npc id="23461" level="19" type="L2Monster" name="Keen Growler" title="">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<param name="MoveAroundSocial" value="0" />
<param name="MoveAroundSocial1" value="0" />
<param name="MoveAroundSocial2" value="0" />
</parameters>
<race>HUMAN</race>
<sex>FEMALE</sex>
<stats str="40" int="21" dex="30" wit="20" con="43" men="20">
<vitals hp="7324" hpRegen="7.5" mp="1345.8" mpRegen="2.7" />
<sex>MALE</sex>
<acquire expRate="217" sp="0" />
<stats str="78" int="42" dex="41" wit="78" con="75" men="20">
<vitals hp="254" hpRegen="1.5" mp="115.8" mpRegen="0.5" />
<attack physical="37.82932" magical="25.83252" random="30" critical="4" accuracy="4.75" attackSpeed="253" type="SWORD" range="40" distance="80" width="120" />
<defence physical="81.34791" magical="54.1623558855199" />
<attribute>
<defence fire="20" water="20" wind="20" earth="20" holy="20" dark="20" />
</attribute>
<speed>
<walk ground="50" />
<run ground="120" />
</speed>
<hit_time>370</hit_time>
</stats>
<status attackable="false" />
<collision>
<radius normal="9.5" />
<height normal="22.4" />
</collision>
</npc>
<npc id="23461" level="85" type="L2Npc" name="Keen Growler" title="">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<race>HUMAN</race>
<sex>FEMALE</sex>
<stats str="40" int="21" dex="30" wit="20" con="43" men="20">
<vitals hp="7324" hpRegen="7.5" mp="1345.8" mpRegen="2.7" />
<speed>
<walk ground="50" />
<run ground="120" />
</speed>
</stats>
<status attackable="false" />
<status undying="false" canBeSown="true" />
<skill_list>
<skill id="4410" level="11" /> <!--Average P. Atk. -->
<skill id="4296" level="4" /> <!--Spirits -->
</skill_list>
<ex_crt_effect>false</ex_crt_effect>
<ai aggroRange="1000" clanHelpRange="300" isAggressive="false" />
<drop_lists>
<death>
<group chance="73.6">
<item id="57" min="6" max="13" chance="100" /> <!-- Adena -->
</group>
<group chance="3.8">
<item id="41" min="1" max="1" chance="33" /> <!-- Cloth Cap -->
</group>
<group chance="0.3">
<item id="36546" min="1" max="1" chance="28.3333" /> <!-- Weapon Fragment (Low-grade) -->
</group>
</death>
<corpse>
<item id="36532" min="1" max="1" chance="0.3" /> <!-- Thin Braid -->
</corpse>
</drop_lists>
<collision>
<radius normal="9.5" />
<height normal="22.4" />