static void Main(string[] args) { try { var fileContents = File.ReadAllText(OUTPUT_DIR + "old_data/furnidata.txt"); var furnidataList = JsonConvert.DeserializeObject <List <string[]> >(fileContents); foreach (var stringArray in furnidataList) { itemList.Add(new FurniItem(stringArray)); } var officialFileContents = File.ReadAllText(OUTPUT_DIR + "official_furnidata.txt"); var officialFurnidataList = JsonConvert.DeserializeObject <List <string[]> >(officialFileContents); foreach (var stringArray in officialFurnidataList) { officialItemList.Add(new FurniItem(stringArray)); } using (var connection = GetConnection()) { nextCatalogueItemsId = connection.QueryFirst <int>("SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_NAME = 'catalogue_items'"); nextItemsDefinitionsId = connection.QueryFirst <int>("SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_NAME = 'items_definitions'"); PageId = connection.QueryFirst <int>("SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_NAME = 'catalogue_pages'") - 1; Console.WriteLine("Query success: " + nextItemsDefinitionsId + " / " + nextCatalogueItemsId); } FurniItem previousItem = null; List <string> processQueue = new List <string>(); List <FurniItem> processedFurni = new List <FurniItem>(); foreach (var file in Directory.GetFiles("ccts")) { var fileName = Path.GetFileName(file); if (fileName.StartsWith("hh_furni_xx_s_")) { fileName = fileName.Replace("hh_furni_xx_s_", "hh_furni_xx_"); } if (fileName.StartsWith("o_")) { fileName = fileName.Replace("o_", "hh_furni_xx_"); } var className = fileName; className = fileName.Replace("hh_furni_xx_", ""); className = Path.GetFileNameWithoutExtension(className); if (className.Contains("#")) { string contents = className.Substring(className.IndexOf("#") + 1); if (contents.Contains("-")) { string[] data = contents.Split('-'); int minimumRange = int.Parse(data[0]); int maximumRange = int.Parse(data[1]); for (int i = minimumRange; i <= maximumRange; i++) { var newClass = className.Replace("#" + minimumRange + "-" + maximumRange, "*" + i); if (!processQueue.Contains(newClass)) { processQueue.Add(newClass); } } } else { className = className.Replace("#", "*"); if (!processQueue.Contains(className)) { processQueue.Add(className); } } } else { if (!processQueue.Contains(className)) { processQueue.Add(className); } } //Console.WriteLine(Path.GetFileName(file)); } foreach (var className in processQueue) { if (processedFurni.Count(sprite => sprite.FileName == className) > 0) { continue; } var spriteData = RetrieveSpriteData(className, itemList); if (spriteData == null) { var originalFileName = className; var newFurniName = className.Replace("_cmp", "").Replace("_camp", ""); if (newFurniName.EndsWith("cmp")) { newFurniName = newFurniName.TrimEnd("cmp".ToCharArray()); } spriteData = RetrieveSpriteData(newFurniName, officialItemList); if (spriteData != null) { if (originalFileName != newFurniName) { var newFurni = new FurniItem(spriteData.RawData); newFurni.FileName = originalFileName; newFurni.SpriteId = GetNextAvaliableSpriteId(spriteData.SpriteId); if (itemList.Count(item => item.SpriteId == spriteData.SpriteId) > 0) { newFurni.SpriteId = GetNextAvaliableSpriteId(spriteData.SpriteId); } Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("The furniture \"" + originalFileName + "\" was missing but has now been added"); Console.ResetColor(); spriteData = newFurni; itemList.Add(newFurni); } else { var newFurni = new FurniItem(spriteData.RawData); if (itemList.Count(item => item.SpriteId == spriteData.SpriteId) > 0) { newFurni.SpriteId = GetNextAvaliableSpriteId(spriteData.SpriteId); } Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("The furniture \"" + originalFileName + "\" was missing but added and sprite id has been recalulated"); Console.ResetColor(); spriteData = newFurni; itemList.Add(newFurni); } } } if (spriteData == null) { Console.WriteLine("Next sprite ID: " + GetNextAvaliableSpriteId(previousItem != null ? previousItem.SpriteId : 1000)); Console.WriteLine("The furni " + className + " has no furnidata"); } else { if (HasItemEntry(className)) { Console.WriteLine("The entry for " + className + " already exists in the database"); } else { int defId = nextItemsDefinitionsId; int catalogueItemsId = nextCatalogueItemsId; sqlOutput.Append("INSERT INTO `items_definitions` (`id`, `sprite`, `name`, `description`, `sprite_id`, `length`, `width`, `top_height`, `max_status`, `behaviour`, `interactor`, `is_tradable`, `is_recyclable`, `drink_ids`, `rental_time`, `allowed_rotations`) VALUES " + "(" + defId + ", '" + spriteData.FileName + "', '" + Escape(spriteData.Name) + "', '" + Escape(spriteData.Description) + "', " + spriteData.SpriteId + ", " + spriteData.Length + ", " + spriteData.Width + ", 0, '2', '" + (spriteData.Type == "i" ? "wall_item" : "solid") + "', 'default', 1, 1, '', -1, '0,2,4,6');"); sqlOutput.Append("\n"); sqlOutput.Append("\n"); AddCatalogueItem(null, spriteData, PageId, nextCatalogueItemsId); nextItemsDefinitionsId++; previousItem = spriteData; } processedFurni.Add(spriteData); } } ProductData.AddItems(processedFurni); ProductData.HandleDeals(); ProductData.WriteProducts(Program.OUTPUT_DIR + "productdata.txt"); var sortedItems = ProductData.Items.Where(item => processQueue.Contains(item.SaleCode) && item.SaleCode.Length > 0).ToList().OrderBy(item => item.SaleCode).ToList(); int orderId = 0; Console.WriteLine("Order ID start (blank for 0):"); var orderIdValue = Console.ReadLine(); if (orderIdValue.Length > 0) { orderId = int.Parse(orderIdValue); } foreach (var item in sortedItems) { sqlOutput.Append("UPDATE catalogue_items SET order_id = '" + orderId++ + "' WHERE sale_code = '" + item.SaleCode + "';"); sqlOutput.Append("\n"); sqlOutput.Append("\n"); } File.WriteAllText(OUTPUT_DIR + "items.sql", sqlOutput.ToString()); RebuildFurnidata(itemList, OUTPUT_DIR + "furnidata.txt"); } catch (Exception ex) { Console.WriteLine(ex); } Console.WriteLine("Done!"); Console.Read(); }