public static void ToPermit(XDocument assetsXML) { var assetPools = AssetsXMLHelper.GetAssetPools(assetsXML, "asset pool splendour elements (all)", "asset pool park investors", "asset pool park obreros"); var constructionCategories = AssetsXMLHelper.GetConstructionCategories(assetsXML, "moderate investors city (tier)", "moderate city decorations (category)", "sa obrero city (tier)", "sa city decorations (category)"); foreach (DictionaryEntry pair in UnusedOrnamentsToBuildPermits) { string guid = pair.Key.ToString(); var unusedOrnamentAsset = AssetsXMLHelper.GetAssetByGUID(assetsXML, pair.Key.ToString()); var unusedOrnamentAssetBackup = assetsXML.Descendants(ASSET_BACKUP_NAME).Descendants("GUID").FirstOrDefault(x => x.Value == guid).Ancestors(ASSET_BACKUP_NAME).First(); if (!unusedOrnamentAssetBackup.Descendants("OrnamentUnit").Any()) { Console.WriteLine("\n\n\nunusedOrnamentAsset:\n" + unusedOrnamentAsset + "\n\n\n"); Console.WriteLine("\n\n\nunusedOrnamentAssetBackup:\n" + unusedOrnamentAssetBackup + "\n\n\n"); } // Delete cheat asset unusedOrnamentAsset.Remove(); // Restore backup unusedOrnamentAssetBackup.Name = "Asset"; // Remove asset from asset pools and construction categories foreach (var assetPool in assetPools) { assetPool.Descendants("Asset").FirstOrDefault(x => x.Value == guid)?.Ancestors("Item")?.FirstOrDefault()?.Remove(); } foreach (var constructionCategory in constructionCategories) { constructionCategory.Descendants("Building").FirstOrDefault(x => x.Value == guid)?.Ancestors("Item")?.FirstOrDefault()?.Remove(); } } }
public static void UnlockCityOrnaments(XDocument assetsXML) { var assetPools = AssetsXMLHelper.GetAssetPools(assetsXML, "asset pool city elements (all)", "asset pool city artisans", "asset pool culture obreros"); var constructionCategories = AssetsXMLHelper.GetConstructionCategories(assetsXML, "moderate artisans city (tier)", "moderate city decorations (category)", "sa obrero city (tier)", "sa city decorations (category)"); foreach (var asset in AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "OrnamentalBuilding").Where(a => a.Descendants("Name").Where(n => n.Value.StartsWith(CITY_ORNAMENT_NAME_PREFIX)).Any())) { string guid = asset.Descendants("GUID").First().Value; // skip redundant ornaments if (EXCLUDE_GUIDS.Contains(guid)) { continue; } // Add asset to asset pools and construction categories foreach (var assetPool in assetPools) { assetPool.Add(new XElement("Item", new XElement("Asset", guid))); } foreach (var constructionCategory in constructionCategories) { constructionCategory.Add(new XElement("Item", new XElement("Building", guid))); } } }
public static void ToOrnamental(XDocument assetsXML) { var constructionCategory = AssetsXMLHelper.GetConstructionCategories(assetsXML, "U-Club reward menu").First(); var ornamentalBuildingTemplate = AssetsXMLHelper.GetAssetByGUID(assetsXML, GRASS_ORNAMENT_GUID); // foreach (var visualObject in AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "VisualObject").ToList()) foreach (var guid in VISUAL_OBJECT_GUIDS) { var visualObject = AssetsXMLHelper.GetAssetByGUID(assetsXML, guid); if (visualObject == null) { Console.WriteLine("guid is null: {0}", guid); continue; } // create new ornament var ornamentalBuilding = new XElement(ornamentalBuildingTemplate); visualObject.Parent.Add(ornamentalBuilding); // Copy simple values ornamentalBuilding.Descendants("GUID").First().ReplaceWith(new XElement(visualObject.Descendants("GUID").First())); ornamentalBuilding.Descendants("Name").First().ReplaceWith(new XElement(visualObject.Descendants("Name").First())); ornamentalBuilding.Descendants("IconFilename").First().ReplaceWith(new XElement(visualObject.Descendants("IconFilename").First())); ornamentalBuilding.Descendants("Variations").First().ReplaceWith(new XElement(visualObject.Descendants("Variations").First())); // remove text ornamentalBuilding.Descendants("Text").Remove(); // add construction price ornamentalBuilding.Descendants("Cost").First().ReplaceWith(new XElement("Cost", new XElement("Costs", new XElement("Item", new XElement("Ingredient", "1010017"), new XElement("Amount", "1000")), new XElement("Item", new XElement("Ingredient", "1010196")), new XElement("Item", new XElement("Ingredient", "1010205")), new XElement("Item", new XElement("Ingredient", "1010218")), new XElement("Item", new XElement("Ingredient", "1010207")), new XElement("Item", new XElement("Ingredient", "1010202")) ) ) ); // set description (the typo is "correct") ornamentalBuilding.Descendants("OrnamentDescritpion").First()?.SetValue("11149"); // add to U-Club build menu //string guid = visualObject.Descendants("GUID").First().Value; constructionCategory.Add(new XElement("Item", new XElement("Building", guid))); // make backup visualObject.Name = VISUALOBJECT_BACKUP_NAME; } }
public static void ToVisualObject(XDocument assetsXML) { var constructionCategory = AssetsXMLHelper.GetConstructionCategories(assetsXML, "U-Club reward menu").First(); foreach (var visualObjectBackup in assetsXML.Descendants(VISUALOBJECT_BACKUP_NAME).ToList()) { string guid = visualObjectBackup.Descendants("GUID").First().Value; AssetsXMLHelper.GetAssetByGUID(assetsXML, guid).Remove(); constructionCategory.Descendants("Building").FirstOrDefault(x => x.Value == guid)?.Ancestors("Item")?.FirstOrDefault()?.Remove(); visualObjectBackup.Name = "Asset"; } }
public static void LockSquareOrnament(XDocument assetsXML) { var assetPools = AssetsXMLHelper.GetAssetPools(assetsXML, "asset pool city elements (all)", "asset pool city artisans", "asset pool culture obreros"); var constructionCategories = AssetsXMLHelper.GetConstructionCategories(assetsXML, "moderate artisans city (tier)", "moderate city decorations (category)", "sa obrero city (tier)", "sa city decorations (category)"); // Remove asset from asset pools and construction categories foreach (var guid in SquareGuids) { foreach (var assetPool in assetPools) { assetPool.Descendants("Asset").FirstOrDefault(x => x.Value == guid)?.Ancestors("Item")?.FirstOrDefault()?.Remove(); } foreach (var constructionCategory in constructionCategories) { constructionCategory.Descendants("Building").FirstOrDefault(x => x.Value == guid)?.Ancestors("Item")?.FirstOrDefault()?.Remove(); } } }
public static void UnlockSquareOrnament(XDocument assetsXML) { var assetPools = AssetsXMLHelper.GetAssetPools(assetsXML, "asset pool city elements (all)", "asset pool city artisans", "asset pool culture obreros"); var constructionCategories = AssetsXMLHelper.GetConstructionCategories(assetsXML, "moderate artisans city (tier)", "moderate city decorations (category)", "sa obrero city (tier)", "sa city decorations (category)"); // Add asset to asset pools and construction categories foreach (var guid in SquareGuids) { foreach (var assetPool in assetPools) { assetPool.Add(new XElement("Item", new XElement("Asset", guid))); } foreach (var constructionCategory in constructionCategories) { constructionCategory.Add(new XElement("Item", new XElement("Building", guid))); } } }
public static bool AreCityOrnamentsInstalled(XDocument assetsXML) { var assetPools = AssetsXMLHelper.GetAssetPools(assetsXML, "asset pool city elements (all)", "asset pool city artisans", "asset pool culture obreros"); var constructionCategories = AssetsXMLHelper.GetConstructionCategories(assetsXML, "moderate artisans city (tier)", "moderate city decorations (category)", "sa obrero city (tier)", "sa city decorations (category)"); foreach (var asset in AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "OrnamentalBuilding").Where(a => a.Descendants("Name").Where(n => n.Value.StartsWith(CITY_ORNAMENT_NAME_PREFIX)).Any())) { string guid = asset.Descendants("GUID").First().Value; if (assetPools.Descendants("Asset").Where(x => x.Value == guid).Any()) { return(true); } if (constructionCategories.Descendants("Building").Where(x => x.Value == guid).Any()) { return(true); } } return(false); }
public static void LockCityOrnaments(XDocument assetsXML) { var assetPools = AssetsXMLHelper.GetAssetPools(assetsXML, "asset pool city elements (all)", "asset pool city artisans", "asset pool culture obreros"); var constructionCategories = AssetsXMLHelper.GetConstructionCategories(assetsXML, "moderate artisans city (tier)", "moderate city decorations (category)", "sa obrero city (tier)", "sa city decorations (category)"); foreach (var asset in AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "OrnamentalBuilding").Where(a => a.Descendants("Name").Where(n => n.Value.StartsWith(CITY_ORNAMENT_NAME_PREFIX)).Any())) { string guid = asset.Descendants("GUID").First().Value; // Remove asset from asset pools and construction categories foreach (var assetPool in assetPools) { assetPool.Descendants("Asset").FirstOrDefault(x => x.Value == guid)?.Ancestors("Item")?.FirstOrDefault()?.Remove(); } foreach (var constructionCategory in constructionCategories) { constructionCategory.Descendants("Building").FirstOrDefault(x => x.Value == guid)?.Ancestors("Item")?.FirstOrDefault()?.Remove(); } } }
public static void ToOrnamental(XDocument assetsXML) { var assetPools = AssetsXMLHelper.GetAssetPools(assetsXML, "asset pool splendour elements (all)", "asset pool park investors", "asset pool park obreros"); var constructionCategories = AssetsXMLHelper.GetConstructionCategories(assetsXML, "moderate investors city (tier)", "moderate city decorations (category)", "sa obrero city (tier)", "sa city decorations (category)"); foreach (DictionaryEntry pair in UnusedOrnamentsToBuildPermits) { var unusedOrnamentAsset = AssetsXMLHelper.GetAssetByGUID(assetsXML, pair.Key.ToString()); var buildPermitBuildingAsset = AssetsXMLHelper.GetAssetByGUID(assetsXML, pair.Value.ToString()); // Create backup unusedOrnamentAsset.Parent.Add(new XElement(ASSET_BACKUP_NAME, unusedOrnamentAsset.Attributes(), unusedOrnamentAsset.Elements())); // Copy simple values unusedOrnamentAsset.Descendants("Name").First().ReplaceWith(new XElement(buildPermitBuildingAsset.Descendants("Name").First())); unusedOrnamentAsset.Descendants("IconFilename").First().ReplaceWith(new XElement(buildPermitBuildingAsset.Descendants("IconFilename").First())); unusedOrnamentAsset.Descendants("Variations").First().ReplaceWith(new XElement(buildPermitBuildingAsset.Descendants("Variations").First())); try { var bla = unusedOrnamentAsset.Descendants("OrnamentUnit").First(); bla.ReplaceWith(new XElement(buildPermitBuildingAsset.Descendants("OrnamentUnit").First())); } catch (Exception) { Console.WriteLine("\n\n\nunusedOrnamentAsset:\n" + unusedOrnamentAsset + "\n\n\n"); Console.WriteLine("\n\n\nbuildPermitBuildingAsset:\n" + buildPermitBuildingAsset + "\n\n\n"); throw; } unusedOrnamentAsset.Descendants("OrnamentDescritpion").First().ReplaceWith(new XElement(buildPermitBuildingAsset.Descendants("OrnamentDescritpion").First())); unusedOrnamentAsset.Descendants("Text").First().ReplaceWith(new XElement(buildPermitBuildingAsset.Descendants("Text").First())); // Copy (or clear) BuildModeRandomRotation unusedOrnamentAsset.Descendants("BuildModeRandomRotation").FirstOrDefault()?.Remove(); var buildModeRandomRotation = buildPermitBuildingAsset.Descendants("BuildModeRandomRotation").FirstOrDefault(); if (buildModeRandomRotation != null) { unusedOrnamentAsset.Descendants("Building").First().Add(new XElement(buildModeRandomRotation)); } // Set price int ornamentUnit = Math.Max(Convert.ToInt32(buildPermitBuildingAsset.Descendants("OrnamentUnit").FirstOrDefault()?.Value ?? "1"), 1); unusedOrnamentAsset.Descendants("Cost").First().ReplaceWith( new XElement("Cost", new XElement("Costs", new XElement("Item", new XElement("Ingredient", "1010017"), new XElement("Amount", ornamentUnit * 1000)), new XElement("Item", new XElement("Ingredient", "1010196")), new XElement("Item", new XElement("Ingredient", "1010205")), new XElement("Item", new XElement("Ingredient", "1010218")), new XElement("Item", new XElement("Ingredient", "1010207")), new XElement("Item", new XElement("Ingredient", "1010202")) ) ) ); // Add asset to asset pools and construction categories string guid = pair.Key.ToString(); foreach (var assetPool in assetPools) { assetPool.Add(new XElement("Item", new XElement("Asset", guid))); } foreach (var constructionCategory in constructionCategories) { constructionCategory.Add(new XElement("Item", new XElement("Building", guid))); } } }