class TimeManager : ConfigurablePlugin { private ref array timeSettings; void TimeManager() { JSONPATH = "$profile:VPPAdminTools/ConfigurablePlugins/TimeManager/TimeSettingsPresets.json"; timeSettings = new array; GetRPCManager().AddRPC("RPC_TimeManager", "SaveTimeSettings", this, SingleplayerExecutionType.Server); GetRPCManager().AddRPC("RPC_TimeManager", "ApplyDate", this, SingleplayerExecutionType.Server); GetRPCManager().AddRPC("RPC_TimeManager", "DeleteTimeSetting", this, SingleplayerExecutionType.Server); GetRPCManager().AddRPC("RPC_TimeManager", "SendToClient", this, SingleplayerExecutionType.Server); GetRPCManager().AddRPC("RPC_TimeManager", "ApplyPreset", this, SingleplayerExecutionType.Server); } override void OnInit() { Load(); } override void Load() { if(GetGame().IsServer() && !GetGame().IsMultiplayer()) return; MakeDirectory("$profile:VPPAdminTools/ConfigurablePlugins/TimeManager/"); if(FileExist(JSONPATH)) { GetSimpleLogger().Log("[TimeManager] Loading Json File " + JSONPATH); JsonFileLoader.JsonLoadFile(JSONPATH, this); }else{ Save(); } } override void Save() { GetSimpleLogger().Log("[TimeManager] Saving to " + JSONPATH); JsonFileLoader.JsonSaveFile(JSONPATH, this); } void SendToClient(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target) { if(type == CallType.Server) { if (!GetPermissionManager().VerifyPermission(sender.GetPlainId(), "MenuWeatherManager", "", false)) return; array input = new array; foreach(TimeSetting ts : timeSettings) { input.Insert(ts.GetName()); } GetWebHooksManager().PostData(AdminActivityMessage, new AdminActivityMessage(sender.GetPlainId(), sender.GetName(), "[WeatherManager] Sent Saved Time Prests" )); GetRPCManager().VSendRPC( "RPC_WeatherUI", "HandleTimeData", new Param1>(input), true, sender ); } } void SaveTimeSettings(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target ) { if(type == CallType.Server) { if (!GetPermissionManager().VerifyPermission(sender.GetPlainId(), "WeatherManager:SaveTimePreset")) return; Param5 data; if(!ctx.Read(data)) return; int month, day, year; int hour, min; month = data.param1; day = data.param2; year = data.param3; min = data.param4; hour = data.param5; TimeSetting settings = new TimeSetting(hour, min, month, day, year); timeSettings.Insert(settings); GetSimpleLogger().Log("[TimeManager] Saving setting to " + settings.GetName()); GetWebHooksManager().PostData(AdminActivityMessage, new AdminActivityMessage(sender.GetPlainId(), sender.GetName(), "[WeatherManager] Saving Time Preset:" + settings.GetName())); Save(); } } void DeleteTimeSetting(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target) { Param1 data; if(!ctx.Read(data)) return; if(type == CallType.Server) { if (!GetPermissionManager().VerifyPermission(sender.GetPlainId(), "WeatherManager:DeleteTimePreset")) return; string name = data.param1; foreach(TimeSetting ts : timeSettings) { if(ts != null && ts.GetName() == name) { GetSimpleLogger().Log("[TimeManager] Deleting time setting " + ts.GetName()); GetWebHooksManager().PostData(AdminActivityMessage, new AdminActivityMessage(sender.GetPlainId(), sender.GetName(), "[WeatherManager] Deleted [" + ts.GetName() + "] saved time preset" )); timeSettings.RemoveItem(ts); } } Save(); } } void ApplyDate(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target ) { if(type == CallType.Server) { if (!GetPermissionManager().VerifyPermission(sender.GetPlainId(), "WeatherManager:ApplyTime")) return; Param5 param; if(!ctx.Read(param)) return; int month = param.param1; int day = param.param2; int year = param.param3; int min = param.param4; int hour = param.param5; GetSimpleLogger().Log("[Time Manager] Setting Date to " + year.ToString() + "/" + month.ToString() + "/" + day.ToString() + " " + hour.ToString() + ":" + min.ToString()); GetWebHooksManager().PostData(AdminActivityMessage, new AdminActivityMessage(sender.GetPlainId(), sender.GetName(), "[Time Manager]:: ApplyDate(): Setting Date to " + year.ToString() + "/" + month.ToString() + "/" + day.ToString() + " " + hour.ToString() + ":" + min.ToString())); GetGame().GetWorld().SetDate(year, month, day, hour, min); } } void ApplyPreset(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target) { Param1 data; if(!ctx.Read(data)) return; if(type == CallType.Server) { if (!GetPermissionManager().VerifyPermission(sender.GetPlainId(), "WeatherManager:ApplyTimePreset")) return; string name = data.param1; TimeSetting requestedSettings = GetTimePresetByName(name); if(requestedSettings == null) { NotificationSystem.SendNotificationToPlayerIdentityExtended(sender, 4, "Error:", "No settings under name: " + name); return; } ApplyPreset(requestedSettings); GetWebHooksManager().PostData(AdminActivityMessage, new AdminActivityMessage(sender.GetPlainId(), sender.GetName(), "[WeatherManager] Applying Saved Time Preset: " + name )); } } private TimeSetting GetTimePresetByName(string name) { foreach(TimeSetting settings : timeSettings) { if(settings.GetName() == name) { return settings; } } return null; } private void ApplyPreset(TimeSetting s) { int hour = s.GetHour(), min = s.GetMinute(); int month = s.GetMonth(), day = s.GetDay(), year = s.GetYear(); GetSimpleLogger().Log("[TimeManager] Applying preset " + s.GetName()); GetGame().GetWorld().SetDate(year, month, day, hour, min); } }