Exalted quests rework.

Contributed by Sero.
This commit is contained in:
MobiusDevelopment
2020-12-13 23:26:35 +00:00
parent f1d4109ec5
commit a9894131b7
10 changed files with 613 additions and 91 deletions

View File

@@ -23,6 +23,7 @@ import org.l2jmobius.gameserver.enums.QuestType;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder; import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState; import org.l2jmobius.gameserver.model.quest.QuestState;
@@ -51,6 +52,7 @@ public class Q10589_WhereFatesIntersect extends Quest
}; };
// Item // Item
private static final int MONSTER_DROP = 80853; // Undead Blood private static final int MONSTER_DROP = 80853; // Undead Blood
private static final ItemHolder SOE_HERPHAH = new ItemHolder(80857, 1); // Scroll of Escape: Herphah
// Misc // Misc
private static final int REQUIRED_DROP_COUNT = 200; private static final int REQUIRED_DROP_COUNT = 200;
private static final int KILLING_NPCSTRING_ID1 = NpcStringId.LV_85_WHERE_FATES_INTERSECT_IN_PROGRESS.getId(); private static final int KILLING_NPCSTRING_ID1 = NpcStringId.LV_85_WHERE_FATES_INTERSECT_IN_PROGRESS.getId();
@@ -90,13 +92,13 @@ public class Q10589_WhereFatesIntersect extends Quest
String htmltext = null; String htmltext = null;
switch (event) switch (event)
{ {
case "34505-01.htm": // TARTI case "34505-01.htm":
case "34505-02.htm": case "34505-02.htm":
case "34505-04.html": case "34505-04.html":
case "34362-02.html": // HERPHAH case "34362-02.html":
case "34362-05.html": case "34362-05.html":
case "30137-02.html": // VOLLODOS case "30137-02.html":
case "34513-02.html": // JOACHIM case "34513-02.html":
{ {
htmltext = event; htmltext = event;
break; break;
@@ -252,6 +254,7 @@ public class Q10589_WhereFatesIntersect extends Quest
giveItemRandomly(player, npc, MONSTER_DROP, 1, REQUIRED_DROP_COUNT, 1, true); giveItemRandomly(player, npc, MONSTER_DROP, 1, REQUIRED_DROP_COUNT, 1, true);
if ((getQuestItemsCount(player, MONSTER_DROP) >= REQUIRED_DROP_COUNT) && (player.getLevel() >= 95)) if ((getQuestItemsCount(player, MONSTER_DROP) >= REQUIRED_DROP_COUNT) && (player.getLevel() >= 95))
{ {
giveItems(killer, SOE_HERPHAH);
qs.setCond(FINISH_COND, true); qs.setCond(FINISH_COND, true);
} }

View File

@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder; import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState; import org.l2jmobius.gameserver.model.quest.QuestState;
@@ -56,6 +57,7 @@ public class Q10590_ReawakenedFate extends Quest
}; };
// Item // Item
private static final int VAMPIRE_ICHOR = 80854; // Vampire Ichor - monster drop private static final int VAMPIRE_ICHOR = 80854; // Vampire Ichor - monster drop
private static final ItemHolder SOE_JOACHIM = new ItemHolder(80858, 1);
// Rewards // Rewards
private static final int ACHIEVEMENT_BOX = 80909; private static final int ACHIEVEMENT_BOX = 80909;
private static final int RUBIN_LV2 = 38856; private static final int RUBIN_LV2 = 38856;
@@ -293,6 +295,7 @@ public class Q10590_ReawakenedFate extends Quest
if ((getQuestItemsCount(player, VAMPIRE_ICHOR) >= 500) && (player.getLevel() >= 99)) if ((getQuestItemsCount(player, VAMPIRE_ICHOR) >= 500) && (player.getLevel() >= 99))
{ {
qs.setCond(3, true); qs.setCond(3, true);
giveItems(player, SOE_JOACHIM);
} }
sendNpcLogList(player); sendNpcLogList(player);
} }

View File

@@ -21,10 +21,10 @@ import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; 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.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState; import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State; import org.l2jmobius.gameserver.model.quest.State;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.network.NpcStringId; import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage; import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.util.Util; import org.l2jmobius.gameserver.util.Util;
@@ -101,7 +101,7 @@ public class Q10591_NobleMaterial extends Quest
{ {
case "34513-02.htm": case "34513-02.htm":
case "34513-07.html": case "34513-07.html":
case "34513-04.html": case "34513-04.htm":
case "34014-03.html": case "34014-03.html":
case "34362-03.html": case "34362-03.html":
case "33907-03.html": case "33907-03.html":

View File

@@ -16,7 +16,12 @@
*/ */
package quests.Q10811_ExaltedOneWhoFacesTheLimit; package quests.Q10811_ExaltedOneWhoFacesTheLimit;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.data.xml.CategoryData;
import org.l2jmobius.gameserver.enums.CategoryType;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.Movie; import org.l2jmobius.gameserver.enums.Movie;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventType; import org.l2jmobius.gameserver.model.events.EventType;
@@ -34,30 +39,71 @@ import org.l2jmobius.gameserver.model.quest.State;
*/ */
public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
{ {
// Npc // NPC
private static final int LIONEL = 33907; private static final int LIONEL = 33907;
// Items // Items
private static final int LIONEL_HUNTER_MISSING_LIST = 45627; private static final int LIONEL_HUNTER_MISSING_LIST = 45627;
private static final int ELIKIA_CERTIFICATE = 45623; private static final int SLAYERS_PROOF = 45871;
private static final int MYSTERIOUS_BUTLER_CERTIFICATE = 45624;
private static final int SIR_ERIC_RODEMAI_CERTIFICATE = 45626;
private static final int GALLADUCI_RODEMAI_CERTIFICATE = 45625;
private static final int SPELLBOOK_DIGNITY_OF_THE_EXALTED = 45922;
// Misc // Misc
private static final int MIN_LEVEL = 99; private static final int MIN_LEVEL = 100;
private static final int MIN_COMPLETE_LEVEL = 101;
private static final int SLAYERS_PROOF_NEEDED = 40000;
// Reward
private static final int SPELLBOOK_DIGNITY_OF_THE_EXALTED = 45922;
private static final int EXATLED_HEAVY_ARMOR_PACK = 81203;
private static final int EXATLED_LIGHT_ARMOR_PACK = 81204;
private static final int EXATLED_ROBE_PACK = 81205;
private static final int FIRST_EXALTED_QUEST_REWARD_PHYSICAL = 81207;
private static final int FIRST_EXALTED_QUEST_REWARD_MAGIC = 81208;
private static final int EXALTED_CUTTER = 81157;
private static final int EXALTED_SLASHER = 81158;
private static final int EXALTED_AVENGER = 81159;
private static final int EXALTED_FIGHTER = 81160;
private static final int EXALTED_STROMER = 81161;
private static final int EXALTED_THROWER = 81162;
private static final int EXALTED_SHOOTER = 81163;
private static final int EXALTED_BUSTER = 81164;
private static final int EXALTED_CASTER = 81165;
// private static final int EXALTED_RETIBUTER = 81166;
private static final int EXALTED_DUAL_SWORDS = 81167;
private static final int EXALTED_DUAL_DAGGERS = 81168;
// Monsters
private static final int[] MONSTERS =
{
// Hellbound monsters
23811, // Cantera Tanya
23812, // Cantera Deathmoz
23813, // Cantera Floxis
23814, // Cantera Belika
23815, // Cantera Bridget
23354, // Decay Hannibal
23355, // Armor Beast
23356, // Klein Soldier
23357, // Disorder Warrior
23360, // Bizuard
23361, // Mutated Fly
24511, // Lunatikan
24515, // Kandiloth
24512, // Garion Neti
24513, // Desert Wendigo
24514, // Koraza
};
public Q10811_ExaltedOneWhoFacesTheLimit() public Q10811_ExaltedOneWhoFacesTheLimit()
{ {
super(10811); super(10811);
addStartNpc(LIONEL); addStartNpc(LIONEL);
addTalkId(LIONEL); addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "33907-07.html"); addCondMinLevel(MIN_LEVEL, "33907-07.html");
registerQuestItems(LIONEL_HUNTER_MISSING_LIST, ELIKIA_CERTIFICATE, MYSTERIOUS_BUTLER_CERTIFICATE, SIR_ERIC_RODEMAI_CERTIFICATE, GALLADUCI_RODEMAI_CERTIFICATE); registerQuestItems(LIONEL_HUNTER_MISSING_LIST, SLAYERS_PROOF);
} }
@Override @Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player) public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{ {
final Race race = player.getRace();
final ClassId classId = player.getClassId();
final QuestState qs = getQuestState(player, false); final QuestState qs = getQuestState(player, false);
if (qs == null) if (qs == null)
{ {
@@ -91,18 +137,138 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
if (qs.isCond(3)) if (qs.isCond(3))
{ {
giveItems(player, SPELLBOOK_DIGNITY_OF_THE_EXALTED, 1); giveItems(player, SPELLBOOK_DIGNITY_OF_THE_EXALTED, 1);
switch (race)
{
case HUMAN:
case ELF:
case DARK_ELF:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_FEOH_GROUP, classId.getId()) || (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_WYNN_GROUP, classId.getId())))
{
giveItems(player, EXALTED_BUSTER, 1);
giveItems(player, EXATLED_ROBE_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_MAGIC, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_EOLH_GROUP, classId.getId()))
{
giveItems(player, EXALTED_CASTER, 1);
giveItems(player, EXATLED_ROBE_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_MAGIC, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_OTHEL_GROUP, classId.getId()))
{
giveItems(player, EXALTED_DUAL_DAGGERS, 1);
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_YR_GROUP, classId.getId()))
{
giveItems(player, EXALTED_THROWER, 1);
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_IS_GROUP, classId.getId()) || (player.getClassId() == ClassId.TYRR_DUELIST))
{
giveItems(player, EXALTED_DUAL_SWORDS, 1);
giveItems(player, EXATLED_HEAVY_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else if (player.getClassId() == ClassId.TYRR_DREADNOUGHT)
{
giveItems(player, EXALTED_STROMER, 1);
giveItems(player, EXATLED_HEAVY_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_SIGEL_GROUP, classId.getId()))
{
giveItems(player, EXALTED_CUTTER, 1);
giveItems(player, EXATLED_HEAVY_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
break;
}
case DWARF:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_OTHEL_GROUP, classId.getId()))
{
giveItems(player, EXALTED_DUAL_DAGGERS, 1);
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else
{
giveItems(player, EXALTED_AVENGER, 1);
giveItems(player, EXATLED_HEAVY_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
break;
}
case ORC:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_IS_GROUP, classId.getId()))
{
giveItems(player, EXALTED_DUAL_SWORDS, 1);
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else if (player.getClassId() == ClassId.TYRR_GRAND_KHAVATARI)
{
giveItems(player, EXALTED_FIGHTER, 1);
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else if (player.getClassId() == ClassId.TYRR_TITAN)
{
giveItems(player, EXALTED_SLASHER, 1);
giveItems(player, EXATLED_HEAVY_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
break;
}
case KAMAEL:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_FEOH_GROUP, classId.getId()))
{
giveItems(player, EXALTED_BUSTER, 1);
giveItems(player, EXATLED_ROBE_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_MAGIC, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_YR_GROUP, classId.getId()))
{
giveItems(player, EXALTED_SHOOTER, 1);
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
else
{
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
break;
}
break;
}
case ERTHEIA:
{
if (player.isMageClass())
{
giveItems(player, EXATLED_ROBE_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_MAGIC, 1);
}
else
{
giveItems(player, EXALTED_SLASHER, 1);
giveItems(player, EXATLED_LIGHT_ARMOR_PACK, 1);
giveItems(player, FIRST_EXALTED_QUEST_REWARD_PHYSICAL, 1);
}
break;
}
}
qs.exitQuest(false, true); qs.exitQuest(false, true);
htmltext = event; htmltext = event;
} }
break; break;
} }
case "SUBQUEST_FINISHED_NOTIFY":
{
if (hasQuestItems(player, ELIKIA_CERTIFICATE, MYSTERIOUS_BUTLER_CERTIFICATE, SIR_ERIC_RODEMAI_CERTIFICATE, GALLADUCI_RODEMAI_CERTIFICATE) && (player.getAbilityPointsUsed() >= 16))
{
qs.setCond(3, true);
}
}
} }
return htmltext; return htmltext;
} }
@@ -144,6 +310,30 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
return htmltext; 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) && qs.isCond(2) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
if (getQuestItemsCount(player, SLAYERS_PROOF) < SLAYERS_PROOF_NEEDED)
{
giveItemRandomly(player, SLAYERS_PROOF, 1, SLAYERS_PROOF_NEEDED, 1, true);
}
if ((getQuestItemsCount(player, SLAYERS_PROOF) >= SLAYERS_PROOF_NEEDED) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
qs.setCond(3, true);
}
}
}
@RegisterEvent(EventType.ON_PLAYER_ABILITY_POINTS_CHANGED) @RegisterEvent(EventType.ON_PLAYER_ABILITY_POINTS_CHANGED)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
private void OnPlayerAbilityPointsChanged(OnPlayerAbilityPointsChanged event) private void OnPlayerAbilityPointsChanged(OnPlayerAbilityPointsChanged event)

View File

@@ -16,6 +16,11 @@
*/ */
package quests.Q10817_ExaltedOneWhoOvercomesTheLimit; package quests.Q10817_ExaltedOneWhoOvercomesTheLimit;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.data.xml.CategoryData;
import org.l2jmobius.gameserver.enums.CategoryType;
import org.l2jmobius.gameserver.enums.ClassId;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,32 +39,58 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
// NPC // NPC
private static final int LIONEL = 33907; private static final int LIONEL = 33907;
// Items // Items
private static final int DAICHIR_SERTIFICATE = 45628; private static final int PROOF_OF_RESISTANCE = 80823;
private static final int OLYMPIAD_MANAGER_CERTIFICATE = 45629;
private static final int ISHUMA_CERTIFICATE = 45630;
private static final int SIR_KRISTOF_RODEMAI_CERTIFICATE = 45631;
private static final int LIONEL_MISSION_LIST_2 = 45632; private static final int LIONEL_MISSION_LIST_2 = 45632;
// Rewards // Rewards
private static final int SPELLBOOK_DIGNITY_OF_THE_EXALTED = 45923; private static final int SPELLBOOK_DIGNITY_OF_THE_EXALTED = 45923;
private static final int SPELLBOOK_BELIEF_OF_THE_EXALTED = 45925; private static final int SPELLBOOK_BELIEF_OF_THE_EXALTED = 45925;
private static final int SPELLBOOK_FAVOR_OF_THE_EXALTED = 45928;
private static final int EXALSTED_WEAPON_UPGRADE_STONE = 81200;
private static final int SECOND_EXALTED_QUEST_REWARD_P = 81209;
private static final int SECOND_EXALTED_QUEST_REWARD_M = 81210;
// Misc // Misc
private static final int MIN_LEVEL = 99; private static final int MIN_LEVEL = 101;
private static final int MIN_COMPLETE_LEVEL = 100; private static final int MIN_COMPLETE_LEVEL = 102;
private static final int PROOF_OF_RESISTANCE_NEEDED = 40000;
// Monsters
private static final int[] MONSTERS =
{
// Hellbound monsters
23811, // Cantera Tanya
23812, // Cantera Deathmoz
23813, // Cantera Floxis
23814, // Cantera Belika
23815, // Cantera Bridget
23354, // Decay Hannibal
23355, // Armor Beast
23356, // Klein Soldier
23357, // Disorder Warrior
23360, // Bizuard
23361, // Mutated Fly
24511, // Lunatikan
24515, // Kandiloth
24512, // Garion Neti
24513, // Desert Wendigo
24514, // Koraza
};
public Q10817_ExaltedOneWhoOvercomesTheLimit() public Q10817_ExaltedOneWhoOvercomesTheLimit()
{ {
super(10817); super(10817);
addStartNpc(LIONEL); addStartNpc(LIONEL);
addTalkId(LIONEL); addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "33907-07.html"); addCondMinLevel(MIN_LEVEL, "33907-07.html");
addCondCompletedQuest(Q10811_ExaltedOneWhoFacesTheLimit.class.getSimpleName(), "33907-02.html"); addCondCompletedQuest(Q10811_ExaltedOneWhoFacesTheLimit.class.getSimpleName(), "33907-02.html");
registerQuestItems(LIONEL_MISSION_LIST_2, DAICHIR_SERTIFICATE, OLYMPIAD_MANAGER_CERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE); registerQuestItems(LIONEL_MISSION_LIST_2, PROOF_OF_RESISTANCE_NEEDED);
} }
@Override @Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player) public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{ {
String htmltext = null; String htmltext = null;
final Race race = player.getRace();
final ClassId classId = player.getClassId();
final QuestState qs = getQuestState(player, false); final QuestState qs = getQuestState(player, false);
if (qs == null) if (qs == null)
{ {
@@ -86,10 +117,168 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
} }
case "33907-09.html": case "33907-09.html":
{ {
if (hasQuestItems(player, DAICHIR_SERTIFICATE, OLYMPIAD_MANAGER_CERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL)) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
giveItems(player, SPELLBOOK_DIGNITY_OF_THE_EXALTED, 1); giveItems(player, SPELLBOOK_DIGNITY_OF_THE_EXALTED, 1);
giveItems(player, SPELLBOOK_BELIEF_OF_THE_EXALTED, 1); giveItems(player, SPELLBOOK_BELIEF_OF_THE_EXALTED, 1);
giveItems(player, SPELLBOOK_FAVOR_OF_THE_EXALTED, 1);
giveItems(player, EXALSTED_WEAPON_UPGRADE_STONE, 1);
switch (race)
{
case HUMAN:
case ELF:
case DARK_ELF:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_FEOH_GROUP, classId.getId()) || (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_WYNN_GROUP, classId.getId())))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_M, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_EOLH_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_M, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_OTHEL_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_YR_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_IS_GROUP, classId.getId()) || (player.getClassId() == ClassId.TYRR_DUELIST))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (player.getClassId() == ClassId.TYRR_DREADNOUGHT)
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_SIGEL_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.DIVISION_WIZARD, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_M, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SUBJOB_GROUP_BOW, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SUBJOB_GROUP_DAGGER, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SUBJOB_GROUP_DANCE, classId.getId()) || (player.getClassId() == ClassId.GLADIATOR))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (player.getClassId() == ClassId.WARLORD)
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (player.getClassId() == ClassId.DUELIST)
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.TANKER_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.RECOM_WARRIOR_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
break;
}
case DWARF:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_OTHEL_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.DWARF_BOUNTY_CLASS, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
break;
}
case ORC:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_IS_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (player.getClassId() == ClassId.TYRR_GRAND_KHAVATARI)
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (player.getClassId() == ClassId.TYRR_TITAN)
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (player.isMageClass())
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.LIGHT_ARMOR_CLASS, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
break;
}
case KAMAEL:
{
if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_FEOH_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_M, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIXTH_YR_GROUP, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.DIVISION_WIZARD, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_M, 1);
}
else if (CategoryData.getInstance().isInCategory(CategoryType.DIVISION_ARCHER, classId.getId()))
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
else
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
break;
}
break;
}
case ERTHEIA:
{
if (player.isMageClass())
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_M, 1);
}
else
{
giveItems(player, SECOND_EXALTED_QUEST_REWARD_P, 1);
}
break;
}
}
qs.exitQuest(false, true); qs.exitQuest(false, true);
htmltext = event; htmltext = event;
} }
@@ -114,7 +303,7 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
} }
case State.STARTED: case State.STARTED:
{ {
if (hasQuestItems(player, DAICHIR_SERTIFICATE, OLYMPIAD_MANAGER_CERTIFICATE, ISHUMA_CERTIFICATE, SIR_KRISTOF_RODEMAI_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL)) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
htmltext = "33907-08.html"; htmltext = "33907-08.html";
} }
@@ -132,4 +321,29 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
} }
return htmltext; 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) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
if (getQuestItemsCount(player, PROOF_OF_RESISTANCE) < PROOF_OF_RESISTANCE_NEEDED)
{
giveItemRandomly(player, PROOF_OF_RESISTANCE, 1, PROOF_OF_RESISTANCE_NEEDED, 1, true);
}
if ((getQuestItemsCount(player, PROOF_OF_RESISTANCE) >= PROOF_OF_RESISTANCE_NEEDED) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
qs.setCond(2, true);
}
}
}
} }

View File

@@ -16,6 +16,7 @@
*/ */
package quests.Q10823_ExaltedOneWhoShattersTheLimit; package quests.Q10823_ExaltedOneWhoShattersTheLimit;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,28 +35,51 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
// NPC // NPC
private static final int LIONEL = 33907; private static final int LIONEL = 33907;
// Items // Items
private static final int MERLOT_CERTIFICATE = 46056; private static final int PROOF_OF_PREPARATION = 80824;
private static final int KURTIZ_CERTIFICATE = 46057;
private static final int MAMMON_CERTIFICATE = 45635;
private static final int GUSTAV_CERTIFICATE = 45636;
private static final int LIONEL_MISSION_LIST_3 = 45637; private static final int LIONEL_MISSION_LIST_3 = 45637;
// Rewards // Rewards
private static final int EXALTED_CLOAK = 37763; private static final int EXALTED_CLOAK = 37763;
private static final int OBTAIN_EXALTED_STATUS = 45638; private static final int OBTAIN_EXALTED_STATUS = 45638;
private static final int EXALTED_TIARA = 45644; private static final int EXALTED_TIARA = 45644;
private static final int DIGNITY_OF_THE_EXALTED = 45924; private static final int DIGNITY_OF_THE_EXALTED = 45924;
private static final int BLESSING_OF_THE_EXALTED = 45926;
private static final int SUMMON_BATTLE_POTION = 45927;
private static final int FATE_OF_THE_EXALTED = 46036;
// Misc // Misc
private static final int MIN_LEVEL = 100; private static final int MIN_LEVEL = 102;
private static final int MIN_DUALCLASS_LEVEL = 100; private static final int MIN_COMPLETE_LEVEL = 103;
private static final int PROOF_OF_PREPARATION_NEEDED = 40000;
// Monsters
private static final int[] MONSTERS =
{
// Hellbound monsters
23811, // Cantera Tanya
23812, // Cantera Deathmoz
23813, // Cantera Floxis
23814, // Cantera Belika
23815, // Cantera Bridget
23354, // Decay Hannibal
23355, // Armor Beast
23356, // Klein Soldier
23357, // Disorder Warrior
23360, // Bizuard
23361, // Mutated Fly
24511, // Lunatikan
24515, // Kandiloth
24512, // Garion Neti
24513, // Desert Wendigo
24514, // Koraza
};
public Q10823_ExaltedOneWhoShattersTheLimit() public Q10823_ExaltedOneWhoShattersTheLimit()
{ {
super(10823); super(10823);
addStartNpc(LIONEL); addStartNpc(LIONEL);
addTalkId(LIONEL); addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "33907-07.html"); addCondMinLevel(MIN_LEVEL, "33907-07.html");
addCondCompletedQuest(Q10817_ExaltedOneWhoOvercomesTheLimit.class.getSimpleName(), "33907-02.html"); addCondCompletedQuest(Q10817_ExaltedOneWhoOvercomesTheLimit.class.getSimpleName(), "33907-02.html");
registerQuestItems(LIONEL_MISSION_LIST_3, MERLOT_CERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE); registerQuestItems(LIONEL_MISSION_LIST_3, PROOF_OF_PREPARATION);
} }
@Override @Override
@@ -88,12 +112,15 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
} }
case "33907-09.html": case "33907-09.html":
{ {
if (hasQuestItems(player, MERLOT_CERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE) && ((player.getDualClass() != null) && (player.getDualClass().getLevel() >= MIN_DUALCLASS_LEVEL))) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
giveItems(player, EXALTED_CLOAK, 1); giveItems(player, EXALTED_CLOAK, 1);
giveItems(player, OBTAIN_EXALTED_STATUS, 1); giveItems(player, OBTAIN_EXALTED_STATUS, 1);
giveItems(player, EXALTED_TIARA, 1); giveItems(player, EXALTED_TIARA, 1);
giveItems(player, DIGNITY_OF_THE_EXALTED, 1); giveItems(player, DIGNITY_OF_THE_EXALTED, 1);
giveItems(player, BLESSING_OF_THE_EXALTED, 1);
giveItems(player, SUMMON_BATTLE_POTION, 1);
giveItems(player, FATE_OF_THE_EXALTED, 1);
// Give Exalted status here? // Give Exalted status here?
// https://l2wiki.com/Noblesse // https://l2wiki.com/Noblesse
player.setNobleLevel(2); player.setNobleLevel(2);
@@ -122,7 +149,7 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
} }
case State.STARTED: case State.STARTED:
{ {
if (hasQuestItems(player, MERLOT_CERTIFICATE, KURTIZ_CERTIFICATE, MAMMON_CERTIFICATE, GUSTAV_CERTIFICATE) && ((player.getDualClass() != null) && (player.getDualClass().getLevel() >= MIN_DUALCLASS_LEVEL))) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
htmltext = "33907-08.html"; htmltext = "33907-08.html";
} }
@@ -140,4 +167,28 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
} }
return htmltext; 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) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
if (getQuestItemsCount(player, PROOF_OF_PREPARATION) < PROOF_OF_PREPARATION_NEEDED)
{
giveItemRandomly(player, PROOF_OF_PREPARATION, 1, PROOF_OF_PREPARATION_NEEDED, 1, true);
}
if ((getQuestItemsCount(player, PROOF_OF_PREPARATION) >= PROOF_OF_PREPARATION_NEEDED) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
qs.setCond(2, true);
}
}
}
} }

View File

@@ -2,8 +2,5 @@
I'll tell you about the fourth test.<br> I'll tell you about the fourth test.<br>
First, you must reach <font color="LEVEL">Lv. 104</font> to prove you are qualified to advance to the new stage. You must also pass the tests of the following people and receive their certificates.<br> First, you must reach <font color="LEVEL">Lv. 104</font> to prove you are qualified to advance to the new stage. You must also pass the tests of the following people and receive their certificates.<br>
Your testers include <font color="LEVEL">Commando Captain Sporcha</font> in the <font color="LEVEL">Hellbound Refugee Camp</font>, <font color="LEVEL">Giant Tracker Leader Krenaht</font> in the <font color="LEVEL">Giant's Cave</font>, <font color="LEVEL">Fishing Guild Leader Santiago</font> in <font color="LEVEL">Heine</font>, and <font color="LEVEL">Hunter's Guild President Arcturus</font> in the <font color="LEVEL">Hunter's Village</font>.<br><br><br> Your testers include <font color="LEVEL">Commando Captain Sporcha</font> in the <font color="LEVEL">Hellbound Refugee Camp</font>, <font color="LEVEL">Giant Tracker Leader Krenaht</font> in the <font color="LEVEL">Giant's Cave</font>, <font color="LEVEL">Fishing Guild Leader Santiago</font> in <font color="LEVEL">Heine</font>, and <font color="LEVEL">Hunter's Guild President Arcturus</font> in the <font color="LEVEL">Hunter's Village</font>.<br><br><br>
Only they know what they'll test you on, so go talk to them. If you forget who you must go to, refer to the guide I'll be giving you<br><br> Only they know what they'll test you on, so go talk to them. If you forget who you must go to, refer to the guide I'll be giving you.
All this can be substituted by completing a mission from <font color="LEVEL">High Priest Sylvain</font> in the <font color="LEVEL">Einhasad Temple</font> in the <font color="LEVEL">Town of Dion</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-05a.html">"I'll do that."</Button>
</body></html>
</body></html> </body></html>

