public (bool success, string possibleError) Init(object parameter, int seed)
        {
            if (parameter == null)
            {
                // If no parameters are given
                this.generateType        = typeof(int);
                this.chosenMode          = GenerateMode.Random;
                this.currentMinInclusive = IntegerGenerator.defaultMinIntInclusive;
                this.currentMaxExclusive = IntegerGenerator.defaultMaxIntExclusive;
            }
            else if (parameter.GetType() == typeof(string))
            {
                string tempParameter = (string)parameter;
                // Parse parameters
                foreach (string separator in rangeSeparators)
                {
                    if (tempParameter.Contains(separator))
                    {
                        string[] splitted = tempParameter.Split(new string[] { separator }, StringSplitOptions.None);
                        if (splitted.Length != 2)
                        {
                            return(success : false, possibleError : "Range for random should contain exactly 2 items, e.g. 13-4536");
                        }

                        if (long.TryParse(splitted[0], out long resultMin))
                        {
                            // Check if wanted min inclusive is int or long range
                            if (resultMin < IntegerGenerator.intMin || resultMin > IntegerGenerator.intMax)
                            {
                                this.currentMinInclusive = resultMin;
                            }
                            else
                            {
                                this.currentMinInclusive = (int)resultMin;
                            }
                        }
                        else
                        {
                            return(success : false, possibleError : $"{splitted[0]} is not number or it is outside of range {long.MinValue} .. {long.MaxValue}");
                        }

                        if (long.TryParse(splitted[1], out long resultMax))
                        {
                            // Check if wanted min inclusive is int or long range
                            if (resultMax < IntegerGenerator.intMin || resultMax > IntegerGenerator.intMax)
                            {
                                this.currentMaxExclusive = resultMax;
                            }
                            else
                            {
                                this.currentMaxExclusive = (int)resultMax;
                            }
                        }
                        else
                        {
                            return(success : false, possibleError : $"{splitted[0]} is not number or it is outside of range {long.MinValue} .. {long.MaxValue}");
                        }

                        // Check that min and max are same type
                        Type tOfMin = this.currentMinInclusive.GetType();
                        Type tOfMax = this.currentMaxExclusive.GetType();

                        if (tOfMin != tOfMax)
                        {
                            // If one is int and another is long, turn both to long
                            if (tOfMin == typeof(int))
                            {
                                this.currentMinInclusive = (long)(int)this.currentMinInclusive;
                            }

                            if (tOfMax == typeof(int))
                            {
                                this.currentMaxExclusive = (long)(int)this.currentMaxExclusive;
                            }
                        }

                        this.generateType = this.currentMinInclusive.GetType();
                        this.chosenMode   = GenerateMode.Random;
                    }
                }
            }
            else
            {
                return(success : false, possibleError : ErrorMessages.UnsupportedParameterType(LongName, "Init", parameter.GetType()));
            }

            if (this.chosenMode == GenerateMode.Random)
            {
                this.rng        = new Random(seed);
                this.storedSeed = seed;
                this.NextStep();
            }
            else if (this.chosenMode == GenerateMode.WeightedRandom)
            {
                // TODO: Add code
            }

            return(success : true, possibleError : "");
        }