Перейти к содержанию
Авторизация  
GUSTAVO

HP MP CP L2J

Рекомендуемые сообщения

Добрый день!

Сборка L2JServer последняя из репы.

Проблема с HP MP CP после релога.

Она возникает если надеты вещи которые повышают HP CP MP или наложен баф.

Перед релогом делаю heal и потом делаю релог и у персонажа HP CP MP становится меньше.

Судя по тому, что если не бафаться и не одевать вещи, хп сп и мп нормально показывают как и было до релога.

Как я понимаю нужно где то поменять местами загрузку эквипа, бафа с подгрузкой данных о персонаже из бд при входе в мир.

Сразу говорю в EnterWorld.java не нашел ничего. В L2PcInstance возможно не разглядел, может кто уже правил, поделитесь где конкретно это лежит. В старых ревизиях все запросы на БД есть в L2PcInstance, в последней (которую юзаю) не увидел таковых.

Изменено пользователем GUSTAVO

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте для начала после выхода чаром из мира посмотреть сколько хп сохранилось в бд

Возможно оно сначала загружает хп, а потом добавляет баффы, сеты итд

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте для начала после выхода чаром из мира посмотреть сколько хп сохранилось в бд

Возможно оно сначала загружает хп, а потом добавляет баффы, сеты итд

Так я это и сказал - "Судя по тому, что если не бафаться и не одевать вещи, хп сп и мп нормально показывают как и было до релога.

Как я понимаю нужно где то поменять местами загрузку эквипа, бафа с подгрузкой данных о персонаже из бд при входе в мир."

Я не могу найти где это менять местами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так я это и сказал - "Судя по тому, что если не бафаться и не одевать вещи, хп сп и мп нормально показывают как и было до релога.

Как я понимаю нужно где то поменять местами загрузку эквипа, бафа с подгрузкой данных о персонаже из бд при входе в мир."

Я не могу найти где это менять местами.

включите поиск по исходам и ищите таблицу характерс, там же хп персонажа хранится... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

глянь последовательность в EnterWorld.java, Я немного не понял тебя, но можно еще проверить даются ли скиллы пассивок тебе при входе. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знаю точно на хрониках ит стоит проверка на skillid =>9900 и дальше он не выдает эти пасивки при входе. Лечится комментированием или исправлением ид у пасивок сетов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знаю точно на хрониках ит стоит проверка на skillid =>9900 и дальше он не выдает эти пасивки при входе. Лечится комментированием или исправлением ид у пасивок сетов.

он дает значения хп мп сп из базы данных, но тут в том то и дело что когда персонаж заходит в игру на стороне сервера сначало идет загрузка параметро персонажа из таблицы characters из бд (там же хп мп сп) , а поотом только он учитывает статы от бафов и эквика, вот мне и нужно поменять местами загрузку бафа и эквипа с характеристиками персонажа которые бурется из бд, где это сделать я так и не могу понять. Про enterworld писал, а скилл о котором вы говорите не причем здесь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

он дает значения хп мп сп из базы данных, но тут в том то и дело что когда персонаж заходит в игру на стороне сервера сначало идет загрузка параметро персонажа из таблицы characters из бд (там же хп мп сп) , а поотом только он учитывает статы от бафов и эквика, вот мне и нужно поменять местами загрузку бафа и эквипа с характеристиками персонажа которые бурется из бд, где это сделать я так и не могу понять. Про enterworld писал, а скилл о котором вы говорите не причем здесь

Я же написал, поиск таблицы по исходниками...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я же написал, поиск таблицы по исходниками...

Я нашел в исходниках где таблица Characters применяется, там только использование таблицы этой, а про инвентарь и бафы ничего не нашел, что бы поменять подгрузку местами.

класс com.l2jserver.gameserver.network.serverpackets.CharSelectionInfo

[spoiler=CharSelectionInfo]package com.l2jserver.gameserver.network.serverpackets;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

 

import com.l2jserver.Config;

import com.l2jserver.commons.database.pool.impl.ConnectionFactory;

import com.l2jserver.gameserver.data.json.ExperienceData;

import com.l2jserver.gameserver.data.sql.impl.ClanTable;

import com.l2jserver.gameserver.model.CharSelectInfoPackage;

import com.l2jserver.gameserver.model.L2Clan;

