/// <summary>
        ///     Collects and condenses the list of server settings that belong
        ///     in GameUserSettings.ini
        /// </summary>
        ///
        /// <returns>The finalized list of server settings ready for writing to file</returns>
        private List <String> generateGameUserIni()
        {
            List <String> settings = new List <string>();

            Boolean[] defaultFalse =
            {
                (Boolean)joinNotify.IsChecked,
                (Boolean)thirdPerson.IsChecked,
                (Boolean)mapLocation.IsChecked,
                (Boolean)tributeDownloads.IsChecked,
                (Boolean)proximityChat.IsChecked,
                (Boolean)serverPve.IsChecked,
                (Boolean)serverHardcore.IsChecked,
                (Boolean)allowHud.IsChecked,
                (Boolean)flyerCarryPve.IsChecked,
                (Boolean)caveBuildPve.IsChecked,
                (Boolean)dinosaurDecay.IsChecked
            };

            Boolean[] defaultTrue =
            {
                (Boolean)leaveNotify.IsChecked,
                (Boolean)globalChat.IsChecked,
                (Boolean)structureDecayPve.IsChecked,
                (Boolean)structureDecayPvp.IsChecked,
            };

            float[] floatValues =
            {
                // Default 1.0
                float.Parse(structureDistance.Text),
                float.Parse(daySpeed.Text),
                float.Parse(nightSpeed.Text),
                float.Parse(dayCycle.Text),
                float.Parse(playerDamage.Text),
                float.Parse(dinoDamage.Text),
                float.Parse(structureDamage.Text),
                float.Parse(playerResist.Text),
                float.Parse(dinoResist.Text),
                float.Parse(structureResist.Text),
                float.Parse(structureDecayMultiplier.Text),
                float.Parse(dinoCount.Text),
                float.Parse(xpMultiplier.Text),
                float.Parse(pveStructureDecayMultiplier.Text),
                float.Parse(pveStructureDestructionPeriod.Text),
                float.Parse(saddleStructureLimit.Text),
                float.Parse(perPlatformStructureMultiplier.Text),
                float.Parse(tameMultiplier.Text),
                float.Parse(harvestMultiplier.Text),
                float.Parse(resourceHealth.Text),
                float.Parse(resourceRespawn.Text),
                float.Parse(playerWater.Text),
                float.Parse(playerFood.Text),
                float.Parse(playerStamina.Text),
                float.Parse(playerHealth.Text),
                float.Parse(dinoFood.Text),
                float.Parse(dinoStamina.Text),
                float.Parse(dinoHealth.Text),

                // Default 4.0
                float.Parse(difficulty.Text)
            };

            int[] intValues =
            {
                // Default 50
                int.Parse(maxPlayers.Text)
            };

            String[] stringValues =
            {
                // Default blank
                serverPassword.Text,
                adminPassword.Text,
                spectatorPassword.Text,
                banList.Text
            };

            GameUserIni game = new GameUserIni(motd.Text);

            settings = game.write(defaultFalse, defaultTrue, floatValues, stringValues, intValues);

            return(settings);
        }
        /// <summary>
        ///     Collects and condenses the list of server settings that belong
        ///     in GameUserSettings.ini
        /// </summary>
        /// 
        /// <returns>The finalized list of server settings ready for writing to file</returns>
        private List<String> generateGameUserIni()
        {
            List<String> settings = new List<string>();

            Boolean[] defaultFalse =
            {
                (Boolean)joinNotify.IsChecked,
                (Boolean)thirdPerson.IsChecked,
                (Boolean)mapLocation.IsChecked,
                (Boolean)tributeDownloads.IsChecked,
                (Boolean)proximityChat.IsChecked,
                (Boolean)serverPve.IsChecked,
                (Boolean)serverHardcore.IsChecked,
                (Boolean)allowHud.IsChecked,
                (Boolean)flyerCarryPve.IsChecked,
                (Boolean)caveBuildPve.IsChecked,
                (Boolean)dinosaurDecay.IsChecked
            };

            Boolean[] defaultTrue =
            {
                (Boolean)leaveNotify.IsChecked,
                (Boolean)globalChat.IsChecked,
                (Boolean)structureDecayPve.IsChecked,
                (Boolean)structureDecayPvp.IsChecked,
            };

            float[] floatValues =
            {
                // Default 1.0
                float.Parse(structureDistance.Text),
                float.Parse(daySpeed.Text),
                float.Parse(nightSpeed.Text),
                float.Parse(dayCycle.Text),
                float.Parse(playerDamage.Text),
                float.Parse(dinoDamage.Text),
                float.Parse(structureDamage.Text),
                float.Parse(playerResist.Text),
                float.Parse(dinoResist.Text),
                float.Parse(structureResist.Text),
                float.Parse(structureDecayMultiplier.Text),
                float.Parse(dinoCount.Text),
                float.Parse(xpMultiplier.Text),
                float.Parse(pveStructureDecayMultiplier.Text),
                float.Parse(pveStructureDestructionPeriod.Text),
                float.Parse(saddleStructureLimit.Text),
                float.Parse(perPlatformStructureMultiplier.Text),
                float.Parse(tameMultiplier.Text),
                float.Parse(harvestMultiplier.Text),
                float.Parse(resourceHealth.Text),
                float.Parse(resourceRespawn.Text),
                float.Parse(playerWater.Text),
                float.Parse(playerFood.Text),
                float.Parse(playerStamina.Text),
                float.Parse(playerHealth.Text),
                float.Parse(dinoFood.Text),
                float.Parse(dinoStamina.Text),
                float.Parse(dinoHealth.Text),

                // Default 4.0
                float.Parse(difficulty.Text)
            };

            int[] intValues =
            {
                // Default 50
                int.Parse(maxPlayers.Text)
            };

            String[] stringValues =
            {
                // Default blank
                serverPassword.Text,
                adminPassword.Text,
                spectatorPassword.Text,
                banList.Text
            };

            GameUserIni game = new GameUserIni(motd.Text);
            settings = game.write(defaultFalse, defaultTrue, floatValues, stringValues, intValues);

            return settings;
        }
        /// <summary>
        ///     Saves the server settings when clicked
        /// </summary>
        ///
        /// <param name="sender">The object that sent the event</param>
        /// <param name="e">Arguments for the event</param>
        private void generateClick(object sender, RoutedEventArgs e)
        {
            List <String> errors = validate();

            if (errors.Count > 0)
            {
                String error = "";

                foreach (String err in errors)
                {
                    error += err + "\n";
                }

                MessageBox.Show(error);
            }
            else
            {
                // Ensure server is installed
                String serverExe = Reference.serversDirectory + serverName.Text + Reference.serverExePath;
                if (!File.Exists(serverExe))
                {
                    updateServer();
                }

                // Save ini files
                List <String> game;
                List <String> gameUser;

                game     = generateGameIni();
                gameUser = generateGameUserIni();

                GameIni.saveFile(serverName.Text, game);
                GameUserIni.saveFile(serverName.Text, gameUser);

                // Save congifuration file
                String[] configKeys =
                {
                    "serverName",
                    "mods",
                    "map"
                };

                String[] values =
                {
                    serverName.Text,
                    modList.Text,
                    serverMap.Text
                };

                ConfigData serverConfig = new ConfigData("serverData", Reference.serversDirectory + serverName.Text);

                List <String> settings = new List <String>();

                for (int i = 0; i < configKeys.Length; i++)
                {
                    settings.Add(configKeys[i] + "=" + values[i]);
                }

                serverConfig.write(settings);
            }
        }