Updates to sfall debug editor (part 1)

This commit is contained in:
NovaRain
2019-04-05 09:17:43 +08:00
parent 56083c3bc6
commit 06bbe3ceb5
7 changed files with 135 additions and 130 deletions
+27 -30
View File
@@ -47,36 +47,27 @@ namespace FalloutClient {
private readonly Dictionary<uint, string> CritNames = new Dictionary<uint, string>();
private void Redraw() {
bEdit.Enabled = false;
Column2.ReadOnly = false;
Column3.ReadOnly = false;
Column2.HeaderText = "Value (Int)";
Column3.HeaderText = "Value (Float)";
dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
dataGridView1.SuspendLayout();
dataGridView1.Rows.Clear();
switch (mode) {
case Mode.Globals:
Column2.ReadOnly = false;
Column3.ReadOnly = false;
Column2.HeaderText = "Value (Int)";
Column3.HeaderText = "Value (Float)";
bEdit.Enabled = false;
for (int i = 0; i < connection.Globals.Length; i++) {
string name = GlobNames.ContainsKey(i) ? GlobNames[i] : "";
dataGridView1.Rows.Add(i, name, connection.Globals[i], converter.GetAsFloat(connection.Globals[i]));
}
break;
case Mode.MapVars:
Column2.ReadOnly = false;
Column3.ReadOnly = false;
Column2.HeaderText = "Value (Int)";
Column3.HeaderText = "Value (Float)";
bEdit.Enabled = false;
for (int i = 0; i < connection.MapVars.Length; i++) {
dataGridView1.Rows.Add(i, "", connection.MapVars[i], converter.GetAsFloat(connection.MapVars[i]));
}
break;
case Mode.SGlobals:
Column2.ReadOnly = false;
Column3.ReadOnly = false;
Column2.HeaderText = "Value (Int)";
Column3.HeaderText = "Value (Float)";
bEdit.Enabled = false;
for (int i = 0; i < connection.SGlobalKeys.Length; i++) {
string s = connection.SGlobalKeys[i] > 0xffffffff
? new string(System.Text.ASCIIEncoding.ASCII.GetChars(converter.GetAsBytes(connection.SGlobalKeys[i])))
@@ -85,6 +76,7 @@ namespace FalloutClient {
}
break;
case Mode.Arrays:
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
Column2.ReadOnly = true;
Column3.ReadOnly = true;
Column2.HeaderText = "Array size";
@@ -94,13 +86,14 @@ namespace FalloutClient {
bool isMap = connection.ArrayIsMap[i];
int arrlen = connection.ArrayLengths[i];
if (isMap) arrlen /= 2;
dataGridView1.Rows.Add(connection.Arrays[i], isMap ? "Map" : "", arrlen, "0x" + connection.ArrayDataSizes[i].ToString("x").ToUpper());
dataGridView1.Rows.Add(connection.Arrays[i], isMap ? "Map" : "", arrlen, "0x" + connection.ArrayFlag[i].ToString("x").ToUpper());
}
break;
case Mode.Critters:
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
Column2.ReadOnly = true;
Column3.ReadOnly = true;
Column2.HeaderText = "Pid";
Column2.HeaderText = "PID";
Column3.HeaderText = "Pointer";
bEdit.Enabled = true;
for (int i = 0; i < connection.Critters.Length / 2; i++) {
@@ -218,7 +211,7 @@ namespace FalloutClient {
private void bEdit_Click(object sender, EventArgs e) {
if (dataGridView1.SelectedRows.Count == 0) return;
int i = dataGridView1.SelectedRows[0].Index;
int i = (int)dataGridView1.SelectedRows[0].Tag;
switch (mode) {
case Mode.Arrays: {
DataType[] types = new DataType[connection.ArrayLengths[i]];
@@ -251,14 +244,14 @@ namespace FalloutClient {
}
}
br.Close();
strings = EditorWindow.ShowEditor(null, types, strings);
strings = EditorWindow.ShowEditor(null, types, strings, true);
if (strings != null) { // save
connection.WriteDataType(DataTypeSend.SetArray);
/*connection.WriteDataType(DataTypeSend.SetArray);
connection.WriteInt(i);
ms = new MemoryStream(connection.ArrayLengths[i] * connection.ArrayDataSizes[i]);
ms = new MemoryStream(connection.ArrayLengths[i] * connection.ArrayFlag[i]);
BinaryWriter bw=new BinaryWriter(ms);
for (int j = 0; j < strings.Length; j++) {
ms.Position = j * connection.ArrayDataSizes[i];
ms.Position = j * connection.ArrayFlag[i];
switch (types[j]) {
case DataType.Int:
bw.Write(int.Parse(strings[j]));
@@ -268,24 +261,24 @@ namespace FalloutClient {
break;
case DataType.String:
byte[] bytes=System.Text.Encoding.ASCII.GetBytes(strings[j]);
if (bytes.Length < connection.ArrayDataSizes[i]) bw.Write(bytes);
else bw.Write(bytes, 0, connection.ArrayDataSizes[i] - 1);
if (bytes.Length < connection.ArrayFlag[i]) bw.Write(bytes);
else bw.Write(bytes, 0, connection.ArrayFlag[i] - 1);
bw.Write(0);
break;
}
}
connection.WriteBytes(ms.GetBuffer(), 0, connection.ArrayLengths[i] * connection.ArrayDataSizes[i]);
bw.Close();
connection.WriteBytes(ms.GetBuffer(), 0, connection.ArrayLengths[i] * connection.ArrayFlag[i]);
bw.Close();*/
}
}
break;
case Mode.Critters: {
DataType[] types=new DataType[33];
string[] strings=new string[33];
string[] names=new string[33];
DataType[] types = new DataType[33];
string[] strings = new string[33];
string[] names = new string[33];
connection.WriteDataType(DataTypeSend.RetrieveCritter);
connection.WriteInt(i);
BinaryReader br=new BinaryReader(new System.IO.MemoryStream(connection.ReadBytes(33 * 4)));
BinaryReader br = new BinaryReader(new System.IO.MemoryStream(connection.ReadBytes(33 * 4)));
for (int j = 0; j < 33; j++) {
types[j] = DataType.Int;
strings[j] = br.ReadInt32().ToString();
@@ -334,5 +327,9 @@ namespace FalloutClient {
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
bEdit.PerformClick();
}
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) {
dataGridView1.Rows[e.RowIndex].Tag = e.RowIndex;
}
}
}