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;