- Updated PlayerLogs, Players, Reports, Rooms, Settings, SignupCodes, and other pages to accept an optional `embedded` prop for better integration in various contexts.
- Introduced a new Activity page consolidating audit logs and player request logs with tab navigation.
- Added Content page for community board and loading tips with tab navigation.
- Created Moderation page to unify player directory, bans, and reports under a single interface.
- Implemented SettingsHome page to manage server settings and signup codes with tab navigation.
- Enhanced the Join page to include password creation for new accounts.
- Added global friends feature in Settings to allow all accounts to be friends without database entries.
- Introduced RelationshipQueries service to manage effective friend resolution based on global friends toggle.
- Added WireDates for consistent date handling in serialized data.
- Created reusable Tabs component for consistent tab navigation across various pages.
MelonLoader (DorkNet.ClientMod) is the sole client patcher now:
- delete the DorkNet.ClientPatch project + tools/install-plugin.ps1
- drop the project from DorkNet.sln
- README / deploy docs: present DorkNet.ClientMod (install-melon.ps1)
as the patcher instead of the BepInEx plugin
- drop the dead install-plugin.ps1 reference from Program.cs's JWT
error and install-melon.ps1's DRM-fallback hint
- tidy stray 'BepInEx port' comments
Legacy-cleanup paths that REMOVE an old BepInEx install
(install-legacy-client.ps1, build-patcher-zip.ps1's old_plugin_paths)
are kept intentionally.
The harmony hook on PhotonNetwork.ConnectUsingSettings registers in
March's IL2CPP build but never actually fires — the watch's connect
path goes through a different (mangled) entry point. Log confirms
[patch-ok] PhotonNetwork.ConnectUsingSettings but no
[photon-appid] override line, ever.
Fix moves the override out of the prefix-only path:
- New PhotonPatches.TryApplyOverride(reason) does the
PhotonServerSettings.AppID / VoiceAppID / region mutation and
flips an OverrideApplied flag once it succeeds. Idempotent.
- OnUpdate polls TryApplyOverride every 6th frame (~10 Hz) until
it succeeds, then stops. The "type not found yet" log is
throttled to once on first miss + every 300th miss after, so
the file doesn't drown if PhotonServerSettings stays unloaded.
- Mod.ResolveType made internal (was private) so PhotonPatches
+ SavePatches can use the broader assembly-scan fallback —
the local FindGameType copies were too narrow and missed
IL2CPP-mangled type names. Both FindGameType helpers collapse
to one-line delegates to Mod.ResolveType.
- Prefix on ConnectUsingSettings kept as a belt-and-braces hook
(passes reason="prefix"); harmless if it fires, fine if it
doesn't.
- Photon dashboard has CustomAuth disabled on the AppId now, so the
watch never needs to attach userid/LoginLock to its Authenticate
ops. Removed the harmony hook on NetworkingPeer.CallAuthenticate,
the AuthValuesInjector_Prefix method, the GetCurrentLockToken
helper, and the InjectAuthValues Cfg field + config load. Bumped
the [config] log line to drop the InjectAuthValues field.
- Both dorknet-clientmod.json.template copies (source +
local-releases) lose the "InjectAuthValues" key.
- Code moved verbatim to DorkNet.ClientMod/attic/AuthValuesInjector.cs.attic
with a header explaining why it was parked and how to restore it.
The .cs.attic suffix keeps the SDK's auto-globber from compiling it.
- ClientMod: add SingleOriginBaseUrl config + URI rewrite path so the
client can talk to one https://<apex>/__dn/<service>/... base
instead of demanding wildcard subdomains. ServerHost rewrite still
the fallback when SingleOriginBaseUrl is empty.
- ClientMod config: InjectAuthValues now defaults to false. The
server's PhotonCustomAuthController already fail-opens
(Photon:RequireCustomAuth=false), so anonymous bootstrap is the
cleaner default and avoids Photon's CustomAuthFailed loop when a
WAF returns 403 to Photon's probe.
- Server: SQLite path now reads Database:SqlitePath config
(Database__SqlitePath env). Falls back to <bin>/data/dorknet.db
so existing Docker / standalone deploys are unchanged. Lets the
Windows launcher put the db under %APPDATA%\DorkNet.
- Server: DomainConfig + ConfigService updates for the single-origin
apex.
- .gitignore: exclude local-releases.zip.
Targets Rec Room 2020.03.10 client (also serves 2020.03.06).
Re-import after adding:
- DorkNet.ClientMod/dorknet-clientmod.json.template — config schema
the launcher's manifest-driven patcher renders into UserData/.
- tools/build-patcher-zip.ps1 — produces dorknet-clientpatch-{key}.zip
for v1-march-* Release uploads.
- .github/workflows/release.yml — on tag push publishes both
dorknet-server-march_2020_03_10-win-x64.zip and
dorknet-clientpatch-march_2020_03_10.zip as Release assets.
Same scrub rules as december; tools/build-patcher-zip.ps1 added to
the maintainer-side allow-list so it survives.