feat(遊戲化): 新增大廳、附身、時間流、後日談進度等遊戲化系統功能
新增角色大廳(lobby)邀約與通話、附身(possession)、時鐘(clock)抽象、 時間流與睡眠負債、後日談進度、行為選擇與旁觀反應等模組,並補齊對應冒煙 測試(R~V)與單元測試;同步調整 web/mobile 對應頁面與元件。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@ import { PrismaService } from "../prisma/prisma.service.js";
|
||||
import { EmotionService, dominantState } from "../emotion/emotion.service.js";
|
||||
import { RomanceService } from "./romance.service.js";
|
||||
import { RomanceEligibilityService } from "./romance-eligibility.service.js";
|
||||
import { isOutsideSoloRoom } from "./room-context-guard.js";
|
||||
import {
|
||||
CONFESSION_METER_THRESHOLD,
|
||||
AWKWARD_PERIOD_DAYS,
|
||||
@@ -37,7 +38,12 @@ export class ConfessionService {
|
||||
private readonly emotion: EmotionService,
|
||||
) {}
|
||||
|
||||
async confess(characterId: string, userId: string, now: Date = new Date()): Promise<ConfessionResult> {
|
||||
async confess(characterId: string, userId: string, now: Date = new Date(), roomId?: string): Promise<ConfessionResult> {
|
||||
// T42:房型已轉為 GROUP/LOBBY/SELF_CHAT 時,告白一律不可用——不消耗嘗試次數、不記錄拒絕。
|
||||
if (await isOutsideSoloRoom(this.prisma, roomId)) {
|
||||
return { outcome: "INELIGIBLE", romanceMeter: 0, consecutiveRejections: 0 };
|
||||
}
|
||||
|
||||
const eligible = await this.eligibility.getEligibility(characterId);
|
||||
if (!eligible.romanceAxisEligible) {
|
||||
return { outcome: "INELIGIBLE", romanceMeter: 0, consecutiveRejections: 0 };
|
||||
|
||||
Reference in New Issue
Block a user