private void OnlineStatusChanged(object sender, OnlineStatusChangedArgs e) { if (!config.HideOverlayDuringCutscene || e.Target != repository.GetPlayerID()) { return; } inCutscene = e.Status == 15; UpdateOverlays(); }
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() } })); }
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() } })); }
/// <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; } } }; }