Index: C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/config/altsettings.properties =================================================================== --- C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/config/altsettings.properties (revision 223) +++ C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/config/altsettings.properties (working copy) @@ -113,6 +113,10 @@ # - skills of fighters/mages costs x3 SP AltGameSkillLearn = False +# If true, previous skills will not be removed when you change your subclass. +# Default = False +AltSubClassSkills = False + # Allow player sub-class addition without checking for unique quest items. AltSubClassWithoutQuests = False Index: C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/net/sf/l2j/Config.java =================================================================== --- C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/net/sf/l2j/Config.java (revision 223) +++ C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/net/sf/l2j/Config.java (working copy) @@ -275,6 +275,9 @@ /** How much adena receive characters who pick two or less of the winning number */ public static int ALT_LOTTERY_2_AND_1_NUMBER_PRIZE; + + /** AltSettings for subclass. Load Subclass skills if false, Load all character skills if true. */ + public static boolean ALT_SUBCLASS_SKILLS; /* ************************************************************************** * GM CONFIG General GM AccessLevel * @@ -1434,6 +1437,8 @@ ALT_LOTTERY_4_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery4NumberRate","0.2")); ALT_LOTTERY_3_NUMBER_RATE = Float.parseFloat(altSettings.getProperty("AltLottery3NumberRate","0.2")); ALT_LOTTERY_2_AND_1_NUMBER_PRIZE = Integer.parseInt(altSettings.getProperty("AltLottery2and1NumberPrize","200")); + + ALT_SUBCLASS_SKILLS = Boolean.parseBoolean(altSettings.getProperty("AltSubClassSkills", "False")); } catch (Exception e) { Index: C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 223) +++ C:/Documents and Settings/Administrator/My Documents/Workspace/L2_GameServer_c5/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -181,6 +181,7 @@ public final class L2PcInstance extends L2PlayableInstance { private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=? AND class_index=?"; + private static final String RESTORE_SKILLS_FOR_CHAR_ALT_SUBCLASS = "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=?"; private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (char_obj_id,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)"; private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND char_obj_id=? AND class_index=?"; private static final String DELETE_SKILL_FROM_CHAR = "DELETE FROM character_skills WHERE skill_id=? AND char_obj_id=? AND class_index=?"; @@ -5411,31 +5412,61 @@ try { - // Retrieve all skills of this L2PcInstance from the database - con = L2DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR); - statement.setInt(1, getObjectId()); - statement.setInt(2, getClassIndex()); - ResultSet rset = statement.executeQuery(); - - // Go though the recordset of this SQL query - while (rset.next()) + if(!Config.ALT_SUBCLASS_SKILLS) { - int id = rset.getInt("skill_id"); - int level = rset.getInt("skill_level"); + // Retrieve all skills of this L2PcInstance from the database + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR); + statement.setInt(1, getObjectId()); + statement.setInt(2, getClassIndex()); + ResultSet rset = statement.executeQuery(); - if (id > 9000) - continue; // fake skills for base stats + // Go though the recordset of this SQL query + while (rset.next()) + { + int id = rset.getInt("skill_id"); + int level = rset.getInt("skill_level"); + + if (id > 9000) + continue; // fake skills for base stats + + // Create a L2Skill object for each record + L2Skill skill = SkillTable.getInstance().getInfo(id, level); + + // Add the L2Skill object to the L2Character _skills and its Func objects to the calculator set of the L2Character + super.addSkill(skill); + } - // Create a L2Skill object for each record - L2Skill skill = SkillTable.getInstance().getInfo(id, level); + rset.close(); + statement.close(); + } + else + { + // Retrieve all skills of this L2PcInstance from the database + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR_ALT_SUBCLASS); + statement.setInt(1, getObjectId()); + ResultSet rset = statement.executeQuery(); - // Add the L2Skill object to the L2Character _skills and its Func objects to the calculator set of the L2Character - super.addSkill(skill); + // Go though the recordset of this SQL query + while (rset.next()) + { + int id = rset.getInt("skill_id"); + int level = rset.getInt("skill_level"); + + if (id > 9000) + continue; // fake skills for base stats + + // Create a L2Skill object for each record + L2Skill skill = SkillTable.getInstance().getInfo(id, level); + + // Add the L2Skill object to the L2Character _skills and its Func objects to the calculator set of the L2Character + super.addSkill(skill); + } + + rset.close(); + statement.close(); } - - rset.close(); - statement.close(); } catch (Exception e) {