Поиск Epeisodion CharInfo

Tyrel

Путник
Пользователь
Сообщения
65
Розыгрыши
0
Репутация
161
Реакции
23
Баллы
0
Ищу структуру пакета CharInfo, хроники Epeisodion. Буду рад любой помощи, так же не исключена денежная благодарность.
 
как будет время, копну архивчики, давно апал эпизодку, не помню уже что сделал\отладил
 
  • Мне нравится
Реакции: kick

    kick

    Баллов: 21
    Без комментариев
Пожалуй необходимость уже отпала, задачка получилось весьма интересная. Сначала решил попробовать пакетку Артеи на эпизод натянуть (как с NpcInfo), но не получилось. В ход пошел гугл, известные форумы, разработки других людей, но тоже успехом не увенчалось. Протокол кстати 583, возможно и под более ранний протокол и подошли бы решения которые я нашел, но легких путей мы не ищем. В шаре ничего нет, снифа нет, в ход пошел тупой перебор значений. В разные места пакета добавлял writeC(0x00) для верности смещения блоков в нужные места, дабы данные которые известны хоть как то отобразились. Сказать что это адовая работа, не сказать ничего, клиент критовал раз 60, а критовал он 1 раз из 5, но в итоге за 5 часов структуру подобрал почти полностью, даже аура Фестиваля Хаоса отображается)) Это конец пакета как раз, т.е. суммарно байты выставлены везде почти верно, за исключением некоторых мест.
 
Пожалуй необходимость уже отпала, задачка получилось весьма интересная. Сначала решил попробовать пакетку Артеи на эпизод натянуть (как с NpcInfo), но не получилось. В ход пошел гугл, известные форумы, разработки других людей, но тоже успехом не увенчалось. Протокол кстати 583, возможно и под более ранний протокол и подошли бы решения которые я нашел, но легких путей мы не ищем. В шаре ничего нет, снифа нет, в ход пошел тупой перебор значений. В разные места пакета добавлял writeC(0x00) для верности смещения блоков в нужные места, дабы данные которые известны хоть как то отобразились. Сказать что это адовая работа, не сказать ничего, клиент критовал раз 60, а критовал он 1 раз из 5, но в итоге за 5 часов структуру подобрал почти полностью, даже аура Фестиваля Хаоса отображается)) Это конец пакета как раз, т.е. суммарно байты выставлены везде почти верно, за исключением некоторых мест.
как знаешь
поищи awakendev эпизодку, вроде недавно зашарили, там по пакетной части не мало сделано, и делалось в момент когда эпизодка была на оффах и можно было снифать нормально
п.с. если не найдешь, пиши в лс, скину
 
как знаешь
поищи awakendev эпизодку, вроде недавно зашарили, там по пакетной части не мало сделано, и делалось в момент когда эпизодка была на оффах и можно было снифать нормально
п.с. если не найдешь, пиши в лс, скину
Так я ее и смотрел, там не то, да посмотреть хроники хорошо, но не играбельно
 
Я про пакетку, 30% значений точно нету, а то и больше. Структура есть но с ноликами.
ну, а где ты возьмешь все готовое
на ЗГ можно посмотреть, там частично была расписана структура некоторых пакетов

так же можешь обратиться к пользователю elastic, если память не изменяет, то у него могут быть всякие мелочи
 
ну, а где ты возьмешь все готовое
на ЗГ можно посмотреть, там частично была расписана структура некоторых пакетов
На зг тоже мало, та нигде не возьмешь, что не найду буду подбирать руками как в случае с CharInfo -:D
 
Зачем руками? Делаем дамп и смотрим
 
ну, а где ты возьмешь все готовое
на ЗГ можно посмотреть, там частично была расписана структура некоторых пакетов

