Exalted quest updates.

Contributed by CostyKiller.
This commit is contained in:
MobiusDevelopment
2020-10-11 05:35:55 +00:00
parent 496912f2d2
commit 4f0d9189e3
592 changed files with 8940 additions and 1794 deletions

View File

@@ -116,8 +116,6 @@
1900 Storm Isle - Secret Spot
1901 Storm Isle - Furtive Deal
10298 Wasteland Queen
10514 New Path to Glory
10515 New Way for Pride
10554 To Weaken the Giants
10555 To Weaken the Giants
10556 To Weaken the Giants
@@ -138,12 +136,6 @@
10848 Trials before the Battle
10853 To Weaken the Giants
10854 To Seize the Fortress
10874 Against the New Enemy
10875 For Reputation
10877 Break Through Crisis
10881 For the Pride
10882 Victory Collection
10883 Immortal Honor
10885 Savior's Path - Discovery
10886 Savior's Path - Search the Refinery
10887 Savior's Path - Demons and Atelia

View File

@@ -0,0 +1,4 @@
<html><body>High Priest Sylvain:<br>
You are not ready to be called by me. Come back when you are ready.<br>
(The Exalted, Reaching Another Level quest is in progress and level 103+ and Lionel Hunter Mission List - 4 should be in the inventory.)
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>High Priest Sylvain:<br>
I've been planning for a long time! I mean... well, I belive one who wants to lead the world... must pass a very difficult test.<br>
If I had a chance to give such test, I'd make an unimaginably difficult test. That's what I thought.<br>
Are you listening to me?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10514_NewPathToGlory 30070-02.htm">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>High Priest Sylvain:<br>
Lionel Hunter said that you want to reach another level.<br>
I was waiting for someone to complete a mission to substitute all the missions from the other people...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10514_NewPathToGlory 30070-03.htm">"Ask what mission."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>High Priest Sylvain:<br>
Then, I have the chance I'd always dreamed of! Hahaha. Oops, I'm sorry. I'm just so happy to have this chance.<br>
If anyone wants to take my test, I'll put him through the most terrible time of their lives... If you're not ready, you'd better leave now. Otherwise, you'll die before your time.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10514_NewPathToGlory 30070-04.htm">"I will take the test."</Button>
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>High Priest Sylvain:<br>
Eh? Are you sure? Oh... well, you might be qualified to undertake my mission.<br>
Actually, it's not that complicated. You only need to grow strong enough to defeat unknown enemies.<br>
How? That's simple.<br>
Hunting. Will you accept the mission?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10514_NewPathToGlory 30070-05.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>High Priest Sylvain:<br>
Listen carefully, I won't explain this again. Hunt monsters in <font color="LEVEL">Atelia Refinery, Ivory Tower Crater, Alligator Island and Tanor Canyon</font> and collect 80.000 <font color="LEVEL">Proof of Reputation</font>. What do you say? It's quite hard, right? Hahahaha!!!<br>
Come to me after completing the mission to get a certificate.<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>High Priest Sylvain:<br>
You did not get what I asked for.<br>
Hunt monsters in <font color="LEVEL">Atelia Refinery, Ivory Tower Crater, Alligator Island and Tanor Canyon</font> and collect 80.000 <font color="LEVEL">Proof of Reputation</font>.<br>
Come to me after completing the mission to get a certificate.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>High Priest Sylvain:<br>
Did you get 80.000 <font color="LEVEL">Proof of Reputation</font>?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10514_NewPathToGlory 30070-08.html">"Yes, here."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>High Priest Sylvain:<br>
Great work. I hope you you never forget the sadness of those who have to suffer because of the long battles against the monsters.
</body></html>

View File

@@ -0,0 +1,226 @@
/*
* 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.Q10514_NewPathToGlory;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
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.model.quest.State;
import org.l2jmobius.gameserver.util.Util;
import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel;
/**
* New Path To Glory (10514)
* @URL https://l2wiki.com/New_Path_to_Glory
* @author CostyKiller
*/
public class Q10514_NewPathToGlory extends Quest
{
// NPC
private static final int HIGH_PRIEST_SYLVAIN = 30070;
private static final int[] MONSTERS =
{
// Atelia Refinery
24150, // Devil Warrior
24149, // Devil Nightmare
24153, // Devil Varos
24152, // Devil Sinist
24151, // Devil Guardian
24144, // Death Rogue
24145, // Death Shooter
24146, // Death Warrior
24147, // Death Sorcerer
24148, // Death Pondus
24155, // Demonic Warrior
24154, // Demonic Wizard
24158, // Demonic Weiss
24157, // Demonic Keras
24156, // Demonic Archer
// Ivory Tower Crater
24421, // Stone Gargoyle
24422, // Stone Golem
24423, // Monster Eye
24424, // Gargoyle Hunter
24425, // Steel Golem
24426, // Stone Cube
// Alligator Island
24372, // Crokian Lad
24373, // Dailaon Lad
24375, // Farhite Lad
24376, // Nos Lad
24377, // Swamp Tribe
24378, // Swamp Alligator
24379, // Swamp Warrior
// Tanor Canyon
20936, // Tanor Silenos -->
20937, // Tanor Silenos Solider -->
20938, // Tanor Silenos Scout -->
20939, // Tanor Silenos Warrior -->
20941, // Tanor Silenos Chieftain -->
20942, // Nightmare Guide -->
20943, // Nightmare Watchman -->
20944 // Nightmare Lord -->
};
// Items
private static final int PROOF_OF_REPUTATION = 80826;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_4 = new ItemHolder(47829, 1);
// Rewards
private static final int SYLVAIN_CERTIFICATE = 80828;
// Misc
private static final int MIN_LEVEL = 103;
private static final int PROOF_OF_REPUTATION_NEEDED = 80000;
public Q10514_NewPathToGlory()
{
super(10514);
addStartNpc(HIGH_PRIEST_SYLVAIN);
addTalkId(HIGH_PRIEST_SYLVAIN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "30070-00.html");
addCondStartedQuest(Q10873_ExaltedReachingAnotherLevel.class.getSimpleName(), "30070-00.html");
registerQuestItems(PROOF_OF_REPUTATION);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "30070-02.htm":
case "30070-03.htm":
case "30070-04.htm":
{
htmltext = event;
break;
}
case "30070-05.html":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_4))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "30070-08.html":
{
if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_REPUTATION) >= PROOF_OF_REPUTATION_NEEDED))
{
takeItems(player, PROOF_OF_REPUTATION, PROOF_OF_REPUTATION_NEEDED);
giveItems(player, SYLVAIN_CERTIFICATE, 1);
addExpAndSp(player, 3480527972686L, 0);
qs.exitQuest(false, true);
final Quest mainQ = QuestManager.getInstance().getQuest(Q10873_ExaltedReachingAnotherLevel.class.getSimpleName());
if (mainQ != null)
{
mainQ.notifyEvent("SUBQUEST_FINISHED_NOTIFY", npc, player);
}
htmltext = event;
}
else
{
htmltext = getNoQuestLevelRewardMsg(player);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
String htmltext = getNoQuestMsg(player);
final QuestState qs = getQuestState(player, true);
switch (qs.getState())
{
case State.CREATED:
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_4))
{
htmltext = "30070-01.htm";
}
else
{
htmltext = "30070-00.htm";
}
break;
}
case State.STARTED:
{
if (getQuestItemsCount(player, PROOF_OF_REPUTATION) >= PROOF_OF_REPUTATION_NEEDED)
{
htmltext = "30070-07.html";
}
else
{
htmltext = "30070-06.html";
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public void actionForEachPlayer(PlayerInstance player, Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, player, false))
{
if ((getQuestItemsCount(player, PROOF_OF_REPUTATION) < PROOF_OF_REPUTATION_NEEDED) && (getRandom(100) < 90))
{
giveItems(player, PROOF_OF_REPUTATION, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
if ((getQuestItemsCount(player, PROOF_OF_REPUTATION) >= PROOF_OF_REPUTATION_NEEDED) && (player.getLevel() >= MIN_LEVEL))
{
qs.setCond(2, true);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
executeForEachPlayer(killer, npc, isSummon, true, false);
return super.onKill(npc, killer, isSummon);
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Cardinal Seresin:<br>
I do not believe our paths are meant to cross here. Perhaps later down the road.<br>
(Only characters above Lv. 104 and The Exalted, Guide to Power quest should be in progress..)
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Cardinal Seresin:<br>
Lionel Hunter sent you? He told me about a soldier who will come to test and qualify for the <font color="LEVEL">Guide of Power</font> who is supposed to save the world from darkness.<br>
I won't bore you with a long story. In short, he told me to test the adventurers and give certificates to only those who pass.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10515_NewWayForPride 30657-02.htm">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Cardinal Seresin:<br>
I was surprised that Lionel accepted the offer so readily. He's not a person who takes on troublesome work. I was wondering what he had in mind... Now I'm doing his job.<br>
I thought is better for you to know what happened so far.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10515_NewWayForPride 30657-03.htm">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Cardinal Seresin:<br>
I thought that <font color="LEVEL">hunting</font> would be the simplest way of proving oneself capable of guiding the power, and you are certainly qualified to take the test.<br>
However, it doesn't mean that you can finish it successfully. Think carefully before undertaking the mission.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10515_NewWayForPride 30657-04.htm">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Cardinal Seresin:<br>
Eh? Are you sure? Oh... well, you might be qualified to undertake my mission.<br>
Actually, it's not that complicated. You only need to grow strong enough to defeat unknown enemies.<br>
Will you accept the mission?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10515_NewWayForPride 30657-05.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Cardinal Seresin:<br>
Listen carefully, I won't explain this again. Hunt monsters in <font color="LEVEL">Atelia Refinery, Ivory Tower Crater, Alligator Island and Tanor Canyon</font> and collect 80.000 <font color="LEVEL">Proof of Reputation</font>. What do you say? It's quite hard, right? Hahahaha!!!<br>
Come to me after completing the mission to get a certificate.<br>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Cardinal Seresin:<br>
You did not get what I asked for.<br>
Hunt monsters in <font color="LEVEL">Atelia Refinery, Ivory Tower Crater, Alligator Island and Tanor Canyon</font> and collect 80.000 <font color="LEVEL">Proof of Reputation</font>.<br>
Come to me after completing the mission to get a certificate.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Cardinal Seresin:<br>
Did you get 80.000 <font color="LEVEL">Proof of Reputation</font>?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10515_NewWayForPride 30657-08.html">"Yes, here."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Cardinal Seresin:<br>
Great work. I hope you you never forget the sadness of those who have to suffer because of the long battles against the monsters.
</body></html>

View File

@@ -0,0 +1,221 @@
/*
* 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.Q10515_NewWayForPride;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
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.model.quest.State;
import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
/**
* New Way For Pride (10515)
* @URL https://l2wiki.com/New_Way_for_Pride
* @author CostyKiller
*/
public class Q10515_NewWayForPride extends Quest
{
// NPCs
private static final int CARDINAL_SERESIN = 30657;
// Items
private static final int SERESIN_CERTIFICATE = 80829;
private static final int PROOF_OF_REPUTATION = 80826;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_5 = new ItemHolder(47834, 1);
// Monsters
private static final int[] MONSTERS =
{
// Atelia Refinery
24150, // Devil Warrior
24149, // Devil Nightmare
24153, // Devil Varos
24152, // Devil Sinist
24151, // Devil Guardian
24144, // Death Rogue
24145, // Death Shooter
24146, // Death Warrior
24147, // Death Sorcerer
24148, // Death Pondus
24155, // Demonic Warrior
24154, // Demonic Wizard
24158, // Demonic Weiss
24157, // Demonic Keras
24156, // Demonic Archer
// Ivory Tower Crater
24421, // Stone Gargoyle
24422, // Stone Golem
24423, // Monster Eye
24424, // Gargoyle Hunter
24425, // Steel Golem
24426, // Stone Cube
// Alligator Island
24372, // Crokian Lad
24373, // Dailaon Lad
24375, // Farhite Lad
24376, // Nos Lad
24377, // Swamp Tribe
24378, // Swamp Alligator
24379, // Swamp Warrior
// Tanor Canyon
20936, // Tanor Silenos
20937, // Tanor Silenos Solider
20938, // Tanor Silenos Scout
20939, // Tanor Silenos Warrior
20941, // Tanor Silenos Chieftain
20942, // Nightmare Guide
20943, // Nightmare Watchman
20944, // Nightmare Lord
};
// Misc
private static final int MIN_LEVEL = 104;
private static final int PROOF_OF_REPUTATION_NEEDED = 80000;
public Q10515_NewWayForPride()
{
super(10515);
addStartNpc(CARDINAL_SERESIN);
addTalkId(CARDINAL_SERESIN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "30657-00.html");
addCondStartedQuest(Q10879_ExaltedGuideToPower.class.getSimpleName(), "30657-00.html");
registerQuestItems(PROOF_OF_REPUTATION);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "30657-02.htm":
case "30657-03.htm":
case "30657-04.htm":
{
htmltext = event;
break;
}
case "30657-05.html":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_5))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "30657-08.html":
{
if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_REPUTATION) >= PROOF_OF_REPUTATION_NEEDED))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_REPUTATION, PROOF_OF_REPUTATION_NEEDED);
giveItems(player, SERESIN_CERTIFICATE, 1);
addExpAndSp(player, 3480527972686L, 0);
qs.exitQuest(false, true);
final Quest mainQ = QuestManager.getInstance().getQuest(Q10879_ExaltedGuideToPower.class.getSimpleName());
if (mainQ != null)
{
mainQ.notifyEvent("SUBQUEST_FINISHED_NOTIFY", npc, player);
}
htmltext = event;
}
else
{
htmltext = getNoQuestLevelRewardMsg(player);
}
break;
}
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if ((npc.getId() == CARDINAL_SERESIN) && (hasItem(player, LIONEL_HUNTERS_LIST_PART_5)))
{
htmltext = "30657-01.htm";
}
else
{
htmltext = "30657-00.html";
}
break;
}
case State.STARTED:
{
htmltext = "30657-05.html";
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance player, boolean isSummon)
{
executeForEachPlayer(player, npc, isSummon, true, false);
return super.onKill(npc, player, isSummon);
}
@Override
public void actionForEachPlayer(PlayerInstance player, Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE) && CommonUtil.contains(MONSTERS, npc.getId()))
{
giveItems(player, PROOF_OF_REPUTATION, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_REPUTATION) >= PROOF_OF_REPUTATION_NEEDED)
{
qs.setCond(2, true);
}
}
}
}

