Skill enchant related work in progress.
This commit is contained in:
@@ -21,6 +21,7 @@ import java.util.List;
|
||||
|
||||
import com.l2jmobius.commons.network.PacketWriter;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder;
|
||||
import com.l2jmobius.gameserver.model.L2EnchantSkillLearn;
|
||||
import com.l2jmobius.gameserver.network.client.OutgoingPackets;
|
||||
@@ -31,19 +32,21 @@ public final class ExEnchantSkillInfo implements IClientOutgoingPacket
|
||||
|
||||
private final int _id;
|
||||
private final int _lvl;
|
||||
private final int _maxlvl;
|
||||
private boolean _maxEnchanted = false;
|
||||
|
||||
public ExEnchantSkillInfo(int id, int lvl)
|
||||
{
|
||||
_id = id;
|
||||
_lvl = lvl;
|
||||
_maxlvl = SkillData.getInstance().getMaxLevel(_id);
|
||||
|
||||
final L2EnchantSkillLearn enchantLearn = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(_id);
|
||||
// do we have this skill?
|
||||
if (enchantLearn != null)
|
||||
{
|
||||
// skill already enchanted?
|
||||
if (_lvl > 100)
|
||||
if (_lvl > 1000)
|
||||
{
|
||||
_maxEnchanted = enchantLearn.isMaxEnchant(_lvl);
|
||||
|
||||
@@ -51,24 +54,19 @@ public final class ExEnchantSkillInfo implements IClientOutgoingPacket
|
||||
final EnchantSkillHolder esd = enchantLearn.getEnchantSkillHolder(_lvl);
|
||||
|
||||
// if it exists add it
|
||||
if (esd != null)
|
||||
if ((esd != null) && !_maxEnchanted)
|
||||
{
|
||||
_routes.add(_lvl); // current enchant add firts
|
||||
_routes.add(_lvl + 1); // current enchant add firts
|
||||
}
|
||||
|
||||
final int skillLvL = (_lvl % 100);
|
||||
|
||||
for (int route : enchantLearn.getAllRoutes())
|
||||
{
|
||||
if (((route * 100) + skillLvL) == _lvl)
|
||||
if (((route * 1000) + (_lvl % 1000)) == _lvl)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// add other levels of all routes - same lvl as enchanted
|
||||
// lvl
|
||||
_routes.add((route * 100) + skillLvL);
|
||||
_routes.add((route * 1000) + (_lvl % 1000));
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
// not already enchanted
|
||||
@@ -76,7 +74,7 @@ public final class ExEnchantSkillInfo implements IClientOutgoingPacket
|
||||
for (int route : enchantLearn.getAllRoutes())
|
||||
{
|
||||
// add first level (+1) of all routes
|
||||
_routes.add((route * 100) + 1);
|
||||
_routes.add((route * 1000) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -88,11 +86,25 @@ public final class ExEnchantSkillInfo implements IClientOutgoingPacket
|
||||
OutgoingPackets.EX_ENCHANT_SKILL_INFO.writeId(packet);
|
||||
|
||||
packet.writeD(_id);
|
||||
packet.writeD(_lvl);
|
||||
if (_lvl < 100)
|
||||
{
|
||||
packet.writeD(_lvl);
|
||||
}
|
||||
else
|
||||
{
|
||||
packet.writeH(_maxlvl);
|
||||
packet.writeH(_lvl);
|
||||
}
|
||||
packet.writeD(_maxEnchanted ? 0 : 1);
|
||||
packet.writeD(_lvl > 100 ? 1 : 0); // enchanted?
|
||||
packet.writeD(_lvl > 1000 ? 1 : 0); // enchanted?
|
||||
packet.writeD(_routes.size());
|
||||
_routes.forEach(packet::writeD);
|
||||
|
||||
for (int level : _routes)
|
||||
{
|
||||
packet.writeH(_maxlvl);
|
||||
packet.writeH(level);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets;
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.network.PacketWriter;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.EnchantSkillGroupsData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import com.l2jmobius.gameserver.model.L2EnchantSkillGroup.EnchantSkillHolder;
|
||||
import com.l2jmobius.gameserver.model.L2EnchantSkillLearn;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
@@ -34,6 +35,7 @@ public class ExEnchantSkillInfoDetail implements IClientOutgoingPacket
|
||||
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 static final int TYPE_IMMORTAL_ENCHANT = 4;
|
||||
|
||||
private int bookId = 0;
|
||||
private int reqCount = 0;
|
||||
@@ -41,21 +43,26 @@ public class ExEnchantSkillInfoDetail implements IClientOutgoingPacket
|
||||
private final int _type;
|
||||
private final int _skillid;
|
||||
private final int _skilllvl;
|
||||
private final int _maxlvl;
|
||||
private final int _chance;
|
||||
private int _sp;
|
||||
private final int _adenacount;
|
||||
|
||||
public ExEnchantSkillInfoDetail(int type, int skillid, int skilllvl, L2PcInstance ply)
|
||||
{
|
||||
_type = type;
|
||||
_skillid = skillid;
|
||||
_skilllvl = skilllvl;
|
||||
_maxlvl = SkillData.getInstance().getMaxLevel(_skillid);
|
||||
|
||||
final L2EnchantSkillLearn enchantLearn = EnchantSkillGroupsData.getInstance().getSkillEnchantmentBySkillId(skillid);
|
||||
EnchantSkillHolder esd = null;
|
||||
// do we have this skill?
|
||||
if (enchantLearn != null)
|
||||
{
|
||||
if (skilllvl > 100)
|
||||
if (_skilllvl > 1000)
|
||||
{
|
||||
esd = enchantLearn.getEnchantSkillHolder(skilllvl);
|
||||
esd = enchantLearn.getEnchantSkillHolder(_skilllvl);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -65,48 +72,125 @@ public class ExEnchantSkillInfoDetail implements IClientOutgoingPacket
|
||||
|
||||
if (esd == null)
|
||||
{
|
||||
throw new IllegalArgumentException("Skill " + skillid + " dont have enchant data for level " + skilllvl);
|
||||
throw new IllegalArgumentException("Skill " + skillid + " dont have enchant data for level " + _skilllvl);
|
||||
}
|
||||
|
||||
if (type == 0)
|
||||
{
|
||||
multi = Config.NORMAL_ENCHANT_COST_MULTIPLIER;
|
||||
multi = EnchantSkillGroupsData.NORMAL_ENCHANT_COST_MULTIPLIER;
|
||||
}
|
||||
else if (type == 1)
|
||||
{
|
||||
multi = Config.SAFE_ENCHANT_COST_MULTIPLIER;
|
||||
multi = EnchantSkillGroupsData.SAFE_ENCHANT_COST_MULTIPLIER;
|
||||
}
|
||||
_chance = esd.getRate(ply);
|
||||
_sp = esd.getSpCost();
|
||||
if (type == TYPE_UNTRAIN_ENCHANT)
|
||||
if (type != TYPE_IMMORTAL_ENCHANT)
|
||||
{
|
||||
_sp = (int) (0.8 * _sp);
|
||||
_chance = esd.getRate(ply);
|
||||
_sp = esd.getSpCost();
|
||||
if (type == TYPE_UNTRAIN_ENCHANT)
|
||||
{
|
||||
_sp = (int) (0.8 * _sp);
|
||||
}
|
||||
_adenacount = esd.getAdenaCost() * multi;
|
||||
}
|
||||
else
|
||||
{
|
||||
_chance = 100;
|
||||
_sp = 0;
|
||||
_adenacount = 0;
|
||||
}
|
||||
_adenacount = esd.getAdenaCost() * multi;
|
||||
_type = type;
|
||||
_skillid = skillid;
|
||||
_skilllvl = skilllvl;
|
||||
|
||||
final int _elvl = ((_skilllvl % 100) - 1) / 10;
|
||||
switch (type)
|
||||
{
|
||||
case TYPE_NORMAL_ENCHANT:
|
||||
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK;
|
||||
reqCount = (((_skilllvl % 100) > 1) ? 0 : 1);
|
||||
{
|
||||
if (ply.getClassId().level() < 4)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_OLD;
|
||||
}
|
||||
else if (_elvl == 0)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK;
|
||||
}
|
||||
else if (_elvl == 1)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V2;
|
||||
}
|
||||
else
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.NORMAL_ENCHANT_BOOK_V3;
|
||||
}
|
||||
reqCount = 1;
|
||||
break;
|
||||
}
|
||||
case TYPE_SAFE_ENCHANT:
|
||||
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK;
|
||||
reqCount = 1;
|
||||
break;
|
||||
case TYPE_UNTRAIN_ENCHANT:
|
||||
bookId = EnchantSkillGroupsData.UNTRAIN_ENCHANT_BOOK;
|
||||
{
|
||||
if (ply.getClassId().level() < 4)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_OLD;
|
||||
}
|
||||
else if (_elvl == 0)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK;
|
||||
}
|
||||
else if (_elvl == 1)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V2;
|
||||
}
|
||||
else
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.SAFE_ENCHANT_BOOK_V3;
|
||||
}
|
||||
reqCount = 1;
|
||||
break;
|
||||
}
|
||||
case TYPE_CHANGE_ENCHANT:
|
||||
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK;
|
||||
{
|
||||
if (ply.getClassId().level() < 4)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_OLD;
|
||||
}
|
||||
else if (_elvl == 0)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK;
|
||||
}
|
||||
else if (_elvl == 1)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V2;
|
||||
}
|
||||
else
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.CHANGE_ENCHANT_BOOK_V3;
|
||||
}
|
||||
reqCount = 1;
|
||||
break;
|
||||
}
|
||||
case TYPE_IMMORTAL_ENCHANT:
|
||||
{
|
||||
if (ply.getClassId().level() < 4)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
|
||||
}
|
||||
else if (_elvl == 0)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL;
|
||||
}
|
||||
else if (_elvl == 1)
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V2;
|
||||
}
|
||||
else
|
||||
{
|
||||
bookId = EnchantSkillGroupsData.IMMORTAL_SCROLL_V3;
|
||||
}
|
||||
reqCount = 1;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((type != TYPE_SAFE_ENCHANT) && !Config.ES_SP_BOOK_NEEDED)
|
||||
@@ -122,7 +206,8 @@ public class ExEnchantSkillInfoDetail implements IClientOutgoingPacket
|
||||
|
||||
packet.writeD(_type);
|
||||
packet.writeD(_skillid);
|
||||
packet.writeD(_skilllvl);
|
||||
packet.writeH(_maxlvl);
|
||||
packet.writeH(_skilllvl);
|
||||
packet.writeQ(_sp * multi); // sp
|
||||
packet.writeD(_chance); // exp
|
||||
packet.writeD(0x02); // items count?
|
||||
|
||||
@@ -16,11 +16,10 @@
|
||||
*/
|
||||
package com.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jmobius.commons.network.PacketWriter;
|
||||
import com.l2jmobius.gameserver.model.skills.Skill;
|
||||
import com.l2jmobius.gameserver.network.client.OutgoingPackets;
|
||||
|
||||
public class ExEnchantSkillList implements IClientOutgoingPacket
|
||||
@@ -34,16 +33,29 @@ public class ExEnchantSkillList implements IClientOutgoingPacket
|
||||
}
|
||||
|
||||
private final EnchantSkillType _type;
|
||||
private final List<Skill> _skills = new LinkedList<>();
|
||||
private final List<Skill> _skills;
|
||||
|
||||
static class Skill
|
||||
{
|
||||
public int id;
|
||||
public int nextLevel;
|
||||
|
||||
Skill(int pId, int pNextLevel)
|
||||
{
|
||||
id = pId;
|
||||
nextLevel = pNextLevel;
|
||||
}
|
||||
}
|
||||
|
||||
public void addSkill(int id, int level)
|
||||
{
|
||||
_skills.add(new Skill(id, level));
|
||||
}
|
||||
|
||||
public ExEnchantSkillList(EnchantSkillType type)
|
||||
{
|
||||
_type = type;
|
||||
}
|
||||
|
||||
public void addSkill(Skill skill)
|
||||
{
|
||||
_skills.add(skill);
|
||||
_skills = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -53,10 +65,10 @@ public class ExEnchantSkillList implements IClientOutgoingPacket
|
||||
|
||||
packet.writeD(_type.ordinal());
|
||||
packet.writeD(_skills.size());
|
||||
for (Skill skill : _skills)
|
||||
for (Skill sk : _skills)
|
||||
{
|
||||
packet.writeD(skill.getId());
|
||||
packet.writeD(skill.getLevel());
|
||||
packet.writeD(sk.id);
|
||||
packet.writeD(sk.nextLevel);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user