Структура файла Lineage2Replay

Структура файла Lineage2Replay 1.1

Нет прав для скачивания
У вас не реализован DES крипт. Он тем же ключом обратно зашифровывается. Это же симметричное шифрование в отличии от RSA.
А зачем мне его обратно шифровать? Там и так данных много, та и 311 шифрование только для реплеев и подходит + реплеи смотреть уже нельзя, только записывать 🤯
 

А зачем мне его обратно шифровать? Там и так данных много, та и 311 шифрование только для реплеев и подходит + реплеи смотреть уже нельзя, только записывать 🤯
А смысл тогда разбирать? Я так понимаю что разбор реплея подразумевает создание своего для последующего просмотра или конвертации между хрониками уже созданных.
 
мое подозрение что челик хочет оверплеями дать понять игрокам что у него аяяй народа что бы скрестить все это кто выкинет
 
А смысл тогда разбирать? Я так понимаю что разбор реплея подразумевает создание своего для последующего просмотра или конвертации между хрониками уже созданных.
я от туда таскаю умения используемые, информацию о НПС, информацию о тригеррах, уникальные какие-то реализации, если они там конечно записываются... Иногда даже спавны
 
А смысл тогда разбирать? Я так понимаю что разбор реплея подразумевает создание своего для последующего просмотра или конвертации между хрониками уже созданных.
да банально чтобы те же спавны начерно сделать, просто пробежавшись по нужным локам с включенной записью реплея. а потом просто извлекая из пакетов NpcInfo в реплее информацию о том в каких координатах какие нпс стояли.
Ну а потом сгенеренный так спавн уже можно причесать и переделать в территориальный.
 
Набросанный скрипт для вытаскивания НПС пакетов.
Java:
    public static SimpleNpcHolder[] getAllNpcInfoFromReplay(Set<Integer> npcIDs, ReplayHolder... replays)
    {
        if (replays == null)
        {
            System.err.println(LOGGER_NAME + "No replay presented");
            return null;
        }
        SimpleNpcHolder[] npcHolders = new SimpleNpcHolder[0];
        for (ReplayHolder replay : replays)
        {
            for (ServerPacketClass packet : replay.getAllReadablePackets())
            {
                final SimpleNpcHolder npcHolder = getHolderFromPacket(npcIDs, packet);
                if (npcHolder == null)
                {
                    continue;
                }
                npcHolders = ArrayUtils.add(npcHolders, npcHolder);
            }
        }
        return npcHolders;
    }

    private static SimpleNpcHolder getHolderFromPacket(Set<Integer> npcIDs, ServerPacketClass packet)
    {
        final SimpleNpcHolder holder;
        if (packet instanceof final NpcInfoPacket npcObjectPacket)
        {
            holder = npcObjectPacket.getHolder().getSimpleNpcHolder();
        }
        else if (packet instanceof final ServerObjectPacket serverObjectPacket)
        {
            holder = serverObjectPacket.getHolder().getSimpleNpcHolder();
        }
        else
        {
            holder = null;
        }
        if (holder != null && !npcIDs.isEmpty() && npcIDs.contains(holder.getNpcId()))
        {
            return null;
        }
        return holder;
    }
Java:
    public String getFormedXml()
    {
        final StringBuilder builder = new StringBuilder();
        builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        builder.append("\n");
        builder.append("<list xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"../../xsd/spawns.xsd\">");
        builder.append("\n");
        builder.append("\t");
        builder.append("<spawn>");
        builder.append("\n");
        builder.append("\t\t");
        builder.append("<group>");
        for (SimpleNpcHolder holder : _holderList)
        {
            builder.append("\n");
            builder.append(getSpawnString(holder));
        }
        builder.append("\n");
        builder.append("\t\t");
        builder.append("</group>");
        builder.append("\n");
        builder.append("\t");
        builder.append("</spawn>");
        builder.append("\n");
        builder.append("</list>");
        return builder.toString();
    }

    private String getSpawnString(SimpleNpcHolder holder)
    {
        final boolean isEvent = false;
        final StringBuilder builder = new StringBuilder();
        builder.append("\t\t\t");
        builder.append(getEventNpcSpawnHeader()).append(holder.getNpcId()).append("\" ");
        builder.append("x=\"").append(holder.getPosition().getX()).append("\" ");
        builder.append("y=\"").append(holder.getPosition().getY()).append("\" ");
        builder.append("z=\"").append(holder.getPosition().getZ()).append("\" ");
        builder.append("heading=\"").append(holder.getPosition().getH()).append("\" ");
        if (!isEvent)
        {
            builder.append("respawnTime=\"").append("15sec").append("\" ");
        }
        builder.append("/>");
        builder.append("\t<!-- ");
        builder.append(holder.getName());
        if (!holder.getTitle().isEmpty())
        {
            builder.append(" ");
            builder.append("[");
            builder.append(holder.getTitle());
            builder.append("]");
        }
        builder.append(" ");
        builder.append("-->");
        return builder.toString();
    }

    private String getEventNpcSpawnHeader()
    {
        if (_isEvent)
        {
            return "<add npc=\"";
        }
        else
        {
            return "<npc id=\"";
        }
    }
 
мое подозрение что челик хочет оверплеями дать понять игрокам что у него аяяй народа что бы скрестить все это кто выкинет

Я через оверплей могу создать любую сцену и потом сделать мувик на абсолютно любых хрониках. Далее захват видео через драйвер и монтаж демо ролика. Любо просто просмотр старых роликов на более позднем клиенте. Причём здесь накрутка мега онлайна? Сейчас уже никто на это не ведётся. Да и фантом ботами это реализуется куда проще.

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

Ну это уже фрозенами попахивает.

я от туда таскаю умения используемые, информацию о НПС, информацию о тригеррах, уникальные какие-то реализации, если они там конечно записываются... Иногда даже спавны

Умения и триггеры согласен. Их трудно реализовать т.к. есть такие у которых совмещаются несколько эффектов.
 
Ну это уже фрозенами попахивает.
ну фрозены, не фрозены, но информацию где кто стоит для актуальных версий, кроме спавнов вручную или по видосикам, это очень даже актуально. Даже черновой набросок ускорит процесс :)
 
Весь спаун есть в базе данных на л2централе, там прямо на карте нарисованы территориальные и точечные спауны, выводишь формулу масштабирования и парсишь
 
  • Мне нравится
Реакции: kick
Весь спаун есть в базе данных на л2централе
Проблема в том, что не весь спаун там есть. Например, , по-моему, далеко не все на карте видны (либо мне криво показывает). Да и по высоте информации нет (что может быть важно для локаций с этажами), скорее всего (не прям беда, но все же)
 
Назад
Сверху Снизу