Addition of quest The Last One Standing (10880).

Contributed by Dmitri.
This commit is contained in:
MobiusDevelopment 2020-03-31 13:12:32 +00:00
parent c3fcc04dd5
commit c759c4629d
75 changed files with 1785 additions and 195 deletions

View File

@ -131,7 +131,6 @@
10874 Against the New Enemy 10874 Against the New Enemy
10875 For Reputation 10875 For Reputation
10877 Break Through Crisis 10877 Break Through Crisis
10880 The Last One Standing
10881 For the Pride 10881 For the Pride
10882 Victory Collection 10882 Victory Collection
10883 Immortal Honor 10883 Immortal Honor

View File

@ -0,0 +1,8 @@
<html><body>Ferin:<br>
Are you done?<br>
You've done great.<br>
choose one of the awards.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07.html">"FP 4500 pcs. with Mother Tree Guardians."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07a.html">"FP 4500 pcs. with Unworldly Visitors."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07b.html">"FP 4500 pcs. with Kingdom's Royal Guard."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Ferin:<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,3 @@
<html><body>Verdure Elder Elikia:<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,3 @@
<html><body>Verdure Elder Elikia:<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,4 @@
<html><body>Master Cyphona:<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,6 @@
<html><body>Master Cyphona:<br>
Fate doesn't just happen, nor can it be cut off just because one wants to.<br>
Meeting Lionel and taking part in giving out this test is all fate.<br>
And you must have come here because you will be passing it.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10880_TheLastOneStanding 34055-02.htm">"What's the test about?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
The battle with the monsters!<br>
to gain new strength, you need to hunt for monsters.<br>
and then you will receive my certificate.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-03.htm">"Properly?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
What do you think of the monsters of the Material Realm? Those monsters are the subject to our blades, due to our long history in battle.<br>
I know of some creatures who were turned into monsters as a result of experiments. And there are those who've lost their precious ones to those monsters. I know their sadness and anger. But we don't always remember them when we defeat those monsters.<br>
I believe we must always remember the sadness and anger that they hold within. Don't you agree?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-04.htm">"Sounds right."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Master Cyphona:<br>
I'm about to give you a very long test. In that process, I want you to remember the sadness and anger of many.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
In that long process, never forget the sadness that derives from long battles against the monsters.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Master Cyphona:<br>
It won't be easy bringing back proof of the monsters that you've defeated. But once you can do that, I'll acknowledge your strength.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
</body></html>

View File

@ -0,0 +1,303 @@
/*
* 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.Q10880_TheLastOneStanding;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
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 quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
/**
* The Last One Standing (10880)
* @URL https://l2wiki.com/The_Last_One_Standing
* @author Dmitri
*/
public class Q10880_TheLastOneStanding extends Quest
{
// NPCs
private static final int CYPHONA = 34055;
private static final int FERIN = 34054;
// Items
private static final int MASTER_CYPHONA_CERTIFICATE = 47835;
private static final int PROOF_OF_STRENGTH = 47843;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_5 = new ItemHolder(47834, 1);
// Monsters
private static final int[] MONSTERS =
{
// The Enchanted Valley
23566, // Nymph Rose
23567, // Nymph Rose
23568, // Nymph Lily
23569, // Nymph Lily
23570, // Nymph Tulip
23571, // Nymph Tulip
23572, // Nymph Cosmos
23573, // Nymph Cosmos
23578, // Nymph Guardian
// Garden of Spirits
23541, // Kerberos Lager
23550, // Kerberos Lager (night)
23542, // Kerberos Fort
23551, // Kerberos Fort (night)
23543, // Kerberos Nero
23552, // Kerberos Nero (night)
23544, // Fury Sylph Barrena
23553, // Fury Sylph Barrena (night)
23546, // Fury Sylph Temptress
23555, // Fury Sylph Temptress (night)
23547, // Fury Sylph Purka
23556, // Fury Sylph Purka (night)
23545, // Fury Kerberos Leger
23557, // Fury Kerberos Leger (night)
23549, // Fury Kerberos Nero
23558, // Fury Kerberos Nero (night)
// Atelia Fortress
23505, // Fortress Raider 101
23506, // Fortress Guardian Captain 101
23537, // Atelia Elite Captain Atelia Infuser 102
23538, // Atelia High Priest Atelia Infuser 103
23536, // Atelia High Priest Kelbim's 102
23535, // Atelia Archon Kelbim's 102
23532, // Atelia Elite Captain Kelbim's 101
23530, // Fortress Guardian Captain Kelbim's 101
23507, // Atelia Passionate Soldier 101
23508, // Atelia Elite Captain 101
23509, // Fortress Dark Wizard 102
23510, // Atelia Flame Master 102
23511, // Fortress Archon 102
23512, // Atelia High Priest 102
// Shadow of the Mother Tree
24117, // Crystal Reep
24118, // Crystal Reep
24119, // Crystal Needle
24120, // Crystal Needle
24121, // Treant Blossom
24122, // Treant Blossom
24123, // Flush Teasle
24124, // Flush Teasle
24125, // Creeper Rampike
24126, // Creeper Rampike
24139, // Reep Child
24140, // Needle Child
24141, // Blossom Child
24142 // Teasle Child
};
// Misc
private static final int MIN_LEVEL = 104;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(CYPHONA);
addTalkId(CYPHONA, FERIN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "34055-00.htm");
addCondStartedQuest(Q10879_ExaltedGuideToPower.class.getSimpleName(), "34055-00.htm");
registerQuestItems(PROOF_OF_STRENGTH);
}
@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 "34055-02.htm":
case "34055-03.htm":
{
htmltext = event;
break;
}
case "34055-04.htm":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_5))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "34054-07.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.MOTHER_TREE_GUARDIANS, 4500);
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;
}
}
case "34054-07a.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.UNWORLDLY_VISITORS, 4500);
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;
}
}
case "34054-07b.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.KINGDOM_ROYAL_GUARDS, 4500);
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() == CYPHONA) && (hasItem(player, LIONEL_HUNTERS_LIST_PART_5)))
{
htmltext = "34055-01.htm";
}
else
{
htmltext = "noItem.html";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case CYPHONA:
{
if (qs.isCond(1))
{
htmltext = "34055-05.html";
}
break;
}
case FERIN:
{
if (qs.isCond(2))
{
htmltext = "34054-06.html";
}
break;
}
}
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_STRENGTH, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_STRENGTH) >= 10000)
{
qs.setCond(2, true);
}
}
}
}

