Get error when trying to update the game session

Well, I actually need to do this now. I have the solution if you or anyone needs it.

You will need to fix the ClassName.

.h

#pragma once

#include "CoreMinimal.h"

#include "Engine/Engine.h"
#include "GameFramework/PlayerState.h"
#include "Interfaces/OnlineSessionInterface.h"
#include "OnlineSessionSettings.h"
#include "OnlineDelegateMacros.h"
#include "OnlineSubsystem.h"
#include "OnlineSubsystemImpl.h"
#include "OnlineSubsystemUtils.h"
#include "OnlineSubsystemUtilsModule.h"
#include "GameFramework/PlayerController.h"
#include "OnlineSubsystemUtilsClasses.h"
#include "UObject/CoreOnline.h"

class APlayerController;
class IOnlineSubsystem;



// Couldn't use the default one as it is not exposed to other modules, had to re-create it here
// Helper class for various methods to reduce the call hierarchy
struct FHBGOnlineSubsystemBPCallHelper
{
public:
	FHBGOnlineSubsystemBPCallHelper(const TCHAR* CallFunctionContext, UWorld* World, FName SystemName = NAME_None)
		: OnlineSub(Online::GetSubsystem(World, SystemName))
		, FunctionContext(CallFunctionContext)
	{
		if (OnlineSub == nullptr)
		{
			FFrame::KismetExecutionMessage(*FString::Printf(TEXT("%s - Invalid or uninitialized OnlineSubsystem"), FunctionContext), ELogVerbosity::Warning);
		}
	}

	void QueryIDFromPlayerController(APlayerController* PlayerController)
	{
		UserID.Reset();
		//return const_cast<FUniqueNetId*>(UniqueNetIdPtr);
		if (APlayerState* PlayerState = (PlayerController != NULL) ? PlayerController->PlayerState : NULL)
		{
			UserID = PlayerState->GetUniqueId().GetUniqueNetId();
			if (!UserID.IsValid())
			{
				FFrame::KismetExecutionMessage(*FString::Printf(TEXT("%s - Cannot map local player to unique net ID"), FunctionContext), ELogVerbosity::Warning);
			}
		}
		else
		{
			FFrame::KismetExecutionMessage(*FString::Printf(TEXT("%s - Invalid player state"), FunctionContext), ELogVerbosity::Warning);
		}
	}


	bool IsValid() const
	{
		return UserID.IsValid() && (OnlineSub != nullptr);
	}

public:
	//TSharedPtr<const FUniqueNetId>& GetUniqueNetId()
	TSharedPtr</*class*/ const FUniqueNetId> UserID;
	IOnlineSubsystem* const OnlineSub;
	const TCHAR* FunctionContext;
};

#define INVALID_INDEX -1

This works in editor.

In any function you want to update the settings use this.

FHBGOnlineSubsystemBPCallHelper Helper(TEXT("UpdateSession"), GEngine->GetWorldFromContextObject(GetWorld(), EGetWorldErrorMode::LogAndReturnNull));

		Helper.QueryIDFromPlayerController(GetOwningPlayer());
		if (Helper.IsValid())
		{
			auto Session = Helper.OnlineSub->GetSessionInterface();
			if (Session.IsValid())
			{
				FOnlineSessionSettings* settings = Session->GetSessionSettings(*GI->serverName);
				if (settings)
				{
					UE_LOG(LogTemp, Warning, TEXT("settings ok"));

					settings->NumPublicConnections = 50;
					bool success = Session->UpdateSession(*GI->serverName, *settings, true);
					if (success)
					{
						UE_LOG(LogTemp, Warning, TEXT("update success"));
					}
					else
					{
						UE_LOG(LogTemp, Warning, TEXT("update fail"));
					}

				}
			}
		}

It just updates playerCount for an example, but all works in editor.