Sea of Spores Fever
- ID
- 102
- Название
- Sea of Spores Fever
- start_npcs_json
- [30284]
- npc_ids_json
- [30156,30217,30219,30221,30284,30285]
- constants_json
- {"ALBERIUS":30284,"COBENDELL":30156,"BERROS":30217,"VELTRESS":30219,"RAYEN":30221,"GARTRANDELL":30285,"ALBERIUS_LETTER":964,"EVERGREEN_AMULET":965,"DRYAD_TEARS":966,"ALBERIUS_LIST":746,"COBENDELL_MEDICINE_1":1130,"COBENDELL_MEDICINE_2":1131,"COBENDELL_MEDICINE_3":1132,"COBENDELL_MEDICINE_4":1133,"COBENDELL_MEDICINE_5":1134,"SPIRITSHOT_NO_GRADE":2509,"SOULSHOT_NO_GRADE":1835,"SWORD_OF_SENTINEL":743,"STAFF_OF_SENTINEL":744,"LESSER_HEALING_POT":1060,"ECHO_BATTLE":4412,"ECHO_LOVE":4413,"ECHO_SOLITUDE":4414,"ECHO_FEAST":4415,"ECHO_CELEBRATION":4416,"SPIRITSHOT_FOR_BEGINNERS":5790,"SOULSHOT_FOR_BEGINNERS":5789}
- Статус разбора
- metadata_only; dynamic Java conditions/rewards retained in source; unresolved starts: []
- Источник
- game/data/scripts/quests/Q00102_SeaOfSporesFever/Q00102_SeaOfSporesFever.java
NPC квеста
| ID | Название | Старт квеста | Уровень |
|---|---|---|---|
| 30156 | Cobendell | Нет | 70 |
| 30217 | Berros | Нет | 80 |
| 30219 | Veltress | Нет | 80 |
| 30221 | Rayen | Нет | 80 |
| 30284 | Alberius | Да | 80 |
| 30285 | Gartrandell | Нет | 80 |
Условия уровней: выражения из Java
else if (player.getLevel() < 12)
Выдача предметов, адены и опыта: выражения из Java
giveItems(player, ALBERIUS_LETTER, 1); giveItems(player, ALBERIUS_LIST, 1); giveItems(player, STAFF_OF_SENTINEL, 1); rewardItems(player, SPIRITSHOT_NO_GRADE, 500); giveItems(player, SWORD_OF_SENTINEL, 1); rewardItems(player, SOULSHOT_NO_GRADE, 1000); giveItems(player, SPIRITSHOT_FOR_BEGINNERS, 3000); giveItems(player, SOULSHOT_FOR_BEGINNERS, 7000); giveItems(player, LESSER_HEALING_POT, 100); giveItems(player, ECHO_BATTLE, 10); giveItems(player, ECHO_LOVE, 10); giveItems(player, ECHO_SOLITUDE, 10); giveItems(player, ECHO_FEAST, 10); giveItems(player, ECHO_CELEBRATION, 10); giveItems(player, EVERGREEN_AMULET, 1); giveItems(player, COBENDELL_MEDICINE_1, 1); giveItems(player, COBENDELL_MEDICINE_2, 1); giveItems(player, COBENDELL_MEDICINE_3, 1); giveItems(player, COBENDELL_MEDICINE_4, 1); giveItems(player, COBENDELL_MEDICINE_5, 1); giveItems(killer, DRYAD_TEARS, 1);
Квесты содержат динамические условия Java. Выражения выдачи включают промежуточные предметы, варианты и случайные награды; это не гарантированная награда. Константы приведены выше. Полные условия — в исходнике.
Тексты квеста
[30156-03.htm] Master Cobendell: To create a Healing Potion to treat the fever, I need the Dryad's Tear, where the purest life forces of the earth are concentrated. Long ago the dryads were beautiful spirits of the trees that sang of the life force of the earth. However, after the balance of magic powers flowing through the woods and the earth were undone during the battle with the Humans, the dryads became spirits with a deep-rooted hatred for all the material races. You can still find dryads today if you travel to the deepest heart of the Elven Forest. When the dryad's physical body is destroyed, a Dryad's Tear is created. But you must keep this amulet with you at all times. The crystal embedded in this necklace works as a catalyst to concentrate the spiritual power scattered when a dryad is killed into the Dryad's Tear. Well then, good luck on your journey. Gather ten Dryad's Tears and bring them to me.
[30156-04.htm] Master Cobendell: My dear friend, did you not agree to bring me ten Dryad's Tears? I must create a healing potion before the poisons of the spores spread throughout the entire village. Please hurry.
[30156-05.htm] Master Cobendell: My friend, you have done well to return. Have you gathered all the Dryad's Tears? Ah, excellent. Please wait a moment. All I need to do is add the Dryad's Tears to the mixture that I have prepared. Here, I have created the five potions that are needed most immediately. Please deliver this to Sentinel Knight Alberius.
[30156-06.htm] Master Cobendell: Please deliver the Dryad's Tears potion that I have made to Sentinel Knight Alberius. Alberius is standing guard at the terrace of the building directly in front of us.
[30156-07.htm] Master Cobendell: I hear that Alberius has asked you to deliver the medicine to all the Sentinels that traveled to the Sea of Spores? Have you delivered them all? They are all healthy individuals, and there's probably no need to worry, but it's best to have them take the medication. Better safe than sorry, right?
[30217-01.htm] Sentinel Berry: Ah, the medicine concocted by Cobendell. Thank you. Thank you.
[30219-01.htm] Sentinel Veltress: Is this the medicine to treat the fever? Please tell Cobendell thank you for me.
[30221-01.htm] Sentinel Rayen: Ah, is this the fever medication? If only this could also erase the horrendous memories of my experiences in the Sea of Spores.
[30284-00.htm] Sentinel Knight Alberius: Well I must say, I do have a very important task at hand... but I cannot ask one who is not an Elf to perform this task. (This quest may only be undertaken by an Elven character.)
[30284-02.htm] Sentinel Knight Alberius: Go and seek Master Cobendell, who resides within the Sanctum of Eva. Give him this letter and tell him that Alberius has sent you. Cobendell will provide further details. Please hurry.
[30284-03.htm] Sentinel Knight Alberius: What, you haven't gone yet? Go on, take the letter I have given you and find Master Cobendell. He'll be at the Sanctum of Eva, where the Hierarchs are. Please hurry.
[30284-04.htm] Sentinel Knight Alberius: Ah, Master Cobendell has completed his medicine. Here, give me one for starters. I need to make one more request of you. I would like you to deliver the rest of this medicine to the other Sentinels. In these times, with Dark Elven spies always watching for signs of weakness, none of the sentinels, including myself, dare to leave our posts. I need you to deal with this, because we do not want to give off the impression that we sentinels, the protectors of the woods, are harmed or affected in the slightest. Please honor my request and grant me this favor. The other Sentinels who traveled to the Sea of Spores are Berry, Veltress, Rayen, and Gartrandell. I have written down their names on this list. Come and seek me again after you have delivered the medicine to them.
[30284-05.htm] Sentinel Knight Alberius: Please deliver Cobendell's medicine to the sentinels on my list. Thank you.
[30284-06.htm] Sentinel Knight Alberius: Have you delivered all of the medicine to the Sentinels? Well done indeed, my friend. You have performed a great deed for the Sentinels, guardians of the wood. As the representative of the sentinels, I hereby present you with this. This is a precious weapon that symbolizes the honor and pride of those who protect the sacred woods and the Mother Tree. I ask only that you see that this weapon is not used in unjust causes. Until the day we meet again, may the smiles of the stars light your path.
[30284-07.htm] Sentinel Knight Alberius: I would like to ask you to carry out a task for me. This task must be swiftly and quietly completed without attracting the attention of the other Elves. Can I trust you with this? Say you will take the task
[30284-08.htm] Sentinel Knight Alberius: Recently the Human Mystics of the Ivory Tower and the top Spellsingers of our race have been working together to research methods to purify the poisons that fill the Sea of Spores, and perhaps some day return it to the beautiful forest it used to be. Recently Spellsinger Adria Lumingshine personally travelled to the Sea of Spores to gather materials necessary for research, and a few Sentinels, including myself, accompanied her to that horrendous place as her guards. But after she returned from her journey, Adria fell ill of a fever. They say that she has been infected with the poison from the Sea of Spores. Master Cobendell is concocting a medication, but is worried that he may be short on ingredients. If he lacks ingredients for his fever remedy, I would ask your help in gathering those ingredients. (This quest may only be undertaken by a character of level 12 and above.)
[30284-09.htm] Sentinel Knight Alberius: I hear that Cobendell has asked you to gather dryad tears. Dryads may be found in the remote corners of the Elven Forest. Their appearance may indeed be beautiful, but be careful -- they have a deep-rooted hatred for our race.
[30285-01.htm] Sentinel Gartrandell: I don't think anything's wrong with me ... But Alberius has ordered me to take this medicine, and I must follow my orders.
Исходник условий и наград (Java)
/*
* Copyright (c) 2013 L2jMobius
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package quests.Q00102_SeaOfSporesFever;
import org.l2jmobius.gameserver.entity.actor.Npc;
import org.l2jmobius.gameserver.entity.actor.Player;
import org.l2jmobius.gameserver.entity.actor.enums.creature.Race;
import org.l2jmobius.gameserver.mechanics.script.Quest;
import org.l2jmobius.gameserver.mechanics.script.QuestSound;
import org.l2jmobius.gameserver.mechanics.script.QuestState;
import org.l2jmobius.gameserver.mechanics.script.State;
import org.l2jmobius.gameserver.mechanics.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.SocialAction;
public class Q00102_SeaOfSporesFever extends Quest
{
// NPCs
private static final int ALBERIUS = 30284;
private static final int COBENDELL = 30156;
private static final int BERROS = 30217;
private static final int VELTRESS = 30219;
private static final int RAYEN = 30221;
private static final int GARTRANDELL = 30285;
// Items
private static final int ALBERIUS_LETTER = 964;
private static final int EVERGREEN_AMULET = 965;
private static final int DRYAD_TEARS = 966;
private static final int ALBERIUS_LIST = 746;
private static final int COBENDELL_MEDICINE_1 = 1130;
private static final int COBENDELL_MEDICINE_2 = 1131;
private static final int COBENDELL_MEDICINE_3 = 1132;
private static final int COBENDELL_MEDICINE_4 = 1133;
private static final int COBENDELL_MEDICINE_5 = 1134;
// Rewards
private static final int SPIRITSHOT_NO_GRADE = 2509;
private static final int SOULSHOT_NO_GRADE = 1835;
private static final int SWORD_OF_SENTINEL = 743;
private static final int STAFF_OF_SENTINEL = 744;
private static final int LESSER_HEALING_POT = 1060;
private static final int ECHO_BATTLE = 4412;
private static final int ECHO_LOVE = 4413;
private static final int ECHO_SOLITUDE = 4414;
private static final int ECHO_FEAST = 4415;
private static final int ECHO_CELEBRATION = 4416;
// Newbie Rewards
private static final int SPIRITSHOT_FOR_BEGINNERS = 5790;
private static final int SOULSHOT_FOR_BEGINNERS = 5789;
public Q00102_SeaOfSporesFever()
{
super(102, "Sea of Spores Fever");
registerQuestItems(ALBERIUS_LETTER, EVERGREEN_AMULET, DRYAD_TEARS, COBENDELL_MEDICINE_1, COBENDELL_MEDICINE_2, COBENDELL_MEDICINE_3, COBENDELL_MEDICINE_4, COBENDELL_MEDICINE_5, ALBERIUS_LIST);
addStartNpc(ALBERIUS);
addTalkId(ALBERIUS, COBENDELL, BERROS, RAYEN, GARTRANDELL, VELTRESS);
addKillId(20013, 20019);
}
@Override
public String onEvent(String event, Npc npc, Player player)
{
final String htmltext = event;
final QuestState st = getQuestState(player, false);
if (st == null)
{
return htmltext;
}
if (event.equals("30284-02.htm"))
{
st.startQuest();
giveItems(player, ALBERIUS_LETTER, 1);
}
return htmltext;
}
@Override
public String onTalk(Npc npc, Player player)
{
String htmltext = getNoQuestMsg(player);
final QuestState st = getQuestState(player, true);
switch (st.getState())
{
case State.CREATED:
{
if (player.getRace() != Race.ELF)
{
htmltext = "30284-00.htm";
}
else if (player.getLevel() < 12)
{
htmltext = "30284-08.htm";
}
else
{
htmltext = "30284-07.htm";
}
break;
}
case State.STARTED:
{
final int cond = st.getCond();
switch (npc.getId())
{
case ALBERIUS:
{
if (cond == 1)
{
htmltext = "30284-03.htm";
}
else if ((cond == 2) || (cond == 3))
{
htmltext = "30284-09.htm";
}
else if (cond == 4)
{
htmltext = "30284-04.htm";
st.setCond(5, true);
st.set("medicines", "4");
takeItems(player, COBENDELL_MEDICINE_1, 1);
giveItems(player, ALBERIUS_LIST, 1);
}
else if (cond == 5)
{
htmltext = "30284-05.htm";
}
else if (cond == 6)
{
htmltext = "30284-06.htm";
takeItems(player, ALBERIUS_LIST, 1);
if (player.isMageClass())
{
giveItems(player, STAFF_OF_SENTINEL, 1);
rewardItems(player, SPIRITSHOT_NO_GRADE, 500);
}
else
{
giveItems(player, SWORD_OF_SENTINEL, 1);
rewardItems(player, SOULSHOT_NO_GRADE, 1000);
}
// Give newbie reward if player is eligible
if (player.isNewbie())
{
int newPlayerRewardsReceived = player.getVariables().getInt(PlayerVariables.NEWBIE_SHOTS_RECEIVED, 0);
if (newPlayerRewardsReceived < 2)
{
st.showQuestionMark(26);
if (player.isMageClass())
{
st.playTutorialVoice("tutorial_voice_027");
giveItems(player, SPIRITSHOT_FOR_BEGINNERS, 3000);
player.getVariables().set(PlayerVariables.NEWBIE_SHOTS_RECEIVED, ++newPlayerRewardsReceived);
}
else
{
st.playTutorialVoice("tutorial_voice_026");
giveItems(player, SOULSHOT_FOR_BEGINNERS, 7000);
player.getVariables().set(PlayerVariables.NEWBIE_SHOTS_RECEIVED, ++newPlayerRewardsReceived);
}
}
}
giveItems(player, LESSER_HEALING_POT, 100);
giveItems(player, ECHO_BATTLE, 10);
giveItems(player, ECHO_LOVE, 10);
giveItems(player, ECHO_SOLITUDE, 10);
giveItems(player, ECHO_FEAST, 10);
giveItems(player, ECHO_CELEBRATION, 10);
player.broadcastPacket(new SocialAction(player.getObjectId(), 3));
st.exitQuest(false, true);
}
break;
}
case COBENDELL:
{
if (cond == 1)
{
htmltext = "30156-03.htm";
st.setCond(2, true);
takeItems(player, ALBERIUS_LETTER, 1);
giveItems(player, EVERGREEN_AMULET, 1);
}
else if (cond == 2)
{
htmltext = "30156-04.htm";
}
else if (cond == 5)
{
htmltext = "30156-07.htm";
}
else if (cond == 3)
{
htmltext = "30156-05.htm";
st.setCond(4, true);
takeItems(player, DRYAD_TEARS, -1);
takeItems(player, EVERGREEN_AMULET, 1);
giveItems(player, COBENDELL_MEDICINE_1, 1);
giveItems(player, COBENDELL_MEDICINE_2, 1);
giveItems(player, COBENDELL_MEDICINE_3, 1);
giveItems(player, COBENDELL_MEDICINE_4, 1);
giveItems(player, COBENDELL_MEDICINE_5, 1);
}
else if (cond == 4)
{
htmltext = "30156-06.htm";
}
break;
}
case BERROS:
{
if (cond == 5)
{
htmltext = "30217-01.htm";
checkItem(st, COBENDELL_MEDICINE_2);
}
break;
}
case VELTRESS:
{
if (cond == 5)
{
htmltext = "30219-01.htm";
checkItem(st, COBENDELL_MEDICINE_3);
}
break;
}
case RAYEN:
{
if (cond == 5)
{
htmltext = "30221-01.htm";
checkItem(st, COBENDELL_MEDICINE_4);
}
break;
}
case GARTRANDELL:
{
if (cond == 5)
{
htmltext = "30285-01.htm";
checkItem(st, COBENDELL_MEDICINE_5);
}
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public void onKill(Npc npc, Player killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(2) && (getRandom(10) < 3))
{
giveItems(killer, DRYAD_TEARS, 1);
if (getQuestItemsCount(killer, DRYAD_TEARS) < 10)
{
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else
{
qs.setCond(3, true);
}
}
}
private void checkItem(QuestState st, int itemId)
{
if (hasQuestItems(st.getPlayer(), itemId))
{
takeItems(st.getPlayer(), itemId, 1);
final int medicinesLeft = st.getInt("medicines") - 1;
if (medicinesLeft == 0)
{
st.setCond(6, true);
}
else
{
st.set("medicines", String.valueOf(medicinesLeft));
}
}
}
}