// ラベルを追加 public void AddLabel(string lname, int eventDataId) { var new_label = new LabelData(SRC); string lname2; new_label.Data = lname; new_label.EventDataId = eventDataId; new_label.Enable = true; if (new_label.Name == LabelType.NormalLabel) { // 登録済なら無視 if (colNormalLabelList.Values.Any(x => x.EventDataId == eventDataId)) { return; } // 通常ラベルを追加 if (FindNormalLabel0(lname) < 0) { colNormalLabelList.Add(new_label, lname); } // 通常ラベルが重複定義されている場合は無視 } else { // 登録済なら無視 if (colEventLabelList.Values.Any(x => x.EventDataId == eventDataId)) { return; } // イベントラベルを追加 // パラメータ間の文字列の違いによる不一致をなくすため、 // 文字列を半角スペース一文字に直しておく lname2 = string.Join(" ", GeneralLib.ToList(lname)); if (!IsLabelDefined(lname2)) { colEventLabelList.Add(new_label, lname2); } else { var lname3 = lname2 + "(" + SrcFormatter.Format(eventDataId) + ")"; if (!IsLabelDefined(lname3)) { colEventLabelList.Add(new_label, lname3); } } } }
private bool IsMatch( LabelType ltype, LabelData lab, string[] litem, string[] lnum, bool[] is_unit, bool[] is_num, bool[] is_condition, bool reversed) { string str1; string str2; // XXX 考えさせられる int llen = litem.Length - 1; for (var i = 2; i <= llen; i++) { // コマンド関連ラベルの最後のパラメータは条件式なのでチェックを省く if (is_condition[i]) { return(true); } // 比較するパラメータ str1 = litem[i]; if (reversed) { str2 = lab.Para((5 - i)); } else { str2 = lab.Para(i); } // 「全」は全てに一致 if (str2 == "全") { // だだし、「ターン 全」が2回実行されるのは防ぐ // (ターン毎に「ターン 全」「ターン n」の2つのイベントが発行される) if (ltype != LabelType.TurnEventLabel || i != 2) { continue; } } // 数値として比較? if (is_num[i]) { if (Information.IsNumeric(str2)) { if (Conversions.ToDouble(lnum[i]) == Conversions.ToInteger(str2)) { continue; } else if (ltype == LabelType.DamageEventLabel) { // 損傷率ラベルの処理 if (Conversions.ToDouble(lnum[i]) > Conversions.ToInteger(str2)) { return(true); } } } return(false); } // ユニット指定として比較? if (is_unit[i]) { if (str2 == "味方" || str2 == "NPC" || str2 == "敵" || str2 == "中立") { // 陣営名で比較 if (str1 != "味方" && str1 != "NPC" && str1 != "敵" && str1 != "中立") { if (SRC.PList.IsDefined(str1)) { str1 = SRC.PList.Item(str1).Party; } } } else if (SRC.PList.IsDefined(str2)) { // パイロットで比較 var p = SRC.PList.Item(str2); if ((str2 ?? "") == (p.Data.Name ?? "") || (str2 ?? "") == (p.Data.Nickname ?? "")) { // グループIDが付けられていない場合は // パイロット名で比較 str2 = p.Name; if (SRC.PList.IsDefined(str1)) { str1 = SRC.PList.Item(str1).Name; } } else { // グループIDが付けられている場合は // グループIDで比較 if (SRC.PList.IsDefined(str1)) { str1 = SRC.PList.Item(str1).ID; } if (Strings.InStr(str1, ":") > 0) { str1 = Strings.Left(str1, Strings.InStr(str1, ":") - 1); } } } else if (SRC.PDList.IsDefined(str2)) { // パイロット名で比較 str2 = SRC.PDList.Item(str2).Name; if (SRC.PList.IsDefined(str1)) { str1 = SRC.PList.Item(str1).Name; } } else if (SRC.UDList.IsDefined(str2)) { // ユニット名で比較 if (SRC.PList.IsDefined(str1)) { { var u = SRC.PList.Item(str1); if (u.Unit != null) { str1 = u.Unit.Name; } } } } else { // グループIDが付けられているおり、なおかつ同じIDの // 2番目以降のユニットの場合はグループIDで比較 if (SRC.PList.IsDefined(str1)) { str1 = SRC.PList.Item(str1).ID; } if (Strings.InStr(str1, ":") > 0) { str1 = Strings.Left(str1, Strings.InStr(str1, ":") - 1); } if (Strings.InStr(str2, ":") > 0) { str2 = Strings.Left(str2, Strings.InStr(str2, ":") - 1); } } } // 一致したか? if ((str1 ?? "") != (str2 ?? "")) { return(false); } } return(true); }