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; } } }
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 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(); } }