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