View File

@@ -16,6 +16,7 @@
*/ */
package quests.Q10873_ExaltedReachingAnotherLevel; package quests.Q10873_ExaltedReachingAnotherLevel;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,26 +35,46 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
// NPC // NPC
private static final int LIONEL = 33907; private static final int LIONEL = 33907;
// Items // Items
private static final int SPORCHA_CERTIFICATE = 47830; private static final int PROOF_OF_REPUTATION = 80826;
private static final int KEKROPUS_CERTIFICATE = 47831;
private static final int SANTIAGO_CERTIFICATE = 47832;
private static final int ARCTURUS_CERTIFICATE = 47833;
private static final int SYLVAIN_CERTIFICATE = 80828;
private static final int LIONEL_MISSION_LIST_4 = 47829; private static final int LIONEL_MISSION_LIST_4 = 47829;
// Rewards // Rewards
private static final int DIGNITY_OF_THE_EXALTED = 47852; private static final int DIGNITY_OF_THE_EXALTED = 47852;
private static final int VITALITY_OF_THE_EXALTED = 47854;
// Misc // Misc
private static final int MIN_LEVEL = 103; private static final int MIN_LEVEL = 103;
private static final int MIN_COMPLETE_LEVEL = 104; private static final int MIN_COMPLETE_LEVEL = 105;
private static final int PROOF_OF_REPUTATION_NEEDED = 80000;
// Monsters
private static final int[] MONSTERS =
{
// Hellbound monsters
23811, // Cantera Tanya
23812, // Cantera Deathmoz
23813, // Cantera Floxis
23814, // Cantera Belika
23815, // Cantera Bridget
23354, // Decay Hannibal
23355, // Armor Beast
23356, // Klein Soldier
23357, // Disorder Warrior
23360, // Bizuard
23361, // Mutated Fly
24511, // Lunatikan
24515, // Kandiloth
24512, // Garion Neti
24513, // Desert Wendigo
24514, // Koraza
};
public Q10873_ExaltedReachingAnotherLevel() public Q10873_ExaltedReachingAnotherLevel()
{ {
super(10873); super(10873);
addStartNpc(LIONEL); addStartNpc(LIONEL);
addTalkId(LIONEL); addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "33907-00.htm"); addCondMinLevel(MIN_LEVEL, "33907-00.htm");
addCondCompletedQuest(Q10823_ExaltedOneWhoShattersTheLimit.class.getSimpleName(), "33907-00.htm"); addCondCompletedQuest(Q10823_ExaltedOneWhoShattersTheLimit.class.getSimpleName(), "33907-00.htm");
registerQuestItems(LIONEL_MISSION_LIST_4, SPORCHA_CERTIFICATE, KEKROPUS_CERTIFICATE, SANTIAGO_CERTIFICATE, ARCTURUS_CERTIFICATE, SYLVAIN_CERTIFICATE); registerQuestItems(LIONEL_MISSION_LIST_4, PROOF_OF_REPUTATION);
} }
@Override @Override
@@ -92,10 +113,10 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
} }
case "33907-08.html": case "33907-08.html":
{ {
if ((hasQuestItems(player, SYLVAIN_CERTIFICATE) || hasQuestItems(player, SPORCHA_CERTIFICATE, KEKROPUS_CERTIFICATE, SANTIAGO_CERTIFICATE, ARCTURUS_CERTIFICATE)) && (player.getLevel() >= MIN_COMPLETE_LEVEL)) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
giveItems(player, DIGNITY_OF_THE_EXALTED, 1); giveItems(player, DIGNITY_OF_THE_EXALTED, 1);
addExpAndSp(player, 1178303740714L, 1178303740); giveItems(player, VITALITY_OF_THE_EXALTED, 1);
qs.exitQuest(false, true); qs.exitQuest(false, true);
htmltext = event; htmltext = event;
} }
@@ -123,7 +144,7 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
{ {
case 1: case 1:
{ {
if (hasQuestItems(player, SPORCHA_CERTIFICATE, KEKROPUS_CERTIFICATE, SANTIAGO_CERTIFICATE, ARCTURUS_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL)) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
htmltext = "33907-07.html"; htmltext = "33907-07.html";
} }
@@ -133,18 +154,6 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
} }
break; break;
} }
case 2:
{
if (hasQuestItems(player, SYLVAIN_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
htmltext = "33907-07a.html";
}
else
{
htmltext = "33907-06a.html";
}
break;
}
} }
break; break;
} }
@@ -156,4 +165,28 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
} }
return htmltext; 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) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
if (getQuestItemsCount(player, PROOF_OF_REPUTATION) < PROOF_OF_REPUTATION_NEEDED)
{
giveItemRandomly(player, PROOF_OF_REPUTATION, 1, PROOF_OF_REPUTATION_NEEDED, 1, true);
}
if ((getQuestItemsCount(player, PROOF_OF_REPUTATION) >= PROOF_OF_REPUTATION_NEEDED) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
qs.setCond(2, true);
}
}
}
} }

