/*
* 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 ai.npc.AwakeningMaster;
import quests.Q10338_SeizeYourDestiny.Q10338_SeizeYourDestiny;
import ai.npc.AbstractNpcAI;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
import com.l2jserver.gameserver.enums.CategoryType;
import com.l2jserver.gameserver.enums.UserInfoType;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.entity.Hero;
import com.l2jserver.gameserver.model.events.EventType;
import com.l2jserver.gameserver.model.events.ListenerRegisterType;
import com.l2jserver.gameserver.model.events.annotations.RegisterEvent;
import com.l2jserver.gameserver.model.events.annotations.RegisterType;
import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerChangeToAwakenedClass;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
import com.l2jserver.gameserver.network.serverpackets.ExChangeToAwakenedClass;
import com.l2jserver.gameserver.network.serverpackets.ExShowUsm;
import com.l2jserver.gameserver.network.serverpackets.SocialAction;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;
/**
* AwakeningMaster AI.
* @author Sdw
*/
public final class AwakeningMaster extends AbstractNpcAI
{
// NPCs
private static final int SIGEL_MASTER = 33397;
private static final int TYRR_MASTER = 33398;
private static final int OTHELL_MASTER = 33399;
private static final int YUL_MASTER = 33400;
private static final int FEOH_MASTER = 33401;
private static final int ISS_MASTER = 33402;
private static final int WYNN_MASTER = 33403;
private static final int AEORE_MASTER = 33404;
// Items
private static final int SCROLL_OF_AFTERLIFE = 17600;
private final static int ABELIUS_POWER = 32264;
private final static int SAPYROS_POWER = 32265;
private final static int ASHAGEN_POWER = 32266;
private final static int CRANIGG_POWER = 32267;
private final static int SOLTKREIG_POWER = 32268;
private final static int NAVIAROPE_POWER = 32269;
private final static int LEISTER_POWER = 32270;
private final static int LAKCIS_POWER = 32271;
private AwakeningMaster()
{
super(AwakeningMaster.class.getSimpleName(), "ai/npc");
addStartNpc(SIGEL_MASTER, TYRR_MASTER, OTHELL_MASTER, YUL_MASTER, FEOH_MASTER, ISS_MASTER, WYNN_MASTER, AEORE_MASTER);
addTalkId(SIGEL_MASTER, TYRR_MASTER, OTHELL_MASTER, YUL_MASTER, FEOH_MASTER, ISS_MASTER, WYNN_MASTER, AEORE_MASTER);
addFirstTalkId(SIGEL_MASTER, TYRR_MASTER, OTHELL_MASTER, YUL_MASTER, FEOH_MASTER, ISS_MASTER, WYNN_MASTER, AEORE_MASTER);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState st = getQuestState(player, true);
if (st == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "awakening":
{
final QuestState st2 = player.getQuestState(Q10338_SeizeYourDestiny.class.getSimpleName());
if (st.hasQuestItems(SCROLL_OF_AFTERLIFE) && (player.getLevel() > 84) && (!player.isSubClassActive() || player.isDualClassActive()) && player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (st2 != null) && st2.isCompleted())
{
switch (npc.getId())
{
case SIGEL_MASTER:
{
if (!player.isInCategory(CategoryType.SIGEL_CANDIDATE))
{
return SIGEL_MASTER + "-no_class.htm";
}
break;
}
case TYRR_MASTER:
{
if (!player.isInCategory(CategoryType.TYRR_CANDIDATE))
{
return TYRR_MASTER + "-no_class.htm";
}
break;
}
case OTHELL_MASTER:
{
if (!player.isInCategory(CategoryType.OTHELL_CANDIDATE))
{
return OTHELL_MASTER + "-no_class.htm";
}
break;
}
case YUL_MASTER:
{
if (!player.isInCategory(CategoryType.YUL_CANDIDATE))
{
return YUL_MASTER + "-no_class.htm";
}
break;
}
case FEOH_MASTER:
{
if (!player.isInCategory(CategoryType.FEOH_CANDIDATE))
{
return FEOH_MASTER + "-no_class.htm";
}
break;
}
case ISS_MASTER:
{
if (!player.isInCategory(CategoryType.ISS_CANDIDATE))
{
return ISS_MASTER + "-no_class.htm";
}
break;
}
case WYNN_MASTER:
{
if (!player.isInCategory(CategoryType.WYNN_CANDIDATE))
{
return WYNN_MASTER + "-no_class.htm";
}
break;
}
case AEORE_MASTER:
{
if (!player.isInCategory(CategoryType.AEORE_CANDIDATE))
{
return AEORE_MASTER + "-no_class.htm";
}
break;
}
}
for (ClassId newClass : player.getClassId().getNextClassIds())
{
player.sendPacket(new ExChangeToAwakenedClass(newClass.getId()));
}
}
else
{
return npc.getId() + "-no.htm";
}
break;
}
}
return htmltext;
}
@RegisterEvent(EventType.ON_PLAYER_CHANGE_TO_AWAKENED_CLASS)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void OnPlayerChangeToAwakenedClass(OnPlayerChangeToAwakenedClass event)
{
final L2PcInstance player = event.getActiveChar();
if (player.isSubClassActive() && !player.isDualClassActive())
{
return;
}
if ((player.getLevel() < 85) || !player.isInCategory(CategoryType.FOURTH_CLASS_GROUP))
{
return;
}
final QuestState st = player.getQuestState(Q10338_SeizeYourDestiny.class.getSimpleName());
if ((st == null) || !st.isCompleted())
{
return;
}
if (player.isHero() || Hero.getInstance().isUnclaimedHero(player.getObjectId()))
{
player.sendPacket(SystemMessageId.YOU_CANNOT_AWAKEN_WHEN_YOU_ARE_A_HERO_OR_ON_THE_WAIT_LIST_FOR_HERO_STATUS);
return;
}
if (player.getInventory().getSize(false) >= (player.getInventoryLimit() * 0.8))
{
player.sendPacket(SystemMessageId.YOU_CANNOT_AWAKEN_DUE_TO_YOUR_CURRENT_INVENTORY_WEIGHT_PLEASE_ORGANIZE_YOUR_INVENTORY_AND_TRY_AGAIN_DWARVEN_CHARACTERS_MUST_BE_AT_20_OR_BELOW_THE_INVENTORY_MAX_TO_AWAKEN);
return;
}
if (player.isMounted() || player.isTransformed())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_AWAKEN_WHILE_YOU_RE_TRANSFORMED_OR_RIDING);
return;
}
final L2ItemInstance item = player.getInventory().getItemByItemId(SCROLL_OF_AFTERLIFE);
if (item == null)
{
return;
}
if (!player.destroyItem("Awakening", item, player, true))
{
return;
}
for (ClassId newClass : player.getClassId().getNextClassIds())
{
player.setClassId(newClass.getId());
if (player.isDualClassActive())
{
player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass());
}
else
{
player.setBaseClass(player.getActiveClass());
}
player.sendPacket(SystemMessageId.CONGRATULATIONS_YOU_VE_COMPLETED_A_CLASS_TRANSFER);
final UserInfo ui = new UserInfo(player, false);
ui.addComponentType(UserInfoType.BASIC_INFO);
ui.addComponentType(UserInfoType.MAX_HPCPMP);
player.sendPacket(ui);
player.broadcastInfo();
int itemId = ABELIUS_POWER; // Sigel
if (player.isInCategory(CategoryType.TYRR_GROUP))
{
itemId = SAPYROS_POWER;
}
else if (player.isInCategory(CategoryType.OTHELL_GROUP))
{
itemId = ASHAGEN_POWER;
}
else if (player.isInCategory(CategoryType.YUL_GROUP))
{
itemId = CRANIGG_POWER;
}
else if (player.isInCategory(CategoryType.FEOH_GROUP))
{
itemId = SOLTKREIG_POWER;
}
else if (player.isInCategory(CategoryType.ISS_GROUP))
{
itemId = NAVIAROPE_POWER;
}
else if (player.isInCategory(CategoryType.WYNN_GROUP))
{
itemId = LEISTER_POWER;
}
else if (player.isInCategory(CategoryType.AEORE_GROUP))
{
itemId = LAKCIS_POWER;
}
player.broadcastPacket(new SocialAction(player.getObjectId(), 20));
giveItems(player, itemId, 1);
SkillTreesData.getInstance().cleanSkillUponAwakening(player);
player.sendPacket(new AcquireSkillList(player));
player.sendSkillList();
}
ThreadPoolManager.getInstance().scheduleGeneral(() ->
{
player.sendPacket(ExShowUsm.AWAKENING_END);
}, 10000);
}
public static void main(String[] args)
{
new AwakeningMaster();
}
}