Skip to content

Commit a03a96f

Browse files
committed
Made reading and writing XML require a reference to an ElderScrollsPlugin so that formIDs can include the name of the record it references
1 parent 36af29f commit a03a96f

105 files changed

Lines changed: 858 additions & 826 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ESPSharp/DataTypes/Comparison.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public void WriteBinary(ESPWriter writer)
7878
writer.Write((Single)ComparisonValue);
7979
}
8080

81-
public void WriteXML(XElement ele)
81+
public void WriteXML(XElement ele, ElderScrollsPlugin master)
8282
{
8383
XElement subEle;
8484

@@ -93,12 +93,12 @@ public void WriteXML(XElement ele)
9393

9494
ele.TryPathTo("ComparisonValue", true, out subEle);
9595
if (Flags.HasFlag(ConditionFlags.UseGlobal))
96-
ComparisonValue.WriteXML(subEle);
96+
ComparisonValue.WriteXML(subEle, master);
9797
else
9898
subEle.Value = ComparisonValue.ToString();
9999
}
100100

101-
public void ReadXML(XElement ele)
101+
public void ReadXML(XElement ele, ElderScrollsPlugin master)
102102
{
103103
XElement subEle;
104104

@@ -122,7 +122,7 @@ public void ReadXML(XElement ele)
122122
if (Flags.HasFlag(ConditionFlags.UseGlobal))
123123
{
124124
ComparisonValue = new FormID();
125-
ComparisonValue.ReadXML(subEle);
125+
ComparisonValue.ReadXML(subEle, master);
126126
}
127127
else
128128
ComparisonValue = subEle.ToSingle();

ESPSharp/DataTypes/FormID.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,26 @@ public override string ToString()
3131
return RawValue.ToString("X8");
3232
}
3333

34-
partial void WriteDataXML(XElement ele)
34+
partial void WriteDataXML(XElement ele, ElderScrollsPlugin master)
3535
{
36-
ele.Value = ToString();
36+
ele.Add(new XAttribute("ID", this));
37+
38+
if (RawValue != 0)
39+
try
40+
{
41+
ele.Value = new LoadOrderFormID(this, master).GetOriginalView().Record.ToString();
42+
}
43+
catch
44+
{
45+
ele.Value = "UnfoundReference";
46+
}
47+
else
48+
ele.Value = "NullReference";
3749
}
3850

39-
partial void ReadDataXML(XElement ele)
51+
partial void ReadDataXML(XElement ele, ElderScrollsPlugin master)
4052
{
41-
RawValue = uint.Parse(ele.Value, System.Globalization.NumberStyles.HexNumber);
53+
RawValue = uint.Parse(ele.Attribute("ID").Value, System.Globalization.NumberStyles.HexNumber);
4254
}
4355
}
4456
}

ESPSharp/DataTypes/Function.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ public void WriteBinary(ESPWriter writer)
410410
else throw new ArgumentException(Arg2Type.ToString() + " is not handled.");
411411
}
412412

413-
public void WriteXML(XElement ele)
413+
public void WriteXML(XElement ele, ElderScrollsPlugin master)
414414
{
415415
XElement subEle;
416416

@@ -421,7 +421,7 @@ public void WriteXML(XElement ele)
421421
if (Arg1Type == null)
422422
subEle.Value = ((byte[])Argument1).ToHex();
423423
else if (Arg1Type == typeof(FormID))
424-
Argument1.WriteXML(subEle);
424+
Argument1.WriteXML(subEle, master);
425425
else if (Arg1Type.IsEnum)
426426
subEle.Value = Argument1.ToString();
427427
else throw new ArgumentException(Arg1Type.ToString() + " is not handled.");
@@ -430,15 +430,15 @@ public void WriteXML(XElement ele)
430430
if (Arg2Type == null)
431431
subEle.Value = ((byte[])Argument2).ToHex();
432432
else if (Arg2Type == typeof(FormID))
433-
Argument2.WriteXML(subEle);
433+
Argument2.WriteXML(subEle, master);
434434
else if (Arg2Type.IsEnum)
435435
subEle.Value = Argument2.ToString();
436436
else if (Arg2Type == typeof(uint))
437437
subEle.Value = Argument2.ToString();
438438
else throw new ArgumentException(Arg2Type.ToString() + " is not handled.");
439439
}
440440

