Сервис покраски имени

sammet

Прославленный
Проверенный
Сообщения
376
Розыгрыши
0
Репутация
953
Реакции
311
Баллы
1 483
Хроники
  1. Homunculus
Исходники
Присутствуют
Сборка
L2JMOBIUS
Подскажите как правильно реализовать сервис покраски ника.Проблема в том что ник красит но после релога цвет становится по дефолту.
Java:
package services;

import org.l2jmobius.Config;
import org.l2jmobius.gameserver.handler.IBypassHandler;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;

public class ColorName implements IBypassHandler {
    private static final String[] COMMANDS =
            {
                    "ColorName"
            };

    @Override
    public boolean useBypass(String command, Player player, Creature bypassOrigin) {
        player.getAppearance().setNameColor(Config.NAME_COLOR_01);
        player.updateUserInfo();
        return true;
    }

    @Override
    public String[] getBypassList() {
        return COMMANDS;
    }
}
 
Решение
sammet, стоит обратить внимание на порядок указания значений подготовленного sql-запроса в методе storeCharBase
Java:
            statement.setInt(51, getObjectId());
            statement.setInt(52, _appearance.getNameColor());
SQL:
UPDATE characters SET ... name_colors=? WHERE charId=?
Ничего не смущает?)

В запросе RESTORE_CHARACTER возможно тоже что-то не так, его не видно в предоставленном огрызке кода
Подскажите как правильно реализовать сервис покраски ника.Проблема в том что ник красит но после релога цвет становится по дефолту.
Java:
package services;

import org.l2jmobius.Config;
import org.l2jmobius.gameserver.handler.IBypassHandler;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Player;

public class ColorName implements IBypassHandler {
    private static final String[] COMMANDS =
            {
                    "ColorName"
            };

    @Override
    public boolean useBypass(String command, Player player, Creature bypassOrigin) {
        player.getAppearance().setNameColor(Config.NAME_COLOR_01);
        player.updateUserInfo();
        return true;
    }

    @Override
    public String[] getBypassList() {
        return COMMANDS;
    }
}
Ну как минимум проверить сохраняет ли в бд изменения и подгружает ли их обратно, так же если тесты от админа - может быть на админе сбрасывает цвет после релога на указанный в конфиге
 
Ну как минимум проверить сохраняет ли в бд изменения и подгружает ли их обратно, так же если тесты от админа - может быть на админе сбрасывает цвет после релога на указанный в конфиге
Тестил на обычном игроке
 
ц него вроде есть купоны на изменения титула, мбих можно изменить на ник, но когда админ делает какието махинации над персом типо статов, титула, скорости они при релоге сбрасываются, посмотри в хендлере NicknameColor.java но не факт
 
Судя по всему у мобиуса не прдусмотрено сохранение цвета имени в БД, по крайней мере в той версии что я смотрел (HF).
Делайте по аналогии с титулом.
1. Создать колонку в БД - name_color
2. Обновить запросы сохранения данных персонажа Player.INSERT_CHARACTER и UPDATE_CHARACTER, добавив запись и обновление для новосозданной колонки name_color
3. Добавить сохранение цвета имени в Player.storeCharBase() n Player.createDb()
Java:
ps.setInt(ИНДЕКС_ПАРАМЕТРА, _appearance.getNameColor());
4. Добавить востановление цвета имени в Player.restore()
Java:
player.getAppearance().setNameColor(rset.getInt("name_color"));
 
  • Мне нравится
Реакции: kick
У мобиуса нет записи в БД о сохранении цвета ника.
Делать по аналогии с TitleColor. Посмотреть можно в Player.java
 
не выходит сделать)) ,при создании и релоге игрока он валяется дохлый ) с 0 hp и цвет имени так же становиться по дефолту
Java:
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);
                    }
