static void Main(string[] args) { if (!System.IO.File.Exists(fileName)) { throw new System.IO.FileNotFoundException(); } int record_count = 0; using (var wdb_stream = new BinaryReader(File.OpenRead(fileName))) { var signature = wdb_stream.ReadBytes(4); var build = wdb_stream.ReadUInt32(); var locale = Encoding.UTF8.GetString(wdb_stream.ReadBytes(4).Reverse().ToArray()); var unk_h1 = wdb_stream.ReadInt32(); var unk_h2 = wdb_stream.ReadInt32(); var version = wdb_stream.ReadInt32(); Console.WriteLine(fileName); Console.WriteLine("Locale: " + locale); Console.WriteLine("Build: " + build); using (var writer = File.CreateText(fileName + ".sql")) { while (wdb_stream.BaseStream.Position != wdb_stream.BaseStream.Length) { var entry = wdb_stream.ReadInt32(); var size = wdb_stream.ReadInt32(); if (entry == 0 && size == 0) { break; } ++record_count; #region reader var row_bytes = wdb_stream.ReadBytes(size); var reader = new BitStreamReader(row_bytes); int titleLen = (int)reader.ReadUInt32(11); int titleAltLen = (int)reader.ReadUInt32(11); int cursorNameLen = (int)reader.ReadUInt32(6); var racialLeader = reader.ReadBit() ? 1 : 0; int[] male_names_len = new int[4]; int[] female_name_len = new int[4]; string[] male_names = new string[4]; string[] female_names = new string[4]; for (int i2 = 0; i2 < 4; ++i2) { male_names_len[i2] = (int)reader.ReadUInt32(11); female_name_len[i2] = (int)reader.ReadUInt32(11); } for (int i2 = 0; i2 < 4; ++i2) { male_names[i2] = reader.ReadEsqapedSqlString2(male_names_len[i2]); female_names[i2] = reader.ReadEsqapedSqlString2(female_name_len[i2]); } var type_flags = reader.ReadUInt32(); var type_flags2 = reader.ReadUInt32(); var type = reader.ReadInt32(); var family = reader.ReadInt32(); var rank = reader.ReadInt32(); var kill_kredit1 = reader.ReadInt32(); var kill_kredit2 = reader.ReadInt32(); var modelid1 = reader.ReadInt32(); var modelid2 = reader.ReadInt32(); var modelid3 = reader.ReadInt32(); var modelid4 = reader.ReadInt32(); var HealthModifier = reader.ReadFloat(); var ManaModifier = reader.ReadFloat(); var quest_item_count = reader.ReadInt32(); var movement_id = reader.ReadInt32(); var unk543 = reader.ReadInt32(); // unk EXP var questFlag = reader.ReadInt32(); var vignetteID = reader.ReadInt32(); var title = reader.ReadEsqapedSqlString2(titleLen); var titleAlt = reader.ReadEsqapedSqlString2(titleAltLen); var cursorName = reader.ReadEsqapedSqlString2(cursorNameLen); int[] QuestItem = new int[6]; for (int i = 0; i < quest_item_count; ++i) { QuestItem[i] = reader.ReadInt32(); } if (reader.Buffer.Length != reader.Index) { Console.WriteLine(reader.Buffer.Length - reader.Index); } #endregion #region SQL writer.WriteLine("REPLACE INTO `creaturecache` VALUES (\'" + locale + "\', {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31}, {32}, {33}, {34}, {35}, {36}, {37}, {38}, {39}, {40}, {41}, {42}, {43}, {44}, {45}, {46}, {47});", entry, titleLen, titleAltLen, cursorNameLen, racialLeader, male_names_len[0], female_name_len[0], male_names_len[1], female_name_len[1], male_names_len[2], female_name_len[2], male_names_len[3], female_name_len[3], male_names[0], female_names[0], male_names[1], female_names[1], male_names[2], female_names[2], male_names[3], female_names[3], type_flags, type_flags2, type, family, rank, kill_kredit1, kill_kredit2, modelid1, modelid2, modelid3, modelid4, HealthModifier.ToString(CultureInfo.InvariantCulture), ManaModifier.ToString(CultureInfo.InvariantCulture), quest_item_count, movement_id, unk543, questFlag, vignetteID, title, titleAlt, cursorName, QuestItem[0], QuestItem[1], QuestItem[2], QuestItem[3], QuestItem[4], QuestItem[5] ); #endregion } writer.Flush(); } } Console.WriteLine("Reading {0} records", record_count); Console.WriteLine("Done!"); Console.ReadLine(); }