示例#1
0
 private void InitShapeInfoBase(Transform trfObj, Dictionary <string, int> dictEnumDst, Dictionary <string, int> dictEnumSrc)
 {
     anmKeyInfo.LoadInfo("cf_anmShapeHead1");
     LoadCategoryInfoList(dictEnumSrc);
     GetDstBoneInfo(trfObj, dictEnumDst);
     GetSrcBoneInfo();
 }
示例#2
0
    public static void dumpassets()
    {
        print("Dumping all text serializable assets");
        var dumpdir   = Dir.mod + "!base/";
        var mainass   = AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "Assembly-CSharp");
        var dumpables = mainass.GetExportedTypes().Where(t => typeof(IDumpable).IsAssignableFrom(t));
        var basedir   = Dir.abdata;

        print($"Found {dumpables.Count()} types.");
        LoadedAssetBundle.GCBundles();
        foreach (var bpath in Directory.GetFiles(Dir.abdata + subdir, "*.unity3d", SearchOption.AllDirectories))
        {
            var bundle = bpath.Replace("\\", "/");
            var abname = bundle.Substring(Dir.abdata.Length);
            if (abname.Contains("--"))
            {
                continue;
            }
            var lab = AssetBundle.LoadFromFile(bundle);
            if (lab == null)
            {
                continue;
            }
            foreach (var longname in lab.GetAllAssetNames())
            {
                var    dir   = bundle.Remove(bundle.LastIndexOf('.')).Substring(Dir.abdata.Length);
                byte[] bytes = null;
                var    name  = Path.GetFileName(longname).ToLower();
                var    bname = Path.GetFileNameWithoutExtension(name);
                string ext   = name.Substring(bname.Length).ToLower();
                if (ext != ".asset" && ext != ".txt" && ext != ".bytes" && ext != "")
                {
                    //print("skip");
                    continue;
                }
                var ass = lab.LoadAsset(bname);
                if (ass == null)
                {
                    print("Failed to load ", ass);
                    continue;
                }
                var ta = ass as UnityEngine.TextAsset;
                var da = ass as IDumpable;
                //print(ass.GetType());
                if (ta != null)
                {
                    if (bname.StartsWith("cf_anmshape"))
                    {
                        print(name);
                        var si = new AnimationKeyInfo();
                        si.LoadInfo(new MemoryStream(ta.bytes));
                        bytes = si.Marshal().ToBytes();
                        ext   = ".csv";
                    }
                    else
                    if (abname.Contains("list/characustom/"))
                    {
                        var chd = MessagePackSerializer.Deserialize <ChaListData>(ta.bytes);
                        bytes = chd.Marshal().ToBytes();
                        bname = chd.categoryNo + "_" + bname;
                        var disa = $"{chd.distributionNo:00}";
                        var disb = Path.GetFileName(dir);
                        dir = dir.Remove(dir.LastIndexOf('/') + 1) + disa + ((disa != disb)?("_" + disb):"");
                        ext = ".csv";
                    }
                    else
                    if (name.ToLower().EndsWith(".txt"))
                    {
                        bytes = ta.text.StripBOM().ToBytes();
                        ext   = ".lst";
                    }
                    else
                    {
                        var test = ta.text.Replace("\r", "").Split('\n');
                        if (test.Length > 2 && (test[0].Split('\t').Length == test[1].Split('\t').Length) && test[0].Split('\t').Length >= 2)
                        {
                            bytes = ta.text.StripBOM().ToBytes();
                            ext   = ".lst";
                        }
                        else
                        {
                            if (abname.Contains("h/list") && bname.StartsWith("kh") && ext == ".bytes")
                            {
                                var ikd = new MotionIKData();
                                ikd.Read(new MemoryStream(ta.bytes));
                                bytes = ikd.Marshal().ToBytes();
                                ext   = "." + ikd.GetFileExt();
                            }
                            else
                            {
                                print("Uknown " + bname);
                            }
                        }
                    }
                }
                else if (ass is IDumpable)
                {
                    ext = "." + da.GetFileExt();
                    try {
                        bytes = da.Marshal().ToBytes();
                    } catch (Exception ex)
                    {
                        print("Something went wrong");
                        print(bpath);
                        print(bname);
                        print(ex);
                    }
                }

                if (bytes != null)
                {
                    var ddir = dumpdir + dir;
                    Directory.CreateDirectory(ddir);
                    var dst = ddir + "/" + bname + ext;
                    File.WriteAllBytes(dst, bytes);
                    //print("Dumping " + dst.Substring(Dir.root.Length) + " of type " + ass.GetType().Name);
                }
            }
            lab.Unload(true);
        }
    }