
I will let the class' here and hope a bit of help from you to finish it; i will keept trying to find a way and updating the post if it's neccessary

It's the PvpSkillLearn.class:
Code: Select all
+package net.sf.l2j.gameserver.model;++/**+ * + * @author GuillermoKiss+ * + *Class made for PvpSkillTrees, + */++public class PvpSkillLearn +{++ // these two build the primary key+ private final int _id;+ private final int _level;++ // not needed, just for easier debug+ private final String _name;+ + private final int _minLevel;+ private final int _pvpKills;+ + public PvpSkillLearn(int id, int lvl, String name, int minLvl, int pvpKills)+ {+ _id = id;+ _level = lvl;+ _name = name.intern();+ _minLevel = minLvl;+ _pvpKills = pvpKills;+ }++ /**+ * @return Returns the id.+ */+ public int getId()+ {+ return _id;+ }++ /**+ * @return Returns the level.+ */+ public int getLevel()+ {+ return _level;+ }++ /**+ * @return Returns the name.+ */+ public String getName()+ {+ return _name;+ }++ public int getMinLevel()+ {+ return _minLevel;+ }++ public int getPvpKills()+ {+ return _pvpKills;+ }++}+
Code: Select all
+package net.sf.l2j.gameserver.datatables;++import java.sql.Connection;+import java.sql.PreparedStatement;+import java.sql.ResultSet;+import java.sql.SQLException;+import java.util.Collection;+import java.util.List;+import java.util.Map;+import java.util.logging.Logger;++import javolution.util.FastList;+import javolution.util.FastMap;+import net.sf.l2j.L2DatabaseFactory;+import net.sf.l2j.gameserver.model.L2Skill;+import net.sf.l2j.gameserver.model.PvpSkillLearn;+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;+import net.sf.l2j.gameserver.model.base.ClassId;++/**+ * + * @author GuillermoKiss+ *+ *Class made for PVP testing skill tables.+ */++public class PvpSkillTreeTable +{+ + private static Logger _log = Logger.getLogger(PvpSkillTreeTable.class.getName());+ + private Map<ClassId, Map<Integer, PvpSkillLearn>> _pvpSkillTrees;+ + public static PvpSkillTreeTable getInstance()+ + {+ return SingletonHolder._instance;+ }++ /**+ * Return the minimum level needed to have this Expertise.<BR><BR>+ *+ * @param grade The grade level searched+ */+ public int getExpertiseLevel(int grade)+ {+ if (grade <= 0)+ return 0;+ + Map<Integer, PvpSkillLearn> learnMap = getPvpSkillTrees().get(ClassId.paladin);+ + int skillHashCode = SkillTable.getSkillHashCode(239, grade);+ if (learnMap.containsKey(skillHashCode))+ {+ return learnMap.get(skillHashCode).getPvpKills();+ }+ + _log.severe("Expertise not found for grade " + grade);+ return 0;+ }+ + public int getMinSkillLevel(int skillId, ClassId classId, int skillLvl)+ {+ Map<Integer, PvpSkillLearn> map = getPvpSkillTrees().get(classId);+ + int skillHashCode = SkillTable.getSkillHashCode(skillId, skillLvl);+ + if (map.containsKey(skillHashCode))+ {+ return map.get(skillHashCode).getMinLevel();+ }+ + return 0;+ }+ + public int getMinSkillLevel(int skillId, int skillLvl)+ {+ int skillHashCode = SkillTable.getSkillHashCode(skillId, skillLvl);+ + for (Map<Integer, PvpSkillLearn> map : getPvpSkillTrees().values())+ {+ if (map.containsKey(skillHashCode))+ {+ return map.get(skillHashCode).getMinLevel();+ }+ }+ return 0;+ }+ + private PvpSkillTreeTable()+ {+ int classId = 0;+ int count = 0;++ Connection con = null;+ + try+ {+ try + {+ con = L2DatabaseFactory.getInstance().getConnection();+ } catch (SQLException e1) + {+ e1.printStackTrace();+ }+ try+ {+ PreparedStatement statement = con.prepareStatement("SELECT * FROM class_list ORDER BY id");+ ResultSet classlist = statement.executeQuery();+ + Map<Integer, PvpSkillLearn> map;+ int parentClassId;+ PvpSkillLearn skillLearn;+ + while (classlist.next())+ {+ map = new FastMap<Integer, PvpSkillLearn>();+ parentClassId = classlist.getInt("parent_id");+ classId = classlist.getInt("id");+ PreparedStatement statement2 = con.prepareStatement("SELECT class_id, skill_id, level, name, min_level, pvpKills FROM pvp_skill_trees where class_id=? ORDER BY skill_id, level");+ statement2.setInt(1, classId);+ ResultSet pvpskilltree = statement2.executeQuery();+ + if (parentClassId != -1)+ {+ Map<Integer, PvpSkillLearn> parentMap = getPvpSkillTrees().get(ClassId.values()[parentClassId]);+ map.putAll(parentMap);+ }+ + int prevSkillId = -1;+ + while (pvpskilltree.next())+ {+ int id = pvpskilltree.getInt("skill_id");+ int lvl = pvpskilltree.getInt("level");+ String name = pvpskilltree.getString("name");+ int minLvl = pvpskilltree.getInt("min_level");+ int pvpKills = pvpskilltree.getInt("pvpKills");+ + if (prevSkillId != id)+ prevSkillId = id;+ + skillLearn = new PvpSkillLearn(id, lvl, name, minLvl, pvpKills);+ map.put(SkillTable.getSkillHashCode(id, lvl), skillLearn);+ }+ + getPvpSkillTrees().put(ClassId.values()[classId], map);+ pvpskilltree.close();+ statement2.close();+ + count += map.size();+ _log.fine("PvpSkillTreeTable: skill tree for class " + classId + " has " + map.size() + " skills");+ }+ + classlist.close();+ statement.close();+ }+ catch (Exception e)+ {+ _log.severe("Error while creating pvp skill tree (Class ID " + classId + "):" + e);+ }+ + _log.config("PvpSkillTreeTable: Loaded " + count + " skills.");+ }+ finally+ {+ try+ {+ con.close();+ }+ catch (Exception e)+ {+ }+ }+ }+ + private Map<ClassId, Map<Integer, PvpSkillLearn>> getPvpSkillTrees()+ {+ if (_pvpSkillTrees == null)+ _pvpSkillTrees = new FastMap<ClassId, Map<Integer, PvpSkillLearn>>();+ + return _pvpSkillTrees;+ }+ + public PvpSkillLearn[] getAvailableSkills(L2PcInstance cha, ClassId classId)+ {+ List<PvpSkillLearn> result = new FastList<PvpSkillLearn>();+ Collection<PvpSkillLearn> skills = getPvpSkillTrees().get(classId).values();+ + if (skills == null)+ {+ _log.warning("PvpSkilltree for class " + classId + " is not defined !");+ return new PvpSkillLearn[0];+ }+ + L2Skill[] oldSkills = cha.getAllSkills();+ + for (PvpSkillLearn temp : skills)+ {+ if (temp.getMinLevel() <= cha.getLevel())+ {+ boolean knownSkill = false;+ + for (int j = 0; j < oldSkills.length && !knownSkill; j++)+ {+ if (oldSkills[j].getId() == temp.getId())+ {+ knownSkill = true;+ + if (oldSkills[j].getLevel() == temp.getLevel() - 1)+ {+ // this is the next level of a skill that we know+ result.add(temp);+ }+ }+ }+ + if (!knownSkill && temp.getLevel() == 1)+ {+ // this is a new skill+ result.add(temp);+ }+ }+ }+ return result.toArray(new PvpSkillLearn[result.size()]);+ }+ + @SuppressWarnings("synthetic-access")+ private static class SingletonHolder+ {+ protected static final PvpSkillTreeTable _instance = new PvpSkillTreeTable();+ }+}+
Code: Select all
==============================================================================================================NEW SCRIPTS APPLIEDS AT LINES ++71++ // ++139++import net.sf.l2j.gameserver.datatables.ItemTable;import net.sf.l2j.gameserver.datatables.MapRegionTable;import net.sf.l2j.gameserver.datatables.NobleSkillTable;import net.sf.l2j.gameserver.datatables.NpcTable;import net.sf.l2j.gameserver.datatables.SkillTable;import net.sf.l2j.gameserver.datatables.SkillTreeTable;+ import net.sf.l2j.gameserver.datatables.PvpSkillTreeTable;import net.sf.l2j.gameserver.handler.AdminCommandHandler;import net.sf.l2j.gameserver.handler.IAdminCommandHandler;import net.sf.l2j.gameserver.handler.IItemHandler;import net.sf.l2j.gameserver.handler.ItemHandler;import net.sf.l2j.gameserver.instancemanager.CastleManager;import net.sf.l2j.gameserver.instancemanager.CoupleManager;import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;import net.sf.l2j.gameserver.instancemanager.DuelManager;import net.sf.l2j.gameserver.instancemanager.FortManager;import net.sf.l2j.gameserver.instancemanager.FortSiegeManager;import net.sf.l2j.gameserver.instancemanager.InstanceManager;import net.sf.l2j.gameserver.instancemanager.ItemsOnGroundManager;import net.sf.l2j.gameserver.instancemanager.QuestManager;import net.sf.l2j.gameserver.instancemanager.SiegeManager;import net.sf.l2j.gameserver.model.BlockList;import net.sf.l2j.gameserver.model.Elementals;import net.sf.l2j.gameserver.model.FishData;import net.sf.l2j.gameserver.model.L2AccessLevel;import net.sf.l2j.gameserver.model.L2CharPosition;import net.sf.l2j.gameserver.model.L2Clan;import net.sf.l2j.gameserver.model.L2ClanMember;import net.sf.l2j.gameserver.model.L2Effect;import net.sf.l2j.gameserver.model.L2Fishing;import net.sf.l2j.gameserver.model.L2HennaInstance;import net.sf.l2j.gameserver.model.L2ItemInstance;import net.sf.l2j.gameserver.model.L2Macro;import net.sf.l2j.gameserver.model.L2ManufactureList;import net.sf.l2j.gameserver.model.L2Object;import net.sf.l2j.gameserver.model.L2Party;import net.sf.l2j.gameserver.model.L2PetData;import net.sf.l2j.gameserver.model.L2PetDataTable;import net.sf.l2j.gameserver.model.L2Radar;import net.sf.l2j.gameserver.model.L2RecipeList;import net.sf.l2j.gameserver.model.L2Request;import net.sf.l2j.gameserver.model.L2ShortCut;import net.sf.l2j.gameserver.model.L2Skill;import net.sf.l2j.gameserver.model.L2SkillLearn;+ import net.sf.l2j.gameserver.model.PvpSkillLearn;import net.sf.l2j.gameserver.model.L2Transformation;import net.sf.l2j.gameserver.model.L2World;import net.sf.l2j.gameserver.model.L2WorldRegion;import net.sf.l2j.gameserver.model.MacroList; ================================================================================================================NEW SCRIPTS APPLIEDS AT LINES ++2840,2864,++ /** * Give all available skills to the player.<br><br> * */ private void giveAvailableSkills() { int unLearnable = 0; int skillCounter = 0; // Get available skills L2SkillLearn[] skills = SkillTreeTable.getInstance().getAvailableSkills(this, getClassId()); while (skills.length > unLearnable) { for (L2SkillLearn s: skills) { L2Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel()); if (sk == null || (sk.getId() == L2Skill.SKILL_DIVINE_INSPIRATION && !Config.AUTO_LEARN_DIVINE_INSPIRATION)) { unLearnable++; continue; } if (getSkillLevel(sk.getId()) == -1) skillCounter++; // fix when learning toggle skills if (sk.isToggle()) { L2Effect toggleEffect = getFirstEffect(sk.getId()); if (toggleEffect != null) { // stop old toggle skill effect, and give new toggle skill effect back toggleEffect.exit(); sk.getEffects(this, this); } } addSkill(sk, true); } // Get new available skills skills = SkillTreeTable.getInstance().getAvailableSkills(this, getClassId()); } sendMessage("You have learned " + skillCounter + " new skills."); }++ public void givePvpSkills()+ {+ int unLearnable = 0;+ int skillCounter = 0;+ + PvpSkillLearn[] skills = PvpSkillTreeTable.getInstance().getAvailableSkills(this, getClassId());+ while (skills.length > unLearnable)+ {+ for (PvpSkillLearn s: skills)+ {+ L2Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());+ {+ unLearnable++;+ continue;+ }+ }++ // Get new available skills+ skills = PvpSkillTreeTable.getInstance().getAvailableSkills(this, getClassId());+ }++ sendMessage("You have learned " + skillCounter + " new skills.");+ }+ /** Set the Experience value of the L2PcInstance. */ public void setExp(long exp) { if (exp < 0) exp = 0; getStat().setExp(exp); }