import com.l2jserver.gameserver.model.itemcontainer.Inventory;

import com.l2jserver.gameserver.network.L2GameClient;

 

public class CharSelectionInfo extends L2GameServerPacket

{

private static Logger _log = Logger.getLogger(CharSelectionInfo.class.getName());

private final String _loginName;

private final int _sessionId;

private int _activeId;

private final List _characterPackages;

 

/**

* Constructor for CharSelectionInfo.

* @param loginName

* @param sessionId

*/

public CharSelectionInfo(String loginName, int sessionId)

{

_sessionId = sessionId;

_loginName = loginName;

_characterPackages = loadCharacterSelectInfo(_loginName);

_activeId = -1;

}

 

public CharSelectionInfo(String loginName, int sessionId, int activeId)

{

_sessionId = sessionId;

_loginName = loginName;

_characterPackages = loadCharacterSelectInfo(_loginName);

_activeId = activeId;

}

 

public List getCharInfo()

{

return _characterPackages;

}

 

@@override

protected final void writeImpl()

{

writeC(0x09);

int size = (_characterPackages.size());

writeD(size);

 

// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )

writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);

writeC(0x00);

 

long lastAccess = 0L;

 

if (_activeId == -1)

{

for (int i = 0; i < size; i++)

{

final CharSelectInfoPackage charInfoPackage = _characterPackages.get(i);

if (lastAccess < charInfoPackage.getLastAccess())

{

lastAccess = charInfoPackage.getLastAccess();

_activeId = i;

}

}

}

 

for (int i = 0; i < size; i++)

{

final CharSelectInfoPackage charInfoPackage = _characterPackages.get(i);

 

writeS(charInfoPackage.getName());

writeD(charInfoPackage.getObjectId());

writeS(_loginName);

writeD(_sessionId);

writeD(charInfoPackage.getClanId());

writeD(0x00); // Builder Level

 

writeD(charInfoPackage.getSex());

writeD(charInfoPackage.getRace());

writeD(charInfoPackage.getBaseClassId());

 

writeD(0x01); // active ??

 

writeD(charInfoPackage.getX());

writeD(charInfoPackage.getY());

writeD(charInfoPackage.getZ());

 

writeF(charInfoPackage.getCurrentHp());

writeF(charInfoPackage.getCurrentMp());

 

writeD(charInfoPackage.getSp());

writeQ(charInfoPackage.getExp());

writeF(ExperienceData.getInstance().getPercentFromCurrentLevel(charInfoPackage.getExp(), charInfoPackage.getLevel()));

 

writeD(charInfoPackage.getLevel());

 

writeD(charInfoPackage.getKarma());

writeD(charInfoPackage.getPkKills());

writeD(charInfoPackage.getPvPKills());

 

writeD(0x00);

writeD(0x00);

writeD(0x00);

writeD(0x00);

writeD(0x00);

writeD(0x00);

writeD(0x00);

 

for (int slot : getPaperdollOrder())

{

writeD(charInfoPackage.getPaperdollItemId(slot));

}

 

writeD(charInfoPackage.getHairStyle());

writeD(charInfoPackage.getHairColor());

writeD(charInfoPackage.getFace());

 

writeF(charInfoPackage.getMaxHp()); // hp max

writeF(charInfoPackage.getMaxMp()); // mp max

 

writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); // days left before

// delete .. if != 0

// then char is inactive

writeD(charInfoPackage.getClassId());

writeD(i == _activeId ? 0x01 : 0x00); // c3 auto-select char

 

writeC(Math.min(charInfoPackage.getEnchantEffect(), 127));

writeD(charInfoPackage.getAugmentationId());

 

writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.

 

// Implementing it will be waster of resources.

writeD(0x00); // Pet ID

writeD(0x00); // Pet Level

writeD(0x00); // Pet Max Food

writeD(0x00); // Pet Current Food

writeF(0x00); // Pet Max HP

writeF(0x00); // Pet Max MP

 

// High Five by Vistall:

writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality

}

}

 

private static List loadCharacterSelectInfo(String loginName)

