generated from AriasCreations/vsmodtemplate
Begin to add the player sleeping percentage system
This commit is contained in:
parent
c609dde0ee
commit
9a8b9d1545
2 changed files with 52 additions and 2 deletions
|
@ -38,6 +38,8 @@ namespace AriasServerUtils
|
|||
GlobalConstants.characterInvClassName
|
||||
};
|
||||
|
||||
List<EntityAgent> SleepingPlayers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Method to register all mod blocks
|
||||
/// </summary>
|
||||
|
@ -76,6 +78,7 @@ namespace AriasServerUtils
|
|||
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;
|
||||
|
@ -235,6 +238,53 @@ namespace AriasServerUtils
|
|||
api.ChatCommands.Create("listcooldowns").RequiresPrivilege(Privilege.chat).WithDescription("Lists the cooldown settings on the server, as well as your own active cooldowns if applicable.").HandleWith(Events.HandleListCooldowns);
|
||||
}
|
||||
|
||||
private void OnCheckSleepingPlayers()
|
||||
{
|
||||
if (API.Side == EnumAppSide.Client) return; // This must only ever be called on the server!
|
||||
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
|
||||
int TotalOnline = API.World.AllOnlinePlayers.Length;
|
||||
int TotalInBed = 0;
|
||||
|
||||
bool isAlreadySleeping = false;
|
||||
|
||||
List<BlockEntityBed> BEBs = new();
|
||||
|
||||
foreach (var player in API.World.AllOnlinePlayers)
|
||||
{
|
||||
EntityAgent ePlay = player.Entity;
|
||||
if (ePlay.MountedOn is BlockEntityBed beb)
|
||||
{
|
||||
BEBs.Add(beb);
|
||||
TotalInBed++;
|
||||
}
|
||||
if (ePlay.MountedOn == null)
|
||||
{
|
||||
if (SleepingPlayers.Contains(ePlay))
|
||||
{
|
||||
EntityBehaviorTiredness ebt = ePlay.GetBehavior("tiredness") as EntityBehaviorTiredness;
|
||||
if (ebt != null)
|
||||
ebt.IsSleeping = false;
|
||||
}
|
||||
}
|
||||
|
||||
EntityBehaviorTiredness EBT = ePlay.GetBehavior("tiredness") as EntityBehaviorTiredness;
|
||||
if (EBT == null) continue;
|
||||
if (EBT.IsSleeping) isAlreadySleeping = true;
|
||||
}
|
||||
|
||||
if (isAlreadySleeping) return; // Abort
|
||||
|
||||
SleepingPlayers.Clear();
|
||||
|
||||
int Percentage = TotalInBed * 100 / TotalOnline;
|
||||
if (Percentage >= config.PlayerSleepingPercentage)
|
||||
{
|
||||
// Call the API to make sleep happen
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCheckPlayerCooldowns()
|
||||
{
|
||||
foreach (var cdEntry in ServerUtilities.mPlayerData)
|
||||
|
|
|
@ -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 @ 12:04 PM MST",
|
||||
"version": "1.0.6",
|
||||
"description": "A collection of server utilities\n\nBuild Date: 03-10-2025 @ 4:37 PM MST",
|
||||
"version": "1.0.7-dev.1",
|
||||
"dependencies": {
|
||||
"game": ""
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue