SimpleLobby
Host-side lobby tools split out of SimpleSell: whitelist, bans, lobby guard, RPC firewall, late join, /lobby, and a scrap guard against client mods that post interior scrap counts. Written by Claude & Chonk.Changelog
0.1.4
No new config keys. Built-in permanent bans are now stored only as one-way fingerprints, not readable IDs.
0.1.3
No new config keys. Lobby log fixes from QA:
- A host's lever pull is logged once (it was logged twice, 1 ms apart: send stage and loop-back execute).
session_end"lines" now counts the session_end line itself, so it matches the file.- The session_start mod list is no longer cut short with "…" (it has its own, longer cap).
- The BepInEx log now says when NetGuard's flood/size hook installs, not only when it fails.
0.1.2
No new config keys. Everything below is host-side; vanilla players and friends need nothing new.
- Lobby log. Each lobby session gets its own file in
BepInEx/config/SimpleLobby/logs/(one JSON event per line): session start and end, joins and leaves (name, the Steam ID the game reported and the one Steam gave the connection), refused joins, suite handshakes and recognised mods, kicks, bans, unbans, every firewall block, RPC-flood warnings, command names (never chat text), lever and ship events, and big orders or spawns. Written every 2 s in the background, at most 5,000 lines a session (the last 200 kept for blocks, kicks and bans), 512 bytes a line; the newest 30 sessions or 20 MB are kept./lobby logshows the last notable events,/lobby log <name>one player's,/lobby log fileprints the path to the BepInEx console. One summary line goes to the BepInEx log when the session ends. - Permanent ban list built in: refused at the door by real or
claimed ID, kicked if somehow inside;
/unban, the whitelist and settings can't lift it. Every try is logged. - The terminal can't be deleted or put out of reach. Storing the terminal (or any furniture that can't be stored) is now a forged request: refused and auto-banned, before vanilla's own check. Moving the terminal under the floor or into a wall (more than 1 m outside the ship room) is refused; more than 10 m outside is forged. Rotating the terminal and furniture is vanilla and stays allowed.
- Terminal lock-out closed. "Terminal in use" from someone who isn't at the terminal (which kicked whoever was using it off) is refused; the terminal-values and terminal-sound requests are rate-limited, and a sound number the terminal doesn't have (which threw an error on every game) is refused.
- Flood limit. Every request a client sends is counted per second: over 150/s is logged, over 400/s the rest of that second is dropped, and 400/s for 3 seconds in a row or 1,200 in one second is a kick. Normal play is a few tens a second. Whitelisted players are never kicked by it.
- Oversized messages dropped: a game request over 16 KB, or a mod message over 64 KB, from a client.
- Giant-text chat crash closed. Rich text (
<size>,<sprite>,<voffset>...) is removed from other players' chat before it is relayed, and a system line with rich text (e.g. a fake "<size=...> joined the ship.") is refused. - Mass spawn and despawn cap. More than 30 spawns or 20 despawns in 10 s caused by one client's requests are cancelled. Clients can no longer despawn enemies (no vanilla game does), delete a held item that isn't a used key, destroy an inventory item that isn't a shotgun shell, or repeat the sell-desk "done" message to clear the desk early.
- Ship controls checked: doors, magnet, lights, teleporter button and alarm horn need a living player in the ship and are rate-limited; the unlockable and suit sync requests are rate-limited (the host answers them to everyone).
0.1.1
- Belt bags may hold the Vesper Gold nugget (Josh's decision). It is a native SimpleMoons item, and
SimpleMoons lets belt bags take it. Before, the firewall's vanilla belt bag rule threw it out of bags
every 2 s, and a client who bagged one got a forged-request strike that leads to a ban. A new config
entry,
Firewall / BeltBagAllowedScrap(default51020=Gold nugget, so item id 51020 AND the name Gold nugget must both match), is exempt from both the 2 s sweep and the host's forged-request check. All other scrap is still forbidden, and the 15-item limit and the other bag checks are unchanged.
0.1.0
- New plugin, split out of SimpleSell 0.1.39. Everything about running the lobby moved here unchanged:
the whitelist and its perks, bans (by real Steam ID), Steam identity checks, the lobby guard, the RPC and
item firewall (lever, purchases, routes, furniture, chat, items, sell desk deposits, belt bags, desk janitor),
late join and reopening the Steam lobby, safer joins, the invisible-joiner and crew-list fixes, the join log,
the hidden mod tag, the longer host chat box, and the commands
/lobby,/players,/kick,/guard,/whitelist,/ban,/unban,/bans./help lobbylists them. - Settings come across by themselves. On the first run every
[Lobby]and[Firewall]setting and[General] CommandPrefixis copied fromlocal.simplesell.cfg(same names), and the join log fromSimpleSell.playerlog.txt. SimpleSell's file is only read. - No double running. Next to SimpleSell 0.1.39 or older (which still has all of this) SimpleLobby does nothing and tells the host once. With SimpleSell 0.1.40 each plugin answers only its own commands; one whitelist covers both (SimpleSell asks SimpleLobby), and SimpleHQ's bank still finds it through SimpleSell.
- Works without SimpleSell too. The messages a whitelisted friend's game receives keep their old names
(
SimpleSell.Trust,SimpleSell.LateSync), so friends on SimpleSell 0.1.38/0.1.39 keep their perks. - New: scrap guard (
[ScrapGuard], on, warn). Other players' games may only post the system chat lines a vanilla game sends, and a chat line that is only a scrap readout isn't relayed, so client mods that post interior scrap counts to the lobby (abu AutoScan with HostOnly off, AutoTerminalScanClassic in Everyone mode) reach no one, and you're told who. LCBridgeOverlay (which asks the host first, and stays off here) is named in the report. ActionLog | Warn | Kick; whitelisted players are never kicked by it./guard scrap on|off|log|warn|kick. Counters that only show numbers on their own player's screen can't be stopped by a host (every game already has the scrap; the vanilla terminal scan counts it too); see README. - Lobby guard reports now name a known mod when its message is recognised.