View File

@@ -2,7 +2,5 @@
I'll tell you about the fifth test.<br> I'll tell you about the fifth test.<br>
First, you must reach <font color="LEVEL">Lv.105</font> to prove that you're qualified to be Guide of Power. You must also pass the tests of the following people and receive their certificates.<br> First, you must reach <font color="LEVEL">Lv.105</font> to prove that you're qualified to be Guide of Power. You must also pass the tests of the following people and receive their certificates.<br>
The testers include <font color="LEVEL">Master Cyphona</font> and <font color="LEVEL">Quartermaster Dinford</font> in the <font color="LEVEL">Blackbird Campsite</font>, <font color="LEVEL">Owner Settlen</font> of <font color="LEVEL">Underground Gainak Mystic Tavern</font>, and <font color="LEVEL">Admiral Keucereus</font> in the <font color="LEVEL">Keucereus Alliance Base</font>.<br><br><br> The testers include <font color="LEVEL">Master Cyphona</font> and <font color="LEVEL">Quartermaster Dinford</font> in the <font color="LEVEL">Blackbird Campsite</font>, <font color="LEVEL">Owner Settlen</font> of <font color="LEVEL">Underground Gainak Mystic Tavern</font>, and <font color="LEVEL">Admiral Keucereus</font> in the <font color="LEVEL">Keucereus Alliance Base</font>.<br><br><br>
Only they know what they'll test you on, so go talk to them. If you forget who you must go to, refer to the guide I'll be giving you.<br><br> Only they know what they'll test you on, so go talk to them. If you forget who you must go to, refer to the guide I'll be giving you.
All this can be substituted by completing a mission from <font color="LEVEL">Cardinal Seresin</font> in the <font color="LEVEL">Town of Oren</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10879_ExaltedGuideToPower 33907-05a.html">"I'll do that."</Button>
</body></html> </body></html>

View File

