public override async Task<PassengerList> PassengersAsync(World origin, World destination, Dice random, bool advancedCharacters)
        {

            var baseDM = 0;
            var lowDM = 1;
            var basicDM = 0;
            var middleDM = 0;
            var highDM = -4;

            if (origin.PopulationCode.Value <= 1)
                baseDM += -4;
            else if (origin.PopulationCode.Value == 6 || origin.PopulationCode.Value == 7)
                baseDM += 1;
            else if (origin.PopulationCode.Value >= 8)
                baseDM += 3;

            switch (origin.StarportCode.ToString())
            {
                case "A": baseDM += 2; break;
                case "B": baseDM += 1; break;
                case "E": baseDM += -1; break;
                case "X": baseDM += -3; break;
            }

            if (origin.ContainsRemark("A")) baseDM += 1;
            if (origin.ContainsRemark("R")) baseDM += -4;

            var result = new PassengerList();
            result.LowPassengers = random.D(PassengerTraffic(baseDM + lowDM, random));
            result.BasicPassengers = random.D(PassengerTraffic(baseDM + basicDM, random));
            result.MiddlePassengers = random.D(PassengerTraffic(baseDM + middleDM, random));
            result.HighPassengers = random.D(PassengerTraffic(baseDM + highDM, random));

            for (var i = 0; i < result.HighPassengers; i++)
                result.Passengers.Add(await PassengerDetailAsync(random, "High", advancedCharacters).ConfigureAwait(false));
            for (var i = 0; i < result.MiddlePassengers; i++)
                result.Passengers.Add(await PassengerDetailAsync(random, "Middle", advancedCharacters).ConfigureAwait(false));
            for (var i = 0; i < result.BasicPassengers; i++)
                result.Passengers.Add(await PassengerDetailAsync(random, "Basic", advancedCharacters).ConfigureAwait(false));
            for (var i = 0; i < result.LowPassengers; i++)
                result.Passengers.Add(await PassengerDetailAsync(random, "Low", advancedCharacters).ConfigureAwait(false));

            return result;
        }
        public override async Task <PassengerList> PassengersAsync(World origin, World destination, Dice random, bool advancedCharacters)
        {
            var baseDM   = 0;
            var lowDM    = 1;
            var basicDM  = 0;
            var middleDM = 0;
            var highDM   = -4;

            if (origin.PopulationCode.Value <= 1)
            {
                baseDM += -4;
            }
            else if (origin.PopulationCode.Value == 6 || origin.PopulationCode.Value == 7)
            {
                baseDM += 1;
            }
            else if (origin.PopulationCode.Value >= 8)
            {
                baseDM += 3;
            }

            switch (origin.StarportCode.ToString())
            {
            case "A": baseDM += 2; break;

            case "B": baseDM += 1; break;

            case "E": baseDM += -1; break;

            case "X": baseDM += -3; break;
            }

            if (origin.ContainsRemark("A"))
            {
                baseDM += 1;
            }
            if (origin.ContainsRemark("R"))
            {
                baseDM += -4;
            }

            var result = new PassengerList();

            result.LowPassengers    = random.D(PassengerTraffic(baseDM + lowDM, random));
            result.BasicPassengers  = random.D(PassengerTraffic(baseDM + basicDM, random));
            result.MiddlePassengers = random.D(PassengerTraffic(baseDM + middleDM, random));
            result.HighPassengers   = random.D(PassengerTraffic(baseDM + highDM, random));

            for (var i = 0; i < result.HighPassengers; i++)
            {
                result.Passengers.Add(await PassengerDetailAsync(random, "High", advancedCharacters).ConfigureAwait(false));
            }
            for (var i = 0; i < result.MiddlePassengers; i++)
            {
                result.Passengers.Add(await PassengerDetailAsync(random, "Middle", advancedCharacters).ConfigureAwait(false));
            }
            for (var i = 0; i < result.BasicPassengers; i++)
            {
                result.Passengers.Add(await PassengerDetailAsync(random, "Basic", advancedCharacters).ConfigureAwait(false));
            }
            for (var i = 0; i < result.LowPassengers; i++)
            {
                result.Passengers.Add(await PassengerDetailAsync(random, "Low", advancedCharacters).ConfigureAwait(false));
            }

            return(result);
        }
        public override async Task <PassengerList> PassengersAsync(World origin, World destination, Dice random, bool advancedCharacters)
        {
            var result = new PassengerList();

            Action <string, string, string> SetValues = (low, middle, high) =>
            {
                result.LowPassengers    = random.D(low);
                result.MiddlePassengers = random.D(middle);
                result.HighPassengers   = random.D(high);
            };

            var traffic = origin.PopulationCode.Value;

            if (origin.ContainsRemark("Ag"))
            {
                traffic += 0;
            }
            if (origin.ContainsRemark("Ai"))
            {
                traffic += 1;
            }
            if (origin.ContainsRemark("Ba"))
            {
                traffic += -5;
            }
            if (origin.ContainsRemark("De"))
            {
                traffic += -1;
            }
            if (origin.ContainsRemark("Fl"))
            {
                traffic += 0;
            }
            if (origin.ContainsRemark("Ga"))
            {
                traffic += 2;
            }
            if (origin.ContainsRemark("Hi"))
            {
                traffic += 0;
            }
            //if (origin.ContainsRemark("Ht")) traffic += 0;
            if (origin.ContainsRemark("IC"))
            {
                traffic += 1;
            }
            if (origin.ContainsRemark("In"))
            {
                traffic += 2;
            }
            if (origin.ContainsRemark("Lo"))
            {
                traffic += 0;
            }
            //if (origin.ContainsRemark("Lt")) traffic += 0;
            if (origin.ContainsRemark("Na"))
            {
                traffic += 0;
            }
            if (origin.ContainsRemark("NI"))
            {
                traffic += 0;
            }
            if (origin.ContainsRemark("Po"))
            {
                traffic += -2;
            }
            if (origin.ContainsRemark("Ri"))
            {
                traffic += -1;
            }
            //if (origin.ContainsRemark("Va")) traffic += 0;
            if (origin.ContainsRemark("Wa"))
            {
                traffic += 0;
            }
            if (origin.ContainsRemark("A"))
            {
                traffic += 2;
            }
            if (origin.ContainsRemark("R"))
            {
                traffic += 4;
            }

            if (destination.ContainsRemark("Ag"))
            {
                traffic += 0;
            }
            if (destination.ContainsRemark("Ai"))
            {
                traffic += -1;
            }
            if (destination.ContainsRemark("Ba"))
            {
                traffic += -5;
            }
            if (destination.ContainsRemark("De"))
            {
                traffic += -1;
            }
            if (destination.ContainsRemark("Fl"))
            {
                traffic += 0;
            }
            if (destination.ContainsRemark("Ga"))
            {
                traffic += 2;
            }
            if (destination.ContainsRemark("Hi"))
            {
                traffic += 4;
            }
            //if (destination.ContainsRemark("Ht")) traffic += 0;
            if (destination.ContainsRemark("IC"))
            {
                traffic += -1;
            }
            if (destination.ContainsRemark("In"))
            {
                traffic += 1;
            }
            if (destination.ContainsRemark("Lo"))
            {
                traffic += -4;
            }
            //if (destination.ContainsRemark("Lt")) traffic += 0;
            if (destination.ContainsRemark("Na"))
            {
                traffic += 0;
            }
            if (destination.ContainsRemark("NI"))
            {
                traffic += -1;
            }
            if (destination.ContainsRemark("Po"))
            {
                traffic += -1;
            }
            if (destination.ContainsRemark("Ri"))
            {
                traffic += 2;
            }
            //if (destination.ContainsRemark("Va")) traffic += 0;
            if (destination.ContainsRemark("Wa"))
            {
                traffic += 0;
            }
            if (destination.ContainsRemark("A"))
            {
                traffic += -2;
            }
            if (destination.ContainsRemark("R"))
            {
                traffic += -4;
            }


            if (traffic <= 0)
            {
                SetValues("0", "0", "0");
            }
            if (traffic == 1)
            {
                SetValues("2D-6", "1D-2", "0");
            }
            if (traffic == 2)
            {
                SetValues("2D", "1D", "1D-1D");
            }
            if (traffic == 3)
            {
                SetValues("2D", "2D-1D", "2D-2D");
            }
            if (traffic == 4)
            {
                SetValues("3D-1D", "2D-1D", "2D-1D");
            }
            if (traffic == 5)
            {
                SetValues("3D-1D", "3D-2D", "2D-1D");
            }
            if (traffic == 6)
            {
                SetValues("3D", "3D-2D", "3D-2D");
            }
            if (traffic == 7)
            {
                SetValues("3D", "3D-2D", "3D-2D");
            }
            if (traffic == 8)
            {
                SetValues("4D", "3D-1D", "3D-1D");
            }
            if (traffic == 9)
            {
                SetValues("4D", "3D", "3D-1D");
            }
            if (traffic == 10)
            {
                SetValues("5D", "3D", "3D-1D");
            }
            if (traffic == 11)
            {
                SetValues("5D", "4D", "3D");
            }
            if (traffic == 12)
            {
                SetValues("6D", "4D", "3D");
            }
            if (traffic == 13)
            {
                SetValues("6D", "4D", "4D");
            }
            if (traffic == 14)
            {
                SetValues("7D", "5D", "4D");
            }
            if (traffic == 15)
            {
                SetValues("8D", "5D", "4D");
            }
            if (traffic >= 16)
            {
                SetValues("9D", "6D", "5D");
            }


            if (result.LowPassengers < 0)
            {
                result.LowPassengers = 0;
            }
            if (result.MiddlePassengers < 0)
            {
                result.MiddlePassengers = 0;
            }
            if (result.HighPassengers < 0)
            {
                result.HighPassengers = 0;
            }

            for (var i = 0; i < result.HighPassengers; i++)
            {
                result.Passengers.Add(await PassengerDetailAsync(random, "High", advancedCharacters).ConfigureAwait(false));
            }
            for (var i = 0; i < result.MiddlePassengers; i++)
            {
                result.Passengers.Add(await PassengerDetailAsync(random, "Middle", advancedCharacters).ConfigureAwait(false));
            }
            for (var i = 0; i < result.LowPassengers; i++)
            {
                result.Passengers.Add(await PassengerDetailAsync(random, "Low", advancedCharacters).ConfigureAwait(false));
            }

            return(result);
        }