From 64543d398d3ba05b6b025052814014a3ad24327f Mon Sep 17 00:00:00 2001 From: Viaron Date: Wed, 6 Aug 2014 20:29:53 -0400 Subject: [PATCH] Transfer Commit --- ProjectSWGScriptEditor.sln | 20 ++ ProjectSWGScriptEditor.suo | Bin 0 -> 34816 bytes ProjectSWGScriptEditor/Assets/add.png | Bin 0 -> 733 bytes ProjectSWGScriptEditor/Assets/delete.png | Bin 0 -> 715 bytes ProjectSWGScriptEditor/Config.cs | 75 ++++++ .../Editors/BonusSetEditor.Designer.cs | 114 +++++++++ .../Editors/BonusSetEditor.cs | 79 +++++++ .../Editors/BonusSetEditor.resx | 120 ++++++++++ .../Editors/LootEditor.Designer.cs | 220 ++++++++++++++++++ ProjectSWGScriptEditor/Editors/LootEditor.cs | 150 ++++++++++++ .../Editors/LootEditor.resx | 132 +++++++++++ .../FileReaders/STF/StfEntry.cs | 15 ++ .../FileReaders/STF/StfReader.cs | 68 ++++++ ProjectSWGScriptEditor/MainForm.Designer.cs | 172 ++++++++++++++ ProjectSWGScriptEditor/MainForm.cs | 108 +++++++++ ProjectSWGScriptEditor/MainForm.resx | 139 +++++++++++ ProjectSWGScriptEditor/Program.cs | 18 ++ .../ProjectSWGScriptEditor.csproj | 109 +++++++++ .../Properties/AssemblyInfo.cs | 33 +++ .../Properties/Resources.Designer.cs | 71 ++++++ .../Properties/Resources.resx | 117 ++++++++++ .../Properties/Settings.Designer.cs | 30 +++ .../Properties/Settings.settings | 7 + .../bin/Debug/ProjectSWGScriptEditor.exe | Bin 0 -> 26624 bytes ProjectSWGScriptEditor/bin/Debug/pswgse.cfg | 2 + 25 files changed, 1799 insertions(+) create mode 100644 ProjectSWGScriptEditor.sln create mode 100644 ProjectSWGScriptEditor.suo create mode 100644 ProjectSWGScriptEditor/Assets/add.png create mode 100644 ProjectSWGScriptEditor/Assets/delete.png create mode 100644 ProjectSWGScriptEditor/Config.cs create mode 100644 ProjectSWGScriptEditor/Editors/BonusSetEditor.Designer.cs create mode 100644 ProjectSWGScriptEditor/Editors/BonusSetEditor.cs create mode 100644 ProjectSWGScriptEditor/Editors/BonusSetEditor.resx create mode 100644 ProjectSWGScriptEditor/Editors/LootEditor.Designer.cs create mode 100644 ProjectSWGScriptEditor/Editors/LootEditor.cs create mode 100644 ProjectSWGScriptEditor/Editors/LootEditor.resx create mode 100644 ProjectSWGScriptEditor/FileReaders/STF/StfEntry.cs create mode 100644 ProjectSWGScriptEditor/FileReaders/STF/StfReader.cs create mode 100644 ProjectSWGScriptEditor/MainForm.Designer.cs create mode 100644 ProjectSWGScriptEditor/MainForm.cs create mode 100644 ProjectSWGScriptEditor/MainForm.resx create mode 100644 ProjectSWGScriptEditor/Program.cs create mode 100644 ProjectSWGScriptEditor/ProjectSWGScriptEditor.csproj create mode 100644 ProjectSWGScriptEditor/Properties/AssemblyInfo.cs create mode 100644 ProjectSWGScriptEditor/Properties/Resources.Designer.cs create mode 100644 ProjectSWGScriptEditor/Properties/Resources.resx create mode 100644 ProjectSWGScriptEditor/Properties/Settings.Designer.cs create mode 100644 ProjectSWGScriptEditor/Properties/Settings.settings create mode 100644 ProjectSWGScriptEditor/bin/Debug/ProjectSWGScriptEditor.exe create mode 100644 ProjectSWGScriptEditor/bin/Debug/pswgse.cfg diff --git a/ProjectSWGScriptEditor.sln b/ProjectSWGScriptEditor.sln new file mode 100644 index 0000000..a5e835b --- /dev/null +++ b/ProjectSWGScriptEditor.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectSWGScriptEditor", "ProjectSWGScriptEditor\ProjectSWGScriptEditor.csproj", "{BDF562E6-942A-4E0B-BD6F-6FABC0465DC2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BDF562E6-942A-4E0B-BD6F-6FABC0465DC2}.Debug|x86.ActiveCfg = Debug|x86 + {BDF562E6-942A-4E0B-BD6F-6FABC0465DC2}.Debug|x86.Build.0 = Debug|x86 + {BDF562E6-942A-4E0B-BD6F-6FABC0465DC2}.Release|x86.ActiveCfg = Release|x86 + {BDF562E6-942A-4E0B-BD6F-6FABC0465DC2}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ProjectSWGScriptEditor.suo b/ProjectSWGScriptEditor.suo new file mode 100644 index 0000000000000000000000000000000000000000..dfba2f1fb3a7d742388e1f4fefd87b7186b36f8a GIT binary patch literal 34816 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 literal 0 HcmV?d00001 diff --git a/ProjectSWGScriptEditor/Assets/add.png b/ProjectSWGScriptEditor/Assets/add.png new file mode 100644 index 0000000000000000000000000000000000000000..6332fefea4be19eeadf211b0b202b272e8564898 GIT binary patch literal 733 zcmV<30wVp1P)9VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/ProjectSWGScriptEditor/Assets/delete.png b/ProjectSWGScriptEditor/Assets/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..08f249365afd29594b51210c6e21ba253897505d GIT binary patch literal 715 zcmV;+0yO=JP)C4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc literal 0 HcmV?d00001 diff --git a/ProjectSWGScriptEditor/Config.cs b/ProjectSWGScriptEditor/Config.cs new file mode 100644 index 0000000..5ec89eb --- /dev/null +++ b/ProjectSWGScriptEditor/Config.cs @@ -0,0 +1,75 @@ +using System; +using System.IO; +using System.Collections.Generic; + +namespace ProjectSWGScriptEditor +{ + public class Config + { + static public String returnValue(string key) + { + var config = File.OpenText("./pswgse.cfg"); + while (config.BaseStream.CanSeek) + { + String[] entry = config.ReadLine().Split('='); + if (entry[0].Equals(key)) + { + config.Close(); + return entry[1].ToString(); + } + } + config.Close(); + return null; + } + + static public Boolean containsKey(string key) + { + var config = File.OpenText("./pswgse.cfg"); + while (config.BaseStream.CanSeek) + { + string line = config.ReadLine(); + if (line == null) + { + config.Close(); + return false; + } + + String[] entry = line.Split('='); + + if (entry[0].Equals(key)) + { + config.Close(); + return true; + } + } + config.Close(); + return false; + } + + static public void setValue(string key, object value) + { + var config = File.OpenText("./pswgse.cfg"); + SortedList entries = new SortedList(); + + while (config.Peek() >= 0) + { + string temp = config.ReadLine(); + + if (temp != null) + { + string[] entry = temp.Split('='); + entries.Add(entry[0], entry[1]); + } + } + config.Close(); + + if (!entries.ContainsKey(key)) entries.Add(key, value.ToString()); + else entries[key] = value.ToString(); + + List listToSave = new List(); + for (int i = 0; i < entries.Count; i++) listToSave.Add(entries.Keys[i] + "=" + entries.Values[i]); + + File.WriteAllLines("./pswgse.cfg", listToSave); + } + } +} diff --git a/ProjectSWGScriptEditor/Editors/BonusSetEditor.Designer.cs b/ProjectSWGScriptEditor/Editors/BonusSetEditor.Designer.cs new file mode 100644 index 0000000..5706622 --- /dev/null +++ b/ProjectSWGScriptEditor/Editors/BonusSetEditor.Designer.cs @@ -0,0 +1,114 @@ +namespace ProjectSWGScriptEditor.Editors +{ + partial class BonusSetEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.scriptPathLbl = new System.Windows.Forms.Label(); + this.scriptTreeView = new System.Windows.Forms.TreeView(); + this.objectTemplateTb = new System.Windows.Forms.TextBox(); + this.addRequiredItemBtn = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // scriptPathLbl + // + this.scriptPathLbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.scriptPathLbl.AutoSize = true; + this.scriptPathLbl.Location = new System.Drawing.Point(12, 271); + this.scriptPathLbl.Name = "scriptPathLbl"; + this.scriptPathLbl.Size = new System.Drawing.Size(59, 13); + this.scriptPathLbl.TabIndex = 0; + this.scriptPathLbl.Text = "Script Path"; + // + // scriptTreeView + // + this.scriptTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.scriptTreeView.Location = new System.Drawing.Point(12, 12); + this.scriptTreeView.Name = "scriptTreeView"; + this.scriptTreeView.Size = new System.Drawing.Size(372, 256); + this.scriptTreeView.TabIndex = 1; + // + // objectTemplateTb + // + this.objectTemplateTb.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.objectTemplateTb.Location = new System.Drawing.Point(390, 12); + this.objectTemplateTb.Name = "objectTemplateTb"; + this.objectTemplateTb.Size = new System.Drawing.Size(232, 20); + this.objectTemplateTb.TabIndex = 4; + this.objectTemplateTb.Text = "Object STF Name or Object Template"; + // + // addRequiredItemBtn + // + this.addRequiredItemBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.addRequiredItemBtn.Location = new System.Drawing.Point(390, 38); + this.addRequiredItemBtn.Name = "addRequiredItemBtn"; + this.addRequiredItemBtn.Size = new System.Drawing.Size(232, 23); + this.addRequiredItemBtn.TabIndex = 5; + this.addRequiredItemBtn.Text = "Add Required Item"; + this.addRequiredItemBtn.UseVisualStyleBackColor = true; + this.addRequiredItemBtn.Click += new System.EventHandler(this.addRequiredItemBtn_Click); + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.Location = new System.Drawing.Point(390, 64); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(232, 204); + this.label1.TabIndex = 6; + this.label1.Text = "Warning:\r\nThis editor automically saves changes - please do not make a change wit" + + "hout being positive of the changes. \r\n\r\nThis is temporary.\r\n"; + // + // BonusSetEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(634, 293); + this.Controls.Add(this.label1); + this.Controls.Add(this.addRequiredItemBtn); + this.Controls.Add(this.objectTemplateTb); + this.Controls.Add(this.scriptTreeView); + this.Controls.Add(this.scriptPathLbl); + this.Name = "BonusSetEditor"; + this.Text = "Bonus Set Editor"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label scriptPathLbl; + private System.Windows.Forms.TreeView scriptTreeView; + private System.Windows.Forms.TextBox objectTemplateTb; + private System.Windows.Forms.Button addRequiredItemBtn; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/ProjectSWGScriptEditor/Editors/BonusSetEditor.cs b/ProjectSWGScriptEditor/Editors/BonusSetEditor.cs new file mode 100644 index 0000000..424a3db --- /dev/null +++ b/ProjectSWGScriptEditor/Editors/BonusSetEditor.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace ProjectSWGScriptEditor.Editors +{ + public partial class BonusSetEditor : Form + { + public BonusSetEditor(string scriptPath) + { + InitializeComponent(); + scriptPathLbl.Text = scriptPath; + loadScriptIntoForm(); + if (!this.IsDisposed) this.Show(); + } + + private void loadScriptIntoForm() + { + scriptTreeView.Nodes.Clear(); + string[] file = File.ReadAllLines(scriptPathLbl.Text); + + TreeNode bonusSetNameNode = scriptTreeView.Nodes.Add("Set Name: "); + TreeNode requiredItemsNode = scriptTreeView.Nodes.Add("Required Items"); + TreeNode bonusesNode = scriptTreeView.Nodes.Add("Bonuses"); + try + { + for (int i = 0; i < file.Length; i++) + { + if (file[i].Contains("bonusSet = BonusSetTemplate")) + { + bonusSetNameNode.Text = "Set Name: " + file[i].Split('"')[1]; + } + else if (file[i].Contains("bonusSet.addRequiredItem")) + { + requiredItemsNode.Nodes.Add(file[i].Split('"')[1]); + } + else if (file[i].Contains("if wornItems == ")) + { + string requiredItemCount = file[i].Split('=')[2]; + TreeNode bonusNode = bonusesNode.Nodes.Add(requiredItemCount); + + int temp = i + 1; + while (!(file[temp].Contains("elif wornItems == ") || file[temp].Contains("else:"))) + { + bonusNode.Nodes.Add(file[temp]); + temp++; + } + } + } + } + catch (Exception ex) + { + MessageBox.Show("The editor has encountered an error while trying to parse the selected script."); + this.Close(); + } + } + + private void addRequiredItemBtn_Click(object sender, EventArgs e) + { + List file = File.ReadAllLines(scriptPathLbl.Text).ToList(); + foreach (string line in file) + { + if (line.Contains("bonusSet.addRequiredItem")) + { + file.Insert(file.IndexOf(line) + 1, "\tbonusSet.addRequiredItem(\"" + objectTemplateTb.Text + "\")"); + File.WriteAllLines(scriptPathLbl.Text, file); + loadScriptIntoForm(); + return; + } + } + } + } +} diff --git a/ProjectSWGScriptEditor/Editors/BonusSetEditor.resx b/ProjectSWGScriptEditor/Editors/BonusSetEditor.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ProjectSWGScriptEditor/Editors/BonusSetEditor.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectSWGScriptEditor/Editors/LootEditor.Designer.cs b/ProjectSWGScriptEditor/Editors/LootEditor.Designer.cs new file mode 100644 index 0000000..4bcda81 --- /dev/null +++ b/ProjectSWGScriptEditor/Editors/LootEditor.Designer.cs @@ -0,0 +1,220 @@ +namespace ProjectSWGScriptEditor.Editors +{ + partial class LootEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.lootPoolListbox = new System.Windows.Forms.ListBox(); + this.lootPoolContentsDataView = new System.Windows.Forms.DataGridView(); + this.itemName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.itemChance = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.createLootPool = new System.Windows.Forms.Button(); + this.deleteLootPool = new System.Windows.Forms.Button(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.lootPoolContentsDataView)).BeginInit(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Location = new System.Drawing.Point(12, 12); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(714, 491); + this.tabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.splitContainer1); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(706, 465); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Loot Pools"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // splitContainer1 + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer1.Location = new System.Drawing.Point(6, 6); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.deleteLootPool); + this.splitContainer1.Panel1.Controls.Add(this.createLootPool); + this.splitContainer1.Panel1.Controls.Add(this.lootPoolListbox); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.lootPoolContentsDataView); + this.splitContainer1.Size = new System.Drawing.Size(694, 453); + this.splitContainer1.SplitterDistance = 230; + this.splitContainer1.TabIndex = 2; + // + // lootPoolListbox + // + this.lootPoolListbox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lootPoolListbox.FormattingEnabled = true; + this.lootPoolListbox.Location = new System.Drawing.Point(3, 46); + this.lootPoolListbox.Name = "lootPoolListbox"; + this.lootPoolListbox.Size = new System.Drawing.Size(224, 407); + this.lootPoolListbox.TabIndex = 0; + this.lootPoolListbox.SelectedIndexChanged += new System.EventHandler(this.lootPoolListbox_SelectedIndexChanged); + // + // lootPoolContentsDataView + // + this.lootPoolContentsDataView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.lootPoolContentsDataView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.lootPoolContentsDataView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.itemName, + this.itemChance}); + this.lootPoolContentsDataView.Dock = System.Windows.Forms.DockStyle.Fill; + this.lootPoolContentsDataView.Location = new System.Drawing.Point(0, 0); + this.lootPoolContentsDataView.Name = "lootPoolContentsDataView"; + this.lootPoolContentsDataView.Size = new System.Drawing.Size(460, 453); + this.lootPoolContentsDataView.TabIndex = 1; + this.lootPoolContentsDataView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.lootPoolContentsDataView_CellValueChanged); + this.lootPoolContentsDataView.RowsRemoved += new System.Windows.Forms.DataGridViewRowsRemovedEventHandler(this.lootPoolContentsDataView_RowsRemoved); + // + // itemName + // + this.itemName.HeaderText = "Item"; + this.itemName.Name = "itemName"; + this.itemName.ReadOnly = true; + // + // itemChance + // + this.itemChance.HeaderText = "Item Chance"; + this.itemChance.Name = "itemChance"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.listBox1); + this.tabPage2.Controls.Add(this.comboBox1); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(707, 415); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Loot Items"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(6, 6); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(121, 21); + this.comboBox1.TabIndex = 0; + // + // listBox1 + // + this.listBox1.FormattingEnabled = true; + this.listBox1.Location = new System.Drawing.Point(7, 33); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(120, 95); + this.listBox1.TabIndex = 1; + // + // createLootPool + // + this.createLootPool.Dock = System.Windows.Forms.DockStyle.Top; + this.createLootPool.Location = new System.Drawing.Point(0, 0); + this.createLootPool.Name = "createLootPool"; + this.createLootPool.Size = new System.Drawing.Size(230, 23); + this.createLootPool.TabIndex = 1; + this.createLootPool.Text = "Create"; + this.createLootPool.UseVisualStyleBackColor = true; + this.createLootPool.Click += new System.EventHandler(this.createLootPool_Click); + // + // deleteLootPool + // + this.deleteLootPool.Dock = System.Windows.Forms.DockStyle.Top; + this.deleteLootPool.Location = new System.Drawing.Point(0, 23); + this.deleteLootPool.Name = "deleteLootPool"; + this.deleteLootPool.Size = new System.Drawing.Size(230, 23); + this.deleteLootPool.TabIndex = 2; + this.deleteLootPool.Text = "Delete"; + this.deleteLootPool.UseVisualStyleBackColor = true; + // + // LootEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(738, 515); + this.Controls.Add(this.tabControl1); + this.Name = "LootEditor"; + this.Text = "LootEditor"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.lootPoolContentsDataView)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.DataGridView lootPoolContentsDataView; + private System.Windows.Forms.ListBox lootPoolListbox; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.DataGridViewTextBoxColumn itemName; + private System.Windows.Forms.DataGridViewTextBoxColumn itemChance; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Button deleteLootPool; + private System.Windows.Forms.Button createLootPool; + } +} \ No newline at end of file diff --git a/ProjectSWGScriptEditor/Editors/LootEditor.cs b/ProjectSWGScriptEditor/Editors/LootEditor.cs new file mode 100644 index 0000000..a891335 --- /dev/null +++ b/ProjectSWGScriptEditor/Editors/LootEditor.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace ProjectSWGScriptEditor.Editors +{ + public partial class LootEditor : Form + { + string scriptPath; + bool ready = false; + + public LootEditor(string scriptPath) + { + InitializeComponent(); + this.scriptPath = scriptPath; + + loadScriptIntoForm(); + + if (!this.IsDisposed) this.Show(); + this.Activate(); + } + + private void loadScriptIntoForm() + { + string[] files = Directory.GetFiles(scriptPath + "/lootPools"); + + for (int i = 0; i < files.Length; i++) + { + lootPoolListbox.Items.Add(Path.GetFileNameWithoutExtension(files[i])); + } + } + + private void parseLootGroup(string filepath) + { + lootPoolContentsDataView.Rows.Clear(); + + try + { + string[] file = File.ReadAllLines(filepath); + + for (int i = 0; i < file.Length; i++) + { + string line = file[i].TrimStart(); + + if (line.Contains("itemNames()")) + { + line = file[i + 1]; + line = line.Replace("return [", ""); + line = line.Replace("]", ""); + line = line.Replace("'", ""); + + string[] lineContents = line.Split(','); + + for (int a = 0; a < lineContents.Length; a++) + { + lootPoolContentsDataView.Rows.Add(lineContents[a]); + } + } + + if (line.Contains("itemChances()")) + { + line = file[i + 1]; + line = line.Replace("return [", ""); + line = line.Replace("]", ""); + + string[] lineContents = line.Split(','); + + for (int a = 0; a < lineContents.Length; a++) + { + lootPoolContentsDataView.Rows[a].Cells[1].Value = lineContents[a]; + } + } + } + + int totalChance = 0; + for (int i = 0; i < lootPoolContentsDataView.Rows.Count - 1; i++) + { + totalChance += Int32.Parse((string) lootPoolContentsDataView.Rows[i].Cells[1].Value); + } + + ready = true; + //lootPoolContentsDataView.Rows.Add("Total Items: " + (lootPoolContentsDataView.Rows.Count - 1), "Total Chance: " + totalChance); + } + catch (Exception ex) + { + MessageBox.Show("The editor has encountered an error while trying to parse the selected loot pool."); + } + } + + public void saveLootGroupData() + { + string filePath = scriptPath + "/lootPools/" + lootPoolListbox.Text + ".py"; + StringBuilder sbuilder = new StringBuilder(); + + sbuilder.AppendLine("def itemNames():"); + sbuilder.Append("\treturn ["); + for (int i = 0; i < lootPoolContentsDataView.Rows.Count - 1; i++) + { + if (lootPoolContentsDataView.Rows[i].Cells[0].Value == null) continue; + + sbuilder.Append("'" + ((String)lootPoolContentsDataView.Rows[i].Cells[0].Value).TrimStart() + "'"); + if (i < lootPoolContentsDataView.Rows.Count - 2) sbuilder.Append(","); + } + sbuilder.Append("]"); + + sbuilder.AppendLine(); + + sbuilder.AppendLine("def itemChances():"); + sbuilder.Append("\treturn ["); + for (int i = 0; i < lootPoolContentsDataView.Rows.Count - 1; i++) + { + if (lootPoolContentsDataView.Rows[i].Cells[1].Value == null) continue; + + sbuilder.Append(((String)lootPoolContentsDataView.Rows[i].Cells[1].Value).TrimStart()); + if (i < lootPoolContentsDataView.Rows.Count - 2) sbuilder.Append(","); + } + sbuilder.Append("]"); + + Console.WriteLine(filePath); + File.WriteAllText(filePath, sbuilder.ToString()); + } + + private void lootPoolListbox_SelectedIndexChanged(object sender, EventArgs e) + { + ready = false; + parseLootGroup(scriptPath + "/lootPools/" + lootPoolListbox.Text + ".py"); + } + + private void lootPoolContentsDataView_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + if(ready) saveLootGroupData(); + } + + private void lootPoolContentsDataView_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) + { + if (ready) saveLootGroupData(); + } + + private void createLootPool_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/ProjectSWGScriptEditor/Editors/LootEditor.resx b/ProjectSWGScriptEditor/Editors/LootEditor.resx new file mode 100644 index 0000000..5930b59 --- /dev/null +++ b/ProjectSWGScriptEditor/Editors/LootEditor.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/ProjectSWGScriptEditor/FileReaders/STF/StfEntry.cs b/ProjectSWGScriptEditor/FileReaders/STF/StfEntry.cs new file mode 100644 index 0000000..b353038 --- /dev/null +++ b/ProjectSWGScriptEditor/FileReaders/STF/StfEntry.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ProjectSWGScriptEditor.FileReaders.STF +{ + public class StfEntry + { + public string key; + public string value; + + public StfEntry() { } + } +} diff --git a/ProjectSWGScriptEditor/FileReaders/STF/StfReader.cs b/ProjectSWGScriptEditor/FileReaders/STF/StfReader.cs new file mode 100644 index 0000000..9a5fcd3 --- /dev/null +++ b/ProjectSWGScriptEditor/FileReaders/STF/StfReader.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Collections; + +namespace ProjectSWGScriptEditor.FileReaders.STF +{ + static public class StfReader + { + static public StfEntry[] read(String stfPath) + { + FileStream stream = File.Open(stfPath,FileMode.Open); + stream.Position = 9; + + int entryCount = readLittleEndianInt(stream); + StfEntry[] entries = new StfEntry[entryCount]; + + for (int i = 0; i < entryCount; i++) + { + int entryNumber = readLittleEndianInt(stream); + stream.Position += 4; + int characters = readLittleEndianInt(stream); + + byte[] characterBuffer = new byte[characters]; + for (int a = 0; a < characters; a++) + { + characterBuffer[a] = (byte) stream.ReadByte(); + stream.Position++; + } + + string value = System.Text.Encoding.Default.GetString(characterBuffer); + + StfEntry entry = new StfEntry(); + entry.value = value; + + entries[i] = entry; + } + + for (int i = 0; i < entryCount; i++) + { + int entryNumber = readLittleEndianInt(stream); + int characters = readLittleEndianInt(stream); + + byte[] characterBuffer = new byte[characters]; + + for (int a = 0; a < characters; a++) + { + characterBuffer[a] = (byte)stream.ReadByte(); + } + + string value = System.Text.Encoding.Default.GetString(characterBuffer); + entries[i].key = value; + } + + return entries; + } + + static private int readLittleEndianInt(FileStream stream) + { + byte[] endianBuffer = new byte[4]; + stream.Read(endianBuffer, 0, 4); + endianBuffer.Reverse(); + return BitConverter.ToInt32(endianBuffer, 0); + } + } +} diff --git a/ProjectSWGScriptEditor/MainForm.Designer.cs b/ProjectSWGScriptEditor/MainForm.Designer.cs new file mode 100644 index 0000000..6412f6b --- /dev/null +++ b/ProjectSWGScriptEditor/MainForm.Designer.cs @@ -0,0 +1,172 @@ +namespace ProjectSWGScriptEditor +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.treeView1 = new System.Windows.Forms.TreeView(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripDropDownButton1 = new System.Windows.Forms.ToolStripDropDownButton(); + this.setScriptPathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.scriptViewerTb = new System.Windows.Forms.TextBox(); + this.editorNameLbl = new System.Windows.Forms.Label(); + this.setClientdataPathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.toolStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // treeView1 + // + this.treeView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.treeView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.treeView1.Location = new System.Drawing.Point(3, 3); + this.treeView1.Name = "treeView1"; + this.treeView1.Size = new System.Drawing.Size(157, 319); + this.treeView1.TabIndex = 0; + this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + // + // toolStrip1 + // + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripDropDownButton1}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(606, 25); + this.toolStrip1.TabIndex = 2; + this.toolStrip1.Text = "toolStrip1"; + // + // toolStripDropDownButton1 + // + this.toolStripDropDownButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.toolStripDropDownButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.setScriptPathToolStripMenuItem, + this.setClientdataPathToolStripMenuItem}); + this.toolStripDropDownButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripDropDownButton1.Image"))); + this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripDropDownButton1.Name = "toolStripDropDownButton1"; + this.toolStripDropDownButton1.Size = new System.Drawing.Size(62, 22); + this.toolStripDropDownButton1.Text = "Settings"; + // + // setScriptPathToolStripMenuItem + // + this.setScriptPathToolStripMenuItem.Name = "setScriptPathToolStripMenuItem"; + this.setScriptPathToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.setScriptPathToolStripMenuItem.Text = "Set script path"; + this.setScriptPathToolStripMenuItem.Click += new System.EventHandler(this.setScriptPathToolStripMenuItem_Click); + // + // scriptViewerTb + // + this.scriptViewerTb.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.scriptViewerTb.Location = new System.Drawing.Point(6, 16); + this.scriptViewerTb.Multiline = true; + this.scriptViewerTb.Name = "scriptViewerTb"; + this.scriptViewerTb.ReadOnly = true; + this.scriptViewerTb.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.scriptViewerTb.Size = new System.Drawing.Size(406, 306); + this.scriptViewerTb.TabIndex = 5; + this.scriptViewerTb.Text = "Script Viewer"; + this.scriptViewerTb.WordWrap = false; + // + // editorNameLbl + // + this.editorNameLbl.AutoSize = true; + this.editorNameLbl.Location = new System.Drawing.Point(3, 0); + this.editorNameLbl.Name = "editorNameLbl"; + this.editorNameLbl.Size = new System.Drawing.Size(65, 13); + this.editorNameLbl.TabIndex = 4; + this.editorNameLbl.Text = "Editor Name"; + // + // setClientdataPathToolStripMenuItem + // + this.setClientdataPathToolStripMenuItem.Name = "setClientdataPathToolStripMenuItem"; + this.setClientdataPathToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.setClientdataPathToolStripMenuItem.Text = "Set clientdata path"; + this.setClientdataPathToolStripMenuItem.Click += new System.EventHandler(this.setClientdataPathToolStripMenuItem_Click); + // + // splitContainer1 + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer1.Location = new System.Drawing.Point(12, 28); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.treeView1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.editorNameLbl); + this.splitContainer1.Panel2.Controls.Add(this.scriptViewerTb); + this.splitContainer1.Size = new System.Drawing.Size(582, 325); + this.splitContainer1.SplitterDistance = 163; + this.splitContainer1.TabIndex = 6; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(606, 365); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.toolStrip1); + this.Name = "MainForm"; + this.Text = "ProjectSWG Script Editor"; + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TreeView treeView1; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1; + private System.Windows.Forms.ToolStripMenuItem setScriptPathToolStripMenuItem; + private System.Windows.Forms.TextBox scriptViewerTb; + private System.Windows.Forms.Label editorNameLbl; + private System.Windows.Forms.ToolStripMenuItem setClientdataPathToolStripMenuItem; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} + diff --git a/ProjectSWGScriptEditor/MainForm.cs b/ProjectSWGScriptEditor/MainForm.cs new file mode 100644 index 0000000..758cae8 --- /dev/null +++ b/ProjectSWGScriptEditor/MainForm.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace ProjectSWGScriptEditor +{ + public partial class MainForm : Form + { + static String scriptsDirectory = "./"; + static String clientdataDirectory = "./"; + + public MainForm() + { + if (!Config.containsKey("scriptsDirectory")) Config.setValue("scriptsDirectory", scriptsDirectory); + else scriptsDirectory = Config.returnValue("scriptsDirectory"); + + if (!Config.containsKey("clientdataDirectory")) Config.setValue("clientdataDirectory", scriptsDirectory); + else clientdataDirectory = Config.returnValue("clientdataDirectory"); + + InitializeComponent(); + loadContentToTreeView(); + } + + private void loadContentToTreeView() + { + string[] directories = Directory.GetDirectories(scriptsDirectory); + string[] files = Directory.GetFiles(scriptsDirectory); + + for (int i = 0; i < directories.Length; i++) treeView1.Nodes.Add(directories[i].Replace(scriptsDirectory, "")); + for (int i = 0; i < files.Length; i++) treeView1.Nodes.Add(files[i].Replace(scriptsDirectory, "")); + } + + private void setScriptPathToolStripMenuItem_Click(object sender, EventArgs e) + { + using (FolderBrowserDialog dialog = new FolderBrowserDialog()) + { + if (dialog.ShowDialog() == DialogResult.OK) scriptsDirectory = dialog.SelectedPath; + } + Config.setValue("scriptsDirectory", scriptsDirectory); + + treeView1.Nodes.Clear(); + loadContentToTreeView(); + } + + private void setClientdataPathToolStripMenuItem_Click(object sender, EventArgs e) + { + using (FolderBrowserDialog dialog = new FolderBrowserDialog()) + { + if (dialog.ShowDialog() == DialogResult.OK) clientdataDirectory = dialog.SelectedPath; + } + Config.setValue("clientdataDirectory", clientdataDirectory); + } + + private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + { + string directory = scriptsDirectory + getNodeFilePath(treeView1.SelectedNode); + string childDirectory = getNodeFilePath(treeView1.SelectedNode); + + Console.WriteLine(childDirectory); + + if (!treeView1.SelectedNode.Text.EndsWith(".py")) + { + string[] directories = Directory.GetDirectories(directory); + string[] files = Directory.GetFiles(directory); + + treeView1.SelectedNode.Nodes.Clear(); + + for (int i = 0; i < directories.Length; i++) treeView1.SelectedNode.Nodes.Add(directories[i].Replace(directory, "")); + for (int i = 0; i < files.Length; i++) treeView1.SelectedNode.Nodes.Add(files[i].Replace(directory, "")); + + if (childDirectory.Equals(@"\loot")) + { + editorNameLbl.Text = "Loot Editor"; + + Editors.LootEditor editor = new Editors.LootEditor(directory); + } + } + else if (treeView1.SelectedNode.Text.EndsWith(".py")) + { + scriptViewerTb.Text = File.ReadAllText(directory); + + if (childDirectory.StartsWith(@"\equipment\bonus_sets\")) + { + editorNameLbl.Text = "Bonus Set Editor"; + + Editors.BonusSetEditor editor = new Editors.BonusSetEditor(directory); + } + else if (childDirectory == "") + { + + } + else editorNameLbl.Text = "Unknown script type"; + } + } + + private string getNodeFilePath(TreeNode node) + { + if(node.Parent == null) return node.Text; + return getNodeFilePath(node.Parent) + node.Text; + } + } +} diff --git a/ProjectSWGScriptEditor/MainForm.resx b/ProjectSWGScriptEditor/MainForm.resx new file mode 100644 index 0000000..30a20f7 --- /dev/null +++ b/ProjectSWGScriptEditor/MainForm.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/ProjectSWGScriptEditor/Program.cs b/ProjectSWGScriptEditor/Program.cs new file mode 100644 index 0000000..e577e34 --- /dev/null +++ b/ProjectSWGScriptEditor/Program.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace ProjectSWGScriptEditor +{ + static class Program + { + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/ProjectSWGScriptEditor/ProjectSWGScriptEditor.csproj b/ProjectSWGScriptEditor/ProjectSWGScriptEditor.csproj new file mode 100644 index 0000000..13ef275 --- /dev/null +++ b/ProjectSWGScriptEditor/ProjectSWGScriptEditor.csproj @@ -0,0 +1,109 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {BDF562E6-942A-4E0B-BD6F-6FABC0465DC2} + WinExe + Properties + ProjectSWGScriptEditor + ProjectSWGScriptEditor + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + Form + + + BonusSetEditor.cs + + + Form + + + LootEditor.cs + + + Form + + + MainForm.cs + + + + + + BonusSetEditor.cs + + + LootEditor.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/ProjectSWGScriptEditor/Properties/AssemblyInfo.cs b/ProjectSWGScriptEditor/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..efd0039 --- /dev/null +++ b/ProjectSWGScriptEditor/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ProjectSWG Script Editor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("ProjectSWG")] +[assembly: AssemblyProduct("ProjectSWGScriptEditor.Properties")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d183721b-3d4e-4c4a-8585-838fd58e200d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ProjectSWGScriptEditor/Properties/Resources.Designer.cs b/ProjectSWGScriptEditor/Properties/Resources.Designer.cs new file mode 100644 index 0000000..aaad932 --- /dev/null +++ b/ProjectSWGScriptEditor/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ProjectSWGScriptEditor.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SLManager.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/ProjectSWGScriptEditor/Properties/Resources.resx b/ProjectSWGScriptEditor/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/ProjectSWGScriptEditor/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectSWGScriptEditor/Properties/Settings.Designer.cs b/ProjectSWGScriptEditor/Properties/Settings.Designer.cs new file mode 100644 index 0000000..d3fadbd --- /dev/null +++ b/ProjectSWGScriptEditor/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ProjectSWGScriptEditor.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/ProjectSWGScriptEditor/Properties/Settings.settings b/ProjectSWGScriptEditor/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/ProjectSWGScriptEditor/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ProjectSWGScriptEditor/bin/Debug/ProjectSWGScriptEditor.exe b/ProjectSWGScriptEditor/bin/Debug/ProjectSWGScriptEditor.exe new file mode 100644 index 0000000000000000000000000000000000000000..95b169597f14a611200a404dcd762980c01a8622 GIT binary patch literal 26624 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 literal 0 HcmV?d00001 diff --git a/ProjectSWGScriptEditor/bin/Debug/pswgse.cfg b/ProjectSWGScriptEditor/bin/Debug/pswgse.cfg new file mode 100644 index 0000000..85e6455 --- /dev/null +++ b/ProjectSWGScriptEditor/bin/Debug/pswgse.cfg @@ -0,0 +1,2 @@ +clientdataDirectory=C:\NGECore2\clientdata +scriptsDirectory=C:\NGECore2\scripts