@@ -103,6 +103,7 @@ public async Task<XivMdl> GetMdlData(IItemModel itemModel, XivRace xivRace, XivM
103
103
var mdlData = await dat . GetType3Data ( offset , _dataFile ) ;
104
104
105
105
var xivMdl = new XivMdl { MdlPath = mdlPath } ;
106
+ int totalNonNullMaterials = 0 ;
106
107
107
108
using ( var br = new BinaryReader ( new MemoryStream ( mdlData . Data ) ) )
108
109
{
@@ -209,10 +210,18 @@ public async Task<XivMdl> GetMdlData(IItemModel itemModel, XivRace xivRace, XivM
209
210
}
210
211
211
212
var mat = Encoding . ASCII . GetString ( materialName . ToArray ( ) ) . Replace ( "\0 " , "" ) ;
212
-
213
- mdlPathData . MaterialList . Add ( mat ) ;
213
+ if ( mat . StartsWith ( "shp_" ) )
214
+ {
215
+ // Catch case for situation where there's null values at the end of the materials list.
216
+ mdlPathData . ShapeList . Add ( mat ) ;
217
+ } else
218
+ {
219
+ totalNonNullMaterials ++ ;
220
+ mdlPathData . MaterialList . Add ( mat ) ;
221
+ }
214
222
}
215
223
224
+
216
225
// Shape Paths
217
226
for ( var i = 0 ; i < mdlModelData . ShapeCount ; i ++ )
218
227
{
@@ -425,12 +434,26 @@ public async Task<XivMdl> GetMdlData(IItemModel itemModel, XivRace xivRace, XivM
425
434
426
435
lod . MeshDataList [ i ] . MeshInfo = meshDataInfo ;
427
436
437
+ // In the event we have a null material reference, set it to material 0 to be safe.
438
+ if ( meshDataInfo . MaterialIndex >= totalNonNullMaterials )
439
+ {
440
+ meshDataInfo . MaterialIndex = 0 ;
441
+ }
442
+
428
443
var materialString = xivMdl . PathData . MaterialList [ meshDataInfo . MaterialIndex ] ;
429
- var typeChar = materialString [ 4 ] . ToString ( ) + materialString [ 9 ] . ToString ( ) ;
444
+ // Try block to cover odd cases like Au Ra Male Face #92 where for some reason the
445
+ // Last LoD points to using a shp for a material for some reason.
446
+ try
447
+ {
448
+ var typeChar = materialString [ 4 ] . ToString ( ) + materialString [ 9 ] . ToString ( ) ;
430
449
431
- if ( typeChar . Equals ( "cb" ) )
450
+ if ( typeChar . Equals ( "cb" ) )
451
+ {
452
+ lod . MeshDataList [ i ] . IsBody = true ;
453
+ }
454
+ } catch ( Exception e )
432
455
{
433
- lod . MeshDataList [ i ] . IsBody = true ;
456
+
434
457
}
435
458
436
459
meshNum ++ ;
0 commit comments