Мб кому-то пригодится...
UIPacket (UserInfo) (Opcode 0x32). Protocol 597. (Не полностью разобран)
Код:
writeD(obj_id);
writeD(372 + _name.length() * 2 + title.length() * 2);
writeH(23);
writeB(new byte[]{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF});
writeD(_relation);
writeH(16 + _name.length() * 2);
writeH(_name.length());
writeCutS(_name);
writeC(gm_commands);
writeC(_race);
writeC(sex);
writeD(base_class);
writeD(class_id);
writeC(level);
writeH(18);
writeH(_str);
writeH(_dex);
writeH(_con);
writeH(_int);
writeH(_wit);
writeH(_men);
writeH(_luc);
writeH(_cha);
writeH(14);
writeD(maxHp);
writeD(maxMp);
writeD(maxCp);
writeH(38);
writeD(curHp);
writeD(curMp);
writeD(curCp);
writeQ(_sp);
writeQ(_exp);
writeF(_expPercent);
writeH(4);
writeH(_enchant);
writeH(15);
writeD(hair_style);
writeD(hair_color);
writeD(face);
writeC(0x00);
writeH(6);
writeC(mount_type);
writeC(private_store);
writeC(can_crystalize);
writeC(0x00);
writeH(56);
writeH(_weaponFlag);
writeD(_patk);
writeD(_patkspd);
writeD(_pdef);
writeD(_pEvasion);
writeD(_pAccuracy);
writeD(_pCrit);
writeD(_matk);
writeD(_matkspd);
writeD(_patkspd);
writeD(_mdef);
writeD(_mEvasion);
writeD(_mAccuracy);
writeD(_mCrit);
writeH(14);
writeH(defenceFire);
writeH(defenceWater);
writeH(defenceWind);
writeH(defenceEarth);
writeH(defenceHoly);
writeH(defenceUnholy);
writeH(18);
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(vehicle_obj_id);
writeH(18);
writeH(_runSpd);
writeH(_walkSpd);
writeH(_swimRunSpd);
writeH(_swimWalkSpd);
writeH(_flRunSpd);
writeH(_flWalkSpd);
writeH(_flyRunSpd);
writeH(_flyWalkSpd);
writeH(18);
writeF(move_speed);
writeF(attack_speed);
writeH(18);
writeF(col_radius);
writeF(col_height);
writeH(5);
writeC(attackElement.getId());
writeH(attackElementValue);
writeH(32 + title.length() * 2);
writeH(title.length());
writeCutS(title);
writeH(pledge_type);
writeD(clan_id);
writeD(large_clan_crest_id);
writeD(clan_crest_id);
writeD(ClanPrivs);
writeC(0x00);
writeD(ally_id);
writeD(ally_crest_id);
writeC(partyRoom ? 0x01 : 0x00);
writeH(22);
writeC(pvp_flag);
writeD(karma);
writeC(noble);
writeC(hero);
writeC(pledge_class);
writeD(pk_kills);
writeD(pvp_kills);
writeH(rec_left);
writeH(rec_have);
writeH(15);
writeD(vitality);
writeC(0);
writeD(fame);
writeD(0x00); // Рейдовые Очки
writeH(9);
writeC(talismans);
writeC(openCloak);
writeC(_team.ordinal());
writeC(0);
writeC(0);
writeC(0);
writeC(0);
writeH(4);
writeC(isFlying ? 0x02 : 0x00);
writeC(running);
writeH(10);
writeD(name_color);
writeD(title_color);
writeH(9);
writeD(0);
writeH(InventoryLimit);
writeC(0);
writeH(9);
writeC(1);
writeH(0);
writeD(0);

