private void button1_Click(object sender, EventArgs e) { TextReader r = new StreamReader(@"P:\Stuart\Desktop\fullPatternList.xml"); XmlSerializer s = new XmlSerializer(typeof(files)); files lookupList = (files)s.Deserialize(r); r.Close(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < lookupList.Items.Count; i++) { Stream mem = File.OpenRead(@"P:\Stuart\Desktop\FullBuild0\config\xml\root\" + lookupList.Items[i].fullCasPartname + ".xml"); Patterns.patternDetails pDetails = Patterns.parsePatternComplate(mem); if (String.IsNullOrEmpty(pDetails.category)) continue; patternsFile cPattern = new patternsFile(); MadScience.Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey("key:" + lookupList.Items[i].typeid.Remove(0, 2) + ":" + lookupList.Items[i].groupid.Remove(0, 2) + ":" + lookupList.Items[i].instanceid.Remove(0,2)); cPattern.key = rKey.ToString(); if (!StreamHelpers.isValidStream(KeyUtils.findKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16")))) { cPattern.texturename = pDetails.BackgroundImage; } else { cPattern.texturename = "key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16"); } cPattern.casPart = pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1); switch (pDetails.category) { case "Old": break; default: //string fullName = pDetails.Substring(patternTexture.LastIndexOf("\\") + 1); string category = pDetails.filename; category = category.Replace(@"($assetRoot)\InGame\Complates\", ""); category = category.Replace(@"Materials\", ""); category = category.Replace(@".tga", ""); category = category.Replace(@".dds", ""); if (category.IndexOf("\\") > -1) { category = category.Substring(0, category.IndexOf("\\")); } else { category = pDetails.category; } string subCategory = pDetails.filename; subCategory = subCategory.Replace(@"($assetRoot)\InGame\Complates\", ""); subCategory = subCategory.Replace(@"Materials\", ""); subCategory = subCategory.Replace(@".tga", ""); subCategory = subCategory.Replace(@".dds", ""); if (subCategory.IndexOf("\\") > -1) { subCategory = subCategory.Substring(subCategory.IndexOf("\\") + 1); } if (subCategory.Contains("\\")) { subCategory = subCategory.Remove(subCategory.IndexOf("\\")); } else { subCategory = ""; } if (subCategory == pDetails.name) subCategory = ""; cPattern.category = category; cPattern.subcategory = subCategory; Console.WriteLine(pDetails.name + " " + category + " " + subCategory); sb.AppendLine("<pattern key=\"" + cPattern.key + "\" texturename=\"\" category=\"" + category + "\" subcategory=\"" + subCategory + "\">" + pDetails.name + "</file>"); break; } //xtr.Close(); mem.Close(); } Clipboard.SetText(sb.ToString()); Console.WriteLine("Done"); }
private void pictureBox_Click(object sender, EventArgs e) { for (int i = 0; i < panel1.Controls.Count; i++) { PictureBox temp2 = (PictureBox)panel1.Controls[i]; temp2.BorderStyle = BorderStyle.None; } PictureBox temp = (PictureBox)sender; toolStripStatusLabel1.Text = temp.Name; temp.BorderStyle = BorderStyle.Fixed3D; if (comboBox1.Text == "* Custom") { for (int i = 0; i < this.customPatterns.Items.Count; i++) { patternsFile pattern = this.customPatterns.Items[i]; if (pattern.casPart == temp.Name) { toolStripStatusLabel2.Text = pattern.category; if (pattern.subcategory != "" && pattern.subcategory != null && pattern.isCustom == false) { toolStripStatusLabel2.Text += "\\" + pattern.subcategory; } toolStripStatusLabel3.Text = pattern.key; //toolStripStatusLabel4.Text = "key:" + pattern.typeid.ToLower() + ":" + pattern.groupid.ToLower() + ":" + pattern.instanceid.ToLower(); this._selectedPattern = pattern; button2.Enabled = true; break; } } } else { for (int i = 0; i < this.patterns.Items.Count; i++) { patternsFile pattern = this.patterns.Items[i]; if (pattern.casPart == temp.Name) { toolStripStatusLabel2.Text = pattern.category; if (pattern.subcategory != "") { toolStripStatusLabel2.Text += "\\" + pattern.subcategory; } toolStripStatusLabel3.Text = pattern.key; //toolStripStatusLabel4.Text = "key:" + pattern.typeid.ToLower() + ":" + pattern.groupid.ToLower() + ":" + pattern.instanceid.ToLower(); this._selectedPattern = pattern; button2.Enabled = true; break; } } } }
private void btnLoadCustom_Click(object sender, EventArgs e) { openFileDialog1.Filter = "Sims 3 Package|*.package"; if (openFileDialog1.ShowDialog() == DialogResult.OK && openFileDialog1.FileName != "") { Stream cast = File.Open(openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.Read); MadScience.Wrappers.Database castdb = new MadScience.Wrappers.Database(cast, true); // Open XML file //patternsFile cPattern = new patternsFile(); Patterns.patternDetails pDetails = new Patterns.patternDetails(); foreach (MadScience.Wrappers.ResourceKey key in castdb._Entries.Keys) { if ((key.groupId == 0x00000000) && (key.typeId == 0x0333406C)) { pDetails = Patterns.parsePatternComplate(castdb.GetResourceStream(key)); patternsFile cPattern = new patternsFile(); //MadScience.Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey(pDetails.key); //cPattern.typeid = rKey.typeId.ToString("X8"); //cPattern.groupid = rKey.groupId.ToString("X8"); //cPattern.instanceid = rKey.instanceId.ToString("X16"); cPattern.key = pDetails.key; if (!StreamHelpers.isValidStream(KeyUtils.findKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16")))) { if (String.IsNullOrEmpty(pDetails.BackgroundImage)) { cPattern.texturename = pDetails.rgbmask; } else { cPattern.texturename = pDetails.BackgroundImage; } } else { cPattern.texturename = "key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16"); } cPattern.casPart = pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1); cPattern.subcategory = openFileDialog1.FileName; pDetails.customFilename = openFileDialog1.FileName; cPattern.isCustom = true; pDetails.isCustom = true; customPatterns.Items.Add(cPattern); TextWriter r = new StreamWriter(Path.Combine(Application.StartupPath, Path.Combine("xml", "customPatterns.xml"))); XmlSerializer s = new XmlSerializer(typeof(patterns)); s.Serialize(r, customPatterns); r.Close(); break; } } //Stream patternThumb = KeyUtils.searchForKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name), openFileDialog1.FileName); //if (!Helpers.isValidStream(patternThumb)) //{ // patternThumb = KeyUtils.searchForKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.BackgroundImage), openFileDialog1.FileName); //} //if (Helpers.isValidStream(patternThumb)) //{ //Stream patternDDS = File.OpenWrite(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pDetails.name + ".dds"))); //Helpers.CopyStream(patternThumb, patternDDS, true); //patternDDS.Close(); //patternThumb.Seek(0, SeekOrigin.Begin); PictureBox picBox = new PictureBox(); picBox.BackColor = System.Drawing.Color.White; //picBox.Location = new System.Drawing.Point(horizontal, vertical); picBox.Name = pDetails.name; string toolTip = pDetails.category + "\\"; ToolTip tt = new ToolTip(); toolTip += pDetails.name; tt.SetToolTip(picBox, toolTip); picBox.Image = Patterns.makePatternThumb(pDetails, castdb); //picBox.Image = castdb.GetResourceStream(entry.Key); try { picBox.Image.Save(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pDetails.name + ".png")), System.Drawing.Imaging.ImageFormat.Png); } catch (Exception) { } addToPanel(picBox); cast.Close(); //picBox.Dispose(); //} comboBox1.SelectedIndex = 15; } }
private void button1_Click(object sender, EventArgs e) { TextReader r = new StreamReader(@"P:\Stuart\Desktop\fullPatternList.xml"); XmlSerializer s = new XmlSerializer(typeof(files)); files lookupList = (files)s.Deserialize(r); r.Close(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < lookupList.Items.Count; i++) { Stream mem = File.OpenRead(@"P:\Stuart\Desktop\FullBuild0\config\xml\root\" + lookupList.Items[i].fullCasPartname + ".xml"); Patterns.patternDetails pDetails = Patterns.parsePatternComplate(mem); if (String.IsNullOrEmpty(pDetails.category)) { continue; } patternsFile cPattern = new patternsFile(); MadScience.Wrappers.ResourceKey rKey = new MadScience.Wrappers.ResourceKey("key:" + lookupList.Items[i].typeid.Remove(0, 2) + ":" + lookupList.Items[i].groupid.Remove(0, 2) + ":" + lookupList.Items[i].instanceid.Remove(0, 2)); cPattern.key = rKey.ToString(); if (!StreamHelpers.isValidStream(KeyUtils.findKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16")))) { cPattern.texturename = pDetails.BackgroundImage; } else { cPattern.texturename = "key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1)).ToString("X16"); } cPattern.casPart = pDetails.name.Substring(pDetails.name.LastIndexOf("\\") + 1); switch (pDetails.category) { case "Old": break; default: //string fullName = pDetails.Substring(patternTexture.LastIndexOf("\\") + 1); string category = pDetails.filename; category = category.Replace(@"($assetRoot)\InGame\Complates\", ""); category = category.Replace(@"Materials\", ""); category = category.Replace(@".tga", ""); category = category.Replace(@".dds", ""); if (category.IndexOf("\\") > -1) { category = category.Substring(0, category.IndexOf("\\")); } else { category = pDetails.category; } string subCategory = pDetails.filename; subCategory = subCategory.Replace(@"($assetRoot)\InGame\Complates\", ""); subCategory = subCategory.Replace(@"Materials\", ""); subCategory = subCategory.Replace(@".tga", ""); subCategory = subCategory.Replace(@".dds", ""); if (subCategory.IndexOf("\\") > -1) { subCategory = subCategory.Substring(subCategory.IndexOf("\\") + 1); } if (subCategory.Contains("\\")) { subCategory = subCategory.Remove(subCategory.IndexOf("\\")); } else { subCategory = ""; } if (subCategory == pDetails.name) { subCategory = ""; } cPattern.category = category; cPattern.subcategory = subCategory; Console.WriteLine(pDetails.name + " " + category + " " + subCategory); sb.AppendLine("<pattern key=\"" + cPattern.key + "\" texturename=\"\" category=\"" + category + "\" subcategory=\"" + subCategory + "\">" + pDetails.name + "</file>"); break; } //xtr.Close(); mem.Close(); } Clipboard.SetText(sb.ToString()); Console.WriteLine("Done"); }
/* * public Stream findPattern(patternsFile pattern) * { * if (File.Exists(pattern.subcategory)) * { * Stream cast = File.Open(pattern.subcategory, FileMode.Open, FileAccess.Read, FileShare.Read); * MadScience.Wrappers.Database castdb = new MadScience.Wrappers.Database(cast, true); * * MadScience.Wrappers.ResourceKey temp = new MadScience.Wrappers.ResourceKey(pattern.texturename); * Stream patternThumb = null; * * try * { * patternThumb = castdb.GetResourceStream(temp); * } * catch (System.Collections.Generic.KeyNotFoundException ex) * { * } * catch (Exception ex) * { * Helpers.logMessageToFile(ex.Message); * } * cast.Close(); * * if (patternThumb != null) * { * return patternThumb; * } * } * * return Stream.Null; * } */ /* * public patternsFile findPattern(string resKey) * { * // Get pattern details from XML * keyName patternXML = new keyName(resKey); * patternsFile temp = new patternsFile(); * * bool hasMatch = false; * * for (int i = 0; i < this.customPatterns.Items.Count; i++) * { * patternsFile pattern = this.customPatterns.Items[i]; * * if (MadScience.StringHelpers.ParseHex32(pattern.typeid) == patternXML.typeId && MadScience.StringHelpers.ParseHex32(pattern.groupid) == patternXML.groupId && MadScience.StringHelpers.ParseHex64(pattern.instanceid) == patternXML.instanceId) * { * hasMatch = true; * temp = pattern; * break; * } * } * * if (!hasMatch) * { * for (int i = 0; i < this.patterns.Items.Count; i++) * { * patternsFile pattern = this.patterns.Items[i]; * * if (MadScience.StringHelpers.ParseHex32(pattern.typeid) == patternXML.typeId && MadScience.StringHelpers.ParseHex32(pattern.groupid) == patternXML.groupId && MadScience.StringHelpers.ParseHex64(pattern.instanceid) == patternXML.instanceId) * { * hasMatch = true; * temp = pattern; * break; * } * } * } * * return temp; * } */ /* * public Image makePatternThumb(string resKey) * { * return makePatternThumb(findPattern(resKey), null); * } */ /* * public patternsFile pDetailsTopFile(patternDetails pDetails) * { * patternsFile pFile = new patternsFile(); * * keyName pKey = new keyName(pDetails.key); * pFile.casPart = pDetails.filename; * pFile.typeid = "0x" + pKey.typeId.ToString("X8"); * pFile.groupid = "0x" + pKey.groupId.ToString("X8"); * pFile.instanceid = "0x" + pKey.instanceId.ToString("X16"); * * pFile.category = pDetails.category; * pFile.color0 = pDetails.ColorP[0]; * pFile.color1 = pDetails.ColorP[1]; * pFile.color2 = pDetails.ColorP[2]; * pFile.color3 = pDetails.ColorP[3]; * pFile.color4 = pDetails.ColorP[4]; * * pFile.HBg = pDetails.HBg; * pFile.SBg = pDetails.SBg; * pFile.VBg = pDetails.VBg; * * return pFile; * } */ private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { panel1.Controls.Clear(); panel1.Visible = false; label2.Text = "Loading patterns... Please wait..."; label2.Refresh(); numFound = 0; horizontal = 0; vertical = 0; ToolTip tt = new ToolTip(); DdsFileTypePlugin.DdsFile ddsP = new DdsFileTypePlugin.DdsFile(); if (comboBox1.Text == "* Custom") { for (int i = 0; i < this.customPatterns.Items.Count; i++) { patternsFile pattern = this.customPatterns.Items[i]; //if (pattern.category == comboBox1.Text) //{ numFound++; PictureBox picBox = new PictureBox(); picBox.BackColor = System.Drawing.Color.White; picBox.Name = pattern.casPart; string toolTip = pattern.category + "\\"; //if (pattern.subcategory != "") //{ //toolTip += pattern.subcategory + "\\"; //} toolTip += pattern.casPart; tt.SetToolTip(picBox, toolTip); // Find thumbnail if (File.Exists(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pattern.casPart + ".png")))) { Stream tmpImage = File.OpenRead(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pattern.casPart + ".png"))); picBox.Image = Image.FromStream(tmpImage); tmpImage.Close(); } else { if (File.Exists(pattern.subcategory)) { //if (pattern.typeid.StartsWith("0x")) pattern.typeid = pattern.typeid.Remove(0, 2); //if (pattern.groupid.StartsWith("0x")) pattern.groupid = pattern.groupid.Remove(0, 2); //if (pattern.instanceid.StartsWith("0x")) pattern.instanceid = pattern.instanceid.Remove(0, 2); Stream patternXml = KeyUtils.searchForKey(pattern.key, pattern.subcategory); if (StreamHelpers.isValidStream(patternXml)) { Patterns.patternDetails pDetails = Patterns.parsePatternComplate(patternXml); //Stream patternThumb = KeyUtils.searchForKey(pattern.texturename, pattern.subcategory); //if (Helpers.isValidStream(patternThumb)) //{ //picBox.Image = Patterns.makePatternThumb(patternThumb, pDetails); picBox.Image = Patterns.makePatternThumb(pDetails); try { picBox.Image.Save(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pattern.casPart + ".png")), System.Drawing.Imaging.ImageFormat.Png); } catch (Exception) { } //} } } } addToPanel(picBox); //} } } else { string s3root = MadScience.Helpers.findSims3Root(); string thumbnailPackage = Helpers.getGameSubPath(@"\GameData\Shared\Packages\FullBuild2.package"); Console.WriteLine("Starting at: " + DateTime.Now.ToString()); Stream cast = File.Open(Path.Combine(s3root, thumbnailPackage), FileMode.Open, FileAccess.Read, FileShare.Read); MadScience.Wrappers.Database castdb = new MadScience.Wrappers.Database(cast); Stream fullBuild0 = File.Open(Path.Combine(s3root, Helpers.getGameSubPath(@"\GameData\Shared\Packages\FullBuild0.package")), FileMode.Open, FileAccess.Read, FileShare.Read); MadScience.Wrappers.Database xmldb = new MadScience.Wrappers.Database(fullBuild0); for (int i = 0; i < this.patterns.Items.Count; i++) { patternsFile pattern = this.patterns.Items[i]; if (pattern.category == comboBox1.Text) { numFound++; PictureBox picBox = new PictureBox(); picBox.BackColor = System.Drawing.Color.White; picBox.Name = pattern.casPart; string toolTip = pattern.category + "\\"; if (pattern.subcategory != "") { toolTip += pattern.subcategory + "\\"; } toolTip += pattern.casPart; tt.SetToolTip(picBox, toolTip); // Find thumbnail if (File.Exists(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pattern.casPart + ".png")))) { Stream tmpImage = File.OpenRead(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pattern.casPart + ".png"))); picBox.Image = Image.FromStream(tmpImage); tmpImage.Close(); } else { //Console.WriteLine(pattern.casPart); Stream patternXml = KeyUtils.findKey(new MadScience.Wrappers.ResourceKey(pattern.key), 0, xmldb); if (StreamHelpers.isValidStream(patternXml)) { Patterns.patternDetails pDetails2 = Patterns.parsePatternComplate(patternXml); //Stream patternThumb = KeyUtils.findKey(new MadScience.Wrappers.ResourceKey("key:00B2D882:00000000:" + StringHelpers.HashFNV64(pDetails2.name).ToString("X16")), 0, castdb); //if (!Helpers.isValidStream(patternThumb)) //{ // patternThumb = KeyUtils.findKey(new MadScience.Wrappers.ResourceKey(pDetails2.BackgroundImage), 0, castdb); //} //if (Helpers.isValidStream(patternThumb)) //{ picBox.Image = Patterns.makePatternThumb(pDetails2, castdb); try { picBox.Image.Save(Path.Combine(Application.StartupPath, Path.Combine("patterncache", pattern.casPart + ".png")), System.Drawing.Imaging.ImageFormat.Png); } catch (Exception) { } //} } } addToPanel(picBox); } } Console.WriteLine("Stopping at: " + DateTime.Now.ToString()); //dbpf = null; fullBuild0.Close(); cast.Close(); //castdb = null; } label2.Text = numFound.ToString() + " patterns"; panel1.Visible = true; this.curCategory = comboBox1.SelectedIndex; }