/*
* This program 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.
*
* This program 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 com.l2jserver.gameserver.network.serverpackets;
import java.util.List;
import com.l2jserver.gameserver.datatables.SkillTreeTable;
import com.l2jserver.gameserver.model.L2EnchantSkillLearn;
import com.l2jserver.gameserver.model.L2EnchantSkillLearn.EnchantSkillDetail;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
*
* @author KenM
*/
public class ExEnchantSkillInfoDetail extends L2GameServerPacket
{
private static final int TYPE_NORMAL_ENCHANT = 0;
private static final int TYPE_SAFE_ENCHANT = 1;
private static final int TYPE_UNTRAIN_ENCHANT = 2;
private static final int TYPE_CHANGE_ENCHANT = 3;
private int bookId = 0;
private int reqCount = 0;
private int multi = 1;
private final int _type;
private final int _skillid;
private final int _skilllvl;
private final int _chance;
private int _sp;
private final int _adenacount;
public ExEnchantSkillInfoDetail(int type, int skillid, int skilllvl, L2PcInstance ply)
{
L2EnchantSkillLearn enchantLearn = SkillTreeTable.getInstance().getSkillEnchantmentBySkillId(skillid);
EnchantSkillDetail esd = null;
// do we have this skill?
if (enchantLearn != null)
{
if (skilllvl > 100)
{
int route = (skilllvl / 100) -1;
if (skilllvl % 100 == 0)
esd = enchantLearn.getEnchantRoutes()[route].get(0);
else if (skilllvl % 100 >= enchantLearn.getEnchantRoutes()[route].size())
esd = enchantLearn.getEnchantRoutes()[route].get(enchantLearn.getEnchantRoutes()[route].size()-1);
else
esd = enchantLearn.getEnchantSkillDetail(skilllvl);
}
else
//find first enchant route
for (List list : enchantLearn.getEnchantRoutes())
if (list != null)
{
esd = list.get(0);
break;
}
}
if (esd == null)
throw new IllegalArgumentException("Skill "+skillid + " dont have enchant data for level "+skilllvl);
if (type == 0)
multi = SkillTreeTable.NORMAL_ENCHANT_COST_MULTIPLIER;
else if (type == 1)
multi = SkillTreeTable.SAFE_ENCHANT_COST_MULTIPLIER;
_chance = esd.getRate(ply);
_sp = esd.getSpCost();
if (type == TYPE_UNTRAIN_ENCHANT)
_sp = (int) (0.8 * _sp);
_adenacount = esd.getAdena() * multi;
_type = type;
_skillid = skillid;
_skilllvl = skilllvl;
switch (type)
{
case TYPE_NORMAL_ENCHANT:
bookId = SkillTreeTable.NORMAL_ENCHANT_BOOK;
reqCount = ((_skilllvl % 100 > 1) ? 0 : 1) ;
break;
case TYPE_SAFE_ENCHANT:
bookId = SkillTreeTable.SAFE_ENCHANT_BOOK;
reqCount = 1;
break;
case TYPE_UNTRAIN_ENCHANT:
bookId = SkillTreeTable.UNTRAIN_ENCHANT_BOOK;
reqCount = 1;
break;
case TYPE_CHANGE_ENCHANT:
bookId = SkillTreeTable.CHANGE_ENCHANT_BOOK;
reqCount = 1;
break;
default:
return;
}
}
/**
* @see com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket#getType()
*/
@Override
public String getType()
{
return "[S] FE:5E ExEnchantSkillInfoDetail";
}
/**
* @see com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket#writeImpl()
*/
@Override
protected void writeImpl()
{
writeC(0xfe);
writeH(0x5e);
writeD(_type);
writeD(_skillid);
writeD(_skilllvl);
writeD(_sp * multi); // sp
writeD(_chance); // exp
writeD(2); // items count?
writeD(57); // adena //TODO unhardcode me
writeD(_adenacount); // adena count
writeD(bookId); // ItemId Required
writeD(reqCount);
}
}