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