more ItemCreationSDK changes

This commit is contained in:
Bitl 2021-09-06 15:22:21 -07:00
parent 254199e9c1
commit 33c141d3a4
3 changed files with 492 additions and 34 deletions

View File

@ -79,7 +79,9 @@ partial class ItemCreationSDK
this.ItemNameLabel = new System.Windows.Forms.Label(); this.ItemNameLabel = new System.Windows.Forms.Label();
this.ItemNameBox = new System.Windows.Forms.TextBox(); this.ItemNameBox = new System.Windows.Forms.TextBox();
this.Warning = new System.Windows.Forms.Label(); this.Warning = new System.Windows.Forms.Label();
this.EditItem = new System.Windows.Forms.CheckBox(); this.EditItemBox = new System.Windows.Forms.CheckBox();
this.ReskinBox = new System.Windows.Forms.CheckBox();
this.ResetButton = new System.Windows.Forms.Button();
this.ItemSettingsGroup.SuspendLayout(); this.ItemSettingsGroup.SuspendLayout();
this.CoordGroup2.SuspendLayout(); this.CoordGroup2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.ZBox2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.ZBox2)).BeginInit();
@ -460,7 +462,7 @@ partial class ItemCreationSDK
// //
// BulgeBox // BulgeBox
// //
this.BulgeBox.DecimalPlaces = 6; this.BulgeBox.DecimalPlaces = 20;
this.BulgeBox.Location = new System.Drawing.Point(104, 98); this.BulgeBox.Location = new System.Drawing.Point(104, 98);
this.BulgeBox.Maximum = new decimal(new int[] { this.BulgeBox.Maximum = new decimal(new int[] {
1661992959, 1661992959,
@ -478,7 +480,7 @@ partial class ItemCreationSDK
// //
// RoundnessBox // RoundnessBox
// //
this.RoundnessBox.DecimalPlaces = 6; this.RoundnessBox.DecimalPlaces = 20;
this.RoundnessBox.Location = new System.Drawing.Point(104, 73); this.RoundnessBox.Location = new System.Drawing.Point(104, 73);
this.RoundnessBox.Maximum = new decimal(new int[] { this.RoundnessBox.Maximum = new decimal(new int[] {
1661992959, 1661992959,
@ -496,7 +498,7 @@ partial class ItemCreationSDK
// //
// BevelBox // BevelBox
// //
this.BevelBox.DecimalPlaces = 6; this.BevelBox.DecimalPlaces = 20;
this.BevelBox.Location = new System.Drawing.Point(104, 49); this.BevelBox.Location = new System.Drawing.Point(104, 49);
this.BevelBox.Maximum = new decimal(new int[] { this.BevelBox.Maximum = new decimal(new int[] {
1661992959, 1661992959,
@ -711,9 +713,9 @@ partial class ItemCreationSDK
// //
// CreateItemButton // CreateItemButton
// //
this.CreateItemButton.Location = new System.Drawing.Point(11, 560); this.CreateItemButton.Location = new System.Drawing.Point(229, 560);
this.CreateItemButton.Name = "CreateItemButton"; this.CreateItemButton.Name = "CreateItemButton";
this.CreateItemButton.Size = new System.Drawing.Size(197, 23); this.CreateItemButton.Size = new System.Drawing.Size(70, 23);
this.CreateItemButton.TabIndex = 6; this.CreateItemButton.TabIndex = 6;
this.CreateItemButton.Text = "Create Item"; this.CreateItemButton.Text = "Create Item";
this.CreateItemButton.UseVisualStyleBackColor = true; this.CreateItemButton.UseVisualStyleBackColor = true;
@ -775,15 +777,35 @@ partial class ItemCreationSDK
this.Warning.Text = "\r\n"; this.Warning.Text = "\r\n";
this.Warning.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.Warning.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
// EditItem // EditItemBox
// //
this.EditItem.Location = new System.Drawing.Point(214, 559); this.EditItemBox.Location = new System.Drawing.Point(11, 560);
this.EditItem.Name = "EditItem"; this.EditItemBox.Name = "EditItemBox";
this.EditItem.Size = new System.Drawing.Size(85, 24); this.EditItemBox.Size = new System.Drawing.Size(85, 24);
this.EditItem.TabIndex = 12; this.EditItemBox.TabIndex = 12;
this.EditItem.Text = "Item Editing"; this.EditItemBox.Text = "Item Editing";
this.EditItem.UseVisualStyleBackColor = true; this.EditItemBox.UseVisualStyleBackColor = true;
this.EditItem.CheckedChanged += new System.EventHandler(this.EditItem_CheckedChanged); this.EditItemBox.CheckedChanged += new System.EventHandler(this.EditItem_CheckedChanged);
//
// ReskinBox
//
this.ReskinBox.Location = new System.Drawing.Point(102, 560);
this.ReskinBox.Name = "ReskinBox";
this.ReskinBox.Size = new System.Drawing.Size(59, 24);
this.ReskinBox.TabIndex = 13;
this.ReskinBox.Text = "Reskin";
this.ReskinBox.UseVisualStyleBackColor = true;
this.ReskinBox.CheckedChanged += new System.EventHandler(this.ReskinBox_CheckedChanged);
//
// ResetButton
//
this.ResetButton.Location = new System.Drawing.Point(175, 560);
this.ResetButton.Name = "ResetButton";
this.ResetButton.Size = new System.Drawing.Size(48, 23);
this.ResetButton.TabIndex = 14;
this.ResetButton.Text = "Reset";
this.ResetButton.UseVisualStyleBackColor = true;
this.ResetButton.Click += new System.EventHandler(this.ResetButton_Click);
// //
// ItemCreationSDK // ItemCreationSDK
// //
@ -791,7 +813,9 @@ partial class ItemCreationSDK
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlLightLight; this.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.ClientSize = new System.Drawing.Size(585, 595); this.ClientSize = new System.Drawing.Size(585, 595);
this.Controls.Add(this.EditItem); this.Controls.Add(this.ResetButton);
this.Controls.Add(this.ReskinBox);
this.Controls.Add(this.EditItemBox);
this.Controls.Add(this.Warning); this.Controls.Add(this.Warning);
this.Controls.Add(this.ItemNameBox); this.Controls.Add(this.ItemNameBox);
this.Controls.Add(this.ItemNameLabel); this.Controls.Add(this.ItemNameLabel);
@ -890,5 +914,7 @@ partial class ItemCreationSDK
private System.Windows.Forms.Label UsesHatTexLabel; private System.Windows.Forms.Label UsesHatTexLabel;
private System.Windows.Forms.ComboBox UsesHatTexBox; private System.Windows.Forms.ComboBox UsesHatTexBox;
private System.Windows.Forms.Label Warning; private System.Windows.Forms.Label Warning;
private System.Windows.Forms.CheckBox EditItem; private System.Windows.Forms.CheckBox EditItemBox;
private System.Windows.Forms.CheckBox ReskinBox;
private System.Windows.Forms.Button ResetButton;
} }

View File

@ -20,6 +20,7 @@ public partial class ItemCreationSDK : Form
private static bool Option2Required = false; private static bool Option2Required = false;
private static bool RequiresIconForTexture = false; private static bool RequiresIconForTexture = false;
private static bool ItemEditing = false; private static bool ItemEditing = false;
private static bool IsReskin = false;
private OpenFileDialog openFileDialog1; private OpenFileDialog openFileDialog1;
private static string FileDialogFilter1 = ""; private static string FileDialogFilter1 = "";
private static string FileDialogName1 = ""; private static string FileDialogName1 = "";
@ -98,6 +99,7 @@ public partial class ItemCreationSDK : Form
private void ItemNameBox_TextChanged(object sender, EventArgs e) private void ItemNameBox_TextChanged(object sender, EventArgs e)
{ {
LoadItemIfExists();
UpdateWarnings(); UpdateWarnings();
} }
@ -230,7 +232,7 @@ public partial class ItemCreationSDK : Form
break; break;
} }
UpdateWarnings(); LoadItemIfExists();
} }
private void CreateItemButton_Click(object sender, EventArgs e) private void CreateItemButton_Click(object sender, EventArgs e)
@ -340,9 +342,19 @@ public partial class ItemCreationSDK : Form
private void EditItem_CheckedChanged(object sender, EventArgs e) private void EditItem_CheckedChanged(object sender, EventArgs e)
{ {
ItemEditing = EditItem.Checked; ItemEditing = EditItemBox.Checked;
UpdateWarnings(); UpdateWarnings();
} }
private void ReskinBox_CheckedChanged(object sender, EventArgs e)
{
IsReskin = ReskinBox.Checked;
}
private void ResetButton_Click(object sender, EventArgs e)
{
Reset(true);
MessageBox.Show("All fields reset!", "Novetus Item Creation SDK - Reset", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#endregion #endregion
#region Functions #region Functions
@ -380,6 +392,38 @@ public partial class ItemCreationSDK : Form
} }
} }
public static string GetItemFontVals(XDocument doc, VarStorage.AssetCacheDef assetdef, int idIndex)
{
return GetItemFontVals(doc, assetdef.Class, assetdef.Id[idIndex]);
}
public static string GetItemFontVals(XDocument doc, string itemClassValue, string itemIdValue)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == itemClassValue
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants("Content")
where nodes.Attribute("name").Value == itemIdValue
select nodes;
foreach (var item2 in v2)
{
var v3 = from nodes in item2.Descendants("url")
select nodes;
foreach (var item3 in v3)
{
return item3.Value;
}
}
}
return "";
}
public static void SetItemCoordVals(XDocument doc, VarStorage.AssetCacheDef assetdef, double X, double Y, double Z, string CoordClass, string CoordName) public static void SetItemCoordVals(XDocument doc, VarStorage.AssetCacheDef assetdef, double X, double Y, double Z, string CoordClass, string CoordName)
{ {
SetItemCoordVals(doc, assetdef.Class, X, Y, Z, CoordClass, CoordName); SetItemCoordVals(doc, assetdef.Class, X, Y, Z, CoordClass, CoordName);
@ -439,6 +483,69 @@ public partial class ItemCreationSDK : Form
} }
} }
public static string GetItemCoordVals(XDocument doc, VarStorage.AssetCacheDef assetdef, string CoordClass, string CoordName)
{
return GetItemCoordVals(doc, assetdef.Class, CoordClass, CoordName);
}
public static string GetItemCoordVals(XDocument doc, string itemClassValue, string CoordClass, string CoordName)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == itemClassValue
select nodes;
return GetItemCoordXML(v, CoordClass, CoordName);
}
public static string GetItemCoordValsNoClassSearch(XDocument doc, string CoordClass, string CoordName)
{
var v = from nodes in doc.Descendants("Item")
select nodes;
return GetItemCoordXML(v, CoordClass, CoordName);
}
private static string GetItemCoordXML(IEnumerable<XElement> v, string CoordClass, string CoordName)
{
string coord = "";
foreach (var item in v)
{
var v2 = from nodes in item.Descendants(CoordClass)
where nodes.Attribute("name").Value == CoordName
select nodes;
foreach (var item2 in v2)
{
var v3 = from nodes in item2.Descendants("X")
select nodes;
foreach (var item3 in v3)
{
coord += item3.Value + ",";
}
var v4 = from nodes in item2.Descendants("Y")
select nodes;
foreach (var item4 in v4)
{
coord += item4.Value + ",";
}
var v5 = from nodes in item2.Descendants("Z")
select nodes;
foreach (var item5 in v5)
{
coord += item5.Value;
}
}
}
return coord;
}
public static void SetHatScaleVals(XDocument doc, double X, double Y, double Z) public static void SetHatScaleVals(XDocument doc, double X, double Y, double Z)
{ {
var v = from nodes in doc.Descendants("Item") var v = from nodes in doc.Descendants("Item")
@ -465,6 +572,34 @@ public partial class ItemCreationSDK : Form
} }
} }
public static string GetHatScaleVals(XDocument doc)
{
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "Hat"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "Part"
select nodes;
foreach (var item2 in v2)
{
var v3 = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "SpecialMesh"
select nodes;
foreach (var item3 in v3)
{
return GetItemCoordXML(v3, "Vector3", "Scale");
}
}
}
return "";
}
public static void SetHeadBevel(XDocument doc, double bevel, double bevelRoundness, double bulge, int meshtype, string meshclass, int LODX, int LODY) public static void SetHeadBevel(XDocument doc, double bevel, double bevelRoundness, double bulge, int meshtype, string meshclass, int LODX, int LODY)
{ {
var v = from nodes in doc.Descendants("Item") var v = from nodes in doc.Descendants("Item")
@ -530,6 +665,105 @@ public partial class ItemCreationSDK : Form
} }
} }
public static string GetHeadBevel(XDocument doc)
{
string bevelsettings = "";
var v = from nodes in doc.Descendants("Item")
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants(XMLTypes.Float.ToString().ToLower())
where nodes.Attribute("name").Value == "Bevel"
select nodes;
foreach (var item2 in v2)
{
bevelsettings += item2.Value + ",";
}
var v3 = from nodes in item.Descendants(XMLTypes.Float.ToString().ToLower())
where nodes.Attribute("name").Value == "Bevel Roundness"
select nodes;
foreach (var item3 in v3)
{
bevelsettings += item3.Value + ",";
}
var v4 = from nodes in item.Descendants(XMLTypes.Float.ToString().ToLower())
where nodes.Attribute("name").Value == "Bulge"
select nodes;
foreach (var item4 in v4)
{
bevelsettings += item4.Value + ",";
}
var vX = from nodes in item.Descendants(XMLTypes.Token.ToString().ToLower())
where nodes.Attribute("name").Value == "LODX"
select nodes;
foreach (var itemX in vX)
{
bevelsettings += itemX.Value + ",";
}
var vY = from nodes in item.Descendants(XMLTypes.Token.ToString().ToLower())
where nodes.Attribute("name").Value == "LODY"
select nodes;
foreach (var itemY in vY)
{
bevelsettings += itemY.Value + ",";
}
var v5 = from nodes in item.Descendants(XMLTypes.Token.ToString().ToLower())
where nodes.Attribute("name").Value == "MeshType"
select nodes;
foreach (var item5 in v5)
{
bevelsettings += item5.Value;
}
}
return bevelsettings;
}
public static bool IsHeadMesh(XDocument doc)
{
bool check = true;
var v = from nodes in doc.Descendants("Item")
where nodes.Attribute("class").Value == "SpecialMesh"
select nodes;
foreach (var item in v)
{
var v2 = from nodes in item.Descendants("Content")
where nodes.Attribute("name").Value == "MeshId"
select nodes;
foreach (var item2 in v2)
{
var v3 = from nodes in item2.Descendants("url")
select nodes;
foreach (var item3 in v3)
{
if (!string.IsNullOrWhiteSpace(item3.Value))
{
check = false;
}
}
}
}
return check;
}
public static string GetPathForType(RobloxFileType type) public static string GetPathForType(RobloxFileType type)
{ {
switch (type) switch (type)
@ -597,19 +831,8 @@ public partial class ItemCreationSDK : Form
} }
} }
public static bool CreateItem(string filepath, RobloxFileType type, string itemname, string[] assetfilenames, double[] coordoptions, double[] coordoptions2, object[] headoptions, string desctext = "") public bool CreateItem(string filepath, RobloxFileType type, string itemname, string[] assetfilenames, double[] coordoptions, double[] coordoptions2, object[] headoptions, string desctext = "")
{ {
/*MessageBox.Show(assetfilenames[0] + "\n" +
assetfilenames[1] + "\n" +
assetfilenames[2] + "\n" +
assetfilenames[3] + "\n" +
coordoptions[0] + "\n" +
coordoptions[1] + "\n" +
coordoptions[2] + "\n" +
headoptions[0] + "\n" +
headoptions[1] + "\n" +
headoptions[2] + "\n");*/
string oldfile = File.ReadAllText(filepath); string oldfile = File.ReadAllText(filepath);
string fixedfile = RobloxXML.RemoveInvalidXmlChars(RobloxXML.ReplaceHexadecimalSymbols(oldfile)); string fixedfile = RobloxXML.RemoveInvalidXmlChars(RobloxXML.ReplaceHexadecimalSymbols(oldfile));
XDocument doc = XDocument.Parse(fixedfile); XDocument doc = XDocument.Parse(fixedfile);
@ -675,6 +898,149 @@ public partial class ItemCreationSDK : Form
return success; return success;
} }
//https://stackoverflow.com/questions/6921105/given-a-filesystem-path-is-there-a-shorter-way-to-extract-the-filename-without
static string GetFileBaseNameUsingSplit(string path)
{
string[] pathArr = path.Split('/');
string[] fileArr = pathArr.Last().Split('.');
string fileBaseName = fileArr.First().ToString();
return fileBaseName;
}
public bool LoadItem(string filepath, RobloxFileType type)
{
Option1Path = "";
Option2Path = "";
string oldfile = File.ReadAllText(filepath);
string fixedfile = RobloxXML.RemoveInvalidXmlChars(RobloxXML.ReplaceHexadecimalSymbols(oldfile));
XDocument doc = XDocument.Parse(fixedfile);
bool success = true;
try
{
switch (type)
{
case RobloxFileType.Hat:
string MeshFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemHatFonts, 0)) + ".mesh";
string TextureFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemHatFonts, 1)) + ".png";
//https://stackoverflow.com/questions/10160708/how-do-i-find-an-item-by-value-in-an-combobox-in-c
int i = UsesHatMeshBox.FindStringExact(MeshFilename);
if (i >= 0)
{
UsesHatMeshBox.SelectedIndex = i;
}
int i2 = UsesHatTexBox.FindStringExact(TextureFilename);
if (i2 >= 0)
{
UsesHatTexBox.SelectedIndex = i2;
}
string HatCoords = GetItemCoordVals(doc, "Hat", "CoordinateFrame", "AttachmentPoint");
if (!string.IsNullOrWhiteSpace(HatCoords))
{
string[] HatCoordsSplit = HatCoords.Split(',');
XBox.Value = Convert.ToDecimal(HatCoordsSplit[0]);
YBox.Value = Convert.ToDecimal(HatCoordsSplit[1]);
ZBox.Value = Convert.ToDecimal(HatCoordsSplit[2]);
}
string HatScaleCoords = GetHatScaleVals(doc);
if (!string.IsNullOrWhiteSpace(HatScaleCoords))
{
string[] HatScaleCoordsSplit = HatScaleCoords.Split(',');
XBox360.Value = Convert.ToDecimal(HatScaleCoordsSplit[0]);
YBox2.Value = Convert.ToDecimal(HatScaleCoordsSplit[1]);
ZBox2.Value = Convert.ToDecimal(HatScaleCoordsSplit[2]);
}
break;
case RobloxFileType.Head:
case RobloxFileType.HeadNoCustomMesh:
if (IsHeadMesh(doc))
{
string BevelCoords = GetHeadBevel(doc);
if (!string.IsNullOrWhiteSpace(BevelCoords))
{
string[] BevelCoordsSplit = BevelCoords.Split(',');
BevelBox.Value = Convert.ToDecimal(BevelCoordsSplit[0]);
RoundnessBox.Value = Convert.ToDecimal(BevelCoordsSplit[1]);
BulgeBox.Value = Convert.ToDecimal(BevelCoordsSplit[2]);
LODXBox.Value = Convert.ToDecimal(BevelCoordsSplit[3]);
LODYBox.Value = Convert.ToDecimal(BevelCoordsSplit[4]);
if (!string.IsNullOrWhiteSpace(BevelCoordsSplit[5]))
{
SpecialMeshTypeBox.SelectedIndex = Convert.ToInt32(BevelCoordsSplit[5]);
}
}
string HeadScaleCoords = GetItemCoordValsNoClassSearch(doc, "Vector3", "Scale");
if (!string.IsNullOrWhiteSpace(HeadScaleCoords))
{
string[] HeadScaleCoordsSplit = HeadScaleCoords.Split(',');
XBox.Value = Convert.ToDecimal(HeadScaleCoordsSplit[0]);
YBox.Value = Convert.ToDecimal(HeadScaleCoordsSplit[1]);
ZBox.Value = Convert.ToDecimal(HeadScaleCoordsSplit[2]);
}
ItemTypeListBox.SelectedIndex = 2;
}
else
{
string HeadMeshFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemHeadFonts, 0)) + ".mesh";
string HeadTextureFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemHeadFonts, 1)) + ".png";
Option1TextBox.Text = HeadMeshFilename;
Option2TextBox.Text = HeadTextureFilename;
string HeadMeshScaleCoords = GetItemCoordVals(doc, RobloxDefs.ItemHeadFonts, "Vector3", "Scale");
if (!string.IsNullOrWhiteSpace(HeadMeshScaleCoords))
{
string[] HeadMeshScaleCoordsSplit = HeadMeshScaleCoords.Split(',');
XBox.Value = Convert.ToDecimal(HeadMeshScaleCoordsSplit[0]);
YBox.Value = Convert.ToDecimal(HeadMeshScaleCoordsSplit[1]);
ZBox.Value = Convert.ToDecimal(HeadMeshScaleCoordsSplit[2]);
}
ItemTypeListBox.SelectedIndex = 1;
}
break;
case RobloxFileType.Face:
string FaceTextureFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemFaceTexture, 0)) + ".png";
Option1TextBox.Text = FaceTextureFilename;
break;
case RobloxFileType.TShirt:
string TShirtTextureFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemTShirtTexture, 0)) + ".png";
Option1TextBox.Text = TShirtTextureFilename;
break;
case RobloxFileType.Shirt:
string ShirtTextureFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemShirtTexture, 0)) + ".png";
Option1TextBox.Text = ShirtTextureFilename;
break;
case RobloxFileType.Pants:
string PantsTextureFilename = GetFileBaseNameUsingSplit(GetItemFontVals(doc, RobloxDefs.ItemPantsTexture, 0)) + ".png";
Option1TextBox.Text = PantsTextureFilename;
break;
default:
break;
}
}
catch (Exception ex)
{
MessageBox.Show("The Item Creation SDK has experienced an error: " + ex.Message, "Novetus Item Creation SDK - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
success = false;
}
return success;
}
private void ToggleOptionSet(Label label, TextBox textbox, Button button, string labelText, bool browseButton, bool enable = true) private void ToggleOptionSet(Label label, TextBox textbox, Button button, string labelText, bool browseButton, bool enable = true)
{ {
label.Text = enable ? labelText : (string.IsNullOrWhiteSpace(labelText) ? "This option is disabled." : labelText); label.Text = enable ? labelText : (string.IsNullOrWhiteSpace(labelText) ? "This option is disabled." : labelText);
@ -779,7 +1145,7 @@ public partial class ItemCreationSDK : Form
} }
else else
{ {
if(File.Exists(GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + ".rbxm")) if(File.Exists(GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + ".rbxm") && !ItemEditing)
{ {
msgboxtext += "\n - The item already exists."; msgboxtext += "\n - The item already exists.";
passed = false; passed = false;
@ -812,7 +1178,7 @@ public partial class ItemCreationSDK : Form
{ {
if (string.IsNullOrWhiteSpace(UsesHatTexBox.Text) || UsesHatMeshBox.Text == "None") if (string.IsNullOrWhiteSpace(UsesHatTexBox.Text) || UsesHatMeshBox.Text == "None")
{ {
if (!File.Exists(Option1Path)) if (!File.Exists(Option1Path) && !File.Exists(GetOptionPathsForType(type)[0] + "\\" + Option1TextBox.Text) && !ItemEditing)
{ {
msgboxtext += "\n - The file assigned as a " + Option1Label.Text + " does not exist. Please rebrowse for the file again."; msgboxtext += "\n - The file assigned as a " + Option1Label.Text + " does not exist. Please rebrowse for the file again.";
passed = false; passed = false;
@ -838,7 +1204,7 @@ public partial class ItemCreationSDK : Form
{ {
if (string.IsNullOrWhiteSpace(UsesHatTexBox.Text) || UsesHatTexBox.Text == "None") if (string.IsNullOrWhiteSpace(UsesHatTexBox.Text) || UsesHatTexBox.Text == "None")
{ {
if (!File.Exists(Option2Path)) if (!File.Exists(Option2Path) && !File.Exists(GetOptionPathsForType(type)[1] + "\\" + Option2TextBox.Text) && !ItemEditing)
{ {
msgboxtext += "\n - The file assigned as a " + Option2Label.Text + " does not exist. Please rebrowse for the file again."; msgboxtext += "\n - The file assigned as a " + Option2Label.Text + " does not exist. Please rebrowse for the file again.";
passed = false; passed = false;
@ -863,7 +1229,7 @@ public partial class ItemCreationSDK : Form
return passed; return passed;
} }
private void UpdateWarnings() private void LoadItemIfExists()
{ {
string iconpath = GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + ".png"; string iconpath = GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + ".png";
@ -877,6 +1243,34 @@ public partial class ItemCreationSDK : Form
ItemIcon.Image = null; ItemIcon.Image = null;
} }
string descpath = GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + "_desc.txt";
if (File.Exists(descpath))
{
DescBox.Text = File.ReadAllText(descpath);
}
else
{
DescBox.Text = "";
}
string rxbmpath = GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + ".rbxm";
if (File.Exists(rxbmpath))
{
LoadItem(rxbmpath, type);
}
else
{
if (!IsReskin)
{
Reset();
}
}
}
private void UpdateWarnings()
{
string warningtext = ""; string warningtext = "";
if (File.Exists(GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + ".rbxm")) if (File.Exists(GetPathForType(type) + "\\" + ItemNameBox.Text.Replace(" ", "") + ".rbxm"))
@ -906,6 +1300,39 @@ public partial class ItemCreationSDK : Form
GlobalFuncs.FixedFileDelete(previconpath); GlobalFuncs.FixedFileDelete(previconpath);
} }
} }
private void Reset(bool full = false)
{
if (full)
{
ItemNameBox.Text = "";
DescBox.Text = "";
ItemTypeListBox.SelectedItem = "Hat";
ItemIcon.Image = null;
Option1Path = "";
Option2Path = "";
EditItemBox.Checked = false;
ReskinBox.Checked = false;
UpdateWarnings();
}
UsesHatMeshBox.SelectedItem = "None";
UsesHatTexBox.SelectedItem = "None";
SpecialMeshTypeBox.SelectedItem = "Head";
Option1TextBox.Text = "";
Option2TextBox.Text = "";
XBox.Value = 1;
YBox.Value = 1;
ZBox.Value = 1;
XBox360.Value = 1;
YBox2.Value = 1;
ZBox2.Value = 1;
BevelBox.Value = 0M;
RoundnessBox.Value = 0M;
BulgeBox.Value = 0M;
LODXBox.Value = 1M;
LODYBox.Value = 2M;
}
#endregion #endregion
} }
#endregion #endregion

View File

@ -17,6 +17,7 @@ Changes from 1.3 Pre-Release 3:
- Re-added Teams and Spawn Locations to 2006S to fix crashes when joining a server. - Re-added Teams and Spawn Locations to 2006S to fix crashes when joining a server.
- Clicking on "Argument Help" for Novetus CMD in the Bootstrapper will no longer close the Bootstrapper. - Clicking on "Argument Help" for Novetus CMD in the Bootstrapper will no longer close the Bootstrapper.
- Added item editing to the Item Creation SDK. - Added item editing to the Item Creation SDK.
- Added the ability to reset all item fields in the Item Creation SDK.
- Changed the console text font. - Changed the console text font.
- Added more items (full list at end of changelog) - Added more items (full list at end of changelog)
Changes from 1.2.4.1: Changes from 1.2.4.1:
@ -250,6 +251,10 @@ Pinobe
[Nobelium Imports] Shaggy Frenemy [Nobelium Imports] Shaggy Frenemy
Inverted Top Hat Inverted Top Hat
Camp ROBLOX Camp ROBLOX
Golden Hair
Cinnamon Hair
Sassy Headband
Orinthian Lady
Faces: Faces:
Remastered Face Remastered Face
Pumpkin Face (2009) Pumpkin Face (2009)