feat: 2.3.1

This commit is contained in:
2026-05-12 17:55:53 +08:00
parent 13f3c3d591
commit 7ca11c6534
28 changed files with 1328 additions and 578 deletions
+15
View File
@@ -1,3 +1,18 @@
## [2.3.2] — 2026-05-12
- Integrated Mailbox UI into lobby with CanvasLayer overlay (renders above 3D viewport).
- Redesigned `mailbox_panel.tscn` to 3-column layout: scrollable mail list | content area | reward slots.
- Auto read-all and auto claim-all triggered on mailbox open — no "NEW" tags remain after viewing.
- Fixed `MailboxBtn` text glitch — removed text override, replaced with `MailBadge` Label overlay in top-right corner of button.
- Fixed `mark_as_read()` in `MailManager` — now persists `read_ids` to server via new `save_mail_state` RPC.
- Admin Panel: Announcement tab `Target User` field now accepts username, display name, or user_id with **Find** button for resolution.
- Admin Panel: New **Mail Manager** tab listing all global and personal sent mails with Type, Title, Sender, Start, Expires, Status columns.
- Admin Panel: Edit dialog for mails uses `date_picker.tscn` for end date and supports reassigning recipient (username lookup + move).
- Admin Panel: **End Now** button sets `end_date` to current timestamp; **Delete** permanently removes mail from server storage.
- Server: Added `admin_list_mail` RPC — paginates all `inbox/personal` storage objects across all users via `storageList`.
- Server: Added `admin_update_mail` RPC — extract-then-reinsert pattern supports field edits and cross-user mail movement.
- Server: Added `admin_delete_mail_server` RPC — hard-removes mail from global config or personal inbox storage.
- Server: Added `save_mail_state` RPC — merges client `read_ids` into server `inbox/state` without clobbering claimed/deleted IDs.
## [2.3.1] — 2026-05-11
- Integrated DM tab system directly into the lobby chatbox — DMs now open as closeable tabs inside ChatPanel instead of a fullscreen overlay.
- Removed static DMTabBtn; DM tabs are dynamically created per friend using a scene-local DMTabTemplate with (X) close button.