441-
public void ReadXML(XElement ele)
441+
public void ReadXML(XElement ele, ElderScrollsPlugin master)
442442
{
443443
XElement subEle;
444444

@@ -463,7 +463,7 @@ public void ReadXML(XElement ele)
463463
else if (Arg1Type == typeof(FormID))
464464
{
465465
Argument1 = new FormID();
466-
Argument1.ReadXML(subEle);
466+
Argument1.ReadXML(subEle, master);
467467
}
468468
else if (Arg1Type == typeof(VATSValue))
469469
{
@@ -490,7 +490,7 @@ public void ReadXML(XElement ele)
490490
else if (Arg2Type == typeof(FormID))
491491
{
492492
Argument2 = new FormID();
493-
Argument2.ReadXML(subEle);
493+
Argument2.ReadXML(subEle, master);
494494
}
495495
else if (Arg2Type.IsEnum)
496496
Argument2 = Enum.Parse(Arg2Type, subEle.Value);

ESPSharp/DataTypes/GeneratedCode/AlternateTexture.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,21 @@ public void WriteBinary(ESPWriter writer)
5858
WriteData(writer);
5959
}
6060

61-
public void WriteXML(XElement ele)
61+
public void WriteXML(XElement ele, ElderScrollsPlugin master)
6262
{
6363
XElement subEle;
6464

6565
ele.TryPathTo("Name", true, out subEle);
6666
subEle.Value = Name.ToString();
6767

6868
ele.TryPathTo("TextureSet", true, out subEle);
69-
TextureSet.WriteXML(subEle);
69+
TextureSet.WriteXML(subEle, master);
7070

7171
ele.TryPathTo("Index", true, out subEle);
7272
subEle.Value = Index.ToString();
7373
}
7474

75-
public void ReadXML(XElement ele)
75+
public void ReadXML(XElement ele, ElderScrollsPlugin master)
7676
{
7777
XElement subEle;
7878

@@ -83,7 +83,7 @@ public void ReadXML(XElement ele)
8383

8484
if (ele.TryPathTo("TextureSet", false, out subEle))
8585
{
86-
TextureSet.ReadXML(subEle);
86+
TextureSet.ReadXML(subEle, master);
8787
}
8888

8989
if (ele.TryPathTo("Index", false, out subEle))

ESPSharp/DataTypes/GeneratedCode/Color.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void WriteBinary(ESPWriter writer)
6868
writer.Write(Alpha_Unused);
6969
}
7070

71-
public void WriteXML(XElement ele)
71+
public void WriteXML(XElement ele, ElderScrollsPlugin master)
7272
{
7373
XElement subEle;
7474

@@ -85,7 +85,7 @@ public void WriteXML(XElement ele)
8585
subEle.Value = Alpha_Unused.ToString();
8686
}
8787

88-
public void ReadXML(XElement ele)
88+
public void ReadXML(XElement ele, ElderScrollsPlugin master)
8989
{
9090
XElement subEle;
9191

ESPSharp/DataTypes/GeneratedCode/DataTypeTemplate.t4

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ namespace ESPSharp.DataTypes
127127
<# } #>
128128
}
129129

130-
public void WriteXML(XElement ele)
130+
public void WriteXML(XElement ele, ElderScrollsPlugin master)
131131
{
132132
<# if (template.implementWriteXML) { #>
133133
XElement subEle;
@@ -137,16 +137,16 @@ namespace ESPSharp.DataTypes
137137
<# if (field.Type == typeof(byte[])){ #>
138138
subEle.Value = <#= field.Name#>.ToHex();
139139
<# } else if (field.Type.GetInterface("IESPSerializable") != null){ #>
140-
<#= field.Name#>.WriteXML(subEle);
140+
<#= field.Name#>.WriteXML(subEle, master);
141141
<# } else { #>
142142
subEle.Value = <#= field.Name#>.ToString();
143143
<# } #>
144144
<# } } else { #>
145-
WriteDataXML(ele);
145+
WriteDataXML(ele, master);
146146
<# } #>
147147
}
148148

149-
public void ReadXML(XElement ele)
149+
public void ReadXML(XElement ele, ElderScrollsPlugin master)
150150
{
151151
<# if (template.implementReadXML) { #>
152152
XElement subEle;
@@ -161,22 +161,22 @@ namespace ESPSharp.DataTypes
161161
<# } else if (field.Type == typeof(string)){ #>
162162
<#= field.Name #> = subEle.Value;
163163
<# } else if (field.Type.GetInterface("IESPSerializable") != null){ #>
164-
<#= field.Name#>.ReadXML(subEle);
164+
<#= field.Name#>.ReadXML(subEle, master);
165165
<# } else { #>
166166
<#= field.Name #> = subEle.To<#= GetFriendlyName(field.Type)#>();
167167
<# } #>
168168
}
169169
<# } } else { #>
170-
ReadDataXML(ele);
170+
ReadDataXML(ele, master);
171171
<# } #>
172172
}
173173
<# if (!template.implementReadXML) { #>
174174

