Files
DorkNet/README.md
T
Alexa f6a4fdc5fb weekly challenges: admin-configurable slate + working skin rewards
Port the admin-editable weekly-challenge feature to the 2020.03 branch
and fix the skin-reward bug it had on December: rewards now actually
land in the player's inventory instead of only granting XP + tokens.

Server config: add WeeklyChallenges* columns to ServerSettings (Postgres
post-EnsureCreated patches + SQLite column patches), and port the
ServerSettingsService weekly methods/records. The reward record carries
the store item Slug — the reliable handle December lacked — so the grant
can resolve the real item.

ProgressionController: CurrentChallenge + updateProgress now read the
configured slate and reward instead of a hardcoded one, keeping the
2020.03 ChallengeMap/ChallengeGift wire shapes (verified against the
march dump: ChallengeGift TypeDefIndex 11455). The Gift now sends
AvatarItemType (Outfit when an AvatarItemDesc is set) so the watch's
gift-card render binds the avatar preview. On completing the week's
challenges the configured skin/consumable is granted via the new
StoreService.GrantItemFreeBySlugAsync (same inventory path as a purchase,
no charge), gated behind the once-only reward sentinel.

Admin: GET/POST settings/weekly-challenges + reward-options (avatar +
consumable only — 2020.03 StoreService has no equipment payload helper),
and the admin-ui Server settings page to edit the slate + reward. The
reward picker keys on item slug rather than December's fragile
descriptor-string match.

Docs: README no longer lists weekly challenges as December-only;
url-coverage notes the config-driven challenge endpoints + skin grant.
2026-05-31 14:47:12 +03:00

5.0 KiB

DorkNet — march-2020-03-10

This is the March 2020.03.10 branch of DorkNet — a self-hostable reimplementation of the Rec Room backend tuned to the wire protocol of the Rec Room 2020.03.10 client build (also serves 2020.03.06).

⚠️ Not affiliated with Rec Room Inc. or Against Gravity. See DISCLAIMER. DorkNet ships no Rec Room game assets or modified binaries — you supply your own legally-acquired Rec Room install.

If you're not sure which DorkNet branch you want, start at the main branch's chart. The launcher on main also auto-detects your install.


What this branch targets

Client build Rec Room 2020.03.10 (also 2020.03.06)
Schema Multi-step EF migrations (~34 phases)
Diverges from december-2020-12-18 by ~170 files

Subsystems NOT present on this branch (these landed in December):

  • Clubs surface
  • Playlists (curated + user-created)
  • Group DMs / chat threads
  • Room keys (purchasable room access)
  • Per-room co-owner / moderator / host roles
  • Late-2020 store catalog additions

Weekly challenges are present on this branch: the admin SPA's Server settings page edits the weekly slate, the CompletedRequired flag, and the gift (XP + tokens, plus an optional store skin/consumable that's granted straight to the player's inventory when the week's challenges complete).

If you need any of those, you're on the wrong branch — see december-2020-12-18.


Quickstart

1. Install .NET 9 SDK and (optionally) dotnet-ef:

dotnet tool install --global dotnet-ef

2. Clone this branch:

git clone --branch march-2020-03-10 https://github.com/DorkSquadRR/DorkNet
cd DorkNet

3. Configure secrets. Drop in DorkNet.Server/appsettings.Local.json (gitignored) or export environment variables:

Config key Env var Required Notes
Jwt:Secret Jwt__Secret yes ≥64 random chars
Photon:AppId Photon__AppId yes Photon Realtime AppId (free at dashboard.photonengine.com)
Photon:VoiceAppId Photon__VoiceAppId no only if voice chat
Photon:CloudRegion Photon__CloudRegion no defaults to us
Database:Provider Database__Provider no sqlite (default) or postgres
ConnectionStrings:Default ConnectionStrings__Default postgres-only full Npgsql connection string
ConnectionStrings:Redis ConnectionStrings__Redis no enables SignalR backplane
Domain:Apex DORKNET_DOMAIN no defaults to localhost; set for production

4. Boot:

dotnet run --project DorkNet.Server

First boot creates bin/Debug/net9.0/data/dorknet.db, applies all EF migrations under DorkNet.Server/Migrations/, seeds canonical rooms + store catalog, and starts listening. You should see Application started. in the log; curl http://localhost:8080/healthz returns 200.

For Docker / VPS, see docs/deploy.md.


Patching your client

.\tools\install-melon.ps1 `
  -RecRoomPath "C:\Path\To\Recroom_Release_Data" `
  -PhotonAppId "<your-photon-realtime-app-id>" `
  -PhotonVoiceAppId "<your-photon-voice-app-id>"

This installs the MelonLoader mod (DorkNet.ClientMod) into the client's Mods/ folder and writes its config to MelonLoader/UserData/dorknet-clientmod.json. The mod rewrites all *.rec.net URIs to your configured DorkNet apex, swaps the Photon AppIds, and bypasses TLS verification on the client's HTTPS calls so self-signed certs work. (First run prints "launch the game once"; do that, then re-run with -ResumeBuild.)

If MelonLoader isn't installable on the user's machine, the legacy tools/install-legacy-client.ps1 does the same patches via direct byte-edits of resources.assets + GameAssembly.dll. Slower setup, no Harmony runtime needed.


Code map

Folder Purpose
DorkNet.Server/ ASP.NET Core backend (controllers, services, data, hubs, middleware)
DorkNet.Server/Migrations/ EF Core schema migrations applied at boot
DorkNet.Models/ DTOs shared between server and client mod
DorkNet.ClientMod/ MelonLoader IL2CPP mod — the client patcher
tools/ Installers + Cloudflare tunnel templates

Compared to december-2020-12-18, this branch's server is closer to the original 2020-Q1 wire shape — fewer endpoints, simpler entities, and the multi-step migrations haven't been consolidated.


Contributing

See main's CONTRIBUTING guide for the project-wide rules.

Branch-specific:

  • Schema changes on this branch don't flow to december-2020-12-18 automatically. If a fix applies to both, cherry-pick it across.
  • Don't rebase across branches — they're independent forks.
  • New EF migrations: dotnet ef migrations add <Name> --project DorkNet.Server. Migrate() runs on boot; don't run database update manually.

License

AGPL-3.0. Hosted forks must publish their source.