Beispiel #1
0
        // 特殊能力を追加
        public void AddSkill(string sname, double slevel, string sdata, int lv)
        {
            // データ定義が省略されている場合は前回と同じ物を使う
            if ((last_sname ?? "") == (sname ?? "") && Strings.Len(sdata) == 0)
            {
                sdata = last_sdata;
            }
            last_sname = sname;
            last_sdata = sdata;

            // エリアスが定義されている?
            if (SRC.ALDList.IsDefined(sname))
            {
                if (GeneralLib.LIndex(sdata, 1) != "解説")
                {
                    RegisterAlias(sname, slevel, sdata, lv);
                    return;
                }
            }

            // 特殊能力を登録
            {
                var sd = new SkillData();
                sd.Name           = sname;
                sd.Level          = slevel;
                sd.StrData        = sdata;
                sd.NecessaryLevel = lv;
                colSkill.Add(sd, sname + SrcFormatter.Format(colSkill.Count));
            }
        }
Beispiel #2
0
        // 地形効果を追加
        public void AddFeature(string fdef)
        {
            FeatureData fd;
            string      ftype, fdata = default;
            double      flevel;
            int         i, j;
            string      buf;

            buf = fdef;

            // 地形効果の種類、レベル、データを切り出し
            flevel = Constants.DEFAULT_LEVEL;
            i      = Strings.InStr(buf, "Lv");
            j      = Strings.InStr(buf, "=");
            if (i > 0 && j > 0 && i > j)
            {
                i = 0;
            }

            if (i > 0)
            {
                ftype = Strings.Left(buf, i - 1);
                if (j > 0)
                {
                    flevel = Conversions.ToDouble(Strings.Mid(buf, i + 2, j - (i + 2)));
                    fdata  = Strings.Mid(buf, j + 1);
                }
                else
                {
                    flevel = Conversions.ToDouble(Strings.Mid(buf, i + 2));
                }
            }
            else if (j > 0)
            {
                ftype = Strings.Left(buf, j - 1);
                fdata = Strings.Mid(buf, j + 1);
            }
            else
            {
                ftype = buf;
            }

            // 地形効果を登録
            fd         = new FeatureData();
            fd.Name    = ftype;
            fd.Level   = flevel;
            fd.StrData = fdata;
            if (IsFeatureAvailable(ftype))
            {
                colFeature.Add(fd, ftype + SrcFormatter.Format(CountFeature()));
            }
            else
            {
                colFeature.Add(fd, ftype);
            }
        }
Beispiel #3
0
        private void AddDummyData()
        {
            var pd = new PilotData(SRC);

            // ユニットステータスコマンドの無人ユニット用
            pd.Name     = "ステータス表示用ダミーパイロット(ザコ)";
            pd.Nickname = "パイロット不在";
            pd.Adaption = "AAAA";
            pd.Bitmap   = ".bmp";
            colPilotDataList.Add(pd, pd.Name);
        }
Beispiel #4
0
        public NonPilotDataList(SRC src)
        {
            SRC = src;
            // Talkコマンド用
            var npd = new NonPilotData();

            npd.Name     = "ナレーター";
            npd.Nickname = "ナレーター";
            npd.Bitmap   = ".bmp";
            colNonPilotDataList.Add(npd, npd.Name);
        }
Beispiel #5
0
        private void AddDummyData()
        {
            var ud = new UnitData();

            ud.Name           = "ステータス表示用ダミーユニット";
            ud.Nickname       = "ユニット無し";
            ud.PilotNum       = 1;
            ud.Transportation = "陸";
            ud.Adaption       = "AAAA";
            ud.Bitmap         = ".bmp";
            ud.AddFeature("ダミーユニット=システム用非表示能力");
            colUnitDataList.Add(ud, ud.Name);
        }
Beispiel #6
0
        // バトルコンフィグデータリストにデータを追加
        public BattleConfigData Add(string cname)
        {
            var cd = new BattleConfigData(SRC);

            cd.Name = cname;
            colBattleConfigData.Add(cd, cname);
            return(cd);
        }
Beispiel #7
0
        // エリアスデータリストにデータを追加
        public AliasDataType Add(string aname)
        {
            var ad = new AliasDataType();

            ad.Name = aname;
            colAliasDataList.Add(ad, aname);
            return(ad);
        }
Beispiel #8
0
        // メッセージデータの追加
        public MessageData Add(string mname)
        {
            var new_md = new MessageData(SRC);

            new_md.Name = mname;
            colMessageDataList.Add(new_md, mname);
            return(new_md);
        }
