mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2025-01-10 15:35:17 +08:00
Updating PSO/XML conversion
This commit is contained in:
parent
5fb8d25770
commit
85f0fa1e36
@ -661,6 +661,10 @@ namespace CodeWalker.GameFiles
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (offset >= block.Length)
|
||||||
|
{
|
||||||
|
offset = offset >> 8; //how to tell when to do this??
|
||||||
|
}
|
||||||
|
|
||||||
var boffset = offset + block.Offset;
|
var boffset = offset + block.Offset;
|
||||||
|
|
||||||
@ -1245,7 +1249,20 @@ namespace CodeWalker.GameFiles
|
|||||||
|
|
||||||
|
|
||||||
if (x1 != 0x1000000)
|
if (x1 != 0x1000000)
|
||||||
{ }
|
{
|
||||||
|
var c1 = MetaTypes.SwapBytes(BitConverter.ToUInt16(data, eoffset));
|
||||||
|
var c2 = MetaTypes.SwapBytes(BitConverter.ToUInt16(data, eoffset + 2));
|
||||||
|
var u1 = MetaTypes.SwapBytes(BitConverter.ToUInt32(data, eoffset + 4));
|
||||||
|
var c3 = MetaTypes.SwapBytes(BitConverter.ToUInt16(data, eoffset + 8));
|
||||||
|
var c4 = MetaTypes.SwapBytes(BitConverter.ToUInt16(data, eoffset + 10));
|
||||||
|
var u3 = MetaTypes.SwapBytes(BitConverter.ToUInt32(data, eoffset + 12));
|
||||||
|
ulong ptr = MetaTypes.SwapBytes(BitConverter.ToUInt64(data, eoffset + 16));
|
||||||
|
sptr = new Array_Structure(ptr, c2);
|
||||||
|
if (c3 != 256)
|
||||||
|
{ }
|
||||||
|
if (c1 != c2)
|
||||||
|
{ }
|
||||||
|
}
|
||||||
if (x2 != 0)
|
if (x2 != 0)
|
||||||
{ }
|
{ }
|
||||||
if (mapreftype2.ReferenceKey != 0)
|
if (mapreftype2.ReferenceKey != 0)
|
||||||
@ -1268,15 +1285,14 @@ namespace CodeWalker.GameFiles
|
|||||||
if (xCount1 > 0)
|
if (xCount1 > 0)
|
||||||
{
|
{
|
||||||
var xStruct = cont.GetStructureInfo(xBlock.NameHash);
|
var xStruct = cont.GetStructureInfo(xBlock.NameHash);
|
||||||
var xOffset1 = xOffset;
|
|
||||||
var xind = indent + 1;
|
var xind = indent + 1;
|
||||||
var aind = indent + 2;
|
var aind = indent + 2;
|
||||||
var kEntry = xStruct?.FindEntry(MetaName.Key);
|
var kEntry = xStruct?.FindEntry(MetaName.Key);
|
||||||
var iEntry = xStruct?.FindEntry(MetaName.Item);
|
var iEntry = xStruct?.FindEntry(MetaName.Item);
|
||||||
|
|
||||||
if (xOffset1 >= xBlock.Length)
|
if (xOffset >= xBlock.Length)
|
||||||
{
|
{
|
||||||
xOffset1 = xOffset1 >> 8; //how to tell when to do this??
|
xOffset = xOffset >> 8; //how to tell when to do this??
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((xStruct == null) && (xBlock.NameHash == 0))
|
if ((xStruct == null) && (xBlock.NameHash == 0))
|
||||||
@ -1310,19 +1326,17 @@ namespace CodeWalker.GameFiles
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
OpenTag(sb, xind, ename);
|
OpenTag(sb, xind, ename);
|
||||||
int xOffset2 = (int)xOffset1;
|
|
||||||
int xCount = xCount1;
|
|
||||||
|
|
||||||
for (int n = 0; n < xCount; n++)
|
for (int n = 0; n < xCount1; n++)
|
||||||
{
|
{
|
||||||
if (xOffset2 >= xBlock.Length)
|
if (xOffset >= xBlock.Length)
|
||||||
{
|
{
|
||||||
ErrorXml(sb, aind, "Offset out of range! Count is " + xCount.ToString());
|
ErrorXml(sb, aind, "Offset out of range! Count is " + xCount1.ToString());
|
||||||
break; //out of range...
|
break; //out of range...
|
||||||
}
|
}
|
||||||
//WriteNode(sb, aind, cont, xBlockId, xOffset, XmlTagMode.Item, xStruct.IndexInfo.NameHash);
|
//WriteNode(sb, aind, cont, xBlockId, xOffset, XmlTagMode.Item, xStruct.IndexInfo.NameHash);
|
||||||
|
|
||||||
int sOffset = xOffset2 + xBlock.Offset;
|
int sOffset = (int)xOffset + xBlock.Offset;
|
||||||
var kOffset = sOffset + kEntry.DataOffset;
|
var kOffset = sOffset + kEntry.DataOffset;
|
||||||
var iOffset = sOffset + iEntry.DataOffset;
|
var iOffset = sOffset + iEntry.DataOffset;
|
||||||
var kStr = GetStringValue(cont.Pso, kEntry, data, kOffset);
|
var kStr = GetStringValue(cont.Pso, kEntry, data, kOffset);
|
||||||
@ -1336,7 +1350,7 @@ namespace CodeWalker.GameFiles
|
|||||||
else if (iEntry.ReferenceKey != 0)//(xBlock.NameHash != (MetaName)MetaTypeName.ARRAYINFO)//257,258,259
|
else if (iEntry.ReferenceKey != 0)//(xBlock.NameHash != (MetaName)MetaTypeName.ARRAYINFO)//257,258,259
|
||||||
{
|
{
|
||||||
//embedded map values
|
//embedded map values
|
||||||
var vOffset = xOffset2 + iEntry.DataOffset;
|
var vOffset = (int)xOffset + iEntry.DataOffset;
|
||||||
OpenTag(sb, aind, "Item type=\"" + HashString((MetaName)iEntry.ReferenceKey) + "\" key=\"" + kStr + "\"");
|
OpenTag(sb, aind, "Item type=\"" + HashString((MetaName)iEntry.ReferenceKey) + "\" key=\"" + kStr + "\"");
|
||||||
WriteNode(sb, aind, cont, xBlockId, vOffset, XmlTagMode.None, (MetaName)iEntry.ReferenceKey);
|
WriteNode(sb, aind, cont, xBlockId, vOffset, XmlTagMode.None, (MetaName)iEntry.ReferenceKey);
|
||||||
CloseTag(sb, aind, "Item");
|
CloseTag(sb, aind, "Item");
|
||||||
@ -1363,17 +1377,13 @@ namespace CodeWalker.GameFiles
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var iOff = (int)iPtr.ItemOffset;
|
var iOff = (int)iPtr.ItemOffset;
|
||||||
if (iOff >= iBlock.Length)
|
|
||||||
{
|
|
||||||
iOff = iOff >> 8; //how to tell when to do this??
|
|
||||||
}
|
|
||||||
OpenTag(sb, aind, iStr);
|
OpenTag(sb, aind, iStr);
|
||||||
WriteNode(sb, aind, cont, iPtr.BlockID, iOff, XmlTagMode.None);//, (MetaName)entry.ReferenceKey);
|
WriteNode(sb, aind, cont, iPtr.BlockID, iOff, XmlTagMode.None);//, (MetaName)entry.ReferenceKey);
|
||||||
CloseTag(sb, aind, "Item");
|
CloseTag(sb, aind, "Item");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xOffset2 += xStruct.StructureLength;
|
xOffset += (uint)xStruct.StructureLength;
|
||||||
}
|
}
|
||||||
CloseTag(sb, xind, ename);
|
CloseTag(sb, xind, ename);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user