diff --git a/AriasServerUtils/ASUModSystem.cs b/AriasServerUtils/ASUModSystem.cs index 27ff056..215f848 100644 --- a/AriasServerUtils/ASUModSystem.cs +++ b/AriasServerUtils/ASUModSystem.cs @@ -38,7 +38,10 @@ namespace AriasServerUtils GlobalConstants.characterInvClassName }; - List SleepingPlayers { get; set; } + List SleepingPlayers { get; set; } = new(); + float OriginalSpeed { get; set; } = 0.0f; + public double Hours { get; private set; } = 0.0; + bool Sleeping { get; set; } = false; /// /// Method to register all mod blocks @@ -76,10 +79,6 @@ namespace AriasServerUtils api.Event.ServerRunPhase(EnumServerRunPhase.GameReady, OnGameReady); api.Event.ServerRunPhase(EnumServerRunPhase.Shutdown, OnShutdown); - api.Event.Timer(OnCheckModDirty, 20); - api.Event.Timer(OnCheckPlayerCooldowns, 1); - api.Event.Timer(OnCheckSleepingPlayers, 5); - api.Event.Timer(RTPFactory.HandleRTPChecking, 1); api.Event.PlayerDeath += OnPlayerDeath; api.Event.PlayerJoin += OnPlayerJoin; api.Event.PlayerDisconnect += OnPlayerDC; @@ -241,6 +240,22 @@ namespace AriasServerUtils private void OnCheckSleepingPlayers() { if (API.Side == EnumAppSide.Client) return; // This must only ever be called on the server! + if (Sleeping) + { + if (API.World.Calendar.TotalHours - Hours >= 7) + { + Sleeping = false; + foreach (var player in SleepingPlayers) + { + EntityBehaviorTiredness ebt = player.GetBehavior("tiredness") as EntityBehaviorTiredness; + ebt.IsSleeping = false; + } + + SleepingPlayers.Clear(); + API.World.Calendar.CalendarSpeedMul = OriginalSpeed; + } + return; + } if (config.PlayerSleepingPercentage == 100) return; // Normal behavior // Iterate over all players, get their entity, check if mounted on a bed. // If mounted on a bed, check tiredness @@ -282,6 +297,22 @@ namespace AriasServerUtils if (Percentage >= config.PlayerSleepingPercentage) { // Call the API to make sleep happen + foreach (var bed in BEBs) + { + if (bed.MountedBy != null) SleepingPlayers.Add(bed.MountedBy); + + // Start sleep + EntityBehaviorTiredness EBT = bed.MountedBy.GetBehavior("tiredness") as EntityBehaviorTiredness; + + EBT.IsSleeping = true; + + // Get current calendar speed + OriginalSpeed = API.World.Calendar.CalendarSpeedMul; + Hours = API.World.Calendar.TotalHours; + Sleeping = true; + + API.World.Calendar.CalendarSpeedMul = 4; + } } } @@ -445,6 +476,13 @@ namespace AriasServerUtils // -> Step 3. Load Mod Warps <- serverWarps = API.LoadModConfig(GetConfigurationFile("warps", ModConfigType.Global)); if (serverWarps == null) serverWarps = new Warps(); + + + + API.Event.Timer(OnCheckModDirty, 20); + API.Event.Timer(OnCheckPlayerCooldowns, 1); + API.Event.Timer(OnCheckSleepingPlayers, 5); + API.Event.Timer(RTPFactory.HandleRTPChecking, 1); } public string GetConfigurationFile(string sName, ModConfigType type) diff --git a/AriasServerUtils/modinfo.json b/AriasServerUtils/modinfo.json index f30a8d5..6d14c13 100644 --- a/AriasServerUtils/modinfo.json +++ b/AriasServerUtils/modinfo.json @@ -3,8 +3,8 @@ "modid": "ariasserverutils", "name": "Aria's Server Utilities", "authors": ["zontreck"], - "description": "A collection of server utilities\n\nBuild Date: 03-10-2025 @ 4:37 PM MST", - "version": "1.0.7-dev.1", + "description": "A collection of server utilities\n\nBuild Date: 03-10-2025 @ 6:56 PM MST", + "version": "1.0.7-dev.2", "dependencies": { "game": "" }