View File

@ -0,0 +1,4 @@
<html><body>Verdure Elder Elikia:<br>
I don't know how you found your way here, but I can't do anything for you if you haven't talked to Lionel Hunter.<br>
(You don't meet the requirements for proceed with this quest. You need Lionel Hunter's Mission List - Part 5 in your inventory.)
</body></html>

View File

@ -493,6 +493,7 @@ import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel; import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel;
import quests.Q10876_LeadersGrace.Q10876_LeadersGrace; import quests.Q10876_LeadersGrace.Q10876_LeadersGrace;
import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower; import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
import quests.Q10880_TheLastOneStanding.Q10880_TheLastOneStanding;
import quests.not_done.Q00504_CompetitionForTheBanditStronghold; import quests.not_done.Q00504_CompetitionForTheBanditStronghold;
import quests.not_done.Q00655_AGrandPlanForTamingWildBeasts; import quests.not_done.Q00655_AGrandPlanForTamingWildBeasts;
import quests.not_done.Q00667_HowToCoverShilensEyes; import quests.not_done.Q00667_HowToCoverShilensEyes;
@ -544,7 +545,6 @@ import quests.not_done.Q10859_OwnTheEarthAndTheHeavens;
import quests.not_done.Q10874_AgainstTheNewEnemy; import quests.not_done.Q10874_AgainstTheNewEnemy;
import quests.not_done.Q10875_ForReputation; import quests.not_done.Q10875_ForReputation;
import quests.not_done.Q10877_BreakThroughCrisis; import quests.not_done.Q10877_BreakThroughCrisis;
import quests.not_done.Q10880_TheLastOneStanding;
import quests.not_done.Q10881_ForThePride; import quests.not_done.Q10881_ForThePride;
import quests.not_done.Q10882_VictoryCollection; import quests.not_done.Q10882_VictoryCollection;
import quests.not_done.Q10883_ImmortalHonor; import quests.not_done.Q10883_ImmortalHonor;
@ -1083,7 +1083,7 @@ public class QuestMasterHandler
Q10876_LeadersGrace.class, Q10876_LeadersGrace.class,
Q10877_BreakThroughCrisis.class, // TODO: Not done. Q10877_BreakThroughCrisis.class, // TODO: Not done.
Q10879_ExaltedGuideToPower.class, Q10879_ExaltedGuideToPower.class,
Q10880_TheLastOneStanding.class, // TODO: Not done. Q10880_TheLastOneStanding.class,
Q10881_ForThePride.class, // TODO: Not done. Q10881_ForThePride.class, // TODO: Not done.
Q10882_VictoryCollection.class, // TODO: Not done. Q10882_VictoryCollection.class, // TODO: Not done.
Q10883_ImmortalHonor.class, // TODO: Not done. Q10883_ImmortalHonor.class, // TODO: Not done.

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10880_TheLastOneStanding extends Quest
{
private static final int START_NPC = 34055;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -150,7 +150,6 @@
10874 Against the New Enemy 10874 Against the New Enemy
10875 For Reputation 10875 For Reputation
10877 Break Through Crisis 10877 Break Through Crisis
10880 The Last One Standing
10881 For the Pride 10881 For the Pride
10882 Victory Collection 10882 Victory Collection
10883 Immortal Honor 10883 Immortal Honor

View File

@ -0,0 +1,8 @@
<html><body>Ferin:<br>
Are you done?<br>
You've done great.<br>
choose one of the awards.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07.html">"FP 4500 pcs. with Mother Tree Guardians."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07a.html">"FP 4500 pcs. with Unworldly Visitors."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07b.html">"FP 4500 pcs. with Kingdom's Royal Guard."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Ferin:<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,3 @@
<html><body>Verdure Elder Elikia:<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,3 @@
<html><body>Verdure Elder Elikia:<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,4 @@
<html><body>Master Cyphona:<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,6 @@
<html><body>Master Cyphona:<br>
Fate doesn't just happen, nor can it be cut off just because one wants to.<br>
Meeting Lionel and taking part in giving out this test is all fate.<br>
And you must have come here because you will be passing it.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10880_TheLastOneStanding 34055-02.htm">"What's the test about?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
The battle with the monsters!<br>
to gain new strength, you need to hunt for monsters.<br>
and then you will receive my certificate.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-03.htm">"Properly?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
What do you think of the monsters of the Material Realm? Those monsters are the subject to our blades, due to our long history in battle.<br>
I know of some creatures who were turned into monsters as a result of experiments. And there are those who've lost their precious ones to those monsters. I know their sadness and anger. But we don't always remember them when we defeat those monsters.<br>
I believe we must always remember the sadness and anger that they hold within. Don't you agree?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-04.htm">"Sounds right."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Master Cyphona:<br>
I'm about to give you a very long test. In that process, I want you to remember the sadness and anger of many.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
In that long process, never forget the sadness that derives from long battles against the monsters.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Master Cyphona:<br>
It won't be easy bringing back proof of the monsters that you've defeated. But once you can do that, I'll acknowledge your strength.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
</body></html>

View File

@ -0,0 +1,303 @@
/*
* 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.Q10880_TheLastOneStanding;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
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 quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
/**
* The Last One Standing (10880)
* @URL https://l2wiki.com/The_Last_One_Standing
* @author Dmitri
*/
public class Q10880_TheLastOneStanding extends Quest
{
// NPCs
private static final int CYPHONA = 34055;
private static final int FERIN = 34054;
// Items
private static final int MASTER_CYPHONA_CERTIFICATE = 47835;
private static final int PROOF_OF_STRENGTH = 47843;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_5 = new ItemHolder(47834, 1);
// Monsters
private static final int[] MONSTERS =
{
// The Enchanted Valley
23566, // Nymph Rose
23567, // Nymph Rose
23568, // Nymph Lily
23569, // Nymph Lily
23570, // Nymph Tulip
23571, // Nymph Tulip
23572, // Nymph Cosmos
23573, // Nymph Cosmos
23578, // Nymph Guardian
// Garden of Spirits
23541, // Kerberos Lager
23550, // Kerberos Lager (night)
23542, // Kerberos Fort
23551, // Kerberos Fort (night)
23543, // Kerberos Nero
23552, // Kerberos Nero (night)
23544, // Fury Sylph Barrena
23553, // Fury Sylph Barrena (night)
23546, // Fury Sylph Temptress
23555, // Fury Sylph Temptress (night)
23547, // Fury Sylph Purka
23556, // Fury Sylph Purka (night)
23545, // Fury Kerberos Leger
23557, // Fury Kerberos Leger (night)
23549, // Fury Kerberos Nero
23558, // Fury Kerberos Nero (night)
// Atelia Fortress
23505, // Fortress Raider 101
23506, // Fortress Guardian Captain 101
23537, // Atelia Elite Captain Atelia Infuser 102
23538, // Atelia High Priest Atelia Infuser 103
23536, // Atelia High Priest Kelbim's 102
23535, // Atelia Archon Kelbim's 102
23532, // Atelia Elite Captain Kelbim's 101
23530, // Fortress Guardian Captain Kelbim's 101
23507, // Atelia Passionate Soldier 101
23508, // Atelia Elite Captain 101
23509, // Fortress Dark Wizard 102
23510, // Atelia Flame Master 102
23511, // Fortress Archon 102
23512, // Atelia High Priest 102
// Shadow of the Mother Tree
24117, // Crystal Reep
24118, // Crystal Reep
24119, // Crystal Needle
24120, // Crystal Needle
24121, // Treant Blossom
24122, // Treant Blossom
24123, // Flush Teasle
24124, // Flush Teasle
24125, // Creeper Rampike
24126, // Creeper Rampike
24139, // Reep Child
24140, // Needle Child
24141, // Blossom Child
24142 // Teasle Child
};
// Misc
private static final int MIN_LEVEL = 104;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(CYPHONA);
addTalkId(CYPHONA, FERIN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "34055-00.htm");
addCondStartedQuest(Q10879_ExaltedGuideToPower.class.getSimpleName(), "34055-00.htm");
registerQuestItems(PROOF_OF_STRENGTH);
}
@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 "34055-02.htm":
case "34055-03.htm":
{
htmltext = event;
break;
}
case "34055-04.htm":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_5))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "34054-07.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.MOTHER_TREE_GUARDIANS, 4500);
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;
}
}
case "34054-07a.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.UNWORLDLY_VISITORS, 4500);
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;
}
}
case "34054-07b.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.KINGDOM_ROYAL_GUARDS, 4500);
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() == CYPHONA) && (hasItem(player, LIONEL_HUNTERS_LIST_PART_5)))
{
htmltext = "34055-01.htm";
}
else
{
htmltext = "noItem.html";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case CYPHONA:
{
if (qs.isCond(1))
{
htmltext = "34055-05.html";
}
break;
}
case FERIN:
{
if (qs.isCond(2))
{
htmltext = "34054-06.html";
}
break;
}
}
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_STRENGTH, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_STRENGTH) >= 10000)
{
qs.setCond(2, true);
}
}
}
}