так же можешь обратиться к пользователю elastic, если память не изменяет, то у него могут быть всякие мелочи
К сожалению, у меня уже не осталось пакетки эпизода, валялась на ноуте и куда-то делась :(
CharInfo я разбирал сам, сравнивая по дампу. Остальные пакеты не сильно отличаются от эртеи.
 
К сожалению, у меня уже не осталось пакетки эпизода, валялась на ноуте и куда-то делась :(
CharInfo я разбирал сам, сравнивая по дампу. Остальные пакеты не сильно отличаются от эртеи.
у меня остались некоторые пакеты, которые ты мне еще давненько сбрасывал, 575 протокола, если не против, могу залить
 
у меня остались некоторые пакеты, которые ты мне еще давненько сбрасывал, 575 протокола, если не против, могу залить
Не против ибо все что связано с инфо пакетами, я перевел на систему л2ж.
 
Код:
    @Override
    protected final void writeImpl()
    {
        boolean gmSeeInvis = false;

        if(_invisible)
        {
            L2PcInstance tmp = getClient().getActiveChar();
            if(tmp != null && tmp.isGM())
            {
                gmSeeInvis = false;
            }
        }

        writeD(_x);
        writeD(_y);
        writeD(_z);
        writeD(_vehicleId);
        writeD(_objId);

        writeS(_activeChar.getAppearance().getVisibleName());

        writeH(customRace);
        writeC(_activeChar.getAppearance().getSex() ? 1 : 0);
        writeD(customClass);

        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_UNDER));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CLOAK));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR2));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RBRACELET));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LBRACELET));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO1));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO2));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO3));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO4));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO5));
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO6));
        writeD(0x00);

        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_UNDER));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HEAD));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LHAND));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_GLOVES));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_CHEST));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LEGS));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_FEET));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_CLOAK));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HAIR));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HAIR2));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RBRACELET));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LBRACELET));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO1));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO2));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO3));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO4));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO5));
        writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO6));
        writeD(0x00);

        writeC(0x00);
        writeC(0x00);
        writeC(0x00); // ARMOR ENCHANT

        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_RHAND));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_LHAND));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_RHAND));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_GLOVES));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_CHEST));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_LEGS));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_FEET));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_HAIR));
        writeD(_activeChar.getInventory().getPaperdollItemSkinByItemId(Inventory.PAPERDOLL_HAIR2));

        writeC(_activeChar.getPvPFlagController().getStateValue());
        writeD(_activeChar.getReputation());

        writeD(_mAtkSpd);
        writeD(_pAtkSpd);

        writeD(0x00);

        writeH(_runSpd);
        writeH(_walkSpd);
        writeH(_runSpd);
        writeH(_walkSpd);
        writeH(_runSpd);
        writeH(_walkSpd);
        writeH(_runSpd);
        writeH(_walkSpd);

        writeF(_activeChar.getMovementSpeedMultiplier());
        writeF(_activeChar.getAttackSpeedMultiplier());

        writeF(collisionRadius);
        writeF(collisionHeight);

        writeD(_activeChar.getAppearance().getHairStyle());
        writeD(_activeChar.getAppearance().getHairColor());
        writeD(_activeChar.getAppearance().getFace());

        writeS(gmSeeInvis ? "[Невидимый]" : _activeChar.getAppearance().getVisibleTitle());

        if(!_activeChar.isCursedWeaponEquipped() && !_activeChar.isHideInfo() && !_activeChar.isInEvent())
        {
            writeD(_activeChar.getClanId());
            writeD(_activeChar.getClanCrestId());
            writeD(_activeChar.getAllyId());
            writeD(_activeChar.getAllyCrestId());
        }
        else
        {
            writeD(0);
            writeD(0);
            writeD(0);
            writeD(0);
        }

        writeC(_activeChar.isSitting() ? 0 : 1);
        writeC(_activeChar.isRunning() ? 1 : 0);
        writeC(_activeChar.isInCombat() ? 1 : 0);
        writeC(!_activeChar.getOlympiadController().isParticipating() && _activeChar.isAlikeDead() ? 1 : 0);
        writeC(!gmSeeInvis && _invisible ? 1 : 0);
        writeC(_activeChar.getMountType());
        writeC(_activeChar.getPrivateStoreType().ordinal());

        writeH(_activeChar.getCubics().size());
        for(L2CubicInstance cubic : _activeChar.getCubics())
        {
            writeH(cubic.getId());
        }

        writeC(_activeChar.isInPartyMatchRoom() ? 1 : 0);

        writeC(_activeChar.isFlyingMounted() ? 2 : 0);
        writeH(_activeChar.isInEvent() ? 0 : _activeChar.getRecommendations());
        writeD(_activeChar.getMountNpcId() + 1000000);

        writeD(_activeChar.getClassId().getId());
        writeD(0x00);
        writeC(_activeChar.isMounted() || _airShipHelm != 0 ? 0 : _activeChar.getEnchantEffect());
        writeC(_activeChar.getTeam().ordinal());
        writeD(_activeChar.getClanCrestLargeId());
        writeC(_activeChar.isNoble() ? 1 : 0);
        writeC(!_activeChar.isInEvent() && (_activeChar.getOlympiadController().isHero() || _activeChar.isFakeHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura

        writeC(_activeChar.isFishing() ? 1 : 0);
        writeD(_activeChar.getFishx());
        writeD(_activeChar.getFishy());
        writeD(_activeChar.getFishz());

        writeD(_activeChar.isInEvent() ? PcAppearance.DEFAULT_NAME_COLOR : _activeChar.getAppearance().getNameColor());

        writeD(_heading);

        writeC(_activeChar.getPledgeClass());
        writeH(_activeChar.getPledgeType());

        writeD(_activeChar.isInEvent() ? PcAppearance.DEFAULT_TITLE_COLOR : _activeChar.getAppearance().getTitleColor());

        writeC(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);

        writeD(_activeChar.getClanId() > 0 ? _activeChar.getClan().getReputationScore() : 0);

        writeD(_activeChar.getTransformationId());
        writeD(_activeChar.isInEvent() ? 0 : _activeChar.getAgathionId());

        writeD(0x00);
        writeD(0x00);
        writeD(0x00);
      
        writeD((int) _activeChar.getCurrentCp());
        writeD(_curHp);
        writeD(_maxHp);
        writeD((int) _activeChar.getCurrentMp());
        writeD(_activeChar.getMaxMp());

        writeD(0x00);

        FastSet<Integer> abnormals = _activeChar.getAbnormalEffects();
        if(!abnormals.isEmpty())
        {
            writeD(abnormals.size());
            for(int abnormalId : abnormals)
            {
                writeH(abnormalId);
            }
        }
        else
        {
            writeD(AbnormalEffect.NULL.getMask());
        }

        writeC(_activeChar.isInEvent() ? 1 : isFestivalHero ? 100 : 0);
        writeC(0x01); // хайд урашений (1 - показывать 0 - нет)
    }
Рабочая структура, протокол 583
Вопрос на засыпку, как на евро клиенте включить РУ чат ?
Гугл как обычно молчит, есть разработки но для более ранних хроник.
 
Последнее редактирование:
Кстати, нашел у себя на диске давным-давно сделанный пакетов Valiance, 575 протокол. Только там вроде серверные опкоды, как-то клиентские не разбирал.

Мб кто-то может сделать дампец 583 протокола? Вот .
 
Назад
Сверху Снизу