Beispiel #1
0
 public static bool a(aj.a A_0, string A_1, cv A_2, out bool A_3)
 {
     try
     {
         dk.d = true;
         b    = A_0;
         c    = A_2;
         dk.a a = dk.a(A_1);
         if (a.a == dk.b.b)
         {
             A_3 = dk.d;
             return(!(a.c == 0.0));
         }
         A_3 = dk.d;
         return(A_0.a.Trim().Equals(a.b.Trim(), StringComparison.OrdinalIgnoreCase));
     }
     catch (dk.d d)
     {
         ai.a("Parse error in monster spec: \"" + A_1 + "\", ignoring entry (" + d.Message + ").");
         A_3 = true;
         return(false);
     }
     catch
     {
         ai.a("Unspecified error in monster spec: \"" + A_1 + "\", ignoring entry.");
         A_3 = true;
         return(false);
     }
 }
Beispiel #2
0
    private static dk.a a(string A_0)
    {
        if (A_0.Length == 0)
        {
            return(new dk.a(dk.b.b, 0.0));
        }
        Queue <dk.a> queue = new Queue <dk.a>();

        dk.b b          = dk.b.a;
        bool flag       = false;
        int  startIndex = -1;

        for (int i = 0; i < A_0.Length; i++)
        {
            dk.b c = dk.b.c;
            if (flag)
            {
                flag = false;
            }
            else
            {
                if (A_0[i] == '\\')
                {
                    flag = true;
                    continue;
                }
                if (e.ContainsKey(A_0[i]))
                {
                    c = e[A_0[i]];
                }
                if (char.IsWhiteSpace(A_0[i]))
                {
                    continue;
                }
            }
            if (((c != b) || (b == dk.b.e)) || (b == dk.b.f))
            {
                if (b != dk.b.a)
                {
                    queue.Enqueue(new dk.a(b, A_0.Substring(startIndex, i - startIndex).Trim()));
                }
                b          = c;
                startIndex = i;
            }
        }
        queue.Enqueue(new dk.a(b, A_0.Substring(startIndex, A_0.Length - startIndex).Trim()));
        Queue <dk.a> queue2 = new Queue <dk.a>();

        while (queue.Count > 0)
        {
            dk.a item = queue.Dequeue();
            switch (item.a)
            {
            case dk.b.b:
                item.c = double.Parse(item.b.Trim(), CultureInfo.InvariantCulture);
                break;

            case dk.b.c:
                dk.a a2;
                if (a(item.b, out a2))
                {
                    item = a2;
                }
                break;
            }
            queue2.Enqueue(item);
        }
        Queue <dk.a> queue3 = new Queue <dk.a>();
        Stack <dk.a> stack  = new Stack <dk.a>();

        while (queue2.Count > 0)
        {
            int  num3;
            dk.a a3 = queue2.Dequeue();
            switch (a3.a)
            {
            case dk.b.b:
            {
                queue3.Enqueue(a3);
                continue;
            }

            case dk.b.c:
            {
                queue3.Enqueue(a3);
                continue;
            }

            case dk.b.d:
                num3 = a3.a();
                goto Label_0210;

            case dk.b.e:
            {
                stack.Push(a3);
                continue;
            }

            case dk.b.f:
                break;

            default:
            {
                continue;
            }
            }
            while (true)
            {
                if (stack.Count == 0)
                {
                    throw new dk.d("No matching '(' found");
                }
                dk.a a4 = stack.Pop();
                if (a4.a != dk.b.e)
                {
                    queue3.Enqueue(a4);
                }
            }
Label_0202:
            queue3.Enqueue(stack.Pop());
Label_0210:
            if (((stack.Count > 0) && (stack.Peek().a == dk.b.d)) && (num3 <= stack.Peek().a()))
            {
                goto Label_0202;
            }
            stack.Push(a3);
        }
        while (stack.Count > 0)
        {
            dk.a a5 = stack.Pop();
            if (a5.a == dk.b.f)
            {
                throw new dk.d("No matching '(' found");
            }
            if (a5.a == dk.b.e)
            {
                throw new dk.d("No matching ')' found");
            }
            queue3.Enqueue(a5);
        }
        while (queue3.Count > 0)
        {
            dk.a a6 = queue3.Dequeue();
            switch (a6.a)
            {
            case dk.b.b:
            case dk.b.c:
                stack.Push(a6);
                break;

            case dk.b.d:
            {
                dk.a a7 = stack.Pop();
                dk.a a8 = stack.Pop();
                stack.Push(a(a8, a7, a6));
                break;
            }
            }
        }
        if (stack.Count == 0)
        {
            throw new dk.d("No operands");
        }
        if (stack.Count > 1)
        {
            throw new dk.d("Operand without intervening operator");
        }
        return(stack.Pop());
    }