sql
SQL:
CREATE TABLE IF NOT EXISTS `characters` (
  `account_name` VARCHAR(45) DEFAULT NULL,
  `charId` INT UNSIGNED NOT NULL DEFAULT 0,
  `char_name` VARCHAR(35) NOT NULL,
  `level` TINYINT UNSIGNED DEFAULT NULL,
  `maxHp` MEDIUMINT UNSIGNED DEFAULT NULL,
  `curHp` MEDIUMINT UNSIGNED DEFAULT NULL,
  `maxCp` MEDIUMINT UNSIGNED DEFAULT NULL,
  `curCp` MEDIUMINT UNSIGNED DEFAULT NULL,
  `maxMp` MEDIUMINT UNSIGNED DEFAULT NULL,
  `curMp` MEDIUMINT UNSIGNED DEFAULT NULL,
  `face` TINYINT UNSIGNED DEFAULT NULL,
  `hairStyle` TINYINT UNSIGNED DEFAULT NULL,
  `hairColor` TINYINT UNSIGNED DEFAULT NULL,
  `sex` TINYINT UNSIGNED DEFAULT NULL,
  `heading` MEDIUMINT DEFAULT NULL,
  `x` MEDIUMINT DEFAULT NULL,
  `y` MEDIUMINT DEFAULT NULL,
  `z` MEDIUMINT DEFAULT NULL,
  `exp` BIGINT UNSIGNED DEFAULT 0,
  `expBeforeDeath` BIGINT UNSIGNED DEFAULT 0,
  `sp` BIGINT(10) UNSIGNED NOT NULL DEFAULT 0,
  `reputation` INT DEFAULT NULL,
  `fame` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
  `raidbossPoints` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
  `pvpkills` SMALLINT UNSIGNED DEFAULT NULL,
  `pkkills` SMALLINT UNSIGNED DEFAULT NULL,
  `clanid` INT UNSIGNED DEFAULT NULL,
  `race` TINYINT UNSIGNED DEFAULT NULL,
  `classid` TINYINT UNSIGNED DEFAULT NULL,
  `base_class` TINYINT UNSIGNED NOT NULL DEFAULT 0,
  `transform_id` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  `deletetime` bigint(13) unsigned NOT NULL DEFAULT '0',
  `cancraft` TINYINT UNSIGNED DEFAULT NULL,
  `title` VARCHAR(21) DEFAULT NULL,
  `title_color` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0xECF9A2,
  `accesslevel` MEDIUMINT DEFAULT 0,
  `online` TINYINT UNSIGNED DEFAULT NULL,
  `onlinetime` INT DEFAULT NULL,
  `char_slot` TINYINT UNSIGNED DEFAULT NULL,
  `lastAccess` bigint(13) unsigned NOT NULL DEFAULT '0',
  `clan_privs` INT UNSIGNED DEFAULT 0,
  `wantspeace` TINYINT UNSIGNED DEFAULT 0,
  `power_grade` TINYINT UNSIGNED DEFAULT NULL,
  `nobless` TINYINT UNSIGNED NOT NULL DEFAULT 0,
  `subpledge` SMALLINT NOT NULL DEFAULT 0,
  `lvl_joined_academy` TINYINT UNSIGNED NOT NULL DEFAULT 0,
  `apprentice` INT UNSIGNED NOT NULL DEFAULT 0,
  `sponsor` INT UNSIGNED NOT NULL DEFAULT 0,
  `clan_join_expiry_time` bigint(13) unsigned NOT NULL DEFAULT '0',
  `clan_create_expiry_time` bigint(13) unsigned NOT NULL DEFAULT '0',
  `bookmarkslot` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  `vitality_points` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
  `createDate` date NOT NULL DEFAULT '2015-01-01',
  `language` VARCHAR(2) DEFAULT NULL,
  `faction` TINYINT UNSIGNED NOT NULL DEFAULT '0',
  `pccafe_points` int(6) NOT NULL DEFAULT '0',
  `deaths` SMALLINT NOT NULL DEFAULT '0',
  `kills` SMALLINT NOT NULL DEFAULT '0',
  `name_colors` INT UNSIGNED DEFAULT 0,
  PRIMARY KEY (`charId`),
  KEY `account_name` (`account_name`),
  KEY `char_name` (`char_name`),
  KEY `clanid` (`clanid`),
  KEY `online` (`online`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

# Common
CREATE INDEX idx_charId ON characters (charId);
CREATE INDEX idx_char_name ON characters (char_name);
CREATE INDEX idx_account_name ON characters (account_name);

# CharSelectionInfo
CREATE INDEX idx_accountName_createDate ON characters (account_name, createDate);

# TaskBirthday
CREATE INDEX idx_createDate ON characters (createDate);
 
Сохраните цвет в таблице переменных и считывайте его при каждом входе игрока в игру в EnterWorld.java помните что не все цвета можно исползовать, берите пример с TitleColor
 
sammet, стоит обратить внимание на порядок указания значений подготовленного sql-запроса в методе storeCharBase
Java:
            statement.setInt(51, getObjectId());
            statement.setInt(52, _appearance.getNameColor());
SQL:
UPDATE characters SET ... name_colors=? WHERE charId=?
Ничего не смущает?)

В запросе RESTORE_CHARACTER возможно тоже что-то не так, его не видно в предоставленном огрызке кода
 
Решение
sammet, стоит обратить внимание на порядок указания значений подготовленного sql-запроса в методе storeCharBase
Java:
            statement.setInt(51, getObjectId());
            statement.setInt(52, _appearance.getNameColor());
SQL:
UPDATE characters SET ... name_colors=? WHERE charId=?
Ничего не смущает?)

В запросе RESTORE_CHARACTER возможно тоже что-то не так, его не видно в предоставленном огрызке кода
Java:
private static final String RESTORE_CHARACTER = "SELECT * FROM characters WHERE charId=?";

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);
                    }
                    int nameColor = rset.getInt("name_colors");
                    if (nameColor != PlayerAppearance.DEFAULT_NAME_COLOR) {
                        player.getAppearance().setNameColor(nameColor);
                    }
                    player.setFistsWeaponItem(player.findFistsWeaponItem(activeClassId));
                    player.setUptime(System.currentTimeMillis());

                    currentHp = rset.getDouble("curHp");
                    currentCp = rset.getDouble("curCp");
                    currentMp = rset.getDouble("curMp");
 
sammet, стоит обратить внимание на порядок указания значений подготовленного sql-запроса в методе storeCharBase
Java:
            statement.setInt(51, getObjectId());
            statement.setInt(52, _appearance.getNameColor());
SQL:
UPDATE characters SET ... name_colors=? WHERE charId=?
Ничего не смущает?)

В запросе RESTORE_CHARACTER возможно тоже что-то не так, его не видно в предоставленном огрызке кода

если не лень и есть время - разжуй пожалуйста для чайников) что не так
 
если не лень и есть время - разжуй пожалуйста для чайников) что не так
исходя из sql-запрса, последним нужно указать айди персонажа
SQL:
name_colors=? WHERE charId=?
стало быть код должен выглядеть так
Java:
            statement.setInt(51, _appearance.getNameColor());           
            statement.setInt(52, getObjectId());
            statement.execute();
Итого 52 плейсхолдера, последним из которых айди персонажа
1720368924637.png
 
  • Мне нравится
  • Люблю это
Реакции: sammet и BladeRunner

    BladeRunner

    Баллов: 7
    збазиба. в этот раз не понял, может дойдет позже)
Назад
Сверху Снизу