72 lines
2.7 KiB
Go
72 lines
2.7 KiB
Go
package models
|
||
|
||
import (
|
||
"encoding/json"
|
||
"sync"
|
||
"time"
|
||
)
|
||
|
||
var _ = json.RawMessage{}
|
||
var _ = sync.Mutex{}
|
||
var _ = time.Now
|
||
|
||
//
|
||
// GM 控制台(ALT+F1)下发过的一条职业记录。
|
||
// 服务端不持有职业表(职业/等级全在客户端配置里),所以一条职业只在某个 GmJob* 命令
|
||
// 点名它的 jobClassId 之后才存在;这份记录既是命令自身返回值的来源,也是
|
||
// SyncSpiritJobInfo 推送的来源。
|
||
//
|
||
type GmJobRecord4229938 struct {
|
||
JobClassId uint32 `json:"jobClassId"`
|
||
Level byte `json:"level"`
|
||
// 最后一条到达的职业命令(只用于日志与面板展示)。
|
||
Action GmJobAction4229938 `json:"action"`
|
||
UpdatedUtc time.Time `json:"updatedUtc"`
|
||
}
|
||
|
||
//
|
||
// 六种 GmJob* 命令。这是服务端自己的记账枚举,不进 wire(wire 上只有 jobClassId /
|
||
// level 两个标量),所以底层类型怎么写都不影响协议。
|
||
//
|
||
type GmJobAction4229938 byte
|
||
|
||
const (
|
||
GmJobAction4229938_Take GmJobAction4229938 = iota
|
||
GmJobAction4229938_Start
|
||
GmJobAction4229938_Quit
|
||
GmJobAction4229938_Promote
|
||
GmJobAction4229938_SetLevel
|
||
GmJobAction4229938_End
|
||
)
|
||
|
||
//
|
||
// 一个会话上 GM 职业命令的全部效果。
|
||
// 移植自捐赠端 DremkaPS 的 GmTaskState4229938,但只取其中的职业(job)部分:
|
||
// 捐赠端那一份还带着任务 / 事件 / 对话框 / NPC 行为项四组状态,而本服
|
||
// GameRouter.Tasks.cs 已经四次证明任务面板在 4229938 下渲染不出来
|
||
// (TaskPublishEnabled = false),搬那四组只会得到一堆写进去没人读的状态。
|
||
//
|
||
type GmJobState4229938 struct {
|
||
//
|
||
// 自带锁而不是复用 WorldEntryState.SyncRoot:面板端点跑在 HTTP 线程上,会话被切走或
|
||
// 拆掉之后仍可能摸到这个对象;而且只有 GmJobs 这一条路径会碰它。
|
||
//
|
||
SyncRoot any `json:"syncRoot"`
|
||
// jobClassId → 记录。空表示还没收到过任何职业命令。
|
||
Jobs map[uint32]GmJobRecord4229938 `json:"jobs"`
|
||
//
|
||
// 客户端当前所处的职业。
|
||
// ⛑⛑ 默认必须是 RuntimePayloadFactory.JoblessUrbanJob4229938(100,Jobless)
|
||
// 而不是 0 —— 0 不是合法的 UrbanJobConfig id,一旦带着职业记录发出去,客户端
|
||
// SpiritJobManager 会去解引用一个不存在的配置。捐赠端这里默认 0、quit/end 之后也回落 0,
|
||
// 那是它的一个坑,本服不照搬。
|
||
//
|
||
CurrentJob uint32 `json:"currentJob"`
|
||
//
|
||
// 是否有过至少一条 GmJob* 命令。用来区分「GM 没动过职业,照旧用配置驱动的那份」
|
||
// 与「GM 动过了,以控制台为准」—— 没有这个标志的话,一次无关命令就会把角色原本的职业顶掉。
|
||
//
|
||
HasGmOverride bool `json:"hasGmOverride"`
|
||
}
|
||
|