Beispiel #9
0
        // スペシャルパワーデータリストにデータを追加
        public SpecialPowerData Add(string sname)
        {
            var new_data = new SpecialPowerData(SRC);

            new_data.Name = sname;
            colSpecialPowerDataList.Add(new_data, sname);
            return(new_data);
        }
Beispiel #10
0
        // アイテムデータリストにデータを追加
        public ItemData Add(string new_name)
        {
            var new_Item_data = new ItemData();

            new_Item_data.Name = new_name;
            colItemDataList.Add(new_Item_data, new_name);
            return(new_Item_data);
        }
Beispiel #11
0
        // ダイアログデータを追加
        public DialogData Add(string dname)
        {
            var new_dd = new DialogData(SRC);

            new_dd.Name = dname;
            colDialogDataList.Add(new_dd, dname);
            return(new_dd);
        }
Beispiel #12
0
        // リストにアイテムを追加
        public Item Add(string Name)
        {
            if (!SRC.IDList.IsDefined(Name))
            {
                return(null);
            }

            var new_item = new Item(SRC);

            new_item.Name = Name;
            new_item.ID   = CreateID(Name);
            colItems.Add(new_item, new_item.ID);
            return(new_item);
        }
Beispiel #13
0
        // アビリティに効果を追加
        public void SetEffect(string elist)
        {
            elist = (elist ?? "").Trim();
            foreach (var eelm in GeneralLib.ToList(elist))
            {
                var    dat = new AbilityEffect();
                var    buf = eelm;
                var    j   = Strings.InStr(buf, "Lv");
                var    k   = Strings.InStr(buf, "=");
                string etype;
                string elevel;
                string edata;
                if (j > 0 && (k == 0 || j < k))
                {
                    // レベル指定のある効果(データ指定があるものを含む)
                    dat.Name = Strings.Left(buf, j - 1);
                    if (k > 0)
                    {
                        // データ指定があるもの
                        dat.Level = Conversions.ToDouble(Strings.Mid(buf, j + 2, k - (j + 2)));
                        buf       = Strings.Mid(buf, k + 1);
                        if (Strings.Left(buf, 1) == "\"")
                        {
                            buf = Strings.Mid(buf, 2, Strings.Len(buf) - 2);
                        }

                        j = Strings.InStr(buf, "Lv");
                        k = Strings.InStr(buf, "=");
                        if (j > 0 && (k == 0 || j < k))
                        {
                            // データ指定内にレベル指定がある
                            etype = Strings.Left(buf, j - 1);
                            if (k > 0)
                            {
                                elevel = Strings.Mid(buf, j + 2, k - (j + 2));
                                edata  = Strings.Mid(buf, k + 1);
                            }
                            else
                            {
                                elevel = Strings.Mid(buf, j + 2);
                                edata  = "";
                            }
                        }
                        else if (k > 0)
                        {
                            // データ指定内にデータ指定がある
                            etype  = Strings.Left(buf, k - 1);
                            elevel = "";
                            edata  = Strings.Mid(buf, k + 1);
                        }
                        else
                        {
                            // 単純なデータ指定
                            etype  = buf;
                            elevel = "";
                            edata  = "";
                        }

                        if (dat.Name == "付加" && string.IsNullOrEmpty(elevel))
                        {
                            elevel = SrcFormatter.Format(Constants.DEFAULT_LEVEL);
                        }

                        dat.Data = Strings.Trim(etype + " " + elevel + " " + edata);
                    }
                    else
                    {
                        // データ指定がないもの
                        dat.Level = Conversions.ToDouble(Strings.Mid(buf, j + 2));
                    }
                }
                else if (k > 0)
                {
                    // データ指定を含む効果
                    dat.Name = Strings.Left(buf, k - 1);
                    buf      = Strings.Mid(buf, k + 1);
                    if (Strings.Asc(buf) == 34) // "
                    {
                        buf = Strings.Mid(buf, 2, Strings.Len(buf) - 2);
                    }

                    j = Strings.InStr(buf, "Lv");
                    k = Strings.InStr(buf, "=");
                    if (dat.Name == "解説")
                    {
                        // 解説の指定
                        etype  = buf;
                        elevel = "";
                        edata  = "";
                    }
                    else if (j > 0)
                    {
                        // データ指定内にレベル指定がある
                        etype = Strings.Left(buf, j - 1);
                        if (k > 0)
                        {
                            elevel = Strings.Mid(buf, j + 2, k - (j + 2));
                            edata  = Strings.Mid(buf, k + 1);
                        }
                        else
                        {
                            elevel = Strings.Mid(buf, j + 2);
                            edata  = "";
                        }
                    }
                    else if (k > 0)
                    {
                        // データ指定内にデータ指定がある
                        etype  = Strings.Left(buf, k - 1);
                        elevel = "";
                        edata  = Strings.Mid(buf, k + 1);
                    }
                    else
                    {
                        // 単純なデータ指定
                        etype  = buf;
                        elevel = "";
                        edata  = "";
                    }

                    if (dat.Name == "付加" && string.IsNullOrEmpty(elevel))
                    {
                        elevel = SrcFormatter.Format(Constants.DEFAULT_LEVEL);
                    }

                    dat.Data = Strings.Trim(etype + " " + elevel + " " + edata);
                }
                else
                {
                    // 効果名のみ
                    dat.Name = buf;
                }

                j = 1;
                foreach (AbilityEffect dat2 in colEffects)
                {
                    if ((dat.Name ?? "") == (dat2.Name ?? ""))
                    {
                        j = (j + 1);
                    }
                }

                if (j == 1)
                {
                    colEffects.Add(dat, dat.Name);
                }
                else
                {
                    colEffects.Add(dat, dat.Name + SrcFormatter.Format(j));
                }
            }
        }
Beispiel #14
0
        // パイロットを追加
        public Pilot Add(string pname, int plevel, string pparty, string gid = null)
        {
            Pilot  AddRet = default;
            string key;
            int    i;

            var new_pilot = new Pilot(SRC, SRC.PDList.Item(pname));

            new_pilot.Level = plevel;
            new_pilot.Party = pparty;
            new_pilot.FullRecover();
            new_pilot.Alive = true;
            new_pilot.Unit  = null;
            if (string.IsNullOrEmpty(gid))
            {
                // グループIDが指定されていない場合
                if (Strings.InStr(new_pilot.Name, "(ザコ)") == 0 && Strings.InStr(new_pilot.Name, "(汎用)") == 0)
                {
                    key = new_pilot.Name;
                    if (SRC.PList.IsDefined2(key))
                    {
                        var p = SRC.PList.Item2(key);

                        if ((p.ID ?? "") == (key ?? ""))
                        {
                            // 一度作成されたパイロットを復活させる場合
                            if (!p.Alive)
                            {
                                p.Level = plevel;
                                p.Party = pparty;
                                p.FullRecover();
                                p.Alive = true;

                                return(p);
                            }

                            GUI.ErrorMessage(key + "というパイロットは既に登録されています");
                            return(null);
                        }
                    }
                }
                else
                {
                    i = colPilots.Count;
                    do
                    {
                        i   = (i + 1);
                        key = new_pilot.Name + "_" + SrcFormatter.Format(i);
                    }while (SRC.PList.IsDefined2(key));
                }
            }
            else
            {
                // グループIDが指定されている場合
                key = gid;
                i   = 1;
                while (SRC.PList.IsDefined2(key))
                {
                    i   = (i + 1);
                    key = gid + ":" + SrcFormatter.Format(i);
                }
            }

            new_pilot.ID = key;
            colPilots.Add(new_pilot, key);
            return(new_pilot);
        }
