Esempio n. 1
0
        public void Load(string fname, Stream stream)
        {
            using (var reader = new SrcDataReader(fname, stream))
            {
                string line_buf = "";
                while (reader.HasMore)
                {
                    line_buf = reader.GetLine();
                    while (reader.HasMore && string.IsNullOrEmpty(line_buf))
                    {
                        line_buf = reader.GetLine();
                    }

                    // パイロット名一覧
                    var pilot_list = GeneralLib.LNormalize(line_buf);
                    if (IsDefined(pilot_list))
                    {
                        Delete(pilot_list);
                    }


                    DialogData dd = Add(pilot_list);
                    line_buf = reader.GetLine();
                    while (reader.HasMore && Strings.Len(line_buf) > 0)
                    {
                        // シチューション
                        var d = dd.AddDialog(line_buf);
                        while (reader.HasMore)
                        {
                            line_buf = reader.GetLine();

                            // 話者
                            var ret = Strings.InStr(line_buf, ",");
                            if (ret == 0)
                            {
                                // 次のシチュエーションないしダイアログ
                                break;
                            }

                            var pname = Strings.Left(line_buf, ret - 1);

                            // 指定した話者のデータが存在するかチェック。
                            // ただし合体技のパートナーは場合は他の作品のパイロットであることも
                            // あるので話者チェックを行わない。
                            if (Strings.Left(pname, 1) != "@")
                            {
                                if (!SRC.PDList.IsDefined(pname) && !SRC.NPDList.IsDefined(pname) && pname != "システム")
                                {
                                    throw reader.InvalidDataException("パイロット「" + pname + "」が定義されていません。", pilot_list);
                                }
                            }

                            // メッセージ
                            if (Strings.Len(line_buf) == ret)
                            {
                                throw reader.InvalidDataException("メッセージが定義されていません。", pilot_list);
                            }

                            var msg = Strings.Trim(Strings.Mid(line_buf, ret + 1));
                            d.AddMessage(pname, msg);
                        }
                    }
                }
            }
        }