/// <summary> /// リスタートのときスペルのカウントをリセットする /// </summary> private void ResetCountAtRestart() { // 無効? if (!Settings.Default.ResetOnWipeOut) { return; } // 0.1秒毎に判定する if ((DateTime.Now - this.lastWipeOutDetectDateTime).TotalSeconds <= 0.1) { return; } this.lastWipeOutDetectDateTime = DateTime.Now; var combatants = FFXIVPlugin.Instance.GetPartyList(); 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) { // インスタンススペルを消去する SpellTable.Instance.RemoveInstanceSpellsAll(); SpellTable.ResetCount(); TickerTable.Instance.ResetCount(); this.lastWipeOutDateTime = DateTime.Now; // wipeoutログを発生させる LogParser.RaiseLog(DateTime.Now, CombatAnalyzer.Wipeout); ActInvoker.Invoke(() => { // ACT本体に戦闘終了を通知する if (Settings.Default.WipeoutNotifyToACT) { ActGlobals.oFormActMain.ActCommands("end"); } }); } } }
/// <summary> /// リスタートのときスペルのカウントをリセットする /// </summary> private void ResetCountAtRestart() { // FFXIV以外での使用ならば何もしない if (Settings.Default.UseOtherThanFFXIV) { return; } // 無効? if (!Settings.Default.ResetOnWipeOut) { return; } var combatants = FFXIVPlugin.Instance.GetPartyList(); 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) { SpellTable.ResetCount(); TickerTable.Instance.ResetCount(); // ACT本体に戦闘終了を通知する if (Settings.Default.WipeoutNotifyToACT) { ActInvoker.Invoke(() => { ActGlobals.oFormActMain.ActCommands("end"); }); } this.lastWipeOutDateTime = DateTime.Now; } } }
public void Wipeout( bool isRaiseWipeoutLog = true) { // リセットするのは10秒に1回にする // 暗転中もずっとリセットし続けてしまうので var now = DateTime.Now; if ((now - this.lastWipeOutDateTime).TotalSeconds >= 10.0) { this.lastWipeOutDateTime = now; Task.Run(() => { if (Settings.Default.WipeoutNotifyToACT) { CommonSounds.Instance.PlayWipeout(); } // ChatログをFlushする ParsedLogWorker.Instance.Flush(true); Thread.Sleep(TimeSpan.FromSeconds(1)); // ACT本体に戦闘終了を通知する if (Settings.Default.WipeoutNotifyToACT) { ActInvoker.Invoke(() => ActGlobals.oFormActMain.EndCombat(true)); } // トリガーをリセットする SpellTable.ResetCount(); TickerTable.Instance.ResetCount(); // wipeoutログを発生させる if (isRaiseWipeoutLog) { Task.Run(() => { Thread.Sleep(200); LogParser.RaiseLog(now, WipeoutKeywords.Wipeout); }); } }); } }
/// <summary> /// リスタートのときスペルのカウントをリセットする /// </summary> public void ResetCountAtRestart() { // 無効? if (!Settings.Default.ResetOnWipeOut) { return; } if ((DateTime.Now - this.lastWipeOutDetectDateTime).TotalSeconds <= 0.1) { return; } this.lastWipeOutDetectDateTime = DateTime.Now; var player = CombatantsManager.Instance.Player; var party = CombatantsManager.Instance.GetPartyList(); if (party == null || party.Count() < 1) { if (player == null || player.ID == 0) { return; } party = new[] { player }; } // 異常なデータ? if (party.Count() > 1) { var first = party.First(); if (party.Count() == party.Count(x => x.CurrentHP == first.CurrentHP && x.MaxHP == first.MaxHP)) { return; } if (!party.Any(x => x.IsPlayer)) { return; } } if (player != null) { switch (player.JobInfo.Role) { case Roles.Crafter: case Roles.Gatherer: return; } } // 関係者が全員死んでる? if (party.Count() == party.Count(x => x.CurrentHP <= 0 && x.MaxHP > 0)) { // リセットするのは10秒に1回にする // 暗転中もずっとリセットし続けてしまうので var now = DateTime.Now; if ((now - this.lastWipeOutDateTime).TotalSeconds >= 10.0) { this.lastWipeOutDateTime = now; Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(1)); // ACT本体に戦闘終了を通知する if (Settings.Default.WipeoutNotifyToACT) { ActInvoker.Invoke(() => ActGlobals.oFormActMain.EndCombat(true)); CommonSounds.Instance.PlayWipeout(); } // トリガーをリセットする SpellTable.ResetCount(); TickerTable.Instance.ResetCount(); // wipeoutログを発生させる Task.Run(() => { Thread.Sleep(200); LogParser.RaiseLog(now, ConstantKeywords.Wipeout); }); }); } } }
/// <summary> /// リスタートのときスペルのカウントをリセットする /// </summary> public void ResetCountAtRestart() { // 無効? if (!Settings.Default.ResetOnWipeOut) { return; } if ((DateTime.Now - this.lastWipeOutDetectDateTime).TotalSeconds <= 0.1) { return; } this.lastWipeOutDetectDateTime = DateTime.Now; var party = default(IEnumerable <Combatant>); party = FFXIVPlugin.Instance.GetPartyList(); if (party == null || party.Count() < 1) { return; } // 異常なデータ? if (party.Count() > 1) { var first = party.First(); if (party.Count() == party.Count(x => x.CurrentHP == first.CurrentHP && x.MaxHP == first.MaxHP)) { return; } if (!party.Any(x => x.IsPlayer)) { return; } if (party.Any(x => x.IsNPC())) { return; } } var player = FFXIVPlugin.Instance.GetPlayer(); if (player != null) { switch (player.AsJob().Role) { case Roles.Crafter: case Roles.Gatherer: return; } } // 関係者が全員死んでる? if (party.Count() == party.Count(x => x.CurrentHP <= 0 && x.MaxHP > 0)) { // リセットするのは15秒に1回にする // 暗転中もずっとリセットし続けてしまうので if ((DateTime.Now - this.lastWipeOutDateTime).TotalSeconds >= 15.0) { this.lastWipeOutDateTime = DateTime.Now; // インスタンススペルを消去する SpellTable.ResetCount(); TickerTable.Instance.ResetCount(); // wipeoutログを発生させる LogParser.RaiseLog(DateTime.Now, ConstantKeywords.Wipeout); ActInvoker.Invoke(() => { // ACT本体に戦闘終了を通知する if (Settings.Default.WipeoutNotifyToACT) { ActGlobals.oFormActMain.ActCommands("end"); } }); } } }