private void OnServerInitialized() { _grid = Network.Net.sv?.visibility?.provider as NetworkVisibilityGrid; if (_grid == null) { LogError("This server doesn't appear to be using a NetworkVisibilityGrid. This plugin is disabled."); return; } _vanillaConfig = new Configuration() { VisibilityRadiusFar = _grid.visibilityRadiusFar, VisibilityRadiusNear = _grid.visibilityRadiusNear, }; ApplyConfig(_grid, _pluginConfig); }
private void ApplyConfig(NetworkVisibilityGrid grid, Configuration config) { var changed = false; if (grid.visibilityRadiusFar != config.VisibilityRadiusFar) { Puts($"Updating visibilityRadiusFar from {grid.visibilityRadiusFar} to {config.VisibilityRadiusFar}"); grid.visibilityRadiusFar = config.VisibilityRadiusFar; changed = true; } if (grid.visibilityRadiusNear != config.VisibilityRadiusNear) { Puts($"Updating visibilityRadiusNear from {grid.visibilityRadiusNear} to {config.VisibilityRadiusNear}"); grid.visibilityRadiusNear = config.VisibilityRadiusNear; changed = true; } if (!changed) { return; } foreach (var player in BasePlayer.activePlayerList) { if (player != null && player.net != null && !player.IsReceivingSnapshot && !player.isCallingUpdateNetworkGroup) { player.isCallingUpdateNetworkGroup = true; player.Invoke(() => { player.UpdateNetworkGroup(); UpdateSubscriptions(player.net); }, UnityEngine.Random.Range(0f, 5f)); } } }