private void RestPlayer(float dt) { double hoursPassed = Api.World.Calendar.TotalHours - hoursTotal; // Since waking up takes an hour, we take away one hour from the sleepEfficiency float sleepEff = sleepEfficiency - 1f / 12; if (hoursPassed > 0) { int tempStormSleep = Api.World.Config.GetString("temporalStormSleeping", "0").ToInt(); if (tempStormSleep == 0 && Api.ModLoader.GetModSystem <SystemTemporalStability>().StormStrength > 0) { MountedBy.TryUnmount(); return; } EntityBehaviorTiredness ebt = MountedBy?.GetBehavior("tiredness") as EntityBehaviorTiredness; if (ebt != null) { float newval = Math.Max(0, ebt.Tiredness - (float)hoursPassed / sleepEff); ebt.Tiredness = newval; if (newval <= 0) { MountedBy.TryUnmount(); } } hoursTotal = Api.World.Calendar.TotalHours; } }
private void onControls(EnumEntityAction action, bool on, ref EnumHandling handled) { if (action == EnumEntityAction.Sneak && on) { MountedBy?.TryUnmount(); controls.StopAllMovement(); } }
public void DidMount(EntityAgent entityAgent) { if (MountedBy != null && MountedBy != entityAgent) { entityAgent.TryUnmount(); return; } MountedBy = entityAgent; if (Api.Side == EnumAppSide.Server) { RegisterGameTickListener(RestPlayer, 200); hoursTotal = Api.World.Calendar.TotalHours; } EntityBehaviorTiredness ebt = MountedBy?.GetBehavior("tiredness") as EntityBehaviorTiredness; if (ebt != null) { ebt.IsSleeping = true; } }
private void RestPlayer(float dt) { double hoursPassed = api.World.Calendar.TotalHours - hoursTotal; // Since waking up takes an hour, we take away one hour from the sleepEfficiency float sleepEff = sleepEfficiency - 1f / 12; if (hoursPassed > 0) { EntityBehaviorTiredness ebt = MountedBy?.GetBehavior("tiredness") as EntityBehaviorTiredness; if (ebt != null) { float newval = Math.Max(0, ebt.Tiredness - (float)hoursPassed / sleepEff); ebt.Tiredness = newval; if (newval <= 0) { MountedBy.TryUnmount(); } } hoursTotal = api.World.Calendar.TotalHours; } }