public object FindUserTxtr(string name) { if (txtrs == null) { this.LoadSkinImages(); } if (txtrs == null) { return(null); } name = name.ToLower(); SimPe.Plugin.Txtr txtr = (SimPe.Plugin.Txtr)txtrs[name]; if (txtr == null) { txtr = (SimPe.Plugin.Txtr)txtrs[name + "_txtr"]; } if (txtr == null) { return(null); } if (txtr.Fast) { txtr.Fast = false; SimPe.Packages.File fl = SimPe.Packages.File.LoadFromFile(txtr.Package.FileName); Interfaces.Files.IPackedFileDescriptor pfd = fl.FindFile(txtr.FileDescriptor.Type, txtr.FileDescriptor.SubType, txtr.FileDescriptor.Group, txtr.FileDescriptor.Instance); txtr.ProcessData(pfd, fl); //fl.Reader.Close(); } return(txtr); }
public object FindTxtr(string name) { if (name == null) { return(null); } string file = System.IO.Path.Combine(SimPe.PathProvider.Global[Expansions.BaseGame].InstallFolder, "TSData\\Res\\Sims3D\\Sims07.package"); if (System.IO.File.Exists(file)) { SimPe.Interfaces.Files.IPackageFile package = SimPe.Packages.File.LoadFromFile(file); Interfaces.Files.IPackedFileDescriptor[] pfds = package.FindFile(name, 0x1C4A276C); //look for the right one foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds) { SimPe.Plugin.Txtr rcol = new SimPe.Plugin.Txtr(null, false); rcol.ProcessData(pfd, package); if (rcol.FileName.Trim().ToLower() == name.Trim().ToLower()) { return(rcol); } } } return(null); }
/// <summary> /// Fix all links /// </summary> public string Fix(string family, uint group, ref int ct, Hashtable matdrep, Hashtable txtrrep, ArrayList guids) { //make sure the references are loaded txtr = TXTR; string groups = "#0x" + Helper.HexString(group) + "!"; groups = "##0x1c050000!"; MMAT.GetSaveItem("family").StringValue = family; string matdname = Hashes.StripHashFromName(MMAT.GetSaveItem("name").StringValue) + "_" + family; if (matdrep[MMAT.GetSaveItem("name").StringValue] == null) { matdrep.Add(MMAT.GetSaveItem("name").StringValue, groups + matdname); MMAT.GetSaveItem("name").StringValue = groups + matdname; } else { MMAT.GetSaveItem("name").StringValue = (string)matdrep[MMAT.GetSaveItem("name").StringValue]; } //make sure we use a supported GUID if (guids.Count > 0) { if (!guids.Contains(MMAT.GetSaveItem("objectGUID").UIntegerValue)) { MMAT.GetSaveItem("objectGUID").UIntegerValue = (uint)guids[0]; } } MMAT.GetSaveItem("defaultMaterial").BooleanValue = false; MMAT.FileDescriptor.Instance = (uint)(0x4000 + ct++); MMAT.FileDescriptor.Group = 0xffffffff; string txtrname = groups + "_" + family; string org = ""; if (MATD != null) { MaterialDefinition md = (MaterialDefinition)MATD.Blocks[0]; md.FileDescription = matdname; MATD.FileName = groups + matdname + "_txmt"; SimPe.Packages.PackedFileDescriptor matdpfd = new PackedFileDescriptor(); matdpfd.Type = MATD.FileDescriptor.Type; MATD.FileDescriptor = matdpfd; MATD.FileDescriptor.Group = 0x1c050000; //group; //0x1C0532FA; MATD.FileDescriptor.Instance = Hashes.InstanceHash(Hashes.StripHashFromName(MATD.FileName)); MATD.FileDescriptor.SubType = Hashes.SubTypeHash(Hashes.StripHashFromName(MATD.FileName)); org = TxtrRef; string realtxtrname = ""; //Hashes.StripHashFromName(md.GetProperty("stdMatBaseTextureName").Value); if (TXTR != null) { realtxtrname = Hashes.StripHashFromName(TXTR.FileName); if (realtxtrname.Length > 5) { realtxtrname = realtxtrname.Substring(0, realtxtrname.Length - 5); } } //we foudn a texture if (realtxtrname.Trim() != "") { txtrname = realtxtrname + "_" + family; if (txtrrep[realtxtrname] == null) { txtrrep.Add(realtxtrname, txtrname); txtrrep.Add(txtrname, txtrname); } else { txtrname = (string)txtrrep[realtxtrname]; } md.GetProperty("stdMatBaseTextureName").Value = /*groups +*/ Hashes.StripHashFromName(txtrname); string[] files = new string[1]; files[0] = /*groups +*/ Hashes.StripHashFromName(txtrname); md.Listing = files; } } if (TXTR != null) { TXTR.FileName = groups + txtrname + "_txtr"; SimPe.Packages.PackedFileDescriptor txtrpfd = new PackedFileDescriptor(); txtrpfd.Type = TXTR.FileDescriptor.Type; TXTR.FileDescriptor = txtrpfd; TXTR.FileDescriptor.Group = 0x1c050000; //group; //0x1C0532FA; TXTR.FileDescriptor.Instance = Hashes.InstanceHash(Hashes.StripHashFromName(TXTR.FileName)); TXTR.FileDescriptor.SubType = Hashes.SubTypeHash(Hashes.StripHashFromName(TXTR.FileName)); } return(org); }
protected void LoadSkinImageFormPackage(SimPe.Interfaces.Files.IPackageFile package) { Interfaces.Files.IPackedFileDescriptor[] pfds = package.FindFiles(0xAC506764); foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds) { try { SimPe.Plugin.RefFile reffile = new SimPe.Plugin.RefFile(); reffile.ProcessData(pfd, package); refs.Add(reffile); } catch (Exception) {} } pfds = package.FindFiles(0x49596978); foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds) { try { SimPe.Plugin.Rcol matd = new SimPe.Plugin.GenericRcol(null, true); matd.ProcessData(pfd, package); matds.Add(matd); } catch (Exception) {} } //Material Files Interfaces.Files.IPackedFileDescriptor[] nmap_pfd = package.FindFiles(Data.MetaData.NAME_MAP); pfds = package.FindFiles(0x49596978); Plugin.Nmap nmap = new SimPe.Plugin.Nmap(null); if (nmap_pfd.Length > 0) { nmap.ProcessData(nmap_pfd[0], package); } bool check = false; foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds) { try { SimPe.Plugin.Rcol matd = new SimPe.Plugin.GenericRcol(null, true); check = false; foreach (Interfaces.Files.IPackedFileDescriptor epfd in nmap.Items) { if ( (epfd.Group == pfd.Group) && (epfd.Instance == pfd.Instance) ) { matd.FileDescriptor = pfd; matd.Package = package; matds.Add(matd); check = true; } } //not found in the FileMap, so process Normally if (!check) { matd.ProcessData(pfd, package); matds.Add(matd); } } catch (Exception) {} } //Texture Files nmap_pfd = package.FindFiles(Data.MetaData.NAME_MAP); pfds = package.FindFiles(0x1C4A276C); check = false; foreach (Interfaces.Files.IPackedFileDescriptor pfd in pfds) { try { SimPe.Plugin.Txtr txtr = new SimPe.Plugin.Txtr(null, true); check = false; foreach (Interfaces.Files.IPackedFileDescriptor epfd in nmap.Items) { if ( (epfd.Group == pfd.Group) && (epfd.Instance == pfd.Instance) ) { txtr.FileDescriptor = pfd; txtr.Package = package; txtrs.Add(epfd.Filename, txtr); continue; } } //not found in the FileMap, so process Normally if (!check) { txtr.ProcessData(pfd, package); foreach (SimPe.Plugin.ImageData id in txtr.Blocks) { txtrs.Add(id.NameResource.FileName.ToLower(), txtr); } } } catch (Exception) {} } }