@@ -16,6 +16,7 @@
*/ */
package quests.Q10879_ExaltedGuideToPower; package quests.Q10879_ExaltedGuideToPower;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest; import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,26 +35,46 @@ public class Q10879_ExaltedGuideToPower extends Quest
// NPC // NPC
private static final int LIONEL = 33907; private static final int LIONEL = 33907;
// Items // Items
private static final int MASTER_CYPHONA_CERTIFICATE = 47835; private static final int PROOF_OF_PRIDE = 80827;
private static final int DINFORD_CERTIFICATE = 47836;
private static final int SETTLEN_SERTIFICATE = 47837;
private static final int ADMIRAL_KEUCEREUS_CERTIFICATE = 47838;
private static final int SERESIN_CERTIFICATE = 80829;
private static final int LIONEL_MISSION_LIST_5 = 47834; private static final int LIONEL_MISSION_LIST_5 = 47834;
// Rewards // Rewards
private static final int DIGNITY_OF_THE_EXALTED = 47853; private static final int DIGNITY_OF_THE_EXALTED = 47853;
private static final int VITALITY_OF_THE_EXALTED = 47855;
// Misc // Misc
private static final int MIN_LEVEL = 104; private static final int MIN_LEVEL = 105;
private static final int MIN_COMPLETE_LEVEL = 105; private static final int MIN_COMPLETE_LEVEL = 107;
private static final int PROOF_OF_PRIDE_NEEDED = 80000;
// Monsters
private static final int[] MONSTERS =
{
// Hellbound monsters
23811, // Cantera Tanya
23812, // Cantera Deathmoz
23813, // Cantera Floxis
23814, // Cantera Belika
23815, // Cantera Bridget
23354, // Decay Hannibal
23355, // Armor Beast
23356, // Klein Soldier
23357, // Disorder Warrior
23360, // Bizuard
23361, // Mutated Fly
24511, // Lunatikan
24515, // Kandiloth
24512, // Garion Neti
24513, // Desert Wendigo
24514, // Koraza
};
public Q10879_ExaltedGuideToPower() public Q10879_ExaltedGuideToPower()
{ {
super(10879); super(10879);
addStartNpc(LIONEL); addStartNpc(LIONEL);
addTalkId(LIONEL); addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "33907-00.html"); addCondMinLevel(MIN_LEVEL, "33907-00.html");
addCondCompletedQuest(Q10873_ExaltedReachingAnotherLevel.class.getSimpleName(), "33907-00.html"); addCondCompletedQuest(Q10873_ExaltedReachingAnotherLevel.class.getSimpleName(), "33907-00.html");
registerQuestItems(LIONEL_MISSION_LIST_5, MASTER_CYPHONA_CERTIFICATE, DINFORD_CERTIFICATE, SETTLEN_SERTIFICATE, ADMIRAL_KEUCEREUS_CERTIFICATE, SERESIN_CERTIFICATE); registerQuestItems(LIONEL_MISSION_LIST_5, PROOF_OF_PRIDE);
} }
@Override @Override
@@ -92,10 +113,10 @@ public class Q10879_ExaltedGuideToPower extends Quest
} }
case "33907-08.html": case "33907-08.html":
{ {
if ((hasQuestItems(player, SERESIN_CERTIFICATE) || (hasQuestItems(player, MASTER_CYPHONA_CERTIFICATE, DINFORD_CERTIFICATE, SETTLEN_SERTIFICATE, ADMIRAL_KEUCEREUS_CERTIFICATE))) && (player.getLevel() >= MIN_COMPLETE_LEVEL)) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
giveItems(player, DIGNITY_OF_THE_EXALTED, 1); giveItems(player, DIGNITY_OF_THE_EXALTED, 1);
addExpAndSp(player, 2217691008000L, (int) 2217691008L); giveItems(player, VITALITY_OF_THE_EXALTED, 1);
qs.exitQuest(false, true); qs.exitQuest(false, true);
htmltext = event; htmltext = event;
} }
@@ -123,7 +144,7 @@ public class Q10879_ExaltedGuideToPower extends Quest
{ {
case 1: case 1:
{ {
if (hasQuestItems(player, MASTER_CYPHONA_CERTIFICATE, DINFORD_CERTIFICATE, SETTLEN_SERTIFICATE, ADMIRAL_KEUCEREUS_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL)) if (qs.isCond(2) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{ {
htmltext = "33907-07.html"; htmltext = "33907-07.html";
} }
@@ -133,18 +154,6 @@ public class Q10879_ExaltedGuideToPower extends Quest
} }
break; break;
} }
case 2:
{
if (hasQuestItems(player, SERESIN_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
htmltext = "33907-07a.html";
}
else
{
htmltext = "33907-06a.html";
}
break;
}
} }
break; break;
} }
@@ -156,4 +165,28 @@ public class Q10879_ExaltedGuideToPower extends Quest
} }
return htmltext; 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) && qs.isCond(1) && player.isInsideRadius3D(npc, Config.ALT_PARTY_RANGE))
{
if (getQuestItemsCount(player, PROOF_OF_PRIDE) < PROOF_OF_PRIDE_NEEDED)
{
giveItemRandomly(player, PROOF_OF_PRIDE, 1, PROOF_OF_PRIDE_NEEDED, 1, true);
}
if ((getQuestItemsCount(player, PROOF_OF_PRIDE) >= PROOF_OF_PRIDE_NEEDED) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
qs.setCond(2, true);
}
}
}
} }