public DateTime?GetStartTime()
 {
     return(Drones.SelectMany(
                drone => drone.GetValidInstructions()
                ).OrderBy(
                i => i.EndAt
                ).Select(
                i => i.EndAt
                ).FirstOrDefault());
 }
 private IEnumerable <Unload> GetAllUnloadInstruction()
 {
     return(Drones.SelectMany(
                drone => drone.GetValidInstructions()
                .Where(
                    i => i.GetType() == typeof(Unload)
                    ).Select(
                    i => (i as Unload)
                    )
                ).OrderBy(
                u => u.EndAt
                ));
 }
 public IEnumerable <ResourceQuantity> GetStoredResourcesAt(DateTime time)
 {
     return(Drones.SelectMany(
                drone => drone.GetValidInstructions()
                .Where(
                    i => i.IsFinishedAt(time) && i.GetType() == typeof(Unload)
                    ).Select(
                    i => (i as Unload).Resource
                    )
                ).GroupBy(
                rq => rq.Resource
                ).Select(
                rqGroup => new ResourceQuantity()
     {
         Resource = rqGroup.Key,
         Quantity = rqGroup.Sum(
             rq => rq.Quantity
             )
     }
                ));
 }
Beispiel #4
0
        private void CheckAvailableShields(IGameLogger logger, int accountId, VaultView vault, Ship ship)
        {
            if (Shields == null)
            {
                Shields = new List <int>();
            }

            var tempShieldsGroup = Shields.Union(Drones.SelectMany(x => x.ShieldItems)).GroupBy(x => x).ToList();

            foreach (var grouping in tempShieldsGroup)
            {
                if (!vault.Shields.ContainsKey(grouping.Key))
                {
                    logger.LogWarning($"Check for player {accountId} on hangar with ship {ship.ID} resulted with equipped shields id:{grouping.Key} which are not owned!");
                    Shields.RemoveAll(x => x == grouping.Key);
                }
                else if (grouping.Count() > vault.Shields[grouping.Key])
                {
                    int diff = grouping.Count() - vault.Shields[grouping.Key];

                    Shields.RemoveAll(x => x == grouping.Key && diff-- > 0);
                    foreach (var drone in Drones)
                    {
                        if (diff <= 0)
                        {
                            break;
                        }

                        drone.ShieldItems.RemoveAll(x => x == grouping.Key && diff-- > 0);
                    }

                    if (diff != 0)
                    {
                        logger.LogWarning($"Check for player {accountId} on hangar with ship {ship.ID} resulted with a problematic difference of {diff} (shield check)");
                    }
                }
            }
        }