Ejemplo n.º 1
0
        // ラベルを追加
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }