示例#1
0
        private static ConfigNode upgradeConfig(ConfigNode oldConfig)
        {
            var config = oldConfig.CreateCopy();

            var depositSeed = int.Parse(config.GetValue("Seed"));
            config.RemoveValue("Seed");

            foreach (var resourceNode in config.GetNodes("Resource"))
            {
                var resourceName = resourceNode.GetValue("Resource");
                foreach (var bodyNode in resourceNode.GetNodes("Body"))
                {
                    var bodySeed = 0;

                    if (resourceName == "Kethane")
                    {
                        if (int.TryParse(bodyNode.GetValue("SeedModifier"), out bodySeed))
                        {
                            bodyNode.RemoveValue("SeedModifier");
                        }
                        else
                        {
                            bodySeed = bodyNode.GetValue("Name").GetHashCode();
                        }
                    }

                    var dataNode = bodyNode.AddNode("GeneratorData");
                    dataNode.AddValue("Seed", depositSeed ^ bodySeed ^ (resourceName == "Kethane" ? 0 : resourceName.GetHashCode()));
                    foreach (var depositNode in bodyNode.GetNodes("Deposit"))
                    {
                        dataNode.AddValue("Deposit", depositNode.GetValue("Quantity"));
                    }
                    bodyNode.RemoveNodes("Deposit");
                }
            }

            return config;
        }