feat(遊戲化): 新增大廳、附身、時間流、後日談進度等遊戲化系統功能

新增角色大廳(lobby)邀約與通話、附身(possession)、時鐘(clock)抽象、
時間流與睡眠負債、後日談進度、行為選擇與旁觀反應等模組,並補齊對應冒煙
測試(R~V)與單元測試;同步調整 web/mobile 對應頁面與元件。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-20 09:10:26 +08:00
co-authored by Claude Sonnet 5
parent 127a59dafd
commit 1bea06e3cd
195 changed files with 17219 additions and 738 deletions
+4 -3
View File
@@ -183,9 +183,9 @@ export default async function smokeO() {
data: { stage: "BONDED", intimacy: 90 },
});
await setEmotion(GENKI_ID, "CALM", 100);
const chatResult = await post(`/chat/${GENKI_ID}`, {
const chatRoom = await post("/room/solo", { userId: USER_ID, characterId: GENKI_ID });
const chatResult = await post(`/room/${chatRoom.id}/message`, {
userId: USER_ID,
sessionId: "smoke-o-session",
text: "謝謝你,我今天好開心!",
});
const exprAfterChat = await get(`/tachie/${GENKI_ID}/${USER_ID}/expression`);
@@ -193,7 +193,8 @@ export default async function smokeO() {
throw new Error("聊天訊息觸發的情緒轉變,應該同時反映在對話上下文與獨立查詢的表情狀態上");
}
// 清理本次測試建立的角色與作品(cascade 會一併清掉關係、情緒狀態、插圖索引等)。
// 清理本次測試建立的角色與作品(cascade 會一併清掉關係、情緒狀態、插圖索引等)與本次建立的房間。
await prisma.room.deleteMany({ where: { id: chatRoom.id } });
await prisma.character.deleteMany({ where: { id: { in: [GENKI_ID, COOL_ID] } } });
await prisma.work.delete({ where: { id: work.id } });
}