private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,reputation,fame,raidbossPoints,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,online,clan_privs,wantspeace,base_class,nobless,power_grade,vitality_points,createDate,kills,deaths,name_colors) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,reputation=?,fame=?,raidbossPoints=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,online=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,bookmarkslot=?,vitality_points=?,language=?,faction=?,pccafe_points=?,kills=?,deaths=?,name_colors=? WHERE charId=?";
внес изменения в createDb
private boolean createDb()
{
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement statement = con.prepareStatement(INSERT_CHARACTER))
{
statement.setString(1, _accountName);
statement.setInt(2, getObjectId());
statement.setString(3, getName());
statement.setInt(4, getLevel());
statement.setInt(5, getMaxHp());
statement.setDouble(6, getCurrentHp());
statement.setInt(7, getMaxCp());
statement.setDouble(8, getCurrentCp());
statement.setInt(9, getMaxMp());
statement.setDouble(10, getCurrentMp());
statement.setInt(11, _appearance.getFace());
statement.setInt(12, _appearance.getHairStyle());
statement.setInt(13, _appearance.getHairColor());
statement.setInt(14, _appearance.isFemale() ? 1 : 0);
statement.setLong(15, getExp());
statement.setLong(16, getSp());
statement.setInt(17, getReputation());
statement.setInt(18, _fame);
statement.setInt(19, _raidbossPoints);
statement.setInt(20, _pvpKills);
statement.setInt(21, _pkKills);
statement.setInt(22, getOgClanId());
statement.setInt(23, getRace().ordinal());
statement.setInt(24, getClassId().getId());
statement.setLong(25, _deleteTimer);
statement.setInt(26, hasDwarvenCraft() ? 1 : 0);
statement.setString(27, getTitle());
statement.setInt(28, _appearance.getTitleColor());
statement.setInt(29, isOnlineInt());
statement.setInt(30, _clanPrivileges.getBitmask());
statement.setInt(31, _wantsPeace);
statement.setInt(32, _baseClass);
statement.setInt(33, isNoble() ? 1 : 0);
statement.setLong(34, 0);
statement.setInt(35, PlayerStat.MIN_VITALITY_POINTS);
statement.setDate(36, new Date(_createDate.getTimeInMillis()));
statement.setInt(37, getTotalKills());
statement.setInt(38, getTotalDeaths());
statement.setInt(39, _appearance.getNameColor());
statement.executeUpdate();
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, "Could not insert char data: " + e.getMessage(), e);
return false;
}
return true;
}
внес изменения в storeCharBase()
private void storeCharBase()
{
final long exp = getStat().getBaseExp();
final int level = getStat().getBaseLevel();
final long sp = getStat().getBaseSp();
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement statement = con.prepareStatement(UPDATE_CHARACTER))
{
statement.setInt(1, level);
statement.setInt(2, getMaxHp());
statement.setDouble(3, getCurrentHp());
statement.setInt(4, getMaxCp());
statement.setDouble(5, getCurrentCp());
statement.setInt(6, getMaxMp());
statement.setDouble(7, getCurrentMp());
statement.setInt(8, _appearance.getFace());
statement.setInt(9, _appearance.getHairStyle());
statement.setInt(10, _appearance.getHairColor());
statement.setInt(11, _appearance.isFemale() ? 1 : 0);
statement.setInt(12, getHeading());
statement.setInt(13, _lastLoc != null ? _lastLoc.getX() : getX());
statement.setInt(14, _lastLoc != null ? _lastLoc.getY() : getY());
statement.setInt(15, _lastLoc != null ? _lastLoc.getZ() : getZ());
statement.setLong(16, exp);
statement.setLong(17, _expBeforeDeath);
statement.setLong(18, sp);
statement.setInt(19, getReputation());
statement.setInt(20, _fame);
statement.setInt(21, _raidbossPoints);
statement.setInt(22, _pvpKills);
statement.setInt(23, _pkKills);
statement.setInt(24, getOgClanId());
statement.setInt(25, getRace().ordinal());
statement.setInt(26, getClassId().getId());
statement.setLong(27, _deleteTimer);
statement.setString(28, getTitle());
statement.setInt(29, _appearance.getTitleColor());
statement.setInt(30, isOnlineInt());
statement.setInt(31, _clanPrivileges.getBitmask());
statement.setInt(32, _wantsPeace);
statement.setInt(33, _baseClass);
long totalOnlineTime = _onlineTime;
if (_onlineBeginTime > 0)
{
totalOnlineTime += (System.currentTimeMillis() - _onlineBeginTime) / 1000;
}
statement.setLong(34, _offlineShopStart > 0 ? _onlineTime : totalOnlineTime);
statement.setInt(35, isNoble() ? 1 : 0);
statement.setInt(36, _powerGrade);
statement.setInt(37, _pledgeType);
statement.setInt(38, _lvlJoinedAcademy);
statement.setLong(39, _apprentice);
statement.setLong(40, _sponsor);
statement.setLong(41, _clanJoinExpiryTime);
statement.setLong(42, _clanCreateExpiryTime);
statement.setString(43, getName());
statement.setInt(44, _bookmarkslot);
statement.setInt(45, getStat().getBaseVitalityPoints());
statement.setString(46, _lang);
int factionId = 0;
if (_isGood)
{
factionId = 1;
}
if (_isEvil)
{
factionId = 2;
}
statement.setInt(47, factionId);
statement.setInt(48, _pcCafePoints);
statement.setInt(49, getTotalKills());
statement.setInt(50, getTotalDeaths());
statement.setInt(51, getObjectId());
statement.setInt(52, _appearance.getNameColor());
statement.execute();
}
catch (Exception e)
{
LOGGER.log(Level.WARNING, "Could not store char base data: " + this + " - " + e.getMessage(), e);
}
}
внес изменения в storeCharBase()
Player restore(int objectId)
private static Player restore(int objectId)
{
Player player = null;
double currentCp = 0;
double currentHp = 0;
double currentMp = 0;
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement statement = con.prepareStatement(RESTORE_CHARACTER))
{
statement.setInt(1, objectId);
try (ResultSet rset = statement.executeQuery())
{
if (rset.next())
{
final int activeClassId = rset.getInt("classid");
final boolean female = rset.getInt("sex") != Sex.MALE.ordinal();
final PlayerTemplate template = PlayerTemplateData.getInstance().getTemplate(activeClassId);
final PlayerAppearance app = new PlayerAppearance(rset.getByte("face"), rset.getByte("hairColor"), rset.getByte("hairStyle"), female);
player = new Player(objectId, template, rset.getString("account_name"), app);
player.setName(rset.getString("char_name"));
player.setLastAccess(rset.getLong("lastAccess"));
player.getStat().setExp(rset.getLong("exp"));
player.setExpBeforeDeath(rset.getLong("expBeforeDeath"));
player.getStat().setLevel(rset.getInt("level"));
player.getStat().setSp(rset.getLong("sp"));
player.setWantsPeace(rset.getInt("wantspeace"));
player.setHeading(rset.getInt("heading"));
player.setInitialReputation(rset.getInt("reputation"));
player.setFame(rset.getInt("fame"));
player.setRaidbossPoints(rset.getInt("raidbossPoints"));
player.setPvpKills(rset.getInt("pvpkills"));
player.setPkKills(rset.getInt("pkkills"));
player.setOnlineTime(rset.getLong("onlinetime"));
player.setNoble(rset.getInt("nobless") == 1);
final int factionId = rset.getInt("faction");
if (factionId == 1)
{
player.setGood();
}
if (factionId == 2)
{
player.setEvil();
}
player.setClanJoinExpiryTime(rset.getLong("clan_join_expiry_time"));
if (player.getClanJoinExpiryTime() < System.currentTimeMillis())
{
player.setClanJoinExpiryTime(0);
}
player.setClanCreateExpiryTime(rset.getLong("clan_create_expiry_time"));
if (player.getClanCreateExpiryTime() < System.currentTimeMillis())
{
player.setClanCreateExpiryTime(0);
}
player.setPcCafePoints(rset.getInt("pccafe_points"));
final int clanId = rset.getInt("clanid");
player.setPowerGrade(rset.getInt("power_grade"));
player.getStat().setVitalityPoints(rset.getInt("vitality_points"));
player.setPledgeType(rset.getInt("subpledge"));
if (clanId > 0)
{
player.setClan(ClanTable.getInstance().getClan(clanId));
}
if (player.getClan() != null)
{
if (player.getClan().getLeaderId() != player.getObjectId())
{
if (player.getPowerGrade() == 0)
{
player.setPowerGrade(5);
}
player.setClanPrivileges(player.getClan().getRankPrivs(player.getPowerGrade()));
}
else
{
player.getClanPrivileges().setAll();
player.setPowerGrade(1);
}
player.setPledgeClass(ClanMember.calculatePledgeClass(player));
}
else
{
if (player.isNoble())
{
player.setPledgeClass(5);
}
if (player.isHero())
{
player.setPledgeClass(8);
}
player.getClanPrivileges().clear();
}
player.setTotalDeaths(rset.getInt("deaths"));
player.setTotalKills(rset.getInt("kills"));
player.setDeleteTimer(rset.getLong("deletetime"));
player.setTitle(rset.getString("title"));
player.setAccessLevel(rset.getInt("accesslevel"), false, false);
final int titleColor = rset.getInt("title_color");
if (titleColor != PlayerAppearance.DEFAULT_TITLE_COLOR)
{
player.getAppearance().setTitleColor(titleColor);
}
final int nameColor = rset.getInt("name_colors");
if (nameColor != PlayerAppearance.DEFAULT_NAME_COLOR)
{
player.getAppearance().setNameColor(nameColor);
}