generated from AriasCreations/vsmodtemplate
Implement experimental player sleeping percentage handling
This commit is contained in:
parent
9a8b9d1545
commit
720dafea87
2 changed files with 45 additions and 7 deletions
|
@ -38,7 +38,10 @@ namespace AriasServerUtils
|
|||
GlobalConstants.characterInvClassName
|
||||
};
|
||||
|
||||
List<EntityAgent> SleepingPlayers { get; set; }
|
||||
List<EntityAgent> SleepingPlayers { get; set; } = new();
|
||||
float OriginalSpeed { get; set; } = 0.0f;
|
||||
public double Hours { get; private set; } = 0.0;
|
||||
bool Sleeping { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 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<Warps>(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)
|
||||
|
|
|
@ -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": ""
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue