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()
    {
        // Get the exp, level, and sp of base class to store in base table
        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))
        {
            // Retrieve the Player from the characters table of the database
            // Извлекает игрока из таблицы персонажей базы данных
            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"));
                    // player.setApprentice(rset.getInt("apprentice"));
                    
                    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);
                    }