View File

@@ -1,6 +1,6 @@
<html><body>Eva's Knight Lionel Hunter:<br>
I'll be seeing whether you have what it takes to become stronger.<br>
First, you must prove that you are capable of using <font color="LEVEL">16 Ability Points</font>. Learn a skill with Ability Points and prove your strength.<br>
Then, pass the tests set by the following people and bring back certificates. The people who will test you are <font color="LEVEL">Verdure Elder Elikia</font> in <font color="LEVEL">Heine</font>, the <font color="LEVEL">Mysterious Butler</font>, <font color="LEVEL">Trader Galladucci</font> in the <font color="LEVEL">Town of Giran</font>, and <font color="LEVEL">Sir Eric Rodemai</font> in the <font color="LEVEL">Town of Aden</font>.<br>
Then, pass the tests set by the following people and bring back certificates. The people who will test you are <font color="LEVEL">Verdure Elder Elikia</font> in <font color="LEVEL">Heine</font>, the <font color="LEVEL">Mysterious Butler</font>, <font color="LEVEL">Trader Galladucci</font> in the <font color="LEVEL">Town of Giran</font>, and <font color="LEVEL">Sir Eric Rodemai</font> in the <font color="LEVEL">Town of Aden</font>. <br><br><br>
Go talk to them to find out what their tests are about. I'll be waiting for you to return with the certificates. If you forget who you must go to, refer to the guide I'll be giving you.
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Still? I'll explain again, so remember it.<br>
Use <font color="LEVEL">16 Ability Points</font> to learn a skill and prove your strength. After that, pass the tests of the following people and bring back their certificates.<br>
The first people who will test you are <font color="LEVEL">Verdure Elder Elikia</font> in <font color="LEVEL">Heine</font>, the <font color="LEVEL">Mysterious Butler</font>, <font color="LEVEL">Trader Galladucci</font> in the <font color="LEVEL">Town of Giran</font>, and <font color="LEVEL">Sir Eric Rodemai</font> in the <font color="LEVEL">Town of Aden</font>.<br>
The first people who will test you are <font color="LEVEL">Verdure Elder Elikia</font> in <font color="LEVEL">Heine</font>, the <font color="LEVEL">Mysterious Butler</font>, <font color="LEVEL">Trader Galladucci</font> in the <font color="LEVEL">Town of Giran</font>, and <font color="LEVEL">Sir Eric Rodemai</font> in the <font color="LEVEL">Town of Aden</font>. <br><br><br>
Go talk to them to find out what their tests are about. I'll be waiting for you to return with the certificates.
</body></html>

View File

@@ -30,7 +30,7 @@ import quests.Q10811_ExaltedOneWhoFacesTheLimit.Q10811_ExaltedOneWhoFacesTheLimi
/**
* Facing Sadness (10812)
* @author Stayway
* @author Stayway, CostyKiller
*/
public class Q10812_FacingSadness extends Quest
{
@@ -100,6 +100,7 @@ public class Q10812_FacingSadness extends Quest
// Misc
private static final int MIN_LEVEL = 99;
private static final int PROOF_OF_DISPOSAL_NEEDED = 8000;
public Q10812_FacingSadness()
{
@@ -145,7 +146,7 @@ public class Q10812_FacingSadness extends Quest
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_DISPOSAL, -1);
takeItems(player, PROOF_OF_DISPOSAL, PROOF_OF_DISPOSAL_NEEDED);
giveItems(player, ELIKIA_CERTIFICATE, 1);
addExpAndSp(player, 0, 498204432);
qs.exitQuest(false, true);
@@ -193,7 +194,7 @@ public class Q10812_FacingSadness extends Quest
{
htmltext = "31620-05.html";
}
else if (qs.isCond(2))
else if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_DISPOSAL) >= PROOF_OF_DISPOSAL_NEEDED))
{
htmltext = "31620-07.html";
}
@@ -221,12 +222,12 @@ public class Q10812_FacingSadness extends Quest
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
if (getQuestItemsCount(player, PROOF_OF_DISPOSAL) < 8000)
if (getQuestItemsCount(player, PROOF_OF_DISPOSAL) < PROOF_OF_DISPOSAL_NEEDED)
{
giveItems(player, PROOF_OF_DISPOSAL, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
if (getQuestItemsCount(player, PROOF_OF_DISPOSAL) >= 8000)
if (getQuestItemsCount(player, PROOF_OF_DISPOSAL) >= PROOF_OF_DISPOSAL_NEEDED)
{
qs.setCond(2, true);
}

View File

@@ -1,4 +1,4 @@
<html><body>Mysterious Butler:<br>
After a long discussion with Lionel, I've decided that I'll find someone who can prove their strength by constantly participating in the <font color="LEVEL">Ceremony of Chaos</font> and the <font color="LEVEL">Olympiad</font>.<br>
In order to keep track of your performance, you'll be getting a <font color="LEVEL">Proof of Battle</font> whenever you participate in the <font color="LEVEL">Ceremony of Chaos</font> or the <font color="LEVEL">Olympiad</font>.<br>
If you can get <font color="LEVEL">80 Proof of Battle</font>, you'll prove that you are worthy. Not too hard, right?</body></html>
If you can get <font color="LEVEL">10 Proof of Battle</font>, you'll prove that you are worthy. Not too hard, right?</body></html>

View File

@@ -1,4 +1,4 @@
<html><body>Mysterious Butler:<br>
Oh, are you done? Just as I expected. How was it? Did you get the 80 Proof of Battle?<br>
Oh, are you done? Just as I expected. How was it? Did you get the 10 Proof of Battle?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10813_ForGlory 33685-06.html">"Yes."</Button>
</body></html>

View File

@@ -1,3 +1,3 @@
<html><body>Mysterious Butler:<br>
When you participate in the <font color="LEVEL">Ceremony of Chaos</font> or the <font color="LEVEL">Olympiad</font>, you'll be able to to get <font color="LEVEL">Proof of Battle.</font> If you can get <font color="LEVEL">80</font> of these, I'll recognize your strengh.
When you participate in the <font color="LEVEL">Ceremony of Chaos</font> or the <font color="LEVEL">Olympiad</font>, you'll be able to to get <font color="LEVEL">Proof of Battle.</font> If you can get <font color="LEVEL">10</font> of these, I'll recognize your strengh.
</body></html>

View File

@@ -38,14 +38,15 @@ import quests.Q10811_ExaltedOneWhoFacesTheLimit.Q10811_ExaltedOneWhoFacesTheLimi
*/
public class Q10813_ForGlory extends Quest
{
// Npc
// NPC
private static final int MYSTERIOUS_BUTLER = 33685;
// Items
private static final int PROOF_OF_BATTLE = 45872;
private static final int PROOF_OF_BATTLE_1 = 45872;
private static final int MYSTERIOUS_BUTLER_CERTIFICATE = 45624;
private static final int BATTLE_QUIKCK_HEALING_POTION = 45945;
private static final int BATTLE_QUICK_HEALING_POTION = 45945;
// Misc
private static final int MIN_LEVEL = 99;
private static final int PROOF_OF_BATTLE_1_NEEDED = 10;
public Q10813_ForGlory()
{
@@ -54,7 +55,7 @@ public class Q10813_ForGlory extends Quest
addTalkId(MYSTERIOUS_BUTLER);
addCondMinLevel(MIN_LEVEL, "33685-09.htm");
addCondStartedQuest(Q10811_ExaltedOneWhoFacesTheLimit.class.getSimpleName(), "33685-07.htm");
registerQuestItems(PROOF_OF_BATTLE);
registerQuestItems(PROOF_OF_BATTLE_1);
}
@Override
@@ -85,10 +86,10 @@ public class Q10813_ForGlory extends Quest
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
if ((player.getLevel() >= MIN_LEVEL) && (getQuestItemsCount(player, PROOF_OF_BATTLE_1) >= PROOF_OF_BATTLE_1_NEEDED))
{
takeItems(player, PROOF_OF_BATTLE, -1);
giveItems(player, BATTLE_QUIKCK_HEALING_POTION, 120);
takeItems(player, PROOF_OF_BATTLE_1, PROOF_OF_BATTLE_1_NEEDED);
giveItems(player, BATTLE_QUICK_HEALING_POTION, 120);
giveItems(player, MYSTERIOUS_BUTLER_CERTIFICATE, 1);
qs.exitQuest(false, true);
@@ -126,7 +127,7 @@ public class Q10813_ForGlory extends Quest
{
htmltext = "33685-08.html";
}
else if (qs.isCond(2))
else if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_BATTLE_1) >= PROOF_OF_BATTLE_1_NEEDED))
{
htmltext = "33685-05.html";
}
@@ -148,9 +149,9 @@ public class Q10813_ForGlory extends Quest
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1))
{
giveItems(player, PROOF_OF_BATTLE, 1);
giveItems(player, PROOF_OF_BATTLE_1, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_BATTLE) >= 80)
if (getQuestItemsCount(player, PROOF_OF_BATTLE_1) >= PROOF_OF_BATTLE_1_NEEDED)
{
qs.setCond(2, true);
}

View File

@@ -148,7 +148,8 @@ public class Q10814_BefittingOfTheStatus extends Quest
takeItems(player, itemId, 1);
if (qs.getCond() < 6)
{
qs.setCond(qs.getCond() + 1);
// qs.setCond(qs.getCond() + 1);
qs.setCond(6);
}
switch (qs.getCond())

View File

