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)));
                }
            }
        }
Esempio n. 3
0
        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();
                }
            }
        }
Esempio n. 4
0
        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)));
                }
            }
        }