예제 #1
0
        public static Parser.Error parse_a_p(Parser p)
        {
            Artifact a = p.priv as Artifact;
            random_value hd = p.getrand("hd");
            Misc.assert(a != null);

            a.ac = (short)p.getint("ac");
            a.dd = (byte)hd.dice;
            a.ds = (byte)hd.sides;
            a.to_h = (short)p.getint("to-h");
            a.to_d = (short)p.getint("to-d");
            a.to_a = (short)p.getint("to-a");
            return Parser.Error.NONE;
        }
예제 #2
0
        public static Parser.Error parse_r_b(Parser p)
        {
            Monster_Race r = p.priv as Monster_Race;
            int i;
            random_value dam;

            if (r == null)
                return Parser.Error.MISSING_RECORD_HEADER;
            for (i = 0; i < Monster_Blow.MONSTER_BLOW_MAX; i++)
                //used to check .method
                if (r.blow[i] == null)
                    break;
            if (i == Monster_Blow.MONSTER_BLOW_MAX)
                return Parser.Error.TOO_MANY_ENTRIES;

            r.blow[i] = new Monster_Blow();
            r.blow[i].method = find_blow_method(p.getsym("method"));
            if (r.blow[i].method == null)
                return Parser.Error.UNRECOGNISED_BLOW;
            if (p.hasval("effect")) {
                r.blow[i].effect = find_blow_effect(p.getsym("effect"));
                if (r.blow[i].effect == null)
                    return Parser.Error.INVALID_EFFECT;
            }
            if (p.hasval("damage")) {
                dam = p.getrand("damage");
                r.blow[i].d_dice = (byte)dam.dice;
                r.blow[i].d_side = (byte)dam.sides;
            }

            return Parser.Error.NONE;
        }
예제 #3
0
        public static Parser.Error parse_a_e(Parser p)
        {
            Artifact a = p.priv as Artifact;
            Misc.assert(a != null);

            a.effect = grab_one_effect(p.getsym("name"));
            a.time = p.getrand("time");
            if (a.effect == null)
                return Parser.Error.GENERIC;
            return Parser.Error.NONE;
        }
예제 #4
0
        public static Parser.Error parse_k_m(Parser p)
        {
            Object_Kind k = p.priv as Object_Kind;
            Misc.assert(k != null);

            k.gen_mult_prob = (byte)p.getint("prob");
            k.stack_size = (random_value)p.getrand("stack");
            return Parser.Error.NONE;
        }
예제 #5
0
        public static Parser.Error parse_k_p(Parser p)
        {
            Object_Kind k = p.priv as Object_Kind;
            Misc.assert(k != null);

            random_value hd = p.getrand("hd");

            k.ac = (byte)p.getint("ac");
            k.dd = (byte)hd.dice;
            k.ds = (byte)hd.sides;
            k.to_h = p.getrand("to-h");
            k.to_d = p.getrand("to-d");
            k.to_a = p.getrand("to-a");
            return Parser.Error.NONE;
        }
예제 #6
0
        public static Parser.Error parse_k_l(Parser p)
        {
            Object_Kind k = p.priv as Object_Kind;
            Misc.assert(k != null);

            k.pval[k.num_pvals] = p.getrand("pval");

            if (!p.hasval("flags")) {
                k.num_pvals++;
                return Parser.Error.NONE;
            }

            string s = p.getstr("flags");
            //return grab_flag_helper(s, k.pval_flags[k.num_pvals]);

            string[] t = s.Split(new string[] { " ", "|" }, StringSplitOptions.RemoveEmptyEntries);
            string temp;
            foreach(string token in t) {
                temp = token;
                if(grab_flag(k.flags, Object_Flag.list, token) != Parser.Error.NONE ||
                    grab_flag(k.pval_flags[k.num_pvals], Object_Flag.list, token) != Parser.Error.NONE) {

                    return Parser.Error.INVALID_FLAG;
                }
            }

            k.num_pvals++;
            if (k.num_pvals > Misc.MAX_PVALS)
                return Parser.Error.TOO_MANY_ENTRIES;

            return Parser.Error.NONE;

            //t = strtok(s, " |");

            //while (t) {
            //    if (grab_flag(k.flags, OF_SIZE, k_info_flags, t) ||
            //        grab_flag(k.pval_flags[k.num_pvals], OF_SIZE, k_info_flags, t))
            //        break;

            //    t = strtok(null, " |");
            //}

            //k.num_pvals++;
            //if (k.num_pvals > MAX_PVALS)
            //    return Parser.Error.TOO_MANY_ENTRIES;

            //mem_free(s);
            //return t ? Parser.Error.INVALID_FLAG : Parser.Error.NONE;
        }
예제 #7
0
        public static Parser.Error parse_k_e(Parser p)
        {
            Object_Kind k = p.priv as Object_Kind;
            Misc.assert(k != null);

            k.effect = grab_one_effect(p.getsym("name"));
            if (p.hasval("time"))
                k.time = p.getrand("time");
            if (k.effect == null)
                return Parser.Error.GENERIC;
            return Parser.Error.NONE;
        }
예제 #8
0
        public static Parser.Error parse_k_c(Parser p)
        {
            Object_Kind k = p.priv as Object_Kind;
            Misc.assert(k != null);

            k.charge = p.getrand("charges");
            return Parser.Error.NONE;
        }
예제 #9
0
        public static Parser.Error parse_e_l(Parser p)
        {
            Ego_Item e = p.priv as Ego_Item;

            if (e == null)
                return Parser.Error.MISSING_RECORD_HEADER;
            if (!p.hasval("flags"))
                return Parser.Error.MISSING_FIELD;

            e.pval[e.num_pvals] = p.getrand("pval");
            e.min_pval[e.num_pvals] = (byte)p.getint("min");

            string s = p.getstr("flags");

            return grab_flag_helper2(s, e);
            /*t = strtok(s, " |");

            while (t) {
                if (grab_flag(e.flags, OF_SIZE, k_info_flags, t) ||
                    grab_flag(e.pval_flags[e.num_pvals], OF_SIZE, k_info_flags, t))
                    break;

                t = strtok(null, " |");
            }

            e.num_pvals++;
            if (e.num_pvals > MAX_PVALS)
                return Parser.Error.TOO_MANY_ENTRIES;

            mem_free(s);
            return t ? Parser.Error.INVALID_FLAG : Parser.Error.NONE;*/
        }
예제 #10
0
        public static Parser.Error parse_e_c(Parser p)
        {
            random_value th = p.getrand("th");
            random_value td = p.getrand("td");
            random_value ta = p.getrand("ta");
            Ego_Item e = p.priv as Ego_Item;

            if (e == null)
                return Parser.Error.MISSING_RECORD_HEADER;

            e.to_h = th;
            e.to_d = td;
            e.to_a = ta;

            return Parser.Error.NONE;
        }