@@ -847,6 +847,47 @@ await Task.Run(async () =>
847
847
return ( meshCount , materialCount , byteList . ToArray ( ) ) ;
848
848
}
849
849
850
+ public async Task < uint > GetReportedType4UncompressedSize ( XivDataFile df , long offsetWithDatNumber )
851
+ {
852
+ // This formula is used to obtain the dat number in which the offset is located
853
+ var datNum = ( int ) ( ( offsetWithDatNumber / 8 ) & 0x0F ) / 2 ;
854
+
855
+ var offset = OffsetCorrection ( datNum , offsetWithDatNumber ) ;
856
+
857
+ var datPath = Path . Combine ( _gameDirectory . FullName , $ "{ df . GetDataFileName ( ) } { DatExtension } { datNum } ") ;
858
+
859
+ return await Task . Run ( async ( ) =>
860
+ {
861
+ using ( var br = new BinaryReader ( File . OpenRead ( datPath ) ) )
862
+ {
863
+ br . BaseStream . Seek ( offset + 8 , SeekOrigin . Begin ) ;
864
+
865
+ var size = br . ReadUInt32 ( ) ;
866
+ return size ;
867
+ }
868
+ } ) ;
869
+ }
870
+
871
+ public async Task UpdateType4UncompressedSize ( XivDataFile df , long offsetWithDatNumber , uint correctedFileSize )
872
+ {
873
+ // This formula is used to obtain the dat number in which the offset is located
874
+ var datNum = ( int ) ( ( offsetWithDatNumber / 8 ) & 0x0F ) / 2 ;
875
+
876
+ var offset = OffsetCorrection ( datNum , offsetWithDatNumber ) ;
877
+
878
+ var datPath = Path . Combine ( _gameDirectory . FullName , $ "{ df . GetDataFileName ( ) } { DatExtension } { datNum } ") ;
879
+
880
+ await Task . Run ( async ( ) =>
881
+ {
882
+ using ( var br = new BinaryWriter ( File . OpenWrite ( datPath ) ) )
883
+ {
884
+ br . BaseStream . Seek ( offset + 8 , SeekOrigin . Begin ) ;
885
+ br . Write ( correctedFileSize ) ;
886
+ }
887
+ } ) ;
888
+ }
889
+
890
+
850
891
/// <summary>
851
892
/// Gets the original or modded data for type 4 files based on the path specified.
852
893
/// </summary>
0 commit comments