Addition of quest Revenge, One Step at a Time (10892).

Contributed by Dmitri.
This commit is contained in:
MobiusDevelopment 2020-01-14 10:32:04 +00:00
parent c9ff92f395
commit dd8abd6252
36 changed files with 756 additions and 114 deletions

View File

@ -201,5 +201,4 @@
10888 Savior's Path - Defeat the Embryo 10888 Savior's Path - Defeat the Embryo
10889 Savior's Path - Fallen Emperor's Throne 10889 Savior's Path - Fallen Emperor's Throne
10890 Savior's Path - Fall of Etina 10890 Savior's Path - Fall of Etina
10892 Revenge, One Step at a Time
10893 End of Twisted Fate 10893 End of Twisted Fate

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
Hey, this place is dangerous! You shouldn't be here.<br>
(Only characters above Lv. 103 and Blackbird Clan amity level 10 and above faction.)
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
That seal is something that only a few people can have. You must have been recognized by a member of the Blackbird clan.<br>
Am I right?<br><Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-02.htm">"I've met Elikia."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
Oh, Elikia? Then I know I can trust you.<br>
But... Did Elikia send you to bring me back? I can't just leave...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-04.htm">"What's the problem?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
A problem? Well, it might not be a problem really. I was captured by the Embryo, and was saved by the Aden Vanguard member, Eliyah. <br>
After I was recued, I've been trying to carry out Leona's mission. But it's been hard since the Embryo are getting stronger by the day. I haven't been able to recover fully.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-05.htm">"Go on."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
I know that Elikia is worried, but I must carry out Leona's mission. To do that, I have to recover as soon as possible and find out what the Embryo are up to. <br>
Can you buy me some time to recover and go kill <font color="LEVEL">250 Atelia Passionate Soldiers, Atelia Elite Captains, Atelia High Priests, Fortress Archons, and Atelia Flame Masters</font>?<br>
We should be able to keep the stronghold safe and I'll have more time to recover. I'm counting on you.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Leona Blackbird:<br>
This isn't enough. I need more time to recover. Can you kill <font color="LEVEL">250 Atelia Passionate Soldiers, Atelia Elite Captains, Atelia High Priests, Fortress Dark Wizards, Fortress Archons, and Atelia Flame Masters</font>? We need to make sure that they don't threaten the stronghold.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
Did you carry out my request?<br>
I think I'm recovering well.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-08.html">"Yes."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
Thank you. I haven't recovered completely, but I will have no problem carrying out Leona's mission.<br>
Did Elikia tell you to bring me back? I'm sorry, but I can't do that. I'll give you this letter though, so please take it to Elikia. I'm doing just fine. Thanks.
</body></html>

View File

