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.actor.Npc;
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.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
@@ -51,6 +52,7 @@ public class Q10589_WhereFatesIntersect extends Quest
};
// Item
private static final int MONSTER_DROP = 80853; // Undead Blood
private static final ItemHolder SOE_HERPHAH = new ItemHolder(80857, 1); // Scroll of Escape: Herphah
// Misc
private static final int REQUIRED_DROP_COUNT = 200;
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;
switch (event)
{
case "34505-01.htm": // TARTI
case "34505-01.htm":
case "34505-02.htm":
case "34505-04.html":
case "34362-02.html": // HERPHAH
case "34362-02.html":
case "34362-05.html":
case "30137-02.html": // VOLLODOS
case "34513-02.html": // JOACHIM
case "30137-02.html":
case "34513-02.html":
{
htmltext = event;
break;
@@ -252,6 +254,7 @@ public class Q10589_WhereFatesIntersect extends Quest
giveItemRandomly(player, npc, MONSTER_DROP, 1, REQUIRED_DROP_COUNT, 1, true);
if ((getQuestItemsCount(player, MONSTER_DROP) >= REQUIRED_DROP_COUNT) && (player.getLevel() >= 95))
{
giveItems(killer, SOE_HERPHAH);
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.actor.Npc;
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.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
@@ -56,6 +57,7 @@ public class Q10590_ReawakenedFate extends Quest
};
// Item
private static final int VAMPIRE_ICHOR = 80854; // Vampire Ichor - monster drop
private static final ItemHolder SOE_JOACHIM = new ItemHolder(80858, 1);
// Rewards
private static final int ACHIEVEMENT_BOX = 80909;
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))
{
qs.setCond(3, true);
giveItems(player, SOE_JOACHIM);
}
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.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.util.Util;
@@ -101,7 +101,7 @@ public class Q10591_NobleMaterial extends Quest
{
case "34513-02.htm":
case "34513-07.html":
case "34513-04.html":
case "34513-04.htm":
case "34014-03.html":
case "34362-03.html":
case "33907-03.html":

View File

@@ -16,7 +16,12 @@
*/
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.Race;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventType;
@@ -34,30 +39,71 @@ import org.l2jmobius.gameserver.model.quest.State;
*/
public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
{
// Npc
// NPC
private static final int LIONEL = 33907;
// Items
private static final int LIONEL_HUNTER_MISSING_LIST = 45627;
private static final int ELIKIA_CERTIFICATE = 45623;
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;
private static final int SLAYERS_PROOF = 45871;
// 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()
{
super(10811);
addStartNpc(LIONEL);
addTalkId(LIONEL);
addKillId(MONSTERS);
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
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);
if (qs == null)
{
@@ -91,18 +137,138 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
if (qs.isCond(3))
{
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);
htmltext = event;
}
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;
}
@@ -144,6 +310,30 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
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)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
private void OnPlayerAbilityPointsChanged(OnPlayerAbilityPointsChanged event)

View File

@@ -16,6 +16,11 @@
*/
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.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,32 +39,58 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
// NPC
private static final int LIONEL = 33907;
// Items
private static final int DAICHIR_SERTIFICATE = 45628;
private static final int OLYMPIAD_MANAGER_CERTIFICATE = 45629;
private static final int ISHUMA_CERTIFICATE = 45630;
private static final int SIR_KRISTOF_RODEMAI_CERTIFICATE = 45631;
private static final int PROOF_OF_RESISTANCE = 80823;
private static final int LIONEL_MISSION_LIST_2 = 45632;
// Rewards
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_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
private static final int MIN_LEVEL = 99;
private static final int MIN_COMPLETE_LEVEL = 100;
private static final int MIN_LEVEL = 101;
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()
{
super(10817);
addStartNpc(LIONEL);
addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "33907-07.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
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
String htmltext = null;
final Race race = player.getRace();
final ClassId classId = player.getClassId();
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
@@ -86,10 +117,168 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
}
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_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);
htmltext = event;
}
@@ -114,7 +303,7 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
}
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";
}
@@ -132,4 +321,29 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
}
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;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,28 +35,51 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
// NPC
private static final int LIONEL = 33907;
// Items
private static final int MERLOT_CERTIFICATE = 46056;
private static final int KURTIZ_CERTIFICATE = 46057;
private static final int MAMMON_CERTIFICATE = 45635;
private static final int GUSTAV_CERTIFICATE = 45636;
private static final int PROOF_OF_PREPARATION = 80824;
private static final int LIONEL_MISSION_LIST_3 = 45637;
// Rewards
private static final int EXALTED_CLOAK = 37763;
private static final int OBTAIN_EXALTED_STATUS = 45638;
private static final int EXALTED_TIARA = 45644;
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
private static final int MIN_LEVEL = 100;
private static final int MIN_DUALCLASS_LEVEL = 100;
private static final int MIN_LEVEL = 102;
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()
{
super(10823);
addStartNpc(LIONEL);
addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "33907-07.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
@@ -88,12 +112,15 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
}
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, OBTAIN_EXALTED_STATUS, 1);
giveItems(player, EXALTED_TIARA, 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?
// https://l2wiki.com/Noblesse
player.setNobleLevel(2);
@@ -122,7 +149,7 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
}
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";
}
@@ -140,4 +167,28 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
}
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>
First, you must reach <font color="LEVEL">Lv. 104</font> to prove you are qualified to advance to the new stage. You must also pass the tests of the following people and receive their certificates.<br>
Your testers include <font color="LEVEL">Commando Captain Sporcha</font> in the <font color="LEVEL">Hellbound Refugee Camp</font>, <font color="LEVEL">Giant Tracker Leader Krenaht</font> in the <font color="LEVEL">Giant's Cave</font>, <font color="LEVEL">Fishing Guild Leader Santiago</font> in <font color="LEVEL">Heine</font>, and <font color="LEVEL">Hunter's Guild President Arcturus</font> in the <font color="LEVEL">Hunter's Village</font>.<br><br><br>
Only they know what they'll test you on, so go talk to them. If you forget who you must go to, refer to the guide I'll be giving you<br><br>
All this can be substituted by completing a mission from <font color="LEVEL">High Priest Sylvain</font> in the <font color="LEVEL">Einhasad Temple</font> in the <font color="LEVEL">Town of Dion</font>.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10873_ExaltedReachingAnotherLevel 33907-05a.html">"I'll do that."</Button>
</body></html>
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.
</body></html>