175-
partial void ReadDataXML(XElement ele);
175+
partial void ReadDataXML(XElement ele, ElderScrollsPlugin master);
176176
<# } #>
177177
<# if (!template.implementWriteXML) { #>
178178

179-
partial void WriteDataXML(XElement ele);
179+
partial void WriteDataXML(XElement ele, ElderScrollsPlugin master);
180180
<# } #>
181181
<# if (!template.implementReadData) { #>
182182

ESPSharp/DataTypes/GeneratedCode/FormID.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,19 @@ public void WriteBinary(ESPWriter writer)
5050
writer.Write(RawValue);
5151
}
5252

53-
public void WriteXML(XElement ele)
53+
public void WriteXML(XElement ele, ElderScrollsPlugin master)
5454
{
55-
WriteDataXML(ele);
55+
WriteDataXML(ele, master);
5656
}
5757

58-
public void ReadXML(XElement ele)
58+
public void ReadXML(XElement ele, ElderScrollsPlugin master)
5959
{
60-
ReadDataXML(ele);
60+
ReadDataXML(ele, master);
6161
}
6262

63-
partial void ReadDataXML(XElement ele);
63+
partial void ReadDataXML(XElement ele, ElderScrollsPlugin master);
6464

65-
partial void WriteDataXML(XElement ele);
65+
partial void WriteDataXML(XElement ele, ElderScrollsPlugin master);
6666

