_nodeIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, crypt);
_stateNodeIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, crypt);
_stateNode = Lineage2DataReaderBuffer.readInt(buffer, crypt);
_probeMask = Lineage2DataReaderBuffer.readLong(buffer, crypt);
_latentAction = Lineage2DataReaderBuffer.readInt(buffer, crypt);
Глянь тутаВообщем как и написано - ищу помощь со структурой файлов Unreal Engine на которой работает Л2.
Что вообще хочу... Хочу разобрать весь Unreal Engine файл и повтороно его запаковать.
Хочу открыть файл unreal engine, а именно полностью разобрать его и собрать его в том же виде, в каком он был.
Я его разобрал до уровня:
* Header
* Name
* Imports
* Exports
* t3d
Я разобрал и собрал первые 4 блока, но у меня сейчас проблема с t3d обьектами, а если более точно - с обьектами, которые имеют флаг HasStack.
Обьекты, которые не имеют этого блока, я могу разобрать без каких либо проблем, но вот блоки с HasStack.
У них как минимум есть "заголовок", который еще и имеет динамический заголовок, но не могу понять что именно там и как он должен читаться.
Условно, даже если я могу прочитать этот заголовок - дальше получается идет сам блок has stack...
В начале идет просто 0 и все. Даже если ноль этот обойти - посреди блока опять же идет 0.
Как я думаю:
Условно блоке has stack 2 под_блока записано и чтение должно происходить как
HEADER
0
SUB_BLOCK_01
0
SUB_BLOCK_02
0
Но опять же, так тоже не получается. Как минимум я не знаю сколько под блоков, а в header, если его читать так, как я это делаю, то там вообще непонятно что.
Прошу помощи !
Сам заголовок читаю так:
Код:_nodeIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, crypt); _stateNodeIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, crypt); _stateNode = Lineage2DataReaderBuffer.readInt(buffer, crypt); _probeMask = Lineage2DataReaderBuffer.readLong(buffer, crypt); _latentAction = Lineage2DataReaderBuffer.readInt(buffer, crypt);
node = -31
stateNode = -31
probeMask = -1
latentAction = 7471205
offset = -1
Engine.TerrainInfo: Property template not found: TerrainMap
Engine.TerrainInfo: Property template not found: TerrainScale
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: Layers
Engine.TerrainInfo: Property template not found: QuadVisibilityBitmap
Engine.TerrainInfo: Property template not found: EdgeTurnBitmap
Engine.TerrainInfo: Property template not found: MapX
Engine.TerrainInfo: Property template not found: MapY
Engine.TerrainInfo: Property template not found: QuadVisibilityBitmapOrig
Engine.TerrainInfo: Property template not found: EdgeTurnBitmapOrig
Engine.TerrainInfo: Property template not found: GeneratedSectorCounter
Engine.TerrainInfo: Property template not found: NumIntMap
Engine.TerrainInfo: Property template not found: bAutoTimeGeneration
Engine.TerrainInfo: Property template not found: TIntMap
Engine.TerrainInfo: Property template not found: TickTime
Engine.TerrainInfo: Property template not found: LightMapWidth
Engine.TerrainInfo: Property template not found: LightMapHeight
Engine.TerrainInfo: Property template not found: bLightChanged
Engine.TerrainInfo: Property template not found: bSunAffect
Engine.TerrainInfo: Property template not found: Level
Engine.TerrainInfo: Property template not found: Region
Engine.TerrainInfo: Property template not found: Tag
Engine.TerrainInfo: Property template not found: PhysicsVolume
Engine.TerrainInfo: Property template not found: Location
Engine.TerrainInfo: Property template not found: Rotation
Engine.TerrainInfo: Property template not found: DrawScale
Engine.TerrainInfo: Property template not found: SwayRotationOrig
Engine.TerrainInfo: Property template not found: TexModifyInfo
Я с ним около недели развлекался, но до меня так и не дошли некоторые моменты.Глянь тута
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
и чего же я мог ещё ожидать...
Прошу прощения, но прошлый разговор не сильно прошел успешно, та и на меня тогда Дизер воздействовал своим отношением "иди *****", по-этому Ваш ответ меня немного, удивил. Вообще он просто удивил своим наличием, все равно он мне помог в кой-то мере. Ну, а мой ответ в этой теме - это результат того, что я уже баловался с L2PE как только мог, но результата не достиг.Ответ типа "и чего же я мог ещё ожидать..." когда тебе помогают отбивает все желание помочь.
Так же как писал мне и посреди разговора закрыл переписку.
Понял. Примерно совпадают данные, если брать тот же TerrianInfo
private int preparations(byte[] inputArray, CommonPair<Integer, Integer> crypt)
{
ByteBuffer buffer = ByteBuffer.wrap(inputArray);
UnrealPackageFile urPackage = getEntryObject().getPackage();
if ((getEntryObject().getObjectFlags() & ObjectFlag.RF_Transient.getMask()) != 0)
{
return 0;
}
if ((getEntryObject().getObjectFlags() & ObjectFlag.RF_HasStack.getMask()) == 0)
{
return 0;
}
_nodeIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, crypt);
_nodeEntry = (ImportEntryObject) urPackage.getObjectReference(_nodeIndex.getValue());
_stateNodeIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, crypt);
_stateNodeEntry = (ImportEntryObject) urPackage.getObjectReference(_stateNodeIndex.getValue());
// _stateNode = Lineage2DataReaderBuffer.readInt(buffer, crypt);
_probeMask = Lineage2DataReaderBuffer.readLong(buffer, crypt);
_latentAction = Lineage2DataReaderBuffer.readInt(buffer, crypt);
// _replicationOffset = (_probeMask & ClassPropertyFlags.CPF_Net.getMask()) != 0 ? Lineage2DataReaderBuffer.readShort(buffer, crypt) : -200;
_offset = Lineage2DataReaderBuffer.readCompactInt(buffer, crypt);
return buffer.position();
}
так где у тебя чтение properties ?
public final class SerializedTypeReader
{
private final UnrealPackageFile _urPackage;
private final UnrealPackageFile _importURPackage;
private CompactIntHolder _t3dEntryIndex;
private NameEntryObject _t3dEntryName;
private CompactIntHolder _t3dAdditionalEntryIndex;
private NameEntryObject _t3dAdditionalEntryName;
private UnrealDataType _unrealDataType;
private int _indexOfArray = -1;
private AbstractUnrealData _deserializedData;
public SerializedTypeReader(UnrealPackageFile urPackage, UnrealPackageFile importURPackage, ByteBuffer buffer, CommonPair<Integer, Integer> xorCrypt)
{
_urPackage = urPackage;
_importURPackage = importURPackage;
guessAndReadData(buffer, xorCrypt);
}
public SerializedTypeReader(UnrealPackageFile urPackage, ByteBuffer buffer, CommonPair<Integer, Integer> xorCrypt)
{
_urPackage = urPackage;
_importURPackage = null;
guessAndReadData(buffer, xorCrypt);
}
private void guessAndReadData(ByteBuffer buffer, CommonPair<Integer, Integer> xorCrypt)
{
_t3dEntryIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, xorCrypt);
_t3dEntryName = _urPackage.getNameFromTable(_t3dEntryIndex.getValue());
int unrealDataType = Lineage2DataReaderBuffer.readUnsignedByte(buffer, xorCrypt);
_unrealDataType = UnrealDataType.getTypeDataById(unrealDataType);
if (_unrealDataType.isRequiredAdditionalNameRead())
{
_t3dAdditionalEntryIndex = Lineage2DataReaderBuffer.readCompactInt(buffer, xorCrypt);
_t3dAdditionalEntryName = _urPackage.getNameFromTable(_t3dAdditionalEntryIndex.getValue());
}
int sizeOfData = _unrealDataType.getMinimalContainsByte() == -1 ? getSizeOfSerialisedData(buffer, xorCrypt, unrealDataType) : Math.max(_unrealDataType.getMinimalContainsByte(), getSizeOfSerialisedData(buffer, xorCrypt, unrealDataType));
_indexOfArray = isArray(unrealDataType) && _unrealDataType != UnrealDataType.BOOLEAN ? Lineage2DataReaderBuffer.readCompactInt(buffer, xorCrypt).getValue() : -1;
if (_unrealDataType.getDataClass() == null)
{
MainClass.getInstance().addNewMainType(_unrealDataType.name());
System.err.println(getClass().getSimpleName() + ": Skipped " + sizeOfData + " bytes. UnrealDataType \"" + _unrealDataType + "\" dont have data class. Implement me please, oni-chan ;*");
buffer.position(buffer.position() + sizeOfData);
return;
}
byte[] rawData = null;
try
{
rawData = Lineage2DataReaderBuffer.readBytes(buffer, null, 0, sizeOfData);
}
catch (Exception e)
{
e.printStackTrace();
}
ByteBuffer rawBuffer = ByteBuffer.wrap(rawData);
if (_unrealDataType.isRequiredAdditionalNameRead() && _unrealDataType.isRequiredVariableName())
{
try
{
_deserializedData = AbstractUnrealData.valueOf(_urPackage, _unrealDataType, xorCrypt, rawBuffer, _t3dAdditionalEntryName);
}
catch (Exception e)
{
e.printStackTrace();
}
}
else if (_unrealDataType.isRequiredVariableName())
{
_deserializedData = AbstractUnrealData.valueOf((_importURPackage == null ? _urPackage : _importURPackage), _unrealDataType, xorCrypt, rawBuffer, _t3dEntryName);
}
else
{
_deserializedData = AbstractUnrealData.valueOf((_importURPackage == null ? _urPackage : _importURPackage), _unrealDataType, xorCrypt, rawBuffer, null);
}
}
public int getIndexOfArray()
{
return _indexOfArray;
}
public static boolean isArray(int unrealDataType)
{
return unrealDataType >> 7 != 0;
}
public static int getSizeOfSerialisedData(ByteBuffer buffer, CommonPair<Integer, Integer> xorCrypt, int unreadDataType)
{
int dataType = unreadDataType >> 4 & 7;
switch(dataType)
{
case 0:
{
return 1;
}
case 1:
{
return 2;
}
case 2:
{
return 4;
}
case 3:
{
return 12;
}
case 4:
{
return 16;
}
case 5:
{
return Lineage2DataReaderBuffer.readUnsignedByte(buffer, xorCrypt);
}
case 6:
{
return Lineage2DataReaderBuffer.readUnsignedShort(buffer, xorCrypt);
}
case 7:
{
return Lineage2DataReaderBuffer.readInt(buffer, xorCrypt);
}
default:
{
throw new IllegalArgumentException(String.valueOf(dataType));
}
}
}
}
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?