protected override void OnLoad(ConfigNode configNode)
        {
            foreach (string node in map.Keys)
            {
                foreach (ConfigNode child in ConfigNodeUtil.GetChildNodes(configNode, node))
                {
                    foreach (ConfigNode.Value pair in child.values)
                    {
                        ExpVal expVal = new ExpVal(pair.name, pair.value);
                        if (factory != null)
                        {
                            ConfigNodeUtil.ParseValue <string>(child, pair.name, x => expVal.val = x, factory);
                        }

                        // Parse the expression to validate
                        parser.ParseExpression(pair.name, expVal.val, dataNode);

                        // Store it for later
                        map[node].Add(expVal);
                    }
                }
            }

            foreach (ConfigNode child in ConfigNodeUtil.GetChildNodes(configNode, "PARAMETER_COMPLETED"))
            {
                string parameter = ConfigNodeUtil.ParseValue <string>(child, "parameter");
                foreach (ConfigNode.Value pair in child.values)
                {
                    if (pair.name != "parameter")
                    {
                        ExpVal expVal = new ExpVal(pair.name, pair.value);
                        if (factory != null)
                        {
                            ConfigNodeUtil.ParseValue <string>(child, pair.name, x => expVal.val = x, factory);
                        }

                        // Parse the expression to validate
                        parser.ParseExpression(pair.name, expVal.val, dataNode);

                        // Store it for later
                        if (!onParameterComplete.ContainsKey(parameter))
                        {
                            onParameterComplete[parameter] = new List <ExpVal>();
                        }
                        onParameterComplete[parameter].Add(expVal);
                    }
                }
            }
        }
        protected override void OnLoad(ConfigNode configNode)
        {
            foreach (string node in map.Keys.Union(new string[] { "PARAMETER_COMPLETED" }))
            {
                foreach (ConfigNode child in ConfigNodeUtil.GetChildNodes(configNode, node))
                {
                    string parameter = ConfigNodeUtil.ParseValue <string>(child, "parameter", "");
                    Type   type      = ConfigNodeUtil.ParseValue <Type>(child, "type", typeof(double));
                    foreach (ConfigNode.Value pair in child.values)
                    {
                        if (pair.name != "parameter" && pair.name != "type" && !string.IsNullOrEmpty(pair.value))
                        {
                            ExpVal expVal = new ExpVal(type, pair.name, pair.value);
                            if (factory != null)
                            {
                                ConfigNodeUtil.ParseValue <string>(child, pair.name, x => expVal.val = x, factory, s =>
                                {
                                    // Parse the expression to validate
                                    BaseParser parser = BaseParser.NewParser(expVal.type);
                                    parser.ParseExpressionGeneric(pair.name, s, dataNode);
                                    return(true);
                                });
                            }
                            else
                            {
                                // Parse the expression to validate
                                BaseParser parser = BaseParser.NewParser(expVal.type);
                                parser.ParseExpressionGeneric(pair.name, expVal.val, dataNode);
                            }

                            // Store it for later
                            if (child.name == "PARAMETER_COMPLETED")
                            {
                                if (!onParameterComplete.ContainsKey(parameter))
                                {
                                    onParameterComplete[parameter] = new List <ExpVal>();
                                }
                                onParameterComplete[parameter].Add(expVal);
                            }
                            else
                            {
                                map[node].Add(expVal);
                            }
                        }
                    }
                }
            }
        }
        protected override void OnLoad(ConfigNode configNode)
        {
            foreach (string node in map.Keys.Union(new string[] {"PARAMETER_COMPLETED"}))
            {
                foreach (ConfigNode child in ConfigNodeUtil.GetChildNodes(configNode, node))
                {
                    string parameter = ConfigNodeUtil.ParseValue<string>(child, "parameter", "");
                    Type type = ConfigNodeUtil.ParseValue<Type>(child, "type", typeof(double));
                    foreach (ConfigNode.Value pair in child.values)
                    {
                        if (pair.name != "parameter" && pair.name != "type")
                        {
                            ExpVal expVal = new ExpVal(type, pair.name, pair.value);
                            if (factory != null)
                            {
                                ConfigNodeUtil.ParseValue<string>(child, pair.name, x => expVal.val = x, factory);
                            }

                            // Parse the expression to validate
                            BaseParser parser = BaseParser.NewParser(expVal.type);
                            parser.ParseExpressionGeneric(pair.name, expVal.val, dataNode);

                            // Store it for later
                            if (child.name == "PARAMETER_COMPLETED")
                            {
                                if (!onParameterComplete.ContainsKey(parameter))
                                {
                                    onParameterComplete[parameter] = new List<ExpVal>();
                                }
                                onParameterComplete[parameter].Add(expVal);
                            }
                            else
                            {
                                map[node].Add(expVal);
                            }
                        }
                    }
                }
            }
        }
        protected override void OnLoad(ConfigNode configNode)
        {
            foreach (string node in map.Keys.Union(new string[] {"PARAMETER_COMPLETED"}))
            {
                foreach (ConfigNode child in ConfigNodeUtil.GetChildNodes(configNode, node))
                {
                    string parameter = ConfigNodeUtil.ParseValue<string>(child, "parameter", "");
                    Type type = ConfigNodeUtil.ParseValue<Type>(child, "type", typeof(double));
                    foreach (ConfigNode.Value pair in child.values)
                    {
                        if (pair.name != "parameter" && pair.name != "type")
                        {
                            ExpVal expVal = new ExpVal(type, pair.name, pair.value);
                            if (factory != null)
                            {
                                ConfigNodeUtil.ParseValue<string>(child, pair.name, x => expVal.val = x, factory, s =>
                                {
                                    // Parse the expression to validate
                                    BaseParser parser = BaseParser.NewParser(expVal.type);
                                    parser.ParseExpressionGeneric(pair.name, expVal.val, dataNode);
                                    return true;
                                });
                            }
                            else
                            {
                                // Horrible workaround for bugged saves caused by issue in 1.9.3 - remove in a future version
                                if (expVal.val.Contains("@Tourism:touristCount"))
                                {
                                    expVal.val = expVal.val.Replace("@Tourism:touristCount", "3");
                                }

                                // Parse the expression to validate
                                BaseParser parser = BaseParser.NewParser(expVal.type);
                                parser.ParseExpressionGeneric(pair.name, expVal.val, dataNode);
                            }

                            // Store it for later
                            if (child.name == "PARAMETER_COMPLETED")
                            {
                                if (!onParameterComplete.ContainsKey(parameter))
                                {
                                    onParameterComplete[parameter] = new List<ExpVal>();
                                }
                                onParameterComplete[parameter].Add(expVal);
                            }
                            else
                            {
                                map[node].Add(expVal);
                            }
                        }
                    }
                }
            }
        }