コード例 #1
0
        /// <summary>
        /// Parser for .definition files, constructor parses all .definition files in Definitions folder
        /// </summary>
        public DefinitionParser(Regex searchPattern)
        {
            instance = this;
            DirectoryInfo d = new DirectoryInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "Definitions");

            FileInfo[] filesPresent = d.GetFiles("*.definition", SearchOption.AllDirectories).Where(path => searchPattern.IsMatch(path.Name)).ToArray();
            if (filesPresent.Length == 0)
            {
                throw new CustomException("Your program is missing voice recognition strings! Either redownload, or create your own *.definition text file.");
            }

            List <int> Mob_indexes = new List <int>();
            List <DefinitionParserData> definitions = new List <DefinitionParserData>();

            for (int i = 0; i < filesPresent.Length; i++)
            {
                if (filesPresent[i].Name.StartsWith("Mob_"))
                {
                    Mob_indexes.Add(i);
                    continue;
                }

                using (StreamReader s = filesPresent[i].OpenText()) {
                    DefinitionParserData data = new DefinitionParserData(filesPresent[i].Name.Split('.')[0], ParseHeader(s), ParseEntries(s));
                    data.ConstructGrammar();
                    definitions.Add(data);
                }
            }

            getDefinitions = definitions.ToArray();

            if (Mob_indexes.Count != 0)
            {
                getMobDefinitions = new MobParserData().Parse(d);
                for (int i = 0; i < getMobDefinitions.Length; i++)
                {
                    for (int j = 0; j < getDefinitions.Length; j++)
                    {
                        if (getMobDefinitions[i].ID == "Mob_" + getDefinitions[j].ID)
                        {
                            getDefinitions[j].hasEnemyCompanionGrammar = true;
                        }
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Parses all mob files that exists in current folder
        /// </summary>
        public MobParserData[] Parse(DirectoryInfo dir)
        {
            List <MobParserData> dataList = new List <MobParserData>();
            List <Enemy>         mobs     = new List <Enemy>();

            FileInfo[] mobFiles = dir.GetFiles("Mob_*.definition");
            for (int i = 0; i < mobFiles.Length; i++)
            {
                using (StreamReader sr = mobFiles[i].OpenText()) {
                    MobParserData data = new MobParserData()
                    {
                        ID = mobFiles[i].Name.Split('.')[0],
                    };
                    while (!sr.EndOfStream)
                    {
                        string line = sr.ReadLine();
                        if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#"))
                        {
                            continue;
                        }
                        string[] split = line.Split(',');
                        string[] same  = split[0].Split('/');
                        for (int j = 0; j < same.Length; j++)
                        {
                            same[j] = same[j].Trim(' ');
                        }
                        for (int k = 0; k < split.Length; k++)
                        {
                            split[k] = split[k].Trim(' ');
                        }
                        Enemy parsed = new Enemy(same[0],
                                                 same.Where(a => a != same[0]).ToArray(),
                                                 ushort.Parse(split[1]),
                                                 GetAsociatedDrops(same[0]),
                                                 ParseClass(split[2]));
                        mobs.Add(parsed);
                    }
                    data.enemies = mobs.ToArray();
                    data.grammar = ConstructGrammar(data.enemies);
                    dataList.Add(data);
                }
            }
            return(dataList.ToArray());
        }