@ -0,0 +1,215 @@
/*
* 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.Q10892_RevengeOneStepAtATime;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.enums.Faction;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Revenge, One Step at a Time (10892)
* @URL https://l2wiki.com/Revenge,_One_Step_at_a_Time
* @author Dmitri
*/
public class Q10892_RevengeOneStepAtATime extends Quest
{
// NPCs
private static final int LEONA = 34425; // Blackbird Clan Lord: Leona Blackbird
private static final int[] MONSTERS =
{
24144, // Death Rogue
24145, // Death Shooter
24146, // Death Warrior
24147, // Death Sorcerer
24148, // Death Pondus
24149, // Devil Nightmare
24150, // Devil Warrior
24151, // Devil Guardian
24152, // Devil Sinist
24153, // Devil Varos
24154, // Demonic Wizard
24155, // Demonic Warrior
24156, // Demonic Archer
24157, // Demonic Keras
24158, // Demonic Weiss
24159, // Atelia Yuyurina
24160 // Atelia Popobena
};
private static final int[] GUARDIAN =
{
24161, // Harke
24162, // Ergalion
24163 // Spira
};
// Reward
private static final int RUNE_STONE = 39738;
private static final int ELCYUM_CRYSTAL = 36514;
// Misc
private static final int MIN_LEVEL = 103;
public Q10892_RevengeOneStepAtATime()
{
super(10892);
addStartNpc(LEONA);
addTalkId(LEONA);
addKillId(MONSTERS);
addKillId(GUARDIAN);
addCondMinLevel(MIN_LEVEL, "34425-00.htm");
addFactionLevel(Faction.BLACKBIRD_CLAN, 10, "34425-00.htm");
}
@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 "34425-02.htm":
case "34425-04.htm":
{
htmltext = event;
break;
}
case "34425-05.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34425-08.html":
{
giveItems(player, ELCYUM_CRYSTAL, 3);
giveItems(player, RUNE_STONE, 1);
addExpAndSp(player, 543832495200L, 543832200);
qs.exitQuest(false, true);
htmltext = event;
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() == LEONA)
{
htmltext = "34425-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case LEONA:
{
if (qs.isCond(1))
{
htmltext = "34425-06.html";
}
else
{
htmltext = "34425-07.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
int killedMonsters = qs.getInt("killed_" + MONSTERS[0]);
int killedGuardian = qs.getInt("killed_" + GUARDIAN[0]);
if (CommonUtil.contains(MONSTERS, npc.getId()))
{
if (killedMonsters < 1000)
{
killedMonsters++;
qs.set("killed_" + MONSTERS[0], killedMonsters);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
}
else if (CommonUtil.contains(GUARDIAN, npc.getId()))
{
if (killedGuardian < 1)
{
killedGuardian++;
qs.set("killed_" + GUARDIAN[0], killedGuardian);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
}
if ((killedMonsters == 1000) && (killedGuardian == 1))
{
qs.setCond(2, true);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isStarted() && qs.isCond(1))
{
final Set<NpcLogListHolder> npcLogList = new HashSet<>(2);
npcLogList.add(new NpcLogListHolder(MONSTERS[0], false, qs.getInt("killed_" + MONSTERS[0])));
npcLogList.add(new NpcLogListHolder(GUARDIAN[0], false, qs.getInt("killed_" + GUARDIAN[0])));
return npcLogList;
}
return super.getNpcLogList(player);
}
}

View File

@ -448,6 +448,7 @@ import quests.Q10852_TheMotherTreeRevivalProject.Q10852_TheMotherTreeRevivalProj
import quests.Q10856_SuperionAppears.Q10856_SuperionAppears; import quests.Q10856_SuperionAppears.Q10856_SuperionAppears;
import quests.Q10857_SecretTeleport.Q10857_SecretTeleport; import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace; import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange; import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange;
import quests.custom.Q00590_ToEachTheirOwn.Q00590_ToEachTheirOwn; import quests.custom.Q00590_ToEachTheirOwn.Q00590_ToEachTheirOwn;
import quests.not_done.*; import quests.not_done.*;
@ -1005,7 +1006,7 @@ public class QuestMasterHandler
Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done. Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done.
Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done. Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done.
Q10891_AtANewPlace.class, Q10891_AtANewPlace.class,
Q10892_RevengeOneStepAtATime.class, // TODO: Not done. Q10892_RevengeOneStepAtATime.class,
Q10893_EndOfTwistedFate.class, // TODO: Not done. Q10893_EndOfTwistedFate.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 Q10892_RevengeOneStepAtATime extends Quest
{
private static final int START_NPC = 34425;
public Q10892_RevengeOneStepAtATime()
{
super(10892);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -209,7 +209,6 @@
10888 Savior's Path - Defeat the Embryo 10888 Savior's Path - Defeat the Embryo
10889 Savior's Path - Fallen Emperor's Throne 10889 Savior's Path - Fallen Emperor's Throne
10890 Savior's Path - Fall of Etina 10890 Savior's Path - Fall of Etina
10892 Revenge, One Step at a Time
10893 End of Twisted Fate 10893 End of Twisted Fate
10895 Restrain Queen Krosha 10895 Restrain Queen Krosha
10896 Visit the Adventure Guild 10896 Visit the Adventure Guild

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
Hey, this place is dangerous! You shouldn't be here.<br>
(Only characters above Lv. 103 and Blackbird Clan amity level 10 and above faction.)
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
That seal is something that only a few people can have. You must have been recognized by a member of the Blackbird clan.<br>
Am I right?<br><Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-02.htm">"I've met Elikia."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
Oh, Elikia? Then I know I can trust you.<br>
But... Did Elikia send you to bring me back? I can't just leave...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-04.htm">"What's the problem?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
A problem? Well, it might not be a problem really. I was captured by the Embryo, and was saved by the Aden Vanguard member, Eliyah. <br>
After I was recued, I've been trying to carry out Leona's mission. But it's been hard since the Embryo are getting stronger by the day. I haven't been able to recover fully.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-05.htm">"Go on."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
I know that Elikia is worried, but I must carry out Leona's mission. To do that, I have to recover as soon as possible and find out what the Embryo are up to. <br>
Can you buy me some time to recover and go kill <font color="LEVEL">250 Atelia Passionate Soldiers, Atelia Elite Captains, Atelia High Priests, Fortress Archons, and Atelia Flame Masters</font>?<br>
We should be able to keep the stronghold safe and I'll have more time to recover. I'm counting on you.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Leona Blackbird:<br>
This isn't enough. I need more time to recover. Can you kill <font color="LEVEL">250 Atelia Passionate Soldiers, Atelia Elite Captains, Atelia High Priests, Fortress Dark Wizards, Fortress Archons, and Atelia Flame Masters</font>? We need to make sure that they don't threaten the stronghold.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
Did you carry out my request?<br>
I think I'm recovering well.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-08.html">"Yes."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
Thank you. I haven't recovered completely, but I will have no problem carrying out Leona's mission.<br>
Did Elikia tell you to bring me back? I'm sorry, but I can't do that. I'll give you this letter though, so please take it to Elikia. I'm doing just fine. Thanks.
</body></html>

View File

@ -0,0 +1,215 @@
/*
* 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.Q10892_RevengeOneStepAtATime;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.enums.Faction;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Revenge, One Step at a Time (10892)
* @URL https://l2wiki.com/Revenge,_One_Step_at_a_Time
* @author Dmitri
*/
public class Q10892_RevengeOneStepAtATime extends Quest
{
// NPCs
private static final int LEONA = 34425; // Blackbird Clan Lord: Leona Blackbird
private static final int[] MONSTERS =
{
24144, // Death Rogue
24145, // Death Shooter
24146, // Death Warrior
24147, // Death Sorcerer
24148, // Death Pondus
24149, // Devil Nightmare
24150, // Devil Warrior
24151, // Devil Guardian
24152, // Devil Sinist
24153, // Devil Varos
24154, // Demonic Wizard
24155, // Demonic Warrior
24156, // Demonic Archer
24157, // Demonic Keras
24158, // Demonic Weiss
24159, // Atelia Yuyurina
24160 // Atelia Popobena
};
private static final int[] GUARDIAN =
{
24161, // Harke
24162, // Ergalion
24163 // Spira
};
// Reward
private static final int RUNE_STONE = 39738;
private static final int ELCYUM_CRYSTAL = 36514;
// Misc
private static final int MIN_LEVEL = 103;
public Q10892_RevengeOneStepAtATime()
{
super(10892);
addStartNpc(LEONA);
addTalkId(LEONA);
addKillId(MONSTERS);
addKillId(GUARDIAN);
addCondMinLevel(MIN_LEVEL, "34425-00.htm");
addFactionLevel(Faction.BLACKBIRD_CLAN, 10, "34425-00.htm");
}
@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 "34425-02.htm":
case "34425-04.htm":
{
htmltext = event;
break;
}
case "34425-05.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34425-08.html":
{
giveItems(player, ELCYUM_CRYSTAL, 3);
giveItems(player, RUNE_STONE, 1);
addExpAndSp(player, 543832495200L, 543832200);
qs.exitQuest(false, true);
htmltext = event;
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() == LEONA)
{
htmltext = "34425-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case LEONA:
{
if (qs.isCond(1))
{
htmltext = "34425-06.html";
}
else
{
htmltext = "34425-07.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
int killedMonsters = qs.getInt("killed_" + MONSTERS[0]);
int killedGuardian = qs.getInt("killed_" + GUARDIAN[0]);
if (CommonUtil.contains(MONSTERS, npc.getId()))
{
if (killedMonsters < 1000)
{
killedMonsters++;
qs.set("killed_" + MONSTERS[0], killedMonsters);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
}
else if (CommonUtil.contains(GUARDIAN, npc.getId()))
{
if (killedGuardian < 1)
{
killedGuardian++;
qs.set("killed_" + GUARDIAN[0], killedGuardian);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
}
if ((killedMonsters == 1000) && (killedGuardian == 1))
{
qs.setCond(2, true);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isStarted() && qs.isCond(1))
{
final Set<NpcLogListHolder> npcLogList = new HashSet<>(2);
npcLogList.add(new NpcLogListHolder(MONSTERS[0], false, qs.getInt("killed_" + MONSTERS[0])));
npcLogList.add(new NpcLogListHolder(GUARDIAN[0], false, qs.getInt("killed_" + GUARDIAN[0])));
return npcLogList;
}
return super.getNpcLogList(player);
}
}

View File

@ -447,6 +447,7 @@ import quests.Q10852_TheMotherTreeRevivalProject.Q10852_TheMotherTreeRevivalProj
import quests.Q10856_SuperionAppears.Q10856_SuperionAppears; import quests.Q10856_SuperionAppears.Q10856_SuperionAppears;
import quests.Q10857_SecretTeleport.Q10857_SecretTeleport; import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace; import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.custom.Q00529_RegularBarrierMaintenance.Q00529_RegularBarrierMaintenance; import quests.custom.Q00529_RegularBarrierMaintenance.Q00529_RegularBarrierMaintenance;
import quests.custom.Q00560_HowToOvercomeFear.Q00560_HowToOvercomeFear; import quests.custom.Q00560_HowToOvercomeFear.Q00560_HowToOvercomeFear;
import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange; import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange;
@ -1027,7 +1028,7 @@ public class QuestMasterHandler
Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done. Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done.
Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done. Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done.
Q10891_AtANewPlace.class, Q10891_AtANewPlace.class,
Q10892_RevengeOneStepAtATime.class, // TODO: Not done. Q10892_RevengeOneStepAtATime.class,
Q10893_EndOfTwistedFate.class, // TODO: Not done. Q10893_EndOfTwistedFate.class, // TODO: Not done.
Q10895_RestrainQueenKrosha.class, // TODO: Not done. Q10895_RestrainQueenKrosha.class, // TODO: Not done.
Q10896_VisitTheAdventureGuild.class, // TODO: Not done. Q10896_VisitTheAdventureGuild.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 Q10892_RevengeOneStepAtATime extends Quest
{
private static final int START_NPC = 34425;
public Q10892_RevengeOneStepAtATime()
{
super(10892);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}

View File

@ -195,7 +195,6 @@
10888 Savior's Path - Defeat the Embryo 10888 Savior's Path - Defeat the Embryo
10889 Savior's Path - Fallen Emperor's Throne 10889 Savior's Path - Fallen Emperor's Throne
10890 Savior's Path - Fall of Etina 10890 Savior's Path - Fall of Etina
10892 Revenge, One Step at a Time
10893 End of Twisted Fate 10893 End of Twisted Fate
10896 Visit the Adventure Guild 10896 Visit the Adventure Guild
10897 Show Your Ability 10897 Show Your Ability

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
Hey, this place is dangerous! You shouldn't be here.<br>
(Only characters above Lv. 103 and Blackbird Clan amity level 10 and above faction.)
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
That seal is something that only a few people can have. You must have been recognized by a member of the Blackbird clan.<br>
Am I right?<br><Button ALIGN=LEFT ICON="Normal" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-02.htm">"I've met Elikia."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
Oh, Elikia? Then I know I can trust you.<br>
But... Did Elikia send you to bring me back? I can't just leave...<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-04.htm">"What's the problem?"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
A problem? Well, it might not be a problem really. I was captured by the Embryo, and was saved by the Aden Vanguard member, Eliyah. <br>
After I was recued, I've been trying to carry out Leona's mission. But it's been hard since the Embryo are getting stronger by the day. I haven't been able to recover fully.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-05.htm">"Go on."</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
I know that Elikia is worried, but I must carry out Leona's mission. To do that, I have to recover as soon as possible and find out what the Embryo are up to. <br>
Can you buy me some time to recover and go kill <font color="LEVEL">250 Atelia Passionate Soldiers, Atelia Elite Captains, Atelia High Priests, Fortress Archons, and Atelia Flame Masters</font>?<br>
We should be able to keep the stronghold safe and I'll have more time to recover. I'm counting on you.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Leona Blackbird:<br>
This isn't enough. I need more time to recover. Can you kill <font color="LEVEL">250 Atelia Passionate Soldiers, Atelia Elite Captains, Atelia High Priests, Fortress Dark Wizards, Fortress Archons, and Atelia Flame Masters</font>? We need to make sure that they don't threaten the stronghold.
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Leona Blackbird:<br>
Did you carry out my request?<br>
I think I'm recovering well.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10892_RevengeOneStepAtATime 34425-08.html">"Yes."</Button>
</body></html>

View File

@ -0,0 +1,4 @@
<html><body>Leona Blackbird:<br>
Thank you. I haven't recovered completely, but I will have no problem carrying out Leona's mission.<br>
Did Elikia tell you to bring me back? I'm sorry, but I can't do that. I'll give you this letter though, so please take it to Elikia. I'm doing just fine. Thanks.
</body></html>

View File

@ -0,0 +1,215 @@
/*
* 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.Q10892_RevengeOneStepAtATime;
import java.util.HashSet;
import java.util.Set;
import org.l2jmobius.commons.util.CommonUtil;
import org.l2jmobius.gameserver.enums.Faction;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
/**
* Revenge, One Step at a Time (10892)
* @URL https://l2wiki.com/Revenge,_One_Step_at_a_Time
* @author Dmitri
*/
public class Q10892_RevengeOneStepAtATime extends Quest
{
// NPCs
private static final int LEONA = 34425; // Blackbird Clan Lord: Leona Blackbird
private static final int[] MONSTERS =
{
24144, // Death Rogue
24145, // Death Shooter
24146, // Death Warrior
24147, // Death Sorcerer
24148, // Death Pondus
24149, // Devil Nightmare
24150, // Devil Warrior
24151, // Devil Guardian
24152, // Devil Sinist
24153, // Devil Varos
24154, // Demonic Wizard
24155, // Demonic Warrior
24156, // Demonic Archer
24157, // Demonic Keras
24158, // Demonic Weiss
24159, // Atelia Yuyurina
24160 // Atelia Popobena
};
private static final int[] GUARDIAN =
{
24161, // Harke
24162, // Ergalion
24163 // Spira
};
// Reward
private static final int RUNE_STONE = 39738;
private static final int ELCYUM_CRYSTAL = 36514;
// Misc
private static final int MIN_LEVEL = 103;
public Q10892_RevengeOneStepAtATime()
{
super(10892);
addStartNpc(LEONA);
addTalkId(LEONA);
addKillId(MONSTERS);
addKillId(GUARDIAN);
addCondMinLevel(MIN_LEVEL, "34425-00.htm");
addFactionLevel(Faction.BLACKBIRD_CLAN, 10, "34425-00.htm");
}
@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 "34425-02.htm":
case "34425-04.htm":
{
htmltext = event;
break;
}
case "34425-05.htm":
{
qs.startQuest();
htmltext = event;
break;
}
case "34425-08.html":
{
giveItems(player, ELCYUM_CRYSTAL, 3);
giveItems(player, RUNE_STONE, 1);
addExpAndSp(player, 543832495200L, 543832200);
qs.exitQuest(false, true);
htmltext = event;
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() == LEONA)
{
htmltext = "34425-01.htm";
}
break;
}
case State.STARTED:
{
switch (npc.getId())
{
case LEONA:
{
if (qs.isCond(1))
{
htmltext = "34425-06.html";
}
else
{
htmltext = "34425-07.html";
}
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
int killedMonsters = qs.getInt("killed_" + MONSTERS[0]);
int killedGuardian = qs.getInt("killed_" + GUARDIAN[0]);
if (CommonUtil.contains(MONSTERS, npc.getId()))
{
if (killedMonsters < 1000)
{
killedMonsters++;
qs.set("killed_" + MONSTERS[0], killedMonsters);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
}
else if (CommonUtil.contains(GUARDIAN, npc.getId()))
{
if (killedGuardian < 1)
{
killedGuardian++;
qs.set("killed_" + GUARDIAN[0], killedGuardian);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
}
}
if ((killedMonsters == 1000) && (killedGuardian == 1))
{
qs.setCond(2, true);
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public Set<NpcLogListHolder> getNpcLogList(PlayerInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isStarted() && qs.isCond(1))
{
final Set<NpcLogListHolder> npcLogList = new HashSet<>(2);
npcLogList.add(new NpcLogListHolder(MONSTERS[0], false, qs.getInt("killed_" + MONSTERS[0])));
npcLogList.add(new NpcLogListHolder(GUARDIAN[0], false, qs.getInt("killed_" + GUARDIAN[0])));
return npcLogList;
}
return super.getNpcLogList(player);
}
}

View File

@ -192,6 +192,7 @@ import quests.Q10852_TheMotherTreeRevivalProject.Q10852_TheMotherTreeRevivalProj
import quests.Q10856_SuperionAppears.Q10856_SuperionAppears; import quests.Q10856_SuperionAppears.Q10856_SuperionAppears;
import quests.Q10857_SecretTeleport.Q10857_SecretTeleport; import quests.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace; import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving; import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
import quests.Q11026_PathOfDestinyConviction.Q11026_PathOfDestinyConviction; import quests.Q11026_PathOfDestinyConviction.Q11026_PathOfDestinyConviction;
import quests.Q11027_PathOfDestinyOvercome.Q11027_PathOfDestinyOvercome; import quests.Q11027_PathOfDestinyOvercome.Q11027_PathOfDestinyOvercome;
@ -517,7 +518,7 @@ public class QuestMasterHandler
Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done. Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done.
Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done. Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done.
Q10891_AtANewPlace.class, Q10891_AtANewPlace.class,
Q10892_RevengeOneStepAtATime.class, // TODO: Not done. Q10892_RevengeOneStepAtATime.class,
Q10893_EndOfTwistedFate.class, // TODO: Not done. Q10893_EndOfTwistedFate.class, // TODO: Not done.
Q10896_VisitTheAdventureGuild.class, // TODO: Not done. Q10896_VisitTheAdventureGuild.class, // TODO: Not done.
Q10897_ShowYourAbility.class, // TODO: Not done. Q10897_ShowYourAbility.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 Q10892_RevengeOneStepAtATime extends Quest
{
private static final int START_NPC = 34425;
public Q10892_RevengeOneStepAtATime()
{
super(10892);
addStartNpc(START_NPC);
addTalkId(START_NPC);
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
}
}