View File

@ -0,0 +1,4 @@
<html><body>Verdure Elder Elikia:<br>
I don't know how you found your way here, but I can't do anything for you if you haven't talked to Lionel Hunter.<br>
(You don't meet the requirements for proceed with this quest. You need Lionel Hunter's Mission List - Part 5 in your inventory.)
</body></html>

View File

@ -527,6 +527,7 @@ import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel; import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel;
import quests.Q10876_LeadersGrace.Q10876_LeadersGrace; import quests.Q10876_LeadersGrace.Q10876_LeadersGrace;
import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower; import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
import quests.Q10880_TheLastOneStanding.Q10880_TheLastOneStanding;
import quests.not_done.Q00504_CompetitionForTheBanditStronghold; import quests.not_done.Q00504_CompetitionForTheBanditStronghold;
import quests.not_done.Q00575_SpecialMissionFortuna; import quests.not_done.Q00575_SpecialMissionFortuna;
import quests.not_done.Q00655_AGrandPlanForTamingWildBeasts; import quests.not_done.Q00655_AGrandPlanForTamingWildBeasts;
@ -596,7 +597,6 @@ import quests.not_done.Q10859_OwnTheEarthAndTheHeavens;
import quests.not_done.Q10874_AgainstTheNewEnemy; import quests.not_done.Q10874_AgainstTheNewEnemy;
import quests.not_done.Q10875_ForReputation; import quests.not_done.Q10875_ForReputation;
import quests.not_done.Q10877_BreakThroughCrisis; import quests.not_done.Q10877_BreakThroughCrisis;
import quests.not_done.Q10880_TheLastOneStanding;
import quests.not_done.Q10881_ForThePride; import quests.not_done.Q10881_ForThePride;
import quests.not_done.Q10882_VictoryCollection; import quests.not_done.Q10882_VictoryCollection;
import quests.not_done.Q10883_ImmortalHonor; import quests.not_done.Q10883_ImmortalHonor;
@ -1187,7 +1187,7 @@ public class QuestMasterHandler
Q10876_LeadersGrace.class, Q10876_LeadersGrace.class,
Q10877_BreakThroughCrisis.class, // TODO: Not done. Q10877_BreakThroughCrisis.class, // TODO: Not done.
Q10879_ExaltedGuideToPower.class, Q10879_ExaltedGuideToPower.class,
Q10880_TheLastOneStanding.class, // TODO: Not done. Q10880_TheLastOneStanding.class,
Q10881_ForThePride.class, // TODO: Not done. Q10881_ForThePride.class, // TODO: Not done.
Q10882_VictoryCollection.class, // TODO: Not done. Q10882_VictoryCollection.class, // TODO: Not done.
Q10883_ImmortalHonor.class, // TODO: Not done. Q10883_ImmortalHonor.class, // TODO: Not done.

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10880_TheLastOneStanding extends Quest
{
private static final int START_NPC = 34055;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -159,7 +159,6 @@
10874 Against the New Enemy 10874 Against the New Enemy
10875 For Reputation 10875 For Reputation
10877 Break Through Crisis 10877 Break Through Crisis
10880 The Last One Standing
10881 For the Pride 10881 For the Pride
10882 Victory Collection 10882 Victory Collection
10883 Immortal Honor 10883 Immortal Honor

View File

@ -0,0 +1,8 @@
<html><body>Ferin:<br>
Are you done?<br>
You've done great.<br>
choose one of the awards.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07.html">"FP 4500 pcs. with Mother Tree Guardians."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07a.html">"FP 4500 pcs. with Unworldly Visitors."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07b.html">"FP 4500 pcs. with Kingdom's Royal Guard."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Ferin:<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,3 @@
<html><body>Verdure Elder Elikia:<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,3 @@
<html><body>Verdure Elder Elikia:<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,4 @@
<html><body>Master Cyphona:<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,6 @@
<html><body>Master Cyphona:<br>
Fate doesn't just happen, nor can it be cut off just because one wants to.<br>
Meeting Lionel and taking part in giving out this test is all fate.<br>
And you must have come here because you will be passing it.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10880_TheLastOneStanding 34055-02.htm">"What's the test about?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
The battle with the monsters!<br>
to gain new strength, you need to hunt for monsters.<br>
and then you will receive my certificate.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-03.htm">"Properly?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
What do you think of the monsters of the Material Realm? Those monsters are the subject to our blades, due to our long history in battle.<br>
I know of some creatures who were turned into monsters as a result of experiments. And there are those who've lost their precious ones to those monsters. I know their sadness and anger. But we don't always remember them when we defeat those monsters.<br>
I believe we must always remember the sadness and anger that they hold within. Don't you agree?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-04.htm">"Sounds right."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Master Cyphona:<br>
I'm about to give you a very long test. In that process, I want you to remember the sadness and anger of many.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
In that long process, never forget the sadness that derives from long battles against the monsters.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Master Cyphona:<br>
It won't be easy bringing back proof of the monsters that you've defeated. But once you can do that, I'll acknowledge your strength.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
</body></html>

View File

@ -0,0 +1,303 @@
/*
* 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.Q10880_TheLastOneStanding;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
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 quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
/**
* The Last One Standing (10880)
* @URL https://l2wiki.com/The_Last_One_Standing
* @author Dmitri
*/
public class Q10880_TheLastOneStanding extends Quest
{
// NPCs
private static final int CYPHONA = 34055;
private static final int FERIN = 34054;
// Items
private static final int MASTER_CYPHONA_CERTIFICATE = 47835;
private static final int PROOF_OF_STRENGTH = 47843;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_5 = new ItemHolder(47834, 1);
// Monsters
private static final int[] MONSTERS =
{
// The Enchanted Valley
23566, // Nymph Rose
23567, // Nymph Rose
23568, // Nymph Lily
23569, // Nymph Lily
23570, // Nymph Tulip
23571, // Nymph Tulip
23572, // Nymph Cosmos
23573, // Nymph Cosmos
23578, // Nymph Guardian
// Garden of Spirits
23541, // Kerberos Lager
23550, // Kerberos Lager (night)
23542, // Kerberos Fort
23551, // Kerberos Fort (night)
23543, // Kerberos Nero
23552, // Kerberos Nero (night)
23544, // Fury Sylph Barrena
23553, // Fury Sylph Barrena (night)
23546, // Fury Sylph Temptress
23555, // Fury Sylph Temptress (night)
23547, // Fury Sylph Purka
23556, // Fury Sylph Purka (night)
23545, // Fury Kerberos Leger
23557, // Fury Kerberos Leger (night)
23549, // Fury Kerberos Nero
23558, // Fury Kerberos Nero (night)
// Atelia Fortress
23505, // Fortress Raider 101
23506, // Fortress Guardian Captain 101
23537, // Atelia Elite Captain Atelia Infuser 102
23538, // Atelia High Priest Atelia Infuser 103
23536, // Atelia High Priest Kelbim's 102
23535, // Atelia Archon Kelbim's 102
23532, // Atelia Elite Captain Kelbim's 101
23530, // Fortress Guardian Captain Kelbim's 101
23507, // Atelia Passionate Soldier 101
23508, // Atelia Elite Captain 101
23509, // Fortress Dark Wizard 102
23510, // Atelia Flame Master 102
23511, // Fortress Archon 102
23512, // Atelia High Priest 102
// Shadow of the Mother Tree
24117, // Crystal Reep
24118, // Crystal Reep
24119, // Crystal Needle
24120, // Crystal Needle
24121, // Treant Blossom
24122, // Treant Blossom
24123, // Flush Teasle
24124, // Flush Teasle
24125, // Creeper Rampike
24126, // Creeper Rampike
24139, // Reep Child
24140, // Needle Child
24141, // Blossom Child
24142 // Teasle Child
};
// Misc
private static final int MIN_LEVEL = 104;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(CYPHONA);
addTalkId(CYPHONA, FERIN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "34055-00.htm");
addCondStartedQuest(Q10879_ExaltedGuideToPower.class.getSimpleName(), "34055-00.htm");
registerQuestItems(PROOF_OF_STRENGTH);
}
@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 "34055-02.htm":
case "34055-03.htm":
{
htmltext = event;
break;
}
case "34055-04.htm":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_5))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "34054-07.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.MOTHER_TREE_GUARDIANS, 4500);
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;
}
}
case "34054-07a.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.UNWORLDLY_VISITORS, 4500);
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;
}
}
case "34054-07b.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.KINGDOM_ROYAL_GUARDS, 4500);
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() == CYPHONA) && (hasItem(player, LIONEL_HUNTERS_LIST_PART_5)))
{
htmltext = "34055-01.htm";
}
else
{
htmltext = "noItem.html";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case CYPHONA:
{
if (qs.isCond(1))
{
htmltext = "34055-05.html";
}
break;
}
case FERIN:
{
if (qs.isCond(2))
{
htmltext = "34054-06.html";
}
break;
}
}
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_STRENGTH, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_STRENGTH) >= 10000)
{
qs.setCond(2, true);
}
}
}
}

View File

@ -0,0 +1,4 @@
<html><body>Verdure Elder Elikia:<br>
I don't know how you found your way here, but I can't do anything for you if you haven't talked to Lionel Hunter.<br>
(You don't meet the requirements for proceed with this quest. You need Lionel Hunter's Mission List - Part 5 in your inventory.)
</body></html>

View File

@ -482,6 +482,7 @@ import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel; import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel;
import quests.Q10876_LeadersGrace.Q10876_LeadersGrace; import quests.Q10876_LeadersGrace.Q10876_LeadersGrace;
import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower; import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
import quests.Q10880_TheLastOneStanding.Q10880_TheLastOneStanding;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace; import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime; import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.not_done.Q00504_CompetitionForTheBanditStronghold; import quests.not_done.Q00504_CompetitionForTheBanditStronghold;
@ -555,7 +556,6 @@ import quests.not_done.Q10859_OwnTheEarthAndTheHeavens;
import quests.not_done.Q10874_AgainstTheNewEnemy; import quests.not_done.Q10874_AgainstTheNewEnemy;
import quests.not_done.Q10875_ForReputation; import quests.not_done.Q10875_ForReputation;
import quests.not_done.Q10877_BreakThroughCrisis; import quests.not_done.Q10877_BreakThroughCrisis;
import quests.not_done.Q10880_TheLastOneStanding;
import quests.not_done.Q10881_ForThePride; import quests.not_done.Q10881_ForThePride;
import quests.not_done.Q10882_VictoryCollection; import quests.not_done.Q10882_VictoryCollection;
import quests.not_done.Q10883_ImmortalHonor; import quests.not_done.Q10883_ImmortalHonor;
@ -1109,7 +1109,7 @@ public class QuestMasterHandler
Q10876_LeadersGrace.class, Q10876_LeadersGrace.class,
Q10877_BreakThroughCrisis.class, // TODO: Not done. Q10877_BreakThroughCrisis.class, // TODO: Not done.
Q10879_ExaltedGuideToPower.class, Q10879_ExaltedGuideToPower.class,
Q10880_TheLastOneStanding.class, // TODO: Not done. Q10880_TheLastOneStanding.class,
Q10881_ForThePride.class, // TODO: Not done. Q10881_ForThePride.class, // TODO: Not done.
Q10882_VictoryCollection.class, // TODO: Not done. Q10882_VictoryCollection.class, // TODO: Not done.
Q10883_ImmortalHonor.class, // TODO: Not done. Q10883_ImmortalHonor.class, // TODO: Not done.

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10880_TheLastOneStanding extends Quest
{
private static final int START_NPC = 34055;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -160,7 +160,6 @@
10874 Against the New Enemy 10874 Against the New Enemy
10875 For Reputation 10875 For Reputation
10877 Break Through Crisis 10877 Break Through Crisis
10880 The Last One Standing
10881 For the Pride 10881 For the Pride
10882 Victory Collection 10882 Victory Collection
10883 Immortal Honor 10883 Immortal Honor

View File

@ -0,0 +1,8 @@
<html><body>Ferin:<br>
Are you done?<br>
You've done great.<br>
choose one of the awards.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07.html">"FP 4500 pcs. with Mother Tree Guardians."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07a.html">"FP 4500 pcs. with Unworldly Visitors."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07b.html">"FP 4500 pcs. with Kingdom's Royal Guard."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Ferin:<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,3 @@
<html><body>Verdure Elder Elikia:<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,3 @@
<html><body>Verdure Elder Elikia:<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,4 @@
<html><body>Master Cyphona:<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,6 @@
<html><body>Master Cyphona:<br>
Fate doesn't just happen, nor can it be cut off just because one wants to.<br>
Meeting Lionel and taking part in giving out this test is all fate.<br>
And you must have come here because you will be passing it.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10880_TheLastOneStanding 34055-02.htm">"What's the test about?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
The battle with the monsters!<br>
to gain new strength, you need to hunt for monsters.<br>
and then you will receive my certificate.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-03.htm">"Properly?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
What do you think of the monsters of the Material Realm? Those monsters are the subject to our blades, due to our long history in battle.<br>
I know of some creatures who were turned into monsters as a result of experiments. And there are those who've lost their precious ones to those monsters. I know their sadness and anger. But we don't always remember them when we defeat those monsters.<br>
I believe we must always remember the sadness and anger that they hold within. Don't you agree?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-04.htm">"Sounds right."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Master Cyphona:<br>
I'm about to give you a very long test. In that process, I want you to remember the sadness and anger of many.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
In that long process, never forget the sadness that derives from long battles against the monsters.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Master Cyphona:<br>
It won't be easy bringing back proof of the monsters that you've defeated. But once you can do that, I'll acknowledge your strength.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
</body></html>

View File

@ -0,0 +1,303 @@
/*
* 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.Q10880_TheLastOneStanding;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
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 quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
/**
* The Last One Standing (10880)
* @URL https://l2wiki.com/The_Last_One_Standing
* @author Dmitri
*/
public class Q10880_TheLastOneStanding extends Quest
{
// NPCs
private static final int CYPHONA = 34055;
private static final int FERIN = 34054;
// Items
private static final int MASTER_CYPHONA_CERTIFICATE = 47835;
private static final int PROOF_OF_STRENGTH = 47843;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_5 = new ItemHolder(47834, 1);
// Monsters
private static final int[] MONSTERS =
{
// The Enchanted Valley
23566, // Nymph Rose
23567, // Nymph Rose
23568, // Nymph Lily
23569, // Nymph Lily
23570, // Nymph Tulip
23571, // Nymph Tulip
23572, // Nymph Cosmos
23573, // Nymph Cosmos
23578, // Nymph Guardian
// Garden of Spirits
23541, // Kerberos Lager
23550, // Kerberos Lager (night)
23542, // Kerberos Fort
23551, // Kerberos Fort (night)
23543, // Kerberos Nero
23552, // Kerberos Nero (night)
23544, // Fury Sylph Barrena
23553, // Fury Sylph Barrena (night)
23546, // Fury Sylph Temptress
23555, // Fury Sylph Temptress (night)
23547, // Fury Sylph Purka
23556, // Fury Sylph Purka (night)
23545, // Fury Kerberos Leger
23557, // Fury Kerberos Leger (night)
23549, // Fury Kerberos Nero
23558, // Fury Kerberos Nero (night)
// Atelia Fortress
23505, // Fortress Raider 101
23506, // Fortress Guardian Captain 101
23537, // Atelia Elite Captain Atelia Infuser 102
23538, // Atelia High Priest Atelia Infuser 103
23536, // Atelia High Priest Kelbim's 102
23535, // Atelia Archon Kelbim's 102
23532, // Atelia Elite Captain Kelbim's 101
23530, // Fortress Guardian Captain Kelbim's 101
23507, // Atelia Passionate Soldier 101
23508, // Atelia Elite Captain 101
23509, // Fortress Dark Wizard 102
23510, // Atelia Flame Master 102
23511, // Fortress Archon 102
23512, // Atelia High Priest 102
// Shadow of the Mother Tree
24117, // Crystal Reep
24118, // Crystal Reep
24119, // Crystal Needle
24120, // Crystal Needle
24121, // Treant Blossom
24122, // Treant Blossom
24123, // Flush Teasle
24124, // Flush Teasle
24125, // Creeper Rampike
24126, // Creeper Rampike
24139, // Reep Child
24140, // Needle Child
24141, // Blossom Child
24142 // Teasle Child
};
// Misc
private static final int MIN_LEVEL = 104;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(CYPHONA);
addTalkId(CYPHONA, FERIN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "34055-00.htm");
addCondStartedQuest(Q10879_ExaltedGuideToPower.class.getSimpleName(), "34055-00.htm");
registerQuestItems(PROOF_OF_STRENGTH);
}
@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 "34055-02.htm":
case "34055-03.htm":
{
htmltext = event;
break;
}
case "34055-04.htm":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_5))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "34054-07.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.MOTHER_TREE_GUARDIANS, 4500);
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;
}
}
case "34054-07a.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.UNWORLDLY_VISITORS, 4500);
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;
}
}
case "34054-07b.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.KINGDOM_ROYAL_GUARDS, 4500);
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() == CYPHONA) && (hasItem(player, LIONEL_HUNTERS_LIST_PART_5)))
{
htmltext = "34055-01.htm";
}
else
{
htmltext = "noItem.html";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case CYPHONA:
{
if (qs.isCond(1))
{
htmltext = "34055-05.html";
}
break;
}
case FERIN:
{
if (qs.isCond(2))
{
htmltext = "34054-06.html";
}
break;
}
}
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_STRENGTH, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_STRENGTH) >= 10000)
{
qs.setCond(2, true);
}
}
}
}

View File

@ -0,0 +1,4 @@
<html><body>Verdure Elder Elikia:<br>
I don't know how you found your way here, but I can't do anything for you if you haven't talked to Lionel Hunter.<br>
(You don't meet the requirements for proceed with this quest. You need Lionel Hunter's Mission List - Part 5 in your inventory.)
</body></html>

View File

@ -487,6 +487,7 @@ import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel; import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel;
import quests.Q10876_LeadersGrace.Q10876_LeadersGrace; import quests.Q10876_LeadersGrace.Q10876_LeadersGrace;
import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower; import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
import quests.Q10880_TheLastOneStanding.Q10880_TheLastOneStanding;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace; import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime; import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.Q10896_VisitTheAdventureGuild.Q10896_VisitTheAdventureGuild; import quests.Q10896_VisitTheAdventureGuild.Q10896_VisitTheAdventureGuild;
@ -573,7 +574,6 @@ import quests.not_done.Q10859_OwnTheEarthAndTheHeavens;
import quests.not_done.Q10874_AgainstTheNewEnemy; import quests.not_done.Q10874_AgainstTheNewEnemy;
import quests.not_done.Q10875_ForReputation; import quests.not_done.Q10875_ForReputation;
import quests.not_done.Q10877_BreakThroughCrisis; import quests.not_done.Q10877_BreakThroughCrisis;
import quests.not_done.Q10880_TheLastOneStanding;
import quests.not_done.Q10881_ForThePride; import quests.not_done.Q10881_ForThePride;
import quests.not_done.Q10882_VictoryCollection; import quests.not_done.Q10882_VictoryCollection;
import quests.not_done.Q10883_ImmortalHonor; import quests.not_done.Q10883_ImmortalHonor;
@ -1140,7 +1140,7 @@ public class QuestMasterHandler
Q10876_LeadersGrace.class, Q10876_LeadersGrace.class,
Q10877_BreakThroughCrisis.class, // TODO: Not done. Q10877_BreakThroughCrisis.class, // TODO: Not done.
Q10879_ExaltedGuideToPower.class, Q10879_ExaltedGuideToPower.class,
Q10880_TheLastOneStanding.class, // TODO: Not done. Q10880_TheLastOneStanding.class,
Q10881_ForThePride.class, // TODO: Not done. Q10881_ForThePride.class, // TODO: Not done.
Q10882_VictoryCollection.class, // TODO: Not done. Q10882_VictoryCollection.class, // TODO: Not done.
Q10883_ImmortalHonor.class, // TODO: Not done. Q10883_ImmortalHonor.class, // TODO: Not done.

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10880_TheLastOneStanding extends Quest
{
private static final int START_NPC = 34055;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -148,7 +148,6 @@
10874 Against the New Enemy 10874 Against the New Enemy
10875 For Reputation 10875 For Reputation
10877 Break Through Crisis 10877 Break Through Crisis
10880 The Last One Standing
10881 For the Pride 10881 For the Pride
10882 Victory Collection 10882 Victory Collection
10883 Immortal Honor 10883 Immortal Honor

View File

@ -0,0 +1,8 @@
<html><body>Ferin:<br>
Are you done?<br>
You've done great.<br>
choose one of the awards.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07.html">"FP 4500 pcs. with Mother Tree Guardians."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07a.html">"FP 4500 pcs. with Unworldly Visitors."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34054-07b.html">"FP 4500 pcs. with Kingdom's Royal Guard."</Button>
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Ferin:<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,3 @@
<html><body>Verdure Elder Elikia:<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,3 @@
<html><body>Verdure Elder Elikia:<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,4 @@
<html><body>Master Cyphona:<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,6 @@
<html><body>Master Cyphona:<br>
Fate doesn't just happen, nor can it be cut off just because one wants to.<br>
Meeting Lionel and taking part in giving out this test is all fate.<br>
And you must have come here because you will be passing it.<br>
<Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10880_TheLastOneStanding 34055-02.htm">"What's the test about?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
The battle with the monsters!<br>
to gain new strength, you need to hunt for monsters.<br>
and then you will receive my certificate.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-03.htm">"Properly?"</Button>
</body></html>

View File

@ -0,0 +1,6 @@
<html><body>Master Cyphona:<br>
What do you think of the monsters of the Material Realm? Those monsters are the subject to our blades, due to our long history in battle.<br>
I know of some creatures who were turned into monsters as a result of experiments. And there are those who've lost their precious ones to those monsters. I know their sadness and anger. But we don't always remember them when we defeat those monsters.<br>
I believe we must always remember the sadness and anger that they hold within. Don't you agree?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10880_TheLastOneStanding 34055-04.htm">"Sounds right."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Master Cyphona:<br>
I'm about to give you a very long test. In that process, I want you to remember the sadness and anger of many.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
In that long process, never forget the sadness that derives from long battles against the monsters.
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Master Cyphona:<br>
It won't be easy bringing back proof of the monsters that you've defeated. But once you can do that, I'll acknowledge your strength.<br>
Go defeat the monsters in <font color="LEVEL">Enchanted Valley, Atelia Fortress, Shadow of the Mother Tree</font> and <font color="LEVEL">Garden of Spirits</font> and bring back the <font color="LEVEL">Proof of Strength - 10000</font>.<br>
</body></html>

View File

@ -0,0 +1,303 @@
/*
* 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.Q10880_TheLastOneStanding;
import org.l2jmobius.Config;
import org.l2jmobius.commons.util.CommonUtil;
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 quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
/**
* The Last One Standing (10880)
* @URL https://l2wiki.com/The_Last_One_Standing
* @author Dmitri
*/
public class Q10880_TheLastOneStanding extends Quest
{
// NPCs
private static final int CYPHONA = 34055;
private static final int FERIN = 34054;
// Items
private static final int MASTER_CYPHONA_CERTIFICATE = 47835;
private static final int PROOF_OF_STRENGTH = 47843;
private static final ItemHolder LIONEL_HUNTERS_LIST_PART_5 = new ItemHolder(47834, 1);
// Monsters
private static final int[] MONSTERS =
{
// The Enchanted Valley
23566, // Nymph Rose
23567, // Nymph Rose
23568, // Nymph Lily
23569, // Nymph Lily
23570, // Nymph Tulip
23571, // Nymph Tulip
23572, // Nymph Cosmos
23573, // Nymph Cosmos
23578, // Nymph Guardian
// Garden of Spirits
23541, // Kerberos Lager
23550, // Kerberos Lager (night)
23542, // Kerberos Fort
23551, // Kerberos Fort (night)
23543, // Kerberos Nero
23552, // Kerberos Nero (night)
23544, // Fury Sylph Barrena
23553, // Fury Sylph Barrena (night)
23546, // Fury Sylph Temptress
23555, // Fury Sylph Temptress (night)
23547, // Fury Sylph Purka
23556, // Fury Sylph Purka (night)
23545, // Fury Kerberos Leger
23557, // Fury Kerberos Leger (night)
23549, // Fury Kerberos Nero
23558, // Fury Kerberos Nero (night)
// Atelia Fortress
23505, // Fortress Raider 101
23506, // Fortress Guardian Captain 101
23537, // Atelia Elite Captain Atelia Infuser 102
23538, // Atelia High Priest Atelia Infuser 103
23536, // Atelia High Priest Kelbim's 102
23535, // Atelia Archon Kelbim's 102
23532, // Atelia Elite Captain Kelbim's 101
23530, // Fortress Guardian Captain Kelbim's 101
23507, // Atelia Passionate Soldier 101
23508, // Atelia Elite Captain 101
23509, // Fortress Dark Wizard 102
23510, // Atelia Flame Master 102
23511, // Fortress Archon 102
23512, // Atelia High Priest 102
// Shadow of the Mother Tree
24117, // Crystal Reep
24118, // Crystal Reep
24119, // Crystal Needle
24120, // Crystal Needle
24121, // Treant Blossom
24122, // Treant Blossom
24123, // Flush Teasle
24124, // Flush Teasle
24125, // Creeper Rampike
24126, // Creeper Rampike
24139, // Reep Child
24140, // Needle Child
24141, // Blossom Child
24142 // Teasle Child
};
// Misc
private static final int MIN_LEVEL = 104;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(CYPHONA);
addTalkId(CYPHONA, FERIN);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "34055-00.htm");
addCondStartedQuest(Q10879_ExaltedGuideToPower.class.getSimpleName(), "34055-00.htm");
registerQuestItems(PROOF_OF_STRENGTH);
}
@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 "34055-02.htm":
case "34055-03.htm":
{
htmltext = event;
break;
}
case "34055-04.htm":
{
if (hasItem(player, LIONEL_HUNTERS_LIST_PART_5))
{
qs.startQuest();
htmltext = event;
}
break;
}
case "34054-07.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.MOTHER_TREE_GUARDIANS, 4500);
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;
}
}
case "34054-07a.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.UNWORLDLY_VISITORS, 4500);
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;
}
}
case "34054-07b.html":
{
if (qs.isCond(2))
{
if ((player.getLevel() >= MIN_LEVEL))
{
takeItems(player, PROOF_OF_STRENGTH, -1);
giveItems(player, MASTER_CYPHONA_CERTIFICATE, 1);
addFactionPoints(player, Faction.KINGDOM_ROYAL_GUARDS, 4500);
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() == CYPHONA) && (hasItem(player, LIONEL_HUNTERS_LIST_PART_5)))
{
htmltext = "34055-01.htm";
}
else
{
htmltext = "noItem.html";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case CYPHONA:
{
if (qs.isCond(1))
{
htmltext = "34055-05.html";
}
break;
}
case FERIN:
{
if (qs.isCond(2))
{
htmltext = "34054-06.html";
}
break;
}
}
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_STRENGTH, 1);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (getQuestItemsCount(player, PROOF_OF_STRENGTH) >= 10000)
{
qs.setCond(2, true);
}
}
}
}

View File

@ -0,0 +1,4 @@
<html><body>Verdure Elder Elikia:<br>
I don't know how you found your way here, but I can't do anything for you if you haven't talked to Lionel Hunter.<br>
(You don't meet the requirements for proceed with this quest. You need Lionel Hunter's Mission List - Part 5 in your inventory.)
</body></html>

View File

@ -231,6 +231,7 @@ import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel; import quests.Q10873_ExaltedReachingAnotherLevel.Q10873_ExaltedReachingAnotherLevel;
import quests.Q10876_LeadersGrace.Q10876_LeadersGrace; import quests.Q10876_LeadersGrace.Q10876_LeadersGrace;
import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower; import quests.Q10879_ExaltedGuideToPower.Q10879_ExaltedGuideToPower;
import quests.Q10880_TheLastOneStanding.Q10880_TheLastOneStanding;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace; import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime; import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.Q10896_VisitTheAdventureGuild.Q10896_VisitTheAdventureGuild; import quests.Q10896_VisitTheAdventureGuild.Q10896_VisitTheAdventureGuild;
@ -318,7 +319,6 @@ import quests.not_done.Q10854_ToSeizeTheFortress;
import quests.not_done.Q10874_AgainstTheNewEnemy; import quests.not_done.Q10874_AgainstTheNewEnemy;
import quests.not_done.Q10875_ForReputation; import quests.not_done.Q10875_ForReputation;
import quests.not_done.Q10877_BreakThroughCrisis; import quests.not_done.Q10877_BreakThroughCrisis;
import quests.not_done.Q10880_TheLastOneStanding;
import quests.not_done.Q10881_ForThePride; import quests.not_done.Q10881_ForThePride;
import quests.not_done.Q10882_VictoryCollection; import quests.not_done.Q10882_VictoryCollection;
import quests.not_done.Q10883_ImmortalHonor; import quests.not_done.Q10883_ImmortalHonor;
@ -610,7 +610,7 @@ public class QuestMasterHandler
Q10876_LeadersGrace.class, Q10876_LeadersGrace.class,
Q10877_BreakThroughCrisis.class, // TODO: Not done. Q10877_BreakThroughCrisis.class, // TODO: Not done.
Q10879_ExaltedGuideToPower.class, Q10879_ExaltedGuideToPower.class,
Q10880_TheLastOneStanding.class, // TODO: Not done. Q10880_TheLastOneStanding.class,
Q10881_ForThePride.class, // TODO: Not done. Q10881_ForThePride.class, // TODO: Not done.
Q10882_VictoryCollection.class, // TODO: Not done. Q10882_VictoryCollection.class, // TODO: Not done.
Q10883_ImmortalHonor.class, // TODO: Not done. Q10883_ImmortalHonor.class, // TODO: Not done.

View File

@ -1,36 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package quests.not_done;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.quest.Quest;
/**
* @author Mobius
*/
public class Q10880_TheLastOneStanding extends Quest
{
private static final int START_NPC = 34055;
public Q10880_TheLastOneStanding()
{
super(10880);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}