diff --git a/vMenuServer/MainServer.cs b/vMenuServer/MainServer.cs index 9523c5992..91d657eb0 100644 --- a/vMenuServer/MainServer.cs +++ b/vMenuServer/MainServer.cs @@ -660,8 +660,13 @@ private void RefreshWeather() /// /// [EventHandler("vMenu:UpdateServerWeather")] - internal void UpdateWeather(string newWeather, bool blackoutNew, bool dynamicWeatherNew, bool enableSnow) + internal void UpdateWeather([FromSource] Player source, string newWeather, bool blackoutNew, bool dynamicWeatherNew, bool enableSnow) { + if (!PermissionsManager.IsAllowed(PermissionsManager.Permission.WOSetWeather, source) && !PermissionsManager.IsAllowed(PermissionsManager.Permission.WOAll, source)) + { + BanManager.BanCheater(source); + return; + } // Automatically enable snow effects whenever one of the snow weather types is selected. if (newWeather is "XMAS" or "SNOWLIGHT" or "SNOW" or "BLIZZARD") @@ -684,14 +689,28 @@ internal void UpdateWeather(string newWeather, bool blackoutNew, bool dynamicWea /// /// [EventHandler("vMenu:UpdateServerWeatherCloudsType")] - internal void UpdateWeatherCloudsType(bool removeClouds) + internal void UpdateWeatherCloudsType([FromSource] Player source, bool removeClouds) { + bool allWOPermissions = PermissionsManager.IsAllowed(PermissionsManager.Permission.WOAll, source); + if (removeClouds) { + if (!PermissionsManager.IsAllowed(PermissionsManager.Permission.WORemoveClouds, source) && !allWOPermissions) + { + BanManager.BanCheater(source); + return; + } + TriggerClientEvent("vMenu:SetClouds", 0f, "removed"); } else { + if (!PermissionsManager.IsAllowed(PermissionsManager.Permission.WORandomizeClouds, source) && !allWOPermissions) + { + BanManager.BanCheater(source); + return; + } + var opacity = float.Parse(new Random().NextDouble().ToString()); var type = CloudTypes[new Random().Next(0, CloudTypes.Count)]; TriggerClientEvent("vMenu:SetClouds", opacity, type); @@ -705,8 +724,27 @@ internal void UpdateWeatherCloudsType(bool removeClouds) /// /// [EventHandler("vMenu:UpdateServerTime")] - internal void UpdateTime(int newHours, int newMinutes, bool freezeTimeNew) + internal void UpdateTime([FromSource] Player source, int newHours, int newMinutes, bool freezeTimeNew) { + bool allTOPermissions = PermissionsManager.IsAllowed(PermissionsManager.Permission.TOSetTime, source); + + if (!PermissionsManager.IsAllowed(PermissionsManager.Permission.TOSetTime, source) && !allTOPermissions) + { + BanManager.BanCheater(source); + return; + } + + // Chris: This logic is inherently problematic, as players WITHOUT `TOFreezeTime` can still *un*freeze time, even if they can't freeze time + // TODO: Move time freezing to separate event, so `TOFreezeTime` can be checked regardless of the boolean value? + if (freezeTimeNew) + { + if (!PermissionsManager.IsAllowed(PermissionsManager.Permission.TOFreezeTime, source) && !allTOPermissions) + { + BanManager.BanCheater(source); + return; + } + } + CurrentHours = newHours; CurrentMinutes = newMinutes; FreezeTime = freezeTimeNew;