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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue