CharSelectionInfo improvements.

This commit is contained in:
MobiusDev
2018-09-11 16:16:39 +00:00
parent 9f4cfe09f9
commit 29736fdc9f
8 changed files with 261 additions and 275 deletions

View File

@@ -94,14 +94,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
packet.writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby packet.writeC(0x01); // 0=can't play, 1=can play free until level 85, 2=100% free play
packet.writeD(0x02); // if 1, korean client packet.writeD(0x02); // if 1, Korean client
packet.writeC(0x00); // if 1 suggest premium account packet.writeC(0x00); // If 1 suggests premium account
long lastAccess = 0; long lastAccess = 0;
if (_activeId == -1) if (_activeId == -1)
@@ -120,15 +119,15 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); // char name packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); // char id packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); // login packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); // session id packet.writeD(_sessionId); // Account ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Pledge ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); // sex packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); // race packet.writeD(charInfoPackage.getRace()); // Race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{ {
@@ -139,7 +138,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
} }
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -186,8 +185,8 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeF(charInfoPackage.getMaxHp()); // hp max packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeF(charInfoPackage.getMaxMp()); // mp max packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
@@ -201,21 +200,20 @@ public class CharSelectionInfo implements IClientOutgoingPacket
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall: packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C packet.writeD(0x00); // Pet level
packet.writeD(0x00); // level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // ? packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // food? - 1200 packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // max Hp packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // cur Hp
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Exp Bonus packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Percent
packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Vitality items used, such as potion packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Remaining vitality item uses
packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00);
packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // Show hair accessory if enabled
} }
return true; return true;
} }
@@ -231,7 +229,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)

View File

@@ -57,6 +57,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
Inventory.PAPERDOLL_CHEST, Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS, Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET, Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR, Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2, Inventory.PAPERDOLL_HAIR2,
}; };
@@ -93,14 +94,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
packet.writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby packet.writeC(0x01); // 0=can't play, 1=can play free until level 85, 2=100% free play
packet.writeD(0x02); // if 1, korean client packet.writeD(0x02); // if 1, Korean client
packet.writeC(0x00); // if 1 suggest premium account packet.writeC(0x00); // If 1 suggests premium account
long lastAccess = 0; long lastAccess = 0;
if (_activeId == -1) if (_activeId == -1)
@@ -119,15 +119,15 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); // char name packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); // char id packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); // login packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); // session id packet.writeD(_sessionId); // Account ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Pledge ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); // sex packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); // race packet.writeD(charInfoPackage.getRace()); // Race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{ {
@@ -138,7 +138,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
} }
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -177,18 +177,18 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot)); packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
} }
packet.writeD(0x00); // ?? packet.writeH(0x00); // Upper Body enchant level
packet.writeD(0x00); // ?? packet.writeH(0x00); // Lower Body enchant level
packet.writeD(0x00); // ?? packet.writeH(0x00); // Headgear enchant level
packet.writeC(0x00); // Armor Enchant packet.writeH(0x00); // Gloves enchant level
packet.writeC(0x00); // Weapon Enchant packet.writeH(0x00); // Boots enchant level
packet.writeD(charInfoPackage.getHairStyle()); packet.writeD(charInfoPackage.getHairStyle());
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeF(charInfoPackage.getMaxHp()); // hp max packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeF(charInfoPackage.getMaxMp()); // mp max packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
@@ -201,21 +201,20 @@ public class CharSelectionInfo implements IClientOutgoingPacket
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall: packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C packet.writeD(0x00); // Pet level
packet.writeD(0x00); // level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // ? packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // food? - 1200 packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // max Hp packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // cur Hp
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Exp Bonus packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Percent
packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Vitality items used, such as potion packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Remaining vitality item uses
packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00);
packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // Show hair accessory if enabled
} }
return true; return true;
} }
@@ -231,7 +230,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)

View File

@@ -57,6 +57,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
Inventory.PAPERDOLL_CHEST, Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS, Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET, Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR, Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2, Inventory.PAPERDOLL_HAIR2,
}; };
@@ -93,14 +94,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
packet.writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby packet.writeC(0x01); // 0=can't play, 1=can play free until level 85, 2=100% free play
packet.writeD(0x02); // if 1, korean client packet.writeD(0x02); // if 1, Korean client
packet.writeC(0x00); // if 1 suggest premium account packet.writeC(0x00); // If 1 suggests premium account
long lastAccess = 0; long lastAccess = 0;
if (_activeId == -1) if (_activeId == -1)
@@ -119,15 +119,15 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); // char name packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); // char id packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); // login packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); // session id packet.writeD(_sessionId); // Account ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Pledge ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); // sex packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); // race packet.writeD(charInfoPackage.getRace()); // Race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{ {
@@ -138,7 +138,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
} }
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -177,19 +177,18 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot)); packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
} }
packet.writeD(0x00); packet.writeH(0x00); // Upper Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Lower Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Headgear enchant level
packet.writeH(0x00); packet.writeH(0x00); // Gloves enchant level
packet.writeH(0x00); packet.writeH(0x00); // Boots enchant level
packet.writeH(0x00);
packet.writeD(charInfoPackage.getHairStyle()); packet.writeD(charInfoPackage.getHairStyle());
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeF(charInfoPackage.getMaxHp()); // hp max packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeF(charInfoPackage.getMaxMp()); // mp max packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
@@ -202,21 +201,20 @@ public class CharSelectionInfo implements IClientOutgoingPacket
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall: packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C packet.writeD(0x00); // Pet level
packet.writeD(0x00); // level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // ? packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // food? - 1200 packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // max Hp packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // cur Hp
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Exp Bonus packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Percent
packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Vitality items used, such as potion packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Remaining vitality item uses
packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00);
packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // Show hair accessory if enabled
} }
return true; return true;
} }
@@ -232,7 +230,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)

View File

@@ -57,6 +57,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
Inventory.PAPERDOLL_CHEST, Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS, Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET, Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR, Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2, Inventory.PAPERDOLL_HAIR2,
}; };
@@ -93,14 +94,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
packet.writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby packet.writeC(0x01); // 0=can't play, 1=can play free until level 85, 2=100% free play
packet.writeD(0x02); // if 1, korean client packet.writeD(0x02); // if 1, Korean client
packet.writeC(0x00); // if 1 suggest premium account packet.writeC(0x00); // Balthus Knights, if 1 suggests premium account
long lastAccess = 0; long lastAccess = 0;
if (_activeId == -1) if (_activeId == -1)
@@ -119,15 +119,15 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); // char name packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); // char id packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); // login packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); // session id packet.writeD(_sessionId); // Account ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Pledge ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); // sex packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); // race packet.writeD(charInfoPackage.getRace()); // Race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{ {
@@ -138,7 +138,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
} }
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -177,19 +177,18 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot)); packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
} }
packet.writeD(0x00); packet.writeH(0x00); // Upper Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Lower Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Headgear enchant level
packet.writeH(0x00); packet.writeH(0x00); // Gloves enchant level
packet.writeH(0x00); packet.writeH(0x00); // Boots enchant level
packet.writeH(0x00);
packet.writeD(charInfoPackage.getHairStyle()); packet.writeD(charInfoPackage.getHairStyle());
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeF(charInfoPackage.getMaxHp()); // hp max packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeF(charInfoPackage.getMaxMp()); // mp max packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
@@ -202,21 +201,20 @@ public class CharSelectionInfo implements IClientOutgoingPacket
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall: packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C packet.writeD(0x00); // Pet level
packet.writeD(0x00); // level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // ? packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // food? - 1200 packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // max Hp packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // cur Hp
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Exp Bonus packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Percent
packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Vitality items used, such as potion packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Remaining vitality item uses
packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00);
packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // Show hair accessory if enabled
} }
return true; return true;
} }
@@ -232,7 +230,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)

View File

@@ -79,10 +79,9 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(0x00); packet.writeC(0x00);
long lastAccess = 0; long lastAccess = 0;
@@ -102,18 +101,18 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); packet.writeD(_sessionId); // Account ID
packet.writeD(charInfoPackage.getClanId()); packet.writeD(charInfoPackage.getClanId()); // Pledge ID
packet.writeD(0x00); // Builder Level packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); packet.writeD(charInfoPackage.getRace()); // Race
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -148,27 +147,27 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeF(charInfoPackage.getMaxHp()); // hp max packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeF(charInfoPackage.getMaxMp()); // mp max packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
packet.writeD(i == _activeId ? 0x01 : 0x00); // c3 auto-select char packet.writeD(i == _activeId ? 0x01 : 0x00);
packet.writeC(Math.min(charInfoPackage.getEnchantEffect(), 127)); packet.writeC(Math.min(charInfoPackage.getEnchantEffect(), 127));
packet.writeD(charInfoPackage.getAugmentationId()); packet.writeD(charInfoPackage.getAugmentationId());
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Implementing it will be waster of resources. packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // Pet ID packet.writeD(0x00); // Pet level
packet.writeD(0x00); // Pet Level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // Pet Max Food packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // Pet Current Food packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // Pet Max HP packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // Pet Max MP
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
} }
return true; return true;
} }
@@ -184,7 +183,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)

View File

@@ -57,6 +57,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
Inventory.PAPERDOLL_CHEST, Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS, Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET, Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR, Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2, Inventory.PAPERDOLL_HAIR2,
}; };
@@ -93,14 +94,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
packet.writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby packet.writeC(0x01); // 0=can't play, 1=can play free until level 85, 2=100% free play
packet.writeD(0x02); // if 1, korean client packet.writeD(0x02); // if 1, Korean client
packet.writeC(0x00); // if 1 suggest premium account packet.writeC(0x00); // If 1 suggests premium account
long lastAccess = 0; long lastAccess = 0;
if (_activeId == -1) if (_activeId == -1)
@@ -119,15 +119,15 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); // char name packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); // char id packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); // login packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); // session id packet.writeD(_sessionId); // Account ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Pledge ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); // sex packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); // race packet.writeD(charInfoPackage.getRace()); // Race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{ {
@@ -138,7 +138,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
} }
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -177,19 +177,18 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot)); packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
} }
packet.writeD(0x00); packet.writeH(0x00); // Upper Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Lower Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Headgear enchant level
packet.writeH(0x00); packet.writeH(0x00); // Gloves enchant level
packet.writeH(0x00); packet.writeH(0x00); // Boots enchant level
packet.writeH(0x00);
packet.writeD(charInfoPackage.getHairStyle()); packet.writeD(charInfoPackage.getHairStyle());
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeF(charInfoPackage.getMaxHp()); // hp max packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeF(charInfoPackage.getMaxMp()); // mp max packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
@@ -202,21 +201,20 @@ public class CharSelectionInfo implements IClientOutgoingPacket
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall: packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C packet.writeD(0x00); // Pet level
packet.writeD(0x00); // level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // ? packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // food? - 1200 packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // max Hp packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // cur Hp
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Exp Bonus packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Percent
packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Vitality items used, such as potion packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Remaining vitality item uses
packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00);
packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // Show hair accessory if enabled
} }
return true; return true;
} }
@@ -232,7 +230,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)

View File

@@ -57,6 +57,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
Inventory.PAPERDOLL_CHEST, Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS, Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET, Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR, Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2, Inventory.PAPERDOLL_HAIR2,
}; };
@@ -93,14 +94,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
packet.writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby packet.writeC(0x01); // 0=can't play, 1=can play free until level 85, 2=100% free play
packet.writeD(0x02); // if 1, korean client packet.writeD(0x02); // if 1, Korean client
packet.writeC(0x00); // if 1 suggest premium account packet.writeC(0x00); // Balthus Knights, if 1 suggests premium account
long lastAccess = 0; long lastAccess = 0;
if (_activeId == -1) if (_activeId == -1)
@@ -119,15 +119,15 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); // char name packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); // char id packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); // login packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); // session id packet.writeD(_sessionId); // Account ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Pledge ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); // sex packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); // race packet.writeD(charInfoPackage.getRace()); // Race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{ {
@@ -138,7 +138,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
} }
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -177,19 +177,18 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot)); packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
} }
packet.writeD(0x00); packet.writeH(0x00); // Upper Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Lower Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Headgear enchant level
packet.writeH(0x00); packet.writeH(0x00); // Gloves enchant level
packet.writeH(0x00); packet.writeH(0x00); // Boots enchant level
packet.writeH(0x00);
packet.writeD(charInfoPackage.getHairStyle()); packet.writeD(charInfoPackage.getHairStyle());
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeF(charInfoPackage.getMaxHp()); // hp max packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeF(charInfoPackage.getMaxMp()); // mp max packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
@@ -202,21 +201,20 @@ public class CharSelectionInfo implements IClientOutgoingPacket
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall: packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C packet.writeD(0x00); // Pet level
packet.writeD(0x00); // level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // ? packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // food? - 1200 packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // max Hp packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // cur Hp
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Exp Bonus packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Percent
packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Vitality items used, such as potion packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Remaining vitality item uses
packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00);
packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // Show hair accessory if enabled
} }
return true; return true;
} }
@@ -232,7 +230,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)

View File

