public CStructureInfo CreateLocaleTable() { var stringFields = Members.Where(m => m.FormattedTypeName == "LocalizedString*") .Select(m => { var m2 = new CStructureMemberInfo() { TypeName = m.TypeName, Name = m.Name.Replace("_lang", "").Replace("_loc", ""), ArraySize = m.ArraySize }; var indexOfArray = m.Name.LastIndexOf('['); if (indexOfArray != -1) { m2.Name = m2.Name.Insert(indexOfArray, "_lang"); } else { m2.Name += "_lang"; } return(m2); }).ToList(); if (stringFields.Count == 0) { return(null); } stringFields.Insert(0, new CStructureMemberInfo() { TypeName = "uint32", Name = "ID" }); stringFields.Insert(1, new CStructureMemberInfo() { TypeName = "char[4]", Name = "locale" }); stringFields.Add(new CStructureMemberInfo() { TypeName = "int16", Name = "VerifiedBuild" }); var localeStruct = new CStructureInfo(); localeStruct.Name = Name + "Locale"; localeStruct.Members = stringFields; localeStruct.IsLocale = true; return(localeStruct); }
public CStructureInfo CreateLocaleTable() { var stringFields = Members.Where(m => m.TypeName == "LocalizedString*") .Select(m => { var m2 = new CStructureMemberInfo() { TypeName = m.TypeName, Name = m.Name.Replace("_lang", "").Replace("_loc", "") }; var indexOfArray = m.Name.LastIndexOf('['); if (indexOfArray != -1) m2.Name = m2.Name.Insert(indexOfArray, "_lang"); else m2.Name += "_lang"; return m2; }).ToList(); if (stringFields.Count == 0) return null; stringFields.Insert(0, Members.First()); stringFields.Insert(1, new CStructureMemberInfo() { TypeName = "char[4]", Name = "locale" }); stringFields.Add(new CStructureMemberInfo() { TypeName = "int16", Name = "VerifiedBuild" }); var localeStruct = new CStructureInfo(); localeStruct.Name = Name + "Locale"; localeStruct.Members = stringFields; return localeStruct; }
private static void DumpStructureMember(StreamWriter output, LimitedLineLengthStringBuilder query, CStructureMemberInfo member) { var arraySize = member.ArraySize; string typeInfo; if (!MySQLTypeMap.TryGetValue(member.FormattedTypeName, out typeInfo)) { typeInfo = "ERROR TYPE" + member.TypeName; } if (member.TypeName == "flag128") { arraySize = 4; typeInfo = MySQLTypeMap["uint32"]; } for (var i = 0; i < arraySize; ++i) { var memberName = member.Name; if (arraySize > 1) { var langPos = memberName.IndexOf("_lang"); if (langPos == -1) { memberName += (i + 1).ToString(); } else { memberName = memberName.Insert(langPos, (i + 1).ToString()); } } if (!typeInfo.Contains("ERROR")) { DumpStructureMemberName(output, query, memberName, typeInfo); } else { switch (member.TypeName) { case "DBCPosition3D": DumpStructureMemberName(output, query, memberName + "X", MySQLTypeMap["float"]); DumpStructureMemberName(output, query, memberName + "Y", MySQLTypeMap["float"]); DumpStructureMemberName(output, query, memberName + "Z", MySQLTypeMap["float"]); break; case "DBCPosition2D": DumpStructureMemberName(output, query, memberName + "X", MySQLTypeMap["float"]); DumpStructureMemberName(output, query, memberName + "Y", MySQLTypeMap["float"]); break; default: output.WriteLine($" `{memberName}` ERROR TYPE {member.TypeName},"); break; } } } }
private static void DumpStructureMember(StreamWriter output, LimitedLineLengthStringBuilder query, CStructureMemberInfo member) { var arraySize = 1; var indexOfArray = member.Name.IndexOf('['); if (indexOfArray != -1) { var arrayDef = member.Name.Substring(indexOfArray); if (!_parser.ArraySizes.TryGetValue(arrayDef, out arraySize)) if (!int.TryParse(arrayDef.Substring(1, arrayDef.Length - 2), out arraySize)) arraySize = 1; } string typeInfo; if (!MySQLTypeMap.TryGetValue(member.TypeName, out typeInfo)) typeInfo = "ERROR TYPE" + member.TypeName; if (member.TypeName == "flag128") { arraySize = 4; typeInfo = MySQLTypeMap["uint32"]; } for (var i = 0; i < arraySize; ++i) { var memberName = member.Name; if (indexOfArray != -1) memberName = member.Name.Substring(0, indexOfArray); if (arraySize > 1) { var langPos = memberName.IndexOf("_lang"); if (langPos == -1) memberName += (i + 1).ToString(); else memberName = memberName.Insert(langPos, (i + 1).ToString()); } if (!typeInfo.Contains("ERROR")) { DumpStructureMemberName(output, query, memberName, typeInfo); } else { switch (member.TypeName) { case "DBCPosition3D": DumpStructureMemberName(output, query, memberName + "X", MySQLTypeMap["float"]); DumpStructureMemberName(output, query, memberName + "Y", MySQLTypeMap["float"]); DumpStructureMemberName(output, query, memberName + "Z", MySQLTypeMap["float"]); break; case "DBCPosition2D": DumpStructureMemberName(output, query, memberName + "X", MySQLTypeMap["float"]); DumpStructureMemberName(output, query, memberName + "Y", MySQLTypeMap["float"]); break; default: output.WriteLine(String.Format(" `{0}` {1},", memberName, "ERROR TYPE " + member.TypeName)); break; } } } }
public void ParseStructure(string name) { var structure = new CStructureInfo(); structure.Name = name.Replace("Entry", ""); structure.Members = new List<CStructureMemberInfo>(); _stream.ReadLine(); var line = _stream.ReadLine(); while (line != "};") { line = line.Trim(); var comment = line.IndexOf("//"); if (comment != -1) line = line.Substring(0, comment); if (!line.Contains('(')) { var tokens = line.Split(' ', ';', '/').Where(t => t.Length != 0).ToArray(); if (tokens.Length >= 2) { var member = new CStructureMemberInfo(); member.TypeName = tokens[0]; member.Name = tokens[1].Replace("_lang", "").Replace("_loc", ""); structure.Members.Add(member); } } line = _stream.ReadLine(); } if (name.Contains("Entry")) { structure.Members.Add(new CStructureMemberInfo() { TypeName = "int16", Name = "VerifiedBuild" }); Structures.Add(structure); var localeStruct = structure.CreateLocaleTable(); if (localeStruct != null) Structures.Add(localeStruct); } }