private void ParseGun(ExportEntry classExport) { var uClass = ObjectBinary.From <UClass>(classExport); var defaults = classExport.FileRef.GetUExport(uClass.Defaults); var props = defaults.GetProperties(); var mesh = props.GetProp <ObjectProperty>("Mesh"); if (mesh?.ResolveToEntry(classExport.FileRef) is ExportEntry meshExp) { var meshProp = meshExp.GetProperty <ObjectProperty>("SkeletalMesh"); HasGunMesh = meshProp != null; } if (classExport.InheritsFrom("SFXHeavyWeapon")) { WeaponClassification = EWeaponClassification.HeavyWeapon; } else if (classExport.InheritsFrom("SFXWeapon_AssaultRifle")) { WeaponClassification = EWeaponClassification.AssaultRifle; } else if (classExport.InheritsFrom("SFXWeapon_HeavyPistol")) { WeaponClassification = EWeaponClassification.Pistol; } else if (classExport.InheritsFrom("SFXWeapon_AutoPistol")) { WeaponClassification = EWeaponClassification.SMG; } else if (classExport.InheritsFrom("SFXWeapon_Shotgun")) { WeaponClassification = EWeaponClassification.Shotgun; } else if (classExport.InheritsFrom("SFXWeapon_SniperRifle")) { WeaponClassification = EWeaponClassification.SniperRifle; } else { Debugger.Break(); } var hasShaderCache = classExport.FileRef.FindExport("SeekFreeShaderCache") != null; RequiresStartupPackage = hasShaderCache && !classExport.FileRef.FilePath.Contains("Startup", StringComparison.InvariantCultureIgnoreCase); ImportOnly = hasShaderCache; }