@@ -94,6 +94,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
Inventory.PAPERDOLL_CHEST, Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS, Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET, Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_HAIR, Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_HAIR2, Inventory.PAPERDOLL_HAIR2,
}; };
@@ -130,14 +131,13 @@ public class CharSelectionInfo implements IClientOutgoingPacket
OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet); OutgoingPackets.CHARACTER_SELECTION_INFO.writeId(packet);
final int size = _characterPackages.length; final int size = _characterPackages.length;
packet.writeD(size); // How many char there is on this account packet.writeD(size); // Created character count
// Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) ) packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
packet.writeD(Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT);
packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char packet.writeC(size == Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // if 1 can't create new char
packet.writeC(0x01); // play mode, if 1 can create only 2 char in regular lobby packet.writeC(0x01); // 0=can't play, 1=can play free until level 85, 2=100% free play
packet.writeD(0x02); // if 1, korean client packet.writeD(0x02); // if 1, Korean client
packet.writeH(0x00); // if 1 suggest premium account packet.writeH(0x00); // Balthus Knights, if 1 suggests premium account
long lastAccess = 0; long lastAccess = 0;
if (_activeId == -1) if (_activeId == -1)
@@ -156,15 +156,15 @@ public class CharSelectionInfo implements IClientOutgoingPacket
{ {
final CharSelectInfoPackage charInfoPackage = _characterPackages[i]; final CharSelectInfoPackage charInfoPackage = _characterPackages[i];
packet.writeS(charInfoPackage.getName()); // char name packet.writeS(charInfoPackage.getName()); // Character name
packet.writeD(charInfoPackage.getObjectId()); // char id packet.writeD(charInfoPackage.getObjectId()); // Character ID
packet.writeS(_loginName); // login packet.writeS(_loginName); // Account name
packet.writeD(_sessionId); // session id packet.writeD(_sessionId); // Account ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Pledge ID
packet.writeD(0x00); // ?? packet.writeD(0x00); // Builder level
packet.writeD(charInfoPackage.getSex()); // sex packet.writeD(charInfoPackage.getSex()); // Sex
packet.writeD(charInfoPackage.getRace()); // race packet.writeD(charInfoPackage.getRace()); // Race
if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
{ {
@@ -175,7 +175,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getBaseClassId()); packet.writeD(charInfoPackage.getBaseClassId());
} }
packet.writeD(0x01); // server id ?? packet.writeD(0x01); // GameServerName
packet.writeD(charInfoPackage.getX()); packet.writeD(charInfoPackage.getX());
packet.writeD(charInfoPackage.getY()); packet.writeD(charInfoPackage.getY());
@@ -209,30 +209,29 @@ public class CharSelectionInfo implements IClientOutgoingPacket
packet.writeD(charInfoPackage.getPaperdollItemId(slot)); packet.writeD(charInfoPackage.getPaperdollItemId(slot));
} }
packet.writeD(0x00); // Salvation
packet.writeD(0x00); // Salvation
packet.writeD(0x00); // Salvation
packet.writeD(0x00); // Salvation
packet.writeD(0x00); // Salvation
for (int slot : getPaperdollOrderVisualId()) for (int slot : getPaperdollOrderVisualId())
{ {
packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot)); packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
} }
packet.writeD(0x00); packet.writeH(0x00); // Upper Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Lower Body enchant level
packet.writeH(0x00); packet.writeH(0x00); // Headgear enchant level
packet.writeH(0x00); packet.writeH(0x00); // Gloves enchant level
packet.writeH(0x00); packet.writeH(0x00); // Boots enchant level
packet.writeH(0x00);
packet.writeD(charInfoPackage.getHairStyle()); packet.writeD(charInfoPackage.getHairStyle());
packet.writeD(charInfoPackage.getHairColor()); packet.writeD(charInfoPackage.getHairColor());
packet.writeD(charInfoPackage.getFace()); packet.writeD(charInfoPackage.getFace());
packet.writeD(0x00); // Salvation packet.writeF(charInfoPackage.getMaxHp()); // Maximum HP
packet.writeD(0x00); // Salvation packet.writeF(charInfoPackage.getMaxMp()); // Maximum MP
packet.writeD(0x00); // Salvation
packet.writeD(0x00); // Salvation
packet.writeD(0x00); // Salvation
packet.writeF(charInfoPackage.getMaxHp()); // hp max
packet.writeF(charInfoPackage.getMaxMp()); // mp max
packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0); packet.writeD(charInfoPackage.getDeleteTimer() > 0 ? (int) ((charInfoPackage.getDeleteTimer() - System.currentTimeMillis()) / 1000) : 0);
packet.writeD(charInfoPackage.getClassId()); packet.writeD(charInfoPackage.getClassId());
@@ -245,21 +244,20 @@ public class CharSelectionInfo implements IClientOutgoingPacket
// packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations
packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall: packet.writeD(0x00); // Pet NpcId
packet.writeD(0x00); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C packet.writeD(0x00); // Pet level
packet.writeD(0x00); // level packet.writeD(0x00); // Pet Food
packet.writeD(0x00); // ? packet.writeD(0x00); // Pet Food Level
packet.writeD(0x00); // food? - 1200 packet.writeF(0x00); // Current pet HP
packet.writeF(0x00); // max Hp packet.writeF(0x00); // Current pet MP
packet.writeF(0x00); // cur Hp
packet.writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality packet.writeD(charInfoPackage.getVitalityPoints()); // Vitality
packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Exp Bonus packet.writeD((int) Config.RATE_VITALITY_EXP_MULTIPLIER * 100); // Vitality Percent
packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Vitality items used, such as potion packet.writeD(charInfoPackage.getVitalityItemsUsed()); // Remaining vitality item uses
packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01); // Char is active or not
packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00);
packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // hero glow packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // show hair accessory if enabled packet.writeC(charInfoPackage.isHairAccessoryEnabled() ? 0x01 : 0x00); // Show hair accessory if enabled
} }
return true; return true;
} }
@@ -275,7 +273,7 @@ public class CharSelectionInfo implements IClientOutgoingPacket
statement.setString(1, loginName); statement.setString(1, loginName);
try (ResultSet charList = statement.executeQuery()) try (ResultSet charList = statement.executeQuery())
{ {
while (charList.next())// fills the package while (charList.next()) // fills the package
{ {
charInfopackage = restoreChar(charList); charInfopackage = restoreChar(charList);
if (charInfopackage != null) if (charInfopackage != null)