Commit Graph

21 Commits

Author SHA1 Message Date
Alexa 810ba0992c Add Rec Center doors management: implement endpoints for retrieving and updating door configurations; enhance database schema and UI integration 2026-06-02 17:08:42 +03:00
Alexa 218d92f856 Implement Play Menu Tags management: add endpoints for retrieving and updating tags; enhance database schema and UI integration 2026-06-02 16:46:28 +03:00
Alexa f1a616e9c1 Refactor room data handling: standardize timestamp usage with savedAt variable; ensure editable persistence version for room role data 2026-06-02 15:51:11 +03:00
Alexa 143d3a9a07 Refactor room role permissions: enhance role checks for saving and overlaying data; introduce editable role data for RRO rooms 2026-06-02 15:40:53 +03:00
Alexa c4e22e1326 Add JoinTimeoutService to manage pending room joins and handle timeouts 2026-06-02 11:11:55 +03:00
Alexa 24c8a920e4 Refactor moderation notifications: replace NotifyAsync with KickPlayerAsync for player kicks in InGameModerationController and AdminController; update NotificationService to streamline moderation kick payloads. 2026-06-02 02:48:04 +03:00
Alexa 96eb368d41 Refactor AvatarGiftsController: change ToWire method to public for external access; update AdminController to use ToWire for gift notifications 2026-06-02 02:39:29 +03:00
Alexa 27c560906f Enhance admin dashboard: add new player count, active sessions, and online player details; improve stats display and layout 2026-06-02 02:33:31 +03:00
Alexa 5dbcf50d37 Enhance room import functionality: support studio single-room dumps, improve zip parsing, and add validation for save entries 2026-06-02 02:22:38 +03:00
Alexa e18e167660 Enhance signup process: increase item fetch limit, update Join API to use password, and improve UI for account creation 2026-06-02 02:05:01 +03:00
Alexa e404ed8352 Fix live room and account updates 2026-06-01 20:55:43 +03:00
Alexa 171afa8ce4 Fix new-player dialog and same-room presence 2026-05-31 21:34:08 +03:00
Alexa 3d089f6e32 admin: change a player's username from the Players panel
Add POST players/{id}/username + a Username field in the player detail's
Profile tab. Changes only the unique @handle (not the display name) and
rejects a collision outright rather than auto-suffixing, so the admin
gets the exact handle they typed. Same 2-24 char letters/digits/_/-
rule as the account API; logged to the audit trail as old -> new.
2026-05-31 20:52:11 +03:00
Alexa 3480ca21fa signup codes: admin-issued invite codes + site /join redemption
While account creation is disabled, the only way in is now an
admin-issued single-use signup code (Discord-invite style), redeemed on
the public site's /join page.

Because the 2020 watch login is device-id-bound with no code field, the
flow captures it server-side instead: a new device refused at the
signups-disabled gate (PlatformLogin / account create) is stashed in a
PendingDevices table keyed by the real client IP (CF-Connecting-IP aware).
The /join page then shows the player the device their own client just
reported, they enter their code + username, and the account is minted
bound to that device — so the next launch logs straight in via the
existing device-id path. No watch changes.

- SignupCodeEntity (code, descriptor, optional expiry, redeemer) +
  PendingDeviceEntity; idempotent CREATE TABLE in DatabaseBootstrap so
  both providers pick them up without a new migration.
- SignupCodeService: generate / list / revoke / redeem + pending-device
  capture, single-use + expiry + revoke validation.
- Admin: GET/POST signup-codes + revoke endpoints and a Signup codes
  admin-ui page (generate with descriptor/expiry, status table, revoke).
- Public: anonymous /api/site/v1/join pending-devices + redeem, and a
  /join site page (+ header link).
- README documents the flow + the post-Initial table-create approach.
2026-05-31 20:00:35 +03:00
Alexa fad8d81961 inventions: resolve real creator ids for a room (creatorIds)
api/inventions/v1/creatorIds was a stub returning an empty list, so the
watch's GetCreatorIdsOfInventionsInRoom never learned which creators it
must request invention permissions for before spawning a room's
invention-based geometry. Resolve the real set from
InventionEntity.CreationRoomId and factor the room->inventions lookup the
/room endpoint already used into a shared ResolveRoomInventionsAsync
helper (direct matches unioned with the imported cluster). ByRoom now
calls the helper too. creatorIds returns List<int> of distinct creator
account ids.
2026-05-31 15:32:16 +03:00
Alexa 43fe3572c9 Remove BepInEx client patcher (DorkNet.ClientPatch)
MelonLoader (DorkNet.ClientMod) is the sole client patcher now, so drop
the BepInEx plugin and its BepInEx-only installer:

- delete the DorkNet.ClientPatch project + tools/install-plugin.ps1
- drop the project from DorkNet.sln
- README / architecture / deploy docs: present DorkNet.ClientMod
  (install-melon.ps1) as the patcher instead of the BepInEx plugin
- fix install-melon.ps1 fallback hint that pointed at the deleted
  install-plugin.ps1
- tidy stray 'BepInEx port' comments in Mod.cs / PhotonCustomAuthController

Legacy-cleanup paths that REMOVE an old BepInEx install (install-legacy-client.ps1,
the old_plugin_paths entry in build-patcher-zip.ps1) are kept intentionally.
2026-05-30 01:50:26 +03:00
Alexa dfd0d44641 Prefix current room name with ^ in player presence
The 2020.12 watch's PlayerPresence.FriendlyPresence shows roomInstance.name
verbatim and defaults to the literal "^DormRoom" — it expects a player's
current room name to carry a leading ^. Serialize the RoomInstance wire
"name" as "^"+Name and strip it on deserialize (presence round-trips the
DTO through Redis), keeping the C# Name raw so the photonRoomId stays
single-^ and invite messages keep the plain name.
2026-05-29 23:21:09 +03:00
Alexa b8f1ab91fe Fixed dorm room button 2026-05-29 23:11:13 +03:00
Alexa f331530974 avatar: raise unlocked-items defaults so new purchases survive relog
/api/avatar/v4/items truncated owned items by maxItems (was 30) and
maxPerSlot (was 4). The per-slot cap silently dropped any newly-bought
wardrobe item once a slot held 4+ entries — the 'I bought it but it's
gone after relog' symptom. Defaults raised to 100 / 20.

Clamp ranges left at [1,120] / [1,20] (prior maintainer note locked
these to watch render-budget testing — raising the ceiling without
retesting risks BrowsableAvatarItem / DynamicAvatarItemImposter
thrash inside the watch's wardrobe drawer).

Sort tiebreaker added: ThenByDescending(OriginalIndex) so when
truncation has to drop entries, it drops the OLDEST (starter seed)
items rather than the just-purchased one. GrantWardrobeAsync and
the gift-consume path both append new GUIDs to the end of
InventoryJson, so list index == purchase order.
2026-05-27 10:43:44 +03:00
Alexa f5061f014b play: drop playlists from Hot; raise take 12 -> 100
/roomserver/roomsandplaylists/hot and the path-style sibling
/roomserver/hot_roomsandplaylists/{tags} now return rooms-only — the
watch's Playlists tab fetches via /api/curatedroomplaylists +
/roomserver/playlists/{id} independently (verified
FPNPBJBCMKB.txt:053, EJDCNGBEICB.txt:1659/2192), so dropping playlists
from the Hot endpoint just stops mixing them into the rooms tab.

Wire shape unchanged: HJKAOMOICJG reads TotalResults + Results
(HJKAOMOICJG.txt:039/045) and the MKAMHOIHOJK factory discriminates
on the roomId key (MKAMHOIHOJK.txt:014), accepting a Results list
that's 100% room entries.

Take cap raised from 12 to 100 — the old limit only surfaced the
dozen highest-HotScore rooms, hiding the rest of the public catalog.
2026-05-27 10:43:31 +03:00
Alexa 4edf25b2d5 Import december-2020-12-18 from private repo (scrubbed 2026-05-27)
Targets Rec Room 2020.12.18 client.

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 the dorknet-clientpatch-{key}.zip
  Release asset the launcher fetches.
- .github/workflows/release.yml — auto-publishes both Release assets
  on v1-december-* tag push.

Scrubbed via maintainer-side scrub-for-public.ps1: same drop rules as
the prior import, plus build-patcher-zip.ps1 added to the tools/
allow-list so it survives the scrub.
2026-05-27 01:04:12 +03:00