Дело было вечером, делать было нечего.
Преобразовать геодаты из форматов L2D, L2J, L2G, L2M, _path.txt, _conv.dat, RP в форматы L2J, _conv.dat, L2G и L2D.
Все настраивается через конфиг, геодата получается в конце такая же, какой была до конвертации (если руки прямые её конвертировали). В теории можна использовать на сервере, у которых основаня гео .l2j, _conv.dat, ибо данные сводились под стандарт _conv.dat.
Больше информации можно узнать на страницеВы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация.
Ссылку на гит не оставил.Больше информации можно узнать на странице github.
Я уже и забыл про ту кнопку доп. информации. Её так редко заполняют
та скорее просто любопытство как собрать гео обратно в l2gЗачем тебе l2g если это фул дебрикейтед и легаси код и большую часть логики я вообще снес. Вот тебе инфаВы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
Смело можешь l2g выпиливать и сконцентрироваться на других форматах
- Добавлена проверка на пустоту байтового массива;
- Исправлена ошибка, при которой файлы создавались с неправильными именами;
- Поддержка l2m формата;
судя по тому, что попередники не посчитали нужным использовать данную информацию для формирования flat блоков, можно считать что почтииииииииииииииииииииииииии не влияет.что это влияет
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()почтииииииииииииииииииииииииии не влияет
- Добавлен возможность експорта в формат L2G;
- Дополнительные проверки для _conv.dat заголовка;
- Изменения в рабочей директории:
- Все папки для парсинга были переименованы в одну "input" папку. Для установки тип файла для парсинга - укажите это в конфиге;
- Все папки для експорта были переименованы в одну "output" папку. Для установки тип файла для записи - укажите это в конфиге;
- Изменения в названиях переменных;
Не совсем правильное сравнение...А в чём различие, если сравнивать с Stazis L2 Geo Converter (GeoConv_v93b)?
Извините, перепутал конвертор, яписалдумал о этом.
Если не клацали, могу сбросить для тестов.
Посмотреть вложение 55954
p.s. домен мертвый, не сочтите за рекламу.
l2geo_ru | Index | |
Читаемые форматы | l2j, _conv.dat | _conv.dat, l2j, l2d, l2g, l2m, rp, l2s, |
Сохраняемые форматы | l2j, _conv.dat | _conv.dat, l2j, l2g |
если надо могу дать вроде есть ,у меня это хрень где привязку делает по айпи
- если есть информация о привязке для гео l2s - l2s;
если надо могу дать вроде есть ,у меня это хрень где привязку делает по айпи
Геодата привязанная по IP? Это уже что-то за гранью добра и зла.
@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; }
Что за лол) Это кто такое придумал?)
/**
* @author Bonux
*/
public class GeoCrypt
{
public static int decrypt(int blobOff, FileChannel roChannel, ByteBuffer buff) throws IOException
{
return 0;
}
}
Ну, а само первоначальное кодированиеЧто за лол) Это кто такое придумал?)
@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;
}
* @Author: Diamond
* @CoAuthor: DRiN, Bonux
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?