View File

@@ -16,6 +16,7 @@
*/
package quests.Q10873_ExaltedReachingAnotherLevel;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,26 +35,46 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
// NPC
private static final int LIONEL = 33907;
// Items
private static final int SPORCHA_CERTIFICATE = 47830;
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 PROOF_OF_REPUTATION = 80826;
private static final int LIONEL_MISSION_LIST_4 = 47829;
// Rewards
private static final int DIGNITY_OF_THE_EXALTED = 47852;
private static final int VITALITY_OF_THE_EXALTED = 47854;
// Misc
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()
{
super(10873);
addStartNpc(LIONEL);
addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "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
@@ -92,10 +113,10 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
}
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);
addExpAndSp(player, 1178303740714L, 1178303740);
giveItems(player, VITALITY_OF_THE_EXALTED, 1);
qs.exitQuest(false, true);
htmltext = event;
}
@@ -123,7 +144,7 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
{
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";
}
@@ -133,18 +154,6 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
}
break;
}
case 2:
{
if (hasQuestItems(player, SYLVAIN_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
htmltext = "33907-07a.html";
}
else
{
htmltext = "33907-06a.html";
}
break;
}
}
break;
}
@@ -156,4 +165,28 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
}
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>
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>
Only they know what they'll test you on, so go talk to them. If you forget who you must go to, refer to the guide I'll be giving you.<br><br>
All this can be substituted by completing a mission from <font color="LEVEL">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>
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.
</body></html>

View File

@@ -16,6 +16,7 @@
*/
package quests.Q10879_ExaltedGuideToPower;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.Quest;
@@ -34,26 +35,46 @@ public class Q10879_ExaltedGuideToPower extends Quest
// NPC
private static final int LIONEL = 33907;
// Items
private static final int MASTER_CYPHONA_CERTIFICATE = 47835;
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 PROOF_OF_PRIDE = 80827;
private static final int LIONEL_MISSION_LIST_5 = 47834;
// Rewards
private static final int DIGNITY_OF_THE_EXALTED = 47853;
private static final int VITALITY_OF_THE_EXALTED = 47855;
// Misc
private static final int MIN_LEVEL = 104;
private static final int MIN_COMPLETE_LEVEL = 105;
private static final int MIN_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()
{
super(10879);
addStartNpc(LIONEL);
addTalkId(LIONEL);
addKillId(MONSTERS);
addCondMinLevel(MIN_LEVEL, "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
@@ -92,10 +113,10 @@ public class Q10879_ExaltedGuideToPower extends Quest
}
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);
addExpAndSp(player, 2217691008000L, (int) 2217691008L);
giveItems(player, VITALITY_OF_THE_EXALTED, 1);
qs.exitQuest(false, true);
htmltext = event;
}
@@ -123,7 +144,7 @@ public class Q10879_ExaltedGuideToPower extends Quest
{
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";
}
@@ -133,18 +154,6 @@ public class Q10879_ExaltedGuideToPower extends Quest
}
break;
}
case 2:
{
if (hasQuestItems(player, SERESIN_CERTIFICATE) && (player.getLevel() >= MIN_COMPLETE_LEVEL))
{
htmltext = "33907-07a.html";
}
else
{
htmltext = "33907-06a.html";
}
break;
}
}
break;
}
@@ -156,4 +165,28 @@ public class Q10879_ExaltedGuideToPower extends Quest
}
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);
}
}
}
}