public override async Task Action() { var callback = new AsyncFunctionCallback <IPlayer>(async(player) => { var serverPlayer = player as ServerPlayer; if (serverPlayer != null && serverPlayer.IsSpawned && !serverPlayer.IsDead) { serverPlayer.Hunger -= Math.Max((ushort)_random.Next(2, 7), (ushort)0); serverPlayer.Thirst -= Math.Max((ushort)_random.Next(4, 11), (ushort)0); if (serverPlayer.Hunger <= 0) { serverPlayer.Health -= Math.Min((ushort)10, serverPlayer.Health); } if (serverPlayer.Thirst <= 0) { serverPlayer.Health -= Math.Min((ushort)30, serverPlayer.Health); } } await Task.CompletedTask; }); await Alt.ForEachPlayers(callback); }
public Task OnSave() { // characters var playersTask = Task.Run(async() => { var charsToUpdate = new List <Character>(); var callback = new AsyncFunctionCallback <IPlayer>(async(player) => { var serverPlayer = (ServerPlayer)player; if (serverPlayer.IsSpawned) { serverPlayer.Character.Position = serverPlayer.Position; serverPlayer.Character.Rotation = serverPlayer.Rotation; serverPlayer.Character.Health = serverPlayer.Health; serverPlayer.Character.Armor = serverPlayer.Armor; serverPlayer.Character.Cash = serverPlayer.Cash; serverPlayer.Character.Thirst = serverPlayer.Thirst; serverPlayer.Character.Hunger = serverPlayer.Hunger; // serverPlayer.Character.Alcohol = serverPlayer.Alcohol; // serverPlayer.Character.Drugs = serverPlayer.Drugs; charsToUpdate.Add(serverPlayer.Character); } await Task.CompletedTask; }); await Alt.ForEachPlayers(callback); using var dbContext = _dbContextFactory.CreateDbContext(); dbContext.Characters.UpdateRange(charsToUpdate); await dbContext.SaveChangesAsync(); }); var vehiclesTask = Task.Run(async() => { var vehiclesToUpdate = new List <Core.Contracts.Models.Database.Vehicle>(); var callback = new AsyncFunctionCallback <IVehicle>(async(vehicle) => { var serverVehicle = (ServerVehicle)vehicle; if (serverVehicle.DbEntity != null) { serverVehicle.DbEntity.Position = serverVehicle.Position; serverVehicle.DbEntity.Rotation = serverVehicle.Rotation; serverVehicle.DbEntity.Locked = serverVehicle.LockState != AltV.Net.Enums.VehicleLockState.Unlocked; // serverVehicle.DbEntity.Fuel = serverVehicle.Fuel; // serverVehicle.DbEntity.Mileage = serverVehicle.Mileage; vehiclesToUpdate.Add(serverVehicle.DbEntity); } await Task.CompletedTask; }); await Alt.ForEachVehicles(callback); using var dbContext = _dbContextFactory.CreateDbContext(); dbContext.Vehicles.UpdateRange(vehiclesToUpdate); await dbContext.SaveChangesAsync(); }); return(Task.WhenAll(playersTask, vehiclesTask)); }