Let's begin! This guide assumes that you have added the plugin to your supported engine version and installed ACF IV in your Ultimate project. See ACF documentation for this process!
You may have your own system setup, this is to show how it may be structured. We will be making childs of relevant classes so we can remain updated, and will be filing them into the appropriate folders to track them organisationally
Create 4 folders:
MyProject (the name of your own project)
Maps subfolder under MyProject (for the copy of Ultimate maps and Lobby)
n00d (where relevant files pertaining to these systems live)
Lobby subfolder under n00d (relevant to the task today)
Highlight the FullSample folder and filter for Level, drag in L_UltOpenWorld and MenuMap into the Maps folder we created. Copy these across.
Duplicate the MenuMap and call it LobbyMap.
Rename L_UltOpenWorld to MyWorld (or use your own map). Save all.
Define your new menu and world maps in the Ascent UI Settings (Project Settings)
Also over in n00dLobby Project Settings, define them here too, including the LobbyMap
All classes you will be creating here are either ACF classes or base engine classes, the only child from the n00dLobby plugin you will need is the lobby component.
Create a child of BPC_N00dLobby, we will leave it named the convention it is automatically assigned - BPC_N00dLobby_Child.
Depending on where you installed n00dLobby (either from the launcher or dropped into the Plugins folder of your project), will determine where it exists. If installed from the Launcher you will find it in Engine>Plugins
Go ahead and drop it into the n00d/Lobby folder, select Move when prompted in the context menu
Also from the n00dLobby plugin, copy across DT_N00dLobbyCharacterData into the Lobby folder. You will have the chance to change the values in this data table to your characters later, but when we reach this step in the guide we will just be changing the defaults for brevity using the mannequin. Rename this file to DT_LobbyCharacterData.
IMPORTANT: This is how the system will know about your characters - you are free to create your own struct and data table for this process and are not limited to using this data table, but we are copying this so you see how the system works with these data.
For the purpose of the exercise, we will copy over a single instance of MI_Manny_01_New into the Lobby folder and colour them to show different character selections.
Open DT_LobbyCharacterData and fill out the values you see here, using SKM_Manny_Simple and ACF_MMTemplateABP from FullSample. Rename each character as their colours and apply index 0 of the materials respectively.
The lobby system uses these data to recreate your characters when you load into the main map. If you have dynamic data selected in the lobby you can handle that will a save object and load it in with the lobby component at the appropriate stage which should become clear to you later.
To keep this guide simple, we will not be using ACF's menu but rather copy across the examples from the n00dLobby plugin. Please study how the menu is constructed to integrate it into ACF menu at a later date, n00dLobby provides a clean way to access the system so its not complicated but will significantly increase this guide's complexity. And since all menus are inherently different, this will be left up to your implementation for how to approach this.
Rename both of these copies to WBP_N00dACFLobbyMenu and WBP_N00dACFLobby respectively
Back in the n00dLobby project settings, define the lobby widget
To note: since we are using SpawnSpectatorInLobby and DynamicPreviewPawns, we will now create custom player start classes and a spectator. If you are spawning into the lobby free roam you won't need this and would rather uncheck these defaults. This is out of the scope of the guide, but you are free change this however you see fit.
In the n00d/Lobby folder, create three base engine classes PlayerStart, PlayerController, and SpectatorPawn and rename them accordingly.
Open the PlayerStart we just created and add a CapsuleComponent and a child ArrowComponent, and also BPC_N00dLobby_Child. See the included n00dLobby example player start if you want the exact transform of these components, this is based on user preference. You may close this window once done.
Also open the SpectatorPawn we created and in the Class Defaults, uncheck AddDefaultMovementBindings
In the n00d/Lobby folder, create a child of ACFGameMode. Rename it N00dACFLobbyGameMode_BP
Find it in the class picker, if you don't know where to look.
That is now everything we need for the n00d/Lobby folder, we will be focusing on ACF classes exclusively now. Depending on how you want to manage your updates of ultimate, you can either safeguard from them or allow for updates to modify. Since Ultimate FullSample is designed to be updated, we are going to make childs. But you can decide to copy if you prefer. Just be aware that updates might break some things that have been childed. But its usually the better way to approach it for keeping up with the latest updates.
In FullSample/Integrations, create a child of ACF_GASUltimateGameMode_BP and ACFUlimatePlayerControllerBP, move the childs into the MyProject folder
In FullSample/UIIntegrations, create a child of ACF_UIMenuPC_BP and ACFMenuGameModeBP, move the childs into the MyProject folder
In FullSample/Ultimate, create a child of ACF_GASPlayer_BP, move the child into the MyProject folder
That is all the classes we will need. Now its time to fix up references and add relevant components.