6767
public FormID Clone()
6868
{

ESPSharp/DataTypes/LoadOrderFormID.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace ESPSharp.DataTypes
88
{
99
public class LoadOrderFormID : FormID
1010
{
11+
public ElderScrollsPlugin Master { get; protected set; }
1112
public LoadOrderFormID(FormID fileFormID, ElderScrollsPlugin file)
1213
{
1314
uint fileIndex = fileFormID.RawValue >> 24;
@@ -19,19 +20,26 @@ public LoadOrderFormID(FormID fileFormID, ElderScrollsPlugin file)
1920
if (master == null)
2021
throw new Exception();
2122

23+
Master = master;
24+
2225
uint newFileIndex = (uint)(ElderScrollsPlugin.LoadedPlugins.IndexOf(master) << 24);
2326

2427
RawValue = newFileIndex | recordIndex;
2528
}
2629

2730
public RecordView GetWinningView()
2831
{
29-
return ElderScrollsPlugin.LoadedRecordViews[this].Last();
32+
return ElderScrollsPlugin.LoadedRecordViews[RawValue].Last();
33+
}
34+
35+
public RecordView GetOriginalView()
36+
{
37+
return ElderScrollsPlugin.LoadedRecordViews[RawValue].First();
3038
}
3139

3240
public List<RecordView> GetViews()
3341
{
34-
return ElderScrollsPlugin.LoadedRecordViews[this];
42+
return ElderScrollsPlugin.LoadedRecordViews[RawValue];
3543
}
3644
}
3745
}

ESPSharp/ElderScrollsPlugin.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace ESPSharp
1818
public class ElderScrollsPlugin : IDisposable
1919
{
2020
public static List<ElderScrollsPlugin> LoadedPlugins = new List<ElderScrollsPlugin>();
21-
public static Dictionary<LoadOrderFormID, List<RecordView>> LoadedRecordViews = new Dictionary<LoadOrderFormID, List<RecordView>>();
21+
public static Dictionary<uint, List<RecordView>> LoadedRecordViews = new Dictionary<uint, List<RecordView>>();
2222

2323
protected string name = "";
2424
public List<string> Masters = new List<string>();
@@ -66,13 +66,13 @@ public void Read(string source)
6666

6767
public void WriteXML(string destinationFolder)
6868
{
69-
Header.Record.WriteXML(Path.Combine(destinationFolder, "Header.xml"));
69+
Header.Record.WriteXML(Path.Combine(destinationFolder, "Header.xml"), this);
7070

7171
foreach (Group group in TopGroups.Where(g => g.ToString() != "Interior Cells" && g.ToString() != "Worldspaces" && g.ToString() != "Dialog Topics"))
7272
{
7373
string newDir = Path.Combine(destinationFolder, group.ToString());
7474
Directory.CreateDirectory(newDir);
75-
group.WriteXML(newDir);
75+
group.WriteXML(newDir, this);
7676
}
7777
}
7878

@@ -105,7 +105,7 @@ public static ElderScrollsPlugin ReadXML(string sourceFolder)
105105
outPlug.TopGroups.Add(newGroup);
106106
outPlug.AllGroups.Add(newGroup);
107107

108-
newGroup.ReadXML(folder);
108+
newGroup.ReadXML(folder, outPlug);
109109
}
110110

111111
ElderScrollsPlugin.LoadedPlugins.Add(outPlug);
@@ -118,7 +118,7 @@ public void WriteBinary(ESPWriter writer)
118118
Header.Record.WriteBinary(writer);
119119

120120
foreach (var group in TopGroups)
121-
group.WriteBinary(writer);
121+
group.WriteBinary(writer, this);
122122
}
123123

124124
public void ReadBinary(string file)
@@ -169,10 +169,10 @@ public void ReadBinary(string file)
169169

170170
List<RecordView> viewList;
171171

172-
if (!ElderScrollsPlugin.LoadedRecordViews.TryGetValue(loID, out viewList))
172+
if (!ElderScrollsPlugin.LoadedRecordViews.TryGetValue(loID.RawValue, out viewList))
173173
{
174174
viewList = new List<RecordView>();
175-
ElderScrollsPlugin.LoadedRecordViews.Add(loID, viewList);
175+
ElderScrollsPlugin.LoadedRecordViews.Add(loID.RawValue, viewList);
176176
}
177177

178178
viewList.Add(view);
@@ -187,7 +187,7 @@ public static void Clear()
187187
}
188188

189189
LoadedPlugins = new List<ElderScrollsPlugin>();
190-
LoadedRecordViews = new Dictionary<LoadOrderFormID, List<RecordView>>();
190+
LoadedRecordViews = new Dictionary<uint, List<RecordView>>();
191191
}
192192

193193
public void Dispose()

0 commit comments

Comments
 (0)