Skip to content

Instantly share code, notes, and snippets.

@barncastle
Created August 15, 2020 12:14
Show Gist options
  • Save barncastle/52a9d88ada30115f8bb33a34f541d39e to your computer and use it in GitHub Desktop.
Save barncastle/52a9d88ada30115f8bb33a34f541d39e to your computer and use it in GitHub Desktop.
var fieldregex = new Regex(@"_(\d{7,})", RegexOptions.Compiled);
var reader = new DBDReader();
var fakebuild = new Build("99.9.9.999999");
static Build MinBuild(Build b1, Build b2)
{
if (b1 == null) return b2;
if (b2 == null) return b1;
return b1 < b2 ? b1 : b2;
}
foreach (var f in Directory.GetFiles(@"C:\Users\spear\Desktop\pre-wod\WoWDBDefs\definitions"))
{
var def = reader.Read(f);
var columns = def.columnDefinitions.ToList();
var fields = def.columnDefinitions.Keys.Where(x => fieldregex.IsMatch(x)).ToArray();
var lookup = new Dictionary<string, string>();
foreach (var field in fields)
{
var build = fakebuild;
var offset = 0;
var defs = def.versionDefinitions.Where(x => x.definitions.Any(y => y.name == field)).ToArray();
for (var i = 0; i < defs.Length; i++)
{
var b = MinBuild(defs[i].builds.Min(), defs[i].buildRanges.Min(x => x.minBuild));
if (b < build)
{
build = b;
offset = Array.FindIndex(defs[i].definitions, x => x.name == field);
}
}
var newfield = fieldregex.Replace(field, "_" + build.ToString().Replace(".", "_") + "_" + offset.ToString("D3"));
lookup.Add(field, newfield);
}
foreach(var item in lookup)
{
var i = columns.FindIndex(x => x.Key == item.Key);
columns.Insert(i, new KeyValuePair<string, Structs.ColumnDefinition>(item.Value, def.columnDefinitions[item.Key]));
columns.RemoveAt(i + 1);
for(var j = 0; j < def.versionDefinitions.Length; j++)
{
for(var k = 0; k < def.versionDefinitions[j].definitions.Length; k++)
{
if (def.versionDefinitions[j].definitions[k].name == item.Key)
def.versionDefinitions[j].definitions[k].name = item.Value;
}
}
}
if(lookup.Count > 0)
{
def.columnDefinitions = columns.ToDictionary(x => x.Key, x => x.Value);
new DBDWriter().Save(def, f);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment