/// <summary> /// Callback method for when the game settings are updated by the server. /// </summary> /// <param name="update">The GameSettingsUpdate packet data.</param> private void OnGameSettingsUpdated(GameSettingsUpdate update) { var pvpChanged = false; var bodyDamageChanged = false; var displayNamesChanged = false; var alwaysShowMapChanged = false; var onlyCompassChanged = false; var teamsChanged = false; var allowSkinsChanged = false; // Check whether the PvP state changed if (_gameSettings.IsPvpEnabled != update.GameSettings.IsPvpEnabled) { pvpChanged = true; var message = $"PvP is now {(update.GameSettings.IsPvpEnabled ? "enabled" : "disabled")}"; UiManager.InternalChatBox.AddMessage(message); Logger.Get().Info(this, message); } // Check whether the body damage state changed if (_gameSettings.IsBodyDamageEnabled != update.GameSettings.IsBodyDamageEnabled) { bodyDamageChanged = true; var message = $"Body damage is now {(update.GameSettings.IsBodyDamageEnabled ? "enabled" : "disabled")}"; UiManager.InternalChatBox.AddMessage(message); Logger.Get().Info(this, message); } // Check whether the always show map icons state changed if (_gameSettings.AlwaysShowMapIcons != update.GameSettings.AlwaysShowMapIcons) { alwaysShowMapChanged = true; var message = $"Map icons are now{(update.GameSettings.AlwaysShowMapIcons ? "" : " not")} always visible"; UiManager.InternalChatBox.AddMessage(message); Logger.Get().Info(this, message); } // Check whether the wayward compass broadcast state changed if (_gameSettings.OnlyBroadcastMapIconWithWaywardCompass != update.GameSettings.OnlyBroadcastMapIconWithWaywardCompass) { onlyCompassChanged = true; var message = $"Map icons are {(update.GameSettings.OnlyBroadcastMapIconWithWaywardCompass ? "now only" : "not")} broadcast when wearing the Wayward Compass charm"; UiManager.InternalChatBox.AddMessage(message); Logger.Get().Info(this, message); } // Check whether the display names setting changed if (_gameSettings.DisplayNames != update.GameSettings.DisplayNames) { displayNamesChanged = true; var message = $"Names are {(update.GameSettings.DisplayNames ? "now" : "no longer")} displayed"; UiManager.InternalChatBox.AddMessage(message); Logger.Get().Info(this, message); } // Check whether the teams enabled setting changed if (_gameSettings.TeamsEnabled != update.GameSettings.TeamsEnabled) { teamsChanged = true; var message = $"Teams are {(update.GameSettings.TeamsEnabled ? "now" : "no longer")} enabled"; UiManager.InternalChatBox.AddMessage(message); Logger.Get().Info(this, message); } // Check whether allow skins setting changed if (_gameSettings.AllowSkins != update.GameSettings.AllowSkins) { allowSkinsChanged = true; var message = $"Skins are {(update.GameSettings.AllowSkins ? "now" : "no longer")} enabled"; UiManager.InternalChatBox.AddMessage(message); Logger.Get().Info(this, message); } // Update the settings so callbacks can read updated values _gameSettings.SetAllProperties(update.GameSettings); // Only update the player manager if the either PvP or body damage have been changed if (pvpChanged || bodyDamageChanged || displayNamesChanged) { _playerManager.OnGameSettingsUpdated(pvpChanged || bodyDamageChanged, displayNamesChanged); } if (alwaysShowMapChanged || onlyCompassChanged) { if (!_gameSettings.AlwaysShowMapIcons && !_gameSettings.OnlyBroadcastMapIconWithWaywardCompass) { _mapManager.RemoveAllIcons(); } } // If the teams setting changed, we invoke the registered event handler if they exist if (teamsChanged) { // If the team setting was disabled, we reset all teams if (!_gameSettings.TeamsEnabled) { _playerManager.ResetAllTeams(); } _uiManager.OnTeamSettingChange(); } // If the allow skins setting changed and it is no longer allowed, we reset all existing skins if (allowSkinsChanged && !_gameSettings.AllowSkins) { _playerManager.ResetAllPlayerSkins(); } }