Ejemplo n.º 1
0
        public static DuckNews Parse(XElement rootElement)
        {
            DuckNews   duckNews1   = new DuckNews();
            XAttribute xattribute1 = rootElement.Attributes((XName)"name").FirstOrDefault <XAttribute>();

            if (xattribute1 != null)
            {
                duckNews1._name = xattribute1.Value;
            }
            foreach (XElement element in rootElement.Elements())
            {
                if (element.Name == (XName)"Section")
                {
                    XAttribute xattribute2 = element.Attributes((XName)"name").FirstOrDefault <XAttribute>();
                    if (xattribute2 != null)
                    {
                        try
                        {
                            duckNews1._section = (NewsSection)Enum.Parse(typeof(NewsSection), xattribute2.Value);
                        }
                        catch
                        {
                            return((DuckNews)null);
                        }
                    }
                }
                else if (element.Name == (XName)"Requirement")
                {
                    Script.activeProfile = Profiles.DefaultPlayer1;
                    duckNews1._requirements.Add(ScriptStatement.Parse(element.Value + " "));
                }
                else if (element.Name == (XName)"Dialogue")
                {
                    XAttribute xattribute2 = element.Attributes((XName)"value").FirstOrDefault <XAttribute>();
                    if (xattribute2 != null)
                    {
                        duckNews1._dialogue.Add(xattribute2.Value);
                    }
                }
                else if (element.Name == (XName)"VALUE")
                {
                    Script.activeProfile        = Profiles.DefaultPlayer1;
                    duckNews1._valueCalculation = ScriptStatement.Parse(element.Value + " ");
                }
                else if (element.Name == (XName)"VALUE2")
                {
                    Script.activeProfile         = Profiles.DefaultPlayer1;
                    duckNews1._valueCalculation2 = ScriptStatement.Parse(element.Value + " ");
                }
                else if (element.Name == (XName)"Cycle")
                {
                    XAttribute xattribute2 = element.Attributes((XName)"value").FirstOrDefault <XAttribute>();
                    if (xattribute2 != null)
                    {
                        duckNews1._cycle = (CycleMode)Enum.Parse(typeof(CycleMode), xattribute2.Value);
                    }
                }
                else if (element.Name == (XName)"SubStory")
                {
                    DuckNews duckNews2 = DuckNews.Parse(element);
                    duckNews1._subStories.Add(duckNews2);
                }
            }
            return(duckNews1);
        }
Ejemplo n.º 2
0
        public static ScriptStatement Parse(
            string statement,
            object left           = null,
            object right          = null,
            ScriptOperator operat = ScriptOperator.None,
            string func           = null,
            bool isChild          = false)
        {
            ScriptStatement scriptStatement1 = new ScriptStatement();

            scriptStatement1.leftObject   = left;
            scriptStatement1.rightObject  = right;
            scriptStatement1.op           = operat;
            scriptStatement1.functionName = func;
            int num = 1;

            if (!isChild)
            {
                ++num;
            }
            string         str     = "";
            ScriptOperator operat1 = ScriptOperator.None;
            bool           flag1   = false;
            bool           flag2   = false;
            bool           flag3   = false;
            bool           flag4   = false;
            bool           flag5   = false;

            while (statement.Length > 0)
            {
                char c = statement[0];
                statement = statement.Remove(0, 1);
                if (!flag3 && char.IsNumber(c))
                {
                    if (str.Length > 0 && !flag1)
                    {
                        if (flag4 && str == "-")
                        {
                            flag4 = false;
                        }
                        else
                        {
                            scriptStatement1.error = "Found unexpected number.";
                            break;
                        }
                    }
                    flag1 = true;
                }
                else if (c == '.' && !flag3)
                {
                    if (str.Length > 0 && !flag1)
                    {
                        scriptStatement1.error = "Found unexpected Period.";
                        break;
                    }
                    flag2 = true;
                }
                else if (c == ' ' || c == '(' || c == ')')
                {
                    flag5 = true;
                    if (flag3 && (str == "and" || str == "or"))
                    {
                        flag3 = false;
                        flag4 = true;
                    }
                    if (scriptStatement1.data == null)
                    {
                        if (flag3)
                        {
                            scriptStatement1.data = (object)str;
                        }
                        else if (flag2)
                        {
                            scriptStatement1.data = (object)Change.ToSingle((object)str);
                        }
                        else if (flag1)
                        {
                            scriptStatement1.data = (object)Convert.ToInt32(str);
                        }
                    }
                    if (flag4)
                    {
                        if (str == "+")
                        {
                            operat1 = ScriptOperator.Plus;
                        }
                        else if (str == "-")
                        {
                            operat1 = ScriptOperator.Minus;
                        }
                        else if (str == "*")
                        {
                            operat1 = ScriptOperator.Multiply;
                        }
                        else if (str == "/")
                        {
                            operat1 = ScriptOperator.Divide;
                        }
                        else if (str == "==")
                        {
                            operat1 = ScriptOperator.IsEqual;
                        }
                        else if (str == "!=")
                        {
                            operat1 = ScriptOperator.IsNotEqual;
                        }
                        else if (str == ">")
                        {
                            operat1 = ScriptOperator.GreaterThan;
                        }
                        else if (str == "<")
                        {
                            operat1 = ScriptOperator.LessThan;
                        }
                        else if (str == "&&")
                        {
                            operat1 = ScriptOperator.And;
                        }
                        else if (str == "and")
                        {
                            operat1 = ScriptOperator.And;
                        }
                        else if (str == "or")
                        {
                            operat1 = ScriptOperator.Or;
                        }
                        if (scriptStatement1.op == ScriptOperator.None)
                        {
                            scriptStatement1.op = operat1;
                        }
                    }
                    switch (c)
                    {
                    case '(':
                        ScriptStatement scriptStatement2 = ScriptStatement.Parse(statement, func: (flag3 ? str : (string)null), isChild: true);
                        statement = scriptStatement2.remainingStatementString;
                        if (scriptStatement2.error != null)
                        {
                            scriptStatement1.error = scriptStatement2.error;
                            goto label_76;
                        }
                        else
                        {
                            scriptStatement1.data = (object)scriptStatement2;
                            break;
                        }

                    case ')':
                        --num;
                        break;
                    }
                    if (scriptStatement1.data != null)
                    {
                        object obj = scriptStatement1.data;
                        scriptStatement1.data = (object)null;
                        if (operat1 > ScriptOperator.COMPARATORS)
                        {
                            ScriptStatement scriptStatement3 = ScriptStatement.Parse(statement, obj, isChild: true);
                            obj       = (object)scriptStatement3;
                            statement = scriptStatement3.remainingStatementString;
                        }
                        if (scriptStatement1.leftObject == null)
                        {
                            scriptStatement1.leftObject = obj;
                        }
                        else
                        {
                            if (scriptStatement1.rightObject != null)
                            {
                                return(ScriptStatement.Parse(statement, (object)scriptStatement1, obj, operat1, isChild: true));
                            }
                            scriptStatement1.rightObject = obj;
                        }
                    }
                    str   = "";
                    flag3 = false;
                    flag2 = false;
                    flag1 = false;
                    flag4 = false;
                    if (num <= 0)
                    {
                        break;
                    }
                }
                else if (!flag3 && c == '+' || (c == '-' || c == '*') || (c == '/' || c == '=' || (c == '<' || c == '!')) || (c == '>' || c == '&'))
                {
                    if (str.Length > 0 && !flag4)
                    {
                        scriptStatement1.error = "Found unexpected operator.";
                        break;
                    }
                    flag4 = true;
                }
                else if (c == '"')
                {
                    flag5 = true;
                    flag3 = true;
                }
                else
                {
                    if (str.Length > 0 && !flag3)
                    {
                        scriptStatement1.error = "Found unexpected letter.";
                        break;
                    }
                    flag3 = true;
                }
                if (!flag5)
                {
                    str += (string)(object)c;
                }
                flag5 = false;
            }
label_76:
            scriptStatement1.remainingStatementString = statement;
            return(scriptStatement1);
        }