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 {
}