{

final List characterList = new ArrayList<>();

try (Connection con = ConnectionFactory.getInstance().getConnection();

PreparedStatement statement = con.prepareStatement("SELECT * FROM characters WHERE account_name=? ORDER BY createDate"))

{

statement.setString(1, loginName);

try (ResultSet charList = statement.executeQuery())

{

while (charList.next())// fills the package

{

CharSelectInfoPackage charInfopackage = restoreChar(charList);

if (charInfopackage != null)

{

characterList.add(charInfopackage);

}

}

}

}

catch (Exception e)

{

_log.log(Level.WARNING, "Could not restore char info: " + e.getMessage(), e);

}

return characterList;

}

 

private static void loadCharacterSubclassInfo(CharSelectInfoPackage charInfopackage, int ObjectId, int activeClassId)

{

try (Connection con = ConnectionFactory.getInstance().getConnection();

PreparedStatement statement = con.prepareStatement("SELECT exp, sp, level FROM character_subclasses WHERE charId=? && class_id=? ORDER BY charId"))

{

statement.setInt(1, ObjectId);

statement.setInt(2, activeClassId);

try (ResultSet charList = statement.executeQuery())

{

if (charList.next())

{

charInfopackage.setExp(charList.getLong("exp"));

charInfopackage.setSp(charList.getInt("sp"));

charInfopackage.setLevel(charList.getInt("level"));

}

}

}

catch (Exception e)

{

_log.log(Level.WARNING, "Could not restore char subclass info: " + e.getMessage(), e);

}

}

 

private static CharSelectInfoPackage restoreChar(ResultSet chardata) throws Exception

{

int objectId = chardata.getInt("charId");

String name = chardata.getString("char_name");

 

// See if the char must be deleted

long deletetime = chardata.getLong("deletetime");

if (deletetime > 0)

{

if (System.currentTimeMillis() > deletetime)

{

L2Clan clan = ClanTable.getInstance().getClan(chardata.getInt("clanid"));

if (clan != null)

{

clan.removeClanMember(objectId, 0);

}

 

L2GameClient.deleteCharByObjId(objectId);

return null;

}

}

 

CharSelectInfoPackage charInfopackage = new CharSelectInfoPackage(objectId, name);

charInfopackage.setAccessLevel(chardata.getInt("accesslevel"));

charInfopackage.setLevel(chardata.getInt("level"));

charInfopackage.setMaxHp(chardata.getInt("maxhp"));

charInfopackage.setCurrentHp(chardata.getDouble("curhp"));

charInfopackage.setMaxMp(chardata.getInt("maxmp"));

charInfopackage.setCurrentMp(chardata.getDouble("curmp"));

charInfopackage.setKarma(chardata.getInt("karma"));

charInfopackage.setPkKills(chardata.getInt("pkkills"));

charInfopackage.setPvPKills(chardata.getInt("pvpkills"));

charInfopackage.setFace(chardata.getInt("face"));

charInfopackage.setHairStyle(chardata.getInt("hairstyle"));

charInfopackage.setHairColor(chardata.getInt("haircolor"));

charInfopackage.setSex(chardata.getInt("sex"));

 

charInfopackage.setExp(chardata.getLong("exp"));

charInfopackage.setSp(chardata.getInt("sp"));

charInfopackage.setVitalityPoints(chardata.getInt("vitality_points"));

charInfopackage.setClanId(chardata.getInt("clanid"));

 

charInfopackage.setRace(chardata.getInt("race"));

 

final int baseClassId = chardata.getInt("base_class");

final int activeClassId = chardata.getInt("classid");

 

charInfopackage.setX(chardata.getInt("x"));

charInfopackage.setY(chardata.getInt("y"));

charInfopackage.setZ(chardata.getInt("z"));

 

if (Config.L2JMOD_MULTILANG_ENABLE)

{

String lang = chardata.getString("language");

if (!Config.L2JMOD_MULTILANG_ALLOWED.contains(lang))

{

lang = Config.L2JMOD_MULTILANG_DEFAULT;

}

charInfopackage.setHtmlPrefix("data/lang/" + lang + "/");

}

 

// if is in subclass, load subclass exp, sp, lvl info

if (baseClassId != activeClassId)

{

loadCharacterSubclassInfo(charInfopackage, objectId, activeClassId);

}

 

charInfopackage.setClassId(activeClassId);

 

// Get the augmentation id for equipped weapon

int weaponObjId = charInfopackage.getPaperdollObjectId(Inventory.PAPERDOLL_RHAND);

if (weaponObjId < 1)

{

weaponObjId = charInfopackage.getPaperdollObjectId(Inventory.PAPERDOLL_RHAND);

}

 

if (weaponObjId > 0)

{

try (Connection con = ConnectionFactory.getInstance().getConnection();

PreparedStatement statement = con.prepareStatement("SELECT augAttributes FROM item_attributes WHERE itemId=?"))

{

statement.setInt(1, weaponObjId);

try (ResultSet result = statement.executeQuery())

{

if (result.next())

{

int augment = result.getInt("augAttributes");

charInfopackage.setAugmentationId(augment == -1 ? 0 : augment);

}

}

}

catch (Exception e)

{

_log.log(Level.WARNING, "Could not restore augmentation info: " + e.getMessage(), e);

}

}

 

// Check if the base class is set to zero and also doesn't match with the current active class, otherwise send the base class ID. This prevents chars created before base class was introduced from being displayed incorrectly.

if ((baseClassId == 0) && (activeClassId > 0))

{

charInfopackage.setBaseClassId(activeClassId);

}

else

{

charInfopackage.setBaseClassId(baseClassId);

}

 

charInfopackage.setDeleteTimer(deletetime);

charInfopackage.setLastAccess(chardata.getLong("lastAccess"));

return charInfopackage;

}

}

 

 

Может что еще подскажете, где может применяться. Вообще в старых ревах в L2PcInstance есть такое:

[spoiler=public static L2PcInstance load(int objectId)]public static L2PcInstance load(int objectId)

{

return restore(objectId);

}

 

 

[spoiler=private static L2PcInstance restore(int objectId)] private static L2PcInstance restore(int objectId)

{

L2PcInstance player = null;

double currentCp = 0;

double currentHp = 0;

double currentMp = 0;

try (Connection con = L2DatabaseFactory.getInstance().getConnection();

PreparedStatement statement = con.prepareStatement(RESTORE_CHARACTER))

{

// Retrieve the L2PcInstance 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;

final L2PcTemplate template = CharTemplateTable.getInstance().getTemplate(activeClassId);

PcAppearance app = new PcAppearance(rset.getByte("face"), rset.getByte("hairColor"), rset.getByte("hairStyle"), female);

 

player = new L2PcInstance(objectId, template, rset.getString("account_name"), app);

player.setName(rset.getString("char_name"));

restorePremServiceData(player, rset.getString("account_name"));

player._lastAccess = rset.getLong("lastAccess");

 

player.getStat().setExp(rset.getLong("exp"));

player.setExpBeforeDeath(rset.getLong("expBeforeDeath"));

player.getStat().setLevel(rset.getByte("level"));

player.getStat().setSp(rset.getInt("sp"));

 

player.setWantsPeace(rset.getInt("wantspeace"));

 

player.setHeading(rset.getInt("heading"));

 

player.setKarma(rset.getInt("karma"));

player.setFame(rset.getInt("fame"));

player.setPvpKills(rset.getInt("pvpkills"));

player.setPkKills(rset.getInt("pkkills"));

player.setOnlineTime(rset.getLong("onlinetime"));

player.setNewbie(rset.getInt("newbie"));

player.setNoble(rset.getInt("nobless") == 1);

 

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);

}

 

int clanId = rset.getInt("clanid");

player.setPowerGrade(rset.getInt("power_grade"));

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.setClanPrivileges(L2Clan.CP_ALL);

player.setPowerGrade(1);

}

player.setPledgeClass(L2ClanMember.calculatePledgeClass(player));

}

else

{

if (player.isNoble())

{

player.setPledgeClass(5);

}

 

if (player.isHero())

{

player.setPledgeClass(8);

}

 

player.setClanPrivileges(L2Clan.CP_NOTHING);

}

 

player.setDeleteTimer(rset.getLong("deletetime"));

 

player.setTitle(rset.getString("title"));

player.getAppearance().setTitleColor(rset.getInt("title_color"));

player.setAccessLevel(rset.getInt("accesslevel"));

player.setFistsWeaponItem(player.findFistsWeaponItem(activeClassId));

player.setUptime(System.currentTimeMillis());

 

currentHp = rset.getDouble("curHp");