@@ -1,5 +1,4 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Have you completed all the tests?<br>
Congratulations on passing them all. Did you bring back all the certificates?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10817_ExaltedOneWhoOvercomesTheLimit 33907-08.html">"Yes, here."</Button>
You are not ready to be called by me. Come back when you are ready.<br>
(Only Noblesse characters Lv. 99 or above can perform this quest.)
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
You are on track to overcoming your limit. Congratulations on passing the second test.<br>
Don't get complacent, though. You'll soon be taking the third test, once you are ready for it.<br>
I'll call you when you are ready.
Have you completed all the tests?<br>
Congratulations on passing them all. Did you bring back all the certificates?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10817_ExaltedOneWhoOvercomesTheLimit 33907-09.html">"Yes, here."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
You are on track to overcoming your limit. Congratulations on passing the second test.<br>
Don't get complacent, though. You'll soon be taking the third test, once you are ready for it.<br>
I'll call you when you are ready.
</body></html>

View File

@@ -84,7 +84,7 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
}
break;
}
case "33907-08.html":
case "33907-09.html":
{
if (hasQuestItems(player, DAICHIR_SERTIFICATE, OLYMPIAD_MANAGER_CERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
@@ -116,7 +116,7 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
{
if (hasQuestItems(player, DAICHIR_SERTIFICATE, OLYMPIAD_MANAGER_CERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
htmltext = "33907-07.html";
htmltext = "33907-08.html";
}
else
{

View File

@@ -1,6 +1,8 @@
<html><body>Head Priest of the Earth Daichir:<br>
Defeat the monsters that are threatening the safety of this world. I'll tell you which ones to defeat.<br>
First, you must defeat <font color="LEVEL">Istina, Octavis, and Tauti</font> in an <font color="LEVEL">Epic Battle</font>. You must also defeat <font color="LEVEL">Beleth</font> and <font color="LEVEL">Earth Wyrm Trasken</font>, and bring a <font color="LEVEL">Dark Soul Stone</font>.<br>
First, you must defeat <font color="LEVEL">Istina, Octavis, Tauti and Ekimus</font> in an <font color="LEVEL">Epic Battle</font>. You must also defeat <font color="LEVEL">Beleth</font> and <font color="LEVEL">Earth Wyrm Trasken</font>, and bring a <font color="LEVEL">Dark Soul Stone</font>.<br><br>
However, defeating Earth Wyrm Trasken is difficult. That's why I have another method. Would like to hear it?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10818_ConfrontingAGiantMonster 30537-06a.html">"What is it?"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10818_ConfrontingAGiantMonster 30537-06a.html">"Which is it?"</Button><br>
Or you can skip all this and hunt some easier monsters.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10818_ConfrontingAGiantMonster 30537-06b.html">"I'll choose this."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Head Priest of the Earth Daichir:<br>
Go defeat the monsters in <font color="LEVEL">Giant's Cave</font> and <font color="LEVEL">Enchanted Valley</font> and bring back 10.000 <font color="LEVEL">Proof of Resistance</font>.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Head Priest of the Earth Daichir:<br>
You did not get me 10.000 <font color="LEVEL">Proof of Resistance</font>.<br>
You must defeat the monsters in <font color="LEVEL">Giant's Cave</font> and <font color="LEVEL">Enchanted Valley</font> to obtain them.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Guide of Infinity Jaedin:<br>
<font color="LEVEL">TEMP FIX FOR EKIMUS RB KILL CHECK</font><br>
This will set your kill status to true on the quest until Seed of Infinity instance will be implemented.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Guide of Infinity Jaedin:<br>
<font color="LEVEL">TEMP FIX FOR EKIMUS RB KILL CHECK</font><br>
Your kill status is already true on the quest.<br>
</body></html>

View File

@@ -17,6 +17,7 @@
package quests.Q10818_ConfrontingAGiantMonster;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
@@ -29,38 +30,126 @@ import quests.Q10817_ExaltedOneWhoOvercomesTheLimit.Q10817_ExaltedOneWhoOvercome
/**
* Confronting a Giant Monster (10818)
* @URL https://l2wiki.com/Confronting_a_Giant_Monster
* @author Mobius
* @author Mobius, CostyKiller
*/
public class Q10818_ConfrontingAGiantMonster extends Quest
{
// NPC
// NPCs
private static final int DAICHIR = 30537;
private static final int JAEDIN = 33915;
// Monsters
private static final int ISTINA = 29196; // Extreme
private static final int OCTAVIS = 29212; // Extreme
private static final int TAUTI = 29233; // correct id?
private static final int TAUTI = 29237; // Extreme
private static final int EKIMUS = 29251; // correct id?
private static final int TRASKEN = 29197; // correct id?
private static final int VERIDAN = 25796;
private static final int KECHI = 25797;
private static final int MICHAELA = 25799;
private static final int[] MONSTERS =
{
// Giant's Cave Monsters
23727, // Shaqrima Bathus
23728, // Shaqrima Carcass -->
23729, // Shaqrima Kshana -->
23733, // Lesser Giant Warrior -->
23734, // Lesser Giant Wizard -->
23735, // Captive Familiar Spirit -->
23736, // Captive Hell Demon -->
23737, // Captive Succubus -->
23738, // Captive Phantom -->
23742, // Naia Bathus, Demons Foreman -->
23743, // Naia Karkus, Demons Foreman -->
23744, // Naia Kshana, Demons Foreman -->
23746, // Recovering Lesser Giant Warrior -->
23747, // Recovering Lesser Giant Wizard -->
23749, // Root of the Lesser Giant -->
23754, // Essence of the Lesser Giant -->
// Fairy Settlement Monsters
18972, // Treekin Defender Scout
18973, // Treekin Defender Experienced Scout
18974, // Centaur Archer Scout
18975, // Centaur Archer Experienced Scout
18976, // Beorning Berserker Scout
18977, // Beorning Berserker Experienced Scout
22863, // Fairy Warrior
22864, // Fairy Warrior Wicked
22865, // Fairy Warrior Mature
22866, // Fairy Warrior Imperfect
22867, // Fairy Warrior Violent
22868, // Fairy Warrior Brutal
22869, // Fairy Warrior Fully Enraged
22870, // Fairy Warrior Slightly Enraged
22871, // Fairy Rogue
22875, // Fairy Rogue Wicked
22873, // Fairy Rogue Mature
22874, // Fairy Rogue Imperfect
22875, // Fairy Rogue Violent
22876, // Fairy Rogue Brutal
22877, // Fairy Rogue Fully Enraged
22878, // Fairy Rogue Slightly Enraged
22879, // Fairy Knight
22880, // Fairy Knight Wicked
22881, // Fairy Knight Mature
22882, // Fairy Knight Imperfect
22883, // Fairy Knight Violent
22884, // Fairy Knight Brutal
22885, // Fairy Knight Fully Enraged
22886, // Fairy Knight Slightly Enraged
22887, // Satyr Wizard
22888, // Satyr Wizard Wicked
22889, // Satyr Wizard Mature
22890, // Satyr Wizard Imperfect
22891, // Satyr Wizard Violent
22892, // Satyr Wizard Brutal
22893, // Satyr Wizard Fully Enraged
22894, // Satyr Wizard Slightly Enraged
22895, // Satyr Summoner
22896, // Satyr Summoner Wicked
22897, // Satyr Summoner Mature
22898, // Satyr Summoner Imperfect
22899, // Satyr Summoner Violent
22900, // Satyr Summoner Brutal
22901, // Satyr Summoner Fully Enraged
22902, // Satyr Summoner Slightly Enraged
22903, // Satyr Witch
22904, // Satyr Witch Wicked
22905, // Satyr Witch Mature
22906, // Satyr Witch Imperfect
22907, // Satyr Witch Violent
22908, // Satyr Witch Brutal
22909, // Satyr Witch Fully Enraged
22910, // Satyr Witch Slightly Enraged
23041 // Pan Direm
};
// Items
private static final int DARK_SOUL_STONE = 46055;
private static final int OLYMPIAD_MANAGER_CERTIFICATE = 45629;
private static final int ISHUMA_CERTIFICATE = 45630;
private static final int SIR_KRISTOF_RODEMAI_CERTIFICATE = 45631;
private static final int PROOF_OF_RESISTANCE = 80823;
private static final int VERIDAN_SOUL_STONE = 46052;
private static final int KECHI_SOUL_STONE = 46053;
private static final int MICHAELA_SOUL_STONE = 46054;
// Rewards
private static final int EXP_AMOUNT = 542310795;
private static final int DAICHIR_SERTIFICATE = 45628;
private static final long EXP_AMOUNT = 193815839115L;
private static final int DAICHIR_CERTIFICATE = 45628;
// Misc
private static final int MIN_LEVEL = 99;
private static final int PROOF_OF_RESISTANCE_NEEDED = 10000;
public Q10818_ConfrontingAGiantMonster()
{
super(10818);
addStartNpc(DAICHIR);
addTalkId(DAICHIR);
addTalkId(DAICHIR, JAEDIN);
addKillId(ISTINA, OCTAVIS, TAUTI, EKIMUS, TRASKEN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "30537-02.html");
addCondStartedQuest(Q10817_ExaltedOneWhoOvercomesTheLimit.class.getSimpleName(), "30537-03.html");
registerQuestItems(DARK_SOUL_STONE);
registerQuestItems(DARK_SOUL_STONE, VERIDAN_SOUL_STONE, KECHI_SOUL_STONE, MICHAELA_SOUL_STONE);
}
@Override
@@ -77,17 +166,27 @@ public class Q10818_ConfrontingAGiantMonster extends Quest
{
case "30537-04.htm":
case "30537-05.htm":
case "30537-06.htm":
{
htmltext = event;
break;
}
case "30537-06a.html":
case "30537-06.htm":
{
if (qs.isCreated())
{
qs.startQuest();
}
qs.startQuest();
qs.set(Integer.toString(ISTINA), "false");
qs.set(Integer.toString(OCTAVIS), "false");
qs.set(Integer.toString(TAUTI), "false");
qs.set(Integer.toString(EKIMUS), "false");
htmltext = event;
break;
}
case "30537-06b.html":
{
qs.setCond(3);
qs.unset(Integer.toString(ISTINA));
qs.unset(Integer.toString(OCTAVIS));
qs.unset(Integer.toString(TAUTI));
qs.unset(Integer.toString(EKIMUS));
htmltext = event;
break;
}
@@ -95,7 +194,7 @@ public class Q10818_ConfrontingAGiantMonster extends Quest
{
if ((player.getLevel() >= MIN_LEVEL))
{
if (hasQuestItems(player, DARK_SOUL_STONE) && qs.get(Integer.toString(ISTINA)).equals("true") && qs.get(Integer.toString(OCTAVIS)).equals("true") && qs.get(Integer.toString(TAUTI)).equals("true") && qs.get(Integer.toString(EKIMUS)).equals("true"))
if ((qs.isCond(4) && (getQuestItemsCount(player, PROOF_OF_RESISTANCE) >= PROOF_OF_RESISTANCE_NEEDED)) || (qs.isCond(2) && hasQuestItems(player, DARK_SOUL_STONE) && (qs.get(Integer.toString(ISTINA)).equals("true") && qs.get(Integer.toString(OCTAVIS)).equals("true") && qs.get(Integer.toString(TAUTI)).equals("true") && qs.get(Integer.toString(EKIMUS)).equals("true"))))
{
if (hasQuestItems(player, OLYMPIAD_MANAGER_CERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE))
{
@@ -105,13 +204,16 @@ public class Q10818_ConfrontingAGiantMonster extends Quest
{
htmltext = event;
}
takeItems(player, DARK_SOUL_STONE, -1);
giveItems(player, DAICHIR_SERTIFICATE, 1);
if (qs.isCond(2))
{
takeItems(player, DARK_SOUL_STONE, 1);
qs.unset(Integer.toString(ISTINA));
qs.unset(Integer.toString(OCTAVIS));
qs.unset(Integer.toString(TAUTI));
qs.unset(Integer.toString(EKIMUS));
}
giveItems(player, DAICHIR_CERTIFICATE, 1);
addExpAndSp(player, EXP_AMOUNT, 0);
qs.unset(Integer.toString(ISTINA));
qs.unset(Integer.toString(OCTAVIS));
qs.unset(Integer.toString(TAUTI));
qs.unset(Integer.toString(EKIMUS));
qs.exitQuest(false, true);
}
}
@@ -139,15 +241,51 @@ public class Q10818_ConfrontingAGiantMonster extends Quest
}
case State.STARTED:
{
if (hasQuestItems(player, DARK_SOUL_STONE) && qs.get(Integer.toString(ISTINA)).equals("true") && qs.get(Integer.toString(OCTAVIS)).equals("true") && qs.get(Integer.toString(TAUTI)).equals("true") && qs.get(Integer.toString(EKIMUS)).equals("true"))
switch (npc.getId())
{
htmltext = "30537-08.html";
case DAICHIR:
{
if (qs.isCond(2))
{
if (hasQuestItems(player, DARK_SOUL_STONE) && (qs.get(Integer.toString(ISTINA)).equals("true") && qs.get(Integer.toString(OCTAVIS)).equals("true") && qs.get(Integer.toString(TAUTI)).equals("true") && qs.get(Integer.toString(EKIMUS)).equals("true")))
{
htmltext = "30537-08.html";
}
else
{
htmltext = "30537-07.html";
}
}
else if (qs.isCond(4))
{
if (getQuestItemsCount(player, PROOF_OF_RESISTANCE) >= PROOF_OF_RESISTANCE_NEEDED)
{
htmltext = "30537-08.html";
}
else
{
htmltext = "30537-07a.html";
}
}
break;
}
// XXX: Set Ekimus quest check until instance is done
case JAEDIN:
{
if (qs.get(Integer.toString(EKIMUS)).equals("false"))
{
htmltext = "33915-01.html";
qs.set(Integer.toString(EKIMUS), "true");
playSound(player, QuestSound.ITEMSOUND_QUEST_MIDDLE);
}
else
{
htmltext = "33915-02.html";
}
}
break;
}
else
{
htmltext = "30537-07.html";
}
break;
return htmltext;
}
case State.COMPLETED:
{
@@ -176,9 +314,38 @@ public class Q10818_ConfrontingAGiantMonster extends Quest
giveItems(player, DARK_SOUL_STONE, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else
else if (npc.getId() == VERIDAN)
{
giveItems(player, VERIDAN_SOUL_STONE, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else if (npc.getId() == KECHI)
{
giveItems(player, KECHI_SOUL_STONE, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else if (npc.getId() == MICHAELA)
{
giveItems(player, MICHAELA_SOUL_STONE, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
else if (CommonUtil.contains(MONSTERS, npc.getId()))
{
giveItems(player, PROOF_OF_RESISTANCE, 1);
if (getQuestItemsCount(player, PROOF_OF_RESISTANCE) >= PROOF_OF_RESISTANCE_NEEDED)
{
qs.setCond(4, true);
}
}
else if ((npc.getId() == ISTINA) || (npc.getId() == OCTAVIS) || (npc.getId() == TAUTI) || (npc.getId() == EKIMUS))
{
qs.set(Integer.toString(npc.getId()), "true");
notifyKill(npc, player, isSummon);
playSound(player, QuestSound.ITEMSOUND_QUEST_MIDDLE);
if ((qs.get(Integer.toString(ISTINA)).equals("true") && qs.get(Integer.toString(OCTAVIS)).equals("true") && qs.get(Integer.toString(TAUTI)).equals("true") && qs.get(Integer.toString(EKIMUS)).equals("true")))
{
qs.setCond(2);
}
}
}
}

View File

@@ -1,5 +1,5 @@
<html><body>Olympiad Manager:<br>
You'll get a <font color="LEVEL">Proof of Battle</font> when you participate in the <font color="LEVEL">Olympiad</font> or the <font color="LEVEL">Ceremony of Chaos</font>. Please bring <font color="LEVEL">100</font> of these.<br>
Bringing 100 Proof of Battle is my test.<br>
You'll get a <font color="LEVEL">Proof of Battle</font> when you participate in the <font color="LEVEL">Olympiad</font> or the <font color="LEVEL">Ceremony of Chaos</font>. Please bring <font color="LEVEL">20</font> of these.<br>
Bringing 20 Proof of Battle is my test.<br>
I'm sure as someone who Lionel has personally sent, you'll do great.
</body></html>

View File

@@ -1,4 +1,4 @@
<html><body>Olympiad Manager:<br>
I don't think you are done yet.<br>
Participate in the <font color="LEVEL">Olympiad</font> and the <font color="LEVEL">Ceremony of Chaos</font>, and collect <font color="LEVEL">100 Proof of Battle</font>.
Participate in the <font color="LEVEL">Olympiad</font> and the <font color="LEVEL">Ceremony of Chaos</font>, and collect <font color="LEVEL">20 Proof of Battle</font>.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Olympiad Manager:<br>
Did you get <font color="LEVEL">20 Proof of Battle</font>?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10819_ForHonor 31688-08.html">"Yes, here."</Button>
</body></html>

View File

@@ -41,15 +41,16 @@ public class Q10819_ForHonor extends Quest
// NPC
private static final int OLYMPIAD_MANAGER = 31688;
// Items
private static final int PROOF_OF_BATTLE = 45872;
private static final int PROOF_OF_BATTLE_2 = 45873;
private static final int ISHUMA_CERTIFICATE = 45630;
private static final int SIR_KRISTOF_RODEMAI_CERTIFICATE = 45631;
private static final int DAICHIR_SERTIFICATE = 45628;
private static final int DAICHIR_CERTIFICATE = 45628;
// Rewards
private static final int OLYMPIAD_MANAGER_CERTIFICATE = 45629;
private static final int BATTLE_QUICK_HEALING_POTION = 45945;
// Misc
private static final int MIN_LEVEL = 99;
private static final int PROOF_OF_BATTLE_2_NEEDED = 20;
public Q10819_ForHonor()
{
@@ -58,7 +59,7 @@ public class Q10819_ForHonor extends Quest
addTalkId(OLYMPIAD_MANAGER);
addCondMinLevel(MIN_LEVEL, "31688-02.html");
addCondStartedQuest(Q10817_ExaltedOneWhoOvercomesTheLimit.class.getSimpleName(), "31688-03.html");
registerQuestItems(PROOF_OF_BATTLE);
registerQuestItems(PROOF_OF_BATTLE_2);
}
@Override
@@ -87,11 +88,11 @@ public class Q10819_ForHonor extends Quest
}
case "31688-09.html":
{
if (qs.isCond(2))
if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_BATTLE_2) >= PROOF_OF_BATTLE_2_NEEDED))
{
if ((player.getLevel() >= MIN_LEVEL))
{
if (hasQuestItems(player, DAICHIR_SERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE))
if (hasQuestItems(player, DAICHIR_CERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE))
{
htmltext = "31688-10.html";
}
@@ -99,7 +100,7 @@ public class Q10819_ForHonor extends Quest
{
htmltext = event;
}
takeItems(player, PROOF_OF_BATTLE, -1);
takeItems(player, PROOF_OF_BATTLE_2, PROOF_OF_BATTLE_2_NEEDED);
giveItems(player, BATTLE_QUICK_HEALING_POTION, 180);
giveItems(player, OLYMPIAD_MANAGER_CERTIFICATE, 1);
qs.exitQuest(false, true);
@@ -133,7 +134,12 @@ public class Q10819_ForHonor extends Quest
{
htmltext = "31688-07.html";
}
else if (qs.isCond(2))
else if (qs.isCond(1) && (getQuestItemsCount(player, PROOF_OF_BATTLE_2) >= PROOF_OF_BATTLE_2_NEEDED))
{
qs.setCond(2);
htmltext = "31688-07a.html";
}
else if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_BATTLE_2) >= PROOF_OF_BATTLE_2_NEEDED))
{
htmltext = "31688-08.html";
}
@@ -155,9 +161,9 @@ public class Q10819_ForHonor extends Quest
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1))
{
giveItems(player, PROOF_OF_BATTLE, 1);
giveItems(player, PROOF_OF_BATTLE_2, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_BATTLE) >= 100)
if (getQuestItemsCount(player, PROOF_OF_BATTLE_2) >= PROOF_OF_BATTLE_2_NEEDED)
{
qs.setCond(2, true);
}

View File

@@ -1,5 +1,6 @@
<html><body>Maestro Ishuma:<br>
Well, if you got that, take the materials I give you and try making one.<br>
If you need more <font color="LEVEL">Recipe: Citrine Pendant</font> or <font color="LEVEL">Citrine Pendant Fragments</font> let me know. You'll have to get the other materials, though.<br>
Here, take them.
Here, take them.<br>
You can craft a Citrine Pendant, or you can pay the Black Marketeer of Mammon to craft it.
</body></html>

View File

@@ -1,4 +1,6 @@
<html><body>Sir Kristof Rodemai:<br>
Help those who are weaker than you. Help them grow stronger, and you'll be able to receive a <font color="LEVEL">Mentee's Mark</font>.<br>
That will be the proof that you've taken the time to help those who are weaker than you.
That will be the proof that you've taken the time to help those who are weaker than you.<br><br>
Or you can try another way, lead them into battle.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10821_HelpingOthers 30756-06a.html">"I'll do that."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Sir Kristof Rodemai:<br>
Help those who are weaker than you. Lead them into battle and help them grow stronger.<br>
That will be the proof that you've taken the time to help those who are weaker than you.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Sir Kristof Rodemai:<br>
You haven't passed my test yet.<br>
Become a leader for those who are weaker and help them grow.</font>.
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Sir Kristof Rodemai:<br>
You've passed the test I gave you.<br>
How was to lead those weaker than you? You learned that being a great warrior is not all about just being strong, right?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10821_HelpingOthers 30756-09.html">"Yes."</Button>
</body></html>

View File

@@ -18,6 +18,11 @@ package quests.Q10821_HelpingOthers;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
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.npc.OnAttackableKill;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
@@ -32,10 +37,10 @@ import quests.Q10817_ExaltedOneWhoOvercomesTheLimit.Q10817_ExaltedOneWhoOvercome
public class Q10821_HelpingOthers extends Quest
{
// NPC
private static final int SIR_ERIC_RODEMAI = 30756;
private static final int SIR_KRISTOF_RODEMAI = 30756;
// Items
private static final int MENTEE_MARK = 33804;
private static final int DAICHIR_SERTIFICATE = 45628;
private static final int DAICHIR_CERTIFICATE = 45628;
private static final int OLYMPIAD_MANAGER_CERTIFICATE = 45629;
private static final int ISHUMA_CERTIFICATE = 45630;
// Rewards
@@ -43,12 +48,13 @@ public class Q10821_HelpingOthers extends Quest
private static final int SPELLBOOK_FAVOR_OF_THE_EXALTED = 45928;
// Misc
private static final int MIN_LEVEL = 99;
private static final int MENTEE_MARKS_NEEDED = 45000;
public Q10821_HelpingOthers()
{
super(10821);
addStartNpc(SIR_ERIC_RODEMAI);
addTalkId(SIR_ERIC_RODEMAI);
addStartNpc(SIR_KRISTOF_RODEMAI);
addTalkId(SIR_KRISTOF_RODEMAI);
addCondMinLevel(MIN_LEVEL, "30756-02.html");
addCondStartedQuest(Q10817_ExaltedOneWhoOvercomesTheLimit.class.getSimpleName(), "30756-03.html");
// registerQuestItems(MENTEE_MARK); Should they be removed when abandoning quest?
@@ -78,13 +84,19 @@ public class Q10821_HelpingOthers extends Quest
htmltext = event;
break;
}
case "30756-06a.html":
{
qs.setCond(2);
htmltext = event;
break;
}
case "30756-09.html":
{
if (qs.isCond(1) && (getQuestItemsCount(player, MENTEE_MARK) >= 45000))
if ((qs.isCond(1) && (getQuestItemsCount(player, MENTEE_MARK) >= MENTEE_MARKS_NEEDED)) || qs.isCond(3))
{
if ((player.getLevel() >= MIN_LEVEL))
{
if (hasQuestItems(player, DAICHIR_SERTIFICATE, ISHUMA_CERTIFICATE, OLYMPIAD_MANAGER_CERTIFICATE))
if (hasQuestItems(player, DAICHIR_CERTIFICATE, ISHUMA_CERTIFICATE, OLYMPIAD_MANAGER_CERTIFICATE))
{
htmltext = "30756-10.html";
}
@@ -92,7 +104,10 @@ public class Q10821_HelpingOthers extends Quest
{
htmltext = event;
}
takeItems(player, MENTEE_MARK, 45000);
if (qs.isCond(1))
{
takeItems(player, MENTEE_MARK, MENTEE_MARKS_NEEDED);
}
giveItems(player, SIR_KRISTOF_RODEMAI_CERTIFICATE, 1);
giveItems(player, SPELLBOOK_FAVOR_OF_THE_EXALTED, 1);
qs.exitQuest(false, true);
@@ -122,15 +137,33 @@ public class Q10821_HelpingOthers extends Quest
}
case State.STARTED:
{
if (getQuestItemsCount(player, MENTEE_MARK) >= 45000)
switch (qs.getCond())
{
htmltext = "30756-08.html";
case 1:
{
if (getQuestItemsCount(player, MENTEE_MARK) >= MENTEE_MARKS_NEEDED)
{
htmltext = "30756-08.html";
}
else
{
htmltext = "30756-07.html";
}
break;
}
case 2:
{
if (qs.isMemoState(2))
{
htmltext = "30756-08a.html";
}
else
{
htmltext = "30756-07a.html";
}
break;
}
}
else
{
htmltext = "30756-07.html";
}
break;
}
case State.COMPLETED:
{
@@ -140,4 +173,48 @@ public class Q10821_HelpingOthers extends Quest
}
return htmltext;
}
@RegisterEvent(EventType.ON_ATTACKABLE_KILL)
@RegisterType(ListenerRegisterType.GLOBAL_MONSTERS)
public void onAttackableKill(OnAttackableKill event)
{
final PlayerInstance player = event.getAttacker();
if (player == null)
{
return;
}
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return;
}
if (player.getParty() == null)
{
return;
}
if (player.getParty().getLeader() != player)
{
return;
}
if (!event.getTarget().isRaid())
{
return;
}
if (event.getTarget().isRaidMinion())
{
return;
}
if (qs.isCond(2))
{
final int memo = qs.getMemoState() + 1;
qs.setMemoState(memo);
// sendNpcLogList(player);
if (memo >= 2)
{
qs.setCond(3, true);
}
}
}
}

View File

@@ -1,5 +1,4 @@
<html><body>Eva's Knight Lionel Hunter:<br>
You've completed a long journey. Good job. I'm glad to see you haven't given up.<br>
Do you have all the certificates?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10823_ExaltedOneWhoShattersTheLimit 33907-08.html">"Yes, here."</Button>
You are not ready to be called by me. Come back when you are ready.<br>
(Only Noblesse characters Lv. 100 or above can perform this quest.)
</body></html>

View File

@@ -1,4 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
The power given to us by the gods... we called it Noblesse. But you've proven that we are now able to overcome any limits without the protection of the gods.<br>
Now that you've shattered the limits set by the gods, we will call you <font color="LEVEL">Exalted</font>. You are now one step above Noblesse. Congratulations.
You've completed a long journey. Good job. I'm glad to see you haven't given up.<br>
Do you have all the certificates?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10823_ExaltedOneWhoShattersTheLimit 33907-09.html">"Yes, here."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Eva's Knight Lionel Hunter:<br>
The power given to us by the gods... we called it Noblesse. But you've proven that we are now able to overcome any limits without the protection of the gods.<br>
Now that you've shattered the limits set by the gods, we will call you <font color="LEVEL">Exalted</font>. You are now one step above Noblesse. Congratulations.
</body></html>

View File

@@ -34,7 +34,7 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
// NPC
private static final int LIONEL = 33907;
// Items
private static final int MERLOT_SERTIFICATE = 46056;
private static final int MERLOT_CERTIFICATE = 46056;
private static final int KURTIZ_CERTIFICATE = 46057;
private static final int MAMMON_CERTIFICATE = 45635;
private static final int GUSTAV_CERTIFICATE = 45636;
@@ -53,9 +53,9 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
super(10823);
addStartNpc(LIONEL);
addTalkId(LIONEL);
addCondMinLevel(MIN_LEVEL, "");
addCondMinLevel(MIN_LEVEL, "33907-07.html");
addCondCompletedQuest(Q10817_ExaltedOneWhoOvercomesTheLimit.class.getSimpleName(), "33907-02.html");
registerQuestItems(LIONEL_MISSION_LIST_3, MERLOT_SERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE);
registerQuestItems(LIONEL_MISSION_LIST_3, MERLOT_CERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE);
}
@Override
@@ -86,14 +86,18 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
}
break;
}
case "33907-08.html":
case "33907-09.html":
{
if (hasQuestItems(player, MERLOT_SERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE) && ((player.getDualClass() != null) && (player.getDualClass().getLevel() >= MIN_DUALCLASS_LEVEL)))
if (hasQuestItems(player, MERLOT_CERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE) && ((player.getDualClass() != null) && (player.getDualClass().getLevel() >= MIN_DUALCLASS_LEVEL)))
{
giveItems(player, EXALTED_CLOAK, 1);
giveItems(player, OBTAIN_EXALTED_STATUS, 1);
giveItems(player, EXALTED_TIARA, 1);
giveItems(player, DIGNITY_OF_THE_EXALTED, 1);
// Give Exalted status here?
// https://l2wiki.com/Noblesse
player.setNobleLevel(2);
player.broadcastUserInfo();
qs.exitQuest(false, true);
htmltext = event;
}
@@ -118,9 +122,9 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
}
case State.STARTED:
{
if (hasQuestItems(player, MERLOT_SERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE) && ((player.getDualClass() != null) && (player.getDualClass().getLevel() >= MIN_DUALCLASS_LEVEL)))
if (hasQuestItems(player, MERLOT_CERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE) && ((player.getDualClass() != null) && (player.getDualClass().getLevel() >= MIN_DUALCLASS_LEVEL)))
{
htmltext = "33907-07.html";
htmltext = "33907-08.html";
}
else
{

View File

@@ -45,44 +45,67 @@ public class Q10824_ConfrontingTheGreatestDanger extends Quest
private static final int PROOF_OF_PREPARATION = 80824;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_3 = new ItemHolder(45637, 1);
// Boss
private static final int[] BOSS =
private static final int[] DIM_RAID_RBS =
{
25745, // test
25747 // test
29283, // Vengeful Lerazia (Gludin - South gate)
29284, // Vengeful Edaire (Gludin - West gate)
29285, // Vengeful Agonia (Gludin - North gate)
29278, // Vengeful Agarez (Gludio - North Gate)
29279, // Vengeful Oretross (Gludio - West Gate)
29280, // Vengeful Eligos (Gludio - South Gate)
29268, // Crook The Mad (Giran - North Gate)
29269, // Houpon The Warden (Giran - West Gate)
29270, // Guillotine Of Death (Giran - South Gate)
29263, // Harp (Aden - West Gate)
29260, // Maliss (Aden - East Gate)
29261, // Isadora (Aden - South Gate)
29298, // Varbasion (Oren - North Gate)
29299, // Varmonia (Oren - East Gate)
29300, // Varkaron (Oren - South Gate)
29273, // Lindvior Herald Numa (Goddard - East Gate)
29274, // Valakas Herald Potigia (Goddard - North Gate)
29275, // Antharas Herald Komabor (Goddard - West Gate)
29288, // Nerva Orc Nergatt (Schuttgart - West Gate)
29289, // Amden Orc Turation (Schuttgart - South Gate)
29290, // Nerva Chief Turakan (Schuttgart - East Gate)
29293, // Theor (Gainak - South West Gate)
29294, // Tebird (Gainak - West Gate)
29295 // Tegaffe (Gainak - North Gate)
};
// Mobs
private static final int[] MONSTERS =
{
// Atelia Refinery
24150, // Devil Warrior
24149, // Devil Nightmare
24153, // Devil Varos
24152, // Devil Sinist
24151, // Devil Guardian
24144, // Death Rogue
24145, // Death Shooter
24146, // Death Warrior
24147, // Death Sorcerer
24148, // Death Pondus
24155, // Demonic Warrior
24149, // Devil Nightmare
24150, // Devil Warrior
24151, // Devil Guardian
24152, // Devil Sinist
24153, // Devil Varos
24154, // Demonic Wizard
24158, // Demonic Weiss
24157, // Demonic Keras
24155, // Demonic Warrior
24156, // Demonic Archer
// Raider's Crossroads Mobs
23572, // Nymph Astra
23573, // Nymph Astra
23568, // Nymph Lily
23569, // Nymph Lily
24157, // Demonic Keras
24158, // Demonic Weiss
// Enchanted Valley
23566, // Nymph rose
23567, // Nymph rose
23568, // Nymph Lily
23569, // Nymph Lily
23570, // Nymph Tulip
23571, // Nymph Tulip
23581, // Afros
23578 // Nymph Sentinel
23572, // Nymph Astra
23573, // Nymph Astra
23578, // Nymph Sentinel
23581 // Afros
};
// Rewards
private static final int MERLOT_SERTIFICATE = 46056;
private static final int MERLOT_CERTIFICATE = 46056;
private static final int SPELLBOOK_BLESSING_OF_THE_EXALTED = 45926;
// Misc
private static final int MIN_LEVEL = 100;
@@ -146,7 +169,7 @@ public class Q10824_ConfrontingTheGreatestDanger extends Quest
htmltext = event;
}
takeItems(player, MARK_OF_ADVANCE, -3);
giveItems(player, MERLOT_SERTIFICATE, 1);
giveItems(player, MERLOT_CERTIFICATE, 1);
giveItems(player, SPELLBOOK_BLESSING_OF_THE_EXALTED, 1);
qs.exitQuest(false, true);
}
@@ -172,7 +195,7 @@ public class Q10824_ConfrontingTheGreatestDanger extends Quest
htmltext = event;
}
takeItems(player, PROOF_OF_PREPARATION, -20000);
giveItems(player, MERLOT_SERTIFICATE, 1);
giveItems(player, MERLOT_CERTIFICATE, 1);
giveItems(player, SPELLBOOK_BLESSING_OF_THE_EXALTED, 1);
qs.exitQuest(false, true);
}
@@ -255,7 +278,7 @@ public class Q10824_ConfrontingTheGreatestDanger extends Quest
qs.setCond(4, true);
}
}
else if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE) && CommonUtil.contains(BOSS, npc.getId()))
else if ((qs != null) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE) && CommonUtil.contains(DIM_RAID_RBS, npc.getId()))
{
giveItems(player, MARK_OF_ADVANCE, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);

View File

@@ -1,5 +1,7 @@
<html><body>Captain Kurtiz:<br>
You are quick to understand.<br>
You have to participate in a <font color="LEVEL">siege</font> or a <font color="LEVEL">dimensional siege</font>. When you reach the <font color="LEVEL">Flag of Protection</font> inside, you'll be able to obtain a <font color="LEVEL">Mark of Valor</font>. Your mission is to obtain <font color="LEVEL">10</font> of these.<br>
You'll be able to get more marks when you participate in a dimensional siege or in the Aden or Rune Castle Sieges.
You'll be able to get more marks when you participate in a dimensional siege or in the Aden or Rune Castle Sieges.<br><br>
Or you can try another way, fight in Grand Olympiad or Ceremony of Chaos.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10825_ForVictory 30870-06a.html">"I'll do that."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Captain Kurtiz:<br>
You have to participate in <font color="LEVEL">Grand Olympiad</font> or <font color="LEVEL">Ceremony of Chaos</font>.Your mission is to obtain <font color="LEVEL">30 Proof of Settlement</font>.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Captain Kurtiz:<br>
You didn't forget what you have to do, right? Well, I can tell you again.<br>
You have to participate in <font color="LEVEL">Grand Olympiad</font> or <font color="LEVEL">Ceremony of Chaos</font>.Your mission is to obtain <font color="LEVEL">30 Proof of Settlement</font>.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Captain Kurtiz:<br>
Did you get <font color="LEVEL">30 Proof of Settlement</font>?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10825_ForVictory 30870-09.html">"Yes."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Flag of Protection:<br>
(You received a Mark of Valor.)<br><br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Flag of Protection:<br>
(You can only get reward if you are registered as attacker or defender.)<br><br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Flag of Protection:<br>
(You can only get reward from one castle per day.)<br><br>
</body></html>

View File

@@ -23,7 +23,8 @@ 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.sieges.OnCastleSiegeFinish;
import org.l2jmobius.gameserver.model.events.impl.ceremonyofchaos.OnCeremonyOfChaosMatchResult;
import org.l2jmobius.gameserver.model.events.impl.olympiad.OnOlympiadMatchResult;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
@@ -38,10 +39,21 @@ import quests.Q10823_ExaltedOneWhoShattersTheLimit.Q10823_ExaltedOneWhoShattersT
public class Q10825_ForVictory extends Quest
{
// NPC
private static final int KURTIZ = 34019;
private static final int KURTIZ = 30870;
// Flag of Protection NPCs
private static final int FLAG_GLUDIO = 36741; // 1 Gludio Castle
private static final int FLAG_DION = 36742; // 2 Dion Castle
private static final int FLAG_GIRAN = 36743; // 3 Giran Castle
private static final int FLAG_OREN = 36744; // 4 Oren Castle
private static final int FLAG_ADEN = 36745; // 5 Aden Castle
private static final int FLAG_INNADRIL = 36746; // 6 Innadril Castle
private static final int FLAG_GODDARD = 36747; // 7 Goddard Castle
private static final int FLAG_RUNE = 36748; // 8 Rune Castle
private static final int FLAG_SCHUTTGART = 36749; // 9 Schuttgart Castle
// Items
private static final int PROOF_OF_SETTLEMENT = 80825;
private static final int MARK_OF_VALOR = 46059;
private static final int MERLOT_SERTIFICATE = 46056;
private static final int MERLOT_CERTIFICATE = 46056;
private static final int MAMMON_CERTIFICATE = 45635;
private static final int GUSTAV_CERTIFICATE = 45636;
// Rewards
@@ -49,15 +61,17 @@ public class Q10825_ForVictory extends Quest
private static final int SPELLBOOK_SUMMON_BATTLE_POTION = 45927;
// Misc
private static final int MIN_LEVEL = 100;
private static final int MARK_OF_VALOR_NEEDED = 10;
private static final int PROOF_OF_SETTLEMENT_NEEDED = 30;
public Q10825_ForVictory()
{
super(10825);
addStartNpc(KURTIZ);
addTalkId(KURTIZ);
addTalkId(KURTIZ, FLAG_GLUDIO, FLAG_DION, FLAG_GIRAN, FLAG_OREN, FLAG_ADEN, FLAG_INNADRIL, FLAG_GODDARD, FLAG_RUNE, FLAG_SCHUTTGART);
addCondMinLevel(MIN_LEVEL, "30870-02.html");
addCondStartedQuest(Q10823_ExaltedOneWhoShattersTheLimit.class.getSimpleName(), "30870-03.html");
registerQuestItems(MARK_OF_VALOR);
registerQuestItems(PROOF_OF_SETTLEMENT, MARK_OF_VALOR);
}
@Override
@@ -81,16 +95,23 @@ public class Q10825_ForVictory extends Quest
case "30870-06.html":
{
qs.startQuest();
qs.set("TimeCheck", 0);
htmltext = event;
break;
}
case "30870-06a.html":
{
qs.setCond(3);
htmltext = event;
break;
}
case "30870-09.html":
{
if (qs.isCond(1) && (getQuestItemsCount(player, MARK_OF_VALOR) >= 10))
if ((qs.isCond(2) && (getQuestItemsCount(player, MARK_OF_VALOR) >= MARK_OF_VALOR_NEEDED)) || (qs.isCond(4) && (getQuestItemsCount(player, PROOF_OF_SETTLEMENT) >= PROOF_OF_SETTLEMENT_NEEDED)))
{
if ((player.getLevel() >= MIN_LEVEL))
{
if (hasQuestItems(player, MERLOT_SERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE))
if (hasQuestItems(player, MERLOT_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE))
{
htmltext = "30870-10.html";
}
@@ -98,6 +119,14 @@ public class Q10825_ForVictory extends Quest
{
htmltext = event;
}
if (qs.isCond(2))
{
takeItems(player, MARK_OF_VALOR, MARK_OF_VALOR_NEEDED);
}
if (qs.isCond(4))
{
takeItems(player, PROOF_OF_SETTLEMENT, PROOF_OF_SETTLEMENT_NEEDED);
}
giveItems(player, KURTIZ_CERTIFICATE, 1);
giveItems(player, SPELLBOOK_SUMMON_BATTLE_POTION, 1);
qs.exitQuest(false, true);
@@ -109,6 +138,82 @@ public class Q10825_ForVictory extends Quest
}
break;
}
case "mark":
{
final long TIME_CHECK = Long.parseLong(qs.get("TimeCheck"));
final long CURRENT_TIME = System.currentTimeMillis();
final long SIEGE_LENGTH = 7200000; // 2 hours in milliseconds
switch (npc.getId())
{
case FLAG_GLUDIO:
case FLAG_DION:
case FLAG_GIRAN:
case FLAG_OREN:
case FLAG_INNADRIL:
case FLAG_GODDARD:
case FLAG_SCHUTTGART:
{
if (player != null)
{
if (qs.isCond(1) && (getQuestItemsCount(player, MARK_OF_VALOR) < MARK_OF_VALOR_NEEDED) && (CURRENT_TIME > (TIME_CHECK + SIEGE_LENGTH)))
{
if (player.getSiegeState() == 0)
{
htmltext = "CastleFlagOfProtection-03.html"; // Reward only siege participants
}
else
{
qs.set("TimeCheck", Long.toString(CURRENT_TIME));
giveItems(player, MARK_OF_VALOR, 1);
if (getQuestItemsCount(player, MARK_OF_VALOR) >= MARK_OF_VALOR_NEEDED)
{
qs.setCond(2, true);
}
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
htmltext = "CastleFlagOfProtection-02.html"; // Reward received
}
}
else
{
htmltext = "CastleFlagOfProtection-04.html"; // Reward only from one castle per day
}
}
break;
}
case FLAG_ADEN:
case FLAG_RUNE:
{
if (player != null)
{
if (qs.isCond(1) && (getQuestItemsCount(player, MARK_OF_VALOR) < MARK_OF_VALOR_NEEDED) && (CURRENT_TIME > (TIME_CHECK + SIEGE_LENGTH)))
{
if (player.getSiegeState() == 0)
{
htmltext = "CastleFlagOfProtection-03.html"; // Reward only siege participants
}
else
{
qs.set("TimeCheck", String.valueOf(CURRENT_TIME));
giveItems(player, MARK_OF_VALOR, 2);
if (getQuestItemsCount(player, MARK_OF_VALOR) >= MARK_OF_VALOR_NEEDED)
{
qs.setCond(2, true);
}
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
htmltext = "CastleFlagOfProtection-02.html"; // Reward received
}
}
else
{
htmltext = "CastleFlagOfProtection-04.html"; // Reward only from one castle per day
}
}
break;
}
}
}
break;
}
return htmltext;
}
@@ -127,13 +232,32 @@ public class Q10825_ForVictory extends Quest
}
case State.STARTED:
{
if (getQuestItemsCount(player, MARK_OF_VALOR) >= 10)
switch (qs.getCond())
{
htmltext = "30870-08.html";
}
else
{
htmltext = "30870-07.html";
case 1:
{
if (getQuestItemsCount(player, MARK_OF_VALOR) >= MARK_OF_VALOR_NEEDED)
{
htmltext = "30870-08.html";
}
else
{
htmltext = "30870-07.html";
}
break;
}
case 3:
{
if (getQuestItemsCount(player, PROOF_OF_SETTLEMENT) >= PROOF_OF_SETTLEMENT_NEEDED)
{
htmltext = "30870-08a.html";
}
else
{
htmltext = "30870-07a.html";
}
break;
}
}
break;
}
@@ -153,16 +277,28 @@ public class Q10825_ForVictory extends Quest
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1))
{
giveItems(player, MARK_OF_VALOR, 1);
giveItems(player, PROOF_OF_SETTLEMENT, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_SETTLEMENT) >= PROOF_OF_SETTLEMENT_NEEDED)
{
qs.setCond(4, true);
}
}
}
}
@RegisterEvent(EventType.ON_CASTLE_SIEGE_FINISH)
@RegisterEvent(EventType.ON_CEREMONY_OF_CHAOS_MATCH_RESULT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
private void OnCastleSiegeFinish(OnCastleSiegeFinish event)
private void onCeremonyOfChaosMatchResult(OnCeremonyOfChaosMatchResult event)
{
event.getSiege().getPlayersInZone().forEach(this::manageQuestProgress);
event.getMembers().forEach(player -> manageQuestProgress(player.getPlayer()));
}
@RegisterEvent(EventType.ON_OLYMPIAD_MATCH_RESULT)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
private void onOlympiadMatchResult(OnOlympiadMatchResult event)
{
manageQuestProgress(event.getWinner().getPlayer());
manageQuestProgress(event.getLoser().getPlayer());
}
}

View File

@@ -38,7 +38,7 @@ public class Q10826_LuckBefittingOfTheStatus extends Quest
private static final int BLACKSMITH_OF_MAMMON = 31126;
// Items
private static final int LADY_KNIFE = 45645;
private static final int MERLOT_SERTIFICATE = 46056;
private static final int MERLOT_CERTIFICATE = 46056;
private static final int KURTIZ_CERTIFICATE = 46057;
private static final int GUSTAV_CERTIFICATE = 45636;
// Rewards
@@ -118,7 +118,7 @@ public class Q10826_LuckBefittingOfTheStatus extends Quest
{
if ((player.getLevel() >= MIN_LEVEL))
{
if (hasQuestItems(player, KURTIZ_CERTIFICATE, MERLOT_SERTIFICATE, GUSTAV_CERTIFICATE))
if (hasQuestItems(player, KURTIZ_CERTIFICATE, MERLOT_CERTIFICATE, GUSTAV_CERTIFICATE))
{
htmltext = "31126-15.html";
}

View File

@@ -39,7 +39,7 @@ public class Q10827_StepUpToLead extends Quest
// NPC
private static final int GUSTAV = 30760;
// Items
private static final int MERLOT_SERTIFICATE = 46056;
private static final int MERLOT_CERTIFICATE = 46056;
private static final int KURTIZ_CERTIFICATE = 46057;
private static final int MAMMON_CERTIFICATE = 45635;
// Rewards
@@ -47,6 +47,7 @@ public class Q10827_StepUpToLead extends Quest
private static final int SPELLBOOK_FAVOR_OF_THE_EXALTED = 45870;
// Misc
private static final int MIN_LEVEL = 100;
private static final int PARTY_LEADER_TIMES = 5;
public Q10827_StepUpToLead()
{
@@ -87,7 +88,7 @@ public class Q10827_StepUpToLead extends Quest
{
if ((player.getLevel() >= MIN_LEVEL))
{
if (hasQuestItems(player, KURTIZ_CERTIFICATE, MERLOT_SERTIFICATE, MAMMON_CERTIFICATE))
if (hasQuestItems(player, KURTIZ_CERTIFICATE, MERLOT_CERTIFICATE, MAMMON_CERTIFICATE))
{
htmltext = "30760-10.html";
}
@@ -97,12 +98,6 @@ public class Q10827_StepUpToLead extends Quest
}
giveItems(player, GUSTAV_CERTIFICATE, 1);
giveItems(player, SPELLBOOK_FAVOR_OF_THE_EXALTED, 1);
// Give Exalted status here?
// https://l2wiki.com/Noblesse
player.setNobleLevel(2);
player.broadcastUserInfo();
qs.exitQuest(false, true);
}
else
@@ -185,7 +180,7 @@ public class Q10827_StepUpToLead extends Quest
final int memo = qs.getMemoState() + 1;
qs.setMemoState(memo);
if (memo >= 30)
if (memo >= PARTY_LEADER_TIMES)
{
qs.setCond(2, true);
}

View File

@@ -1,5 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Great job passing the second test. I knew you would be able to do it.<br>
Now, only the third test is left. Are you ready for it?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10823_ExaltedOneWhoShattersTheLimit 33907-03.htm">"Yes, I'm ready."</Button>
You already passed the three tests to gain the new power. However, the world has changed, and so has the path you should take.<br>
Would you like to learn about the qualification test for this new stage?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-03.htm">"Go on."</Button>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
All the efforts you've made so far are simple compared to what you'll have to do now.<br>
You must remember that it is not about overcoming the limit, but about learning that there's no limit at all. Do you understand what I'm saying?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10823_ExaltedOneWhoShattersTheLimit 33907-04.htm">"Yes."</Button>
I'm fully aware that you worked hard to rise to the Exalted position and achieve the power you wished. However, the world has changed. More precisely, the birth of a new power has changed the world.<br>
In either case, we've come to the same conclusion: we must move on. The world does not need ones who linger in the present. You must start a new journey and overcome new trials.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-04.htm">"Go on."</Button>
</body></html>

View File

@@ -1,6 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
You've already overcome your limit. There's no such thing as a limit now. That's what you will be proving on this third test.<br>
The things you've obtained as you improved will make you even stronger, and what you will obtain from now on will help you prove yourself.<br>
Are you ready to not go back?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10823_ExaltedOneWhoShattersTheLimit 33907-05.html">"I'm ready."</Button>
During this journey, you must reach a new stage, establish a solid foothold, and expand your influence to this world. To save the world, you must be able not only to develop yourself but also to spread your power to other areas. I know it sounds like a riddle.<br>
But I can promise you one thing, by the time you pass the test, you will have reached the new stage. Would you take the fourth test?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-05.html">"Yes, that is correct."</Button>
</body></html>

View File

@@ -1,7 +1,9 @@
<html><body>Eva's Knight Lionel Hunter:<br>
This is the third test.<br>
You must overcome not just the limit of the power you were born with, but also the limit of the new power you obtained.<br>
Make sure your <font color="LEVEL">Lv. 104</font>. Then, go find <font color="LEVEL">Sporcha</font> in <font color="LEVEL">Refugee Village</font>, <font color="LEVEL">Captain Krenaht</font> in the <font color="LEVEL">Giants Cave</font>, the <font color="LEVEL">Santiago</font>, and <font color="LEVEL">Arcturus</font> in the <font color="LEVEL">Hunters Village</font>, and pass the tests they give you. It's best that you hear about the tests from them.<br><br><br>
Remember to bring back their certificates.<br>
If you forget who you must go to, refer to the guide I'll be giving you.
I'll tell you about the fourth test.<br>
First, you must reach <font color="LEVEL">Lv. 104</font> to prove you are qualified to advance to the new stage. You must also pass the tests of the following people and receive their certificates.<br>
Your testers include <font color="LEVEL">Commando Captain Sporcha</font> in the <font color="LEVEL">Hellbound Refugee Camp</font>, <font color="LEVEL">Giant Tracker Leader Krenaht</font> in the <font color="LEVEL">Giant's Cave</font>, <font color="LEVEL">Fishing Guild Leader Santiago</font> in <font color="LEVEL">Heine</font>, and <font color="LEVEL">Hunter's Guild President Arcturus</font> in the <font color="LEVEL">Hunter's Village</font>.<br><br><br>
Only they know what they'll test you on, so go talk to them. If you forget who you must go to, refer to the guide I'll be giving you<br><br>
All this can be substituted by completing a mission from <font color="LEVEL">High Priest Sylvain</font> in the <font color="LEVEL">Einhasad Temple</font> in the <font color="LEVEL">Town of Dion</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-05a.html">"I'll do that."</Button>
</body></html>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
I'll tell you about the fourth test.<br>
You need to complete a mission from <font color="LEVEL">High Priest Sylvain</font> in the <font color="LEVEL">Einhasad Temple</font> in the <font color="LEVEL">Town of Dion</font>.<br>
Only him knows what he'll test you on, so go talk to him. If you forget who you must go to, refer to the guide I'll be giving you<br>
</body></html>

View File

@@ -1,6 +1,6 @@
<html><body>Eva's Knight Lionel Hunter:<br>
You haven't finished all the tests. In order to overcome your limit, you must pass all the tests.<br>
You haven't finished all the tests. In order to reach another level, you must pass all the tests.<br>
You must overcome not just the limit of the power you were born with, but also the limit of the new power you obtained.<br>
Make sure your <font color="LEVEL">Lv. 104</font>. Then, go find <font color="LEVEL">Sporcha</font> in <font color="LEVEL">Refugee Village</font>, <font color="LEVEL">Captain Krenaht</font> in the <font color="LEVEL">Giants Cave</font>, the <font color="LEVEL">Santiago</font>, and <font color="LEVEL">Arcturus</font> in the <font color="LEVEL">Hunters Village</font>, and pass the tests they give you.<br>
Make sure you're <font color="LEVEL">Lv. 104</font>. Then, go find <font color="LEVEL">Commando Captain Sporcha</font> in the <font color="LEVEL">Hellbound Refugee Camp</font>, <font color="LEVEL">Giant Tracker Leader Krenaht</font> in the <font color="LEVEL">Giant's Cave</font>, <font color="LEVEL">Fishing Guild Leader Santiago</font> in <font color="LEVEL">Heine</font>, and <font color="LEVEL">Hunter's Guild President Arcturus</font> in the <font color="LEVEL">Hunter's Village</font>, and pass the tests they give you.<br><br><br>
It's best that you hear about the tests from them. Remember to bring back their certificates.
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Eva's Knight Lionel Hunter:<br>
You haven't finished the test. In order to reach another level, you must pass the test.<br>
You must overcome not just the limit of the power you were born with, but also the limit of the new power you obtained.<br>
Make sure you're <font color="LEVEL">Lv. 104</font>. Then, go find <font color="LEVEL">High Priest Sylvain</font> in the <font color="LEVEL">Einhasad Temple</font> in the <font color="LEVEL">Town of Dion</font>.<br><br><br>
It's best that you hear about the test from him. Remember to bring back his certificate.
</body></html>

View File

@@ -1,5 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
You've completed a long journey. Good job. I'm glad to see you haven't given up.<br>
Do you have all the certificates?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10823_ExaltedOneWhoShattersTheLimit 33907-08.html">"Yes, here."</Button>
Have you completed all tests?<br>
Congratulations on passing them all. Did you bring back all the certificates?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-08.html">"Yes, I did."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Have you completed the test?<br>
Congratulations on passing it. Did you bring back the certificate?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-08.html">"Yes, I did."</Button>
</body></html>

View File

@@ -1,4 +1,4 @@
<html><body>Eva's Knight Lionel Hunter:<br>
The power given to us by the gods... we called it Noblesse. But you've proven that we are now able to overcome any limits without the protection of the gods.<br>
Now that you've shattered the limits set by the gods, we will call you <font color="LEVEL">true exalted nobleman</font>. Get access to the next quest Exalted, Guide to Power. Congratulations.
You took the first step forward the new stage rather than being content staying still. Congratulations for passing the fourth test.<br>
Don't forget that more tests remain. For now, enjoy your achievement.
</body></html>

View File

@@ -35,12 +35,12 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
private static final int LIONEL = 33907;
// Items
private static final int SPORCHA_CERTIFICATE = 47830;
private static final int KRENAHT_CERTIFICATE = 47831;
private static final int SANTIAGO_SERTIFICATE = 47832;
private static final int KEKROPUS_CERTIFICATE = 47831;
private static final int SANTIAGO_CERTIFICATE = 47832;
private static final int ARCTURUS_CERTIFICATE = 47833;
private static final int SYLVAIN_CERTIFICATE = 80828;
private static final int LIONEL_MISSION_LIST_4 = 47829;
// Rewards
private static final int VITALITY_OF_THE_EXALTED = 47854;
private static final int DIGNITY_OF_THE_EXALTED = 47852;
// Misc
private static final int MIN_LEVEL = 103;
@@ -53,7 +53,7 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
addTalkId(LIONEL);
addCondMinLevel(MIN_LEVEL, "33907-00.htm");
addCondCompletedQuest(Q10823_ExaltedOneWhoShattersTheLimit.class.getSimpleName(), "33907-00.htm");
registerQuestItems(LIONEL_MISSION_LIST_4, SPORCHA_CERTIFICATE, KRENAHT_CERTIFICATE, SANTIAGO_SERTIFICATE, ARCTURUS_CERTIFICATE);
registerQuestItems(LIONEL_MISSION_LIST_4, SPORCHA_CERTIFICATE, KEKROPUS_CERTIFICATE, SANTIAGO_CERTIFICATE, ARCTURUS_CERTIFICATE, SYLVAIN_CERTIFICATE);
}
@Override
@@ -83,12 +83,18 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
}
break;
}
case "33907-05a.html":
{
qs.setCond(3);
htmltext = event;
break;
}
case "33907-08.html":
{
if (hasQuestItems(player, SPORCHA_CERTIFICATE, KRENAHT_CERTIFICATE, SANTIAGO_SERTIFICATE, ARCTURUS_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
if ((hasQuestItems(player, SYLVAIN_CERTIFICATE) || hasQuestItems(player, SPORCHA_CERTIFICATE, KEKROPUS_CERTIFICATE, SANTIAGO_CERTIFICATE, ARCTURUS_CERTIFICATE)) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
giveItems(player, VITALITY_OF_THE_EXALTED, 1);
giveItems(player, DIGNITY_OF_THE_EXALTED, 1);
addExpAndSp(player, 1178303740714L, 1178303740);
qs.exitQuest(false, true);
htmltext = event;
}
@@ -112,13 +118,32 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
}
case State.STARTED:
{
if (hasQuestItems(player, SPORCHA_CERTIFICATE, KRENAHT_CERTIFICATE, SANTIAGO_SERTIFICATE, ARCTURUS_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
switch (qs.getCond())
{
htmltext = "33907-07.html";
}
else
{
htmltext = "33907-06.html";
case 1:
{
if (hasQuestItems(player, SPORCHA_CERTIFICATE, KEKROPUS_CERTIFICATE, SANTIAGO_CERTIFICATE, ARCTURUS_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
htmltext = "33907-07.html";
}
else
{
htmltext = "33907-06.html";
}
break;
}
case 3:
{
if (hasQuestItems(player, SYLVAIN_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
htmltext = "33907-07a.html";
}
else
{
htmltext = "33907-06a.html";
}
break;
}
}
break;
}

View File

@@ -0,0 +1,3 @@
<html><body>Fire Dragon Bride Leona Blackbird:<br>
You have to bring me 10.000 <font color="LEVEL">Proof of Qualification</font> to obtain my certificate.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Fire Dragon Bride Leona Blackbird:<br>
Have you brought me 10.000 <font color="LEVEL">Proof of Qualification</font>, if not then go get them, to obtain the certificate.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10874_AgainstTheNewEnemy 31595-02.htm">"Yes, here they are."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Fire Dragon Bride Leona Blackbird:<br>
Good! You have brought 10.000 <font color="LEVEL">Proof of Qualification</font>.<br>
Now choose your reward:<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10874_AgainstTheNewEnemy 31595-03.htm">"4.500 GIANT TRACKERS Faction Points."</Button>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10874_AgainstTheNewEnemy 31595-04.htm">"4.500 BLACKBIRD CLAN Faction Points."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Fire Dragon Bride Leona Blackbird:<br>
You received <font color="LEVEL">4.500 GIANT TRACKERS Faction Points</font>.<br>
Now you can get your certificate.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10874_AgainstTheNewEnemy 31595-05.html">"Obtain certificate."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Fire Dragon Bride Leona Blackbird:<br>
You received <font color="LEVEL">4.500 BLACKBIRD CLAN Faction Points</font>.<br>
Now you can get your certificate.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10874_AgainstTheNewEnemy 31595-05.htm">"Obtain certificate."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Fire Dragon Bride Leona Blackbird:<br>
You received your <font color="LEVEL">Faction Points</font>.<br>
Now you can get your certificate.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10874_AgainstTheNewEnemy 31595-06.html">"Obtain certificate."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Fire Dragon Bride Leona Blackbird:<br>
I knew you could do it. Here's the certificate. I hope you become even stronger.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Commando Captain Sporcha:<br>
You are not ready to be called by me. Come back when you are ready.<br>
(The Exalted, Reaching Another Level quest is in progress and level 103+ and Lionel Hunter Mission List - 4 should be in the inventory.)
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Commando Captain Sporcha:<br>
I've been planning for a long time! I mean... well, I belive one who wants to lead the world... must pass a very difficult test.<br>
If I had a chance to give such test, I'd make an unimaginably difficult test. That's what I thought.<br>
Are you listening to me?<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10874_AgainstTheNewEnemy 34230-02.htm">"Go on."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Commando Captain Sporcha:<br>
Lionel Hunter said that you would lead the world. A leader must have dignity. I ask you to prove it.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10874_AgainstTheNewEnemy 34230-03.htm">"Ask what to prove."</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Commando Captain Sporcha:<br>
Then, I have the chance I'd always dreamed of! Hahaha. Oops, I'm sorry. I'm just so happy to have this chance.<br>
If anyone wants to take my test, I'll put him through the most terrible time of their lives... If you're not ready, you'd better leave now. Otherwise, you'll die before your time.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10874_AgainstTheNewEnemy 34230-04.htm">"I will take the test."</Button>
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Commando Captain Sporcha:<br>
Eh? Are you sure? Oh... well, you might be qualified to undertake my mission.<br>
Actually, it's not that complicated. You only need to grow strong enough to defeat unknown enemies.<br>
How? That's simple.<br>
Hunting. Will you accept the mission?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10874_AgainstTheNewEnemy 34230-05.html">"Alright."</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Commando Captain Sporcha:<br>
Listen carefully, I won't explain this again. Hunt monsters in <font color="LEVEL">Beleth's Magic Circle, the Desert Quarry, and the upper floor of the Giant's Cave</font> and collect 10.000 <font color="LEVEL">Proof of Qualification</font>. What do you say? It's quite hard, right? Hahahaha!!!<br><br><br>
Ah, after completing the mission, go to Leona Blackbird, not to me. She's the one who can give you a certificate.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Commando Captain Sporcha:<br>
Hunt monsters in <font color="LEVEL">Beleth's Magic Circle, the Desert Quarry, and the upper floor of the Giant's Cave</font> and collect 10.000 <font color="LEVEL">Proof of Qualification</font>.<br><br><br>
Then go to Leona Blackbird, not to me. She's the one who can give you a certificate.<br>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Commando Captain Sporcha:<br>
You have 10.000 <font color="LEVEL">Proof of Qualification</font>, now go to Leona Blackbird, not to me. She's the one who can give you a certificate.<br>
</body></html>

View File

@@ -0,0 +1,273 @@
/*
* 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.Q10874_AgainstTheNewEnemy;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.Faction;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
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.model.quest.State;
import org.l2jmobius.gameserver.util.Util;
import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel;
/**
* Against the New Enemy (10874)
* @URL https://l2wiki.com/Against_the_New_Enemy
* @author CostyKiller
*/
public class Q10874_AgainstTheNewEnemy extends Quest
{
// NPC
private static final int CAPTAIN_SPORCHA = 34230;
private static final int LEONA_BLACKBIRD = 31595;
private static final int[] MONSTERS =
{
// Desert Quarry
23811, // Cantera Tanya
23812, // Cantera Deathmoz
23813, // Cantera Floxis
23814, // Cantera Belika
23815, // Cantera Bridget
// Beleth's Magic Circle
23354, // Decay Hannibal
23355, // Armor Beast
23356, // Klein Soldier
23357, // Disorder Warrior
23360, // Bizuard
23361, // Mutated Fly
23367, // Armor Beast
23368, // Klein Soldier
23369, // Disorder Warrior
23372, // Bizuard
23373, // Mutated Fly
// Giant's Cave Upper Floor
23727, // Shaqrima Bathus
23728, // Shaqrima Carcass
23729, // Shaqrima Kshana
23733, // Lesser Giant Warrior
23734, // Lesser Giant Wizard
23735, // Captive Familiar Spirit
23736, // Captive Hell Demon
23737, // Captive Succubus
23738, // Captive Phantom
23742, // Naia Bathus, Demons Foreman
23743, // Naia Karkus, Demons Foreman
23744, // Naia Kshana, Demons Foreman
23746, // Recovering Lesser Giant Warrior
23747, // Recovering Lesser Giant Wizard
23749, // Root of the Lesser Giant
23754, // Essence of the Lesser Giant
};
// Items
private static final int PROOF_OF_QUALIFICATION = 47839;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_4 = new ItemHolder(47829, 1);
// Rewards
private static final int LEONA_CERTIFICATE = 47830;
private static final int FP = 4500; // Faction points
// Misc
private static final int MIN_LEVEL = 103;
private static final int PROOF_OF_QUALIFICATION_NEEDED = 10000;
public Q10874_AgainstTheNewEnemy()
{
super(10874);
addStartNpc(CAPTAIN_SPORCHA);
addTalkId(CAPTAIN_SPORCHA, LEONA_BLACKBIRD);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "34230-00.html");
addCondStartedQuest(Q10873_ExaltedReachingAnotherLevel.class.getSimpleName(), "34230-00.html");
registerQuestItems(PROOF_OF_QUALIFICATION);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return htmltext;
}
switch (event)
{
case "31595-02.htm":
case "31595-05.htm":
case "34230-02.htm":
case "34230-03.htm":
case "34230-04.htm":
{
htmltext = event;
break;
}
case "34230-05.html":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_4))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "31595-03.htm":
{
if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_QUALIFICATION) >= PROOF_OF_QUALIFICATION_NEEDED))
{
addFactionPoints(player, Faction.GIANT_TRACKERS, FP); // add FP points to GIANT_TRACKERS Faction
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
qs.setCond(3, true);
htmltext = event;
}
break;
}
case "31595-04.htm":
{
if (qs.isCond(2) && (getQuestItemsCount(player, PROOF_OF_QUALIFICATION) >= PROOF_OF_QUALIFICATION_NEEDED))
{
addFactionPoints(player, Faction.BLACKBIRD_CLAN, FP); // add FP points to BLACKBIRD_CLAN Faction
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
qs.setCond(3, true);
htmltext = event;
}
break;
}
case "31595-06.html":
{
if (qs.isCond(3) && (getQuestItemsCount(player, PROOF_OF_QUALIFICATION) >= PROOF_OF_QUALIFICATION_NEEDED))
{
takeItems(player, PROOF_OF_QUALIFICATION, PROOF_OF_QUALIFICATION_NEEDED);
giveItems(player, LEONA_CERTIFICATE, 1);
qs.exitQuest(false, true);
final Quest mainQ = QuestManager.getInstance().getQuest(Q10873_ExaltedReachingAnotherLevel.class.getSimpleName());
if (mainQ != null)
{
mainQ.notifyEvent("SUBQUEST_FINISHED_NOTIFY", npc, player);
}
htmltext = event;
}
else
{
htmltext = getNoQuestLevelRewardMsg(player);
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(Npc npc, PlayerInstance player)
{
String htmltext = getNoQuestMsg(player);
final QuestState qs = getQuestState(player, true);
switch (qs.getState())
{
case State.CREATED:
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_4))
{
htmltext = "34230-01.htm";
}
else
{
htmltext = "34230-00.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case CAPTAIN_SPORCHA:
{
if (qs.isCond(1))
{
if (getQuestItemsCount(player, PROOF_OF_QUALIFICATION) >= PROOF_OF_QUALIFICATION_NEEDED)
{
htmltext = "34230-07.html";
}
else
{
htmltext = "34230-06.html";
}
}
break;
}
case LEONA_BLACKBIRD:
{
if (qs.isCond(2))
{
htmltext = "31595-01.htm";
}
else if (qs.isCond(3))
{
htmltext = "31595-05.htm";
}
else
{
htmltext = "31595-00.html";
}
}
break;
}
}
break;
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public void actionForEachPlayer(PlayerInstance player, Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(Config.ALT_PARTY_RANGE, npc, player, false))
{
if ((getQuestItemsCount(player, PROOF_OF_QUALIFICATION) < PROOF_OF_QUALIFICATION_NEEDED) && (getRandom(100) < 90))
{
giveItems(player, PROOF_OF_QUALIFICATION, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
if ((getQuestItemsCount(player, PROOF_OF_QUALIFICATION) >= PROOF_OF_QUALIFICATION_NEEDED) && (player.getLevel() >= MIN_LEVEL))
{
qs.setCond(2, true);
}
}
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
executeForEachPlayer(killer, npc, isSummon, true, false);
return super.onKill(npc, killer, isSummon);
}
}

View File

@@ -0,0 +1,4 @@
<html><body>Hierarch Kekropus:<br>
I don't think you are done yet.<br>
Bring me the <font color="LEVEL">Blackbird Clan Certificate</font> and the <font color="LEVEL">Giant Trackers Certificate</font>.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Hierarch Kekropus:<br>
Did you bring me <font color="LEVEL">Blackbird Clan Certificate</font> and <font color="LEVEL">Giant Trackers Certificate</font> requested by Krenaht?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10875_ForReputation 34222-02.html">"Yes, here they are."</Button>
</body></html>

View File

@@ -0,0 +1,3 @@
<html><body>Hierarch Kekropus:<br>
I knew you could do it. Here's the certificate. I hope you become even stronger.
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant Tracker Leader Krenaht:<br>
You are not ready to be called by me. Come back when you are ready.<br>
(The Exalted, Reaching Another Level quest is in progress and level 103+ and Lionel Hunter Mission List - 4 should be in the inventory.)
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant Tracker Leader Krenaht:<br>
Did Lionel Hunter send you? You look special.<br>
Yes, the right person for my mission.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10875_ForReputation 34237-02.htm">"Go on"</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant Tracker Leader Krenaht:<br>
Well, you need to gain fame to use that power correctly... but it's not easy to gain fame, either good or bad...<br>
Nevertheless, if you gain fame, you will be able to exercise influence, earning a ground to use your power.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10875_ForReputation 34237-03.htm">"Ask about the mission"</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Giant Tracker Leader Krenaht:<br>
As far as I know, after the title Exalted was created, many new factions have emerged. They might influence one another, or it might be just a coincidence.<br>
In either case, what I want from you is to build a relationship with them and earn their trust. Can you do that?
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10875_ForReputation 34237-04.html">"Alright"</Button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant Tracker Leader Krenaht:<br>
Okay. Your mission is to help the <font color="LEVEL">Blackbird Clan</font> and the <font color="LEVEL">Giant Trackers</font> and earn an amity level of 6 with them. You must receive certificates to prove your achievement.<br>
Receive the <font color="LEVEL">Blackbird Clan Certificate</font> from Leona Blackbird and the <font color="LEVEL">Giant Trackers Certificate</font> from Kekropus. To complete the mission, report to Kekropus.<br>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Giant Tracker Leader Krenaht:<br>
I don't think you are done yet.<br>
Receive the <font color="LEVEL">Blackbird Clan Certificate</font> from Leona Blackbird and the <font color="LEVEL">Giant Trackers Certificate</font> from Kekropus. To complete the mission, report to Kekropus.<br>
</body></html>

Some files were not shown because too many files have changed in this diff Show More