Beispiel #1
0
        /// <summary>
        /// リスタートのときスペルのカウントをリセットする
        /// </summary>
        private void ResetCountAtRestart()
        {
            // FFXIV以外での使用ならば何もしない
            if (Settings.Default.UseOtherThanFFXIV)
            {
                return;
            }

            // 無効?
            if (!Settings.Default.ResetOnWipeOut)
            {
                return;
            }

            // Combatantsを頻繁に取得したくないので5秒に1回だけ判定する
            if ((DateTime.Now - this.LastCheckWipeOutDateTime).TotalSeconds <= 5d)
            {
                this.LastCheckWipeOutDateTime = DateTime.Now;
                return;
            }

            this.LastCheckWipeOutDateTime = DateTime.Now;

            var combatants = FF14PluginHelper.GetCombatantListParty();

            if (combatants == null ||
                combatants.Count < 1)
            {
                return;
            }

            // 関係者が全員死んでる?
            if (combatants.Count ==
                combatants.Count(x => x.CurrentHP <= 0))
            {
                // リセットするのは15秒に1回にする
                // 暗転中もずっとリセットし続けてしまうので
                if ((DateTime.Now - this.LastWipeOutDateTime).TotalSeconds >= 15.0)
                {
                    Logger.Write("Party was wiped out. Reset spells and tickers.");

                    // スペルのカウントをリセットする
                    SpellTimerTable.ResetCount();

                    // テロップのカウントをリセットする
                    OnePointTelopTable.Default.ResetCount();

                    this.LastWipeOutDateTime = DateTime.Now;
                }
            }
        }
        /// <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 RefreshPartyList()
        {
            // プレイヤー情報を取得する
            var player = FF14PluginHelper.GetPlayer();

            if (player == null)
            {
                return;
            }

            if (enabledPartyMemberPlaceHolder)
            {
#if DEBUG
                Debug.WriteLine("PT: Refresh");
#endif
                // PTメンバの名前を記録しておく
                var combatants = FF14PluginHelper.GetCombatantListParty();

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

                partyList = new List <string>(sorted);

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

                var newList = new Dictionary <string, string>();

                // ジョブ名によるプレースホルダを登録する
                foreach (var job in Job.JobList)
                {
                    // このジョブに該当するパーティメンバを抽出する
                    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);

                        newList.Add(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);

                    newList.Add(oldValue.ToUpper(), newValue);
                }

                placeholderToJobNameDictionaly = newList;
            }
            else
            {
                partyList = EMPTY_STRING_LIST;
                placeholderToJobNameDictionaly = EMPTY_STRING_PAIR_MAP;
            }

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

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

            // モニタタブの情報を無効にする
            SpecialSpellTimerPlugin.ConfigPanel.InvalidatePlaceholders();
        }