Character select stage
Characters stand on a rotating 3D ring. Browse with arrows, mouse wheel, drag or gamepad; stats show as bars; type your player name; Online/Offline switch.
DA_NLS_Characters · DA_NLS_UI › Character SelectA complete multiplayer front end you drop into an Unreal project: pick a character, play alone, then host or join games over Epic Online Services or your local network, with chat, voice, teams, game modes, stats and a full in-game menu. You change almost everything from four Data Assets, without writing code.
Grouped by what a player experiences. Each card ends with where you change it.
Characters stand on a rotating 3D ring. Browse with arrows, mouse wheel, drag or gamepad; stats show as bars; type your player name; Online/Offline switch.
DA_NLS_Characters · DA_NLS_UI › Character SelectPress Backspace (gamepad Menu) during play: Find Games, Host Game, Team, Friends, Stats and Settings in one window you can resize and scale.
DA_NLS_UI › Server BrowserEpic Online Services lobbies over peer-to-peer (cross-platform, no port forwarding) or your local network. If Epic isn't set up, it quietly falls back to LAN.
Character select › Online button · Config/DefaultEngine.iniFree For All, Deathmatch, Team vs Team, Battle Royale and Co-op, with score and time limits, respawns, teams and friendly fire. Add your own.
DA_NLS_Levels › Game ModesWaiting for players → everyone presses Ready → countdown → round. Optionally everyone travels to the voted level together first.
DA_NLS_Levels › Game Modes › Match StartOne button joins the best open game (lowest ping, then most players), skips full or locked rounds, and hosts a new one if none is found.
DA_NLS_GameSettings › Quick MatchSearch by name, host, level or mode; sort by ping, players or name; filter by mode and level; hide full games and games already in a round.
DA_NLS_UI › Default Server FiltersPick your team or let the game choose, automatic balancing before each round, team colours everywhere, and a Spectate button.
DA_NLS_GameSettings › TeamsHold Left Alt to see Kills, Deaths, Ping (or your own columns). A bar at the top shows the mode, timer, team scores and the winner banner.
DA_NLS_UI › Scoreboard / TeamsThe leader picks the next level and takes everyone along (seamless travel), or leads the whole team into another game. Members vote and mark Ready.
Team tab · DA_NLS_GameSettings › TravelA leaving host hands the game to another player who re-hosts it, and everyone follows. Dedicated servers are supported too.
DA_NLS_GameSettings › Sessions / Dedicated ServerIf the game crashed or the connection dropped, the next start offers REJOIN to go straight back into that game.
DA_NLS_GameSettings › ReconnectSee which friends are online or playing, join their game, invite them to yours, accept invites from a banner or the Epic overlay.
Friends tab (online only)Host an invite-only game: it is not listed anywhere, and the only way in is an invite from someone inside.
Host Game › VisibilityAll, Team and Whisper channels, a fading chat box, history, spam limits, blocked words, and chat commands for every setting.
DA_NLS_GameSettings › Chat · DA_NLS_UI › ChatPush-to-talk (V) or always-on through Epic voice rooms, volume and microphone sliders, and a green dot by whoever is talking.
DA_NLS_GameSettings › Voice ChatMute, Epic block list, report to Epic, vote kick when the leader is away, and a host ban list that remembers troublemakers.
DA_NLS_GameSettings › ModerationRound stats go to Epic's stats service, feeding leaderboards and achievements. The Stats tab shows your totals and rankings.
DA_NLS_GameSettings › Online StatsYour character, name and settings are kept in Epic's cloud storage, so they follow you to any PC you sign in on.
DA_NLS_GameSettings › PlayerGraphics, audio volumes, look sensitivity and invert Y, key rebinding, chat and voice preferences, and the menu's own size.
In-game menu › SettingsCovers every level change and waits until your character, textures and shaders are ready, with level art and random tips.
DA_NLS_UI › Loading ScreenEach player gets a free Player Start; when they run out, players are placed in rings around one, never inside walls.
DA_NLS_GameSettings › SpawningEvery screen works with a controller: shoulder buttons switch tabs, sticks scroll and turn, the selected button grows and glows.
DA_NLS_UI › Gamepad & KeyboardConsole commands photograph every character and level and plug the pictures straight into the Data Assets.
NLS.CapturePortraits · NLS.CaptureMapThumbnailEvery on-screen text is localizable; system chat lines are built on each player's machine, so everyone reads them in their own language.
Tools › Localization DashboardEvery screen is built in C++ but can be replaced by your own Widget Blueprint child while keeping all the logic.
DA_NLS_UI › Widget ClassesFrom an empty project to a working character select and in-game menu, then how to change characters, levels, modes and the look.
NiceLobby folder into your project's Plugins folder
(create the folder if it doesn't exist). The project must be a C++ project; any game module works, even an empty one..uproject › Generate Visual Studio project files, open the solution and
build Development Editor, or just open the project and let it build./Game/NiceLobby/Data, a Widget Blueprint for every screen in /Game/NiceLobby/UI (see
Changing the look), the character select level L_NLS_CharacterSelect and a small travel level
L_NLS_Transition. Assets that already exist are left alone.L_NLS_CharacterSelect.
If you moved the Data Assets, set them in Project Settings › Plugins › Nice Lobby.PC_Sandbox controller, the AC_VisualOverrideManager look component and the retargeted characters.
For another project, edit the PRESET block at the top of Content/Python/nls_setup.py or fill the Data Assets by hand.Everything you would normally change lives in these four files. Double-click one to edit it. Anything you leave empty uses the plugin's default.
Every character: name, role, description, portrait, colour, stats, the pawn it spawns as and its look. Also how the character select stage shows them.
All settings →The character select level, the single-player level, the levels a host can pick, and the game modes with their rules.
All settings →Colours, fonts, sounds, texts, keys, menu size, scoreboard columns, chat box, loading screen and the widget classes for every screen.
All settings →Game mode class, spawning, travel, chat and voice rules, teams, moderation, sessions, stats, Epic sign-in, dedicated servers.
All settings →DA_NLS_Characters › Characters › +.NLS.CapturePortraits in the console to make its portrait.DA_NLS_Levels › Multiplayer Maps › +.NLS.CaptureMapThumbnail for its picture.DA_NLS_Levels › Game Modes.| Mode | How you win | Teams | Limits | Respawn | Late joiners |
|---|---|---|---|---|---|
| Free For All | Nobody wins: free play (also used for single player) | No | None | Yes | Play right away |
| Deathmatch | Most kills | No | 25 kills or 10 min | Yes | Play right away |
| Team vs Team | Team with the most kills | 2 | 50 kills or 15 min | Yes | Play right away |
| Battle Royale | Last player standing | No | None | No (one life) | Watch until next round |
| Co-op | Your game says the mission succeeded | Everyone together | Your choice | Yes | Play right away |
The plugin runs the lobby, rounds and scores. Your game only needs to tell it a few things.
| Your game does… | Call this (Blueprint or C++) | On |
|---|---|---|
| Someone dies | ReportKill(Killer, Victim): +1 Kills, +1 Deaths, scores, respawn timer or elimination | NLS Game Mode (server) |
| Before applying damage | CanDamage(Instigator, Victim): false for teammates (unless friendly fire), co-op partners, between rounds and spectators | NLS Game Mode |
| Co-op mission ends | EndCoopRound(bSuccess) | NLS Game Mode |
| Any other score (captures, assists…) | AddStat(Name, Delta) / SetStat, then add a scoreboard column with that name | NLS Player State |
| A message for everyone | BroadcastChatNotice(Text) | NLS Game Mode |
| Your own look system | Implement INLSCharacterAppearanceInterface on the pawn | Your pawn |
Gameplay levels use NLSGameMode (or your child of it) from Game Settings › Default Game Mode Class. Your own
player controller goes in Gameplay Player Controller Class; the menu keys are added to any controller automatically.
Add the NLS Look Sensitivity modifier to your Look action in the Input Mapping Context. For rebinding, turn on Project Settings › Enhanced Input › Enable User Settings and give each action Player Mappable Key Settings with a name.
Create a Sound Mix and Master / Music / Effects Sound Classes, set your sounds to use them, and pick them in DA_NLS_UI › Audio.
Without them, the master slider still turns the whole game up and down.
The built-in screens use one theme from DA_NLS_UI › Theme. These are the default colours: cool graphite with a warm amber accent.
| Colour | Default | Used for |
|---|---|---|
| Panel | #10151C | Windows and panels |
| Surface | #1A212B | Rows, inputs, cards |
| Accent | #F2A93B | Main buttons, selection, highlights |
| Text | #EEF2F6 | Normal text (Muted: #8E9AAB) |
| Success · Warning · Danger | #4CC38A · #E8C14A · #E5534B | Ready, good ping · medium ping · errors, kick buttons, bad ping |
/Game/NiceLobby/UI, for example WBP_NLS_ServerBrowser (the in-game menu).ServerList, RefreshButton):
that's how the C++ finds them. If you delete one, that feature is simply skipped.WBP_NLS_* child of every Nice Lobby widget class with the full default layout in its Designer, and puts them in
DA_NLS_UI › Widget Classes. Existing ones are never touched. To start a screen over from the current
DA_NLS_UI look, delete its Blueprint and run the tool again (or from Python:
nls_setup.create_widget_blueprints(overwrite=True), which rebuilds them all).DA_NLS_UI when the Blueprint was made)| Widget Blueprint | Parent class | Some widget names the C++ uses |
|---|---|---|
| WBP_NLS_CharacterSelect | NLSCharacterSelectWidget | StartButton, QuickMatchButton, RejoinButton, PlayerNameBox, PrevButton, NextButton, ServiceButton, StatsBox, CarouselClip, CardsBox, QuitButton |
| WBP_NLS_ServerBrowser (in-game menu) | NLSServerBrowserWidget | PageSwitcher, FilterBox, ServerList, SortSelector, ModeSelector, MapSelector, HostButton, TeamList, ReadyButton, FriendsList, LeaderboardList, SettingsSwitcher, SettingsGraphicsButton, VoiceSettingsBox, ResizeGrip… |
| WBP_NLS_OptionSelector | NLSOptionSelectorWidget | PrevButton, ValueText, NextButton (the "‹ value ›" picker used all over the menu) |
| WBP_NLS_ServerRow | NLSServerRowWidget | ServerNameText, HostText, MapText, PlayersText, PingText, JoinButton |
| WBP_NLS_TeamMemberRow | NLSTeamMemberRowWidget | MemberPortraitBox, MemberNameText, MemberTagsText, ReadyPill, MoreButton, MuteButton, KickButton, BlockButton, ReportButton… |
| WBP_NLS_FriendRow · WBP_NLS_KeyBindingRow | NLSFriendRowWidget · NLSKeyBindingRowWidget | FriendNameText, JoinFriendButton, InviteFriendButton · the action name and key button |
| WBP_NLS_Chat · WBP_NLS_LobbyChat | NLSChatWidget / NLSLobbyChatWidget | MessageList, ChatInput, ChannelButton, ChannelLabel, ChatHintText |
| WBP_NLS_MatchHUD | NLSMatchHUDWidget | MatchBar, MatchTitleText, TeamScoresBox, MatchScoreText, BannerText, BannerSubText |
| WBP_NLS_Scoreboard | NLSScoreboardWidget | ScoreboardTitleText, ScoreboardHeaderRow, ScoreboardRows, SpectatorsText |
| WBP_NLS_CharacterCard · WBP_NLS_Toast | NLSCharacterCardWidget · NLSToastWidget | CardButton, PortraitImage, NameText · MessageText, IndicatorDot |
NiceLobby text namespace. In Tools › Localization Dashboard
add a target that gathers from Plugins/NiceLobby/Source and /Game/NiceLobby, then gather, translate and compile.Each knob in the five places you can change Nice Lobby, written so a 9-year-old could follow along. The grey text on the right is what it starts as.
The rule book. It decides how games are run, who can say what, how many people fit, and how players sign in to Epic.
The paint box. Colours, letters, sounds, keys and every screen's size and position.
The map book. Where the game starts, the solo level, the levels a host can choose and the ways to play.
The cast list. Every character you can play and how they stand on the character select stage.
Each player's own choices. You set the starting values in DA_NLS_GameSettings (Player Chat Defaults and Player Audio and Control Defaults); players change them on the Settings tab, and they are saved in their profile.
How to test with several players on one computer, every key and button, the scoreboard, chat and voice, and how a round goes.
EOS SDK/Tools/EOS_DevAuthTool), port 6300.Player1 and Player2
(the names in Game Settings › Dev Auth Credential Names)..uproject twice. Each copy takes the next free
Dev Auth credential automatically; add -NLSDevAuth=Player2 to force one.| Where | What | Keyboard & mouse | Gamepad |
|---|---|---|---|
| Character select | Next / previous character | ← →, A D, Q E, mouse wheel, click a card | LB / RB, D-pad, left stick |
| Turn the character | Drag with the mouse | Right stick | |
| Start game | Enter | A | |
| Go to the buttons | Click | D-pad up / down | |
| Type your name | Click the name box | Select it and press A | |
| During play | Open / close the in-game menu | Backspace (close: Esc too) | Menu / Start (close: B) |
| Scoreboard (hold) | Left Alt | View / Back | |
| Open chat | Enter, or / for a command | – | |
| Talk (push-to-talk) | hold V | hold D-pad down | |
| Epic overlay | Shift+F3 (Epic's default) | – | |
| Game controls | Whatever your game uses; rebind them on Settings › Controls | ||
| In-game menu | Switch tab | Click the tab | LB / RB |
| Move between buttons | Tab, arrows | D-pad, left stick | |
| Scroll a list | Mouse wheel | Right stick | |
| Resize the window | Drag the bottom-right corner; double-click it to reset | Settings › Graphics › Menu Size | |
| Chat box | Send | Enter (empty line closes) | – |
| Switch channel All › Team › Whisper | Tab | – | |
| Repeat what you sent | ↑ ↓, close with Esc | – | |
Hold Left Alt in any multiplayer game. Your row is outlined, team modes are grouped and tinted by team, a green dot shows who is talking, and spectators are listed underneath.
/w Ali see you there./r replies to the last whisper. /help lists every command (full list in chapter 7)./mute name or the MUTE button on the Team tab. Only you stop hearing them./voice open.Backspace opens the in-game menu over the game; the game behind it blurs. Backspace or Esc closes it. Drag the small grip in the bottom-right corner to change its shape (it stays centred and grows on both sides). Double-click the grip to go back to the normal size. For bigger or smaller text and buttons, use Settings › Graphics › Menu Size. Both are remembered in your profile.
In modes with rounds (everything except Free For All) the bar at the top of the screen tells you what's happening.
DEATHMATCH · WAITING FOR PLAYERS (1/2)/ready. Bar: DEATHMATCH · READY 2/3.
The banner tells you if it's waiting for you.Where everything lives in the code, how the pieces talk to each other, how to build and package the game, run a dedicated server, and set up Epic Online Services.
Nice Lobby is one plugin with two runtime C++ modules and one editor module. NiceLobby holds everything that works on any online service. NiceLobbyEOS is a thin layer that talks straight to the Epic SDK (P2P networking, voice, reports, sanctions, stats) and plugs into NiceLobby through a few static hooks, so the core module never depends on EOS. NiceLobbyEditor only exists in the editor and makes the Widget Blueprints.
DA_NLS_UI) over editing the plugin, so updates stay easy.| Path | What's there |
|---|---|
Plugins/NiceLobby/NiceLobby.uplugin | Plugin descriptor. NiceLobby (Runtime), NiceLobbyEOS (RuntimeNoCommandlet, Win64 / Mac / Android) and NiceLobbyEditor (Editor). |
Plugins/NiceLobby/Source/NiceLobby/Public|Private/ | The core, split into Data, Framework, Online, Input and UI, plus a few top-level files. |
Plugins/NiceLobby/Source/NiceLobbyEOS/ | NLSNetDriver and NiceLobbyEOSModule.cpp (all direct EOS SDK calls). |
Plugins/NiceLobby/Source/NiceLobbyEditor/ | UNLSWidgetBlueprintTools: generates the WBP_NLS_* Widget Blueprints. |
Plugins/NiceLobby/Content/Python/ | nls_setup.py (creates the Data Assets, Widget Blueprints, character select and transition maps, player starts) and init_unreal.py (adds the Tools menu entries). |
Content/NiceLobby/ | Your project's NLS content: Data (the four Data Assets), UI (the WBP_NLS_* Widget Blueprints), Maps (L_NLS_CharacterSelect, L_NLS_Transition), Portraits, Thumbnails. |
Config/DefaultEngine.ini | Default map, online subsystem (EOS, with Null for LAN), EOS artifact and the NLSNetDriver definitions. |
Source/NiceLobbySystemServer.Target.cs | The dedicated server target. |
Paths are under Plugins/NiceLobby/Source/NiceLobby/. Headers are in Public/…, code in Private/… with the same sub-folder.
| Class / file | Folder | Job | Edit it when… |
|---|---|---|---|
FNiceLobbyModule | / | Module start-up. | Rarely. |
UNLSDeveloperSettings | / | Project Settings › Nice Lobby: points at the four Data Assets and has the static getters (GetGameSettings(), GetLevelData()…). | You add a fifth Data Asset. |
UNLSGameSubsystem | / | The player's profile (name, character, chat and player settings), save/load, ban list, level travel, applying audio and cloud settings. | You add a new saved player setting. |
NLSTypes.h | / | Shared structs and enums: FNLSPlayerSettings, FNLSChatSettings, map and mode definitions, session info. | You add a field to one of those structs. |
UNLSCaptureLibrary | / | Editor helper that renders character portraits and level thumbnails. | You want different capture framing. |
UNLSCharacterData, UNLSLevelData, UNLSUIData, UNLSGameSettingsData | Data | The four Data Asset classes. Every property is explained in chapter 3. | You need a new designer-facing setting. |
ANLSGameMode | Framework | Match flow (warm-up, countdown, round, results), spawning, teams and balancing, scoring, respawns, Co-op, Battle Royale, damage rules. | New rules: subclass it and set it as Default Game Mode Class. |
ANLSGameState | Framework | Replicated match phase, timer, team scores, level votes. | New match-wide data everyone must see. |
ANLSPlayerState | Framework | Replicated name, character, ready, team, spectating, kills/deaths, leader flag. | New per-player replicated data. |
ANLSGameSession | Framework | Ban checks on login, kicks, server name, dedicated-server command line. | Custom join rules. |
ANLSMenuGameMode, ANLSMenuPlayerController | Framework | The character select level. | You change how the first screen behaves. |
ANLSCharacterStage | Framework | The 3D pedestal and camera on the character select screen. | A different stage layout. |
UNLSCharacterAppearance + INLSCharacterAppearanceInterface | Framework | Applies the picked character's mesh, anim class and materials to the pawn (ApplyNLSCharacter). | Your pawn needs a custom way to change looks. |
UNLSChatSubsystem | Framework | Channels, whispers, mutes, all chat commands, history, notices. | You add a chat command. |
UNLSSessionSubsystem | Online | Login, host, find, quick match, join, private games, filters, rejoin, host hand-over, LAN fallback. | New session settings or search rules. |
UNLSFriendsSubsystem | Online | Friends list, presence, invites, join-via-friend. | Rarely. |
UNLSVoiceSubsystem | Online | Voice mode, push-to-talk, volumes, who is talking. Uses VoiceUserProvider hook from NiceLobbyEOS. | Voice behaviour. |
UNLSCloudSaveSubsystem | Online | Uploads and downloads the profile (minus graphics) through the User Cloud interface (EOS Player Data Storage). | You sync more data. |
NLSOnlineStats (FNLSOnlineStatsServices, UNLSStatsSubsystem) | Online | Ingests stats, reads leaderboards and achievements. | New stats (also add them in the Dev Portal). |
NLSModeration (FNLSModerationServices) | Online | Block list, player reports, sanctions check, vote kick. | Moderation rules. |
UNLSLookSensitivityModifier | Input | Enhanced Input modifier that applies Look Sensitivity and Invert Y. | Rarely. |
UNLSUISubsystem | UI | Creates and shows every NLS widget, toasts, menu open/close, input mode. | You change when screens appear. |
UNLSServerBrowserWidget | UI | The whole in-game menu (all six tabs). Built in C++ from the widget tree, styled by FNLSUIStyle. | New tab or new menu row. |
UNLSCharacterSelectWidget | UI | The first screen. | Character select layout. |
UNLSChatWidget, UNLSLobbyChatWidget | UI | The in-game chat box and the chat inside the Team tab. | Chat looks. |
UNLSScoreboardWidget, UNLSMatchHUDWidget | UI | Hold-Alt scoreboard; round bar, countdown and result banner. | HUD looks. |
UNLSLoadingScreenSubsystem + SNLSLoadingScreen | UI | Slate loading screen during level travel. | Loading screen looks. |
NLSWidgets.h | UI | Building blocks: base widget, card, option selector, server row, team member row, key binding row, friend row, toast. | A shared control changes. |
FNLSUIStyle | UI | Helpers that make buttons, labels and panels using the colours and fonts in DA_NLS_UI. | A global style rule. |
UNLSWidgetBase | UI | Base of every NLS widget: builds the C++ layout only when the widget has no Designer layout (BuildDefaultLayout), then OnLayoutReady binds events and applies Data Asset switches and texts. | Every screen's OnLayoutReady must work with a Designer layout: put on/off switches there, not in the build. |
UNLSWidgetBlueprintTools | NiceLobbyEditor | Creates WBP_NLS_* children with the default layout moved into their Designer (bound widgets keep their property names), compiles, saves and wires them into DA_NLS_UI. | You add a widget class: add it to GetSpecs() (children before the screens that contain them). |
UNLSNetDriver | NiceLobbyEOS | Uses EOS P2P for EOS: addresses and plain IP otherwise (LAN, not signed in, dedicated). | Networking transport. |
NiceLobbyEOSModule.cpp | NiceLobbyEOS | Fills the static hooks with EOS SDK calls (RTC voice, Reports, Sanctions, Stats, Leaderboards, Achievements). | A different backend: replace the hooks. |
BP_MyGameMode or a C++ child of ANLSGameMode, override what you need, and set it in DA_NLS_GameSettings › Default Game Mode Class (or per mode in DA_NLS_Levels).WBP_NLS_* Widget Blueprints (or your own children) that DA_NLS_UI points at; see chapter 2. New behaviour goes in the Blueprint graph or a C++ subclass.ReportKill, EndCoopRound, AddStat…) from your own Blueprints.CategoryName or Rows in a widget.TFunction) and fill it in NiceLobbyEOS.LOCTEXT, so it can be translated.NiceLobbySystem.uproject › Generate Visual Studio project files (or open the folder in Rider).NiceLobbySystem project. Or just double-click the .uproject and let Unreal compile.-log to see what's happening.Players normally host on their own PC. For a server that is always on, build the NiceLobbySystemServer target. That needs Unreal built from source (the launcher version can't build servers).
NiceLobbySystemServer in Development Server.NiceLobbySystemServer.exe -log -port=7777 ^
-NLSServerName="EU Arena 1" -NLSMap=Harbor -NLSMode=TeamVsTeam -NLSMaxPlayers=12
# LAN only: add -NLSLAN -UseLocalIPs
| Option | Meaning |
|---|---|
-NLSServerName= | Name shown in Find Games. |
-NLSMap= | Map Id from DA_NLS_Levels. |
-NLSMode= | Game mode Id from DA_NLS_Levels. |
-NLSMaxPlayers= | How many players fit. |
-NLSLAN | Advertise on the local network only (Null subsystem). |
-UseLocalIPs, -port= | Standard Unreal networking options. |
Until this is done, Nice Lobby quietly plays on LAN. Everything below happens on dev.epicgames.com/portal.
openssl rand -hex 32). Set it as the default artifact. The same values live in Config/DefaultEngine.ini.Tools folder) on port 6300 and sign in two Epic accounts named Player1 and Player2. Each game window picks a free credential by itself; add -NLSDevAuth=Player2 to force one. See chapter 4.KILLS, DEATHS, ROUNDS_PLAYED and ROUNDS_WON, each with aggregation SUM. Names must match exactly.KILLS and ROUNDS_WON that read the matching stat. They then appear on the Stats tab.DA_NLS_GameSettings set a Session Bucket Id unique to your game, so you don't see other people's test games.Get a subsystem with its Get node (e.g. Get NLS Session Subsystem) and call:
Login · HostGame · FindGames · CancelFindGames · QuickMatch · JoinGame · JoinGameWithTeam · LeaveGame · ReturnToMainMenu · RejoinLastGame · ForgetLastGame
Events: OnLoginComplete, OnHostComplete, OnJoinComplete, OnQuickMatchComplete, OnFindGamesComplete, OnStateChanged.
ReportKill · RespawnPlayer · EndRound · EndCoopRound · BalanceTeams · ResetAllStats · BroadcastChatNotice
Events on the game state: OnMatchStateChanged, OnTeamStateChanged.
SelectCharacter · SetPlayerName · SaveProfile · SetPreferLAN · SetPlayerSettings · ResetPlayerSettings · SetChatSettings · ResetChatSettings · StartSinglePlayer · ReturnToCharacterSelect
Events: OnCharacterSelected, OnPlayerNameChanged.
Chat: OnChatMessage, OnChannelChanged, OnChatCleared, OnChatSettingsChanged. Friends: OnFriendsUpdated.
Stats: AddStat / SetStat on NLS Player State (they show on the scoreboard and are sent to Epic).
Character: implement INLSCharacterAppearanceInterface › ApplyNLSCharacter on your pawn.
Every chat command, answers to the usual problems, and a little dictionary of the words used in this handbook.
Type them in the chat box (Enter, or / to start with a slash already typed). Commands are not case sensitive. To send a message that starts with a slash, type two: //like this.
| Command | Also works | What it does |
|---|---|---|
| Talking | ||
/all message | /a /s /say | Talk to everyone. With no message, switches the box to All. |
/team message | /t /p /party | Talk to your team only. |
/w name message | /whisper /msg /tell /pm | A private message to one player. |
/r message | /reply | Answer the last person who whispered you. |
| Basics | ||
/mute name | /ignore | Stop seeing and hearing someone (this game only). |
/unmute name | /unignore | Undo a mute. |
/clear | /cls | Empty your chat box. |
/help | /? /commands | Lists the commands in the chat. |
| Match | ||
/ready | /rdy | Switch ready on or off. /ready off always means not ready. |
/unready | Not ready. | |
/jointeam name | number | auto | /side /switchteam | Change team in team modes. |
/spectate | /spec /watch | Watch instead of play. |
/play | /unspectate | Stop watching and play again. |
| Chat settings (on, off, or nothing to switch) | ||
/chatbox | /chatboxtoggle /keepchatbox /keepchatboxon | Keep the chat box always visible. |
/keeptyping | /keeptypingaftersending | Stay in the box after you send. |
/newmessages | /popup /newmessagesshowchatbox | New messages make the box appear. |
/timestamps | /timestamp /time | Show the time on each line. |
/joinleave | /joinleavemessages | Show "X joined" lines. |
/chatsound | /sound /messagesound | A small sound for new messages. |
/fade seconds | /fadedelay /chatfade | How long the box stays before fading. |
/history lines | /chathistory /lines | How many old lines to keep. |
/chatsettings | /settings | Show your current chat settings. |
/resetchat | /chatreset /resetchatsettings | Put chat settings back to normal. |
| Voice | ||
/voice ptt | open | off | /voicechat /vc | Push to talk, always on, or off. |
/voicevolume 0–200 | /vv /voicevol | How loud others are. |
/micvolume 0–200 | /mic /microphone | How loud you are. |
| Safety | ||
/block name | Hide someone from you for good (also through Epic). | |
/report name reason text | Report to Epic. Reasons: cheat, exploit, name, abuse, scam, spam, other. | |
/votekick name | /kickvote /vk | Start a vote to remove someone. |
/vote yes | no | y n | Vote in a running vote kick. |
/ban name | Host: remove someone and keep them out of your games. | |
/unban name | Host: let them back in. | |
/bans | /banlist | Show your ban list. |
EOS couldn't start. Check that the artifact in Project Settings › Online Subsystem EOS is filled in and is the default, and that the encryption key is 64 hex characters. The log line starting with LogEOS says what is wrong.
EOS works but the sign-in failed. In the editor, run the Dev Auth Tool. In a package, the Epic Account Services application must be linked to your client, and your account must be in the organisation while it is unpublished.
Both players must use the same build, the same Session Bucket Id, and the same mode (both online or both LAN). Untick the Full Games and In Progress filters, then Refresh.
Add more Player Starts (Tools › Nice Lobby: Add Player Starts) or keep Spread Player Spawns on.
Your pawn class needs INLSCharacterAppearanceInterface, or the default appearance component, so it can take the picked mesh and animations. See chapter 2.
Voice needs Epic (online) and Enable Voice Chat on in DA_NLS_GameSettings; every lobby then gets a voice room. On LAN there is no voice. Check Voice Chat isn't Off, and hold V in push-to-talk.
The stat and leaderboard names in the Dev Portal must match DA_NLS_GameSettings exactly (KILLS, DEATHS, ROUNDS_PLAYED, ROUNDS_WON). New stats can take a minute to appear.
A local variable has the same name as a member of a parent class. Rename the local. Unreal treats this warning as an error.
| Word | Means |
|---|---|
| Data Asset | A settings file you open in the editor. Like a form you fill in. |
| Host | The computer that runs the game. Everyone else connects to it. |
| Leader | The player who picks the next level. Often the host, but can be given away. |
| Session | One game that people can find and join. |
| Lobby | The waiting area of a game, where you see who is in and who is ready. |
| LAN | Playing with computers on the same home or office network, no internet account needed. |
| EOS | Epic Online Services: Epic's free servers for sign-in, friends, finding games, voice and stats. |
| P2P | "Peer to peer": players connect straight to the host's PC, with Epic helping them find each other. |
| Dedicated server | A computer that only runs the game, with no player sitting at it. |
| Seamless travel | Moving the whole team to a new level without anyone disconnecting. |
| Spawn / Player Start | Where a player appears in a level. |
| Ping | How long a message takes to reach the host and back, in milliseconds. Lower is better. |
| Spectate | Watching the game without playing. |
| Replicated | Copied from the host to every player automatically. |
| PIE | "Play In Editor": pressing Play inside Unreal. |
Nice Lobby System handbook · written for UE 5.8 · branch Claude of AbbasGames/NiceLobbySystem.