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
10889 Savior's Path - Fallen Emperor's Throne
10890 Savior's Path - Fall of Etina
10892 Revenge, One Step at a Time
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.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange;
import quests.custom.Q00590_ToEachTheirOwn.Q00590_ToEachTheirOwn;
import quests.not_done.*;
@ -1005,7 +1006,7 @@ public class QuestMasterHandler
Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done.
Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done.
Q10891_AtANewPlace.class,
Q10892_RevengeOneStepAtATime.class, // TODO: Not done.
Q10892_RevengeOneStepAtATime.class,
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
10889 Savior's Path - Fallen Emperor's Throne
10890 Savior's Path - Fall of Etina
10892 Revenge, One Step at a Time
10893 End of Twisted Fate
10895 Restrain Queen Krosha
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.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.custom.Q00529_RegularBarrierMaintenance.Q00529_RegularBarrierMaintenance;
import quests.custom.Q00560_HowToOvercomeFear.Q00560_HowToOvercomeFear;
import quests.custom.Q00589_ASecretChange.Q00589_ASecretChange;
@ -1027,7 +1028,7 @@ public class QuestMasterHandler
Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done.
Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done.
Q10891_AtANewPlace.class,
Q10892_RevengeOneStepAtATime.class, // TODO: Not done.
Q10892_RevengeOneStepAtATime.class,
Q10893_EndOfTwistedFate.class, // TODO: Not done.
Q10895_RestrainQueenKrosha.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
10889 Savior's Path - Fallen Emperor's Throne
10890 Savior's Path - Fall of Etina
10892 Revenge, One Step at a Time
10893 End of Twisted Fate
10896 Visit the Adventure Guild
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.Q10857_SecretTeleport.Q10857_SecretTeleport;
import quests.Q10891_AtANewPlace.Q10891_AtANewPlace;
import quests.Q10892_RevengeOneStepAtATime.Q10892_RevengeOneStepAtATime;
import quests.Q11025_PathOfDestinyProving.Q11025_PathOfDestinyProving;
import quests.Q11026_PathOfDestinyConviction.Q11026_PathOfDestinyConviction;
import quests.Q11027_PathOfDestinyOvercome.Q11027_PathOfDestinyOvercome;
@ -517,7 +518,7 @@ public class QuestMasterHandler
Q10889_SaviorsPathFallenEmperorsThrone.class, // TODO: Not done.
Q10890_SaviorsPathFallOfEtina.class, // TODO: Not done.
Q10891_AtANewPlace.class,
Q10892_RevengeOneStepAtATime.class, // TODO: Not done.
Q10892_RevengeOneStepAtATime.class,
Q10893_EndOfTwistedFate.class, // TODO: Not done.
Q10896_VisitTheAdventureGuild.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));
}
}