示例#1
0
        /// <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;
                }
            }
        }
示例#3
0
        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);
                        });
                    });
                }
            }
        }
示例#5
0
        /// <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");
                        }
                    });
                }
            }
        }