/// <summary> /// スペルタイマテーブルを読み込む /// </summary> public void LoadSpellTimerTable() { try { this.SpellTimerTreeView.SuspendLayout(); this.SpellTimerTreeView.Nodes.Clear(); var panels = SpellTimerTable.Table .Where(x => !x.IsInstance) .OrderBy(x => x.Panel) .Select(x => x.Panel) .Distinct(); foreach (var panelName in panels) { var children = new List <TreeNode>(); var spells = SpellTimerTable.Table .Where(x => !x.IsInstance) .OrderBy(x => x.DisplayNo) .Where(x => x.Panel == panelName); foreach (var spell in spells) { var nc = new TreeNode() { Text = spell.SpellTitle, ToolTipText = spell.Keyword, Checked = spell.Enabled, Tag = spell, }; children.Add(nc); } var n = new TreeNode( panelName, children.ToArray()); n.Checked = children.Any(x => x.Checked); this.SpellTimerTreeView.Nodes.Add(n); } // スペルの再描画を行わせる SpellTimerTable.ClearUpdateFlags(); // 標準のスペルタイマーへ変更を反映する SpellTimerCore.Default.applyToNormalSpellTimer(); this.SpellTimerTreeView.ExpandAll(); } finally { this.SpellTimerTreeView.ResumeLayout(); } }
/// <summary> /// キーワードを再生成する /// </summary> public static void RefeshKeywords() { if (!Settings.Default.DQXUtilityEnabled) { return; } // 置換後のマッチングキーワードを消去する SpellTimerTable.ClearReplacedKeywords(); OnePointTelopTable.Default.ClearReplacedKeywords(); // スペルタイマーの再描画を行う SpellTimerTable.ClearUpdateFlags(); // モニタタブの情報を無効にする SpecialSpellTimerPlugin.ConfigPanel.InvalidatePlaceholders(); }
/// <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(); }