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
|
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>
|
/// <summary>
|
||||||
/// Method to register all mod blocks
|
/// Method to register all mod blocks
|
||||||
|
@ -76,10 +79,6 @@ namespace AriasServerUtils
|
||||||
|
|
||||||
api.Event.ServerRunPhase(EnumServerRunPhase.GameReady, OnGameReady);
|
api.Event.ServerRunPhase(EnumServerRunPhase.GameReady, OnGameReady);
|
||||||
api.Event.ServerRunPhase(EnumServerRunPhase.Shutdown, OnShutdown);
|
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.PlayerDeath += OnPlayerDeath;
|
||||||
api.Event.PlayerJoin += OnPlayerJoin;
|
api.Event.PlayerJoin += OnPlayerJoin;
|
||||||
api.Event.PlayerDisconnect += OnPlayerDC;
|
api.Event.PlayerDisconnect += OnPlayerDC;
|
||||||
|
@ -241,6 +240,22 @@ namespace AriasServerUtils
|
||||||
private void OnCheckSleepingPlayers()
|
private void OnCheckSleepingPlayers()
|
||||||
{
|
{
|
||||||
if (API.Side == EnumAppSide.Client) return; // This must only ever be called on the server!
|
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
|
if (config.PlayerSleepingPercentage == 100) return; // Normal behavior
|
||||||
// Iterate over all players, get their entity, check if mounted on a bed.
|
// Iterate over all players, get their entity, check if mounted on a bed.
|
||||||
// If mounted on a bed, check tiredness
|
// If mounted on a bed, check tiredness
|
||||||
|
@ -282,6 +297,22 @@ namespace AriasServerUtils
|
||||||
if (Percentage >= config.PlayerSleepingPercentage)
|
if (Percentage >= config.PlayerSleepingPercentage)
|
||||||
{
|
{
|
||||||
// Call the API to make sleep happen
|
// 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 <-
|
// -> Step 3. Load Mod Warps <-
|
||||||
serverWarps = API.LoadModConfig<Warps>(GetConfigurationFile("warps", ModConfigType.Global));
|
serverWarps = API.LoadModConfig<Warps>(GetConfigurationFile("warps", ModConfigType.Global));
|
||||||
if (serverWarps == null) serverWarps = new Warps();
|
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)
|
public string GetConfigurationFile(string sName, ModConfigType type)
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
"modid": "ariasserverutils",
|
"modid": "ariasserverutils",
|
||||||
"name": "Aria's Server Utilities",
|
"name": "Aria's Server Utilities",
|
||||||
"authors": ["zontreck"],
|
"authors": ["zontreck"],
|
||||||
"description": "A collection of server utilities\n\nBuild Date: 03-10-2025 @ 4:37 PM MST",
|
"description": "A collection of server utilities\n\nBuild Date: 03-10-2025 @ 6:56 PM MST",
|
||||||
"version": "1.0.7-dev.1",
|
"version": "1.0.7-dev.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"game": ""
|
"game": ""
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue