Преобразователь геодаты любых форматов

Преобразователь геодаты любых форматов Версия 1.08.04

Нет прав для скачивания

MrKirill1232

Великий мудрец
Проверенный
Магистр реакций
Знаток письма высшего ранга
Куратор Данных
Победитель в номинации 2023
Мастер реакций
Неукротимое пламя
Медаль Благодарности
Победитель в номинации 2022
Старожил I степени
Сообщения
2 308
Розыгрыши
0
Решения
47
Репутация
1 245
Реакции
2 090
Баллы
2 058
MrKirill1232 добавил(а) новый ресурс:

Преобразователь геодаты любых форматов - Позволяет преобразовать любой формат геодаты Lineage 2 в требуемый пользователем

Дело было вечером, делать было нечего.

Преобразовать геодаты из форматов L2D, L2J, L2G, L2M, _path.txt, _conv.dat, RP в форматы L2J, _conv.dat, L2G и L2D.

Все настраивается через конфиг, геодата получается в конце такая же, какой была до конвертации (если руки прямые её конвертировали). В теории можна использовать на сервере, у которых основаня гео .l2j, _conv.dat, ибо данные сводились под стандарт _conv.dat.

Больше информации можно узнать на странице .

Узнать больше об этом ресурсе...
 
Последнее редактирование:

Зачем тебе l2g если это фул дебрикейтед и легаси код и большую часть логики я вообще снес. Вот тебе инфа
Смело можешь l2g выпиливать и сконцентрироваться на других форматах
 
Зачем тебе l2g если это фул дебрикейтед и легаси код и большую часть логики я вообще снес. Вот тебе инфа
Смело можешь l2g выпиливать и сконцентрироваться на других форматах
та скорее просто любопытство как собрать гео обратно в l2g :D
Так то остался только 1 формат - path.txt :(

UPD.

Подумал просто рандомный заголовок вешать да и забить на поиск закономерностей :(

UPD 2.

У кого-то еще остался формат l2m? :D
Скоро сможем некрофилией заняться :loltt0: :loltt0: :loltt0:
 
Последнее редактирование:
MrKirill1232 обновил(а) ресурс Преобразователь геодаты любых форматов новой записью:

Версия 1_03

  • Добавлена проверка на пустоту байтового массива;
  • Исправлена ошибка, при которой файлы создавались с неправильными именами;
  • Поддержка l2m формата;

Узнать больше об этом обновлении...
 
@MrKirill1232, а ты разбирал более детально PTS-формат?
Я не могу объяснить один момент, долго над ним бьюсь. Может ты знаешь?)
Вот есть условно "плоские" блоки с заголовком 0x00. У них длина 4 байта. Каждые два байта образуют 16-битное значение которое содержат в себе высоту(NSWE в плоских блоках вроде бы всегда 15). В большинстве случаев, оба эти 16-битных числа совпадают, но в некоторых местах, нет.

Вот есть например два плоских блока(Если брать с NE->SW, то номера 37305 и 37306) в регионе 19_21. Они отличаются
{88,-12,88,-12} >> -2984 -2984
{88,-12,80,-12} >> -2984 -2992

На ПТС я бегаю в этих квадратах без каких либо различий визуально, но даже в клиентском визуализиторе один выше другого.(см.скрины) Может быть ты знаешь, на что это влияет и и почему они отличаются?
1698507155476.png
 
судя по тому, что попередники не посчитали нужным использовать данную информацию для формирования flat блоков, можно считать что почтииииииииииииииииииииииииии не влияет.
Я его вот так как-то разобрал:
Java:
        short higherHeight = getBuffer(getFileAsByteArray(), Short.BYTES, _pos.getAndAdd(Short.BYTES), true).getShort();
        short lowestHeight = getBuffer(getFileAsByteArray(), Short.BYTES, _pos.getAndAdd(Short.BYTES), true).getShort();
        short height = (short) Math.max(higherHeight, lowestHeight);
 
почтииииииииииииииииииииииииии не влияет
Я тоже так думаю, т.к учитывая, что корейцы геоданные генерируют автоматически, возможно там есть какой-то не уловимый глазом угол у поверхности, из-за которого билдер выгрузил эти данные с учетом перепада высот внутри. Опять же, в игре вроде разницы нет, если использовать Math.max()
 
MrKirill1232 обновил(а) ресурс Преобразователь геодаты любых форматов новой записью:

Версия 1.04

  • Добавлен возможность експорта в формат L2G;
  • Дополнительные проверки для _conv.dat заголовка;
  • Изменения в рабочей директории:
    • Все папки для парсинга были переименованы в одну "input" папку. Для установки тип файла для парсинга - укажите это в конфиге;
    • Все папки для експорта были переименованы в одну "output" папку. Для установки тип файла для записи - укажите это в конфиге;
  • Изменения в названиях переменных;

Узнать больше об этом обновлении...
 

    Rolo

    Баллов: 20
    "Изменения в названиях переменных;", аш прослезился, да єто же работа всей моей жизни!
А в чём различие, если сравнивать с Stazis L2 Geo Converter (GeoConv_v93b)?
 
А в чём различие, если сравнивать с Stazis L2 Geo Converter (GeoConv_v93b)?
Не совсем правильное сравнение...

Stazis L2 Geo Converter использует UTX/UNR файлы для создания гео-карты и експорта в _conv.dat

Тут же набор парсеров, которые загружают данные из форматов
  • _conv.dat;
  • l2j;
  • l2d;
  • l2g;
  • l2m;
  • rp;
  • если есть информация о привязке для гео l2s - l2s;
  • path.txt
после чего сохраняют в требуемый формат:
  • _conv.dat;
  • l2j;
  • l2g;
Просто утилита для преобразования из формата А в формат Б.
* к примеру из l2d (чего в шаре нету) в l2j.

Может добавлю еще нормальный парсинг информации о блоках из формата _path.txt, но сейчас нет времени заниматься этим (точнее нет времени это доделать. Информацию распарсил, flat блоки выглядят более имение, но высота и nswe оставляет желать лучшего. Нужно правильно определять тип блока и его данные. Первые попытки это делать можно найти вот тута - )
 
Не совсем правильное сравнение...
Stazis L2 Geo Converter использует UTX/UNR файлы для создания гео-карты и експорта в _conv.dat
Извините, перепутал конвертор, я писал думал о этом.
Если не клацали, могу сбросить для тестов.

1699366657695.png

p.s. домен мертвый, не сочтите за рекламу.
 
Извините, перепутал конвертор, я писал думал о этом.
Если не клацали, могу сбросить для тестов.

Посмотреть вложение 55954

p.s. домен мертвый, не сочтите за рекламу.
l2geo_ruIndex
Читаемые форматыl2j, _conv.dat_conv.dat, l2j, l2d, l2g, l2m, rp, l2s, _path.txt
Сохраняемые форматыl2j, _conv.dat_conv.dat, l2j, l2g

ИМХО разница есть :Run:
 
Геодата привязанная по IP? Это уже что-то за гранью добра и зла.
Java:
    @Override
    public boolean checkGeodataCrypt()
    {
        _checksumm = CHECKSUMM;
        byte[] addrBytes = IP_ADDRESS.getBytes();
        for (int addrByteIdx = 0; addrByteIdx < addrBytes.length; ++addrByteIdx)
        {
            _checksumm ^= addrBytes[addrByteIdx];
            _checksumm = (_checksumm >>> 1 | _checksumm << 31);
        }
        _checksumm = (_checksumm ^ getBuffer(getFileAsByteArray(), Integer.BYTES, 0, false).getInt());
        if (_checksumm != 0)
        {
            byte key = (byte)((_checksumm >> 24 & 0xFF) ^ (_checksumm >> 16 & 0xFF) ^ (_checksumm >> 8 & 0xFF) ^ (_checksumm >> 0 & 0xFF));
            ByteBuffer buffer = ByteBuffer.wrap(getFileAsByteArray(), 4, getFileAsByteArray().length - 4);
            while (buffer.hasRemaining())
            {
                buffer.put(buffer.position(), (byte) (buffer.get() ^ key));
                _checksumm -= (key = buffer.get(buffer.position() - 1));
            }
            buffer.rewind();
            updateFileByteArray(buffer.array());
        }
        return true;
    }
 
Java:
    @Override
    public boolean checkGeodataCrypt()
    {
        _checksumm = CHECKSUMM;
        byte[] addrBytes = IP_ADDRESS.getBytes();
        for (int addrByteIdx = 0; addrByteIdx < addrBytes.length; ++addrByteIdx)
        {
            _checksumm ^= addrBytes[addrByteIdx];
            _checksumm = (_checksumm >>> 1 | _checksumm << 31);
        }
        _checksumm = (_checksumm ^ getBuffer(getFileAsByteArray(), Integer.BYTES, 0, false).getInt());
        if (_checksumm != 0)
        {
            byte key = (byte)((_checksumm >> 24 & 0xFF) ^ (_checksumm >> 16 & 0xFF) ^ (_checksumm >> 8 & 0xFF) ^ (_checksumm >> 0 & 0xFF));
            ByteBuffer buffer = ByteBuffer.wrap(getFileAsByteArray(), 4, getFileAsByteArray().length - 4);
            while (buffer.hasRemaining())
            {
                buffer.put(buffer.position(), (byte) (buffer.get() ^ key));
                _checksumm -= (key = buffer.get(buffer.position() - 1));
            }
            buffer.rewind();
            updateFileByteArray(buffer.array());
        }
        return true;
    }
Что за лол) Это кто такое придумал?)
 
