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 LockClubOrnaments(XDocument assetsXML)
 {
     foreach (var scope in AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "OrnamentalBuilding").Descendants("Locked").Descendants(SCOPE_BACKUP_NAME).ToList())
     {
         scope.Parent.Descendants("DefaultLockedState").Remove();
         scope.Name = "Scope";
     }
 }
 public static void UnlockClubOrnaments(XDocument assetsXML)
 {
     foreach (var scope in AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "OrnamentalBuilding").Descendants("Locked").Descendants("Scope").Where(scope => scope.Value == "Account").ToList())
     {
         scope.Parent.Add(new XElement("DefaultLockedState", "0"));
         scope.Name = SCOPE_BACKUP_NAME;
     }
 }
Exemple #5
0
        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;
            }
        }
Exemple #6
0
        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";
            }
        }
Exemple #7
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();
                }
            }
        }
Exemple #8
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 void InstallBoost(XDocument assetsXML)
        {
            foreach (var ornamentalBuilding in AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "OrnamentalBuilding"))
            {
                var ornamentUnit = ornamentalBuilding.Descendants("OrnamentUnit").FirstOrDefault();
                if (ornamentUnit == null)
                {
                    continue;
                }

                ornamentUnit.Name = "MaxAnno1800ModOrnamentUnitBackup";

                double price = double.Parse(ornamentalBuilding.Descendants("Costs").FirstOrDefault()?.Descendants("Amount")?.FirstOrDefault()?.Value ?? "0", System.Globalization.CultureInfo.InvariantCulture);
                double originalOrnamentUnit = double.Parse(ornamentUnit.Value, System.Globalization.CultureInfo.InvariantCulture);
                double newOrnamentUnit      = originalOrnamentUnit + (price / 1000.0);

                ornamentUnit.Parent.Add(new XElement("OrnamentUnit", newOrnamentUnit.ToString(System.Globalization.CultureInfo.InvariantCulture)));
            }
        }
        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();
                }
            }
        }
Exemple #12
0
 public static bool IsSquareOrnamentInstalled(XDocument assetsXML)
 {
     return(AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "AssetPool").Descendants("AssetList").Descendants("Asset").Where(a => SquareOrnamentUnlocker.SquareGuids.Contains(a.Value)).Any() ||
            AssetsXMLHelper.GetAssetsByKey(assetsXML, "Template", "ConstructionCategory").Descendants("BuildingList").Descendants("Building").Where(b => SquareOrnamentUnlocker.SquareGuids.Contains(b.Value)).Any());
 }
        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)));
                }
            }
        }