Помогите пожалуйста! Хотел сделать чтобы при взятии сабкласса не сбрасывалось СП и Лвл, то есть на каком взял, такой и останется при взятии.
Пробовал сделать так:
[SRC="java"] public boolean addSubClass(final int classId, boolean storeOld, int certification) {
if (_classlist.size() >= 15)
return false;
final ClassId newId = ClassId.VALUES[classId];
final SubClass newClass = new SubClass();
newClass.setBase(false);
if (newId.getRace() == null)
return false;
newClass.setClassId(classId);
newClass.setCertification(certification);
_classlist.put(classId, newClass);
Connection con = null;
PreparedStatement statement = null;
try {
// Store the basic info about this new sub-class.
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("REPLACE INTO character_subclasses (char_obj_id, class_id, exp, sp, curHp, curMp, curCp, maxHp, maxMp, maxCp, level, active, isBase, death_penalty, certification) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
statement.setInt(1, getObjectId());
statement.setInt(2, newClass.getClassId());
statement.setLong(3, Experience.LEVEL[getActiveClass().getLevel()]);
statement.setLong(4, getActiveClass().getSp());
statement.setDouble(5, getCurrentHp());
statement.setDouble(6, getCurrentMp());
statement.setDouble(7, getCurrentCp());
statement.setDouble(8, getCurrentHp());
statement.setDouble(9, getCurrentMp());
statement.setDouble(10, getCurrentCp());
statement.setInt(11, getActiveClass().getLevel());
statement.setInt(12, 0);
statement.setInt(13, 0);
statement.setInt(14, 0);
statement.setInt(15, certification);
statement.execute();
} catch (final Exception e) {
_log.warn("Could not add character sub-class: " + e, e);
return false;
} finally {
DbUtils.closeQuietly(con, statement);
}
setActiveSubClass(classId, storeOld);
boolean countUnlearnable = true;
int unLearnable = 0;
sendPacket(new SkillList(this));
setCurrentHpMp(getMaxHp(), getMaxMp(), true);
setCurrentCp(getMaxCp());
return true;
}[/SRC]
Но почему-то не удачно :confused:
Добавлено через 12 часов 50 минут
Понял что это делается в Subclass.java
На этом отрезке кода:
[SRC="java"]public class SubClass
{
public static final int CERTIFICATION_65 = 1 << 0;
public static final int CERTIFICATION_70 = 1 << 1;
public static final int CERTIFICATION_75 = 1 << 2;
public static final int CERTIFICATION_80 = 1 << 3;
private int _class = 0;
private long _exp = Experience.LEVEL[Config.ALT_GAME_START_LEVEL_TO_SUBCLASS], minExp = Experience.LEVEL[Config.ALT_GAME_START_LEVEL_TO_SUBCLASS], maxExp = Experience.LEVEL[Experience.LEVEL.length - 1];
private int _sp = 0;
private int _level = Config.ALT_GAME_START_LEVEL_TO_SUBCLASS, _certification;
private double _Hp = 1, _Mp = 1, _Cp = 1;
private boolean _active = false, _isBase = false;
private DeathPenalty _dp;[/SRC]
Только не понимаю как вычислять текущий лвл и сп, и как вставить это сюда, помогите пожалуйста.
Пробовал сделать так:
[SRC="java"] public boolean addSubClass(final int classId, boolean storeOld, int certification) {
if (_classlist.size() >= 15)
return false;
final ClassId newId = ClassId.VALUES[classId];
final SubClass newClass = new SubClass();
newClass.setBase(false);
if (newId.getRace() == null)
return false;
newClass.setClassId(classId);
newClass.setCertification(certification);
_classlist.put(classId, newClass);
Connection con = null;
PreparedStatement statement = null;
try {
// Store the basic info about this new sub-class.
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("REPLACE INTO character_subclasses (char_obj_id, class_id, exp, sp, curHp, curMp, curCp, maxHp, maxMp, maxCp, level, active, isBase, death_penalty, certification) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
statement.setInt(1, getObjectId());
statement.setInt(2, newClass.getClassId());
statement.setLong(3, Experience.LEVEL[getActiveClass().getLevel()]);
statement.setLong(4, getActiveClass().getSp());
statement.setDouble(5, getCurrentHp());
statement.setDouble(6, getCurrentMp());
statement.setDouble(7, getCurrentCp());
statement.setDouble(8, getCurrentHp());
statement.setDouble(9, getCurrentMp());
statement.setDouble(10, getCurrentCp());
statement.setInt(11, getActiveClass().getLevel());
statement.setInt(12, 0);
statement.setInt(13, 0);
statement.setInt(14, 0);
statement.setInt(15, certification);
statement.execute();
} catch (final Exception e) {
_log.warn("Could not add character sub-class: " + e, e);
return false;
} finally {
DbUtils.closeQuietly(con, statement);
}
setActiveSubClass(classId, storeOld);
boolean countUnlearnable = true;
int unLearnable = 0;
sendPacket(new SkillList(this));
setCurrentHpMp(getMaxHp(), getMaxMp(), true);
setCurrentCp(getMaxCp());
return true;
}[/SRC]
Но почему-то не удачно :confused:
Добавлено через 12 часов 50 минут
Понял что это делается в Subclass.java
На этом отрезке кода:
[SRC="java"]public class SubClass
{
public static final int CERTIFICATION_65 = 1 << 0;
public static final int CERTIFICATION_70 = 1 << 1;
public static final int CERTIFICATION_75 = 1 << 2;
public static final int CERTIFICATION_80 = 1 << 3;
private int _class = 0;
private long _exp = Experience.LEVEL[Config.ALT_GAME_START_LEVEL_TO_SUBCLASS], minExp = Experience.LEVEL[Config.ALT_GAME_START_LEVEL_TO_SUBCLASS], maxExp = Experience.LEVEL[Experience.LEVEL.length - 1];
private int _sp = 0;
private int _level = Config.ALT_GAME_START_LEVEL_TO_SUBCLASS, _certification;
private double _Hp = 1, _Mp = 1, _Cp = 1;
private boolean _active = false, _isBase = false;
private DeathPenalty _dp;[/SRC]
Только не понимаю как вычислять текущий лвл и сп, и как вставить это сюда, помогите пожалуйста.