currentCp = rset.getDouble("curCp");

currentMp = rset.getDouble("curMp");

 

player._classIndex = 0;

try

{

player.setBaseClass(rset.getInt("base_class"));

}

catch (Exception e)

{

// TODO: Should this be logged?

player.setBaseClass(activeClassId);

}

 

// Restore Subclass Data (cannot be done earlier in function)

if (restoreSubClassData(player))

{

if (activeClassId != player.getBaseClass())

{

for (SubClass subClass : player.getSubClasses().values())

{

if (subClass.getClassId() == activeClassId)

{

player._classIndex = subClass.getClassIndex();

}

}

}

}

if ((player.getClassIndex() == 0) && (activeClassId != player.getBaseClass()))

{

// Subclass in use but doesn't exist in DB -

// a possible restart-while-modifysubclass cheat has been attempted.

// Switching to use base class

player.setClassId(player.getBaseClass());

_log.warning("Player " + player.getName() + " reverted to base class. Possibly has tried a relogin exploit while subclassing.");

}

else

{

player._activeClass = activeClassId;

}

 

player.setApprentice(rset.getInt("apprentice"));

player.setSponsor(rset.getInt("sponsor"));

player.setLvlJoinedAcademy(rset.getInt("lvl_joined_academy"));

player.setIsIn7sDungeon(rset.getInt("isin7sdungeon") == 1);

player.setPunishLevel(rset.getInt("punish_level"));

if (player.getPunishLevel() != PunishLevel.NONE)

{

player.setPunishTimer(rset.getLong("punish_timer"));

}

else

{

player.setPunishTimer(0);

}

 

CursedWeaponsManager.getInstance().checkPlayer(player);

 

player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));

 

player.setVitalityPoints(rset.getInt("vitality_points"), true);

 

// Set the x,y,z position of the L2PcInstance and make it invisible

player.setXYZInvisible(rset.getInt("x"), rset.getInt("y"), rset.getInt("z"));

 

// Set Teleport Bookmark Slot

player.setBookMarkSlot(rset.getInt("BookmarkSlot"));

 

// character creation Time

player.getCreateDate().setTime(rset.getDate("createDate"));

 

// Pc Bang

player.setPcBangPoints(rset.getInt("pccafe_points"));

 

// Language

player.setLang(rset.getString("language"));

 

// Prime

player.setprime_points(rset.getLong("prime_points"));

 

// Retrieve the name and ID of the other characters assigned to this account.

try (PreparedStatement stmt = con.prepareStatement("SELECT charId, char_name FROM characters WHERE account_name=? AND charId<>?"))

{

stmt.setString(1, player._accountName);

stmt.setInt(2, objectId);

try (ResultSet chars = stmt.executeQuery())

{

while (chars.next())

{

player._chars.put(chars.getInt("charId"), chars.getString("char_name"));

}

}

}

}

}

 

if (player == null)

{

return null;

}

 

// Set Hero status if it applies

if (Hero.getInstance().isHero(objectId))

{

player.setHero(true);

}

 

// Retrieve from the database all items of this L2PcInstance and add them to _inventory

player.getInventory().restore();

player.getFreight().restore();

if (!Config.WAREHOUSE_CACHE)

{

player.getWarehouse();

}

 

// Retrieve from the database all secondary data of this L2PcInstance

// Note that Clan, Noblesse and Hero skills are given separately and not here.

// Retrieve from the database all skills of this L2PcInstance and add them to _skills

player.restoreCharData();

 

// Buff and status icons

if (Config.STORE_SKILL_COOLTIME)

{

player.restoreEffects();

}

 

// Reward auto-get skills and all available skills if auto-learn skills is true.

player.rewardSkills();

 

player.restoreItemReuse();

 

// Restore current Cp, HP and MP values

player.setCurrentCp(currentCp);

player.setCurrentHp(currentHp);

player.setCurrentMp(currentMp);

 

if (currentHp < 0.5)

{

player.setIsDead(true);

player.stopHpMpRegeneration();

}

 

// Restore pet if exists in the world

player.setPet(L2World.getInstance().getPet(player.getObjectId()));

if (player.hasSummon())

{

player.getSummon().setOwner(player);

}

 

// Update the overloaded status of the L2PcInstance

player.refreshOverloaded();

// Update the expertise status of the L2PcInstance

player.refreshExpertisePenalty();

 

player.restoreFriendList();

 

if (Config.STORE_UI_SETTINGS)

{

player.restoreUISettings();

}

 

player.restoreZoneRestartLimitTime();

 

player._account = new L2Account(player.getAccountName());

}

catch (Exception e)

{

_log.log(Level.SEVERE, "Failed loading character.", e);

}

return player;

}

 

 

В новой реве которая у меня в L2PcInstance все иначе:

Тут сразу в методе Load все, метода restore нет.

[spoiler=public static L2PcInstance load(int objectId)] public static L2PcInstance load(int objectId)

{

try

{

final L2PcInstance player = DAOFactory.getInstance().getPlayerDAO().load(objectId);

if (player == null)

{

return null;

}

 

 

// Retrieve from the database all items of this L2PcInstance and add them to _inventory

player.getInventory().restore();

player.getFreight().restore();

if (!Config.WAREHOUSE_CACHE)

{

player.getWarehouse();

}

 

// Retrieve from the database all secondary data of this L2PcInstance

// Note that Clan, Noblesse and Hero skills are given separately and not here.

// Retrieve from the database all skills of this L2PcInstance and add them to _skills

DAOFactory.getInstance().getSkillDAO().load(player);

 

player._macros.restoreMe();

 

player._shortCuts.restoreMe();

 

DAOFactory.getInstance().getHennaDAO().load(player);

 

DAOFactory.getInstance().getTeleportBookmarkDAO().load(player);

 

DAOFactory.getInstance().getRecipeBookDAO().load(player, true);

 

if (Config.STORE_RECIPE_SHOPLIST)

{

DAOFactory.getInstance().getRecipeShopListDAO().load(player);

}

 

DAOFactory.getInstance().getPremiumItemDAO().load(player);

 

DAOFactory.getInstance().getItemDAO().loadPetInventory(player);

 

// Reward auto-get skills and all available skills if auto-learn skills is true.

player.rewardSkills();

 

DAOFactory.getInstance().getItemReuseDAO().load(player);

 

// Buff and status icons

if (Config.STORE_SKILL_COOLTIME)

{

player.restoreEffects();

}

 

// Restore current CP, HP and MP values

if (player.getCurrentHp() < 0.5)

{

player.setIsDead(true);

player.stopHpMpRegeneration();

}

 

// Restore pet if exists in the world

player.setPet(L2World.getInstance().getPet(player.getObjectId()));

if (player.hasSummon())

{

player.getSummon().setOwner(player);

}

 

// Update the overloaded status of the L2PcInstance

player.refreshOverloaded();

// Update the expertise status of the L2PcInstance

player.refreshExpertisePenalty();

 

DAOFactory.getInstance().getFriendDAO().load(player);

 

if (Config.STORE_UI_SETTINGS)

{

player.restoreUISettings();

}

 

if (player.isGM())

{

final long masks = player.getVariables().getLong(COND_OVERRIDE_KEY, PcCondOverride.getAllExceptionsMask());

player.setOverrideCond(masks);

}

DAOFactory.getInstance().getPlayerDAO().loadCharacters(player);

 

return player;

}

catch (Exception e)

{

LOG.error("Failed loading character.", e);

}

return null;

}

 

Но как я исказал, видимо сам разглядеть не могу что менять, мб кто знает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

Сборка L2JServer последняя из репы.

Проблема с HP MP CP после релога.

Она возникает если надеты вещи которые повышают HP CP MP или наложен баф.

Перед релогом делаю heal и потом делаю релог и у персонажа HP CP MP становится меньше.

Судя по тому, что если не бафаться и не одевать вещи, хп сп и мп нормально показывают как и было до релога.

Как я понимаю нужно где то поменять местами загрузку эквипа, бафа с подгрузкой данных о персонаже из бд при входе в мир.

Сразу говорю в EnterWorld.java не нашел ничего. В L2PcInstance возможно не разглядел, может кто уже правил, поделитесь где конкретно это лежит. В старых ревизиях все запросы на БД есть в L2PcInstance, в последней (которую юзаю) не увидел таковых.

ЗАопоздалая загрузка вешей. Правка масива кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ЗАопоздалая загрузка вешей. Правка масива кода.

подробнее?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...