P.S. Перевод клиента позаимствован с ГВ.
Добавлено через 4 минуты
CharacterSelectionInfoPacket (Opcode 0x09). Protocol 597.
Код:
writeD(size);
writeD(0x07); // Максимальное количество персонажей на сервере
writeC(0x00); // 0x00 - Разрешить, 0x01 - запретить. Разрешает или запрещает создание игроков
writeC(0x00);
writeD(0x02); // 0x01 - Выводит окно, что нужно купить игру, что создавать более 2х чаров. 0х02 - обычное лобби.
writeC(0x00); // 0x01 - Предлогает купить ПА.
long lastAccess = -1L;
int lastUsed = -1;
for(int i = 0; i < size; i++)
if(lastAccess < _characterPackages[i].getLastAccess())
{
lastAccess = _characterPackages[i].getLastAccess();
lastUsed = i;
}
for(int i = 0; i < size; i++)
{
CharSelectInfoPackage charInfoPackage = _characterPackages[i];
writeS(charInfoPackage.getName());
writeD(charInfoPackage.getCharId()); // ?
writeS(_loginName);
writeD(_sessionId);
writeD(charInfoPackage.getClanId());
writeD(0x00); // ??
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());
writeQ(charInfoPackage.getSp());
writeQ(charInfoPackage.getExp());
int lvl = charInfoPackage.getLevel();
writeF(Experience.getExpPercent(lvl, charInfoPackage.getExp()));
writeD(lvl);
writeD(charInfoPackage.getKarma());
writeD(charInfoPackage.getPk());
writeD(charInfoPackage.getPvP());
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00); // unk Ertheia
writeD(0x00); // unk Ertheia
for(int PAPERDOLL_ID : Inventory.PAPERDOLL_ORDER)
writeD(charInfoPackage.getPaperdollItemId(PAPERDOLL_ID));
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_RHAND)); //Внешний вид оружия (ИД Итема).
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_LHAND)); //Внешний вид щита (ИД Итема).
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_GLOVES)); //Внешний вид перчаток (ИД Итема).
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_CHEST)); //Внешний вид верха (ИД Итема).
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_LEGS)); //Внешний вид низа (ИД Итема).
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_FEET)); //Внешний вид ботинок (ИД Итема).
writeD(0x00); //???
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_HAIR)); //Внешний вид шляпы (ИД итема).
writeD(charInfoPackage.getPaperdollVisualId(Inventory.PAPERDOLL_DHAIR)); //Внешний вид маски (ИД итема).
writeH(0x00); // unk Episodion
writeH(0x00); // unk Episodion
writeH(0x00); // unk Episodion
writeH(0x00); // unk Episodion
writeH(0x01); // unk Episodion
writeD(charInfoPackage.getHairStyle());
writeD(charInfoPackage.getHairColor());
writeD(charInfoPackage.getFace());
writeF(charInfoPackage.getMaxHp()); // hp max
writeF(charInfoPackage.getMaxMp()); // mp max
writeD(charInfoPackage.getAccessLevel() > -100 ? charInfoPackage.getDeleteTimer() : -1);
writeD(charInfoPackage.getClassId());
writeD(i == lastUsed ? 1 : 0);
writeC(Math.min(charInfoPackage.getPaperdollEnchantEffect(Inventory.PAPERDOLL_RHAND), 127));
writeH(charInfoPackage.getPaperdollVariation1Id(Inventory.PAPERDOLL_RHAND));
writeH(charInfoPackage.getPaperdollVariation2Id(Inventory.PAPERDOLL_RHAND));
int weaponId = charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND);
if(weaponId == 8190) // Transform id (на оффе отображаются только КВ трансформации или вообще не отображаются ;)
writeD(301);
else if(weaponId == 8689)
writeD(302);
else
writeD(0x00);
//TODO: Pet info?
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeF(0x00);
writeF(0x00);
writeD(charInfoPackage.getVitalityPoints());
/*TODO: Сделать, чтобы реагировало на ПА.
if(hasPremiumAccount)
{
writeD(charInfoPackage.getVitalityPoints() > 0 ? (int) (100 * Config.ALT_VITALITY_PA_RATE) : 100);
writeD(Config.ALT_VITALITY_POTIONS_PA_LIMIT - charInfoPackage.getVitalityUsedPotions());
}
else
{*/
writeD(charInfoPackage.getVitalityPoints() > 0 ? (int) (100 * Config.ALT_VITALITY_RATE) : 100);
writeD(Config.ALT_VITALITY_POTIONS_LIMIT - charInfoPackage.getVitalityUsedPotions());
/*}*/
writeD(0x01); // Активен персонаж или нет.
writeC(0x00); // UNK
writeC(0x00); // UNK
writeC(0x00); // UNK Episodion
Добавлено через 7 минут
ExUserInfoEquipSlot (Opcode 0xFE:0x151). Protocol 597.
Код:
writeD(_objectId);
writeH(_inv.length);
writeB(new byte[]{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF});
for(int[] inv : _inv)
{
writeH(18); // size
writeD(inv[0]); // item ObjID
writeD(inv[1]); // item ID
writeH(inv[2]); // variation ID 1 (augment)
writeH(inv[3]); // variation ID 2 (augment)
writeD(inv[4]); // visual ID
}