Давайте посмотрим L2VillageMasterInstance 394 строка
if (!player.addSubClass(paramOne, player.getTotalSubClasses() + 1))
{
player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_CANT_ADD_SUB));
return;
}
Если подумать это выхов функции addSubClass из L2PcInstance и вывод игроку сообщение об ошибке если она не удалось
Идём дальше открываем L2PcInstance и ищем addSubClass видим
public boolean addSubClass(int classId, int classIndex)
{
if (getTotalSubClasses() == Config.MAX_SUBCLASS || classIndex == 0)
return false;
if (getSubClasses().containsKey(classIndex))
return false;
// Note: Never change _classIndex in any method other than setActiveClass().
store(true);
SubClass newClass = new SubClass();
newClass.setClassId(classId);
newClass.setClassIndex(classIndex);
Connection con = null;
try
{
// Store the basic info about this new sub-class.
con = L2DatabaseFactory.getInstance().getConnection(con);
PreparedStatement statement = con.prepareStatement(ADD_CHAR_SUBCLASS);
statement.setInt(1, getObjectId());
statement.setInt(2, newClass.getClassId());
statement.setLong(3, newClass.getExp());
statement.setInt(4, newClass.getSp());
statement.setInt(5, newClass.getLevel());
statement.setInt(6, newClass.getClassIndex()); // <-- Added
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warn("WARNING: Could not add character sub class for " + getName() + ": " + e);
return false;
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
// Commit after database INSERT incase exception is thrown.
getSubClasses().put(newClass.getClassIndex(), newClass);
ClassId subTemplate = ClassId.values()[classId];
Collection<L2SkillLearn> skillTree = SkillTreeTable.getInstance().getAllowedSkills(subTemplate);
if (skillTree == null)
return true;
Map<Integer, L2Skill> prevSkillList = new HashMap<Integer, L2Skill>();
for (L2SkillLearn skillInfo : skillTree)
{
if (skillInfo.getMinLevel() <= 40)
{
L2Skill prevSkill = prevSkillList.get(skillInfo.getId());
L2Skill newSkill = SkillTable.getInstance().getInfo(skillInfo.getId(), skillInfo.getLevel());
if (prevSkill != null && (prevSkill.getLevel() >= newSkill.getLevel()))
continue;
if(newSkill!=null) {
prevSkillList.put(newSkill.getId(), newSkill);
storeSkill(newSkill, prevSkill, classIndex);
} else
_log.info("L2PcInstance: Skill "+skillInfo.getId()+" not found for character "+getName()+" ("+getClassId()+")");
}
}
getStat().resetModifiers();
return true;
}
Из этой функции собственно вот код дающий скилы новому сабу
Collection<L2SkillLearn> skillTree = SkillTreeTable.getInstance().getAllowedSkills(subTemplate);
if (skillTree == null)
return true;
Map<Integer, L2Skill> prevSkillList = new HashMap<Integer, L2Skill>();
for (L2SkillLearn skillInfo : skillTree)
{
if (skillInfo.getMinLevel() <= 40)
{
L2Skill prevSkill = prevSkillList.get(skillInfo.getId());
L2Skill newSkill = SkillTable.getInstance().getInfo(skillInfo.getId(), skillInfo.getLevel());
if (prevSkill != null && (prevSkill.getLevel() >= newSkill.getLevel()))
continue;
if(newSkill!=null) {
prevSkillList.put(newSkill.getId(), newSkill);
storeSkill(newSkill, prevSkill, classIndex);
} else
_log.info("L2PcInstance: Skill "+skillInfo.getId()+" not found for character "+getName()+" ("+getClassId()+")");
}
}
Учитесь шевелить мозгами.