/*
* 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 .
*/
package handlers.bypasshandlers;
import java.util.List;
import java.util.logging.Level;
import com.l2jserver.Config;
import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
import com.l2jserver.gameserver.handler.IBypassHandler;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
public class SkillList implements IBypassHandler
{
private static final String[] COMMANDS =
{
"SkillList"
};
@Override
public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
{
if (!(target instanceof L2NpcInstance))
{
return false;
}
if (Config.ALT_GAME_SKILL_LEARN)
{
try
{
String id = command.substring(9).trim();
if (id.length() != 0)
{
L2NpcInstance.showSkillList(activeChar, (L2Npc) target, ClassId.getClassId(Integer.parseInt(id)));
}
else
{
boolean own_class = false;
final List classesToTeach = ((L2NpcInstance) target).getClassesToTeach();
for (ClassId cid : classesToTeach)
{
if (cid.equalsOrChildOf(activeChar.getClassId()))
{
own_class = true;
break;
}
}
String text = "Skill learning:
";
if (!own_class)
{
String charType = activeChar.getClassId().isMage() ? "fighter" : "mage";
text += "Skills of your class are the easiest to learn.
" + "Skills of another class of your race are a little harder.
" + "Skills for classes of another race are extremely difficult.
" + "But the hardest of all to learn are the " + charType + "skills!
";
}
// make a list of classes
if (!classesToTeach.isEmpty())
{
int count = 0;
ClassId classCheck = activeChar.getClassId();
while ((count == 0) && (classCheck != null))
{
for (ClassId cid : classesToTeach)
{
if (cid.level() > classCheck.level())
{
continue;
}
if (SkillTreesData.getInstance().getAvailableSkills(activeChar, cid, false, false).isEmpty())
{
continue;
}
text += "Learn " + cid + "'s class Skills
\n";
count++;
}
classCheck = classCheck.getParent();
}
classCheck = null;
}
else
{
text += "No Skills.
";
}
text += "";
final NpcHtmlMessage html = new NpcHtmlMessage(((L2Npc) target).getObjectId());
html.setHtml(text);
html.replace("%objectId%", String.valueOf(((L2Npc) target).getObjectId()));
activeChar.sendPacket(html);
activeChar.sendPacket(ActionFailed.STATIC_PACKET);
}
}
catch (Exception e)
{
_log.log(Level.WARNING, "Exception in " + getClass().getSimpleName(), e);
}
}
else
{
L2NpcInstance.showSkillList(activeChar, (L2Npc) target, activeChar.getClassId());
}
return true;
}
@Override
public String[] getBypassList()
{
return COMMANDS;
}
}