/*
* Copyright (C) 2004-2015 L2J DataPack
*
* This file is part of L2J DataPack.
*
* L2J DataPack 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.
*
* L2J DataPack 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.Q00177_SplitDestiny;
import com.l2jserver.gameserver.data.xml.impl.CategoryData;
import com.l2jserver.gameserver.enums.CategoryType;
import com.l2jserver.gameserver.enums.SubclassInfoType;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.ItemHolder;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ExSubjobInfo;
import com.l2jserver.gameserver.network.serverpackets.SocialAction;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.util.Util;
/**
* @author Sdw
*/
public class Q00177_SplitDestiny extends Quest
{
// NPCs
private static final int HADEL = 33344;
private static final int ISHUMA = 32615;
// Items
private static final ItemHolder PETRIFIED_GIANTS_HAND = new ItemHolder(17718, 2);
private static final ItemHolder PETRIFIED_GIANTS_FOOT = new ItemHolder(17719, 2);
private static final int PETRIFIED_GIANTS_HAND_PIECE = 17720;
private static final int PETRIFIED_GIANTS_FOOT_PIECE = 17721;
// Rewards
private static final ItemHolder RECIPE_TWILIGHT_NECKLACE = new ItemHolder(36791, 1);
private static final ItemHolder CRYSTAL_R = new ItemHolder(17371, 1);
private static final ItemHolder RED_SOUL_CRYSTAL_15 = new ItemHolder(10480, 1);
private static final ItemHolder BLUE_SOUL_CRYSTAL_15 = new ItemHolder(10481, 1);
private static final ItemHolder GREEN_SOUL_CRYSTAL_15 = new ItemHolder(10482, 1);
// Variable
private static final String VAR_SUB_INDEX = "split_destiny_sub_id";
// Mobs
private static final int[] GIANTS_HAND_MONSTERS =
{
21549, // Corrupted Guard
21550, // Corrupted Guard
21547, // Corrupted Knight
21548, // Resurrected Knight
21587, // Vampire Warrior
};
private static final int[] GIANTS_FOOT_MONSTERS =
{
22257, // Island Guardian
22258, // White Sand Mirage
22259, // Muddy Coral
22260, // Kleopora
};
public Q00177_SplitDestiny()
{
super(177, Q00177_SplitDestiny.class.getSimpleName(), "Split Destiny");
addStartNpc(HADEL);
addTalkId(HADEL, ISHUMA);
addKillId(GIANTS_HAND_MONSTERS);
addKillId(GIANTS_FOOT_MONSTERS);
registerQuestItems(PETRIFIED_GIANTS_HAND.getId(), PETRIFIED_GIANTS_FOOT.getId(), PETRIFIED_GIANTS_HAND_PIECE, PETRIFIED_GIANTS_FOOT_PIECE);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33344-14.htm":
{
qs.startQuest();
qs.set(VAR_SUB_INDEX, player.getClassIndex());
htmltext = event;
break;
}
case "33344-19.htm":
{
if (qs.isCond(3))
{
qs.setCond(4, true);
htmltext = event;
}
break;
}
case "33344-22.htm":
{
if (qs.isCond(6))
{
qs.setCond(7, true);
htmltext = event;
}
break;
}
case "32615-03.htm":
{
if (qs.isCond(7) && (getQuestItemsCount(player, PETRIFIED_GIANTS_HAND_PIECE) >= 10) && (getQuestItemsCount(player, PETRIFIED_GIANTS_FOOT_PIECE) >= 10))
{
takeItems(player, PETRIFIED_GIANTS_HAND_PIECE, 10);
takeItems(player, PETRIFIED_GIANTS_FOOT_PIECE, 10);
qs.setCond(8, true);
htmltext = event;
}
break;
}
case "33344-25.htm":
{
if (qs.isCond(9) && hasItem(player, PETRIFIED_GIANTS_HAND) && hasItem(player, PETRIFIED_GIANTS_FOOT))
{
takeItem(player, PETRIFIED_GIANTS_HAND);
takeItem(player, PETRIFIED_GIANTS_FOOT);
htmltext = event;
}
break;
}
case "blue_crystal":
case "green_crystal":
case "red_crystal":
{
if (qs.isCond(9))
{
if (player.getClassIndex() != qs.getInt(VAR_SUB_INDEX))
{
return "33344-16.htm";
}
player.getSubClasses().get(player.getClassIndex()).setIsDualClass(true);
final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.SUBCLASS_S1_HAS_BEEN_UPGRADED_TO_DUEL_CLASS_S2_CONGRATULATIONS);
msg.addClassId(player.getClassId().getId());
msg.addClassId(player.getClassId().getId());
player.sendPacket(msg);
player.sendPacket(new ExSubjobInfo(player, SubclassInfoType.CLASS_CHANGED));
player.broadcastSocialAction(SocialAction.LEVEL_UP);
if (event.equals("red_crystal"))
{
giveItems(player, RED_SOUL_CRYSTAL_15);
}
else if (event.equals("blue_crystal"))
{
giveItems(player, BLUE_SOUL_CRYSTAL_15);
}
else if (event.equals("green_crystal"))
{
giveItems(player, GREEN_SOUL_CRYSTAL_15);
}
giveItems(player, RECIPE_TWILIGHT_NECKLACE);
giveItems(player, CRYSTAL_R);
addExpAndSp(player, 175739575, 42177);
qs.exitQuest(false, true);
htmltext = "33344-28.htm";
}
break;
}
case "33344-13.htm":
case "33344-18.htm":
case "32615-02.htm":
case "33344-26.htm":
case "33344-27.htm":
{
htmltext = event;
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
if (npc.getId() == HADEL)
{
if (qs.isStarted())
{
if (player.getClassIndex() == qs.getInt(VAR_SUB_INDEX))
{
switch (qs.getCond())
{
case 1:
case 2:
{
htmltext = "33344-15.htm";
break;
}
case 3:
{
htmltext = "33344-17.htm";
break;
}
case 4:
case 5:
{
htmltext = "33344-20.htm";
break;
}
case 6:
{
htmltext = "33344-21.htm";
break;
}
case 7:
case 8:
{
htmltext = "33344-23.htm";
break;
}
case 9:
{
htmltext = "33344-24.htm";
break;
}
}
}
else
{
htmltext = "33344-16.htm";
}
}
else if (qs.isCompleted())
{
htmltext = "33344-12.htm";
}
else
{
if (!player.isSubClassActive() || !player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) || (player.getLevel() < 80))
{
htmltext = "33344-02.htm";
}
else if (!CategoryData.getInstance().isInCategory(CategoryType.AWAKEN_GROUP, player.getBaseClass()))
{
htmltext = "33344-03.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.SIGEL_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.SIGEL_CANDIDATE))
{
htmltext = "33344-sigel.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.TYRR_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.TYRR_CANDIDATE))
{
htmltext = "33344-tyrr.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.OTHELL_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.OTHELL_CANDIDATE))
{
htmltext = "33344-othell.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.YUL_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.YUL_CANDIDATE))
{
htmltext = "33344-yul.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.FEOH_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.FEOH_CANDIDATE))
{
htmltext = "33344-feoh.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.ISS_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.ISS_CANDIDATE))
{
htmltext = "33344-iss.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.WYNN_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.WYNN_CANDIDATE))
{
htmltext = "33344-wynn.htm";
}
else if (CategoryData.getInstance().isInCategory(CategoryType.AEORE_GROUP, player.getBaseClass()) && player.isInCategory(CategoryType.AEORE_CANDIDATE))
{
htmltext = "33344-aeore.htm";
}
else if (player.hasDualClass())
{
htmltext = "33344-12.htm";
}
else
{
htmltext = "33344-01.htm";
}
}
}
else if ((npc.getId() == ISHUMA) && qs.isStarted())
{
switch (qs.getCond())
{
case 7:
{
htmltext = "32615-01.htm";
break;
}
case 8:
{
qs.setCond(9, true);
giveItems(player, PETRIFIED_GIANTS_HAND);
giveItems(player, PETRIFIED_GIANTS_FOOT);
htmltext = "32615-04.htm";
break;
}
default:
{
htmltext = "32615-05.htm";
break;
}
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && (killer.getClassIndex() == qs.getInt(VAR_SUB_INDEX)))
{
switch (qs.getCond())
{
case 1:
{
if (Util.contains(GIANTS_HAND_MONSTERS, npc.getId()))
{
giveItems(killer, PETRIFIED_GIANTS_HAND_PIECE, 1);
qs.setCond(2, true);
}
break;
}
case 2:
{
if (Util.contains(GIANTS_HAND_MONSTERS, npc.getId()))
{
if (giveItemRandomly(killer, npc, PETRIFIED_GIANTS_HAND_PIECE, 1, 10, 1.0, true))
{
qs.setCond(3, true);
}
}
break;
}
case 4:
{
if (Util.contains(GIANTS_FOOT_MONSTERS, npc.getId()))
{
qs.giveItems(PETRIFIED_GIANTS_FOOT_PIECE, 1);
qs.setCond(5, true);
}
break;
}
case 5:
{
if (Util.contains(GIANTS_FOOT_MONSTERS, npc.getId()))
{
if (giveItemRandomly(killer, npc, PETRIFIED_GIANTS_FOOT_PIECE, 1, 10, 1.0, true))
{
qs.setCond(6, true);
}
}
break;
}
}
}
return super.onKill(npc, killer, isSummon);
}
}