CharacterSelectionInfoPacket (Salvation 140)

Статус
В этой теме нельзя размещать новые ответы.

masone

Заблокирован
Заблокирован
Сообщения
284
Розыгрыши
0
Решения
1
Репутация
255
Реакции
335
Баллы
1 483
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Хроники
  1. Salvation
Исходники
Присутствуют
Сборка
оверы
Всем привет, при апе пакетов возник вопрос по этому пакету

1632157614467.png

Java:
    @Override
    protected final void writeData(final PacketBody packet, final GameClient client) {
        final int size = (_characterPackages != null) ? _characterPackages.length : 0;
 
        packet.writeD(size);
        packet.writeD(SalvationConfig.MAX_CHARACTERS_NUMBER_PER_ACCOUNT); // Максимальное количество персонажей на сервере
        packet.writeC(size >= SalvationConfig.MAX_CHARACTERS_NUMBER_PER_ACCOUNT ? 0x01 : 0x00); // 0x00 - Разрешить, 0x01 - запретить. Разрешает или запрещает создание игроков

        packet.writeC(0x00);
        packet.writeD(0x02); // 0x01 - Выводит окно, что нужно купить игру, что создавать более 2х чаров. 0х02 - обычное лобби.
        packet.writeC(0x00); // 0x01 - Предлогает купить ПА.
        packet.writeC(0x00); // 140 protocol

        long lastAccess = -1L;
        if (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];

            packet.writeS(charInfoPackage.getName());
            packet.writeD(charInfoPackage.getCharId()); // ?
            packet.writeS(_loginName);
            packet.writeD(_sessionId);
            packet.writeD(charInfoPackage.getClanId());
            packet.writeD(0x00); // ??

            packet.writeD(charInfoPackage.getSex());
            packet.writeD(charInfoPackage.getRace());
            if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()) {
                packet.writeD(charInfoPackage.getClassId());
            } else {
                packet.writeD(charInfoPackage.getBaseClassId());
            }

            packet.writeD(0x01);

            packet.writeD(charInfoPackage.getX());
            packet.writeD(charInfoPackage.getY());
            packet.writeD(charInfoPackage.getZ());

            packet.writeF(charInfoPackage.getCurrentHp());
            packet.writeF(charInfoPackage.getCurrentMp());
            
            packet.writeQ(charInfoPackage.getSp());

            packet.writeQ(charInfoPackage.getExp());
            int lvl = charInfoPackage.getLevel();
            packet.writeF(ExperienceParser.getInstance().getExpPercent(lvl, charInfoPackage.getExp()));
            packet.writeD(charInfoPackage.getLevel());

            packet.writeD(charInfoPackage.getKarma());
            packet.writeD(charInfoPackage.getPk());
            packet.writeD(charInfoPackage.getPvP());

            packet.writeD(0x00);
            packet.writeD(0x00);
            packet.writeD(0x00);
            packet.writeD(0x00);
            packet.writeD(0x00);
            packet.writeD(0x00);
            packet.writeD(0x00);
            
            packet.writeD(0x00); // unk Ertheia
            packet.writeD(0x00); // unk Ertheia
            
            for (int PAPERDOLL_ID : Inventory.PAPERDOLL_ORDER)
                packet.writeD(charInfoPackage.getPaperdollItemId(PAPERDOLL_ID));


            packet.writeD(0x00); // Salvation
            packet.writeD(0x00); // Salvation
            packet.writeD(0x00); // Salvation
            packet.writeD(0x00); // Salvation
            packet.writeD(0x00); // Salvation

            for (int slot : getPaperdollOrderVisualId()) {
                packet.writeD(charInfoPackage.getPaperdollItemVisualId(slot));
            }

            packet.writeH(0x00); // PaperdollEnchantEffect PAPERDOLL_CHEST
            packet.writeH(0x00); // PaperdollEnchantEffect PAPERDOLL_LEGS
            packet.writeH(0x00); // PaperdollEnchantEffect PAPERDOLL_HEAD
            packet.writeH(0x00); // PaperdollEnchantEffect PAPERDOLL_GLOVES
            packet.writeH(0x00); // PaperdollEnchantEffect PAPERDOLL_FEET
            
            packet.writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR) > 0 ? charInfoPackage.getSex() : charInfoPackage.getHairStyle());
            packet.writeD(charInfoPackage.getHairColor());
            packet.writeD(charInfoPackage.getFace());

            packet.writeF(charInfoPackage.getMaxHp()); // hp max
            packet.writeF(charInfoPackage.getMaxMp()); // mp max

            packet.writeD(charInfoPackage.getAccessLevel() > -100 ? charInfoPackage.getDeleteTimer() : -1);
            packet.writeD(charInfoPackage.getClassId());
            packet.writeD(i == lastUsed ? 1 : 0);

            packet.writeC(Math.min(charInfoPackage.getPaperdollEnchantEffect(Inventory.PAPERDOLL_RHAND), 127));
            packet.writeD(charInfoPackage.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
            packet.writeD(charInfoPackage.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));

            // 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); // Pet NpcId
            packet.writeD(0x00); // Pet level
            packet.writeD(0x00); // Pet Food
            packet.writeD(0x00); // Pet Food Level
            packet.writeF(0x00); // Current pet HP
            packet.writeF(0x00); // Current pet MP
            
            packet.writeD(0);
            packet.writeD(0);
            packet.writeD(0x00); // Use Vitality Potions Left
            packet.writeD(charInfoPackage.getAccessLevel() == -100 ? 0x00 : 0x01);

            packet.writeC(charInfoPackage.isNoble() ? 0x01 : 0x00); // Chaos Festival Winner
            packet.writeC(Hero.getInstance().isHero(charInfoPackage.getObjectId()) ? 0x01 : 0x00); // Hero glow
            packet.writeC(0x00); // show hair accessory if enabled
        }
    }
Received on: 20:01:40.748







~~~~ Loop start ~~~~







































































































~~ Loop element delimiter ~~







































































































~~ Loop element delimiter ~~



































































































EXPECTED MORE DATA
(according to packet definition)
 
Видно в дампе, что ломается в начале 1632158141016.png после gift должны быть еще данные перед циклом персонажей
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
можно закрывать
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу