Addition of probable useful quests from The Kamael branch.
This commit is contained in:
parent
b5c8b64ab8
commit
6b415557c8
80
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/SecondClassChange.java
vendored
Normal file
80
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/ai/others/SecondClassChange.java
vendored
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* 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.others;
|
||||
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Second class change has only level requirement.
|
||||
* @author Mobius
|
||||
*/
|
||||
public class SecondClassChange extends AbstractNpcAI
|
||||
{
|
||||
private static final int LEVEL_REQUIREMENT = 40;
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LEVEL_CHANGED)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLevelChanged(OnPlayerLevelChanged event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((player.getLevel() < LEVEL_REQUIREMENT) || !CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((player.getLevel() < LEVEL_REQUIREMENT) || !CategoryData.getInstance().isInCategory(CategoryType.SECOND_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new SecondClassChange();
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<html><body>Orven:<br>
|
||||
It's wrong to take advantages of others just because they don't know any better.<br>
|
||||
Isn't it?<br>
|
||||
(This quest is only available for characters Lv. 76 or above after 2nd class change.)
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Orven:<br>
|
||||
Do you know about the gems from the Wind Realm being traded in the Material Realm?<br>
|
||||
Recently, a small box with a letter came from Alchemist Veruti in the Town of Rune.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-02.htm">"Go on."</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Orven:<br>
|
||||
When Veruti first heard about the gems from the Wind Realm, she thought they could be minerals.<br>
|
||||
Someone gave this to Veruti when she was left alone in the Town of Rune as a gift from home. She thought it was strange and sent it to me.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-03.htm">Is it a problem?</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Orven:<br>
|
||||
If it's powerless and only sold as a trinket, it is not a problem. But if someone knows about it and is trying to create it...that is dangerous.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-04.htm">"Why?"</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Orven:<br>
|
||||
If items with such power gets in the wrong hands, the outcome could be catastrophic.<br>
|
||||
I need you to find out who is making the fake items and why.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-05.htm">"Leave it to me."</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Orven:<br>
|
||||
You will need to investigate <font color="LEVEL">Silent Valley</font> or <font color="LEVEL">Devil's Isle</font>. Go to the hunting zone of your choice, defeat any monsters. You need to defeat 700 monsters in total.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-06.html">"Go on."</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Orven:<br>
|
||||
Go investigate <font color="LEVEL">Silent Valley</font> or <font color="LEVEL">Devil's Isle</font>. Go to the hunting zone of your choice, defeat any monsters. You need to defeat 700 monsters in total.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-07.html">"Go on Silent Valley."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-07a.html">"Go on Devil's Isle."</Button>
|
||||
</body></html>
|
@ -0,0 +1,3 @@
|
||||
<html><body>Orven:<br>
|
||||
Investigate <font color="LEVEL">Silent Valley</font>. You need to defeat 700 monsters in total.
|
||||
</body></html>
|
@ -0,0 +1,3 @@
|
||||
<html><body>Orven:<br>
|
||||
Investigate <font color="LEVEL">Devil's Isle</font>. You need to defeat 700 monsters in total.
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Orven:<br>
|
||||
Go investigate <font color="LEVEL">Silent Valley</font> or <font color="LEVEL">Devil's Isle</font>.<br1>
|
||||
You need to defeat 700 monsters in total.
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Orven:<br>
|
||||
Go investigate <font color="LEVEL">Silent Valley</font> or <font color="LEVEL">Devil's Isle</font>.<br1>
|
||||
You need to defeat 700 monsters in total.
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Orven:<br>
|
||||
I see a big smile on your face...<br1>
|
||||
You have completed the task?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10673_SagaOfLegend 30857-10.html">"I have."</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Orven:<br>
|
||||
You got stronger very quickly!<br>
|
||||
Now you may change to your third class.
|
||||
</body></html>
|
@ -0,0 +1,340 @@
|
||||
/*
|
||||
* 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.Q10673_SagaOfLegend;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerProfessionChange;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
/**
|
||||
* Saga of Legend (10673)
|
||||
* @URL https://l2wiki.com/classic/Saga_of_Legend
|
||||
* @TODO: Retail htmls.
|
||||
* @author Dmitri, Mobius
|
||||
*/
|
||||
public class Q10673_SagaOfLegend extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int ORVEN = 30857;
|
||||
// Monsters
|
||||
private static final int[] MOBS =
|
||||
{
|
||||
20965, // Chimera Piece 72
|
||||
20970, // Soldier of Ancient Times 73
|
||||
20966, // Mutated Creation 74
|
||||
20971, // Warrior of Ancient Times 74
|
||||
20967, // Creature of the Past 75
|
||||
20973, // Forgotten Ancient People 75
|
||||
20968, // Forgotten Face 75
|
||||
20969, // Giant's Shadow 75
|
||||
20972, // Shaman of Ancient Times 75
|
||||
24025, // Bloody Purple 70
|
||||
24046, // Floating Eye Seer 70
|
||||
24032, // Seer 70
|
||||
24041, // Bloody Mourner 71
|
||||
24026, // Clipher 71
|
||||
24042, // Clumsy Wimp 71
|
||||
24047, // Floating Eye Seer 71
|
||||
24033, // Guardian Spirit 71
|
||||
24048, // Immortal Spirit 71
|
||||
24043, // Mysterious Creature 71
|
||||
24050, // Starving Spirit 71
|
||||
24049, // Immortal Spirit 72
|
||||
24034, // Midnight Sairon 72
|
||||
24027, // Sairon 72
|
||||
24052, // Starving Soldier 72
|
||||
24051, // Starving Spirit 72
|
||||
24035, // Daymen 73
|
||||
24028, // Demon Warrior 73
|
||||
24053, // Starving Soldier 73
|
||||
24054, // Starving Warrior 73
|
||||
24036, // Dolores 74
|
||||
24037, // Maiden Doll 74
|
||||
24055, // Starving Warrior 74
|
||||
24030, // Stone Vanul 74
|
||||
24029, // Veil Master 74
|
||||
24044, // Zaken's Treasure Chest 74
|
||||
24045, // Zaken's Treasure Chest 74
|
||||
24031, // Death Flyer 75
|
||||
24040, // Midnight Nightmare 75
|
||||
24039, // Pearl Horror 75
|
||||
24038, // Tor Scorpion 75
|
||||
};
|
||||
// Rewards
|
||||
private static final int MAGICAL_TABLET = 90045;
|
||||
private static final int SPELLBOOK_HUMAN = 90038; // Spellbook: Mount Golden Lion
|
||||
private static final int SPELLBOOK_ELF = 90039; // Spellbook: Mount Pegasus
|
||||
private static final int SPELLBOOK_DELF = 90040; // Spellbook: Mount Saber Tooth Cougar
|
||||
private static final int SPELLBOOK_ORC = 90042; // Spellbook: Mount Black Bear
|
||||
private static final int SPELLBOOK_DWARF = 90041; // Spellbook: Mount Kukuru
|
||||
private static final int SPELLBOOK_KAMAEL = 91946; // Spellbook: Mount Griffin
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 76;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10673_SagaOfLegend()
|
||||
{
|
||||
super(10673);
|
||||
addStartNpc(ORVEN);
|
||||
addTalkId(ORVEN);
|
||||
addKillId(MOBS);
|
||||
addCondMinLevel(MIN_LEVEL, "30857-00.htm");
|
||||
addCondInCategory(CategoryType.THIRD_CLASS_GROUP, "30857-00.htm");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_76_SAGA_OF_LEGEND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
String htmltext = null;
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
{
|
||||
case "30857-02.htm":
|
||||
case "30857-03.htm":
|
||||
case "30857-04.htm":
|
||||
case "30857-06.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30857-05.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30857-07.html":
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30857-07a.html":
|
||||
{
|
||||
qs.setCond(3, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30857-10.html":
|
||||
{
|
||||
if (qs.isCond(4))
|
||||
{
|
||||
giveItems(player, MAGICAL_TABLET, 10);
|
||||
qs.exitQuest(false, true);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
htmltext = "30857-01.htm";
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (qs.getCond())
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
htmltext = "30857-05.htm";
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
htmltext = "30857-08.html";
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
htmltext = "30857-08a.html";
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
htmltext = "30857-09.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && (qs.getCond() > 1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 700)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(4, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && (qs.getCond() > 1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.ORVEN_S_REQUEST.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (Config.DISABLE_TUTORIAL || ((qs != null) && qs.isCompleted()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_PROFESSION_CHANGE)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onProfessionChange(OnPlayerProfessionChange event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.FOURTH_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Avoid reward more than once.
|
||||
if (player.getVariables().getBoolean("3rdClassMountRewarded", false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCompleted())
|
||||
{
|
||||
player.getVariables().set("3rdClassMountRewarded", true);
|
||||
|
||||
switch (player.getRace())
|
||||
{
|
||||
case ELF:
|
||||
{
|
||||
giveItems(player, SPELLBOOK_ELF, 1);
|
||||
break;
|
||||
}
|
||||
case DARK_ELF:
|
||||
{
|
||||
giveItems(player, SPELLBOOK_DELF, 1);
|
||||
break;
|
||||
}
|
||||
case ORC:
|
||||
{
|
||||
giveItems(player, SPELLBOOK_ORC, 1);
|
||||
break;
|
||||
}
|
||||
case DWARF:
|
||||
{
|
||||
giveItems(player, SPELLBOOK_DWARF, 1);
|
||||
break;
|
||||
}
|
||||
case KAMAEL:
|
||||
{
|
||||
giveItems(player, SPELLBOOK_KAMAEL, 1);
|
||||
break;
|
||||
}
|
||||
case HUMAN:
|
||||
{
|
||||
giveItems(player, SPELLBOOK_HUMAN, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
<html><body>Trader Jackson:<br>
|
||||
It is not much, but I hope it helps.<br>
|
||||
By the way. I heard that Captain Bathis of Gludio Castle is looking for someone to help... Are you interested?<br>
|
||||
<font color=LEVEL>(Open the Missions window and receive the reward for reaching level 10.)</font><br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt NEXT_QUEST">"I will try"</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Trader Jackson:<br>
|
||||
It is quiter now. Thank you. Please take it.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10981_UnbearableWolvesHowling 30002-02.htm">"Thank you"</Button>
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Those Keltirs and Wolves are wandering around the front of the village, so it is beem chaotic.<br>
|
||||
Jackson said he cannot even sleep at night because of their howling. He asked for those Wolves to be kicked out.<br>
|
||||
Will you help?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10981_UnbearableWolvesHowling 30598-02.htm">"I will help"</Button>
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Thank you!<br>
|
||||
Please hunt 20 Wolves or Keltirs.<br1>
|
||||
if you are going to the hunting ground, I can send you there.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10981_UnbearableWolvesHowling TELEPORT_TO_HUNTING_GROUND">Go to the hunting ground</Button>
|
||||
</body></html>
|
@ -0,0 +1,191 @@
|
||||
/*
|
||||
* 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.Q10981_UnbearableWolvesHowling;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
/**
|
||||
* Unbearable Wolves Howling (10981)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10981_UnbearableWolvesHowling extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int NEWBIE_GUIDE = 30598;
|
||||
private static final int JACKSON = 30002;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_JACKSON = new ItemHolder(91646, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 10);
|
||||
private static final ItemHolder RING_NOVICE = new ItemHolder(49041, 2);
|
||||
private static final ItemHolder EARRING_NOVICE = new ItemHolder(49040, 2);
|
||||
private static final ItemHolder NECKLACE_NOVICE = new ItemHolder(49039, 1);
|
||||
// Monsters
|
||||
private static final int BEARDED_KELTIR = 20481;
|
||||
private static final int WOLF = 20120;
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10981_UnbearableWolvesHowling()
|
||||
{
|
||||
super(10981);
|
||||
addStartNpc(NEWBIE_GUIDE);
|
||||
addTalkId(NEWBIE_GUIDE, JACKSON);
|
||||
addKillId(BEARDED_KELTIR, WOLF);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_2_20_UNBEARABLE_WOLVES_HOWLING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(-90050, 241763, -3560);
|
||||
break;
|
||||
}
|
||||
case "30598-02.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30002-02.htm":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 260000, 6000);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, RING_NOVICE);
|
||||
giveItems(player, EARRING_NOVICE);
|
||||
giveItems(player, NECKLACE_NOVICE);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 20)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to return to Trader Jackson", 5000));
|
||||
giveItems(killer, SOE_TO_JACKSON);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.KILL_WOLVES_AND_BEARDED_KELTIRS.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30598-01.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case NEWBIE_GUIDE:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30598-02.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case JACKSON:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30002.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == NEWBIE_GUIDE)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 2-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,8 @@
|
||||
<html><body>Trader Jackson:<br>
|
||||
Captain Bathis want someone who knows about spiders, more than a veteran.<br1>
|
||||
It looks like he wants to raise someone to hunt spiders expertly in Gludio.<br1>
|
||||
How many, you ask? I think 30 should be enough.<br1>
|
||||
There are many spiders to the west of the island. It is pretty far to walk there.<br1>
|
||||
If you are going to the hunting ground, I can help you.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt TELEPORT_TO_HUNTING_GROUND">Go to the hunting ground.</Button>
|
||||
</body></html>
|
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30002.htm
vendored
Normal file
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30002.htm
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Trader Jackson:<br>
|
||||
Captain Bathis of Gludio Castle is looking for a spider expert to hunt spiders.<br>
|
||||
Defeat some Giant Spiders as practice and go to find Captain Bathis.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt 30002-01.html">"I will do it"</Button>
|
||||
</body></html>
|
14
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332-01.html
vendored
Normal file
14
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332-01.html
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Armor<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Warrior(Humans)<br1>
|
||||
Knight(Humans)<br1>
|
||||
Elven Knight(Elves)<br1>
|
||||
Palus Knight(Dark Elves)<br1>
|
||||
Orc Raider(Orcs)<br1>
|
||||
Scavenger(Dwarves)<br1>
|
||||
Artisan(Dwarves)<br1>
|
||||
Trooper(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt HeavyArmor.html">Receive (Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt 30332.html">Back</Button>
|
||||
</body></html>
|
12
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332-02.html
vendored
Normal file
12
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332-02.html
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Outfit<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Rogue(Humans)<br1>
|
||||
Elven Scout(Elves)<br1>
|
||||
Assassin(Dark Elves)<br1>
|
||||
Orc Monk(Orcs)<br1>
|
||||
Soul Finder(Jin Kamael))<br1>
|
||||
Warder(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt LightArmor.html">Receive (Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt 30332.html">Back</Button>
|
||||
</body></html>
|
13
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332-03.html
vendored
Normal file
13
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332-03.html
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Doublet<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Wizard(Humans)<br1>
|
||||
Cleric(Humans)<br1>
|
||||
Elven Wizard(Elves)<br1>
|
||||
Oracle(Elves)<br1>
|
||||
Dark Wizard(Dark Elves)<br1>
|
||||
Shillien Oracle(Dark Elves)<br1>
|
||||
Orc Shaman(Orcs)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt Robe.html">Receive (Robe) Moonshadow Double Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt 30332.html">Back</Button>
|
||||
</body></html>
|
7
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332.html
vendored
Normal file
7
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/30332.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You came from Talking Island? I see. You know how hunt spiders?<br>
|
||||
Hm. It should be good enough for you. You will have to get ready to go hunt. Pick one of these for your armor.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt 30332-01.html">(Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt 30332-02.html">(Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10982_SpiderHunt 30332-03.html">(Robe Armor) Moonshadow Double Set</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Armor.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Ourfit.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,316 @@
|
||||
/*
|
||||
* 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.Q10982_SpiderHunt;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
/**
|
||||
* New Horizons (10982)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10982_SpiderHunt extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int JACKSON = 30002;
|
||||
private static final int CAPTAIN_BATHIS = 30332;
|
||||
// Monsters
|
||||
private static final int GIANT_SPIDER = 20103;
|
||||
private static final int GIANT_FANG_SPIDER = 20106;
|
||||
private static final int GIANT_BLADE_SPIDER = 20108;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_CAPTAIN_BATHIS = new ItemHolder(91651, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 20);
|
||||
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 50);
|
||||
private static final ItemHolder HP_POTS = new ItemHolder(91912, 50); // TODO: Finish Item
|
||||
private static final ItemHolder RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT = new ItemHolder(91840, 1);
|
||||
// HELMET FOR ALL ARMORS
|
||||
private static final ItemHolder MOON_HELMET = new ItemHolder(7850, 1);
|
||||
// HEAVY
|
||||
private static final ItemHolder MOON_ARMOR = new ItemHolder(7851, 1);
|
||||
private static final ItemHolder MOON_GAUNTLETS = new ItemHolder(7852, 1);
|
||||
private static final ItemHolder MOON_BOOTS = new ItemHolder(7853, 1);
|
||||
// LIGHT
|
||||
private static final ItemHolder MOON_SHELL = new ItemHolder(7854, 1);
|
||||
private static final ItemHolder MOON_LEATHER_GLOVES = new ItemHolder(7855, 1);
|
||||
private static final ItemHolder MOON_SHOES = new ItemHolder(7856, 1);
|
||||
// ROBE
|
||||
private static final ItemHolder MOON_CAPE = new ItemHolder(7857, 1);
|
||||
private static final ItemHolder MOON_SILK = new ItemHolder(7858, 1);
|
||||
private static final ItemHolder MOON_SANDALS = new ItemHolder(7859, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10982_SpiderHunt()
|
||||
{
|
||||
super(10982);
|
||||
addStartNpc(JACKSON);
|
||||
addTalkId(JACKSON, CAPTAIN_BATHIS);
|
||||
addKillId(GIANT_SPIDER, GIANT_FANG_SPIDER, GIANT_BLADE_SPIDER);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_15_20_SPIDER_HUNT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30002-01.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-01.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-02.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(-117409, 227185, -2896);
|
||||
break;
|
||||
}
|
||||
case "NEXT_QUEST":
|
||||
{
|
||||
htmltext = "30002.htm";
|
||||
break;
|
||||
}
|
||||
case "HeavyArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_ARMOR);
|
||||
giveItems(player, MOON_GAUNTLETS);
|
||||
giveItems(player, MOON_BOOTS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "LightArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_SHELL);
|
||||
giveItems(player, MOON_LEATHER_GLOVES);
|
||||
giveItems(player, MOON_SHOES);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "Robe.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_CAPE);
|
||||
giveItems(player, MOON_SILK);
|
||||
giveItems(player, MOON_SANDALS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to go to Captain Bathis in the Town of Gludio.", 5000));
|
||||
giveItems(killer, SOE_TO_CAPTAIN_BATHIS);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.KILL_GIANT_SPIDERS.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30002.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case JACKSON:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30002-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CAPTAIN_BATHIS:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30332.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == JACKSON)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (Config.DISABLE_TUTORIAL || ((qs != null) && qs.isCompleted()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/Robe.html
vendored
Normal file
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/Robe.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Robe.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
3
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/no_lvl.html
vendored
Normal file
3
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10982_SpiderHunt/no_lvl.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Trader Vollodov:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 15-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Trader Herbiel:<br>
|
||||
I heard that Captain Bathis of GLudio Castle is looking for some spider web. He wants to make a rope with that. I wonder for what?<br>
|
||||
Would you like to try, adventurer?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb NEXT_QUEST">"How much doest he need?"</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Trader Herbiel:<br>
|
||||
Im feeling great. It is not much, but please take it.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10983_TroubledForest 30150-02.htm">You have my gratitude.</Button>
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Have you seen the Goblin Raiders and the Kaboo Orcs outside the village? They are very violent.<br1>
|
||||
Herbiel was chased by them before. That is why he is looking for someone to beat them up.<br>
|
||||
Will you help?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10983_TroubledForest 30599-02.htm">"I will help"</Button>
|
||||
</body></html>
|
@ -0,0 +1,7 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Thank you!<br>
|
||||
Please beath up 20 Goblin Raiders and Kaboo Orcs causing trouble in front of the village.<br>
|
||||
If you are going to hunting ground, I can send you there. You say it is too close?<br>
|
||||
Still, I like doing this. Just let me know.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10983_TroubledForest TELEPORT_TO_HUNTING_GROUND">Go to the hunting ground.</Button>
|
||||
</body></html>
|
@ -0,0 +1,191 @@
|
||||
/*
|
||||
* 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.Q10983_TroubledForest;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
/**
|
||||
* Troubled Forest (10983)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10983_TroubledForest extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int NEWBIE_GUIDE = 30599;
|
||||
private static final int HERBIEL = 30150;
|
||||
// Monsters
|
||||
private static final int GOBLIN_RAIDER = 20325;
|
||||
private static final int KABOO_ORC = 20468;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_HERBIEL = new ItemHolder(91647, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 10);
|
||||
private static final ItemHolder RING_NOVICE = new ItemHolder(49041, 2);
|
||||
private static final ItemHolder EARRING_NOVICE = new ItemHolder(49040, 2);
|
||||
private static final ItemHolder NECKLACE_NOVICE = new ItemHolder(49039, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10983_TroubledForest()
|
||||
{
|
||||
super(10983);
|
||||
addStartNpc(NEWBIE_GUIDE);
|
||||
addTalkId(NEWBIE_GUIDE, HERBIEL);
|
||||
addKillId(GOBLIN_RAIDER, KABOO_ORC);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_2_20_TROUBLED_FOREST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(52746, 49932, -3480);
|
||||
break;
|
||||
}
|
||||
case "30599-02.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30150-02.htm":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 260000, 6000);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, RING_NOVICE);
|
||||
giveItems(player, EARRING_NOVICE);
|
||||
giveItems(player, NECKLACE_NOVICE);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 20)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to return to Trader Herbiel.", 5000));
|
||||
giveItems(killer, SOE_TO_HERBIEL);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.KILL_ORCS_AND_GOBLINS.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30599-01.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case NEWBIE_GUIDE:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30599-02.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case HERBIEL:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30150.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == NEWBIE_GUIDE)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 2-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Trader Herbiel:<br>
|
||||
I think 30 Spider Webs should be enough. Once you get it, go to straight to Captain Bathis.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb TELEPORT_TO_HUNTING_GROUND">Go to the hunting ground.</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Trader Herbiel:<br>
|
||||
I heard that Captain Bathis of Gludio Castle is looking for some spider web. He want to make a rope with that. I wonder for what?<br>
|
||||
Would you like to try, adventurer?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb 30150-01.html">"How much doest he need?"</Button>
|
||||
</body></html>
|
@ -0,0 +1,14 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Armor<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Warrior(Humans)<br1>
|
||||
Knight(Humans)<br1>
|
||||
Elven Knight(Elves)<br1>
|
||||
Palus Knight(Dark Elves)<br1>
|
||||
Orc Raider(Orcs)<br1>
|
||||
Scavenger(Dwarves)<br1>
|
||||
Artisan(Dwarves)<br1>
|
||||
Trooper(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb HeavyArmor.html">Receive (Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb 30332.html">Back</Button>
|
||||
</body></html>
|
@ -0,0 +1,12 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Outfit<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Rogue(Humans)<br1>
|
||||
Elven Scout(Elves)<br1>
|
||||
Assassin(Dark Elves)<br1>
|
||||
Orc Monk(Orcs)<br1>
|
||||
Soul Finder(Jin Kamael))<br1>
|
||||
Warder(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb LightArmor.html">Receive (Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb 30332.html">Back</Button>
|
||||
</body></html>
|
@ -0,0 +1,13 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Doublet<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Wizard(Humans)<br1>
|
||||
Cleric(Humans)<br1>
|
||||
Elven Wizard(Elves)<br1>
|
||||
Oracle(Elves)<br1>
|
||||
Dark Wizard(Dark Elves)<br1>
|
||||
Shillien Oracle(Dark Elves)<br1>
|
||||
Orc Shaman(Orcs)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb Robe.html">Receive (Robe) Moonshadow Double Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb 30332.html">Back</Button>
|
||||
</body></html>
|
@ -0,0 +1,9 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
Lets see<br>
|
||||
Hm, this should be enough.<br>
|
||||
I cant tell you the details, but there are many creatures in the swamp these days. Im prepared for it. It is nothing to be worried about.<br>
|
||||
Since you helped me. I looked for armor that could fit you. Pick one that you would like.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb 30332-01.html">(Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb 30332-02.html">(Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10984_CollectSpiderweb 30332-03.html">(Robe Armor) Moonshadow Double Set</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Armor.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Ourfit.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,295 @@
|
||||
/*
|
||||
* 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.Q10984_CollectSpiderweb;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
/**
|
||||
* Collect Spiderweb (10984)
|
||||
* @author RobikBobik, Mobius
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10984_CollectSpiderweb extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int HERBIEL = 30150;
|
||||
private static final int CAPTAIN_BATHIS = 30332;
|
||||
// Monsters
|
||||
private static final int HOOK_SPIDER = 20308;
|
||||
private static final int CRIMSON_SPIDER = 20460;
|
||||
private static final int PINCER_SPIDER = 20466;
|
||||
// Items
|
||||
private static final int GIANT_COBWEB = 91652;
|
||||
private static final ItemHolder SOE_TO_CAPTAIN_BATHIS = new ItemHolder(91651, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 20);
|
||||
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 50);
|
||||
private static final ItemHolder HP_POTS = new ItemHolder(91912, 50); // TODO: Finish Item
|
||||
private static final ItemHolder RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT = new ItemHolder(91840, 1);
|
||||
// HELMET FOR ALL ARMORS
|
||||
private static final ItemHolder MOON_HELMET = new ItemHolder(7850, 1);
|
||||
// HEAVY
|
||||
private static final ItemHolder MOON_ARMOR = new ItemHolder(7851, 1);
|
||||
private static final ItemHolder MOON_GAUNTLETS = new ItemHolder(7852, 1);
|
||||
private static final ItemHolder MOON_BOOTS = new ItemHolder(7853, 1);
|
||||
// LIGHT
|
||||
private static final ItemHolder MOON_SHELL = new ItemHolder(7854, 1);
|
||||
private static final ItemHolder MOON_LEATHER_GLOVES = new ItemHolder(7855, 1);
|
||||
private static final ItemHolder MOON_SHOES = new ItemHolder(7856, 1);
|
||||
// ROBE
|
||||
private static final ItemHolder MOON_CAPE = new ItemHolder(7857, 1);
|
||||
private static final ItemHolder MOON_SILK = new ItemHolder(7858, 1);
|
||||
private static final ItemHolder MOON_SANDALS = new ItemHolder(7859, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
|
||||
public Q10984_CollectSpiderweb()
|
||||
{
|
||||
super(10984);
|
||||
addStartNpc(HERBIEL);
|
||||
addTalkId(HERBIEL, CAPTAIN_BATHIS);
|
||||
addKillId(HOOK_SPIDER, CRIMSON_SPIDER, PINCER_SPIDER);
|
||||
registerQuestItems(GIANT_COBWEB);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_15_20_SPIDER_WEB);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30150-01.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-01.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-02.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(5135, 68148, -3256);
|
||||
break;
|
||||
}
|
||||
case "NEXT_QUEST":
|
||||
{
|
||||
htmltext = "30150.htm";
|
||||
break;
|
||||
}
|
||||
case "HeavyArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_ARMOR);
|
||||
giveItems(player, MOON_GAUNTLETS);
|
||||
giveItems(player, MOON_BOOTS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "LightArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_SHELL);
|
||||
giveItems(player, MOON_LEATHER_GLOVES);
|
||||
giveItems(player, MOON_SHOES);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "Robe.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_CAPE);
|
||||
giveItems(player, MOON_SILK);
|
||||
giveItems(player, MOON_SANDALS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30150.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case HERBIEL:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30150-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CAPTAIN_BATHIS:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30332.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == HERBIEL)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
if (getQuestItemsCount(killer, GIANT_COBWEB) < 30)
|
||||
{
|
||||
giveItems(killer, GIANT_COBWEB, 1, true);
|
||||
}
|
||||
if (getQuestItemsCount(killer, GIANT_COBWEB) >= 30)
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to go to Captain Bathis in the Town of Gludio.", 5000));
|
||||
giveItems(killer, SOE_TO_CAPTAIN_BATHIS);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (Config.DISABLE_TUTORIAL || ((qs != null) && qs.isCompleted()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Robe.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,3 @@
|
||||
<html><body>Trader Vollodov:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 15-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Trader Vollodos:<br>
|
||||
Lets see... Some accessories... And a Scroll of Escape.<br>
|
||||
Oh, Im sorry.<br>
|
||||
This isnt to make up for it, but I heard that Captain Bathis of Gludio Castle is looking for someone to help. Are you interested?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster NEXT_QUEST">"I will try"</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Trader Vollodos:<br>
|
||||
I heard about you from the Newbie Guide. Here is the item.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10985_CleaningUpTheGround 30137-02.htm">Receive the item.</Button>
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Did you see the goblins in front of the village? There are even dirty Imps.<br>
|
||||
I need them to disappear to feel better.<br>
|
||||
You want to try?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10985_CleaningUpTheGround 30600-02.htm">"I will do it."</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Take a care of those dirty bastards.<br>Get rid of those Imps, Goblins, and Ashen Wolves. How many you ask? About 20 should be enough.<br>
|
||||
Dont you want to go now? I can send you there.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10985_CleaningUpTheGround TELEPORT_TO_HUNTING_GROUND">"Go to the hunting ground."</Button>
|
||||
</body></html>
|
@ -0,0 +1,192 @@
|
||||
/*
|
||||
* 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.Q10985_CleaningUpTheGround;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
/**
|
||||
* Cleaning-Up The Ground (10985)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10985_CleaningUpTheGround extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int NEWBIE_GUIDE = 30600;
|
||||
private static final int VOLODOS = 30137;
|
||||
// Monsters
|
||||
private static final int ASHEN_WOLF = 20456;
|
||||
private static final int GOBLIN = 20003;
|
||||
private static final int IMP = 20004;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_VOLLODOS = new ItemHolder(91648, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 10);
|
||||
private static final ItemHolder RING_NOVICE = new ItemHolder(49041, 2);
|
||||
private static final ItemHolder EARRING_NOVICE = new ItemHolder(49040, 2);
|
||||
private static final ItemHolder NECKLACE_NOVICE = new ItemHolder(49039, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10985_CleaningUpTheGround()
|
||||
{
|
||||
super(10985);
|
||||
addStartNpc(NEWBIE_GUIDE);
|
||||
addTalkId(NEWBIE_GUIDE, VOLODOS);
|
||||
addKillId(ASHEN_WOLF, GOBLIN, IMP);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_2_20_CLEANING_UP_THE_GROUNDS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(8945, 3529, -2504);
|
||||
break;
|
||||
}
|
||||
case "30600-02.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30137-02.htm":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 260000, 6000);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, RING_NOVICE);
|
||||
giveItems(player, EARRING_NOVICE);
|
||||
giveItems(player, NECKLACE_NOVICE);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 20)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory.", 5000));
|
||||
giveItems(killer, SOE_TO_VOLLODOS);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.KILL_MONSTERS_NEAR_THE_VILLAGE.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30600-01.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case NEWBIE_GUIDE:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30600-02.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VOLODOS:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30137.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == NEWBIE_GUIDE)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 2-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,7 @@
|
||||
<html><body>Trader Vollodos:<br>
|
||||
Captain Bathis asked to get rid of the Undead in the Swampland. I heard that there are Marsh Zombies and Dark Horrors.<br>
|
||||
Im counting on you.<br>
|
||||
But it is pretty far to walk all the way to the Swampland.<br>
|
||||
If you are going to the hunting ground, I can help you.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster TELEPORT_TO_HUNTING_GROUND">Go to the hunting ground.</Button>
|
||||
</body></html>
|
6
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30137.htm
vendored
Normal file
6
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30137.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Trader Vollodos:<br>
|
||||
Captain Bathis of Gludio Castle is looking for someone to take care of the Undead in the Swamplant.<br>
|
||||
Gludio Castle is so far from here, so Im not sure why he requested that.<br>
|
||||
Will you do it?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster 30137-01.html">"I will do it"</Button>
|
||||
</body></html>
|
14
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30332-01.html
vendored
Normal file
14
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30332-01.html
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Armor<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Warrior(Humans)<br1>
|
||||
Knight(Humans)<br1>
|
||||
Elven Knight(Elves)<br1>
|
||||
Palus Knight(Dark Elves)<br1>
|
||||
Orc Raider(Orcs)<br1>
|
||||
Scavenger(Dwarves)<br1>
|
||||
Artisan(Dwarves)<br1>
|
||||
Trooper(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster HeavyArmor.html">Receive (Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster 30332.html">Back</Button>
|
||||
</body></html>
|
12
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30332-02.html
vendored
Normal file
12
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30332-02.html
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Outfit<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Rogue(Humans)<br1>
|
||||
Elven Scout(Elves)<br1>
|
||||
Assassin(Dark Elves)<br1>
|
||||
Orc Monk(Orcs)<br1>
|
||||
Soul Finder(Jin Kamael))<br1>
|
||||
Warder(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster LightArmor.html">Receive (Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster 30332.html">Back</Button>
|
||||
</body></html>
|
13
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30332-03.html
vendored
Normal file
13
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/30332-03.html
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Doublet<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Wizard(Humans)<br1>
|
||||
Cleric(Humans)<br1>
|
||||
Elven Wizard(Elves)<br1>
|
||||
Oracle(Elves)<br1>
|
||||
Dark Wizard(Dark Elves)<br1>
|
||||
Shillien Oracle(Dark Elves)<br1>
|
||||
Orc Shaman(Orcs)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster Robe.html">Receive (Robe) Moonshadow Double Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster 30332.html">Back</Button>
|
||||
</body></html>
|
@ -0,0 +1,7 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
I heard from Vollodos. You are skilled. if there were more monsters in the swamp, they might have come to Gludio. Thank you<br>
|
||||
its not much, but pick an armor piece.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster 30332-01.html">(Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster 30332-02.html">(Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10986_SwampMonster 30332-03.html">(Robe Armor) Moonshadow Double Set</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Armor.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Ourfit.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,317 @@
|
||||
/*
|
||||
* 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.Q10986_SwampMonster;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
/**
|
||||
* Swamp Monsters (10986)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10986_SwampMonster extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int VOLODOS = 30137;
|
||||
private static final int CAPTAIN_BATHIS = 30332;
|
||||
// Monsters
|
||||
private static final int MARSH_ZOMBIE = 20015; // NOTE: Zombie Forest Elf in old client
|
||||
private static final int MARSH_ZOMBIE_SCOUT = 20020; // NOTE: Zombie Forest Elf Resercher in old client
|
||||
private static final int DARK_HORROR = 20105;
|
||||
private static final int LESSER_DARK_HORROR = 20025;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_CAPTAIN_BATHIS = new ItemHolder(91651, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 20);
|
||||
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 50);
|
||||
private static final ItemHolder HP_POTS = new ItemHolder(91912, 50); // TODO: Finish Item
|
||||
private static final ItemHolder RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT = new ItemHolder(91840, 1);
|
||||
// HELMET FOR ALL ARMORS
|
||||
private static final ItemHolder MOON_HELMET = new ItemHolder(7850, 1);
|
||||
// HEAVY
|
||||
private static final ItemHolder MOON_ARMOR = new ItemHolder(7851, 1);
|
||||
private static final ItemHolder MOON_GAUNTLETS = new ItemHolder(7852, 1);
|
||||
private static final ItemHolder MOON_BOOTS = new ItemHolder(7853, 1);
|
||||
// LIGHT
|
||||
private static final ItemHolder MOON_SHELL = new ItemHolder(7854, 1);
|
||||
private static final ItemHolder MOON_LEATHER_GLOVES = new ItemHolder(7855, 1);
|
||||
private static final ItemHolder MOON_SHOES = new ItemHolder(7856, 1);
|
||||
// ROBE
|
||||
private static final ItemHolder MOON_CAPE = new ItemHolder(7857, 1);
|
||||
private static final ItemHolder MOON_SILK = new ItemHolder(7858, 1);
|
||||
private static final ItemHolder MOON_SANDALS = new ItemHolder(7859, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10986_SwampMonster()
|
||||
{
|
||||
super(10986);
|
||||
addStartNpc(VOLODOS);
|
||||
addTalkId(VOLODOS, CAPTAIN_BATHIS);
|
||||
addKillId(MARSH_ZOMBIE, MARSH_ZOMBIE_SCOUT, DARK_HORROR, LESSER_DARK_HORROR);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_15_20_TERRIBLE_SWAMP_MONSTERS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30137-01.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-01.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-02.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(-19004, 47388, -3608);
|
||||
break;
|
||||
}
|
||||
case "NEXT_QUEST":
|
||||
{
|
||||
htmltext = "30137.htm";
|
||||
break;
|
||||
}
|
||||
case "HeavyArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_ARMOR);
|
||||
giveItems(player, MOON_GAUNTLETS);
|
||||
giveItems(player, MOON_BOOTS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "LightArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_SHELL);
|
||||
giveItems(player, MOON_LEATHER_GLOVES);
|
||||
giveItems(player, MOON_SHOES);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "Robe.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_CAPE);
|
||||
giveItems(player, MOON_SILK);
|
||||
giveItems(player, MOON_SANDALS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to go to Captain Bathis in the Town of Gludio.", 5000));
|
||||
giveItems(killer, SOE_TO_CAPTAIN_BATHIS);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.KILL_ZOMBIES_AND_DARK_HORRORS.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30137.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case VOLODOS:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30137-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CAPTAIN_BATHIS:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30332.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == VOLODOS)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (Config.DISABLE_TUTORIAL || ((qs != null) && qs.isCompleted()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/Robe.html
vendored
Normal file
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10986_SwampMonster/Robe.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Robe.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,3 @@
|
||||
<html><body>Trader Vollodov:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 15-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Trader Uska:<br>
|
||||
I heard someting that might help you. The Maraku Werewolves seem to be scheming something. Its something they always do, but it looks like it is something big this time. Even Captain Bathis from Gludio Castle is worried about what the Maraku Werewolves are up to. How about taking care of the Maraku Werewolves and going to Bathis?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy NEXT_QUEST">"I will try"</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Trader Uska:<br>
|
||||
I heard that you beat those guys up. Our ancestors will be able to rest in peace.Here is the item I was storing. Thank you.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10987_PlunderedGraves 30560-02.htm">Thank you</Button>
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
You know that many ancestora are resting in the Valley of Heroes, right?<br>
|
||||
But it looks like the Kasha Wolves and Goblin Tomb Raiders have been damaging the tombs.<br1>
|
||||
Will you take care of those bastards? I have left some rewards with Uska, so go after you finish the job.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10987_PlunderedGraves 30602-02.htm">"I cannot forgive them, no."</Button>
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Hunt those Kasha Wolves, Goblin Tomb Raiders, and Rakeclaw Imps. They dared to damage the tombs of our ancestors.<br>
|
||||
20 of them should be enough. And one you are done, go find Uska. I left some rewards with him.<br>
|
||||
If you are going to hunting ground, I can send you there.
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10987_PlunderedGraves TELEPORT_TO_HUNTING_GROUND">"Go to the hunting ground."</Button>
|
||||
</body></html>
|
@ -0,0 +1,193 @@
|
||||
/*
|
||||
* 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.Q10987_PlunderedGraves;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
/**
|
||||
* Plundered Graves (10987)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10987_PlunderedGraves extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int NEWBIE_GUIDE = 30602;
|
||||
private static final int USKA = 30560;
|
||||
// Monsters
|
||||
private static final int KASHA_WOLF = 20475;
|
||||
private static final int KASHA_TIMBER_WOLF = 20477; // NOTE: Kasha Forest Wolf in old client
|
||||
private static final int GOBLIN_TOMB_RAIDER = 20319;
|
||||
private static final int RAKECLAW_IMP_HUNTER = 20312;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_USKA = new ItemHolder(91649, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 10);
|
||||
private static final ItemHolder RING_NOVICE = new ItemHolder(49041, 2);
|
||||
private static final ItemHolder EARRING_NOVICE = new ItemHolder(49040, 2);
|
||||
private static final ItemHolder NECKLACE_NOVICE = new ItemHolder(49039, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10987_PlunderedGraves()
|
||||
{
|
||||
super(10987);
|
||||
addStartNpc(NEWBIE_GUIDE);
|
||||
addTalkId(NEWBIE_GUIDE, USKA);
|
||||
addKillId(KASHA_WOLF, KASHA_TIMBER_WOLF, GOBLIN_TOMB_RAIDER, RAKECLAW_IMP_HUNTER);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_2_20_PLUNDERED_GRAVES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(-39527, -117654, -1840);
|
||||
break;
|
||||
}
|
||||
case "30602-02.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30560-02.htm":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 260000, 6000);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, RING_NOVICE);
|
||||
giveItems(player, EARRING_NOVICE);
|
||||
giveItems(player, NECKLACE_NOVICE);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 20)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory.", 5000));
|
||||
giveItems(killer, SOE_TO_USKA);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.TRACK_DOWN_GRAVE_ROBBERS.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30602-01.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case NEWBIE_GUIDE:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30602-02.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case USKA:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30560.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == NEWBIE_GUIDE)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 2-20 levels).
|
||||
</body></html>
|
14
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332-01.html
vendored
Normal file
14
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332-01.html
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Armor<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Warrior(Humans)<br1>
|
||||
Knight(Humans)<br1>
|
||||
Elven Knight(Elves)<br1>
|
||||
Palus Knight(Dark Elves)<br1>
|
||||
Orc Raider(Orcs)<br1>
|
||||
Scavenger(Dwarves)<br1>
|
||||
Artisan(Dwarves)<br1>
|
||||
Trooper(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy HeavyArmor.html">Receive (Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy 30332.html">Back</Button>
|
||||
</body></html>
|
12
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332-02.html
vendored
Normal file
12
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332-02.html
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Outfit<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Rogue(Humans)<br1>
|
||||
Elven Scout(Elves)<br1>
|
||||
Assassin(Dark Elves)<br1>
|
||||
Orc Monk(Orcs)<br1>
|
||||
Soul Finder(Jin Kamael))<br1>
|
||||
Warder(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy LightArmor.html">Receive (Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy 30332.html">Back</Button>
|
||||
</body></html>
|
13
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332-03.html
vendored
Normal file
13
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332-03.html
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Doublet<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Wizard(Humans)<br1>
|
||||
Cleric(Humans)<br1>
|
||||
Elven Wizard(Elves)<br1>
|
||||
Oracle(Elves)<br1>
|
||||
Dark Wizard(Dark Elves)<br1>
|
||||
Shillien Oracle(Dark Elves)<br1>
|
||||
Orc Shaman(Orcs)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy Robe.html">Receive (Robe) Moonshadow Double Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy 30332.html">Back</Button>
|
||||
</body></html>
|
9
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332.html
vendored
Normal file
9
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30332.html
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
Its you- The one who made Maraku Werevolves shiver...<br>
|
||||
I was worrived about what they were up to, but thanks to you, I am relived.<br>
|
||||
What?<br1>
|
||||
You look curious. But Im sorry. I dont think I can tell you. I will give you an armor instead, so pick one you like.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy 30332-01.html">(Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy 30332-02.html">(Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy 30332-03.html">(Robe Armor) Moonshadow Double Set</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Trader Uska:<br>
|
||||
I heard that the Maraku Werewolves are raising spiders to do something. We better give them a warning. Defeating 30 of them should be good enough of a warning. Will you go?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy TELEPORT_TO_HUNTING_GROUND">Go to the hunting ground.</Button>
|
||||
</body></html>
|
6
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30560.htm
vendored
Normal file
6
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/30560.htm
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<html><body>Trader Uska:<br>
|
||||
You want to know what counts as a warning?<br>
|
||||
Lets me see... Defeat 30 of Maraku Werewolfs, and that should do the trick.<br>
|
||||
Will you do it?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10988_Conspiracy 30560-01.html">"I will do it."</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Armor.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Ourfit.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,317 @@
|
||||
/*
|
||||
* 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.Q10988_Conspiracy;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
/**
|
||||
* Conspiracy (10988)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10988_Conspiracy extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int USKA = 30560;
|
||||
private static final int CAPTAIN_BATHIS = 30332;
|
||||
// Monsters
|
||||
private static final int KASHA_SPIDER = 20474;
|
||||
private static final int KASHA_BLADE_SPIDER = 20478;
|
||||
private static final int MARAKU_WEREVOLF_CHIEFTAIN = 20364;
|
||||
private static final int EVIL_EYE_PATROL = 20428;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_CAPTAIN_BATHIS = new ItemHolder(91651, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 20);
|
||||
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 50);
|
||||
private static final ItemHolder HP_POTS = new ItemHolder(91912, 50); // TODO: Finish Item
|
||||
private static final ItemHolder RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT = new ItemHolder(91840, 1);
|
||||
// HELMET FOR ALL ARMORS
|
||||
private static final ItemHolder MOON_HELMET = new ItemHolder(7850, 1);
|
||||
// HEAVY
|
||||
private static final ItemHolder MOON_ARMOR = new ItemHolder(7851, 1);
|
||||
private static final ItemHolder MOON_GAUNTLETS = new ItemHolder(7852, 1);
|
||||
private static final ItemHolder MOON_BOOTS = new ItemHolder(7853, 1);
|
||||
// LIGHT
|
||||
private static final ItemHolder MOON_SHELL = new ItemHolder(7854, 1);
|
||||
private static final ItemHolder MOON_LEATHER_GLOVES = new ItemHolder(7855, 1);
|
||||
private static final ItemHolder MOON_SHOES = new ItemHolder(7856, 1);
|
||||
// ROBE
|
||||
private static final ItemHolder MOON_CAPE = new ItemHolder(7857, 1);
|
||||
private static final ItemHolder MOON_SILK = new ItemHolder(7858, 1);
|
||||
private static final ItemHolder MOON_SANDALS = new ItemHolder(7859, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10988_Conspiracy()
|
||||
{
|
||||
super(10988);
|
||||
addStartNpc(USKA);
|
||||
addTalkId(USKA, CAPTAIN_BATHIS);
|
||||
addKillId(KASHA_SPIDER, KASHA_BLADE_SPIDER, MARAKU_WEREVOLF_CHIEFTAIN, EVIL_EYE_PATROL);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_15_20_CONSPIRACY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30560-01.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-01.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-02.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(13136, -131688, -1312);
|
||||
break;
|
||||
}
|
||||
case "NEXT_QUEST":
|
||||
{
|
||||
htmltext = "30560.htm";
|
||||
break;
|
||||
}
|
||||
case "HeavyArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_ARMOR);
|
||||
giveItems(player, MOON_GAUNTLETS);
|
||||
giveItems(player, MOON_BOOTS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "LightArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_SHELL);
|
||||
giveItems(player, MOON_LEATHER_GLOVES);
|
||||
giveItems(player, MOON_SHOES);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "Robe.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_CAPE);
|
||||
giveItems(player, MOON_SILK);
|
||||
giveItems(player, MOON_SANDALS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to go to Captain Bathis in the Town of Gludio.", 5000));
|
||||
giveItems(killer, SOE_TO_CAPTAIN_BATHIS);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.EXPOSE_A_PLOT_OF_MARAKU_WEREWOLVES.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30560.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case USKA:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30560-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CAPTAIN_BATHIS:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30332.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == USKA)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (Config.DISABLE_TUTORIAL || ((qs != null) && qs.isCompleted()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/Robe.html
vendored
Normal file
5
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/Robe.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Robe.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
3
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/no_lvl.html
vendored
Normal file
3
L2J_Mobius_Classic_2.9.5_Saviors/dist/game/data/scripts/quests/Q10988_Conspiracy/no_lvl.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<html><body>Trader Vollodov:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 15-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,6 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
I heard that Wolves and keltiers are wandering in front of the village. Those things get in the way of work. Especially when sending food to the mines, those Gnomes make some loud noises, so people hate it.<br>
|
||||
I want to show them away. Can you help?<br>
|
||||
If you help, I will talk to Gerald and get you some accessories.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10989_DangerousPredators 30601-02.htm">"Sure."</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
Thank you. Hunt 20 from either Longtail Keltirs , Elder Longtail Keltirs, or Black Wolves.<br1>
|
||||
Get going.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10989_DangerousPredators TELEPORT_TO_HUNTING_GROUND">"Go to the hunting ground."</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Priest of the Earth Gerald:<br>
|
||||
I heard the Captain Bathis from Gludio Castle has been looking for tarantula by-products...
|
||||
Are you interested?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction NEXT_QUEST">"I will try"</Button>
|
||||
</body></html>
|
@ -0,0 +1,4 @@
|
||||
<html><body>Priest of the Earth Gerald:<br>
|
||||
I heard about you from the Newbie Guide. You kicked out those rats from around the village. This is a token of my appreciation. Please take it.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10989_DangerousPredators 30650-02.htm">Receive the item.</Button>
|
||||
</body></html>
|
@ -0,0 +1,192 @@
|
||||
/*
|
||||
* 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.Q10989_DangerousPredators;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
/**
|
||||
* Dangerous Predators (10989)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10989_DangerousPredators extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int NEWBIE_GUIDE = 30601;
|
||||
private static final int GERALD = 30650;
|
||||
// Monsters
|
||||
private static final int LONGTAIL_KELTIR = 20533;
|
||||
private static final int ELDER_LONGTAIL_KELTIR = 20539;
|
||||
private static final int BLACK_WOLF = 21983;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_GERAILD = new ItemHolder(91650, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 10);
|
||||
private static final ItemHolder RING_NOVICE = new ItemHolder(49041, 2);
|
||||
private static final ItemHolder EARRING_NOVICE = new ItemHolder(49040, 2);
|
||||
private static final ItemHolder NECKLACE_NOVICE = new ItemHolder(49039, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10989_DangerousPredators()
|
||||
{
|
||||
super(10989);
|
||||
addStartNpc(NEWBIE_GUIDE);
|
||||
addTalkId(NEWBIE_GUIDE, GERALD);
|
||||
addKillId(LONGTAIL_KELTIR, ELDER_LONGTAIL_KELTIR, BLACK_WOLF);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_2_20_DANGEROUS_PREDATORS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(115960, -174659, -960);
|
||||
break;
|
||||
}
|
||||
case "30601-02.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30650-02.htm":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 260000, 6000);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, RING_NOVICE);
|
||||
giveItems(player, EARRING_NOVICE);
|
||||
giveItems(player, NECKLACE_NOVICE);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 20)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to return to Priest of the Earth Gerald.", 5000));
|
||||
giveItems(killer, SOE_TO_GERAILD);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.KILL_WOLVES_AND_BEARDED_KELTIRS_2.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30601-01.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case NEWBIE_GUIDE:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30601-02.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GERALD:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30650.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == NEWBIE_GUIDE)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
<html><body>Newbie Guide:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 2-20 levels).
|
||||
</body></html>
|
@ -0,0 +1,14 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Armor<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Warrior(Humans)<br1>
|
||||
Knight(Humans)<br1>
|
||||
Elven Knight(Elves)<br1>
|
||||
Palus Knight(Dark Elves)<br1>
|
||||
Orc Raider(Orcs)<br1>
|
||||
Scavenger(Dwarves)<br1>
|
||||
Artisan(Dwarves)<br1>
|
||||
Trooper(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction HeavyArmor.html">Receive (Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction 30332.html">Back</Button>
|
||||
</body></html>
|
@ -0,0 +1,12 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Outfit<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Rogue(Humans)<br1>
|
||||
Elven Scout(Elves)<br1>
|
||||
Assassin(Dark Elves)<br1>
|
||||
Orc Monk(Orcs)<br1>
|
||||
Soul Finder(Jin Kamael))<br1>
|
||||
Warder(Jin Kamael)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction LightArmor.html">Receive (Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction 30332.html">Back</Button>
|
||||
</body></html>
|
@ -0,0 +1,13 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
If you want to transfer to the following classes, I recommend Moonshadow Doublet<br><br>
|
||||
[Recommended Classes]<br>
|
||||
Wizard(Humans)<br1>
|
||||
Cleric(Humans)<br1>
|
||||
Elven Wizard(Elves)<br1>
|
||||
Oracle(Elves)<br1>
|
||||
Dark Wizard(Dark Elves)<br1>
|
||||
Shillien Oracle(Dark Elves)<br1>
|
||||
Orc Shaman(Orcs)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction Robe.html">Receive (Robe) Moonshadow Double Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction 30332.html">Back</Button>
|
||||
</body></html>
|
@ -0,0 +1,9 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You came from Dwarven Village?<br>
|
||||
Oh, you brought Tarantulas Venom Sac.<br1>
|
||||
One, two, three, four... Hm. 30. Great work.<br1>
|
||||
Here is the reward. I told Priest Gerald about. Pick the one you need.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction 30332-01.html">(Heavy Armor) Moonshadow Armor Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction 30332-02.html">(Light Armor) Moonshadow Outfit Set</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction 30332-03.html">(Robe Armor) Moonshadow Double Set</Button>
|
||||
</body></html>
|
@ -0,0 +1,7 @@
|
||||
<html><body>Priest of the Earth Gerald:<br>
|
||||
Good thining.<br>
|
||||
The venom is the Venom Sacs turns quickly, so take them directly to Captain Bathis. He will pay you for your work.<br>
|
||||
Now you should head out to the hunting ground.<br1>
|
||||
Please let me know if you are ready.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction TELEPORT_TO_HUNTING_GROUND">Im ready.</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Priest of the Earth Gerald:<br>
|
||||
I heard that Captain Bathis is looking for Tarantulas Venom Sacs. I heard something about Maraku Werewolves, but Im not sure about details.<br>
|
||||
He said he needed about 30. Would you like to give it a try?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10990_PoisonExtraction 30650-01.html">"I will do it"</Button>
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Armor.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Ourfit.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,315 @@
|
||||
/*
|
||||
* 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.Q10990_PoisonExtraction;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.CategoryData;
|
||||
import org.l2jmobius.gameserver.enums.CategoryType;
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
|
||||
|
||||
/**
|
||||
* Poison Extraction (10990)
|
||||
* @author RobikBobik
|
||||
* @Notee: Based on NA server September 2019
|
||||
*/
|
||||
public class Q10990_PoisonExtraction extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int GERALD = 30650;
|
||||
private static final int CAPTAIN_BATHIS = 30332;
|
||||
// Monsters
|
||||
private static final int HUNTER_TARANTULA = 20403;
|
||||
private static final int PLUNDER_TARANTULA = 20508;
|
||||
// Items
|
||||
private static final ItemHolder SOE_TO_CAPTAIN_BATHIS = new ItemHolder(91651, 1);
|
||||
private static final ItemHolder SOE_NOVICE = new ItemHolder(10650, 20);
|
||||
private static final ItemHolder SPIRIT_ORE = new ItemHolder(3031, 50);
|
||||
private static final ItemHolder HP_POTS = new ItemHolder(91912, 50); // TODO: Finish Item
|
||||
private static final ItemHolder RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT = new ItemHolder(91840, 1);
|
||||
// HELMET FOR ALL ARMORS
|
||||
private static final ItemHolder MOON_HELMET = new ItemHolder(7850, 1);
|
||||
// HEAVY
|
||||
private static final ItemHolder MOON_ARMOR = new ItemHolder(7851, 1);
|
||||
private static final ItemHolder MOON_GAUNTLETS = new ItemHolder(7852, 1);
|
||||
private static final ItemHolder MOON_BOOTS = new ItemHolder(7853, 1);
|
||||
// LIGHT
|
||||
private static final ItemHolder MOON_SHELL = new ItemHolder(7854, 1);
|
||||
private static final ItemHolder MOON_LEATHER_GLOVES = new ItemHolder(7855, 1);
|
||||
private static final ItemHolder MOON_SHOES = new ItemHolder(7856, 1);
|
||||
// ROBE
|
||||
private static final ItemHolder MOON_CAPE = new ItemHolder(7857, 1);
|
||||
private static final ItemHolder MOON_SILK = new ItemHolder(7858, 1);
|
||||
private static final ItemHolder MOON_SANDALS = new ItemHolder(7859, 1);
|
||||
// Misc
|
||||
private static final int MAX_LEVEL = 20;
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
|
||||
public Q10990_PoisonExtraction()
|
||||
{
|
||||
super(10990);
|
||||
addStartNpc(GERALD);
|
||||
addTalkId(GERALD, CAPTAIN_BATHIS);
|
||||
addKillId(HUNTER_TARANTULA, PLUNDER_TARANTULA);
|
||||
addCondMaxLevel(MAX_LEVEL, "no_lvl.html");
|
||||
setQuestNameNpcStringId(NpcStringId.LV_15_20_POISON_EXTRACTION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkPartyMember(Player member, Npc npc)
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
return ((qs != null) && qs.isStarted());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30650-01.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-01.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-02.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332-03.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "30332.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "TELEPORT_TO_HUNTING_GROUND":
|
||||
{
|
||||
player.teleToLocation(135382, -207694, -3704);
|
||||
break;
|
||||
}
|
||||
case "NEXT_QUEST":
|
||||
{
|
||||
htmltext = "30650.htm";
|
||||
break;
|
||||
}
|
||||
case "HeavyArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_ARMOR);
|
||||
giveItems(player, MOON_GAUNTLETS);
|
||||
giveItems(player, MOON_BOOTS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "LightArmor.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_SHELL);
|
||||
giveItems(player, MOON_LEATHER_GLOVES);
|
||||
giveItems(player, MOON_SHOES);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "Robe.html":
|
||||
{
|
||||
if (qs.isStarted())
|
||||
{
|
||||
addExpAndSp(player, 600000, 13500);
|
||||
giveItems(player, SOE_NOVICE);
|
||||
giveItems(player, SPIRIT_ORE);
|
||||
giveItems(player, HP_POTS);
|
||||
giveItems(player, RICE_CAKE_OF_FLAMING_FIGHTING_SPIRIT_EVENT);
|
||||
giveItems(player, MOON_HELMET);
|
||||
giveItems(player, MOON_CAPE);
|
||||
giveItems(player, MOON_SILK);
|
||||
giveItems(player, MOON_SANDALS);
|
||||
if (CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
showOnScreenMsg(player, NpcStringId.YOU_VE_FINISHED_THE_TUTORIAL_NTAKE_YOUR_1ST_CLASS_TRANSFER_AND_COMPLETE_YOUR_TRAINING_WITH_BATHIS_TO_BECOME_STRONGER, ExShowScreenMessage.TOP_CENTER, 10000);
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final QuestState qs = getQuestState(killer, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
|
||||
if (killCount < 30)
|
||||
{
|
||||
qs.set(KILL_COUNT_VAR, killCount);
|
||||
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
sendNpcLogList(killer);
|
||||
}
|
||||
else
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
qs.unset(KILL_COUNT_VAR);
|
||||
killer.sendPacket(new ExShowScreenMessage("You hunted all monsters.#Use the Scroll of Escape in you inventory to go to Captain Bathis in the Town of Gludio.", 5000));
|
||||
giveItems(killer, SOE_TO_CAPTAIN_BATHIS);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<NpcLogListHolder> getNpcLogList(Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && qs.isCond(1))
|
||||
{
|
||||
final Set<NpcLogListHolder> holder = new HashSet<>();
|
||||
holder.add(new NpcLogListHolder(NpcStringId.LV_15_20_POISON_EXTRACTION_IN_PROGRESS.getId(), true, qs.getInt(KILL_COUNT_VAR)));
|
||||
return holder;
|
||||
}
|
||||
return super.getNpcLogList(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
htmltext = "30650.htm";
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case GERALD:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "30650-01.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CAPTAIN_BATHIS:
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "30332.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
if (npc.getId() == GERALD)
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerLogin(OnPlayerLogin event)
|
||||
{
|
||||
final Player player = event.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CategoryData.getInstance().isInCategory(CategoryType.FIRST_CLASS_GROUP, player.getClassId().getId()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (Config.DISABLE_TUTORIAL || ((qs != null) && qs.isCompleted()))
|
||||
{
|
||||
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<html><body>Captain Bathis:<br>
|
||||
You picked Moonshadow Robe.<br><br>
|
||||
You are getting stronger very quickly, so if you have reached <font color=LEVEL>level 20</font>, go to the village and start your <font color=LEVEL>class transfer</font>. You will get even stronger.<br>
|
||||
I ve prepared a few things for you. Hope that the <font color=LEVEL>HP Potions</font>, and the <font color=LEVEL>Rice Cake of Flaming Fighting Spirit</font> are useful.
|
||||
</body></html>
|
@ -0,0 +1,3 @@
|
||||
<html><body>Priest of the Earth Gerald:<br>
|
||||
You do not meet the requirements of the quest (Quest is only available to 15-20 levels).
|
||||
</body></html>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user