v1.36.00
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
|
||||
<Version>1.00.00</Version>
|
||||
<AssemblyVersion>1.00.00</AssemblyVersion>
|
||||
<FileVersion>1.00.00</FileVersion>
|
||||
<TargetFrameworks>net7.0;net8.0</TargetFrameworks>
|
||||
<Version>1.36.00</Version>
|
||||
<AssemblyVersion>1.36.00</AssemblyVersion>
|
||||
<FileVersion>1.36.00</FileVersion>
|
||||
<Copyright>Copyright © Razmoth 2022; Copyright © Perfare 2018-2022</Copyright>
|
||||
<DebugType>embedded</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -361,12 +361,12 @@ namespace AssetStudio
|
||||
Container = ""
|
||||
};
|
||||
|
||||
var exportable = true;
|
||||
var exportable = false;
|
||||
try
|
||||
{
|
||||
switch (objectReader.type)
|
||||
{
|
||||
case ClassIDType.AssetBundle:
|
||||
case ClassIDType.AssetBundle when ClassIDType.AssetBundle.CanParse():
|
||||
var assetBundle = new AssetBundle(objectReader);
|
||||
foreach (var m_Container in assetBundle.m_Container)
|
||||
{
|
||||
@@ -378,33 +378,38 @@ namespace AssetStudio
|
||||
containers.Add((assetBundle.m_PreloadTable[k], m_Container.Key));
|
||||
}
|
||||
}
|
||||
|
||||
obj = null;
|
||||
asset.Name = assetBundle.m_Name;
|
||||
exportable = !Minimal;
|
||||
exportable = ClassIDType.AssetBundle.CanExport();
|
||||
break;
|
||||
case ClassIDType.GameObject:
|
||||
case ClassIDType.GameObject when ClassIDType.GameObject.CanParse():
|
||||
var gameObject = new GameObject(objectReader);
|
||||
obj = gameObject;
|
||||
asset.Name = gameObject.m_Name;
|
||||
exportable = !Minimal;
|
||||
exportable = ClassIDType.GameObject.CanExport();
|
||||
break;
|
||||
case ClassIDType.Shader:
|
||||
case ClassIDType.Shader when ClassIDType.Shader.CanParse():
|
||||
asset.Name = objectReader.ReadAlignedString();
|
||||
if (string.IsNullOrEmpty(asset.Name))
|
||||
{
|
||||
var m_parsedForm = new SerializedShader(objectReader);
|
||||
asset.Name = m_parsedForm.m_Name;
|
||||
}
|
||||
|
||||
exportable = ClassIDType.Shader.CanExport();
|
||||
break;
|
||||
case ClassIDType.Animator:
|
||||
case ClassIDType.Animator when ClassIDType.Animator.CanParse():
|
||||
var component = new PPtr<Object>(objectReader);
|
||||
animators.Add((component, asset));
|
||||
exportable = ClassIDType.Animator.CanExport();
|
||||
break;
|
||||
case ClassIDType.MiHoYoBinData:
|
||||
case ClassIDType.MiHoYoBinData when ClassIDType.MiHoYoBinData.CanParse():
|
||||
var MiHoYoBinData = new MiHoYoBinData(objectReader);
|
||||
obj = MiHoYoBinData;
|
||||
exportable = ClassIDType.MiHoYoBinData.CanExport();
|
||||
break;
|
||||
case ClassIDType.IndexObject:
|
||||
case ClassIDType.IndexObject when ClassIDType.IndexObject.CanParse():
|
||||
var indexObject = new IndexObject(objectReader);
|
||||
obj = null;
|
||||
foreach (var index in indexObject.AssetMap)
|
||||
@@ -412,19 +417,20 @@ namespace AssetStudio
|
||||
mihoyoBinDataNames.Add((index.Value.Object, index.Key));
|
||||
}
|
||||
asset.Name = "IndexObject";
|
||||
exportable = !Minimal;
|
||||
exportable = ClassIDType.IndexObject.CanExport();
|
||||
break;
|
||||
case ClassIDType.Font:
|
||||
case ClassIDType.Material:
|
||||
case ClassIDType.Texture:
|
||||
case ClassIDType.Mesh:
|
||||
case ClassIDType.Sprite:
|
||||
case ClassIDType.TextAsset:
|
||||
case ClassIDType.Texture2D:
|
||||
case ClassIDType.VideoClip:
|
||||
case ClassIDType.AudioClip:
|
||||
case ClassIDType.AnimationClip:
|
||||
case ClassIDType.Font when ClassIDType.Font.CanExport():
|
||||
case ClassIDType.Material when ClassIDType.Material.CanExport():
|
||||
case ClassIDType.Texture when ClassIDType.Texture.CanExport():
|
||||
case ClassIDType.Mesh when ClassIDType.Mesh.CanExport():
|
||||
case ClassIDType.Sprite when ClassIDType.Sprite.CanExport():
|
||||
case ClassIDType.TextAsset when ClassIDType.TextAsset.CanExport():
|
||||
case ClassIDType.Texture2D when ClassIDType.Texture2D.CanExport():
|
||||
case ClassIDType.VideoClip when ClassIDType.VideoClip.CanExport():
|
||||
case ClassIDType.AudioClip when ClassIDType.AudioClip.CanExport():
|
||||
case ClassIDType.AnimationClip when ClassIDType.AnimationClip.CanExport():
|
||||
asset.Name = objectReader.ReadAlignedString();
|
||||
exportable = true;
|
||||
break;
|
||||
default:
|
||||
asset.Name = objectReader.type.ToString();
|
||||
|
||||
@@ -646,36 +646,36 @@ namespace AssetStudio
|
||||
{
|
||||
Object obj = objectReader.type switch
|
||||
{
|
||||
ClassIDType.Animation => new Animation(objectReader),
|
||||
ClassIDType.AnimationClip => new AnimationClip(objectReader),
|
||||
ClassIDType.Animator => new Animator(objectReader),
|
||||
ClassIDType.AnimatorController => new AnimatorController(objectReader),
|
||||
ClassIDType.AnimatorOverrideController => new AnimatorOverrideController(objectReader),
|
||||
ClassIDType.AssetBundle => new AssetBundle(objectReader),
|
||||
ClassIDType.AudioClip => new AudioClip(objectReader),
|
||||
ClassIDType.Avatar => new Avatar(objectReader),
|
||||
ClassIDType.Font => new Font(objectReader),
|
||||
ClassIDType.GameObject => new GameObject(objectReader),
|
||||
ClassIDType.IndexObject => new IndexObject(objectReader),
|
||||
ClassIDType.Material => new Material(objectReader),
|
||||
ClassIDType.Mesh => new Mesh(objectReader),
|
||||
ClassIDType.MeshFilter => new MeshFilter(objectReader),
|
||||
ClassIDType.MeshRenderer => new MeshRenderer(objectReader),
|
||||
ClassIDType.MiHoYoBinData => new MiHoYoBinData(objectReader),
|
||||
ClassIDType.MonoBehaviour => new MonoBehaviour(objectReader),
|
||||
ClassIDType.MonoScript => new MonoScript(objectReader),
|
||||
ClassIDType.MovieTexture => new MovieTexture(objectReader),
|
||||
ClassIDType.PlayerSettings => new PlayerSettings(objectReader),
|
||||
ClassIDType.RectTransform => new RectTransform(objectReader),
|
||||
ClassIDType.Shader => new Shader(objectReader),
|
||||
ClassIDType.SkinnedMeshRenderer => new SkinnedMeshRenderer(objectReader),
|
||||
ClassIDType.Sprite => new Sprite(objectReader),
|
||||
ClassIDType.SpriteAtlas => new SpriteAtlas(objectReader),
|
||||
ClassIDType.TextAsset => new TextAsset(objectReader),
|
||||
ClassIDType.Texture2D => new Texture2D(objectReader),
|
||||
ClassIDType.Transform => new Transform(objectReader),
|
||||
ClassIDType.VideoClip => new VideoClip(objectReader),
|
||||
ClassIDType.ResourceManager => new ResourceManager(objectReader),
|
||||
ClassIDType.Animation when ClassIDType.Animation.CanParse() => new Animation(objectReader),
|
||||
ClassIDType.AnimationClip when ClassIDType.AnimationClip.CanParse() => new AnimationClip(objectReader),
|
||||
ClassIDType.Animator when ClassIDType.Animator.CanParse() => new Animator(objectReader),
|
||||
ClassIDType.AnimatorController when ClassIDType.AnimatorController.CanParse() => new AnimatorController(objectReader),
|
||||
ClassIDType.AnimatorOverrideController when ClassIDType.AnimatorOverrideController.CanParse() => new AnimatorOverrideController(objectReader),
|
||||
ClassIDType.AssetBundle when ClassIDType.AssetBundle.CanParse() => new AssetBundle(objectReader),
|
||||
ClassIDType.AudioClip when ClassIDType.AudioClip.CanParse() => new AudioClip(objectReader),
|
||||
ClassIDType.Avatar when ClassIDType.Avatar.CanParse() => new Avatar(objectReader),
|
||||
ClassIDType.Font when ClassIDType.Font.CanParse() => new Font(objectReader),
|
||||
ClassIDType.GameObject when ClassIDType.GameObject.CanParse() => new GameObject(objectReader),
|
||||
ClassIDType.IndexObject when ClassIDType.IndexObject.CanParse() => new IndexObject(objectReader),
|
||||
ClassIDType.Material when ClassIDType.Material.CanParse() => new Material(objectReader),
|
||||
ClassIDType.Mesh when ClassIDType.Mesh.CanParse() => new Mesh(objectReader),
|
||||
ClassIDType.MeshFilter when ClassIDType.MeshFilter.CanParse() => new MeshFilter(objectReader),
|
||||
ClassIDType.MeshRenderer when ClassIDType.MeshRenderer.CanParse() => new MeshRenderer(objectReader),
|
||||
ClassIDType.MiHoYoBinData when ClassIDType.MiHoYoBinData.CanParse() => new MiHoYoBinData(objectReader),
|
||||
ClassIDType.MonoBehaviour when ClassIDType.MonoBehaviour.CanParse() => new MonoBehaviour(objectReader),
|
||||
ClassIDType.MonoScript when ClassIDType.MonoScript.CanParse() => new MonoScript(objectReader),
|
||||
ClassIDType.MovieTexture when ClassIDType.MovieTexture.CanParse() => new MovieTexture(objectReader),
|
||||
ClassIDType.PlayerSettings when ClassIDType.PlayerSettings.CanParse() => new PlayerSettings(objectReader),
|
||||
ClassIDType.RectTransform when ClassIDType.RectTransform.CanParse() => new RectTransform(objectReader),
|
||||
ClassIDType.Shader when ClassIDType.Shader.CanParse() => new Shader(objectReader),
|
||||
ClassIDType.SkinnedMeshRenderer when ClassIDType.SkinnedMeshRenderer.CanParse() => new SkinnedMeshRenderer(objectReader),
|
||||
ClassIDType.Sprite when ClassIDType.Sprite.CanParse() => new Sprite(objectReader),
|
||||
ClassIDType.SpriteAtlas when ClassIDType.SpriteAtlas.CanParse() => new SpriteAtlas(objectReader),
|
||||
ClassIDType.TextAsset when ClassIDType.TextAsset.CanParse() => new TextAsset(objectReader),
|
||||
ClassIDType.Texture2D when ClassIDType.Texture2D.CanParse() => new Texture2D(objectReader),
|
||||
ClassIDType.Transform when ClassIDType.Transform.CanParse() => new Transform(objectReader),
|
||||
ClassIDType.VideoClip when ClassIDType.VideoClip.CanParse() => new VideoClip(objectReader),
|
||||
ClassIDType.ResourceManager when ClassIDType.ResourceManager.CanParse() => new ResourceManager(objectReader),
|
||||
_ => new Object(objectReader),
|
||||
};
|
||||
assetsFile.AddObject(obj);
|
||||
|
||||
46
AssetStudio/TypeFlags.cs
Normal file
46
AssetStudio/TypeFlags.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AssetStudio;
|
||||
public static class TypeFlags
|
||||
{
|
||||
private static Dictionary<ClassIDType, (bool, bool)> Types;
|
||||
|
||||
public static void SetTypes(Dictionary<ClassIDType, (bool, bool)> types)
|
||||
{
|
||||
Types = types;
|
||||
}
|
||||
|
||||
public static void SetType(ClassIDType type, bool parse, bool export)
|
||||
{
|
||||
Types ??= new Dictionary<ClassIDType, (bool, bool)>();
|
||||
Types[type] = (parse, export);
|
||||
}
|
||||
|
||||
public static bool CanParse(this ClassIDType type)
|
||||
{
|
||||
if (Types == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (Types.TryGetValue(type, out var param))
|
||||
{
|
||||
return param.Item1;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool CanExport(this ClassIDType type)
|
||||
{
|
||||
if (Types == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (Types.TryGetValue(type, out var param))
|
||||
{
|
||||
return param.Item2;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user