Что за лол) Это кто такое придумал?)
Java:
/**
 * @author Bonux
 */
public class GeoCrypt
{
    public static int decrypt(int blobOff, FileChannel roChannel, ByteBuffer buff) throws IOException
    {
        return 0;
    }
}
:Hot:

Что за лол) Это кто такое придумал?)
Ну, а само первоначальное кодирование
Java:
    @Override
    public boolean checkGeodataCrypt()
    {
        int value = getBuffer(getFileAsByteArray(), Integer.BYTES, 0, false).getInt();
        _checksumm = (CHECKSUMM ^ value);
        if (_checksumm != 0)
        {
            byte key = (byte)((_checksumm >> 24 & 0xFF) ^ (_checksumm >> 16 & 0xFF) ^ (_checksumm >> 8 & 0xFF) ^ (_checksumm >> 0 & 0xFF));
            ByteBuffer buffer = ByteBuffer.wrap(getFileAsByteArray(), 4, getFileAsByteArray().length - 4);
            while (buffer.hasRemaining())
            {
                buffer.put(buffer.position(), (byte) (buffer.get() ^ key));
                _checksumm -= (key = buffer.get(buffer.position() - 1));
            }
            buffer.rewind();
            updateFileByteArray(buffer.array());
        }
        return true;
    }
скорее всего Deazer... Но это не точно.


UPD

Только предположение об авторстве Deazer ибо он одно время со скриптами работал, но в файле геодаты указаны:
Java:
 * @Author: Diamond
 * @CoAuthor: DRiN, Bonux
 
Назад
Сверху Снизу