Beispiel #3
0
    private static dk.a a(dk.a A_0, dk.a A_1, dk.a A_2)
    {
        if ((A_0.a != dk.b.b) || (A_1.a != dk.b.b))
        {
            if ((A_0.a != dk.b.c) || (A_1.a != dk.b.c))
            {
                throw new dk.d("Attempted to compare two disperate types");
            }
            string key = A_2.b;
            if (key != null)
            {
                int num5;
                if (bx.h == null)
                {
                    Dictionary <string, int> dictionary2 = new Dictionary <string, int>(9);
                    dictionary2.Add("==", 0);
                    dictionary2.Add("<", 1);
                    dictionary2.Add(">", 2);
                    dictionary2.Add(">=", 3);
                    dictionary2.Add("<=", 4);
                    dictionary2.Add("!=", 5);
                    dictionary2.Add("+", 6);
                    dictionary2.Add("-", 7);
                    dictionary2.Add("#", 8);
                    bx.h = dictionary2;
                }
                if (bx.h.TryGetValue(key, out num5))
                {
                    switch (num5)
                    {
                    case 0:
                        if (string.Compare(A_0.b, A_1.b, StringComparison.OrdinalIgnoreCase) != 0)
                        {
                            return(new dk.a(dk.b.b, 0.0));
                        }
                        return(new dk.a(dk.b.b, 1.0));

                    case 1:
                        if (string.Compare(A_0.b, A_1.b, StringComparison.OrdinalIgnoreCase) >= 0)
                        {
                            return(new dk.a(dk.b.b, 0.0));
                        }
                        return(new dk.a(dk.b.b, 1.0));

                    case 2:
                        if (string.Compare(A_0.b, A_1.b, StringComparison.OrdinalIgnoreCase) <= 0)
                        {
                            return(new dk.a(dk.b.b, 0.0));
                        }
                        return(new dk.a(dk.b.b, 1.0));

                    case 3:
                        if (string.Compare(A_0.b, A_1.b, StringComparison.OrdinalIgnoreCase) < 0)
                        {
                            return(new dk.a(dk.b.b, 0.0));
                        }
                        return(new dk.a(dk.b.b, 1.0));

                    case 4:
                        if (string.Compare(A_0.b, A_1.b, StringComparison.OrdinalIgnoreCase) > 0)
                        {
                            return(new dk.a(dk.b.b, 0.0));
                        }
                        return(new dk.a(dk.b.b, 1.0));

                    case 5:
                        if (string.Compare(A_0.b, A_1.b, StringComparison.OrdinalIgnoreCase) == 0)
                        {
                            return(new dk.a(dk.b.b, 0.0));
                        }
                        return(new dk.a(dk.b.b, 1.0));

                    case 6:
                        return(new dk.a(dk.b.c, A_0.b + A_1.b));

                    case 7:
                        return(new dk.a(dk.b.c, A_0.b + "-" + A_1.b));

                    case 8:
                    {
                        Regex regex = new Regex(A_1.b, RegexOptions.IgnoreCase);
                        if (!regex.IsMatch(A_0.b))
                        {
                            return(new dk.a(dk.b.b, 0.0));
                        }
                        return(new dk.a(dk.b.b, 1.0));
                    }
                    }
                }
            }
            throw new dk.d("Invalid operator '" + A_2.b + "' for 'String'");
        }
        double c    = A_0.c;
        double num2 = A_1.c;
        string b    = A_2.b;

        if (b != null)
        {
            int num4;
            if (bx.g == null)
            {
                Dictionary <string, int> dictionary1 = new Dictionary <string, int>(13);
                dictionary1.Add("&&", 0);
                dictionary1.Add("||", 1);
                dictionary1.Add("==", 2);
                dictionary1.Add("<", 3);
                dictionary1.Add(">", 4);
                dictionary1.Add(">=", 5);
                dictionary1.Add("<=", 6);
                dictionary1.Add("!=", 7);
                dictionary1.Add("+", 8);
                dictionary1.Add("-", 9);
                dictionary1.Add("*", 10);
                dictionary1.Add("/", 11);
                dictionary1.Add("%", 12);
                bx.g = dictionary1;
            }
            if (bx.g.TryGetValue(b, out num4))
            {
                switch (num4)
                {
                case 0:
                    if ((c == 0.0) || (num2 == 0.0))
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 1:
                    if ((c == 0.0) && (num2 == 0.0))
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 2:
                    if (c != num2)
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 3:
                    if (c >= num2)
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 4:
                    if (c <= num2)
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 5:
                    if (c < num2)
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 6:
                    if (c > num2)
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 7:
                    if (c == num2)
                    {
                        return(new dk.a(dk.b.b, 0.0));
                    }
                    return(new dk.a(dk.b.b, 1.0));

                case 8:
                    return(new dk.a(dk.b.b, c + num2));

                case 9:
                    return(new dk.a(dk.b.b, c - num2));

                case 10:
                    return(new dk.a(dk.b.b, c * num2));

                case 11:
                    return(new dk.a(dk.b.b, c / num2));

                case 12:
                    return(new dk.a(dk.b.b, (double)(((int)c) % ((int)num2))));
                }
            }
        }
        throw new dk.d("Invalid operator '" + A_2.b + "' for 'Number'");
    }
Beispiel #4
0
    private static bool a(string A_0, out dk.a A_1)
    {
        string key = A_0.ToLowerInvariant().Trim();

        if (A_0.StartsWith("setting_"))
        {
            PluginCore.cq.d.a(A_0);
            k    k    = er.d(A_0.Substring(8));
            Type type = k.c().GetType();
            if (type == typeof(int))
            {
                A_1 = new dk.a(dk.b.b, (double)((int)k.c()));
                return(true);
            }
            if (type == typeof(double))
            {
                A_1 = new dk.a(dk.b.b, (double)k.c());
                return(true);
            }
            if (type == typeof(bool))
            {
                double num;
                if ((bool)k.c())
                {
                    num = 1.0;
                }
                else
                {
                    num = 0.0;
                }
                A_1 = new dk.a(dk.b.b, num);
                return(true);
            }
            if (type == typeof(string))
            {
                A_1 = new dk.a(dk.b.c, (string)k.c());
                return(true);
            }
            A_1 = new dk.a(dk.b.b, 0.0);
            return(true);
        }
        if (a.ContainsKey(key))
        {
            object obj2 = a[key](c);
            if (obj2 == null)
            {
                A_1 = new dk.a(dk.b.b, 0.0);
                return(true);
            }
            if (obj2.GetType() == typeof(double))
            {
                A_1 = new dk.a(dk.b.b, (double)obj2);
                return(true);
            }
            if (obj2.GetType() == typeof(int))
            {
                A_1 = new dk.a(dk.b.b, (double)((int)obj2));
                return(true);
            }
            if (obj2.GetType() == typeof(string))
            {
                A_1 = new dk.a(dk.b.c, (string)obj2);
                return(true);
            }
            A_1 = new dk.a(dk.b.b, 0.0);
            return(true);
        }
        A_1 = new dk.a(dk.b.b, 0.0);
        return(false);
    }