Commit Graph
14 Commits
Author SHA1 Message Date
AyeZeeBB a1621ee19e Dedicated servers: roles, with their tags, commands and permissions
Dedicated servers: roles, with their tags, commands and permissions
A dedicated server had one list of admins who could do everything, and
everyone else could do nothing. It now has roles, kept in
data/roles.json beside the bans: each a name, the tag its players wear
in the game, the server commands it may use, what it may do besides
commands, and a rank.
A server starts with five: player (everyone given no role: chat, votes,
parties, private messages), vip (a reserved slot), moderator (kick, ban,
messages, giving out lower roles), admin (everything) and muted. The
default role is whoever was given none; a role has what the default has
as well as its own unless it says it does not inherit. A reserved slot
is a permission, so a role's players have one without being listed.
Nobody kicks, bans or changes the role of a player whose rank is theirs
or higher, or gives out a role that is; the console is above every role.
"*" is every command but role and reserved, which a role has only when
it lists them.
New commands: role <player or SteamID64> <role>|none, roles, and roles
reload. "admin add|remove" and "admins" are gone: the admins an older
config lists are moved into the admin role the first time the server
starts, and leave the config.
In the game, a player's role tag and colour show in chat and on their
nametag, and each control in the Multiplayer menu, the map, time of
day, world layers and parks follows the command it needs rather than
one admin flag, as do the commands chat offers.
Protocol 48: the roster carries each player's tag, and a new
permissions packet tells a player what their role gives them. Older
games and servers do not connect to newer ones.
Also fixes a name clash that kept the server config tests from
compiling.
2026-10-11 03:52:13 -05:00
AyeZeeBB 8044c88373 Hold skateboards to their size, and catch one kept on another player
A hacked game was resizing its skateboard and reporting it at another
player's position, so everyone saw an oversized board riding on them,
and with player collision on it knocked them about.

A skateboard is now held to within 10% of its size, apart from the limit
on resized body parts: on a dedicated server when its scale limit is on,
and in every player's game whatever sent the pose. Another player's
board is solid only within 3 m of its own skater; one further off is
seen and not felt.

Dedicated servers also check for a board kept on another player
(Server/board_check.h): one away from its own skater that stays beside
one other player while that player travels 8 m over at least 3 seconds.
The board is then no longer passed on to the others until it has behaved
for half a minute, and the log and the admins in the game are told who.
New setting anti_cheat.pinned_board and command board-check:
off | warn (default) | kick.
2026-10-11 03:07:32 -05:00
wildesPepegaandClaude Opus 5.5 a64ccdf288 Add a Pterodactyl egg for the Linux dedicated server
contrib/pterodactyl/egg-reskate-server.json installs the server from the
release's launcher.json (server_linux tarball, checked by SHA-256), keeps the
panel's port, query_port and steam_token in ReSkateServer.json, starts on
"is up on" and stops with quit. Image ghcr.io/parkervcp/yolks:debian (Debian
13: glibc 2.41, OpenSSL 3, curl and tar for the self-update).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FN9ZCrWqg6MVuLbn65aVzX
2026-10-07 06:49:39 +00:00
AyeZeeBB 101e1af6e4 Official, staff and friends in the server browser; server tokens; Linux self-update
Server browser
- Official servers (the backend's "official_servers") sort first and are
  drawn in ReSkate blue
- Servers Steam friends are skating in sort next, drawn in green with the
  friends' names; searching a friend's name finds their server
- A player in a session they joined can join another server straight from
  the list; hosts still end their session first, and a Steam friend's join
  offer never replaces a session
- Joining a dedicated server from the list records it as the player's
  public session, so friends see it and the row shows HERE
- Blocked servers (the backend's "blocked_servers") are hidden and cannot
  be joined, by code either
- When the backend sets "server_tokens_required", dedicated servers that
  signed in without a login token are hidden, except on the player's own
  network
- A search that gets no internet list from Steam keeps the last list for
  two minutes, and waits six seconds before treating it as empty
Roles
- New Staff tag from the backend's "staff" list: green name, badge and
  item animation, ranked after Dev
- Staff can pick a rainbow for their items on the Special page; it is sent
  as a solid colour older builds can show, so the protocol is unchanged
Dedicated server
- steam_token: sign in with a Steam game server login token and keep the
  same Steam ID every start; empty signs in anonymously as before
- A listed server without a token says so at startup, and when the token
  rule starts or stops hiding it
- Linux servers update themselves from the release's "server_linux"
  tarball, with the machine's curl and tar, pinned by SHA-256, and carry
  on in the same process
Launcher
- Only create the MiniDumpWriteDump API-set shim under Wine/Proton
2026-10-07 00:19:56 -05:00
zeex64 0c3ca2bb68 Merge pull request #49 from VexFlint/fix/systemd-unit-duplicate-log
Send the systemd unit's stdout to the journal, not a second copy of the log
2026-10-05 16:58:30 -05:00
AyeZeeBB c930b512e6 Backend lists for tags, cosmetics and bans
- Read Dev / Creator / Homie Steam IDs from api.reskate.dev instead of the hardcoded list
- Creator (red) and Homie (gold) tags and hoodie/board colours; Admin tag is now pink
- Global bans: lobby hosts and dedicated servers turn banned players away
  ("global_bans": false in ReSkateServer.json opts a server out)
- SPECIAL menu page for listed players to hide their own tag and items
- Fix hoodie and board keeping the animated colour after the animation turns off
- Multiplayer protocol 39 -> 40
2026-10-04 22:33:57 -05:00
VexandClaude Opus 5.5 65e0e8d86c Send the systemd unit's stdout to the journal, not a second copy of the log
The server appends every line to ReSkateServer.log next to itself (main.cpp
write_log). The unit also appended stdout to that same file, so each line
was written twice, once per stream, and the copies could interleave out of
order. The journal keeps the console copy instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 21:25:52 -03:00
juan e00fbe95dd CI: bundle Steam libs in Linux asset
Fetch libsteam_api.so (SDK redist mirror, export-verified) and
steamclient+tier0/vstdlib (SteamCMD app 1007) and stage them into
ReSkateServer-Linux-<version>, mirroring the Windows zip's DLLs.
2026-10-03 19:23:31 -03:00
juan fcac674511 Fix Linux Ctrl+C hang, README guide, versioned Linux asset
- console reader: poll()+read() instead of iostream getline; joinable
  thread joined before Steam shutdown/exit (iostream lock deadlock
  needed Ctrl+D before)
- README: Linux dedicated-server setup guide
- CI: version input, tag builds, ReSkateServer-Linux-<version> asset
  with setup script staged at top level
2026-10-03 17:51:14 -03:00
juan 22ed651a88 Add setup-linux-server-libs.sh for Steam .so files
- fetches libsteam_api.so (SDK mirror) + steamclient/tier0/vstdlib
  via SteamCMD app 1007, links ~/.steam/sdk64, verifies exports
- fixes pipefail+grep -q SIGPIPE trap in the nm check
- README: document script as the primary path
2026-10-03 17:39:11 -03:00
juan ef294c05d8 Linux: sockets v013/v012 fallback + Steam lib docs
- SDK 1.65 provides GameServerNetworkingSockets v013, Skate DLL v012;
  try v013 then v012 (superset, same methods used)
- verified live: sign-in, Steam ID, join code, clean shutdown
- README: steamclient sdk64 symlink, version fallback note
2026-10-03 17:30:35 -03:00
juan a5f6176144 Docs: where Linux Steam .so files come from 2026-10-03 17:24:41 -03:00
juan 1d7bd5048e CI: build all targets for ctest + clarify Linux layers
- workflow built only dingosdk_server so ctest binaries missing (Not Run)
- build all targets before ctest
- layers: read works on Linux, export needs Windows game + Oodle;
  document player-cache copy path
2026-10-03 17:17:49 -03:00
Juan 5c846cd8ba Linux server docs: preset, README-linux, systemd unit 2026-10-03 16:57:40 -03:00