示例#1
0
        private void OnlineStatusChanged(object sender, OnlineStatusChangedArgs e)
        {
            if (!config.HideOverlayDuringCutscene || e.Target != repository.GetPlayerID())
            {
                return;
            }

            inCutscene = e.Status == 15;
            UpdateOverlays();
        }
示例#2
0
            protected void OnOpen()
            {
                _dispatcher.Subscribe("CombatData", this);
                _dispatcher.Subscribe("LogLine", this);
                _dispatcher.Subscribe("ChangeZone", this);
                _dispatcher.Subscribe("ChangePrimaryPlayer", this);

                _conn.Send(JsonConvert.SerializeObject(new
                {
                    type    = "broadcast",
                    msgtype = "SendCharName",
                    msg     = new
                    {
                        charName = _repository.GetPlayerName() ?? "YOU",
                        charID   = _repository.GetPlayerID()
                    }
                }));
            }
示例#3
0
            protected override void OnOpen()
            {
                base.OnOpen();

                EventDispatcher.Subscribe("CombatData", this);
                EventDispatcher.Subscribe("LogLine", this);
                EventDispatcher.Subscribe("ChangeZone", this);
                EventDispatcher.Subscribe("ChangePrimaryPlayer", this);

                Send(JsonConvert.SerializeObject(new
                {
                    type    = "broadcast",
                    msgtype = "SendCharName",
                    msg     = new
                    {
                        charName = FFXIVRepository.GetPlayerName() ?? "YOU",
                        charID   = FFXIVRepository.GetPlayerID()
                    }
                }));
            }
示例#4
0
        /// <summary>
        /// コンフィグのオーバーレイ設定を基に、オーバーレイを初期化・登録します。
        /// </summary>
        private void InitializeOverlays()
        {
            Registry.Register(new KeyboardHook());

            // オーバーレイ初期化
            this.Overlays = new List <IOverlay>();
            foreach (var overlayConfig in this.Config.Overlays)
            {
                var parameters = new NamedParameterOverloads();
                parameters["config"] = overlayConfig;
                parameters["name"]   = overlayConfig.Name;

                var overlay = (IOverlay)Registry.Container.Resolve(overlayConfig.OverlayType, parameters);
                if (overlay != null)
                {
                    RegisterOverlay(overlay);
                }
                else
                {
                    Logger.Log(LogLevel.Error, "InitPlugin: Could not find addon for {0}.", overlayConfig.Name);
                }
            }

            var gameActive = true;
            var inCutscene = false;

            NativeMethods.ActiveWindowChanged += (sender, hWndFg) =>
            {
                if (!Config.HideOverlaysWhenNotActive || hWndFg == IntPtr.Zero)
                {
                    return;
                }
                try
                {
                    try
                    {
                        NativeMethods.GetWindowThreadProcessId(hWndFg, out uint pid);

                        if (pid == 0)
                        {
                            return;
                        }

                        var exePath  = Process.GetProcessById((int)pid).MainModule.FileName;
                        var fileName = Path.GetFileName(exePath.ToString());
                        gameActive = (fileName == "ffxiv.exe" || fileName == "ffxiv_dx11.exe" ||
                                      exePath.ToString() == Process.GetCurrentProcess().MainModule.FileName);
                    }
                    catch (System.ComponentModel.Win32Exception ex)
                    {
                        // Ignore access denied errors. Those usually happen if the foreground window is running with
                        // admin permissions but we are not.
                        if (ex.ErrorCode == -2147467259)  // 0x80004005
                        {
                            gameActive = false;
                        }
                        else
                        {
                            Logger.Log(LogLevel.Error, "XivWindowWatcher: {0}", ex.ToString());
                        }
                    }

                    foreach (var overlay in this.Overlays)
                    {
                        if (overlay.Config.IsVisible)
                        {
                            overlay.Visible = gameActive && !inCutscene;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Log(LogLevel.Error, "XivWindowWatcher: {0}", ex.ToString());
                }
            };

            NetworkParser.OnOnlineStatusChanged += (o, e) =>
            {
                if (!Config.HideOverlayDuringCutscene || e.Target != FFXIVRepository.GetPlayerID())
                {
                    return;
                }

                inCutscene = e.Status == 15;
                foreach (var overlay in Overlays)
                {
                    if (overlay.Config.IsVisible)
                    {
                        overlay.Visible = gameActive && !inCutscene;
                    }
                }
            };
        }