Beispiel #1
0
        /// <summary>
        /// ロード
        /// </summary>
        /// <param name="sender">イベント発生元</param>
        /// <param name="e">イベント引数</param>
        private void SelectJobForm_Load(object sender, EventArgs e)
        {
            var jobs = this.JobFilter.Split(',');

            this.JobsCheckedListBox.Items.Clear();
            foreach (var job in Job.GetJobList())
            {
                this.JobsCheckedListBox.Items.Add(
                    job,
                    jobs.Any(x => x == job.JobId.ToString()));
            }
        }
        /// <summary>
        /// パーティリストを更新する
        /// </summary>
        public static void RefreshPTList()
        {
            if (ptmember == null)
            {
                ptmember = new List <string>();
            }
            else
            {
                ptmember.Clear();
            }

            if (Settings.Default.EnabledPartyMemberPlaceholder)
            {
                Debug.WriteLine("PT: Refresh");

                // プレイヤー情報を取得する
                var player = FF14PluginHelper.GetPlayer();
                if (player == null)
                {
                    return;
                }

                // PTメンバの名前を記録しておく
                if (Settings.Default.EnabledPartyMemberPlaceholder)
                {
                    var partyList = FF14PluginHelper.GetCombatantListParty();

                    // FF14内部のPTメンバ自動ソート順で並び替える
                    var sorted =
                        from x in partyList
                        join y in Job.GetJobList() on
                        x.Job equals y.JobId
                        where
                        x.ID != player.ID
                        orderby
                        y.Role,
                        x.Job,
                        x.ID
                    select
                    x.Name.Trim();

                    foreach (var name in sorted)
                    {
                        ptmember.Add(name);
                        Debug.WriteLine("<-  " + name);
                    }
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// パーティリストを更新する
        /// </summary>
        public static void RefreshPTList()
        {
            if (ptmember == null)
            {
                ptmember = new List <string>();
            }
            else
            {
                ptmember.Clear();
            }

            if (replacementsByJobs == null)
            {
                replacementsByJobs = new List <KeyValuePair <string, string> >();
            }
            else
            {
                replacementsByJobs.Clear();
            }

            if (enabledPartyMemberPlaceHolder)
            {
#if DEBUG
                Debug.WriteLine("PT: Refresh");
#endif
                // プレイヤー情報を取得する
                var player = FF14PluginHelper.GetPlayer();
                if (player == null)
                {
                    return;
                }

                // PTメンバの名前を記録しておく
                var combatants = FF14PluginHelper.GetCombatantListParty();

                // FF14内部のPTメンバ自動ソート順で並び替える
                var sorted =
                    from x in combatants
                    join y in Job.GetJobList() on
                    x.Job equals y.JobId
                    where
                    x.ID != player.ID
                    orderby
                    y.Role,
                    x.Job,
                    x.ID descending
                select
                x.Name.Trim();

                foreach (var name in sorted)
                {
                    ptmember.Add(name);
#if DEBUG
                    Debug.WriteLine("<-  " + name);
#endif
                }

                // パーティメンバが空だったら自分を補完しておく
                if (!combatants.Any())
                {
                    combatants.Add(player);
                }

                // ジョブ名によるプレースホルダを登録する
                foreach (var job in Job.GetJobList())
                {
                    // このジョブに該当するパーティメンバを抽出する
                    var combatantsByJob = (
                        from x in combatants
                        where
                        x.Job == job.JobId
                        orderby
                        x.ID == player.ID ? 0 : 1,
                        x.ID descending
                        select
                        x).ToArray();

                    if (!combatantsByJob.Any())
                    {
                        continue;
                    }

                    // <JOBn>形式を置換する
                    // ex. <PLD1> → Taro Paladin
                    // ex. <PLD2> → Jiro Paladin
                    for (int i = 0; i < combatantsByJob.Length; i++)
                    {
                        var placeholder = string.Format(
                            "<{0}{1}>",
                            job.JobName,
                            i + 1);

                        replacementsByJobs.Add(new KeyValuePair <string, string>(placeholder.ToUpper(), combatantsByJob[i].Name));
                    }

                    // <JOB>形式を置換する
                    // ただし、この場合は正規表現のグループ形式とする
                    // また、グループ名にはジョブの略称を設定する
                    // ex. <PLD> → (?<PLDs>Taro Paladin|Jiro Paladin)
                    var names    = string.Join("|", combatantsByJob.Select(x => x.Name).ToArray());
                    var oldValue = string.Format("<{0}>", job.JobName);
                    var newValue = string.Format(
                        "(?<{0}s>{1})",
                        job.JobName.ToUpper(),
                        names);

                    replacementsByJobs.Add(new KeyValuePair <string, string>(oldValue.ToUpper(), newValue));
                }
            }

            // 置換後のマッチングキーワードを消去する
            SpellTimerTable.ClearReplacedKeywords();
            OnePointTelopTable.Default.ClearReplacedKeywords();

            // スペルタイマーの再描画を行う
            SpellTimerTable.ClearUpdateFlags();
        }