Exemple #1
0
        private static void AddValue(string val, string lbl, KNAPackage knap)
        {
            ulong hash = FNVHash.HashString32(val);

            if (knap.Names.ContainsKey(hash))
            {
                knap.Labels[hash] = "";
            }
            else
            {
                knap.Names[hash] = val;
                if (lbl != null)
                {
                    knap.Labels[hash] = lbl;
                }
            }
            hash = FNVHash.HashString64(val);
            if (knap.Names.ContainsKey(hash))
            {
                knap.Labels[hash] = "";
            }
            else
            {
                knap.Names[hash] = val;
                if (lbl != null)
                {
                    knap.Labels[hash] = lbl;
                }
            }
        }
Exemple #2
0
        private KeyNameS3SA(List <PathPackageTuple> ppts)
        {
            if (ppts == null)
            {
                this.mKNAPackages = null;
                return;
            }
            long len;

            byte[]     data;
            IResource  res;
            KNAPackage knap;
            Assembly   asm;

            ScriptResource.ScriptResource s3sa;
            List <IResourceIndexEntry>    rieList;
            List <KNAPackage>             knaps = new List <KNAPackage>();

            foreach (PathPackageTuple ppt in ppts)
            {
                if (ppt != null && ppt.Package != null)
                {
                    rieList = ppt.Package.FindAll(sIsS3SA);
                    if (rieList != null && rieList.Count > 0)
                    {
                        knap = new KNAPackage(ppt.Path);
                        foreach (IResourceIndexEntry rie in rieList)
                        {
                            res = null;
                            try
                            {
                                res = WrapperDealer.GetResource(
                                    0, ppt.Package, rie);
                            }
                            catch { }
                            if (res != null)
                            {
                                s3sa = res as ScriptResource.ScriptResource;
                                if (s3sa != null)
                                {
                                    len  = s3sa.Assembly.BaseStream.Length;
                                    data = new byte[len];
                                    s3sa.Assembly.BaseStream.Read(
                                        data, 0, (int)len);
                                    asm = Assembly.ReflectionOnlyLoad(data);
                                    if (asm != null)
                                    {
                                        ScanNames(asm, knap);
                                    }
                                }
                            }
                        }
                        if (knap.Names.Count > 0)
                        {
                            knaps.Add(knap);
                        }
                    }
                }
            }
            if (knaps.Count == 0)
            {
                this.mKNAPackages = null;
            }
            else
            {
                this.mKNAPackages = knaps.ToArray();
            }
        }
Exemple #3
0
        private static void ScanNames(Assembly asm, KNAPackage knap)
        {
            int    v;
            uint   uv;
            object value;
            string fName, vs;
            bool   interesting;

            Type[] types = null;
            try
            {
                types = asm.GetTypes();
            }
            catch (ReflectionTypeLoadException rtle)
            {
                types = rtle.Types;
            }
            catch (Exception)
            {
            }
            if (types != null)
            {
                foreach (Type t in types)
                {
                    if (t != null &&
                        !t.IsGenericType && !t.Name.StartsWith("<"))
                    {
                        if (t.IsEnum)
                        {
                            interesting = false;
                            switch (t.Namespace)
                            {
                            case "Sims3.SimIFace.SACS":
                            case "Sims3.SimIFace":
                                interesting = true;
                                break;
                            }
                            foreach (FieldInfo finfo in t.GetFields())
                            {
                                if (finfo.IsLiteral)
                                {
                                    if (interesting)
                                    {
                                        value = finfo.GetRawConstantValue();
                                        fName = string.Concat(
                                            t.FullName, ".", finfo.Name);
                                        if (value is int)
                                        {
                                            knap.EnumValues[fName]
                                                = (uint)((int)value);
                                        }
                                        else if (value is uint)
                                        {
                                            knap.EnumValues[fName]
                                                = (uint)value;
                                        }
                                        else
                                        {
                                            vs = value.ToString();
                                            if (uint.TryParse(vs, out uv))
                                            {
                                                knap.EnumValues[fName] = uv;
                                            }
                                            else if (int.TryParse(vs, out v))
                                            {
                                                uv = (uint)v;
                                                knap.EnumValues[fName] = uv;
                                            }
                                        }
                                    }
                                    AddValue(finfo.Name, t.FullName, knap);
                                }
                            }
                        }
                        AddValue(t.Name, t.FullName, knap);
                    }
                }
            }
        }
 private static void ScanNames(Assembly asm, KNAPackage knap)
 {
     int v;
     uint uv;
     object value;
     string fName, vs;
     bool interesting;
     Type[] types = null;
     try
     {
         types = asm.GetTypes();
     }
     catch (ReflectionTypeLoadException rtle)
     {
         types = rtle.Types;
     }
     catch (Exception)
     {
     }
     if (types != null)
     {
         foreach (Type t in types)
         {
             if (t != null &&
                 !t.IsGenericType && !t.Name.StartsWith("<"))
             {
                 if (t.IsEnum)
                 {
                     interesting = false;
                     switch (t.Namespace)
                     {
                         case "Sims3.SimIFace.SACS":
                         case "Sims3.SimIFace":
                             interesting = true;
                             break;
                     }
                     foreach (FieldInfo finfo in t.GetFields())
                     {
                         if (finfo.IsLiteral)
                         {
                             if (interesting)
                             {
                                 value = finfo.GetRawConstantValue();
                                 fName = string.Concat(
                                     t.FullName, ".", finfo.Name);
                                 if (value is int)
                                 {
                                     knap.EnumValues[fName]
                                         = (uint)((int)value);
                                 }
                                 else if (value is uint)
                                 {
                                     knap.EnumValues[fName]
                                         = (uint)value;
                                 }
                                 else
                                 {
                                     vs = value.ToString();
                                     if (uint.TryParse(vs, out uv))
                                     {
                                         knap.EnumValues[fName] = uv;
                                     }
                                     else if (int.TryParse(vs, out v))
                                     {
                                         uv = (uint)v;
                                         knap.EnumValues[fName] = uv;
                                     }
                                 }
                             }
                             AddValue(finfo.Name, t.FullName, knap);
                         }
                     }
                 }
                 AddValue(t.Name, t.FullName, knap);
             }
         }
     }
 }
 private KeyNameS3SA(List<PathPackageTuple> ppts)
 {
     if (ppts == null)
     {
         this.mKNAPackages = null;
         return;
     }
     long len;
     byte[] data;
     IResource res;
     KNAPackage knap;
     Assembly asm;
     ScriptResource.ScriptResource s3sa;
     List<IResourceIndexEntry> rieList;
     List<KNAPackage> knaps = new List<KNAPackage>();
     foreach (PathPackageTuple ppt in ppts)
     {
         if (ppt != null && ppt.Package != null)
         {
             rieList = ppt.Package.FindAll(sIsS3SA);
             if (rieList != null && rieList.Count > 0)
             {
                 knap = new KNAPackage(ppt.Path);
                 foreach (IResourceIndexEntry rie in rieList)
                 {
                     res = null;
                     try
                     {
                         res = WrapperDealer.GetResource(
                             0, ppt.Package, rie);
                     }
                     catch { }
                     if (res != null)
                     {
                         s3sa = res as ScriptResource.ScriptResource;
                         if (s3sa != null)
                         {
                             len = s3sa.Assembly.BaseStream.Length;
                             data = new byte[len];
                             s3sa.Assembly.BaseStream.Read(
                                 data, 0, (int)len);
                             asm = Assembly.ReflectionOnlyLoad(data);
                             if (asm != null)
                             {
                                 ScanNames(asm, knap);
                             }
                         }
                     }
                 }
                 if (knap.Names.Count > 0)
                 {
                     knaps.Add(knap);
                 }
             }
         }
     }
     if (knaps.Count == 0)
     {
         this.mKNAPackages = null;
     }
     else
     {
         this.mKNAPackages = knaps.ToArray();
     }
 }
 private static void AddValue(string val, string lbl, KNAPackage knap)
 {
     ulong hash = FNVHash.HashString32(val);
     if (knap.Names.ContainsKey(hash))
     {
         knap.Labels[hash] = "";
     }
     else
     {
         knap.Names[hash] = val;
         if (lbl != null)
         {
             knap.Labels[hash] = lbl;
         }
     }
     hash = FNVHash.HashString64(val);
     if (knap.Names.ContainsKey(hash))
     {
         knap.Labels[hash] = "";
     }
     else
     {
         knap.Names[hash] = val;
         if (lbl != null)
         {
             knap.Labels[hash] = lbl;
         }
     }
 }