Skip to content

Staff Guide

Who counts as staff

Two ways, both checked server-side in server/warden.lua:

1. Ace — grant rm_phonograph.admin in server.cfg:

cfg
add_ace group.admin rm_phonograph.admin allow

2. Identifier list — add character identifiers to Settings.access.admins in config/settings.lua.

Staff clear every access check: they may tune, pack and moderate any deck, and they are exempt from the play cooldown.

Commands

Every command re-checks staff status server-side, and all of them also work from the server console — except /decktp, which needs a ped to move.

CommandWhat it does
/decksLists every deck: id, cabinet, owner or (spot), coordinates, what's playing, and a — MUTED marker
/deckstop <id>Stops one deck outright — needle lifted, queue cleared
/deckdel <id>Deletes a player-placed deck from the map and database
/decktp <id>Teleports you to a deck — you arrive a step above the boards, not inside them
/deckmute <id>Mutes one deck: silences it now and refuses every play until unmuted
/deckmuteMutes every deck, server-wide
/deckunmute <id>Lifts one deck's mute
/deckunmuteLifts the server-wide mute and all per-deck mutes

Deck ids

  • Player-placed decks are numbers/deckstop 12
  • Config spots are s: plus their key/deckstop s:valentine_saloon

/deckdel gives no item refund

Use pack for that. Config spots refuse deletion outright — remove them in config/spots.lua instead.

Mutes are not persistent

They live for the resource's lifetime. A restart clears them.

Discord audit

With webhooks enabled (see Configuration):

  • decks channel — who placed or packed which cabinet, where.
  • tracks channel — who played or queued what, on which deck, with the resolved song title and video thumbnail.

Identifiers appear alongside character names in every embed, so a log line is always enough to find the player.

Moderation model

Worth knowing when players ask "why can't I…":

  • Every action is distance-checked on the server (access.reachSpan). Clients cannot act on decks they aren't standing at.
  • Pickups are blocked while another player stands within access.packBlockSpan metres. The "no one was around" claim is judged by the server, not the client.
  • Records always come from the server's catalogue. A modified client cannot inject a URL through a record, and raw links pass length, scheme, whitespace and — optionally — domain checks before anything is broadcast.

Controlling what players can play

Three levers, from broadest to narrowest:

LeverEffect
panel.urlBox = falseNo raw links from anyone, staff included
records.urlAccess'everyone', 'owners' (default) or 'staff'
limits.domainsAllowlist of hosts, e.g. { 'youtube.com', 'youtu.be' }

Setting urlAccess = 'owners' is the usual middle ground: players can play whatever they like on their own cabinet, while public saloon decks become records-only.

If you want the catalogue and nothing else, panel.urlBox = false is the switch — and it is enforced server-side rather than merely hidden, so a modified client gains nothing.

Documentation for RedMorrow. Scripts are licensed per server — redistribution is not permitted.