Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CustomCampaigns/Campaign/Missions/CompletionSubmission.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal async void Submit(string completionPost)

private async Task SubmitInternal(string completionPost)
{
var www = UnityWebRequest.Post(completionPost, JsonConvert.SerializeObject(this));
var www = UnityWebRequest.Post(completionPost, JsonConvert.SerializeObject(this), "application/json");
www.SetRequestHeader("User-Agent", _userAgent);

www.SendWebRequest();
Expand Down
2 changes: 1 addition & 1 deletion CustomCampaigns/Campaign/Missions/Mission.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public BeatmapLevel FindSong()
Dictionary<string, LoadedSaveData> loadedBeatmapSaveData = Loader.CustomLevelLoader.GetField<Dictionary<string, LoadedSaveData>, CustomLevelLoader>("_loadedBeatmapSaveData");
LoadedSaveData loadedSaveData = Loader.CustomLevelLoader.GetField<Dictionary<string, LoadedSaveData>, CustomLevelLoader>("_loadedBeatmapSaveData")
.Values.First(x => CultureInfo.CurrentCulture.CompareInfo.IndexOf(x.customLevelFolderInfo.folderPath, songidSearch, CompareOptions.IgnoreCase) >= 0);
missionHash = SongCore.Utilities.Hashing.GetCustomLevelHash(loadedSaveData.customLevelFolderInfo, loadedSaveData.standardLevelInfoSaveData);
missionHash = SongCore.Utilities.Hashing.ComputeCustomLevelHash(loadedSaveData.customLevelFolderInfo, loadedSaveData.standardLevelInfoSaveData);
}

if (missionHash != "")
Expand Down
3 changes: 3 additions & 0 deletions CustomCampaigns/CustomCampaigns.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@
<HintPath>$(BeatSaberDir)\Beat Saber_Data\Managed\BeatmapCore.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="BeatSaber.GameSettings">
<HintPath>$(BeatSaberDir)\Beat Saber_Data\Managed\BeatSaber.GameSettings.dll</HintPath>
</Reference>
<Reference Include="BeatSaber.ViewSystem">
<HintPath>$(BeatSaberDir)\Beat Saber_Data\Managed\BeatSaber.ViewSystem.dll</HintPath>
<Private>False</Private>
Expand Down
169 changes: 95 additions & 74 deletions CustomCampaigns/Managers/CustomCampaignManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
using System.Threading.Tasks;
using UnityEngine;
using Zenject;
using static SongCore.Data.ExtraSongData;
using static SongCore.Data.SongData;

namespace CustomCampaigns.Managers
{
Expand Down Expand Up @@ -461,22 +461,23 @@ private void StartCampaignLevel(Action beforeSceneSwitchCallback)
ColorScheme beatmapOverrideColorScheme = beatmapLevel.GetColorScheme(beatmapKey.beatmapCharacteristic, beatmapKey.difficulty);

_menuTransitionsHelper.StartStandardLevel("Solo",
beatmapKey,
beatmapLevel,
gameplaySetupViewController.environmentOverrideSettings,
overrideColorScheme,
beatmapOverrideColorScheme,
gameplayModifiers,
playerSettings,
null,
_environmentsListModel,
"Menu",
false,
false,
beforeSceneSwitchCallback,
null,
OnFinishedStandardLevel,
OnRestartedStandardLevel);
beatmapKey,
beatmapLevel,
gameplaySetupViewController.environmentOverrideSettings,
overrideColorScheme,
gameplaySetupViewController.colorSchemesSettings.overrideDefaultColors, // playerOverrideLightshowColors - new parameter in 1.40.4
beatmapOverrideColorScheme,
gameplayModifiers,
playerSettings,
null,
_environmentsListModel,
"Menu",
false,
false,
beforeSceneSwitchCallback,
null,
OnFinishedStandardLevel,
OnRestartedStandardLevel);
}

private void OnFinishedStandardLevel(StandardLevelScenesTransitionSetupDataSO standardLevelScenesTransitionSetupDataSO, LevelCompletionResults levelCompletionResults)
Expand Down Expand Up @@ -747,7 +748,7 @@ private async Task<List<GameplayModifierParamsSO>> CheckForErrors(Mission missio
Plugin.logger.Debug("null beatmaplevel");
}
BeatmapKey beatmapKey = BeatmapUtils.GetMatchingBeatmapKey(beatmapLevel.levelID, missionData.beatmapCharacteristic, missionData.beatmapDifficulty);
DifficultyData difficultyData = Collections.RetrieveDifficultyData(beatmapLevel, beatmapKey);
DifficultyData difficultyData = Collections.GetCustomLevelSongDifficultyData(beatmapKey);

if (difficultyData == null)
{
Expand Down Expand Up @@ -854,47 +855,62 @@ private bool OptionalWarningsDisabled(string optionalMod)

#region Affinity Patches
[AffinityPrefix]
[AffinityPatch(typeof(MissionLevelScenesTransitionSetupDataSO), "Init", argumentVariations: new AffinityArgumentType[]
{
AffinityArgumentType.Normal, AffinityArgumentType.Ref, AffinityArgumentType.Normal, AffinityArgumentType.Normal, AffinityArgumentType.Normal, AffinityArgumentType.Normal,
AffinityArgumentType.Normal, AffinityArgumentType.Normal, AffinityArgumentType.Normal, AffinityArgumentType.Normal, AffinityArgumentType.Normal,
AffinityArgumentType.Normal, AffinityArgumentType.Normal
}, argumentTypes: new Type[]
{
typeof(string), typeof(BeatmapKey), typeof(BeatmapLevel), typeof(MissionObjective[]), typeof(ColorScheme), typeof(GameplayModifiers),
typeof(PlayerSpecificSettings), typeof(EnvironmentsListModel), typeof(BeatmapLevelsModel), typeof(AudioClipAsyncLoader),
typeof(SettingsManager), typeof(BeatmapDataLoader), typeof(string)
})]
public bool MissionLevelScenesTransitionSetupDataSOInitPrefix(ref MissionLevelScenesTransitionSetupDataSO __instance,
ref SceneInfo ____missionGameplaySceneInfo,
ref SceneInfo ____gameCoreSceneInfo,
string missionId,
in BeatmapKey beatmapKey,
BeatmapLevel beatmapLevel,
MissionObjective[] missionObjectives,
ColorScheme overrideColorScheme,
GameplayModifiers gameplayModifiers,
PlayerSpecificSettings playerSpecificSettings,
EnvironmentsListModel environmentsListModel,
BeatmapLevelsModel beatmapLevelsModel,
AudioClipAsyncLoader audioClipAsyncLoader,
SettingsManager settingsManager,
BeatmapDataLoader beatmapDataLoader,
string backButtonText)
[AffinityPatch(typeof(MissionLevelScenesTransitionSetupDataSO),
nameof(MissionLevelScenesTransitionSetupDataSO.Init), argumentVariations: new AffinityArgumentType[]
{
AffinityArgumentType.Normal, AffinityArgumentType.Ref, AffinityArgumentType.Normal,
AffinityArgumentType.Normal, AffinityArgumentType.Normal, AffinityArgumentType.Normal,
AffinityArgumentType.Normal, AffinityArgumentType.Normal, AffinityArgumentType.Normal,
AffinityArgumentType.Normal, AffinityArgumentType.Normal,
AffinityArgumentType.Normal, AffinityArgumentType.Normal
}, argumentTypes: new Type[]
{
typeof(string), typeof(BeatmapKey), typeof(BeatmapLevel), typeof(MissionObjective[]),
typeof(ColorScheme), typeof(GameplayModifiers),
typeof(PlayerSpecificSettings), typeof(EnvironmentsListModel), typeof(BeatmapLevelsModel),
typeof(AudioClipAsyncLoader),
typeof(SettingsManager), typeof(BeatmapDataLoader), typeof(string)
})]
public bool MissionLevelScenesTransitionSetupDataSoInitPrefix(
ref MissionLevelScenesTransitionSetupDataSO __instance,
ref SceneInfo ____missionGameplaySceneInfo,
ref SceneInfo ____gameCoreSceneInfo,
string missionId,
in BeatmapKey beatmapKey,
BeatmapLevel beatmapLevel,
MissionObjective[] missionObjectives,
ColorScheme overrideColorScheme,
GameplayModifiers gameplayModifiers,
PlayerSpecificSettings playerSpecificSettings,
EnvironmentsListModel environmentsListModel,
BeatmapLevelsModel beatmapLevelsModel,
AudioClipAsyncLoader audioClipAsyncLoader,
SettingsManager settingsManager,
BeatmapDataLoader beatmapDataLoader,
string backButtonText)
{
__instance.SetProperty("missionId", missionId);
EnvironmentInfoSO environmentInfoBySerializedNameSafe = environmentsListModel.GetEnvironmentInfoBySerializedNameSafe(beatmapLevel.GetEnvironmentName(beatmapKey.beatmapCharacteristic, beatmapKey.difficulty));

GameplaySetupViewController gameplaySetupViewController = _campaignFlowCoordinator.GetField<GameplaySetupViewController, CampaignFlowCoordinator>("_gameplaySetupViewController");
OverrideEnvironmentSettings overrideEnvironmentSettings = gameplaySetupViewController.environmentOverrideSettings;
bool usingOverrideEnvironment = overrideEnvironmentSettings != null && overrideEnvironmentSettings.overrideEnvironments;
EnvironmentInfoSO environmentInfoBySerializedNameSafe =
environmentsListModel.GetEnvironmentInfoBySerializedNameSafe(
beatmapLevel.GetEnvironmentName(beatmapKey.beatmapCharacteristic, beatmapKey.difficulty));

GameplaySetupViewController gameplaySetupViewController =
_campaignFlowCoordinator.GetField<GameplaySetupViewController, CampaignFlowCoordinator>(
"_gameplaySetupViewController");
OverrideEnvironmentSettings overrideEnvironmentSettings =
gameplaySetupViewController.environmentOverrideSettings;
bool usingOverrideEnvironment =
overrideEnvironmentSettings != null && overrideEnvironmentSettings.overrideEnvironments;

if (usingOverrideEnvironment)
{
EnvironmentInfoSO overrideEnvironmentInfoForType = overrideEnvironmentSettings.GetOverrideEnvironmentInfoForType(environmentInfoBySerializedNameSafe.environmentType);
EnvironmentInfoSO overrideEnvironmentInfoForType =
overrideEnvironmentSettings.GetOverrideEnvironmentInfoForType(environmentInfoBySerializedNameSafe
.environmentType);
if (overrideEnvironmentInfoForType != null)
{
if (environmentInfoBySerializedNameSafe.environmentName == overrideEnvironmentInfoForType.environmentName)
if (environmentInfoBySerializedNameSafe.environmentName ==
overrideEnvironmentInfoForType.environmentName)
{
usingOverrideEnvironment = false;
}
Expand All @@ -905,26 +921,29 @@ public bool MissionLevelScenesTransitionSetupDataSOInitPrefix(ref MissionLevelSc
}
}

ColorScheme colorScheme = ((overrideColorScheme != null) ? new ColorScheme(overrideColorScheme, environmentInfoBySerializedNameSafe.colorScheme) : new ColorScheme(environmentInfoBySerializedNameSafe.colorScheme));

__instance.SetProperty<LevelScenesTransitionSetupDataSO, GameplayCoreSceneSetupData>("gameplayCoreSceneSetupData",
new GameplayCoreSceneSetupData(beatmapKey: beatmapKey,
beatmapLevel: beatmapLevel,
gameplayModifiers: gameplayModifiers,
playerSpecificSettings: playerSpecificSettings,
practiceSettings: null,
useTestNoteCutSoundEffects: false,
targetEnvironmentInfo: environmentInfoBySerializedNameSafe,
originalEnvironmentInfo: environmentInfoBySerializedNameSafe,
colorScheme,
settingsManager,
audioClipAsyncLoader,
beatmapDataLoader,
beatmapLevelsModel,
null,
enableBeatmapDataCaching: true,
environmentsListModel,
null));
ColorScheme colorScheme = ((overrideColorScheme != null)
? new ColorScheme(overrideColorScheme, environmentInfoBySerializedNameSafe.colorScheme)
: new ColorScheme(environmentInfoBySerializedNameSafe.colorScheme));

__instance.SetProperty<LevelScenesTransitionSetupDataSO, GameplayCoreSceneSetupData>(
"gameplayCoreSceneSetupData",
new GameplayCoreSceneSetupData(beatmapKey: beatmapKey,
beatmapLevel: beatmapLevel,
gameplayModifiers: gameplayModifiers,
playerSpecificSettings: playerSpecificSettings,
practiceSettings: null,
useTestNoteCutSoundEffects: false,
targetEnvironmentInfo: environmentInfoBySerializedNameSafe,
originalEnvironmentInfo: environmentInfoBySerializedNameSafe,
colorScheme,
settingsManager,
audioClipAsyncLoader,
beatmapDataLoader,
beatmapLevelsModel,
_beatmapLevelsEntitlementModel,
enableBeatmapDataCaching: true,
environmentsListModel,
null));
SceneInfo[] scenes = new SceneInfo[]
{
environmentInfoBySerializedNameSafe.sceneInfo,
Expand All @@ -934,8 +953,10 @@ public bool MissionLevelScenesTransitionSetupDataSOInitPrefix(ref MissionLevelSc
SceneSetupData[] sceneSetupData = new SceneSetupData[]
{
new EnvironmentSceneSetupData(environmentInfoBySerializedNameSafe, beatmapLevel, hideBranding: false),
new MissionGameplaySceneSetupData(missionObjectives, playerSpecificSettings.autoRestart, beatmapKey, beatmapLevel, gameplayModifiers, backButtonText),
__instance.GetProperty<GameplayCoreSceneSetupData, LevelScenesTransitionSetupDataSO>("gameplayCoreSceneSetupData"),
new MissionGameplaySceneSetupData(missionObjectives, playerSpecificSettings.autoRestart, beatmapKey,
beatmapLevel, gameplayModifiers, backButtonText),
__instance.GetProperty<GameplayCoreSceneSetupData, LevelScenesTransitionSetupDataSO>(
"gameplayCoreSceneSetupData"),
new GameCoreSceneSetupData()
};

Expand Down