public void HandleMissionResultsViewControllerRetryButtonPressed(MissionResultsViewController viewController)
        {
            Challenge challenge  = ((CustomMissionDataSO)_missionLevelDetailViewController.missionNode.missionData).challenge;
            String    failedMods = LoadExternalModifiers(challenge);

            if (failedMods.Length == 0)
            {
                Gamemode.NextLevelIsIsolated("Custom Campaigns");
                _campaignFlowCoordinator.HandleMissionResultsViewControllerRetryButtonPressed(_missionResultsViewController);
            }
        }
        public void HandleMissionLevelDetailViewControllerDidPressPlayButtonPlay(MissionLevelDetailViewController viewController)
        {
            Challenge     challenge   = ((CustomMissionDataSO)viewController.missionNode.missionData).challenge;
            MissionDataSO missionData = viewController.missionNode.missionData;
            String        failedMods  = LoadExternalModifiers(challenge);
            List <GameplayModifierParamsSO> errorList = new List <GameplayModifierParamsSO>();

            if (failedMods.Length > 0)
            {
                foreach (string s in failedMods.Split(' '))
                {
                    errorList.Add(APITools.CreateModifierParam(Assets.ErrorIcon, "Error - External Mod", "Please install or update the following mod: " + s));
                }
            }
            if (viewController.missionNode.missionData.beatmapCharacteristic.descriptionLocalizationKey == "ERROR NOT FOUND")
            {
                errorList.Add(APITools.CreateModifierParam(Assets.ErrorIcon, "Error - Characteristic Not Found", "Could not find the characteristic \"" + challenge.characteristic + "\" for this map"));
            }
            else if (BeatmapLevelDataExtensions.GetDifficultyBeatmap(Loader.BeatmapLevelsModelSO.GetBeatmapLevelIfLoaded((missionData as CustomMissionDataSO).customLevel.levelID).beatmapLevelData, missionData.beatmapCharacteristic, missionData.beatmapDifficulty) == null)
            {
                errorList.Add(APITools.CreateModifierParam(Assets.ErrorIcon, "Error - Difficulty Not Found", "Could not find the difficulty \"" + challenge.difficulty.ToString() + "\" for this map"));
            }
            else
            {
                DifficultyData difficultyData = Collections.RetrieveDifficultyData(BeatmapLevelDataExtensions.GetDifficultyBeatmap(Loader.BeatmapLevelsModelSO.GetBeatmapLevelIfLoaded((missionData as CustomMissionDataSO).customLevel.levelID).beatmapLevelData, missionData.beatmapCharacteristic, missionData.beatmapDifficulty));
                foreach (string requirement in difficultyData.additionalDifficultyData._requirements)
                {
                    if (Collections.capabilities.Contains(requirement) || requirement.StartsWith("Complete Campaign Challenge - "))
                    {
                        continue;
                    }
                    errorList.Add(APITools.CreateModifierParam(Assets.ErrorIcon, "Error - Missing Level Requirement", "Could not find the capability to play levels with \"" + requirement + "\""));
                }
            }
            foreach (ChallengeRequirement requirement in challenge.requirements)
            {
                if (ChallengeRequirement.GetObjectiveName(requirement.type) == "ERROR")
                {
                    errorList.Add(APITools.CreateModifierParam(Assets.ErrorIcon, "Error - Mission Objective Not Found", "You likely have a typo in the requirement name"));
                }
            }
            if (errorList.Count == 0)
            {
                Gamemode.NextLevelIsIsolated("Custom Campaigns");
                _missionSelectionNavigationController.HandleMissionLevelDetailViewControllerDidPressPlayButton(viewController);
            }
            else
            {
                LoadModifiersPanel(errorList);
            }
        }