Beispiel #15
0
Datei: Units.cs Projekt: 7474/SRC
        // ユニットリストに新しいユニットを追加
        public Unit Add(string uname, int urank, string uparty)
        {
            // ユニットデータが定義されている?
            if (!SRC.UDList.IsDefined(uname))
            {
                return(null);
            }

            var ud       = SRC.UDList.Item(uname);
            var new_unit = new Unit(SRC)
            {
                Name  = ud.Name,
                Rank  = urank,
                Party = uparty,
                ID    = CreateID(ud.Name),
            };

            new_unit.FullRecover();

            colUnits.Add(new_unit, new_unit.ID);

            // これ以降は本体以外の形態の追加
            var other_forms = new List <string>();

            // 変形先の形態
            {
                var fd = ud.Feature("変形");
                if (fd != null)
                {
                    foreach (var uname2 in fd.DataL.Skip(1))
                    {
                        if (!SRC.UDList.IsDefined(uname2))
                        {
                            GUI.ErrorMessage("ユニットデータ「" + uname + "」の変形先形態「" + uname2 + "」が見つかりません");
                            return(null);
                        }
                        other_forms.Add(uname2);
                    }
                }
            }

            // ハイパーモード先の形態
            if (ud.IsFeatureAvailable("ハイパーモード"))
            {
                var fd     = ud.Feature("ハイパーモード");
                var uname2 = fd.DataL.Skip(1).FirstOrDefault();
                if (string.IsNullOrEmpty(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のハイパーモード先形態が指定されていません");
                    return(null);
                }
                else if (!SRC.UDList.IsDefined(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のハイパーモード先形態「" + uname2 + "」が見つかりません");
                    return(null);
                }
                other_forms.Add(uname2);
            }

            // ノーマルモード先の形態
            if (ud.IsFeatureAvailable("ノーマルモード"))
            {
                var fd     = ud.Feature("ノーマルモード");
                var uname2 = fd.DataL.FirstOrDefault();
                if (string.IsNullOrEmpty(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のノーマルモード先形態が指定されていません");
                    return(null);
                }
                else if (!SRC.UDList.IsDefined(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のノーマルモード先形態「" + uname2 + "」が見つかりません");
                    return(null);
                }
                other_forms.Add(uname2);
            }

            // パーツ分離先の形態
            if (ud.IsFeatureAvailable("パーツ分離"))
            {
                var fd     = ud.Feature("パーツ分離");
                var uname2 = fd.DataL.Skip(1).FirstOrDefault();
                if (string.IsNullOrEmpty(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ分離先形態が指定されていません");
                    return(null);
                }
                else if (!SRC.UDList.IsDefined(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ分離先形態「" + uname2 + "」が見つかりません");
                    return(null);
                }
                other_forms.Add(uname2);
            }

            // パーツ合体先の形態
            if (ud.IsFeatureAvailable("パーツ合体"))
            {
                var fd     = ud.Feature("パーツ合体");
                var uname2 = fd.DataL.FirstOrDefault();
                if (string.IsNullOrEmpty(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ合体先形態が指定されていません");
                    return(null);
                }
                else if (!SRC.UDList.IsDefined(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」のパーツ合体先形態「" + uname2 + "」が見つかりません");
                    return(null);
                }
                other_forms.Add(uname2);
            }

            // 変形技の変形先の形態
            foreach (var fd in ud.Features.Where(x => x.Name == "変形技"))
            {
                var uname2 = fd.DataL.Skip(1).FirstOrDefault();
                if (string.IsNullOrEmpty(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」の変形技使用後形態が指定されていません");
                    return(null);
                }
                else if (!SRC.UDList.IsDefined(uname2))
                {
                    GUI.ErrorMessage("ユニットデータ「" + uname + "」の変形技使用後形態「" + uname2 + "」が見つかりません");
                    return(null);
                }
                other_forms.Add(uname2);
            }

            // 換装先の形態
            {
                var fd = ud.Feature("換装");
                if (fd != null)
                {
                    foreach (var uname2 in fd.DataL.Skip(1))
                    {
                        if (!SRC.UDList.IsDefined(uname2))
                        {
                            GUI.ErrorMessage("ユニットデータ「" + uname + "」の換装先形態「" + uname2 + "」が見つかりません");
                            return(null);
                        }
                        other_forms.Add(uname2);
                    }
                }
            }

            // 他形態で指定された形態
            {
                var fd = ud.Feature("他形態");
                if (fd != null)
                {
                    foreach (var uname2 in fd.DataL.Skip(1))
                    {
                        if (!SRC.UDList.IsDefined(uname2))
                        {
                            GUI.ErrorMessage("ユニットデータ「" + uname + "」の他形態「" + uname2 + "」が見つかりません");
                            return(null);
                        }
                        other_forms.Add(uname2);
                    }
                }
            }

            // 形態を追加
            foreach (var other_form in other_forms)
            {
                if (!new_unit.IsOtherFormDefined(other_form))
                {
                    var new_form = new Unit(SRC);
                    new_form.Name  = other_form;
                    new_form.Rank  = urank;
                    new_form.Party = uparty;
                    new_form.ID    = CreateID(ud.Name);
                    new_form.FullRecover();
                    new_form.Status = "他形態";

                    colUnits.Add(new_form, new_form.ID);
                    new_unit.AddOtherForm(new_form);
                }
            }

            // 追加した形態に対して自分自身を追加しておく
            foreach (var of1 in new_unit.OtherForms)
            {
                of1.AddOtherForm(new_unit);

                foreach (var of2 in new_unit.OtherForms.Where(x => x != of1))
                {
                    of1.AddOtherForm(of2);
                }
            }

            // 既に合体先 or 分離先のユニットが作成されていれば自分は他形態
            foreach (var fd in ud.Features)
            {
                if (fd.Name == "合体")
                {
                    if (SRC.UList.IsDefined(fd.DataL.Skip(1).FirstOrDefault() ?? ""))
                    {
                        new_unit.Status = "他形態";
                        break;
                    }
                }

                if (fd.Name == "分離")
                {
                    foreach (var ofname in fd.DataL.Skip(1))
                    {
                        if (SRC.UList.IsDefined(ofname))
                        {
                            new_unit.Status = "他形態";
                            break;
                        }
                    }
                }
            }

            return(new_unit);
        }