// アビリティに効果を追加 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)); } } }
// 地形効果を追加 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); } }