package models import ( "encoding/json" "sync" ) var _ = json.RawMessage{} var _ = sync.Mutex{} // // 一首歌的历史成绩 —— Livehouse 音游(节奏打击)per-player 存档的最小形状。 // // 字段直接对应 wire 上的 MusicClientInfoPush.RecordInfo // (见 Drmk.RpcTypes\Client4229938\MusicPlayWireContracts.cs 的顶部注释): // Perfect / Great / Miss / Special,顺序不可换。 // // // 这 4 + 1 个字段全是 primitive ⇒ 同一份 record 既做内存形状也做 // config/player-progress.json 里的落盘形状,不需要额外的 Save* DTO // (对比 FashionColoringRecord4229938:它因为嵌套字典才必须配 SaveFashionColoring)。 // // type LivehouseRecord4229938 struct { Perfect uint32 `json:"perfect"` Great uint32 `json:"great"` Miss uint32 `json:"miss"` Special uint32 `json:"special"` AlreadyReward bool `json:"alreadyReward"` } // // Livehouse 音游进度:a) 每首歌的最好成绩 b) 「首次引导播过了没有」。 // // 挂在 WorldEntryState 上并通过 PlayerProgressStore 落盘 // (硬规则 2:跨 session 状态必须走 WorldEntryState + PlayerProgressStore), // 这样重登之后曲目列表里的等级打点还在。 // // // 为什么不记「当前正在打的那一首」:LiveHouseMusicStart / // LiveHouseMusicInterrupt 那两条 notify 只是开局/中断通知, // 真正的成绩由 SetLiveHouseMusicResult 送来;把「进行中」放进持久化存档 // 会在中途退出时留下脏状态 ⇒ 放在 session 里(handler 自己的字典),不进这里。 // // type LivehouseProgressStore struct { }