예제 #1
0
        // アビリティに効果を追加
        public void SetEffect(ref string elist)
        {
            short         j, i, k;
            string        buf;
            AbilityEffect dat;
            string        elevel, etype, edata;

            GeneralLib.TrimString(ref elist);
            var loopTo = GeneralLib.ListLength(ref elist);

            for (i = 1; i <= loopTo; i++)
            {
                dat = NewAbilityEffect();
                buf = GeneralLib.ListIndex(ref elist, i);
                j   = (short)Strings.InStr(buf, "Lv");
                k   = (short)Strings.InStr(buf, "=");
                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 = (short)Strings.InStr(buf, "Lv");
                        k = (short)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 = Microsoft.VisualBasic.Compatibility.VB6.Support.Format(SRC.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 = (short)Strings.InStr(buf, "Lv");
                    k = (short)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 = Microsoft.VisualBasic.Compatibility.VB6.Support.Format(SRC.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 = (short)(j + 1);
                    }
                }

                if (j == 1)
                {
                    colEffects.Add(dat, dat.Name);
                }
                else
                {
                    colEffects.Add(dat, dat.Name + Microsoft.VisualBasic.Compatibility.VB6.Support.Format(j));
                }
            }
        }
예제 #2
0
        // 地形効果を追加
        public void AddFeature(ref string fdef)
        {
            FeatureData fd;
            string      ftype, fdata = default;
            double      flevel;
            short       i, j;
            string      buf;

            if (colFeature is null)
            {
                colFeature = new Collection();
            }

            buf = fdef;

            // 地形効果の種類、レベル、データを切り出し
            flevel = SRC.DEFAULT_LEVEL;
            i      = (short)Strings.InStr(buf, "Lv");
            j      = (short)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(ref ftype))
            {
                colFeature.Add(fd, ftype + Microsoft.VisualBasic.Compatibility.VB6.Support.Format(CountFeature()));
            }
            else
            {
                colFeature.Add(fd, ftype);
            }
        }