From 420f0a2e2c97ae9160ef76eebffc3e218ac26b34 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Dec 2025 10:40:06 +0800 Subject: [PATCH 01/27] 1 --- src/server/game/cluster_mgr.go | 2 +- src/server/game/friend_mgr.go | 8 -------- src/server/game/message_mgr.go | 21 ++++++++++++++++++++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/server/game/cluster_mgr.go b/src/server/game/cluster_mgr.go index 98374e2f..6f70421d 100644 --- a/src/server/game/cluster_mgr.go +++ b/src/server/game/cluster_mgr.go @@ -11,7 +11,7 @@ func ClusterMgrInit() { go func() { for { m := <-mergeCluster.MsgChan - clusterHandlerProcess(m) + MessageHandle(m) } }() diff --git a/src/server/game/friend_mgr.go b/src/server/game/friend_mgr.go index 79ea8061..e44e1083 100644 --- a/src/server/game/friend_mgr.go +++ b/src/server/game/friend_mgr.go @@ -277,11 +277,3 @@ func FriendMgrCall(m *msg.Msg) interface{} { } return G_GameLogicPtr.FriendMgrCall(m.Clone()) } - -func SendMsgToCenter(m *msg.Msg) error { - return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) -} - -func CallMsgToCenter(m *msg.Msg) (interface{}, error) { - return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) -} diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 5f7dc0a9..bd11da46 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -3,6 +3,7 @@ package game import ( "fmt" mergeCluster "server/cluster" + "server/conf" "server/game/mod/msg" GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" @@ -14,6 +15,7 @@ type MessageMgr struct { type MessageData struct { MessageList map[int64][]*msg.Msg + PlayerList map[int64]int } func (m *MessageMgr) MessageMgrInit() { @@ -42,10 +44,27 @@ func SendMessage(m1 *msg.Msg) error { m1.SendT = GoUtil.Now() } m := m1.Clone() - err := mergeCluster.SendServerMsg(m, 1) + err := SendMsgToCenter(m) if err != nil { // 区服不在线 G_GameLogicPtr.FriendMgrSend(m) return err } return nil } + +func MessageHandle(m *msg.Msg) error { + log.Debug("RecvMessage m %v", m) + return nil +} + +func SendMsgToCenter(m *msg.Msg) error { + return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) +} + +func CallMsgToCenter(m *msg.Msg) (interface{}, error) { + return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) +} + +func SendMsgToNode(m *msg.Msg, node int) error { + return mergeCluster.SendServerMsg(m, node) +} From 54dba4b18a7d921e9b4743529ee96fd6746287da Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Dec 2025 11:48:27 +0800 Subject: [PATCH 02/27] 1 --- src/server/game/message_mgr.go | 276 +++++++++++++++++++++++++++++++++ src/server/game/mod/msg/Msg.go | 6 + 2 files changed, 282 insertions(+) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index bd11da46..350a6d37 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -1,16 +1,25 @@ package game import ( + "context" "fmt" + "runtime/debug" mergeCluster "server/cluster" "server/conf" "server/game/mod/msg" GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" + "sync" + "time" ) +// 中间件函数类型 +type MessageMiddleware func(MessageHandlerFunc) MessageHandlerFunc + type MessageMgr struct { *ServerMod + middlewares []MessageMiddleware + workerPool *WorkerPool } type MessageData struct { @@ -18,13 +27,57 @@ type MessageData struct { PlayerList map[int64]int } +// Worker Pool 结构 +type WorkerPool struct { + workers int + taskQueue chan *MessageTask + wg sync.WaitGroup + ctx context.Context + cancel context.CancelFunc + maxQueue int +} + +// 消息任务 +type MessageTask struct { + Msg *msg.Msg + Handler MessageHandlerFunc + Result chan *TaskResult +} + +// 任务结果 +type TaskResult struct { + Data interface{} + Error error +} + func (m *MessageMgr) MessageMgrInit() { m.key = MESSAGE_MGR_KEY m.data = &MessageData{} + m.middlewares = []MessageMiddleware{} + // 初始化 Worker Pool (10个worker, 1000个队列大小) + m.workerPool = NewWorkerPool(10, 1000) + // 注册默认中间件 + m.Use(RecoveryMiddleware()) + m.Use(LoggingMiddleware()) + m.Use(TimeoutMiddleware(5 * time.Second)) // 注册处理函数 m.init() } +// 添加中间件 +func (m *MessageMgr) Use(middleware MessageMiddleware) { + m.middlewares = append(m.middlewares, middleware) +} + +// 应用所有中间件到处理函数 +func (m *MessageMgr) applyMiddlewares(handler MessageHandlerFunc) MessageHandlerFunc { + // 从后往前应用中间件 + for i := len(m.middlewares) - 1; i >= 0; i-- { + handler = m.middlewares[i](handler) + } + return handler +} + type MessageHandlerFunc func(message *msg.Msg) (interface{}, error) func (m *MessageMgr) RegisterMessageHandler(hType int, handler MessageHandlerFunc) { @@ -52,11 +105,220 @@ func SendMessage(m1 *msg.Msg) error { return nil } +// 异步处理消息 (多线程版本) +func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { + if fun, ok := m.handler[message.Type]; ok { + // 应用中间件 + handlerWithMiddleware := m.applyMiddlewares(fun.(MessageHandlerFunc)) + + // 创建任务 + task := &MessageTask{ + Msg: message, + Handler: handlerWithMiddleware, + Result: make(chan *TaskResult, 1), + } + + // 提交到 Worker Pool + if err := m.workerPool.Submit(task); err != nil { + log.Error("Failed to submit message task: %v", err) + return err + } + + // 可以选择等待结果或直接返回 + go func() { + result := <-task.Result + if result.Error != nil { + log.Error("Message handle error: %v", result.Error) + } + }() + + return nil + } + log.Error("server mod key:%s handle not exist handle type:%d", m.key, message.Type) + return fmt.Errorf("server mod handler err") +} + +// 兼容旧版本的函数 func MessageHandle(m *msg.Msg) error { log.Debug("RecvMessage m %v", m) + // 这里可以调用 MessageMgr 的处理方法 + // G_GameLogicPtr.MessageMgr.MessageHandleAsync(m) return nil } +// ==================== Worker Pool 实现 ==================== + +// 创建 Worker Pool +func NewWorkerPool(workers, maxQueue int) *WorkerPool { + ctx, cancel := context.WithCancel(context.Background()) + pool := &WorkerPool{ + workers: workers, + taskQueue: make(chan *MessageTask, maxQueue), + ctx: ctx, + cancel: cancel, + maxQueue: maxQueue, + } + pool.start() + return pool +} + +// 启动 Worker Pool +func (p *WorkerPool) start() { + for i := 0; i < p.workers; i++ { + p.wg.Add(1) + go p.worker(i) + } +} + +// Worker 工作函数 +func (p *WorkerPool) worker(id int) { + defer p.wg.Done() + log.Debug("Worker %d started", id) + + for { + select { + case <-p.ctx.Done(): + log.Debug("Worker %d stopped", id) + return + case task, ok := <-p.taskQueue: + if !ok { + log.Debug("Worker %d: task queue closed", id) + return + } + // 执行任务 + result, err := task.Handler(task.Msg) + // 发送结果 + task.Result <- &TaskResult{ + Data: result, + Error: err, + } + close(task.Result) + } + } +} + +// 提交任务 +func (p *WorkerPool) Submit(task *MessageTask) error { + select { + case <-p.ctx.Done(): + return fmt.Errorf("worker pool is closed") + case p.taskQueue <- task: + return nil + default: + return fmt.Errorf("task queue is full") + } +} + +// 关闭 Worker Pool +func (p *WorkerPool) Shutdown() { + log.Debug("Shutting down worker pool...") + p.cancel() + close(p.taskQueue) + p.wg.Wait() + log.Debug("Worker pool shut down complete") +} + +// ==================== 中间件实现 ==================== + +// 日志中间件 +func LoggingMiddleware() MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + start := time.Now() + log.Debug("[Middleware] Processing message type: %d, time: %v", message.Type, start) + + result, err := next(message) + + duration := time.Since(start) + if err != nil { + log.Error("[Middleware] Message type: %d failed, duration: %v, error: %v", message.Type, duration, err) + } else { + log.Debug("[Middleware] Message type: %d success, duration: %v", message.Type, duration) + } + + return result, err + } + } +} + +// 恢复 Panic 中间件 +func RecoveryMiddleware() MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (result interface{}, err error) { + defer func() { + if r := recover(); r != nil { + log.Error("[Middleware] Panic recovered: %v\nStack: %s", r, debug.Stack()) + err = fmt.Errorf("panic recovered: %v", r) + } + }() + return next(message) + } + } +} + +// 超时中间件 +func TimeoutMiddleware(timeout time.Duration) MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + resultChan := make(chan *TaskResult, 1) + + go func() { + result, err := next(message) + resultChan <- &TaskResult{Data: result, Error: err} + }() + + select { + case result := <-resultChan: + return result.Data, result.Error + case <-time.After(timeout): + log.Error("[Middleware] Message type: %d timeout after %v", message.Type, timeout) + return nil, fmt.Errorf("message handler timeout") + } + } + } +} + +// 重试中间件 +func RetryMiddleware(maxRetries int) MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + var result interface{} + var err error + + for i := 0; i <= maxRetries; i++ { + result, err = next(message) + if err == nil { + return result, nil + } + + if i < maxRetries { + log.Debug("[Middleware] Retry %d/%d for message type: %d, error: %v", i+1, maxRetries, message.Type, err) + time.Sleep(time.Millisecond * 100 * time.Duration(i+1)) + } + } + + return result, fmt.Errorf("failed after %d retries: %w", maxRetries, err) + } + } +} + +// 验证中间件 +func ValidationMiddleware() MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + // 添加消息验证逻辑 + if message == nil { + return nil, fmt.Errorf("message is nil") + } + if message.Type <= 0 { + return nil, fmt.Errorf("invalid message type: %d", message.Type) + } + + return next(message) + } + } +} + func SendMsgToCenter(m *msg.Msg) error { return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) } @@ -68,3 +330,17 @@ func CallMsgToCenter(m *msg.Msg) (interface{}, error) { func SendMsgToNode(m *msg.Msg, node int) error { return mergeCluster.SendServerMsg(m, node) } + +func SendPlayerMsg(m *msg.Msg) error { + clone := m.Clone() + clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) + clone.HandleType = msg.HANDLE_TYPE_PLAYER_MSG + return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) +} + +func CallPlayerMsg(m *msg.Msg) (interface{}, error) { + clone := m.Clone() + clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) + clone.HandleType = msg.HANDLE_TYPE_PLAYER_MSG + return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) +} diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index c8592553..8e1e4ddb 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -19,6 +19,10 @@ type Msg struct { var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} +const ( + HANDLE_TYPE_PLAYER_MSG = 20001 // 玩家消息 +) + const ( //好友操作 HANDLE_TYPE_APPLY = iota //申请好友 @@ -114,6 +118,8 @@ const ( HANDLE_TYPE_SET_CATNIP_PARTNER // 设置猫薄荷伙伴 HANDLE_TYPE_CATNIP_SEND_EMOJI // 发送猫薄荷表情 HANDLE_TYPE_CHAMPSHIP_MY_RANK // 锦标赛我的排名 + + HANDLE_TYPE_LOGIN // 玩家登录处理 ) const ( From 17ac92f5a1dee3f78b35e32254917d3a08401fea Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Dec 2025 14:50:30 +0800 Subject: [PATCH 03/27] 1 --- src/server/cluster/cluster_func.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index 2571144d..27eb476f 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -49,18 +49,6 @@ func HandShakeRecv(a *Agent, m *msg.Msg) error { }, }) } - syncMsg := &msg.Msg{ - Type: msg.CLUSTER_FRIEND_SYNC, - To: ServerId, - } - sendGameMsg(syncMsg) - // fmt.Print("现有区服连接:") - // serverAgent.Range(func(key, value interface{}) bool { - // fmt.Print(key) - // fmt.Print(",") - // return true - // }) - // fmt.Println() return nil } From adaf454d3632cbbff8d290224faca98ec11d8450 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:59:35 +0800 Subject: [PATCH 04/27] 1 --- src/server/cluster/cluster_func.go | 6 +++ src/server/game/GameLogic.go | 9 ++++ src/server/game/message_mgr.go | 86 ++++++++++++++++++++++++++---- src/server/game/mod/msg/Msg.go | 4 +- 4 files changed, 94 insertions(+), 11 deletions(-) diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index 27eb476f..751c0443 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -48,6 +48,12 @@ func HandShakeRecv(a *Agent, m *msg.Msg) error { RemoteAddr: m.Extra.(string), }, }) + } else { + syncMsg := &msg.Msg{ + Type: msg.CLUSTER_FRIEND_SYNC, + To: ServerId, + } + sendGameMsg(syncMsg) } return nil } diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index a46b8b02..7b650c7a 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -85,6 +85,7 @@ type GameLogic struct { VarMgr *VarMgr // 变量管理器 BanMgr *BanMgr // 封号管理器 StartTime int64 // 服务器启动时间 + MessageMgr *MessageMgr // 消息管理器 } type ServerInfo struct { @@ -361,6 +362,13 @@ func (ad *GameLogic) CreateMailMgr() { ad.MailMgr.Init() } +func (ad *GameLogic) CreateMessageMgr() { + ad.MessageMgr = &MessageMgr{ + ServerMod: new(ServerMod), + } + ad.MessageMgr.MessageMgrInit() +} + func (ad *GameLogic) MailMgrSend(m *MsgMod.Msg) { ad.MailMgr.Send(m) } @@ -552,6 +560,7 @@ func G_getGameLogic() *GameLogic { G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 G_GameLogicPtr.CreateVarMgr() // 创建变量管理器 G_GameLogicPtr.CreateBanMgr() // 创建封号管理器 + G_GameLogicPtr.CreateMessageMgr() // 创建消息管理器 ClusterMgrInit() //初始化集群 G_GameLogicPtr.StartTime = time.Now().Unix() // G_GameLogicPtr.CreateHttpManager() diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 350a6d37..2fc70250 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -20,11 +20,18 @@ type MessageMgr struct { *ServerMod middlewares []MessageMiddleware workerPool *WorkerPool + handler map[int]MessageHandlerFunc } type MessageData struct { - MessageList map[int64][]*msg.Msg + MessageList map[int64]*MessageList PlayerList map[int64]int + mu sync.Mutex +} + +type MessageList struct { + Messages []*msg.Msg + mu sync.Mutex } // Worker Pool 结构 @@ -52,7 +59,13 @@ type TaskResult struct { func (m *MessageMgr) MessageMgrInit() { m.key = MESSAGE_MGR_KEY - m.data = &MessageData{} + m.data = &MessageData{ + MessageList: make(map[int64]*MessageList), + PlayerList: make(map[int64]int), + } + // 注册处理函数 + m.init() + m.handler = make(map[int]MessageHandlerFunc) m.middlewares = []MessageMiddleware{} // 初始化 Worker Pool (10个worker, 1000个队列大小) m.workerPool = NewWorkerPool(10, 1000) @@ -60,8 +73,61 @@ func (m *MessageMgr) MessageMgrInit() { m.Use(RecoveryMiddleware()) m.Use(LoggingMiddleware()) m.Use(TimeoutMiddleware(5 * time.Second)) - // 注册处理函数 - m.init() + if conf.Server.ServerType == "center" { + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLogin)) + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(SendToPlayer)) + } +} + +// 注册处理器 +func (s *MessageMgr) RegisterHandler(HandlerType int, fun MessageHandlerFunc) { + s.handler[HandlerType] = fun +} + +func getData() *MessageData { + return G_GameLogicPtr.MessageMgr.data.(*MessageData) +} + +func PlayerLogin(data *msg.Msg) (interface{}, error) { + // 关闭 Worker Pool + messageMgrData := getData() + messageMgrData.mu.Lock() + defer messageMgrData.mu.Unlock() + messageMgrData.PlayerList[int64(data.From)] = data.Extra.(int) + if _, ok := messageMgrData.MessageList[int64(data.From)]; !ok { + messageMgrData.MessageList[int64(data.From)] = &MessageList{ + Messages: []*msg.Msg{}, + } + } + messageMgrData.PlayerList[int64(data.From)] = data.Extra.(int) + return nil, nil +} + +func SendToPlayer(data *msg.Msg) (interface{}, error) { + PlayerId := int64(data.To) + messageMgrData := getData() + // 遍历消息列表,发送消息给在线玩家 + messages, ok := messageMgrData.MessageList[int64(PlayerId)] + if !ok { + messageMgrData.mu.Lock() + messages = &MessageList{ + Messages: []*msg.Msg{}, + } + messageMgrData.MessageList[int64(PlayerId)] = messages + messageMgrData.mu.Unlock() + } + messages.mu.Lock() + defer messages.mu.Unlock() + messages.Messages = append(messages.Messages, data) + if node, ok := messageMgrData.PlayerList[int64(PlayerId)]; ok { + for _, message := range messages.Messages { + err := SendMsgToNode(message, node) + if err != nil { + log.Error("Failed to send message to player %d: %v", PlayerId, err) + } + } + } + return nil, nil } // 添加中间件 @@ -86,7 +152,7 @@ func (m *MessageMgr) RegisterMessageHandler(hType int, handler MessageHandlerFun func (m *MessageMgr) Handle(msg *msg.Msg) (interface{}, error) { if fun, ok := m.handler[msg.Type]; ok { - return fun.(MessageHandlerFunc)(msg) + return fun(msg) } log.Error("server mod key:%s handle not exist handle type:%d", m.key, msg.Type) return nil, fmt.Errorf("server mod handler err") @@ -107,9 +173,9 @@ func SendMessage(m1 *msg.Msg) error { // 异步处理消息 (多线程版本) func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { - if fun, ok := m.handler[message.Type]; ok { + if fun, ok := m.handler[message.HandleType]; ok { // 应用中间件 - handlerWithMiddleware := m.applyMiddlewares(fun.(MessageHandlerFunc)) + handlerWithMiddleware := m.applyMiddlewares(fun) // 创建任务 task := &MessageTask{ @@ -142,7 +208,7 @@ func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { func MessageHandle(m *msg.Msg) error { log.Debug("RecvMessage m %v", m) // 这里可以调用 MessageMgr 的处理方法 - // G_GameLogicPtr.MessageMgr.MessageHandleAsync(m) + G_GameLogicPtr.MessageMgr.MessageHandleAsync(m) return nil } @@ -334,13 +400,13 @@ func SendMsgToNode(m *msg.Msg, node int) error { func SendPlayerMsg(m *msg.Msg) error { clone := m.Clone() clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) - clone.HandleType = msg.HANDLE_TYPE_PLAYER_MSG + clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) } func CallPlayerMsg(m *msg.Msg) (interface{}, error) { clone := m.Clone() clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) - clone.HandleType = msg.HANDLE_TYPE_PLAYER_MSG + clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 8e1e4ddb..ae3bb7fa 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -20,7 +20,9 @@ var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} const ( - HANDLE_TYPE_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 + HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 ) const ( From dd48b8354cc2829b1328549fa52a0d9e9610973b Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Dec 2025 16:33:53 +0800 Subject: [PATCH 05/27] 1 --- src/server/game/message_mgr.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 2fc70250..e14f1684 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -76,6 +76,8 @@ func (m *MessageMgr) MessageMgrInit() { if conf.Server.ServerType == "center" { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLogin)) m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(SendToPlayer)) + } else { + } } From 1feed48e0fe601b344da959e5b60e8f7a53157ca Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Dec 2025 17:17:56 +0800 Subject: [PATCH 06/27] 1 --- src/server/cluster/cluster_func.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index 751c0443..d252d431 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -107,6 +107,9 @@ func connectRemote(RemoteAddr string, ConnType int, ConnLabel string) error { } func SendServerMsg(m *msg.Msg, serverId int) error { + if m.UniKey == "" { + m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m)) + } if v, ok := serverAgent.Load(serverId); ok { data, err := GoUtil.GobMarshal(m) if err != nil { @@ -120,8 +123,9 @@ func SendServerMsg(m *msg.Msg, serverId int) error { } func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) { - m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m)) - + if m.UniKey == "" { + m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m)) + } // 先注册回调通道,避免发送出去后对方快速返回导致丢失 newChan := make(chan *msg.Msg, 1) registerChanel(m.UniKey, newChan) From bc6320d11dcc863b74f43c4723e7521b0ad84926 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Dec 2025 19:14:38 +0800 Subject: [PATCH 07/27] 1 --- src/server/game/message_mgr.go | 33 ++++++- src/server/game/mod/msg/Msg.go | 1 + src/server/game/player_data.go | 5 +- src/server/msg/Gameapi.pb.go | 158 ++++++++++++++++----------------- 4 files changed, 115 insertions(+), 82 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index e14f1684..239355a5 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -77,7 +77,7 @@ func (m *MessageMgr) MessageMgrInit() { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLogin)) m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(SendToPlayer)) } else { - + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) } } @@ -132,6 +132,24 @@ func SendToPlayer(data *msg.Msg) (interface{}, error) { return nil, nil } +func PlayerMsgHandler(data *msg.Msg) (interface{}, error) { + p := G_GameLogicPtr.GetPlayer(int64(data.To)) + // 不在线 不处理 + if p == nil || p.stop { + // TODO: 模拟消费 + data.HandleType = msg.HANDLE_MOD_COMSUME_MSG + go SendMsgToCenter(data) + return nil, nil + } + p.lock.Lock() + defer p.lock.Unlock() + p.Send(data.Clone()) + // 处理完后发送消费消息 + data.HandleType = msg.HANDLE_MOD_COMSUME_MSG + go SendMsgToCenter(data) + return nil, nil +} + // 添加中间件 func (m *MessageMgr) Use(middleware MessageMiddleware) { m.middlewares = append(m.middlewares, middleware) @@ -209,6 +227,19 @@ func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { // 兼容旧版本的函数 func MessageHandle(m *msg.Msg) error { log.Debug("RecvMessage m %v", m) + SendMsgToCenter(&msg.Msg{ + From: 10000, + Extra: conf.Server.ServerID, + HandleType: msg.HANDLE_MOD_PLAYER_LOGIN, + }) + time.Sleep(time.Second) + SendMsgToCenter(&msg.Msg{ + From: 10000, + To: 10000, + Type: msg.HANDLE_TYPE_LOGIN, + Extra: conf.Server.ServerID, + HandleType: msg.HANDLE_MOD_PLAYER_MSG, + }) // 这里可以调用 MessageMgr 的处理方法 G_GameLogicPtr.MessageMgr.MessageHandleAsync(m) return nil diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index ae3bb7fa..2438d245 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -23,6 +23,7 @@ const ( HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 + HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 ) const ( diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index aa6b369b..2baf0277 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -101,12 +101,13 @@ func (p *Player) CallEvent(Duration time.Duration, F func(), Label string) { } // 异步请求 -func (p *Player) Send(m *MsgMod.Msg) { +func (p *Player) Send(m *MsgMod.Msg) error { if m == nil { - return + return nil } p.wg.Add(1) p.msgChan <- m + return nil } func (p *Player) Call(m MsgMod.Msg) { diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index acdf437d..e82fd23d 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -687,25 +687,25 @@ const ( TIME_LINE_TYPE_LOG_TYPE_CARD_SELECT_SEND TIME_LINE_TYPE = 9 // 选择卡牌交换 TIME_LINE_TYPE_LOG_TYPE_CARD_EX_SUCCESS_1 TIME_LINE_TYPE = 10 // 卡牌交换成功 TIME_LINE_TYPE_LOG_TYPE_CARD_EX_SUCCESS_2 TIME_LINE_TYPE = 11 // 卡牌交换成功 - TIME_LINE_TYPE_LOG_TYPE_FRIEND_DELETE TIME_LINE_TYPE = 12 // 删除好友 - TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_VISIT TIME_LINE_TYPE = 13 // 非小猫游戏,他人偷走了玩家的猫币 - TIME_LINE_TYPE_LOG_TYPE_HANDBOOK TIME_LINE_TYPE = 14 // 图鉴收集 - TIME_LINE_TYPE_LOG_TYPE_HANDBOOK_UPVOTE TIME_LINE_TYPE = 15 // 图鉴点赞 - TIME_LINE_TYPE_LOG_TYPE_CHARGE_SEND TIME_LINE_TYPE = 16 // 充值赠送 - TIME_LINE_TYPE_LOG_TYPE_CHARGE_RECEIVED TIME_LINE_TYPE = 17 // 充值接受 - TIME_LINE_TYPE_LOG_TYPE_WISH TIME_LINE_TYPE = 18 // 心愿单 - TIME_LINE_TYPE_LOG_TYPE_FRIEND_BECOME_NPC TIME_LINE_TYPE = 19 // NPC成为好友 - TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_UPVOTE TIME_LINE_TYPE = 20 // playroom点赞 - TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CHAMPSHIP TIME_LINE_TYPE = 21 // 竞标赛排名 - TIME_LINE_TYPE_LOG_TYPE_TREASURE TIME_LINE_TYPE = 22 // 宠物宝藏 - TIME_LINE_TYPE_LOG_TYPE_CARD_SEND_ACCEPT TIME_LINE_TYPE = 23 // 收到赠送卡牌 - TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_WIN TIME_LINE_TYPE = 24 // 小猫游戏,给小猫成功装箱 - TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_LOSE TIME_LINE_TYPE = 25 // 小猫游戏,装箱小猫未成功 - TIME_LINE_TYPE_LOG_TYPE_CARD_GIVE_ACCEPT TIME_LINE_TYPE = 26 // 接受卡牌请求 - TIME_LINE_TYPE_LOG_TYPE_FRIEND_INVITE TIME_LINE_TYPE = 27 // 邀请注册 - TIME_LINE_TYPE_LOG_TYPE_TREASURE_HELP TIME_LINE_TYPE = 28 // 宠物宝藏帮助 - TIME_LINE_TYPE_LOG_TYPE_FRIEND_SPONSOR TIME_LINE_TYPE = 29 // 好友赞助体力 - TIME_LINE_TYPE_LOG_TYPE_FRIEND_SPONSOR_GET TIME_LINE_TYPE = 30 // 获得好友赞助体力 + TIME_LINE_TYPE_LOG_TYPE_FRIEND_DELETE TIME_LINE_TYPE = 14 // 删除好友 + TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_VISIT TIME_LINE_TYPE = 15 // 非小猫游戏,他人偷走了玩家的猫币 + TIME_LINE_TYPE_LOG_TYPE_HANDBOOK TIME_LINE_TYPE = 16 // 图鉴收集 + TIME_LINE_TYPE_LOG_TYPE_HANDBOOK_UPVOTE TIME_LINE_TYPE = 17 // 图鉴点赞 + TIME_LINE_TYPE_LOG_TYPE_CHARGE_SEND TIME_LINE_TYPE = 18 // 赠送充值礼物 + TIME_LINE_TYPE_LOG_TYPE_CHARGE_RECEIVE TIME_LINE_TYPE = 19 // 收到充值礼物 + TIME_LINE_TYPE_LOG_TYPE_WISH TIME_LINE_TYPE = 20 // 心愿单请求 + TIME_LINE_TYPE_LOG_TYPE_FRIEND_BECOME_NPC TIME_LINE_TYPE = 21 // npc成为好友 + TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_UPVOTE TIME_LINE_TYPE = 22 // playroom点赞 + TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CHAMPSHIP TIME_LINE_TYPE = 23 // 竞标赛排名 + TIME_LINE_TYPE_LOG_TYPE_TREASURE TIME_LINE_TYPE = 24 // 好友宝藏 + TIME_LINE_TYPE_LOG_TYPE_CARD_SEND_ACCEPT TIME_LINE_TYPE = 25 // 收到赠送卡牌 + TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_WIN TIME_LINE_TYPE = 26 // 小猫游戏,给小猫成功装箱 + TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_LOSE TIME_LINE_TYPE = 27 // 小猫游戏,装箱小猫未成功 + TIME_LINE_TYPE_LOG_TYPE_CARD_GIVE_ACCEPT TIME_LINE_TYPE = 28 // 接受卡牌请求 + TIME_LINE_TYPE_LOG_TYPE_FRIEND_INVITE TIME_LINE_TYPE = 29 // 邀请注册 + TIME_LINE_TYPE_LOG_TYPE_TREASURE_HELP TIME_LINE_TYPE = 30 // 好友宝藏帮助 + TIME_LINE_TYPE_LOG_TYPE_FRIEND_SPONSOR TIME_LINE_TYPE = 31 // 好友赞助体力 + TIME_LINE_TYPE_LOG_TYPE_FRIEND_SPONSOR_GET TIME_LINE_TYPE = 32 // 获得好友赞助体力 ) // Enum value maps for TIME_LINE_TYPE. @@ -723,25 +723,25 @@ var ( 9: "LOG_TYPE_CARD_SELECT_SEND", 10: "LOG_TYPE_CARD_EX_SUCCESS_1", 11: "LOG_TYPE_CARD_EX_SUCCESS_2", - 12: "LOG_TYPE_FRIEND_DELETE", - 13: "LOG_TYPE_PLAYROOM_VISIT", - 14: "LOG_TYPE_HANDBOOK", - 15: "LOG_TYPE_HANDBOOK_UPVOTE", - 16: "LOG_TYPE_CHARGE_SEND", - 17: "LOG_TYPE_CHARGE_RECEIVED", - 18: "LOG_TYPE_WISH", - 19: "LOG_TYPE_FRIEND_BECOME_NPC", - 20: "LOG_TYPE_PLAYROOM_UPVOTE", - 21: "LOG_TYPE_PLAYROOM_CHAMPSHIP", - 22: "LOG_TYPE_TREASURE", - 23: "LOG_TYPE_CARD_SEND_ACCEPT", - 24: "LOG_TYPE_PLAYROOM_CAT_WIN", - 25: "LOG_TYPE_PLAYROOM_CAT_LOSE", - 26: "LOG_TYPE_CARD_GIVE_ACCEPT", - 27: "LOG_TYPE_FRIEND_INVITE", - 28: "LOG_TYPE_TREASURE_HELP", - 29: "LOG_TYPE_FRIEND_SPONSOR", - 30: "LOG_TYPE_FRIEND_SPONSOR_GET", + 14: "LOG_TYPE_FRIEND_DELETE", + 15: "LOG_TYPE_PLAYROOM_VISIT", + 16: "LOG_TYPE_HANDBOOK", + 17: "LOG_TYPE_HANDBOOK_UPVOTE", + 18: "LOG_TYPE_CHARGE_SEND", + 19: "LOG_TYPE_CHARGE_RECEIVE", + 20: "LOG_TYPE_WISH", + 21: "LOG_TYPE_FRIEND_BECOME_NPC", + 22: "LOG_TYPE_PLAYROOM_UPVOTE", + 23: "LOG_TYPE_PLAYROOM_CHAMPSHIP", + 24: "LOG_TYPE_TREASURE", + 25: "LOG_TYPE_CARD_SEND_ACCEPT", + 26: "LOG_TYPE_PLAYROOM_CAT_WIN", + 27: "LOG_TYPE_PLAYROOM_CAT_LOSE", + 28: "LOG_TYPE_CARD_GIVE_ACCEPT", + 29: "LOG_TYPE_FRIEND_INVITE", + 30: "LOG_TYPE_TREASURE_HELP", + 31: "LOG_TYPE_FRIEND_SPONSOR", + 32: "LOG_TYPE_FRIEND_SPONSOR_GET", } TIME_LINE_TYPE_value = map[string]int32{ "DEFAULT": 0, @@ -756,25 +756,25 @@ var ( "LOG_TYPE_CARD_SELECT_SEND": 9, "LOG_TYPE_CARD_EX_SUCCESS_1": 10, "LOG_TYPE_CARD_EX_SUCCESS_2": 11, - "LOG_TYPE_FRIEND_DELETE": 12, - "LOG_TYPE_PLAYROOM_VISIT": 13, - "LOG_TYPE_HANDBOOK": 14, - "LOG_TYPE_HANDBOOK_UPVOTE": 15, - "LOG_TYPE_CHARGE_SEND": 16, - "LOG_TYPE_CHARGE_RECEIVED": 17, - "LOG_TYPE_WISH": 18, - "LOG_TYPE_FRIEND_BECOME_NPC": 19, - "LOG_TYPE_PLAYROOM_UPVOTE": 20, - "LOG_TYPE_PLAYROOM_CHAMPSHIP": 21, - "LOG_TYPE_TREASURE": 22, - "LOG_TYPE_CARD_SEND_ACCEPT": 23, - "LOG_TYPE_PLAYROOM_CAT_WIN": 24, - "LOG_TYPE_PLAYROOM_CAT_LOSE": 25, - "LOG_TYPE_CARD_GIVE_ACCEPT": 26, - "LOG_TYPE_FRIEND_INVITE": 27, - "LOG_TYPE_TREASURE_HELP": 28, - "LOG_TYPE_FRIEND_SPONSOR": 29, - "LOG_TYPE_FRIEND_SPONSOR_GET": 30, + "LOG_TYPE_FRIEND_DELETE": 14, + "LOG_TYPE_PLAYROOM_VISIT": 15, + "LOG_TYPE_HANDBOOK": 16, + "LOG_TYPE_HANDBOOK_UPVOTE": 17, + "LOG_TYPE_CHARGE_SEND": 18, + "LOG_TYPE_CHARGE_RECEIVE": 19, + "LOG_TYPE_WISH": 20, + "LOG_TYPE_FRIEND_BECOME_NPC": 21, + "LOG_TYPE_PLAYROOM_UPVOTE": 22, + "LOG_TYPE_PLAYROOM_CHAMPSHIP": 23, + "LOG_TYPE_TREASURE": 24, + "LOG_TYPE_CARD_SEND_ACCEPT": 25, + "LOG_TYPE_PLAYROOM_CAT_WIN": 26, + "LOG_TYPE_PLAYROOM_CAT_LOSE": 27, + "LOG_TYPE_CARD_GIVE_ACCEPT": 28, + "LOG_TYPE_FRIEND_INVITE": 29, + "LOG_TYPE_TREASURE_HELP": 30, + "LOG_TYPE_FRIEND_SPONSOR": 31, + "LOG_TYPE_FRIEND_SPONSOR_GET": 32, } ) @@ -24168,7 +24168,7 @@ func (x *ReqPlayroomGameShowReward) GetSelectId() int32 { type ResPlayroomGameShowReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ItemInfo `protobuf:"bytes,1,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励道具 + Items []*ItemInfo `protobuf:"bytes,5,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励道具 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -29415,7 +29415,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x04Type\x18\x01 \x01(\x05R\x04Type\x12\x1a\n" + "\bSelectId\x18\x02 \x01(\x05R\bSelectId\"E\n" + "\x19ResPlayroomGameShowReward\x12(\n" + - "\x05Items\x18\x01 \x03(\v2\x12.tutorial.ItemInfoR\x05Items\"9\n" + + "\x05Items\x18\x05 \x03(\v2\x12.tutorial.ItemInfoR\x05Items\"9\n" + "\x13ReqPlayroomInteract\x12\x0e\n" + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x12\n" + "\x04Type\x18\x02 \x01(\x05R\x04Type\"q\n" + @@ -29769,7 +29769,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\n" + "CODE_LOGIN\x10\x01\x12\x10\n" + "\fDEVICE_LOGIN\x10\x02\x12\r\n" + - "\tSDK_LOGIN\x10\x03*\xf7\x06\n" + + "\tSDK_LOGIN\x10\x03*\xf6\x06\n" + "\x0eTIME_LINE_TYPE\x12\v\n" + "\aDEFAULT\x10\x00\x12\x19\n" + "\x15LOG_TYPE_FRIEND_APPLY\x10\x01\x12\x1a\n" + @@ -29784,25 +29784,25 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x1aLOG_TYPE_CARD_EX_SUCCESS_1\x10\n" + "\x12\x1e\n" + "\x1aLOG_TYPE_CARD_EX_SUCCESS_2\x10\v\x12\x1a\n" + - "\x16LOG_TYPE_FRIEND_DELETE\x10\f\x12\x1b\n" + - "\x17LOG_TYPE_PLAYROOM_VISIT\x10\r\x12\x15\n" + - "\x11LOG_TYPE_HANDBOOK\x10\x0e\x12\x1c\n" + - "\x18LOG_TYPE_HANDBOOK_UPVOTE\x10\x0f\x12\x18\n" + - "\x14LOG_TYPE_CHARGE_SEND\x10\x10\x12\x1c\n" + - "\x18LOG_TYPE_CHARGE_RECEIVED\x10\x11\x12\x11\n" + - "\rLOG_TYPE_WISH\x10\x12\x12\x1e\n" + - "\x1aLOG_TYPE_FRIEND_BECOME_NPC\x10\x13\x12\x1c\n" + - "\x18LOG_TYPE_PLAYROOM_UPVOTE\x10\x14\x12\x1f\n" + - "\x1bLOG_TYPE_PLAYROOM_CHAMPSHIP\x10\x15\x12\x15\n" + - "\x11LOG_TYPE_TREASURE\x10\x16\x12\x1d\n" + - "\x19LOG_TYPE_CARD_SEND_ACCEPT\x10\x17\x12\x1d\n" + - "\x19LOG_TYPE_PLAYROOM_CAT_WIN\x10\x18\x12\x1e\n" + - "\x1aLOG_TYPE_PLAYROOM_CAT_LOSE\x10\x19\x12\x1d\n" + - "\x19LOG_TYPE_CARD_GIVE_ACCEPT\x10\x1a\x12\x1a\n" + - "\x16LOG_TYPE_FRIEND_INVITE\x10\x1b\x12\x1a\n" + - "\x16LOG_TYPE_TREASURE_HELP\x10\x1c\x12\x1b\n" + - "\x17LOG_TYPE_FRIEND_SPONSOR\x10\x1d\x12\x1f\n" + - "\x1bLOG_TYPE_FRIEND_SPONSOR_GET\x10\x1e*\x9b\x01\n" + + "\x16LOG_TYPE_FRIEND_DELETE\x10\x0e\x12\x1b\n" + + "\x17LOG_TYPE_PLAYROOM_VISIT\x10\x0f\x12\x15\n" + + "\x11LOG_TYPE_HANDBOOK\x10\x10\x12\x1c\n" + + "\x18LOG_TYPE_HANDBOOK_UPVOTE\x10\x11\x12\x18\n" + + "\x14LOG_TYPE_CHARGE_SEND\x10\x12\x12\x1b\n" + + "\x17LOG_TYPE_CHARGE_RECEIVE\x10\x13\x12\x11\n" + + "\rLOG_TYPE_WISH\x10\x14\x12\x1e\n" + + "\x1aLOG_TYPE_FRIEND_BECOME_NPC\x10\x15\x12\x1c\n" + + "\x18LOG_TYPE_PLAYROOM_UPVOTE\x10\x16\x12\x1f\n" + + "\x1bLOG_TYPE_PLAYROOM_CHAMPSHIP\x10\x17\x12\x15\n" + + "\x11LOG_TYPE_TREASURE\x10\x18\x12\x1d\n" + + "\x19LOG_TYPE_CARD_SEND_ACCEPT\x10\x19\x12\x1d\n" + + "\x19LOG_TYPE_PLAYROOM_CAT_WIN\x10\x1a\x12\x1e\n" + + "\x1aLOG_TYPE_PLAYROOM_CAT_LOSE\x10\x1b\x12\x1d\n" + + "\x19LOG_TYPE_CARD_GIVE_ACCEPT\x10\x1c\x12\x1a\n" + + "\x16LOG_TYPE_FRIEND_INVITE\x10\x1d\x12\x1a\n" + + "\x16LOG_TYPE_TREASURE_HELP\x10\x1e\x12\x1b\n" + + "\x17LOG_TYPE_FRIEND_SPONSOR\x10\x1f\x12\x1f\n" + + "\x1bLOG_TYPE_FRIEND_SPONSOR_GET\x10 *\x9b\x01\n" + "\rCHESS_EX_TYPE\x12\x11\n" + "\rCHESS_EX_NONE\x10\x00\x12\x13\n" + "\x0fCHESS_EX_BUBBLE\x10\x01\x12\x10\n" + From d3fde0949a936f342d717ea40e856e0d035472b3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:18:53 +0800 Subject: [PATCH 08/27] 1 --- src/server/game/message_mgr.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 239355a5..41b9d45d 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -74,8 +74,9 @@ func (m *MessageMgr) MessageMgrInit() { m.Use(LoggingMiddleware()) m.Use(TimeoutMiddleware(5 * time.Second)) if conf.Server.ServerType == "center" { - m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLogin)) - m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(SendToPlayer)) + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLoginHandler)) + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) } else { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) } @@ -90,7 +91,7 @@ func getData() *MessageData { return G_GameLogicPtr.MessageMgr.data.(*MessageData) } -func PlayerLogin(data *msg.Msg) (interface{}, error) { +func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { // 关闭 Worker Pool messageMgrData := getData() messageMgrData.mu.Lock() @@ -105,7 +106,26 @@ func PlayerLogin(data *msg.Msg) (interface{}, error) { return nil, nil } -func SendToPlayer(data *msg.Msg) (interface{}, error) { +func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { + messageMgrData := getData() + Message, ok := messageMgrData.MessageList[int64(data.From)] + if !ok { + return nil, nil + } + Message.mu.Lock() + defer Message.mu.Unlock() + for i, msgItem := range Message.Messages { + if msgItem.Id == data.Id { + // 删除消息 + Message.Messages = append(Message.Messages[:i], Message.Messages[i+1:]...) + log.Debug("[Middleware] Comsume message success type: %d, player id: %v", msgItem.Type, msgItem.From) + break + } + } + return nil, nil +} + +func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) { PlayerId := int64(data.To) messageMgrData := getData() // 遍历消息列表,发送消息给在线玩家 @@ -432,14 +452,12 @@ func SendMsgToNode(m *msg.Msg, node int) error { func SendPlayerMsg(m *msg.Msg) error { clone := m.Clone() - clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) } func CallPlayerMsg(m *msg.Msg) (interface{}, error) { clone := m.Clone() - clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) } From d16e2b3e256b636838e8fe500d3876636f7b6a72 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Dec 2025 16:06:08 +0800 Subject: [PATCH 09/27] 1 --- src/server/cluster/cluster_func.go | 4 ++-- src/server/game/game_type.go | 2 ++ src/server/game/message_mgr.go | 27 +++++++++++++++++++++++++-- src/server/game/mod/msg/Msg.go | 10 ++++++---- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index d252d431..eca8db02 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -27,14 +27,14 @@ func HandShake(a *Agent) { log.Debug("HandShake GobMarshal err %v", err) return } - // log.Debug("握手 server id :%d", conf.Server.ServerID) + log.Debug("握手 server id :%d", conf.Server.ServerID) a.WriteMsg(data) } // 握手回调 func HandShakeRecv(a *Agent, m *msg.Msg) error { ServerId := m.From - // log.Debug("收到握手回复 ServerId %v", ServerId) + log.Debug("收到握手回复 ServerId %v", ServerId) a.ServerId = ServerId serverAgent.Store(ServerId, a) diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 47e1f73a..fcbae002 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -5,6 +5,7 @@ import ( "server/game/mod/friend" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/msg" + "sync" ) type PlayerSimpleData struct { @@ -49,6 +50,7 @@ type VarUserData struct { Upvote int Chip int Kiss int + mu sync.Mutex } type VarExpireData struct { diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 41b9d45d..0abca11b 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -75,6 +75,7 @@ func (m *MessageMgr) MessageMgrInit() { m.Use(TimeoutMiddleware(5 * time.Second)) if conf.Server.ServerType == "center" { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLoginHandler)) + m.RegisterHandler(msg.HANDLE_MDO_PLAYER_LOGOUT, MessageHandlerFunc(PlayerLogoutHandler)) m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) } else { @@ -102,13 +103,35 @@ func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { Messages: []*msg.Msg{}, } } - messageMgrData.PlayerList[int64(data.From)] = data.Extra.(int) + log.Debug("[Middleware] Player login success player id: %v, node: %v", data.From, data.Extra.(int)) + node := data.Extra.(int) + messageMgrData.PlayerList[int64(data.From)] = node + + // 发送离线消息 + messages := messageMgrData.MessageList[int64(data.From)] + messages.mu.Lock() + defer messages.mu.Unlock() + for _, message := range messages.Messages { + err := SendMsgToNode(message, node) + if err != nil { + log.Error("Failed to send message to player %d: %v", data.From, err) + } + } + return nil, nil +} + +func PlayerLogoutHandler(data *msg.Msg) (interface{}, error) { + messageMgrData := getData() + messageMgrData.mu.Lock() + defer messageMgrData.mu.Unlock() + delete(messageMgrData.PlayerList, int64(data.From)) + log.Debug("[Middleware] Player logout success player id: %v", data.From) return nil, nil } func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { messageMgrData := getData() - Message, ok := messageMgrData.MessageList[int64(data.From)] + Message, ok := messageMgrData.MessageList[int64(data.To)] if !ok { return nil, nil } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 2438d245..0e77e043 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -20,10 +20,12 @@ var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} const ( - HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 - HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 - HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 - HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 + HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 + HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 + HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 ) const ( From 408bd4df5bb4a6b27a6584dd5920974fa746c962 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Dec 2025 16:10:03 +0800 Subject: [PATCH 10/27] 2 --- src/server/cluster/cluster_func.go | 29 ++-- src/server/game/GameLogic.go | 28 ---- src/server/game/activity_func.go | 11 -- src/server/game/friend_mgr.go | 62 -------- src/server/game/game_type.go | 13 +- src/server/game/message_handler.go | 47 ++----- src/server/game/message_mgr.go | 168 +++++++++++++++------- src/server/game/mod/msg/Msg.go | 27 +++- src/server/game/player_data.go | 12 +- src/server/game/register_network_func.go | 35 ++--- src/server/game/var.go | 73 ++++++++++ src/server/game/var_mgr.go | 172 +++++++++++++++-------- src/server/game_util/GoUtil.go | 4 + 13 files changed, 397 insertions(+), 284 deletions(-) create mode 100644 src/server/game/var.go diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index eca8db02..5a157b40 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -50,8 +50,9 @@ func HandShakeRecv(a *Agent, m *msg.Msg) error { }) } else { syncMsg := &msg.Msg{ - Type: msg.CLUSTER_FRIEND_SYNC, - To: ServerId, + Type: msg.CLUSTER_FRIEND_SYNC, + To: ServerId, + HandleType: msg.HANDLE_MOD_CLUSTER_SYNC, } sendGameMsg(syncMsg) } @@ -96,7 +97,7 @@ func connectRemote(RemoteAddr string, ConnType int, ConnLabel string) error { client.NewAgent = newAgent client.ConnType = ConnType client.ConnLabel = ConnLabel - client.ConnectInterval = time.Duration(time.Minute * 5) + client.ConnectInterval = time.Duration(time.Minute * 1) if ConnType == ClusterCenterId { // 中心服断开重连 client.AutoReconnect = true } @@ -126,23 +127,21 @@ func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) { if m.UniKey == "" { m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m)) } + v, ok := serverAgent.Load(serverId) + // 之后再发送消息 + if !ok { + return nil, fmt.Errorf("server %d not online", serverId) + } // 先注册回调通道,避免发送出去后对方快速返回导致丢失 newChan := make(chan *msg.Msg, 1) registerChanel(m.UniKey, newChan) defer unregisterChanel(m.UniKey) - - // 之后再发送消息 - if v, ok := serverAgent.Load(serverId); ok { - data, err := GoUtil.GobMarshal(m) - if err != nil { - log.Debug("CallServerMsg GobMarshal err %v", err) - return nil, err - } - v.(network.Agent).WriteMsg(data) - } else { - return nil, fmt.Errorf("server %d not online", serverId) + data, err := GoUtil.GobMarshal(m) + if err != nil { + log.Debug("CallServerMsg GobMarshal err %v", err) + return nil, err } - + v.(network.Agent).WriteMsg(data) // 等待返回(直接接收一次) timeout := time.After(15 * time.Second) select { diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 7b650c7a..c9ced423 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -286,33 +286,6 @@ func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) { }) } -func (ad *GameLogic) SetDataSync(Uid int, Op int, Data interface{}) error { - _, err := ad.VarMgr.Call(&MsgMod.Msg{ - From: Uid, - To: Uid, - Type: MsgMod.HANDLE_TYPE_VAR_EXPIRE_SET, - SendT: GoUtil.Now(), - Extra: VarOpration{Type: Op, Data: Data}, - }) - return err -} - -func (ad *GameLogic) SetCatnipPartner(Uid int, GameId int, PartnerUid int, EndT int64) error { - _, err := ad.VarMgr.Call(&MsgMod.Msg{ - From: Uid, - To: Uid, - Type: MsgMod.HANDLE_TYPE_SET_CATNIP_PARTNER, - SendT: GoUtil.Now(), - End: EndT, - Extra: map[string]interface{}{ - "uid": Uid, - "game_id": GameId, - "partner_uid": PartnerUid, - }, - }) - return err -} - func (ad *GameLogic) GetUserData(Uid int) *VarUserData { result, err := ad.FriendMgr.Call(&MsgMod.Msg{ From: Uid, @@ -665,7 +638,6 @@ func (ad *GameLogic) ReplaceExistPlayerAndAgent(a gate.Agent, player *Player) er if ok { Timer.Stop() } - player.SyncFriendMsg() log.Debug("player %d 重连", player.M_DwUin) return nil } diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index a840a5cc..18a9d579 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -417,14 +417,3 @@ func (p *Player) CatnipBackData() { } p.PushClientRes(res) } - -// 设置猫草大作战游戏锁 -func (p *Player) SetCatnipGameLock(Uid int, GameId int) error { - ActivityInfo := p.GetActivityInfoById(activity.ACT_TYPE_CATNIP) - return G_GameLogicPtr.SetDataSync(int(p.M_DwUin), VAR_OP_CATNIP_LOCK, CatnipLock{ - Uid: int(p.M_DwUin), - Partner: Uid, - GameId: GameId, - End: int(ActivityInfo.EndT), // 锁 - }) -} diff --git a/src/server/game/friend_mgr.go b/src/server/game/friend_mgr.go index e44e1083..feced6e3 100644 --- a/src/server/game/friend_mgr.go +++ b/src/server/game/friend_mgr.go @@ -45,7 +45,6 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_APPLY, f.sendToPlayer) f.RegisterHandler(msg.HADNLE_TYPE_AGREE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_DEL, f.sendToPlayer) - f.RegisterHandler(msg.HANDLE_TYPE_SYNC, f.sync) f.RegisterHandler(msg.HANDLE_TYPE_REFUSE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_INVITE_ADD_FRIEND, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_INVITE_FRIEND, f.sendToPlayer) @@ -90,8 +89,6 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_GET, f.GetVarUserData) f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_SET, f.SetVarUserData) - f.RegisterHandler(msg.HANDLE_TYPE_VAR_EXPIRE_SET, f.SetExpireVarData) - f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_LOGIN, f.SendMsgToCenter) f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, f.SendMsgToCenter) } @@ -175,34 +172,6 @@ func (f *FriendMgr) SetVarUserData(m *msg.Msg) (interface{}, error) { }, nil } -func (f *FriendMgr) SetExpireVarData(m *msg.Msg) (interface{}, error) { - VarOp := m.Extra.(VarOpration) - switch VarOp.Type { - case VAR_OP_CATNIP_LOCK: - data := VarOp.Data.(CatnipLock) - MyKey := GoUtil.GetCatnipLockKey(data.Uid, data.GameId) - OtherKey := GoUtil.GetCatnipLockKey(data.Partner, data.GameId) - ExpireData := G_GameLogicPtr.VarMgr.GetExpireVar(OtherKey) - if _, ok := ExpireData.D.(*CatnipLock); ok { - return nil, fmt.Errorf("catnip lock already exists for %d in game %d", data.Uid, data.GameId) - } - G_GameLogicPtr.VarMgr.SetExpireVar(MyKey, &VarExpireData{ - T: int64(data.End + 24*3600), // 设置过期时间 - D: &data, - }) - G_GameLogicPtr.VarMgr.SetExpireVar(OtherKey, &VarExpireData{ - T: int64(data.End + 24*3600), // 设置过期时间 - D: &CatnipLock{ - Uid: data.Partner, - Partner: data.Uid, - GameId: data.GameId, - End: data.End, - }, - }) - } - return nil, nil -} - // 发送消息给玩家 func sendToPlayer(m *msg.Msg) error { p := G_GameLogicPtr.GetPlayer(int64(m.To)) @@ -222,24 +191,6 @@ func sendToPlayerOnline(m *msg.Msg) error { return nil } -func FriendMgrSend(m1 *msg.Msg) error { - if m1.SendT == 0 { - m1.SendT = GoUtil.Now() - } - m := m1.Clone() - ToServer := GoUtil.GetServerIdByUid(m.To) - if ToServer != conf.Server.ServerID { - err := mergeCluster.SendServerMsg(m, ToServer) - if err != nil { // 区服不在线 - G_GameLogicPtr.FriendMgrSend(m) - return err - } - return nil - } - G_GameLogicPtr.FriendMgrSend(m) - return nil -} - // 集群好友消息同步 func ClusterFriendSync(m *msg.Msg) error { if v, ok := G_GameLogicPtr.FriendMgr.getData().ClusterMsg[m.To]; ok { @@ -264,16 +215,3 @@ func (f *FriendMgr) SendMsgToCenter(m *msg.Msg) (interface{}, error) { func (f *FriendMgr) CallMsgToCenter(m *msg.Msg) (interface{}, error) { return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) } - -func FriendMgrCall(m *msg.Msg) interface{} { - ToServer := GoUtil.GetServerIdByUid(m.To) - if ToServer != conf.Server.ServerID { - r, err := mergeCluster.CallServerMsg(m, ToServer) - if err != nil { // 区服不在线 - log.Debug("FriendMgrCall err %v", err) - return nil - } - return r - } - return G_GameLogicPtr.FriendMgrCall(m.Clone()) -} diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index fcbae002..69b10613 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -54,8 +54,17 @@ type VarUserData struct { } type VarExpireData struct { - D interface{} - T int64 + D interface{} + T int64 // 过期时间戳 + U int64 // 最后更新时间 + mu sync.Mutex +} + +type CatnipPartner struct { + Uid int + Partner int + GameId int + EndTime int64 } const ( diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 74272463..0aa35ac0 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -509,38 +509,6 @@ func (p *Player) handle(m *msg.Msg) error { return nil } -// 同步好友请求 -func (p *Player) SyncFriendMsg() { - MsgList := G_GameLogicPtr.FriendMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_SYNC, From: int(p.M_DwUin)}) - FriendMod := p.PlayMod.getFriendMod() - MsgId := FriendMod.GetSyncId() - if MsgList == nil { - return - } - ml := MsgList.([]*msg.Msg) - if len(ml) == 0 { - return - } - sort.Slice(ml, func(i, j int) bool { - return ml[i].Id < ml[j].Id - }) - maxId := int64(0) - for _, v := range ml { - maxId = max(maxId, v.Id) - if v.H == 1 { - continue - } - if v.Id > 0 && v.Id <= MsgId { - continue - } - log.Debug("uid : %d, handle friend msg : %v", p.M_DwUin, v) - p.handle(v) - v.H = 1 - } - FriendMod.SetSyncId(maxId) - p.PlayMod.save() -} - func SyncMailMsg(p *Player) { ServerMailList := G_GameLogicPtr.MailMgr.Sync(int(p.M_DwUin), p.GetPlayerBaseMod().GetRegisterTime()) MailMod := p.PlayMod.getMailMod() @@ -1302,3 +1270,18 @@ func (player *Player) IsWeeklyDiscount() bool { LimitEventMod := player.PlayMod.getLimitedTimeEventMod() return ChargeMod.IsWeeklyDiscountDay() || LimitEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE) } + +func (p *Player) SetCatnipPartner(GameId, Partner int, EndTime int64) error { + _, err := SendMsgToCenterSync(&msg.Msg{ + From: int(p.M_DwUin), + To: int(p.M_DwUin), + Type: msg.HANDLE_MOD_CATNIP_PARTNER, + Extra: CatnipPartner{ + GameId: GameId, + Partner: Partner, + EndTime: EndTime, + Uid: int(p.M_DwUin), + }, + }) + return err +} diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 0abca11b..368737a0 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -78,8 +78,10 @@ func (m *MessageMgr) MessageMgrInit() { m.RegisterHandler(msg.HANDLE_MDO_PLAYER_LOGOUT, MessageHandlerFunc(PlayerLogoutHandler)) m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_VAR_SET, MessageHandlerFunc(SetVarDataHandler)) } else { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler)) } } @@ -88,13 +90,48 @@ func (s *MessageMgr) RegisterHandler(HandlerType int, fun MessageHandlerFunc) { s.handler[HandlerType] = fun } -func getData() *MessageData { +func getMessageData() *MessageData { return G_GameLogicPtr.MessageMgr.data.(*MessageData) } +// ----------------------------------- 处理函数实现 --------------------------- +func CatnipPartnerHandler(data *msg.Msg) (interface{}, error) { + m, ok := data.Extra.(*CatnipPartner) + if !ok { + return nil, fmt.Errorf("invalid catnip partner data") + } + return G_GameLogicPtr.VarMgr.HandleCatnipPartner(m.Uid, m.Partner, m.GameId, m.EndTime) + +} + +// 节点连接时,同步消息 +func ClusterSyncHandler(data *msg.Msg) (interface{}, error) { + // 遍历所有玩家,发送登录消息 + G_GameLogicPtr.M_Players.Range(func(k, v interface{}) bool { + SendMsgToCenterAsync(&msg.Msg{ + From: int(v.(*Player).M_DwUin), + HandleType: msg.HANDLE_MOD_PLAYER_LOGIN, + Extra: conf.Server.ServerID, + }) + return true + }) + // 发送暂存区消息 + messageMgrData := getMessageData() + messageMgrData.mu.Lock() + defer messageMgrData.mu.Unlock() + TempMessageList := messageMgrData.MessageList + messageMgrData.MessageList = make(map[int64]*MessageList) + for PlayerId, Message := range TempMessageList { + for _, msgItem := range Message.Messages { + go SendMsgToNodeAsync(msgItem, messageMgrData.PlayerList[PlayerId]) + } + } + return nil, nil +} + func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { // 关闭 Worker Pool - messageMgrData := getData() + messageMgrData := getMessageData() messageMgrData.mu.Lock() defer messageMgrData.mu.Unlock() messageMgrData.PlayerList[int64(data.From)] = data.Extra.(int) @@ -112,16 +149,13 @@ func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { messages.mu.Lock() defer messages.mu.Unlock() for _, message := range messages.Messages { - err := SendMsgToNode(message, node) - if err != nil { - log.Error("Failed to send message to player %d: %v", data.From, err) - } + go sendMessageAsync(message, node) } return nil, nil } func PlayerLogoutHandler(data *msg.Msg) (interface{}, error) { - messageMgrData := getData() + messageMgrData := getMessageData() messageMgrData.mu.Lock() defer messageMgrData.mu.Unlock() delete(messageMgrData.PlayerList, int64(data.From)) @@ -130,8 +164,8 @@ func PlayerLogoutHandler(data *msg.Msg) (interface{}, error) { } func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { - messageMgrData := getData() - Message, ok := messageMgrData.MessageList[int64(data.To)] + messageMgrData := getMessageData() + Message, ok := messageMgrData.MessageList[int64(data.From)] if !ok { return nil, nil } @@ -150,7 +184,7 @@ func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) { PlayerId := int64(data.To) - messageMgrData := getData() + messageMgrData := getMessageData() // 遍历消息列表,发送消息给在线玩家 messages, ok := messageMgrData.MessageList[int64(PlayerId)] if !ok { @@ -166,10 +200,7 @@ func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) { messages.Messages = append(messages.Messages, data) if node, ok := messageMgrData.PlayerList[int64(PlayerId)]; ok { for _, message := range messages.Messages { - err := SendMsgToNode(message, node) - if err != nil { - log.Error("Failed to send message to player %d: %v", PlayerId, err) - } + go SendMsgToNodeAsync(message, node) } } return nil, nil @@ -179,9 +210,6 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) { p := G_GameLogicPtr.GetPlayer(int64(data.To)) // 不在线 不处理 if p == nil || p.stop { - // TODO: 模拟消费 - data.HandleType = msg.HANDLE_MOD_COMSUME_MSG - go SendMsgToCenter(data) return nil, nil } p.lock.Lock() @@ -189,7 +217,7 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) { p.Send(data.Clone()) // 处理完后发送消费消息 data.HandleType = msg.HANDLE_MOD_COMSUME_MSG - go SendMsgToCenter(data) + go SendMsgToCenterAsync(data) return nil, nil } @@ -221,19 +249,6 @@ func (m *MessageMgr) Handle(msg *msg.Msg) (interface{}, error) { return nil, fmt.Errorf("server mod handler err") } -func SendMessage(m1 *msg.Msg) error { - if m1.SendT == 0 { - m1.SendT = GoUtil.Now() - } - m := m1.Clone() - err := SendMsgToCenter(m) - if err != nil { // 区服不在线 - G_GameLogicPtr.FriendMgrSend(m) - return err - } - return nil -} - // 异步处理消息 (多线程版本) func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { if fun, ok := m.handler[message.HandleType]; ok { @@ -270,19 +285,6 @@ func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { // 兼容旧版本的函数 func MessageHandle(m *msg.Msg) error { log.Debug("RecvMessage m %v", m) - SendMsgToCenter(&msg.Msg{ - From: 10000, - Extra: conf.Server.ServerID, - HandleType: msg.HANDLE_MOD_PLAYER_LOGIN, - }) - time.Sleep(time.Second) - SendMsgToCenter(&msg.Msg{ - From: 10000, - To: 10000, - Type: msg.HANDLE_TYPE_LOGIN, - Extra: conf.Server.ServerID, - HandleType: msg.HANDLE_MOD_PLAYER_MSG, - }) // 这里可以调用 MessageMgr 的处理方法 G_GameLogicPtr.MessageMgr.MessageHandleAsync(m) return nil @@ -461,26 +463,84 @@ func ValidationMiddleware() MessageMiddleware { } } -func SendMsgToCenter(m *msg.Msg) error { - return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) +// ----------------------------------- 发送消息相关函数 --------------------------- +func SendMsgToCenterAsync(m *msg.Msg) { + go sendMessageAsync(m, conf.Server.CenterNode) } -func CallMsgToCenter(m *msg.Msg) (interface{}, error) { - return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) +func SendMsgToCenterSync(m *msg.Msg) (*msg.Msg, error) { + return sendMessageSync(m, conf.Server.CenterNode) } -func SendMsgToNode(m *msg.Msg, node int) error { - return mergeCluster.SendServerMsg(m, node) +func SendMsgToNodeAsync(m *msg.Msg, node int) { + go sendMessageAsync(m, node) } -func SendPlayerMsg(m *msg.Msg) error { +func SendMsgToNodeSync(m *msg.Msg, node int) (*msg.Msg, error) { + return sendMessageSync(m, node) +} + +func SendPlayerMsgAsync(m *msg.Msg) error { + if m.SendT == 0 { + m.SendT = GoUtil.Now() + } clone := m.Clone() clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG - return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) + SendMsgToCenterAsync(clone) + return nil } -func CallPlayerMsg(m *msg.Msg) (interface{}, error) { +func SendPlayerMsgSync(m *msg.Msg) (interface{}, error) { clone := m.Clone() clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG - return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) + return SendMsgToCenterSync(clone) +} + +func FriendMgrSend(m1 *msg.Msg) error { + SendPlayerMsgAsync(m1) + return nil +} + +// 异步发送消息到指定节点 节点不在线则保存消息 +func sendMessageAsync(m *msg.Msg, node int) error { + err := mergeCluster.SendServerMsg(m, node) + if err != nil { + saveMessage(m) + return err + } + return nil +} + +// 同步消息到指定节点 节点不在线则保存消息 +func sendMessageSync(m *msg.Msg, node int) (*msg.Msg, error) { + msg, err := mergeCluster.CallServerMsg(m, node) + if err != nil { + saveMessage(m) + return nil, err + } + return msg, nil +} + +// 保存消息到本地 +func saveMessage(m *msg.Msg) error { + data := getMessageData() + data.mu.Lock() + defer data.mu.Unlock() + if _, ok := data.MessageList[int64(m.To)]; !ok { + data.MessageList[int64(m.To)] = &MessageList{ + Messages: []*msg.Msg{}, + } + } + data.MessageList[int64(m.To)].mu.Lock() + defer data.MessageList[int64(m.To)].mu.Unlock() + data.MessageList[int64(m.To)].Messages = append(data.MessageList[int64(m.To)].Messages, m) + return nil +} + +func GetUserData(PlayerId int64, Key string) (*msg.Msg, error) { + return SendMsgToCenterSync(&msg.Msg{ + From: int(PlayerId), + HandleType: msg.HANDLE_MOD_VAR_GET, + Extra: Key, + }) } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 0e77e043..533172d4 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -16,16 +16,31 @@ type Msg struct { HandleType int //处理类型 } +type VarData struct { + Key string + Value interface{} + SetType int // 操作类型 0 设置 1 增加 2 减少 3 覆盖 +} + +const ( + VAR_OP_ADD = 1 + VAR_OP_SUB = 2 + VAR_OP_SET = 3 +) + var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} const ( - HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 - HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 - HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 - HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 - HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 - HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 + HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 + HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 + HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 + HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 + HANDLE_MOD_VAR_GET = 20007 // 获取变量 + HANDLE_MOD_VAR_SET = 20008 // 设置变量 + HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 ) const ( diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 2baf0277..6901c65f 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "math" + "server/conf" activityCfg "server/conf/activity" cardCfg "server/conf/card" chargeCfg "server/conf/charge" @@ -253,7 +254,6 @@ func (p *Player) InitPlayer(UserName string) error { p.NoonUpdate(nil) p.Login() p.OrderShip() - p.SyncFriendMsg() p.UpdateUserInfo() // fix bug ChargeMod := p.PlayMod.getChargeMod() @@ -452,11 +452,16 @@ func (p *Player) ClearData() { log.Debug("ClearData BeginTx failed:", err) return } + Uid := int(p.M_DwUin) p.PlayerBaseMod.ClearData() p.PlayMod.ClearData(p) tx.Commit() p.Stop() G_GameLogicPtr.DelPlayer(p) + SendMsgToCenterAsync(&MsgMod.Msg{ + From: Uid, + HandleType: MsgMod.HANDLE_MDO_PLAYER_LOGOUT, + }) } func (p *Player) AutoSaveData() { @@ -864,6 +869,11 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { // 登录返回数据 func (p *Player) LoginBackData() { + SendMsgToCenterAsync(&MsgMod.Msg{ + From: int(p.M_DwUin), + HandleType: MsgMod.HANDLE_MOD_PLAYER_LOGIN, + Extra: conf.Server.ServerID, + }) p.PushClientRes(p.PlayMod.mod_list.Base.BackData()) p.PushClientRes(p.PlayMod.mod_list.Handbook.BackData()) p.PushClientRes(p.PlayMod.mod_list.Base.BackData()) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 30b48549..adf30f16 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -60,6 +60,7 @@ func ReqPlayerBaseInfofunction(player *Player, buf []byte) error { } func ReqPlayerBriefProfileDataFunc(player *Player, buf []byte) error { + return nil detail := &msg.ReqPlayerBriefProfileData{} err := proto.Unmarshal(buf, detail) if err != nil { @@ -1785,15 +1786,14 @@ func ReqLimitSenceReward(player *Player, buf []byte) error { } func ReqGetGoldCard(player *Player, buf []byte) error { - data := G_GameLogicPtr.VarMgr.GetVar(VAR_GOLD_CARD) - if data == nil { + gold := player.GetGoldCard() + if gold == nil { player.SendErrClienRes(&msg.ResGetGoldCard{ Four: 0, Five: 0, }) return fmt.Errorf("not exist") } - gold := data.(*VarGoldCard) player.PushClientRes(&msg.ResGetGoldCard{ Four: int32(gold.Four), Five: int32(gold.Five), @@ -1870,13 +1870,13 @@ func ReqApplyFriend(player *Player, buf []byte) error { }) return fmt.Errorf("already friend") } - if FriendMod.AddSendApply(Uid) { - player.SendErrClienRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Msg: "already apply", - }) - return fmt.Errorf("already apply") - } + // if FriendMod.AddSendApply(Uid) { + // player.SendErrClienRes(&msg.ResApplyFriend{ + // Code: msg.RES_CODE_FAIL, + // Msg: "already apply", + // }) + // return fmt.Errorf("already apply") + // } if req.Type == 1 { Items, err := FriendMod.GetSponsorReward() if err != nil { @@ -3943,7 +3943,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) { player.GetPetThiefReward(Target) } - G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) + player.AddPlayroomChip(int(req.Id)) player.TeLog("finish_mini_game", map[string]interface{}{ "mini_game_type": PlayroomMod.GetGameId(), "is_chip": true, @@ -4083,8 +4083,9 @@ func ReqPlayroomChip(player *Player, buf []byte) error { player.TeLog("remove_chip", map[string]interface{}{ "remove_chip_number": ChipNum, }) - - G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_CHIP_SET, len(PlayroomMod.ChipList)) + for range ChipNum { + player.SubPlayroomChip(int(player.M_DwUin)) + } player.PlayMod.save() player.PlayroomBackData() player.PushClientRes(&msg.ResPlayroomChip{ @@ -4258,8 +4259,8 @@ func ReqPlayroomUpvote(player *Player, buf []byte) error { Type: MsqMod.HANDLE_TYPE_PLAYROOM_KISS, SendT: GoUtil.Now(), }) - G_GameLogicPtr.SetUserData(int(req.Id), VAR_OP_UPVOTE, 1) - G_GameLogicPtr.SetUserData(int(req.Id), VAR_OP_KISS, 1) + player.AddPlayroomUpvote(int(req.Id)) + player.SetPlayroomKiss(int(req.Id)) player.TeLog("visit_like", map[string]interface{}{ "user_id": req.Id, }) @@ -5449,7 +5450,7 @@ func ReqCatnipAgree(player *Player, buf []byte) error { }) return err } - err = G_GameLogicPtr.SetCatnipPartner(int(player.M_DwUin), int(req.Id), int(req.Uid), ActivityInfo.EndT) + err = player.SetCatnipPartner(int(req.Id), int(req.Uid), ActivityInfo.EndT) if err != nil { player.SendErrClienRes(&msg.ResCatnipAgree{ Code: msg.RES_CODE_FAIL, @@ -5769,7 +5770,7 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error { case friend.REPLY_TYPE_CATNIP: // 猫草大作战同意邀请 GameId := GoUtil.Int(ReplyInfo.Param) activityInfo := player.GetActivityInfo(player.GetActivityId(activity.ACT_TYPE_CATNIP)) - err := G_GameLogicPtr.SetCatnipPartner(int(player.M_DwUin), GameId, ReplyInfo.Uid, activityInfo.EndT) + err := player.SetCatnipPartner(GameId, ReplyInfo.Uid, activityInfo.EndT) if err == nil { CatnipMod := player.PlayMod.getCatnipMod() ActivityId := player.GetActivityId(activity.ACT_TYPE_MINING) diff --git a/src/server/game/var.go b/src/server/game/var.go new file mode 100644 index 00000000..13445ef2 --- /dev/null +++ b/src/server/game/var.go @@ -0,0 +1,73 @@ +package game + +import ( + "server/game/mod/msg" + GoUtil "server/game_util" + "server/pkg/github.com/name5566/leaf/log" +) + +const ( + VAR_KEY_FRIEND_MSG = "friend_msg" // 好友消息 + VAR_GOLD_CARD = "gold_card" + VAR_PLAYROOM_UPVOTE = "playroom_upvote" + VAR_PLAYROOM_CHIP = "playroom_chip" + VAR_PLAYROOM_KISS = "playroom_kiss" + VAR_USER_DATA = "user_data" +) + +func (p *Player) GetVarData(key string) interface{} { + data, err := GetUserData(p.M_DwUin, key) + if err != nil { + log.Error("GetVarData err : %s", err) + return nil + } + return data.Extra +} + +func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) { + SendMsgToCenterAsync(&msg.Msg{ + From: int(p.M_DwUin), + HandleType: msg.HANDLE_MOD_VAR_SET, + Extra: &msg.VarData{ + Key: key, + Value: value, + SetType: opType, + }, + }) +} + +func (p *Player) SetVarDataAsync(key string, value interface{}) { + p.OpVarDataAsync(key, value, msg.VAR_OP_SET) +} + +func (p *Player) AddVarDataAsync(key string) { + p.OpVarDataAsync(key, nil, msg.VAR_OP_ADD) +} + +func (p *Player) SubVarDataAsync(key string) { + p.OpVarDataAsync(key, nil, msg.VAR_OP_SUB) +} + +func (p *Player) AddPlayroomUpvote(PlayerId int) { + p.AddVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_UPVOTE)) +} + +func (p *Player) AddPlayroomChip(PlayerId int) { + p.AddVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_CHIP)) +} + +func (p *Player) SubPlayroomChip(PlayerId int) { + p.SubVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_CHIP)) +} + +func (p *Player) SetPlayroomKiss(PlayerId int) { + p.SetVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_KISS), 1) +} + +func (p *Player) GetGoldCard() *VarGoldCard { + data := p.GetVarData(VAR_GOLD_CARD) + if data == nil { + return &VarGoldCard{} + } + return data.(*VarGoldCard) +} diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index a228b5fd..5d45337e 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -6,6 +6,8 @@ import ( "server/game/mod/card" "server/game/mod/msg" GoUtil "server/game_util" + "strings" + "sync" "time" ) @@ -14,18 +16,14 @@ type VarMgr struct { } type VarData struct { - Var map[string]interface{} + Var map[string]*VarExpireData VarExpire map[string]*VarExpireData UserVar map[string]*VarUserData ZeroTime int64 + Version int64 + mu sync.Mutex } -const ( - VAR_GOLD_CARD = "gold_card" - VAR_PLAYROOM_UPVOTE = "playroom_upvote" - VAR_USER_DATA = "user_data" -) - const ( VAR_OP_UPVOTE = 1 VAR_OP_CHIP = 2 @@ -38,12 +36,14 @@ func (f *VarMgr) Init() { gob.Register(&VarGoldCard{}) f.key = VAR_MGR_KEY f.data = &VarData{ - Var: map[string]interface{}{}, + Var: map[string]*VarExpireData{}, } // 注册处理函数 f.init() + // 版本更新 重构 + f.version() if f.data.(*VarData).Var == nil { - f.data.(*VarData).Var = make(map[string]interface{}) + f.data.(*VarData).Var = make(map[string]*VarExpireData) } if f.data.(*VarData).UserVar == nil { f.data.(*VarData).UserVar = make(map[string]*VarUserData) @@ -52,23 +52,37 @@ func (f *VarMgr) Init() { f.data.(*VarData).VarExpire = make(map[string]*VarExpireData) } if f.getData().ZeroTime == GoUtil.ZeroTimestamp() { - f.ZeroUpdate(&msg.Msg{}) + f.ZeroUpdate() } - f.RegisterHandler(msg.SERVER_ZERO_UPDATE, f.ZeroUpdate) - f.RegisterHandler(msg.HANDLE_TYPE_SET_CATNIP_PARTNER, f.SetCatnipPartner) f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { - f.Send(&msg.Msg{ - Type: msg.SERVER_ZERO_UPDATE, - }) + f.ZeroUpdate() }) } -func (f *VarMgr) SetGlobalData(m *msg.Msg) (interface{}, error) { - return nil, nil +func (f *VarMgr) version() { + switch v := f.getData().Version; v { + case 0: + // future version update + data := f.getData() + data.mu.Lock() + defer data.mu.Unlock() + // set to next version + for k, v := range data.UserVar { + if v != nil { + uidStr := strings.Split(k, "_")[2] + uid := GoUtil.Int(uidStr) + f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_UPVOTE), v.Upvote) + f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_CHIP), v.Chip) + f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_KISS), v.Kiss) + delete(data.UserVar, k) + } + } + f.getData().Version = 1 + } } -func (f *VarMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { +func (f *VarMgr) ZeroUpdate() { f.getData().ZeroTime = GoUtil.ZeroTimestamp() // 随机生成两个金卡 Card1, Card2 := card.RankGoldCard() @@ -76,53 +90,44 @@ func (f *VarMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { Four: Card1, Five: Card2, }) - for k, v := range f.getData().VarExpire { + for k, v := range f.getData().Var { if v.T < GoUtil.ZeroTimestamp() { - delete(f.getData().VarExpire, k) + delete(f.getData().Var, k) } } + f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { + f.ZeroUpdate() + }) +} + +func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (interface{}, error) { + myKey := fmt.Sprintf("catnip_partner_%d", Uid) + key := fmt.Sprintf("catnip_partner_%d", Partner) + OtherPartnerInfo := f.GetExpireVar(key) + MyPartnerInfo := f.GetExpireVar(myKey) + MyOfPartnerList := GoUtil.IntSlice(MyPartnerInfo.D) + OtherOfPartnerList := GoUtil.IntSlice(OtherPartnerInfo.D) + if len(MyOfPartnerList) > 4 || len(OtherOfPartnerList) > 4 { + return nil, fmt.Errorf("catnip partner already full for uid %d in game %d", Partner, GameId) + } + f.SetVar(key, &VarExpireData{ + D: append(OtherOfPartnerList, Uid), + T: EndTime, + }) + f.SetVar(myKey, &VarExpireData{ + D: append(MyOfPartnerList, Partner), + T: EndTime, + }) return nil, nil } -func (f *VarMgr) SetCatnipPartner(m *msg.Msg) (interface{}, error) { - if Param, ok := m.Extra.(map[string]interface{}); ok { - MyUid := GoUtil.Int(Param["uid"]) - CatnipGameId := GoUtil.Int(Param["game_id"]) - CatnipPartnerId := GoUtil.Int(Param["partner_uid"]) - myKey := fmt.Sprintf("catnip_partner_%d", MyUid) - key := fmt.Sprintf("catnip_partner_%d", CatnipPartnerId) - OtherPartnerInfo := f.GetExpireVar(key) - MyPartnerInfo := f.GetExpireVar(myKey) - MyOfPartnerList := GoUtil.IntSlice(MyPartnerInfo.D) - OtherOfPartnerList := GoUtil.IntSlice(OtherPartnerInfo.D) - if len(MyOfPartnerList) > 4 || len(OtherOfPartnerList) > 4 { - return nil, fmt.Errorf("catnip partner already full for uid %d in game %d", CatnipPartnerId, CatnipGameId) - } - f.SetExpireVar(key, &VarExpireData{ - D: append(OtherOfPartnerList, MyUid), - T: m.End, - }) - f.SetExpireVar(myKey, &VarExpireData{ - D: append(MyOfPartnerList, CatnipPartnerId), - T: m.End, - }) - return nil, nil - } - return nil, fmt.Errorf("invalid parameters for setting catnip partner") -} - func (f *VarMgr) SetVar(key string, value interface{}) { - f.getData().Var[key] = value -} - -func (f *VarMgr) GetVar(key string) interface{} { - return f.getData().Var[key] -} - -func (f *VarMgr) SetExpireVar(key string, value *VarExpireData) { - f.getData().VarExpire[key] = value + f.getData().Var[key] = &VarExpireData{ + D: value, + } } +// TODO: 弃用 func (f *VarMgr) GetExpireVar(key string) *VarExpireData { if v, ok := f.getData().VarExpire[key]; ok { return v @@ -132,10 +137,12 @@ func (f *VarMgr) GetExpireVar(key string) *VarExpireData { return data } +// TODO: 弃用 func (f *VarMgr) SetUserVar(key string, value *VarUserData) { f.getData().UserVar[key] = value } +// TODO: 弃用 func (f *VarMgr) GetUserVar(key string) *VarUserData { if v, ok := f.getData().UserVar[key]; ok { return v @@ -152,3 +159,56 @@ func (f *VarMgr) DelVar(key string) { func (f *VarMgr) getData() *VarData { return f.data.(*VarData) } + +func getVarData() *VarData { + return G_GameLogicPtr.VarMgr.getData() +} + +func SetVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + data.mu.Lock() + defer data.mu.Unlock() + if v, ok := m.Extra.(*msg.VarData); ok { + ved, ok := data.Var[v.Key] + if !ok { + ved = &VarExpireData{} + } + switch v.SetType { + case msg.VAR_OP_SET: + ved.D = v.Value + case msg.VAR_OP_ADD: + if num, ok := ved.D.(int); ok { + ved.D = num + 1 + } else { + ved.D = 1 + } + case msg.VAR_OP_SUB: + if num, ok := ved.D.(int); ok { + if num > 0 { + ved.D = num - 1 + } else { + ved.D = 0 + } + } else { + ved.D = 0 + } + } + ved.U = time.Now().Unix() + if m.End > 0 { + ved.T = m.End + } + data.Var[v.Key] = ved + } + return nil, nil +} + +func GetVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + if v, ok := m.Extra.(*msg.VarData); ok { + if varData, ok := data.Var[v.Key]; ok { + return varData.D, nil + } + return nil, fmt.Errorf("var data not found for key %s", v.Key) + } + return nil, fmt.Errorf("invalid parameters for getting var data") +} diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index b5ca11dd..197f81e1 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -304,6 +304,10 @@ func GetUserKey(Uid int64) string { return fmt.Sprintf("user_data_%d", Uid) } +func GetUserVarKey(Uid int, key string) string { + return fmt.Sprintf("%s_%d", key, Uid) +} + func GetCatnipLockKey(Uid, GameId int) string { return fmt.Sprintf("catnip_lock_%d_%d", Uid, GameId) } From 3b02cd1241bd0623f7becd2cc2eb64796e929f4e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Dec 2025 16:45:11 +0800 Subject: [PATCH 11/27] 2 --- src/server/game/activity_func.go | 34 +++++++++--------- src/server/game/friend_mgr.go | 35 ------------------ src/server/game/var.go | 10 ++++++ src/server/game/var_mgr.go | 61 +++++++++++++------------------- 4 files changed, 51 insertions(+), 89 deletions(-) diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 18a9d579..78937420 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -1,7 +1,6 @@ package game import ( - "fmt" activityCfg "server/conf/activity" catnipCfg "server/conf/catnip" guesscolorCfg "server/conf/guess_color" @@ -360,34 +359,33 @@ func (p *Player) CatnipBackData() { } tmpData := make(map[int]*msg.CatnipInvite) InviteList := make([]*msg.CatnipInvite, 0) - for Uid, Info := range CatnipMod.InviteList { - tmpData[Uid] = &msg.CatnipInvite{ - Uid: int64(Uid), - Time: Info.Time, + for uid, info := range CatnipMod.InviteList { + tmpData[uid] = &msg.CatnipInvite{ + Uid: int64(uid), + Time: info.Time, Type: 1, } } - for Uid, Info := range CatnipMod.BeInvitedList { - tmpData[Uid] = &msg.CatnipInvite{ - Uid: int64(Uid), - Time: Info.Time, + for uid, info := range CatnipMod.BeInvitedList { + tmpData[uid] = &msg.CatnipInvite{ + Uid: int64(uid), + Time: info.Time, Type: 2, } } - for Uid := range FriendMod.NewFriendList { - key := fmt.Sprintf("catnip_partner_%d", Uid) - Var := G_GameLogicPtr.VarMgr.GetExpireVar(key) - if len(GoUtil.IntSlice(Var.D)) >= 4 { - tmpData[Uid] = &msg.CatnipInvite{ - Uid: int64(Uid), + for uid := range FriendMod.NewFriendList { + partnerList := p.GetCatnipPartner(uid) + if len(GoUtil.IntSlice(partnerList)) >= 4 { + tmpData[uid] = &msg.CatnipInvite{ + Uid: int64(uid), Type: 3, } continue } - if _, ok := tmpData[Uid]; !ok { - tmpData[Uid] = &msg.CatnipInvite{ - Uid: int64(Uid), + if _, ok := tmpData[uid]; !ok { + tmpData[uid] = &msg.CatnipInvite{ + Uid: int64(uid), Type: 0, } } diff --git a/src/server/game/friend_mgr.go b/src/server/game/friend_mgr.go index feced6e3..bb2b84d4 100644 --- a/src/server/game/friend_mgr.go +++ b/src/server/game/friend_mgr.go @@ -3,7 +3,6 @@ package game import ( "encoding/gob" "fmt" - "server/MergeConst" mergeCluster "server/cluster" "server/conf" "server/game/mod/card" @@ -86,9 +85,6 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_KISS, f.sendToPlayerOnline) f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayer) - f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_GET, f.GetVarUserData) - f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_SET, f.SetVarUserData) - f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_LOGIN, f.SendMsgToCenter) f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, f.SendMsgToCenter) } @@ -141,37 +137,6 @@ func (f *FriendMgr) sync(m *msg.Msg) (interface{}, error) { return data, nil } -func (f *FriendMgr) GetVarUserData(m *msg.Msg) (interface{}, error) { - Key := GoUtil.GetUserKey(int64(m.To)) - data := G_GameLogicPtr.VarMgr.GetUserVar(Key) - if data == nil { - data = &VarUserData{ - Upvote: 0, - } - } - return data, nil -} - -func (f *FriendMgr) SetVarUserData(m *msg.Msg) (interface{}, error) { - VarOp := m.Extra.(VarOpration) - Key := GoUtil.GetUserKey(int64(m.To)) - data := G_GameLogicPtr.VarMgr.GetUserVar(Key) - switch VarOp.Type { - case VAR_OP_UPVOTE: - data.Upvote++ - case VAR_OP_CHIP: - data.Chip += VarOp.Data.(int) - case VAR_OP_CHIP_SET: - data.Chip = VarOp.Data.(int) - case VAR_OP_KISS: - data.Kiss = VarOp.Data.(int) - } - return &VarOpration{ - Data: data, - Code: MergeConst.SUCCESS, - }, nil -} - // 发送消息给玩家 func sendToPlayer(m *msg.Msg) error { p := G_GameLogicPtr.GetPlayer(int64(m.To)) diff --git a/src/server/game/var.go b/src/server/game/var.go index 13445ef2..a2edefb1 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -13,6 +13,7 @@ const ( VAR_PLAYROOM_CHIP = "playroom_chip" VAR_PLAYROOM_KISS = "playroom_kiss" VAR_USER_DATA = "user_data" + VAR_CATNIP_PARTNER = "catnip_partner" ) func (p *Player) GetVarData(key string) interface{} { @@ -71,3 +72,12 @@ func (p *Player) GetGoldCard() *VarGoldCard { } return data.(*VarGoldCard) } + +func (p *Player) GetCatnipPartner(Uid int) []int { + data, err := GetUserData(p.M_DwUin, VAR_CATNIP_PARTNER) + if err != nil { + log.Error("GetVarData err : %s", err) + return nil + } + return GoUtil.IntSlice(data.Extra) +} diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index 5d45337e..25a6f253 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -16,12 +16,14 @@ type VarMgr struct { } type VarData struct { - Var map[string]*VarExpireData + Var map[string]interface{} VarExpire map[string]*VarExpireData UserVar map[string]*VarUserData - ZeroTime int64 - Version int64 - mu sync.Mutex + + NewVar map[string]*VarExpireData + ZeroTime int64 + Version int64 + mu sync.Mutex } const ( @@ -36,14 +38,14 @@ func (f *VarMgr) Init() { gob.Register(&VarGoldCard{}) f.key = VAR_MGR_KEY f.data = &VarData{ - Var: map[string]*VarExpireData{}, + NewVar: map[string]*VarExpireData{}, } // 注册处理函数 f.init() // 版本更新 重构 f.version() - if f.data.(*VarData).Var == nil { - f.data.(*VarData).Var = make(map[string]*VarExpireData) + if f.data.(*VarData).NewVar == nil { + f.data.(*VarData).NewVar = make(map[string]*VarExpireData) } if f.data.(*VarData).UserVar == nil { f.data.(*VarData).UserVar = make(map[string]*VarUserData) @@ -90,7 +92,7 @@ func (f *VarMgr) ZeroUpdate() { Four: Card1, Five: Card2, }) - for k, v := range f.getData().Var { + for k, v := range f.getData().NewVar { if v.T < GoUtil.ZeroTimestamp() { delete(f.getData().Var, k) } @@ -101,20 +103,23 @@ func (f *VarMgr) ZeroUpdate() { } func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (interface{}, error) { - myKey := fmt.Sprintf("catnip_partner_%d", Uid) - key := fmt.Sprintf("catnip_partner_%d", Partner) - OtherPartnerInfo := f.GetExpireVar(key) - MyPartnerInfo := f.GetExpireVar(myKey) + data := f.getData() + data.mu.Lock() + defer data.mu.Unlock() + MyKey := GoUtil.GetUserVarKey(Uid, VAR_CATNIP_PARTNER) + Partnerkey := GoUtil.GetUserVarKey(Partner, VAR_CATNIP_PARTNER) + OtherPartnerInfo := f.GetVar(MyKey) + MyPartnerInfo := f.GetVar(Partnerkey) MyOfPartnerList := GoUtil.IntSlice(MyPartnerInfo.D) OtherOfPartnerList := GoUtil.IntSlice(OtherPartnerInfo.D) if len(MyOfPartnerList) > 4 || len(OtherOfPartnerList) > 4 { return nil, fmt.Errorf("catnip partner already full for uid %d in game %d", Partner, GameId) } - f.SetVar(key, &VarExpireData{ + f.SetVar(Partnerkey, &VarExpireData{ D: append(OtherOfPartnerList, Uid), T: EndTime, }) - f.SetVar(myKey, &VarExpireData{ + f.SetVar(MyKey, &VarExpireData{ D: append(MyOfPartnerList, Partner), T: EndTime, }) @@ -122,33 +127,17 @@ func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (i } func (f *VarMgr) SetVar(key string, value interface{}) { - f.getData().Var[key] = &VarExpireData{ + f.getData().NewVar[key] = &VarExpireData{ D: value, } } -// TODO: 弃用 -func (f *VarMgr) GetExpireVar(key string) *VarExpireData { - if v, ok := f.getData().VarExpire[key]; ok { +func (f *VarMgr) GetVar(key string) *VarExpireData { + if v, ok := f.getData().NewVar[key]; ok { return v } data := &VarExpireData{} - f.getData().VarExpire[key] = data - return data -} - -// TODO: 弃用 -func (f *VarMgr) SetUserVar(key string, value *VarUserData) { - f.getData().UserVar[key] = value -} - -// TODO: 弃用 -func (f *VarMgr) GetUserVar(key string) *VarUserData { - if v, ok := f.getData().UserVar[key]; ok { - return v - } - data := &VarUserData{} - f.getData().UserVar[key] = data + f.getData().NewVar[key] = data return data } @@ -169,7 +158,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { data.mu.Lock() defer data.mu.Unlock() if v, ok := m.Extra.(*msg.VarData); ok { - ved, ok := data.Var[v.Key] + ved, ok := data.NewVar[v.Key] if !ok { ved = &VarExpireData{} } @@ -205,7 +194,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { func GetVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() if v, ok := m.Extra.(*msg.VarData); ok { - if varData, ok := data.Var[v.Key]; ok { + if varData, ok := data.NewVar[v.Key]; ok { return varData.D, nil } return nil, fmt.Errorf("var data not found for key %s", v.Key) From 728656d23b59959fa689ecd483c4abd75e54836d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Dec 2025 17:28:50 +0800 Subject: [PATCH 12/27] 2 --- src/server/game/message_mgr.go | 6 +- src/server/game/mod/msg/Msg.go | 2 + src/server/game/var.go | 10 +-- src/server/game/var_mgr.go | 113 +++++++++++++++++++++++++++++---- src/server/game_util/GoUtil.go | 8 --- 5 files changed, 111 insertions(+), 28 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 368737a0..1ebdead8 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -79,6 +79,10 @@ func (m *MessageMgr) MessageMgrInit() { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_VAR_SET, MessageHandlerFunc(SetVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_VAR_GET, MessageHandlerFunc(GetVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_SET, MessageHandlerFunc(SetUserVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_GET, MessageHandlerFunc(GetUserVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CATNIP_PARTNER, MessageHandlerFunc(CatnipPartnerHandler)) } else { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler)) @@ -540,7 +544,7 @@ func saveMessage(m *msg.Msg) error { func GetUserData(PlayerId int64, Key string) (*msg.Msg, error) { return SendMsgToCenterSync(&msg.Msg{ From: int(PlayerId), - HandleType: msg.HANDLE_MOD_VAR_GET, + HandleType: msg.HANDLE_MOD_USER_VAR_GET, Extra: Key, }) } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 533172d4..79831422 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -41,6 +41,8 @@ const ( HANDLE_MOD_VAR_GET = 20007 // 获取变量 HANDLE_MOD_VAR_SET = 20008 // 设置变量 HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 + HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量 + HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量 ) const ( diff --git a/src/server/game/var.go b/src/server/game/var.go index a2edefb1..0726e3b7 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -28,7 +28,7 @@ func (p *Player) GetVarData(key string) interface{} { func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) { SendMsgToCenterAsync(&msg.Msg{ From: int(p.M_DwUin), - HandleType: msg.HANDLE_MOD_VAR_SET, + HandleType: msg.HANDLE_MOD_USER_VAR_SET, Extra: &msg.VarData{ Key: key, Value: value, @@ -50,19 +50,19 @@ func (p *Player) SubVarDataAsync(key string) { } func (p *Player) AddPlayroomUpvote(PlayerId int) { - p.AddVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_UPVOTE)) + p.AddVarDataAsync(VAR_PLAYROOM_UPVOTE) } func (p *Player) AddPlayroomChip(PlayerId int) { - p.AddVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_CHIP)) + p.AddVarDataAsync(VAR_PLAYROOM_CHIP) } func (p *Player) SubPlayroomChip(PlayerId int) { - p.SubVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_CHIP)) + p.SubVarDataAsync(VAR_PLAYROOM_CHIP) } func (p *Player) SetPlayroomKiss(PlayerId int) { - p.SetVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_KISS), 1) + p.SetVarDataAsync(VAR_PLAYROOM_KISS, 1) } func (p *Player) GetGoldCard() *VarGoldCard { diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index 25a6f253..82f5eccb 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -20,10 +20,11 @@ type VarData struct { VarExpire map[string]*VarExpireData UserVar map[string]*VarUserData - NewVar map[string]*VarExpireData - ZeroTime int64 - Version int64 - mu sync.Mutex + NewVar map[string]*VarExpireData + NewUseVar map[int]map[string]*VarExpireData + ZeroTime int64 + Version int64 + mu sync.Mutex } const ( @@ -38,7 +39,8 @@ func (f *VarMgr) Init() { gob.Register(&VarGoldCard{}) f.key = VAR_MGR_KEY f.data = &VarData{ - NewVar: map[string]*VarExpireData{}, + NewVar: map[string]*VarExpireData{}, + NewUseVar: map[int]map[string]*VarExpireData{}, } // 注册处理函数 f.init() @@ -74,9 +76,9 @@ func (f *VarMgr) version() { if v != nil { uidStr := strings.Split(k, "_")[2] uid := GoUtil.Int(uidStr) - f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_UPVOTE), v.Upvote) - f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_CHIP), v.Chip) - f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_KISS), v.Kiss) + f.SetUserVar(uid, VAR_PLAYROOM_UPVOTE, v.Upvote) + f.SetUserVar(uid, VAR_PLAYROOM_CHIP, v.Chip) + f.SetUserVar(uid, VAR_PLAYROOM_KISS, v.Kiss) delete(data.UserVar, k) } } @@ -106,26 +108,53 @@ func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (i data := f.getData() data.mu.Lock() defer data.mu.Unlock() - MyKey := GoUtil.GetUserVarKey(Uid, VAR_CATNIP_PARTNER) - Partnerkey := GoUtil.GetUserVarKey(Partner, VAR_CATNIP_PARTNER) - OtherPartnerInfo := f.GetVar(MyKey) - MyPartnerInfo := f.GetVar(Partnerkey) + + OtherPartnerInfo := f.GetUserVar(Uid, VAR_CATNIP_PARTNER) + MyPartnerInfo := f.GetUserVar(Partner, VAR_CATNIP_PARTNER) MyOfPartnerList := GoUtil.IntSlice(MyPartnerInfo.D) OtherOfPartnerList := GoUtil.IntSlice(OtherPartnerInfo.D) if len(MyOfPartnerList) > 4 || len(OtherOfPartnerList) > 4 { return nil, fmt.Errorf("catnip partner already full for uid %d in game %d", Partner, GameId) } - f.SetVar(Partnerkey, &VarExpireData{ + f.SetUserVar(Partner, VAR_CATNIP_PARTNER, &VarExpireData{ D: append(OtherOfPartnerList, Uid), T: EndTime, }) - f.SetVar(MyKey, &VarExpireData{ + f.SetUserVar(Uid, VAR_CATNIP_PARTNER, &VarExpireData{ D: append(MyOfPartnerList, Partner), T: EndTime, }) return nil, nil } +func (f *VarMgr) SetUserVar(uid int, key string, value interface{}) { + varData := f.getData().NewUseVar[uid] + if varData == nil { + varData = make(map[string]*VarExpireData) + f.getData().NewUseVar[uid] = varData + } + ved, ok := varData[key] + if !ok { + ved = &VarExpireData{} + } + ved.D = value + varData[key] = ved +} + +func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData { + varData := f.getData().NewUseVar[uid] + if varData == nil { + varData = make(map[string]*VarExpireData) + f.getData().NewUseVar[uid] = varData + } + ved, ok := varData[key] + if !ok { + ved = &VarExpireData{} + varData[key] = ved + } + return ved +} + func (f *VarMgr) SetVar(key string, value interface{}) { f.getData().NewVar[key] = &VarExpireData{ D: value, @@ -191,6 +220,62 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { return nil, nil } +func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + if v, ok := m.Extra.(*msg.VarData); ok { + if varData, ok := data.NewUseVar[m.From]; ok { + if userVar, ok := varData[v.Key]; ok { + return userVar, nil + } + } + return nil, fmt.Errorf("var data not found for key %s", v.Key) + } + return nil, fmt.Errorf("invalid parameters for getting var data") +} + +func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + data.mu.Lock() + defer data.mu.Unlock() + if v, ok := m.Extra.(*msg.VarData); ok { + varData := data.NewUseVar[m.From] + if varData == nil { + varData = make(map[string]*VarExpireData) + data.NewUseVar[m.From] = varData + } + ved, ok := varData[v.Key] + if !ok { + ved = &VarExpireData{} + } + switch v.SetType { + case msg.VAR_OP_SET: + ved.D = v.Value + case msg.VAR_OP_ADD: + if num, ok := ved.D.(int); ok { + ved.D = num + 1 + } else { + ved.D = 1 + } + case msg.VAR_OP_SUB: + if num, ok := ved.D.(int); ok { + if num > 0 { + ved.D = num - 1 + } else { + ved.D = 0 + } + } else { + ved.D = 0 + } + } + ved.U = time.Now().Unix() + if m.End > 0 { + ved.T = m.End + } + data.Var[v.Key] = ved + } + return nil, nil +} + func GetVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() if v, ok := m.Extra.(*msg.VarData); ok { diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index 197f81e1..a57553fa 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -300,14 +300,6 @@ func UniKey(seed string) string { return fmt.Sprintf("%x", hash.Sum(nil)) } -func GetUserKey(Uid int64) string { - return fmt.Sprintf("user_data_%d", Uid) -} - -func GetUserVarKey(Uid int, key string) string { - return fmt.Sprintf("%s_%d", key, Uid) -} - func GetCatnipLockKey(Uid, GameId int) string { return fmt.Sprintf("catnip_lock_%d_%d", Uid, GameId) } From 574b9f49a11f4712454363b5ce0510b06f3f1e84 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:45:43 +0800 Subject: [PATCH 13/27] 3 --- src/server/cluster/cluster_func.go | 11 ++---- src/server/game/GameLogic.go | 13 ------- src/server/game/message_mgr.go | 31 +++++++++++++-- src/server/game/mod/msg/Msg.go | 23 +++++------ src/server/game/player_back.go | 13 +++---- src/server/game/var.go | 61 +++++++++++++++++++++++++++++- src/server/game/var_mgr.go | 6 +-- 7 files changed, 110 insertions(+), 48 deletions(-) diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index 5a157b40..5108b1eb 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -143,12 +143,13 @@ func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) { } v.(network.Agent).WriteMsg(data) // 等待返回(直接接收一次) - timeout := time.After(15 * time.Second) + timeout := time.After(5 * time.Second) select { case backm := <-newChan: if backm == nil { return nil, fmt.Errorf("server %d not response", serverId) } + log.Debug("CallServerMsg reply %v", backm) return backm, nil case <-timeout: return nil, fmt.Errorf("timeout waiting for server %d response", serverId) @@ -169,13 +170,7 @@ func SendMsgAll(m *msg.Msg) { func processMsg(a *Agent, m *msg.Msg) error { var err error - // 先处理同步回调 - if m.UniKey != "" { - if chanel, ok := CallbackChan[m.UniKey]; ok { - chanel <- m - return nil - } - } + if fun, ok := FuncMap[m.Type]; ok { err = fun(a, m) } else { diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index c9ced423..397bbd13 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -286,19 +286,6 @@ func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) { }) } -func (ad *GameLogic) GetUserData(Uid int) *VarUserData { - result, err := ad.FriendMgr.Call(&MsgMod.Msg{ - From: Uid, - To: Uid, - Type: MsgMod.HANDLE_TYPE_VAR_USER_GET, - SendT: GoUtil.Now(), - }) - if err != nil { - return &VarUserData{} - } - return result.(*VarUserData) -} - func (ad *GameLogic) FriendMgrCall(m *MsgMod.Msg) interface{} { result, err := ad.FriendMgr.Call(m) if err != nil { diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 1ebdead8..0c880d47 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -2,6 +2,7 @@ package game import ( "context" + "encoding/gob" "fmt" "runtime/debug" mergeCluster "server/cluster" @@ -63,6 +64,7 @@ func (m *MessageMgr) MessageMgrInit() { MessageList: make(map[int64]*MessageList), PlayerList: make(map[int64]int), } + gob.Register(msg.VarData{}) // 注册处理函数 m.init() m.handler = make(map[int]MessageHandlerFunc) @@ -85,6 +87,7 @@ func (m *MessageMgr) MessageMgrInit() { m.RegisterHandler(msg.HANDLE_MOD_CATNIP_PARTNER, MessageHandlerFunc(CatnipPartnerHandler)) } else { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_REPLY_PLAYER_MSG, MessageHandlerFunc(PlayerReplyMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler)) } } @@ -220,8 +223,21 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) { defer p.lock.Unlock() p.Send(data.Clone()) // 处理完后发送消费消息 - data.HandleType = msg.HANDLE_MOD_COMSUME_MSG - go SendMsgToCenterAsync(data) + if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG { + data.HandleType = msg.HANDLE_MOD_COMSUME_MSG + go SendMsgToCenterAsync(data) + } + return nil, nil +} + +func PlayerReplyMsgHandler(data *msg.Msg) (interface{}, error) { + // 先处理同步回调 + if data.UniKey != "" { + if chanel, ok := mergeCluster.CallbackChan[data.UniKey]; ok { + log.Debug("reply message ") + chanel <- data + } + } return nil, nil } @@ -518,7 +534,7 @@ func sendMessageAsync(m *msg.Msg, node int) error { // 同步消息到指定节点 节点不在线则保存消息 func sendMessageSync(m *msg.Msg, node int) (*msg.Msg, error) { msg, err := mergeCluster.CallServerMsg(m, node) - if err != nil { + if err != nil && conf.Server.ServerType == "center" { saveMessage(m) return nil, err } @@ -545,6 +561,13 @@ func GetUserData(PlayerId int64, Key string) (*msg.Msg, error) { return SendMsgToCenterSync(&msg.Msg{ From: int(PlayerId), HandleType: msg.HANDLE_MOD_USER_VAR_GET, - Extra: Key, + Extra: msg.VarData{Key: Key}, + }) +} + +func GetServerData(Key string) (*msg.Msg, error) { + return SendMsgToCenterSync(&msg.Msg{ + HandleType: msg.HANDLE_MOD_VAR_GET, + Extra: msg.VarData{Key: Key}, }) } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 79831422..d8dd02cc 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -32,17 +32,18 @@ var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} const ( - HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 - HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 - HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 - HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 - HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 - HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 - HANDLE_MOD_VAR_GET = 20007 // 获取变量 - HANDLE_MOD_VAR_SET = 20008 // 设置变量 - HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 - HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量 - HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量 + HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 + HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 + HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 + HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 + HANDLE_MOD_VAR_GET = 20007 // 获取变量 + HANDLE_MOD_VAR_SET = 20008 // 设置变量 + HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 + HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量 + HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量 + HANDLE_MOD_REPLY_PLAYER_MSG = 20012 // 回复玩家消息 ) const ( diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 839b5b31..906ba679 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -113,7 +113,6 @@ func (p *Player) PlayroomBackData() { ItemId: int32(k), }) } - data := G_GameLogicPtr.GetUserData(int(p.M_DwUin)) r.Dress = Dress r.DressSet = GoUtil.MapIntToInt32(PlayroomMod.GetDressSet()) @@ -156,7 +155,7 @@ func (p *Player) PlayroomBackData() { r.Unlock = PlayroomMod.GetUnlockIds() r.DailyTaskReward = GoUtil.IntToInt32(PlayroomMod.DailyTaskReward) r.DailyTask = PlayroomMod.BackDataTask() - r.Kiss = int32(data.Kiss) + r.Kiss = int32(p.GetPlayroomKiss()) r.Revenge = PlayroomMod.RevengeUid r.InteractNum = int32(PlayroomMod.InteractNum) r.AdItem = AdWatch @@ -195,18 +194,16 @@ func (p *Player) PlayroomVisit(Uid int) { r.Upvote = GoUtil.InArray(Uid, PlayroomMod.UpvoteList) r.Items = Items r.Status = int32(PlayroomMod.GameStatus) - data := G_GameLogicPtr.GetUserData(Uid) - r.UpvoteCount = int32(data.Upvote) - r.Chip = int32(data.Chip) - r.Kiss = int32(data.Kiss) + r.UpvoteCount = int32(p.GetPlayroomUpvote()) + r.Chip = int32(p.GetPlayroomChip()) + r.Kiss = int32(p.GetPlayroomKiss()) r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet) p.PushClientRes(r) } func (p *Player) NotifyPlayroomKiss() { - data := G_GameLogicPtr.GetUserData(int(p.M_DwUin)) m := &proto.NotifyPlayroomKiss{ - Kiss: int32(data.Kiss), + Kiss: int32(p.GetPlayroomKiss()), } p.PushClientRes(m) } diff --git a/src/server/game/var.go b/src/server/game/var.go index 0726e3b7..a747f019 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -25,11 +25,20 @@ func (p *Player) GetVarData(key string) interface{} { return data.Extra } +func GetServerVarData(key string) interface{} { + data, err := GetServerData(key) + if err != nil { + log.Error("GetServerVarData err : %s", err) + return nil + } + return data.Extra +} + func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) { SendMsgToCenterAsync(&msg.Msg{ From: int(p.M_DwUin), HandleType: msg.HANDLE_MOD_USER_VAR_SET, - Extra: &msg.VarData{ + Extra: msg.VarData{ Key: key, Value: value, SetType: opType, @@ -37,6 +46,32 @@ func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) { }) } +func (p *Player) OpVarDataSync(key string, value interface{}, opType int) (*msg.Msg, error) { + return SendMsgToCenterSync(&msg.Msg{ + From: int(p.M_DwUin), + HandleType: msg.HANDLE_MOD_USER_VAR_SET, + Extra: msg.VarData{ + Key: key, + Value: value, + SetType: opType, + }, + }) +} + +func (p *Player) OpServerVarDataAsync(key string, Value interface{}, opType int) { + SendMsgToCenterSync(&msg.Msg{ + HandleType: msg.HANDLE_MOD_VAR_SET, + Extra: msg.VarData{Key: key, Value: Value, SetType: opType}, + }) +} + +func (p *Player) OpServerVarDataSync(key string, Value interface{}, opType int) (*msg.Msg, error) { + return SendMsgToCenterSync(&msg.Msg{ + HandleType: msg.HANDLE_MOD_VAR_SET, + Extra: msg.VarData{Key: key, Value: Value, SetType: opType}, + }) +} + func (p *Player) SetVarDataAsync(key string, value interface{}) { p.OpVarDataAsync(key, value, msg.VAR_OP_SET) } @@ -61,10 +96,34 @@ func (p *Player) SubPlayroomChip(PlayerId int) { p.SubVarDataAsync(VAR_PLAYROOM_CHIP) } +func (p *Player) GetPlayroomUpvote() int { + data := p.GetVarData(VAR_PLAYROOM_UPVOTE) + if data == nil { + return 0 + } + return data.(int) +} + +func (p *Player) GetPlayroomChip() int { + data := p.GetVarData(VAR_PLAYROOM_CHIP) + if data == nil { + return 0 + } + return data.(int) +} + func (p *Player) SetPlayroomKiss(PlayerId int) { p.SetVarDataAsync(VAR_PLAYROOM_KISS, 1) } +func (p *Player) GetPlayroomKiss() int { + data := p.GetVarData(VAR_PLAYROOM_KISS) + if data == nil { + return 0 + } + return data.(int) +} + func (p *Player) GetGoldCard() *VarGoldCard { data := p.GetVarData(VAR_GOLD_CARD) if data == nil { diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index 82f5eccb..9d4fb38b 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -186,7 +186,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() data.mu.Lock() defer data.mu.Unlock() - if v, ok := m.Extra.(*msg.VarData); ok { + if v, ok := m.Extra.(msg.VarData); ok { ved, ok := data.NewVar[v.Key] if !ok { ved = &VarExpireData{} @@ -237,7 +237,7 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() data.mu.Lock() defer data.mu.Unlock() - if v, ok := m.Extra.(*msg.VarData); ok { + if v, ok := m.Extra.(msg.VarData); ok { varData := data.NewUseVar[m.From] if varData == nil { varData = make(map[string]*VarExpireData) @@ -278,7 +278,7 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { func GetVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() - if v, ok := m.Extra.(*msg.VarData); ok { + if v, ok := m.Extra.(msg.VarData); ok { if varData, ok := data.NewVar[v.Key]; ok { return varData.D, nil } From 28de534bd44ad657d0a996822e5df4b8b5f27331 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:52:20 +0800 Subject: [PATCH 14/27] 3 --- src/server/game/message_mgr.go | 11 +++++++++++ src/server/game/var_mgr.go | 22 ++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 0c880d47..f2f4ec25 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -108,7 +108,18 @@ func CatnipPartnerHandler(data *msg.Msg) (interface{}, error) { return nil, fmt.Errorf("invalid catnip partner data") } return G_GameLogicPtr.VarMgr.HandleCatnipPartner(m.Uid, m.Partner, m.GameId, m.EndTime) +} +func ReplyPlayerMsgSync(m *msg.Msg, reply interface{}) (interface{}, error) { + clone := m.Clone() + clone.To = m.From + clone.HandleType = msg.HANDLE_MOD_REPLY_PLAYER_MSG + clone.Extra = reply + messageMgrData := getMessageData() + if node, ok := messageMgrData.PlayerList[int64(m.From)]; ok { + go SendMsgToNodeAsync(clone, node) + } + return nil, nil } // 节点连接时,同步消息 diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index 9d4fb38b..a765998c 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -222,13 +222,16 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() + userVar := &VarExpireData{} if v, ok := m.Extra.(*msg.VarData); ok { if varData, ok := data.NewUseVar[m.From]; ok { - if userVar, ok := varData[v.Key]; ok { - return userVar, nil - } + userVar, _ = varData[v.Key] } - return nil, fmt.Errorf("var data not found for key %s", v.Key) + if userVar == nil { + userVar = &VarExpireData{} + } + ReplyPlayerMsgSync(m, userVar.D) + return userVar, nil } return nil, fmt.Errorf("invalid parameters for getting var data") } @@ -278,11 +281,14 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { func GetVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() - if v, ok := m.Extra.(msg.VarData); ok { - if varData, ok := data.NewVar[v.Key]; ok { - return varData.D, nil + varData := &VarExpireData{} + if v, ok := m.Extra.(*msg.VarData); ok { + varData, _ = data.NewVar[v.Key] + if varData == nil { + varData = &VarExpireData{} } - return nil, fmt.Errorf("var data not found for key %s", v.Key) + ReplyPlayerMsgSync(m, varData.D) + return varData, nil } return nil, fmt.Errorf("invalid parameters for getting var data") } From 9dfa8843491d6b4fa617dfa625e1ff6d92f86ab1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 15:17:32 +0800 Subject: [PATCH 15/27] 4 --- src/server/game/GameLogic.go | 22 ---------------------- src/server/game/charge_func.go | 2 +- src/server/game/game_type.go | 2 +- src/server/game/gm_handler.go | 2 +- src/server/game/register_network_func.go | 20 +++++++++----------- src/server/game/var.go | 7 +++++-- src/server/game/var_mgr.go | 4 ++-- 7 files changed, 19 insertions(+), 40 deletions(-) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 397bbd13..01c9d06a 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -272,28 +272,6 @@ func (ad *GameLogic) CreateFriendMgr() { ad.FriendMgr.Init() } -func (ad *GameLogic) FriendMgrSend(m *MsgMod.Msg) { - ad.FriendMgr.Send(m) -} - -func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) { - ad.FriendMgr.Send(&MsgMod.Msg{ - From: Uid, - To: Uid, - Type: MsgMod.HANDLE_TYPE_VAR_USER_SET, - SendT: GoUtil.Now(), - Extra: VarOpration{Type: Op, Data: Data}, - }) -} - -func (ad *GameLogic) FriendMgrCall(m *MsgMod.Msg) interface{} { - result, err := ad.FriendMgr.Call(m) - if err != nil { - return nil - } - return result -} - // 排行榜管理器 func (ad *GameLogic) CreateRankMgr() { ad.RankMgr = &RankMgr{ diff --git a/src/server/game/charge_func.go b/src/server/game/charge_func.go index 836a3214..f4d3c568 100644 --- a/src/server/game/charge_func.go +++ b/src/server/game/charge_func.go @@ -35,7 +35,7 @@ func (p *Player) Charge(ChargeId int) { } func (p *Player) SendCharge(d *ChargeExtra) { - G_GameLogicPtr.FriendMgrSend(&MsgMod.Msg{ + FriendMgrSend(&MsgMod.Msg{ From: int(p.M_DwUin), Type: MsgMod.HANDLE_TYPE_SEND_CHARGE, To: int(d.Uid), diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 69b10613..85b47723 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -119,7 +119,7 @@ func init() { gob.Register(&VarUserData{}) gob.Register(&ActivityInfo{}) gob.Register(&ChargeExtra{}) - gob.Register(&GameResult{}) + gob.Register(GameResult{}) gob.Register(CatnipMsg{}) gob.Register(&CatnipLock{}) gob.Register(CRank{}) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 74d8c921..115a0cde 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -46,7 +46,7 @@ func ReqGmCommand_(player *Player, Command string) error { // log.Error("ReqGmCommand panic: %v", err) // } // }() - if conf.Server.GameName != "pet_home" && conf.Server.GameName != "merge_pet_sdk" && conf.Server.GameName != "Merge_Pet_Local" { + if conf.Server.GameName != "pet_home" && conf.Server.GameName != "merge_pet_sdk" && conf.Server.GameName != "Merge_Pet_Local" && conf.Server.GameName != "pet_home_local" { return fmt.Errorf("Player %d ReqGmCommand not support in game %s, command %s", player.M_DwUin, conf.Server.GameName, Command) } player.TeLog("gm", map[string]interface{}{ diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index adf30f16..34a11a0d 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -60,7 +60,6 @@ func ReqPlayerBaseInfofunction(player *Player, buf []byte) error { } func ReqPlayerBriefProfileDataFunc(player *Player, buf []byte) error { - return nil detail := &msg.ReqPlayerBriefProfileData{} err := proto.Unmarshal(buf, detail) if err != nil { @@ -3279,7 +3278,7 @@ func ReqSelfInvited(player *Player, buf []byte) error { if err != nil { return err } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ Type: MsqMod.HANDLE_TYPE_INVITE_FRIEND, From: int(player.M_DwUin), To: int(req.InviterId), @@ -3346,7 +3345,7 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error { player.PushClientRes(&msg.ResAutoAddInviteFriend{ ResultCode: 1, }) - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Uid, Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, @@ -3390,7 +3389,7 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error { player.PushClientRes(&msg.ResAutoAddInviteFriend2{ ResultCode: 1, }) - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Uid, Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, @@ -3790,7 +3789,7 @@ func ReqPlayroomInteract(player *Player, buf []byte) error { return err } if GoUtil.InArray(int(req.Id), playroomCfg.GetInteractIdBath()) { - G_GameLogicPtr.SetUserData(int(req.Id), VAR_OP_KISS, 0) + player.SetPlayroomKiss(0) } PExp := playroomCfg.GetInteractPExp(int(req.Id)) _, err = player.GetPlayerBaseMod().AddExp(player, 0, PExp) @@ -3804,7 +3803,6 @@ func ReqPlayroomInteract(player *Player, buf []byte) error { PlayroomMod.AddInteractNum(BaseMod.GetLevel()) player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_INTERACT, A: []interface{}{int(req.Id)}}) player.PlayMod.save() - G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_KISS, 0) player.LimitedTimePlayroomTrigger_(PType) player.NotifyPlayroomKiss() player.TeLog("playroom_interact", map[string]interface{}{ @@ -3868,7 +3866,7 @@ func ReqPlayroomGame(player *Player, buf []byte) error { }) return err } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Target, Type: MsqMod.HANDLE_TYPE_PLAYROOM_GAME, @@ -3928,7 +3926,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { }) return fmt.Errorf("no game or target") } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Target, Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, @@ -4157,7 +4155,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error { }) return err } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Target, Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, @@ -4260,7 +4258,7 @@ func ReqPlayroomUpvote(player *Player, buf []byte) error { SendT: GoUtil.Now(), }) player.AddPlayroomUpvote(int(req.Id)) - player.SetPlayroomKiss(int(req.Id)) + player.SetPlayroomKiss(1) player.TeLog("visit_like", map[string]interface{}{ "user_id": req.Id, }) @@ -4622,7 +4620,7 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { if v.Status == 1 { ItemNum = FriendItemNum } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: int(v.Uid), Type: MsqMod.FRIEND_TREASURE_HANDLE, diff --git a/src/server/game/var.go b/src/server/game/var.go index a747f019..d33b04a6 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -22,6 +22,9 @@ func (p *Player) GetVarData(key string) interface{} { log.Error("GetVarData err : %s", err) return nil } + if data == nil { + return nil + } return data.Extra } @@ -112,8 +115,8 @@ func (p *Player) GetPlayroomChip() int { return data.(int) } -func (p *Player) SetPlayroomKiss(PlayerId int) { - p.SetVarDataAsync(VAR_PLAYROOM_KISS, 1) +func (p *Player) SetPlayroomKiss(Kiss int) { + p.SetVarDataAsync(VAR_PLAYROOM_KISS, Kiss) } func (p *Player) GetPlayroomKiss() int { diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index a765998c..a112e3f7 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -223,7 +223,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() userVar := &VarExpireData{} - if v, ok := m.Extra.(*msg.VarData); ok { + if v, ok := m.Extra.(msg.VarData); ok { if varData, ok := data.NewUseVar[m.From]; ok { userVar, _ = varData[v.Key] } @@ -282,7 +282,7 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { func GetVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() varData := &VarExpireData{} - if v, ok := m.Extra.(*msg.VarData); ok { + if v, ok := m.Extra.(msg.VarData); ok { varData, _ = data.NewVar[v.Key] if varData == nil { varData = &VarExpireData{} From 0e8697556372f8a8127120b48e7a097d6fd1c6f5 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 15:19:03 +0800 Subject: [PATCH 16/27] 4 --- src/server/game/game_type.go | 1 - src/server/game/message_mgr.go | 5 +++-- src/server/game/var_mgr.go | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 85b47723..db6f40e2 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -119,7 +119,6 @@ func init() { gob.Register(&VarUserData{}) gob.Register(&ActivityInfo{}) gob.Register(&ChargeExtra{}) - gob.Register(GameResult{}) gob.Register(CatnipMsg{}) gob.Register(&CatnipLock{}) gob.Register(CRank{}) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index f2f4ec25..9c560a9e 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -65,6 +65,7 @@ func (m *MessageMgr) MessageMgrInit() { PlayerList: make(map[int64]int), } gob.Register(msg.VarData{}) + gob.Register(GameResult{}) // 注册处理函数 m.init() m.handler = make(map[int]MessageHandlerFunc) @@ -183,14 +184,14 @@ func PlayerLogoutHandler(data *msg.Msg) (interface{}, error) { func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { messageMgrData := getMessageData() - Message, ok := messageMgrData.MessageList[int64(data.From)] + Message, ok := messageMgrData.MessageList[int64(data.To)] if !ok { return nil, nil } Message.mu.Lock() defer Message.mu.Unlock() for i, msgItem := range Message.Messages { - if msgItem.Id == data.Id { + if msgItem.UniKey == data.UniKey { // 删除消息 Message.Messages = append(Message.Messages[:i], Message.Messages[i+1:]...) log.Debug("[Middleware] Comsume message success type: %d, player id: %v", msgItem.Type, msgItem.From) diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index a112e3f7..deb2d655 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -37,6 +37,7 @@ const ( func (f *VarMgr) Init() { gob.Register(&VarGoldCard{}) + gob.Register(&VarExpireData{}) f.key = VAR_MGR_KEY f.data = &VarData{ NewVar: map[string]*VarExpireData{}, From 50c6c07140cc130f2503c54b38ffbf4fe1912ec5 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 16:16:01 +0800 Subject: [PATCH 17/27] 5 --- src/server/game/GameLogic.go | 7 ++--- src/server/game/champship_mgr.go | 5 ++-- src/server/game/message_handler.go | 2 +- src/server/game/message_mgr.go | 41 +++++++++++++++++++++++------- src/server/game/mod/msg/Msg.go | 26 ++++++++++--------- 5 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 01c9d06a..98b6f46c 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -935,11 +935,8 @@ func (ad *GameLogic) GetStartTime() int64 { } func NotifyPlayer(Uid int, m *MsgMod.Msg) { - p := G_GameLogicPtr.GetPlayer(int64(Uid)) - if p == nil || p.stop { - return - } - p.Send(m) + m.To = Uid + CenterPlayerMsgHandler(m) } func Destroy() { diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 2eec44f1..e245fc8d 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -115,9 +115,8 @@ func (c *ChampshipMgr) Init() { } func (c *ChampshipMgr) NotifyAll(m *msg.Msg) (interface{}, error) { - G_GameLogicPtr.NotifyAll(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY, - }) + m.HandleType = msg.HANDLE_MOD_PLAYER_MSG + NotifyAllPlayerMsg(m) return nil, nil } diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 0aa35ac0..0c21aa20 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -704,7 +704,7 @@ func NotifyChampshipResult(Uid, Rank int) { SendT: GoUtil.Now(), Extra: []int{Rank, GoUtil.GetServerOpenDay()}, } - FriendMgrSend(Msg) + CenterPlayerMsgHandler(Msg) } } diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 9c560a9e..9d077517 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -76,6 +76,24 @@ func (m *MessageMgr) MessageMgrInit() { m.Use(RecoveryMiddleware()) m.Use(LoggingMiddleware()) m.Use(TimeoutMiddleware(5 * time.Second)) + m.NodeRegister() + m.CenterRegister() +} + +// 注册处理器 +func (s *MessageMgr) RegisterHandler(HandlerType int, fun MessageHandlerFunc) { + s.handler[HandlerType] = fun +} + +func (m *MessageMgr) NodeRegister() { + if conf.Server.ServerType == "node" { + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_REPLY_PLAYER_MSG, MessageHandlerFunc(PlayerReplyMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler)) + } +} + +func (m *MessageMgr) CenterRegister() { if conf.Server.ServerType == "center" { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLoginHandler)) m.RegisterHandler(msg.HANDLE_MDO_PLAYER_LOGOUT, MessageHandlerFunc(PlayerLogoutHandler)) @@ -86,23 +104,28 @@ func (m *MessageMgr) MessageMgrInit() { m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_SET, MessageHandlerFunc(SetUserVarDataHandler)) m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_GET, MessageHandlerFunc(GetUserVarDataHandler)) m.RegisterHandler(msg.HANDLE_MOD_CATNIP_PARTNER, MessageHandlerFunc(CatnipPartnerHandler)) - } else { - m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) - m.RegisterHandler(msg.HANDLE_MOD_REPLY_PLAYER_MSG, MessageHandlerFunc(PlayerReplyMsgHandler)) - m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler)) + m.RegisterHandler(msg.HANDLE_MDO_CHAMPSHIP_INRANK, MessageHandlerFunc(ChampshipInRankHandler)) } } -// 注册处理器 -func (s *MessageMgr) RegisterHandler(HandlerType int, fun MessageHandlerFunc) { - s.handler[HandlerType] = fun -} - func getMessageData() *MessageData { return G_GameLogicPtr.MessageMgr.data.(*MessageData) } // ----------------------------------- 处理函数实现 --------------------------- +func NotifyAllPlayerMsg(m *msg.Msg) { + messageMgrData := getMessageData() + for PlayerId, node := range messageMgrData.PlayerList { + m.To = int(PlayerId) + go SendMsgToNodeAsync(m, node) + } +} + +func ChampshipInRankHandler(data *msg.Msg) (interface{}, error) { + G_GameLogicPtr.ChampshipMgr.inRank(data) + return nil, nil +} + func CatnipPartnerHandler(data *msg.Msg) (interface{}, error) { m, ok := data.Extra.(*CatnipPartner) if !ok { diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index d8dd02cc..70892f83 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -32,18 +32,20 @@ var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} const ( - HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 - HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 - HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 - HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 - HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 - HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 - HANDLE_MOD_VAR_GET = 20007 // 获取变量 - HANDLE_MOD_VAR_SET = 20008 // 设置变量 - HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 - HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量 - HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量 - HANDLE_MOD_REPLY_PLAYER_MSG = 20012 // 回复玩家消息 + HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 + HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 + HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 + HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 + HANDLE_MOD_VAR_GET = 20007 // 获取变量 + HANDLE_MOD_VAR_SET = 20008 // 设置变量 + HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 + HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量 + HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量 + HANDLE_MOD_REPLY_PLAYER_MSG = 20012 // 回复玩家消息 + HANDLE_MDO_CHAMPSHIP_INRANK = 20013 // 锦标赛入榜 + HANDLE_MOD_CHAMPSHIP_RANK_INFO = 20014 // 锦标赛排名信息 ) const ( From 98fcc02e380c88e9014a3c54d6d8453c508ffa89 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 16:16:43 +0800 Subject: [PATCH 18/27] 5 --- src/server/game/champship_mgr.go | 37 +++++++++++--------------------- src/server/game/player_data.go | 3 ++- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index e245fc8d..7e1ba330 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -81,36 +81,28 @@ func (c *ChampshipMgr) Init() { } // 注册处理函数 c.init() - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_GROUP, c.group) c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, c.inRank) c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_AI, c.ai) - c.RegisterHandler(msg.SERVER_ZERO_UPDATE, c.ZeroUpdate) c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY2, c.NotifyAll) Now := GoUtil.Now() ZeroTime := GoUtil.ZeroTimestamp() if c.getData().ZeroTime != ZeroTime { - c.ZeroUpdate(&msg.Msg{}) + c.ZeroUpdate() } Remain := Now - ZeroTime Remain1 := 1800 - Remain%1800 c.mDispatr.AfterFunc(time.Duration(Remain1)*time.Second, func() { // 30分钟后重新分组 - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP, - }) + c.group() }) c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_AI, - }) + c.ai() }) c.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.SERVER_ZERO_UPDATE, - }) + c.ZeroUpdate() }) } @@ -120,13 +112,14 @@ func (c *ChampshipMgr) NotifyAll(m *msg.Msg) (interface{}, error) { return nil, nil } -func (c *ChampshipMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { +func (c *ChampshipMgr) ZeroUpdate() (interface{}, error) { log.Debug("ChampshipMgr ZeroUpdate") c.getData().ZeroTime = GoUtil.ZeroTimestamp() c.getData().PreRank = c.getData().Rank c.getData().PreRobot = c.getData().Robot c.getData().PreGroupInfo = c.getData().GroupInfo - + c.getData().AutoId = 0 + c.getData().RobotId = 1 c.getData().Robot = make(map[int]*ChampshipRobot, 0) c.getData().Rank = make(map[int][]*ChampshipRank, 0) c.getData().GroupInfo = make(map[int]int, 0) @@ -138,9 +131,7 @@ func (c *ChampshipMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { }) c.NotifyPlayer() c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY2, - }) + c.ZeroUpdate() }) return nil, nil } @@ -157,7 +148,7 @@ func (c *ChampshipMgr) NotifyPlayer() { } } -func (c *ChampshipMgr) ai(m *msg.Msg) (interface{}, error) { +func (c *ChampshipMgr) ai() (interface{}, error) { ChampshipData := c.getData() Now := GoUtil.Now() for k, v := range ChampshipData.Rank { @@ -204,9 +195,7 @@ func (c *ChampshipMgr) ai(m *msg.Msg) (interface{}, error) { ChampshipData.Rank[k] = v } c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_AI, - }) + c.ai() }) return nil, nil } @@ -319,11 +308,9 @@ func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { } // 分组 -func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) { +func (c *ChampshipMgr) group() (interface{}, error) { c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { // 30分钟后重新分组 - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP, - }) + c.group() }) Now := GoUtil.Now() Zero := GoUtil.ZeroTimestamp() diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 6901c65f..03c9cb89 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1024,8 +1024,9 @@ func (p *Player) HandleInChampshipRank() { H: ChampshipMod.GetH(), N: ChampshipMod.GetN(), }, + HandleType: MsgMod.HANDLE_MDO_CHAMPSHIP_INRANK, } - G_GameLogicPtr.ChampshipMgrSend(m) + SendMsgToCenterAsync(m) } func (p *Player) AddLog(Uid int, Type int, Param string, Time int64) { From 2c33c24d42246bb756068b280df35f0687f983bd Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 16:21:59 +0800 Subject: [PATCH 19/27] 5 --- src/server/game/champship_mgr.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 7e1ba330..574a685b 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -81,10 +81,6 @@ func (c *ChampshipMgr) Init() { } // 注册处理函数 c.init() - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, c.inRank) - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_AI, c.ai) - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY2, c.NotifyAll) - Now := GoUtil.Now() ZeroTime := GoUtil.ZeroTimestamp() if c.getData().ZeroTime != ZeroTime { From 0036ff96c773e749be491c5db606c0fbe7d138c0 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Dec 2025 16:41:52 +0800 Subject: [PATCH 20/27] 5 --- src/server/game/GameLogic.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 98b6f46c..d077785f 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -492,14 +492,16 @@ func G_getGameLogic() *GameLogic { G_GameLogicPtr.InitActivity() // 初始化活动 G_GameLogicPtr.GetVersion() // 获取版本号 G_GameLogicPtr.CreateLogManager() //加载日志管理器 - G_GameLogicPtr.CreateFriendMgr() //创建好友管理器 - G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器 - G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 - G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 - G_GameLogicPtr.CreateVarMgr() // 创建变量管理器 - G_GameLogicPtr.CreateBanMgr() // 创建封号管理器 - G_GameLogicPtr.CreateMessageMgr() // 创建消息管理器 - ClusterMgrInit() //初始化集群 + if conf.Server.ServerType == "center" { + G_GameLogicPtr.CreateFriendMgr() //创建好友管理器 + G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器 + G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 + G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 + G_GameLogicPtr.CreateVarMgr() // 创建变量管理器 + G_GameLogicPtr.CreateBanMgr() // 创建封号管理器 + } + G_GameLogicPtr.CreateMessageMgr() // 创建消息管理器 + ClusterMgrInit() //初始化集群 G_GameLogicPtr.StartTime = time.Now().Unix() // G_GameLogicPtr.CreateHttpManager() } From c0f02217c122c1914cb3c27c09c9493f01321c5e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:27:56 +0800 Subject: [PATCH 21/27] 6 --- src/server/db/Mysql.go | 23 +- src/server/db/SqlStruct.go | 2 +- src/server/game/GameLogic.go | 45 +- src/server/game/admin.go | 6 +- src/server/game/ban_mgr.go | 69 -- src/server/game/cluster_mgr.go | 8 - src/server/game/friend_mgr.go | 6 - src/server/game/game_type.go | 3 + src/server/game/message_handler.go | 4 +- src/server/game/mod/msg/Msg.go | 2 + src/server/game/player_back.go | 13 +- src/server/game/player_base_mod.go | 26 +- src/server/game/register_network_func.go | 37 +- src/server/game/var.go | 3 + src/server/msg/Gameapi.pb.go | 1147 +++++++++++----------- 15 files changed, 653 insertions(+), 741 deletions(-) delete mode 100644 src/server/game/ban_mgr.go diff --git a/src/server/db/Mysql.go b/src/server/db/Mysql.go index 9cb4b880..ea38de75 100644 --- a/src/server/db/Mysql.go +++ b/src/server/db/Mysql.go @@ -16,13 +16,6 @@ import ( "github.com/jmoiron/sqlx" ) -type user struct { - Id int `db:"user_id"` - Sex int `db:"sex"` - UserName string `db:"username"` - Email string `db:"email"` -} - var SqlDb *sqlx.DB var sqlDbMu sync.Mutex @@ -271,6 +264,22 @@ func GetPlayerBaseInfoFromDbByName(name string) *ResPlayerBaseInfo { return &res } +func GetPlayerBan(name string) int64 { + sqlStr := "SELECT ban FROM t_player_baseinfo WHERE user_name = ?" + var ban int64 + if err := SqlDb.Get(&ban, sqlStr, name); err != nil { + log.Debug("table: %s, sql :%s, exec failed, err:%v\n", "PlayerBaseInfo", sqlStr, err) + return 0 + } + return ban +} + +func UpdatePlayerBan(uid int64, ban int64) error { + sqlStr := "UPDATE t_player_baseinfo SET ban = ? WHERE dwUin = ?" + _, err := SqlDb.Exec(sqlStr, ban, uid) + return err +} + func UpdatePlayerBaseInfoName(oldName, newName string) error { sqlStr := "UPDATE t_player_baseinfo SET user_name = ? WHERE user_name = ?" _, err := SqlDb.Exec(sqlStr, newName, oldName) diff --git a/src/server/db/SqlStruct.go b/src/server/db/SqlStruct.go index ecfe8238..4191e033 100644 --- a/src/server/db/SqlStruct.go +++ b/src/server/db/SqlStruct.go @@ -37,7 +37,7 @@ type ResPlayerBaseInfo struct { Guild int32 `db:"guild"` PackUnlockCount int32 `db:"pack_unlock_count"` LastPlayTime int32 `db:"last_play_time"` - EnergyBuyCount int32 `db:"EnergyBuyCount"` + Ban int64 `db:"ban"` UserName string `db:"user_name"` NickName string `db:"nick_name"` LoginTime int32 `db:"login_time"` diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index d077785f..7be14116 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -83,7 +83,6 @@ type GameLogic struct { MailMgr *MailMgr // 邮件管理器 ChampshipMgr *ChampshipMgr // 锦标赛管理器 VarMgr *VarMgr // 变量管理器 - BanMgr *BanMgr // 封号管理器 StartTime int64 // 服务器启动时间 MessageMgr *MessageMgr // 消息管理器 } @@ -193,7 +192,6 @@ func (ad *GameLogic) NewAccountInsertDataToDB() bool { playerInfo.MusicCode = 1 playerInfo.Guild = 1 playerInfo.PackUnlockCount = 5 - playerInfo.EnergyBuyCount = 0 playerInfo.UserName = ad.Db_AccountInfo.UserName playerInfo.LoginTime = (int32)(time.Now().Unix()) playerInfo.LogoutTime = 0 @@ -359,26 +357,6 @@ func (ad *GameLogic) VarMgrCall(m *MsgMod.Msg) interface{} { return result } -// 封号管理器 -func (ad *GameLogic) CreateBanMgr() { - ad.BanMgr = &BanMgr{ - ServerMod: new(ServerMod), - } - ad.BanMgr.Init() -} - -func (ad *GameLogic) BanMgrSend(m *MsgMod.Msg) { - ad.BanMgr.Send(m) -} - -func (ad *GameLogic) BanMgrCall(m *MsgMod.Msg) interface{} { - result, err := ad.BanMgr.Call(m) - if err != nil { - return nil - } - return result -} - func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData { if Id == 0 { return nil @@ -494,12 +472,11 @@ func G_getGameLogic() *GameLogic { G_GameLogicPtr.CreateLogManager() //加载日志管理器 if conf.Server.ServerType == "center" { G_GameLogicPtr.CreateFriendMgr() //创建好友管理器 - G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器 - G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 G_GameLogicPtr.CreateVarMgr() // 创建变量管理器 - G_GameLogicPtr.CreateBanMgr() // 创建封号管理器 } + G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器 + G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 G_GameLogicPtr.CreateMessageMgr() // 创建消息管理器 ClusterMgrInit() //初始化集群 G_GameLogicPtr.StartTime = time.Now().Unix() @@ -676,15 +653,14 @@ func (ad *GameLogic) RegisterNetWorkFunc() { RegisterMsgProcessFunc("ReqId2Verify", ReqId2Verify) // 身份证验证 // 玩家 RegisterMsgProcessFunc("ReqUserInfo", ReqUserInfo) - RegisterMsgProcessFunc("ReqSetName", ReqSetName) // 设置名字 - RegisterMsgProcessFunc("ReqLang", ReqLang) // 设置语言 - RegisterMsgProcessFunc("ReqSetPetName", ReqSetPetName) // 设置宠物名字 - RegisterMsgProcessFunc("ReqSetFacebookUrl", ReqSetFacebookUrl) // 设置facebook地址 - RegisterMsgProcessFunc("ReqPlayerBaseInfo", ReqPlayerBaseInfofunction) // 请求玩家基本信息 - RegisterMsgProcessFunc("UpdateBaseItemInfo", UpdateBaseItemInfofunction) // 保存引导 - RegisterMsgProcessFunc("ReqKv", ReqKv) // 保存客户端数据 - RegisterMsgProcessFunc("ReqGetEnergyByAD", ReqGetEnergyByAD) // 看广告获取能量 - RegisterMsgProcessFunc("ReqBuyEnergy", ReqBuyEnergy) // 购买能量 + RegisterMsgProcessFunc("ReqSetName", ReqSetName) // 设置名字 + RegisterMsgProcessFunc("ReqLang", ReqLang) // 设置语言 + RegisterMsgProcessFunc("ReqSetPetName", ReqSetPetName) // 设置宠物名字 + RegisterMsgProcessFunc("ReqSetFacebookUrl", ReqSetFacebookUrl) // 设置facebook地址 + RegisterMsgProcessFunc("ReqPlayerBaseInfo", ReqPlayerBaseInfofunction) // 请求玩家基本信息 + RegisterMsgProcessFunc("ReqKv", ReqKv) // 保存客户端数据 + RegisterMsgProcessFunc("ReqGetEnergyByAD", ReqGetEnergyByAD) // 看广告获取能量 + RegisterMsgProcessFunc("ReqBuyEnergy", ReqBuyEnergy) // 购买能量 // #region 棋盘 RegisterMsgProcessFunc("ReqPlayerChessData", ReqPlayerChessDataFunc) RegisterMsgProcessFunc("UpdatePlayerChessData", UpdatePlayerChessDataFunc) // 更新棋盘数据 @@ -954,7 +930,6 @@ func Destroy() { G_GameLogicPtr.ChampshipMgr.SaveData() G_GameLogicPtr.MailMgr.SaveData() G_GameLogicPtr.VarMgr.SaveData() - G_GameLogicPtr.BanMgr.SaveData() G_GameLogicPtr.MLogManager.Close() } log.Debug("服务器下线完成") diff --git a/src/server/game/admin.go b/src/server/game/admin.go index 45361af8..657fd57f 100644 --- a/src/server/game/admin.go +++ b/src/server/game/admin.go @@ -100,7 +100,7 @@ func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg return } - if G_GameLogicPtr.BanMgr.IsBanned(playerbaseinfo.DwUin) { + if playerbaseinfo.Ban > GoUtil.Now() || playerbaseinfo.Ban == -1 { ResLogin = &msg.ResLogin{ ResultCode: MergeConst.Protocol_Error_Account_Ban, DwUin: 0, @@ -176,7 +176,7 @@ func AdminPlayerInfo(args []interface{}) error { res["Cumulative"] = player.PlayMod.getBaseMod().Cumulative res["RegisterTime"] = player.GetPlayerBaseMod().GetRegisterTime() res["TodayCumulative"] = player.PlayMod.getBaseMod().TodayCumulative - res["Ban"] = G_GameLogicPtr.BanMgr.GetBanInfo(player.M_DwUin).EndTime + res["Ban"] = db.GetPlayerBan(player.PlayMod.getBaseMod().Account) if online { res["Cumulative"] = int64(player.PlayMod.getBaseMod().Cumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime) res["TodayCumulative"] = int64(player.PlayMod.getBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime) @@ -283,7 +283,7 @@ func ReqAdminBan(args []interface{}) error { res := make(map[string]interface{}) res["Code"] = 0 res["Msg"] = "ok" - G_GameLogicPtr.BanMgr.BanUser(req.Uid, int64(req.Time), req.Reason) + db.UpdatePlayerBan(req.Uid, int64(req.Time)) AdminPlayerBack(a, res) return nil } diff --git a/src/server/game/ban_mgr.go b/src/server/game/ban_mgr.go deleted file mode 100644 index 0bc22fb0..00000000 --- a/src/server/game/ban_mgr.go +++ /dev/null @@ -1,69 +0,0 @@ -package game - -import ( - "encoding/gob" - GoUtil "server/game_util" -) - -type BanMgr struct { - *ServerMod -} - -type BanData struct { - NewBanList map[int64]*BanInfo // 新增的封禁列表 -} - -type BanInfo struct { - UserId int64 // 玩家ID - EndTime int64 // 封禁结束时间,0表示永久封禁 - Reason string // 封禁原因 -} - -func (f *BanMgr) Init() { - gob.Register(&BanData{}) - f.key = BAN_MGR_KEY - f.data = &BanData{ - NewBanList: make(map[int64]*BanInfo), - } - // 注册处理函数 - f.init() - if f.data.(*BanData).NewBanList == nil { - f.data.(*BanData).NewBanList = make(map[int64]*BanInfo) - } -} - -func (f *BanMgr) IsBanned(userId int64) bool { - if f.data.(*BanData).NewBanList == nil { - return false - } - Info, banned := f.data.(*BanData).NewBanList[userId] - if !banned { - return false - } - return Info.EndTime > GoUtil.Now() || Info.EndTime == -1 // 如果EndTime为0,表示永久封禁 -} - -func (f *BanMgr) GetBanInfo(userId int64) *BanInfo { - if f.data.(*BanData).NewBanList == nil { - return &BanInfo{} - } - Info, banned := f.data.(*BanData).NewBanList[userId] - if !banned { - return &BanInfo{} - } - return Info -} - -func (f *BanMgr) BanUser(userId int64, endTime int64, reason string) { - f.data.(*BanData).NewBanList[userId] = &BanInfo{ - UserId: userId, - EndTime: endTime, - Reason: reason, - } - f.SaveData() -} - -func (f *BanMgr) UnbanUser(userId int64) { - delete(f.data.(*BanData).NewBanList, userId) - f.SaveData() -} diff --git a/src/server/game/cluster_mgr.go b/src/server/game/cluster_mgr.go index 6f70421d..d3272ac6 100644 --- a/src/server/game/cluster_mgr.go +++ b/src/server/game/cluster_mgr.go @@ -17,14 +17,6 @@ func ClusterMgrInit() { } -func clusterHandlerProcess(m *msg.Msg) { - if fun, ok := clusterHandler[m.Type]; ok { - fun(m) - } else { - FriendMgrSend(m) - } -} - func RegisterClusterHandler(t int, fun func(*msg.Msg) error) { clusterHandler[t] = fun } diff --git a/src/server/game/friend_mgr.go b/src/server/game/friend_mgr.go index bb2b84d4..912a1992 100644 --- a/src/server/game/friend_mgr.go +++ b/src/server/game/friend_mgr.go @@ -131,12 +131,6 @@ func (f *FriendMgr) sendToPlayerOnline(m *msg.Msg) (interface{}, error) { return nil, nil } -// 同步信息 -func (f *FriendMgr) sync(m *msg.Msg) (interface{}, error) { - data := f.getData().List[m.From] - return data, nil -} - // 发送消息给玩家 func sendToPlayer(m *msg.Msg) error { p := G_GameLogicPtr.GetPlayer(int64(m.To)) diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index db6f40e2..23171816 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -5,6 +5,7 @@ import ( "server/game/mod/friend" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/msg" + proto "server/msg" "sync" ) @@ -122,4 +123,6 @@ func init() { gob.Register(CatnipMsg{}) gob.Register(&CatnipLock{}) gob.Register(CRank{}) + gob.Register(&proto.ResChampshipRank{}) + gob.Register(&proto.ResChampshipPreRank{}) } diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 0c21aa20..18fc979d 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -419,7 +419,7 @@ func (p *Player) handle(m *msg.Msg) error { ReplyInfo := FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP, fmt.Sprintf("%d", CatnipMsg.GameId), m.End, nil) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) p.PushClientRes(&proto.ResFriendReplyNotify{ - Info: &proto.ResFriendLog{ + Info: &proto.ResFriendReply{ Player: PlayerSimpleData, Param: ReplyInfo.Param, Type: int32(ReplyInfo.Type), @@ -478,7 +478,7 @@ func (p *Player) handle(m *msg.Msg) error { ReplyInfo := FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP_ITEMS, "", m.End, Items) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) p.PushClientRes(&proto.ResFriendReplyNotify{ - Info: &proto.ResFriendLog{ + Info: &proto.ResFriendReply{ Player: PlayerSimpleData, Param: ReplyInfo.Param, Type: int32(ReplyInfo.Type), diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 70892f83..ed3ffd8a 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -46,6 +46,8 @@ const ( HANDLE_MOD_REPLY_PLAYER_MSG = 20012 // 回复玩家消息 HANDLE_MDO_CHAMPSHIP_INRANK = 20013 // 锦标赛入榜 HANDLE_MOD_CHAMPSHIP_RANK_INFO = 20014 // 锦标赛排名信息 + HANDLE_MOD_CHAMPSHIP_RANK_LIST = 20015 // 锦标赛排行榜 + HANDLE_MOD_CHAMPSHIP_PRE_RANK = 20016 // 锦标赛上期排名 ) const ( diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 906ba679..6cf5c34b 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -5,6 +5,7 @@ import ( playroomCfg "server/conf/playroom" "server/game/mod/item" limitedTimeEvent "server/game/mod/limited_time_event" + "server/game/mod/msg" GoUtil "server/game_util" proto "server/msg" ) @@ -294,8 +295,16 @@ func (p *Player) ChargeBackData() { func (p *Player) BackChampship() { ChampshipMod := p.PlayMod.getChampshipMod() - MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin)) - MyPreRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(int(p.M_DwUin)) + MyRank := 0 + MyPreRank := 0 + res, _ := SendMsgToCenterSync(&msg.Msg{ + From: int(p.M_DwUin), + HandleType: msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO, + }) + if res != nil { + MyRank = res.Extra.([]int)[0] + MyPreRank = res.Extra.([]int)[1] + } p.PushClientRes(ChampshipMod.BackData(MyRank, MyPreRank)) } diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index bc236c2a..ce9ed427 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -43,7 +43,7 @@ func (p *PlayerBaseData) BackUp() msg.ResPlayerBaseInfo { Guild: p.Data.Guild, PackUnlockCount: p.Data.PackUnlockCount, LastPlayTime: p.Data.LastPlayTime, - EnergyBuyCount: p.Data.EnergyBuyCount, + Ban: p.Data.Ban, LoginTime: p.Data.LoginTime, UserName: p.Data.UserName, LogoutTime: p.Data.LogoutTime, @@ -70,7 +70,7 @@ func (p *PlayerBaseData) Recover(old *PlayerBaseData) *PlayerBaseData { Guild: p.Data.Guild, PackUnlockCount: p.Data.PackUnlockCount, LastPlayTime: p.Data.LastPlayTime, - EnergyBuyCount: p.Data.EnergyBuyCount, + Ban: p.Data.Ban, LoginTime: p.Data.LoginTime, UserName: p.Data.UserName, LogoutTime: p.Data.LogoutTime, @@ -104,7 +104,7 @@ func (p *PlayerBaseData) LoadDataFromDB(UserName interface{}) bool { p.Data.Guild = sqlStruck.Guild p.Data.PackUnlockCount = sqlStruck.PackUnlockCount p.Data.LastPlayTime = sqlStruck.LastPlayTime - p.Data.EnergyBuyCount = sqlStruck.EnergyBuyCount + p.Data.Ban = sqlStruck.Ban p.Data.UserName = sqlStruck.UserName p.Data.LogoutTime = sqlStruck.LogoutTime p.Data.Todayolinetime = sqlStruck.Todayolinetime @@ -132,7 +132,7 @@ func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool { sqlStruck.Guild = p.Data.Guild sqlStruck.PackUnlockCount = p.Data.PackUnlockCount sqlStruck.LastPlayTime = p.Data.LastPlayTime - sqlStruck.EnergyBuyCount = p.Data.EnergyBuyCount + sqlStruck.Ban = int64(p.Data.Ban) sqlStruck.LoginTime = int32(BaseMod.LoginTime) sqlStruck.UserName = p.Data.UserName sqlStruck.LogoutTime = int32(BaseMod.LogoutTime) @@ -163,22 +163,6 @@ func (p *PlayerBaseData) GetMaxEnergy() int { } // 更新游戏道具 -func (p *PlayerBaseData) UpdateBaseItemInfo(update *msg.UpdateBaseItemInfo) { - for k, v := range update.MUpdateItem { - switch k { - case 4: - p.Data.EnergyBuyCount = v - case 8: - p.Data.Guild = v - case 9: - p.Data.PackUnlockCount = v - case 10: - p.Data.EmitOrderCnt = v - case 11: - p.Data.LastPlayTime = v - } - } -} func (p *PlayerBaseData) ReqRemoveAd(player *Player, buf []byte) { req := &msg.ReqRemoveAd{} @@ -654,7 +638,7 @@ func (p *PlayerBaseData) GetDataByUid(Uid interface{}) bool { p.Data.Guild = sqlStruck.Guild p.Data.PackUnlockCount = sqlStruck.PackUnlockCount p.Data.LastPlayTime = sqlStruck.LastPlayTime - p.Data.EnergyBuyCount = sqlStruck.EnergyBuyCount + p.Data.Ban = sqlStruck.Ban p.Data.LoginTime = sqlStruck.LoginTime p.Data.UserName = sqlStruck.UserName p.Data.LogoutTime = sqlStruck.LogoutTime diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 34a11a0d..4f1c0e49 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -119,17 +119,6 @@ func ReqRemoveAdFunc(player *Player, buf []byte) error { return nil } -// 更新玩家物品 -func UpdateBaseItemInfofunction(player *Player, buf []byte) error { - detail := &msg.UpdateBaseItemInfo{} - err := proto.Unmarshal(buf, detail) - if err != nil { - return err - } - player.PlayerBaseMod.UpdateBaseItemInfo(detail) - return nil -} - // 请求玩家棋盘信息 func ReqPlayerChessDataFunc(player *Player, buf []byte) error { detail := &msg.ReqPlayerChessData{} @@ -2575,7 +2564,18 @@ func ReqChampshipRank(player *Player, buf []byte) error { if err != nil { return err } - m := G_GameLogicPtr.ChampshipMgr.GetRankMsg(int(player.M_DwUin)) + res, err := SendMsgToCenterSync(&MsqMod.Msg{ + From: int(player.M_DwUin), + HandleType: MsqMod.HANDLE_MOD_CHAMPSHIP_RANK_LIST, + }) + if err != nil { + return err + } + if res == nil { + player.PushClientRes(&msg.ResChampshipRank{}) + return nil + } + m := res.Extra.(*msg.ResChampshipRank) player.PushClientRes(m) return nil } @@ -2586,7 +2586,18 @@ func ReqChampshipPreRank(player *Player, buf []byte) error { if err != nil { return err } - m := G_GameLogicPtr.ChampshipMgr.GetPreRankMsg(int(player.M_DwUin)) + res, err := SendMsgToCenterSync(&MsqMod.Msg{ + From: int(player.M_DwUin), + HandleType: MsqMod.HANDLE_MOD_CHAMPSHIP_PRE_RANK, + }) + if err != nil { + return err + } + if res == nil { + player.PushClientRes(&msg.ResChampshipPreRank{}) + return nil + } + m := res.Extra.(*msg.ResChampshipPreRank) player.PushClientRes(m) return nil } diff --git a/src/server/game/var.go b/src/server/game/var.go index d33b04a6..a9702673 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -141,5 +141,8 @@ func (p *Player) GetCatnipPartner(Uid int) []int { log.Error("GetVarData err : %s", err) return nil } + if data == nil { + return nil + } return GoUtil.IntSlice(data.Extra) } diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index e82fd23d..c0f9515b 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -358,44 +358,44 @@ type RES_CODE int32 const ( RES_CODE_FAIL RES_CODE = 0 RES_CODE_SUCCESS RES_CODE = 1 - RES_CODE_Protocol_Error_Account_Exist RES_CODE = 2 // 账号已存在 - RES_CODE_Protocol_Error_Account_OR_PWD_ERROR RES_CODE = 3 // 账号或密码错误 - RES_CODE_Protocol_Error_Account_OR_PWD_Short RES_CODE = 4 // 账号或密码过短 - RES_CODE_Protocol_Error_Account_Fail RES_CODE = 5 // 账号操作失败 - RES_CODE_Protocol_Error_Account_NoExsit RES_CODE = 6 // 账号不存在 - RES_CODE_Protocol_Error_Account_Code_Error RES_CODE = 7 // 验证码错误 - RES_CODE_Protocol_Error_Account_Device_Error RES_CODE = 8 // 设备号错误 - RES_CODE_Protocol_Error_Id_Not_Verify RES_CODE = 9 // 未实名认证 - RES_CODE_Protocol_Error_Id_Verify_Error RES_CODE = 10 // 实名认证失败 + RES_CODE_Protocol_Error_Account_Exist RES_CODE = 100 // 账号已存在 + RES_CODE_Protocol_Error_Account_OR_PWD_ERROR RES_CODE = 101 // 账号或密码错误 + RES_CODE_Protocol_Error_Account_OR_PWD_Short RES_CODE = 102 // 账号或密码过短 + RES_CODE_Protocol_Error_Account_Fail RES_CODE = 103 // 账号操作失败 + RES_CODE_Protocol_Error_Account_NoExsit RES_CODE = 104 // 账号不存在 + RES_CODE_Protocol_Error_Account_Code_Error RES_CODE = 105 // 验证码错误 + RES_CODE_Protocol_Error_Account_Device_Error RES_CODE = 106 // 设备号错误 + RES_CODE_Protocol_Error_Id_Not_Verify RES_CODE = 107 // 未实名认证 + RES_CODE_Protocol_Error_Id_Verify_Error RES_CODE = 108 // 实名认证失败 ) // Enum value maps for RES_CODE. var ( RES_CODE_name = map[int32]string{ - 0: "FAIL", - 1: "SUCCESS", - 2: "Protocol_Error_Account_Exist", - 3: "Protocol_Error_Account_OR_PWD_ERROR", - 4: "Protocol_Error_Account_OR_PWD_Short", - 5: "Protocol_Error_Account_Fail", - 6: "Protocol_Error_Account_NoExsit", - 7: "Protocol_Error_Account_Code_Error", - 8: "Protocol_Error_Account_Device_Error", - 9: "Protocol_Error_Id_Not_Verify", - 10: "Protocol_Error_Id_Verify_Error", + 0: "FAIL", + 1: "SUCCESS", + 100: "Protocol_Error_Account_Exist", + 101: "Protocol_Error_Account_OR_PWD_ERROR", + 102: "Protocol_Error_Account_OR_PWD_Short", + 103: "Protocol_Error_Account_Fail", + 104: "Protocol_Error_Account_NoExsit", + 105: "Protocol_Error_Account_Code_Error", + 106: "Protocol_Error_Account_Device_Error", + 107: "Protocol_Error_Id_Not_Verify", + 108: "Protocol_Error_Id_Verify_Error", } RES_CODE_value = map[string]int32{ "FAIL": 0, "SUCCESS": 1, - "Protocol_Error_Account_Exist": 2, - "Protocol_Error_Account_OR_PWD_ERROR": 3, - "Protocol_Error_Account_OR_PWD_Short": 4, - "Protocol_Error_Account_Fail": 5, - "Protocol_Error_Account_NoExsit": 6, - "Protocol_Error_Account_Code_Error": 7, - "Protocol_Error_Account_Device_Error": 8, - "Protocol_Error_Id_Not_Verify": 9, - "Protocol_Error_Id_Verify_Error": 10, + "Protocol_Error_Account_Exist": 100, + "Protocol_Error_Account_OR_PWD_ERROR": 101, + "Protocol_Error_Account_OR_PWD_Short": 102, + "Protocol_Error_Account_Fail": 103, + "Protocol_Error_Account_NoExsit": 104, + "Protocol_Error_Account_Code_Error": 105, + "Protocol_Error_Account_Device_Error": 106, + "Protocol_Error_Id_Not_Verify": 107, + "Protocol_Error_Id_Verify_Error": 108, } ) @@ -691,19 +691,19 @@ const ( TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_VISIT TIME_LINE_TYPE = 15 // 非小猫游戏,他人偷走了玩家的猫币 TIME_LINE_TYPE_LOG_TYPE_HANDBOOK TIME_LINE_TYPE = 16 // 图鉴收集 TIME_LINE_TYPE_LOG_TYPE_HANDBOOK_UPVOTE TIME_LINE_TYPE = 17 // 图鉴点赞 - TIME_LINE_TYPE_LOG_TYPE_CHARGE_SEND TIME_LINE_TYPE = 18 // 赠送充值礼物 - TIME_LINE_TYPE_LOG_TYPE_CHARGE_RECEIVE TIME_LINE_TYPE = 19 // 收到充值礼物 - TIME_LINE_TYPE_LOG_TYPE_WISH TIME_LINE_TYPE = 20 // 心愿单请求 - TIME_LINE_TYPE_LOG_TYPE_FRIEND_BECOME_NPC TIME_LINE_TYPE = 21 // npc成为好友 + TIME_LINE_TYPE_LOG_TYPE_CHARGE_SEND TIME_LINE_TYPE = 18 // 充值赠送 + TIME_LINE_TYPE_LOG_TYPE_CHARGE_RECEIVED TIME_LINE_TYPE = 19 // 充值接受 + TIME_LINE_TYPE_LOG_TYPE_WISH TIME_LINE_TYPE = 20 // 心愿单 + TIME_LINE_TYPE_LOG_TYPE_FRIEND_BECOME_NPC TIME_LINE_TYPE = 21 // NPC成为好友 TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_UPVOTE TIME_LINE_TYPE = 22 // playroom点赞 TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CHAMPSHIP TIME_LINE_TYPE = 23 // 竞标赛排名 - TIME_LINE_TYPE_LOG_TYPE_TREASURE TIME_LINE_TYPE = 24 // 好友宝藏 + TIME_LINE_TYPE_LOG_TYPE_TREASURE TIME_LINE_TYPE = 24 // 宠物宝藏 TIME_LINE_TYPE_LOG_TYPE_CARD_SEND_ACCEPT TIME_LINE_TYPE = 25 // 收到赠送卡牌 TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_WIN TIME_LINE_TYPE = 26 // 小猫游戏,给小猫成功装箱 TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_LOSE TIME_LINE_TYPE = 27 // 小猫游戏,装箱小猫未成功 TIME_LINE_TYPE_LOG_TYPE_CARD_GIVE_ACCEPT TIME_LINE_TYPE = 28 // 接受卡牌请求 TIME_LINE_TYPE_LOG_TYPE_FRIEND_INVITE TIME_LINE_TYPE = 29 // 邀请注册 - TIME_LINE_TYPE_LOG_TYPE_TREASURE_HELP TIME_LINE_TYPE = 30 // 好友宝藏帮助 + TIME_LINE_TYPE_LOG_TYPE_TREASURE_HELP TIME_LINE_TYPE = 30 // 宠物宝藏帮助 TIME_LINE_TYPE_LOG_TYPE_FRIEND_SPONSOR TIME_LINE_TYPE = 31 // 好友赞助体力 TIME_LINE_TYPE_LOG_TYPE_FRIEND_SPONSOR_GET TIME_LINE_TYPE = 32 // 获得好友赞助体力 ) @@ -728,7 +728,7 @@ var ( 16: "LOG_TYPE_HANDBOOK", 17: "LOG_TYPE_HANDBOOK_UPVOTE", 18: "LOG_TYPE_CHARGE_SEND", - 19: "LOG_TYPE_CHARGE_RECEIVE", + 19: "LOG_TYPE_CHARGE_RECEIVED", 20: "LOG_TYPE_WISH", 21: "LOG_TYPE_FRIEND_BECOME_NPC", 22: "LOG_TYPE_PLAYROOM_UPVOTE", @@ -761,7 +761,7 @@ var ( "LOG_TYPE_HANDBOOK": 16, "LOG_TYPE_HANDBOOK_UPVOTE": 17, "LOG_TYPE_CHARGE_SEND": 18, - "LOG_TYPE_CHARGE_RECEIVE": 19, + "LOG_TYPE_CHARGE_RECEIVED": 19, "LOG_TYPE_WISH": 20, "LOG_TYPE_FRIEND_BECOME_NPC": 21, "LOG_TYPE_PLAYROOM_UPVOTE": 22, @@ -1183,7 +1183,7 @@ func (FRIEND_REPLY_HANDLE_ERR_TYPE) EnumDescriptor() ([]byte, []int) { type ClientReq struct { state protoimpl.MessageState `protogen:"open.v1"` - Func string `protobuf:"bytes,1,opt,name=func,proto3" json:"func,omitempty"` // serverMode/functionID; + Func string `protobuf:"bytes,1,opt,name=func,proto3" json:"func,omitempty"` // serverMode/functionID Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"` Info []byte `protobuf:"bytes,3,opt,name=info,proto3" json:"info,omitempty"` SessionId string `protobuf:"bytes,4,opt,name=sessionId,proto3" json:"sessionId,omitempty"` @@ -1994,7 +1994,7 @@ type ReqRegisterAccount struct { UserName string `protobuf:"bytes,1,opt,name=UserName,proto3" json:"UserName,omitempty"` UserPwd string `protobuf:"bytes,2,opt,name=UserPwd,proto3" json:"UserPwd,omitempty"` DwUin int32 `protobuf:"varint,3,opt,name=dwUin,proto3" json:"dwUin,omitempty"` - Device string `protobuf:"bytes,4,opt,name=Device,proto3" json:"Device,omitempty"` // 设备标识; + Device string `protobuf:"bytes,4,opt,name=Device,proto3" json:"Device,omitempty"` // 设备标识 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2107,9 +2107,9 @@ type ReqLogin struct { state protoimpl.MessageState `protogen:"open.v1"` UserName string `protobuf:"bytes,1,opt,name=UserName,proto3" json:"UserName,omitempty"` UserPwd string `protobuf:"bytes,2,opt,name=UserPwd,proto3" json:"UserPwd,omitempty"` - Code string `protobuf:"bytes,3,opt,name=Code,proto3" json:"Code,omitempty"` // 验证码; - Device string `protobuf:"bytes,4,opt,name=Device,proto3" json:"Device,omitempty"` // 设备标识; - Type LOGIN_TYPE `protobuf:"varint,5,opt,name=type,proto3,enum=tutorial.LOGIN_TYPE" json:"type,omitempty"` // 登录方式; + Code string `protobuf:"bytes,3,opt,name=Code,proto3" json:"Code,omitempty"` // 验证码 + Device string `protobuf:"bytes,4,opt,name=Device,proto3" json:"Device,omitempty"` // 设备标识 + Type LOGIN_TYPE `protobuf:"varint,5,opt,name=type,proto3,enum=tutorial.LOGIN_TYPE" json:"type,omitempty"` // 登录方式 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2181,7 +2181,7 @@ func (x *ReqLogin) GetType() LOGIN_TYPE { type ReqLoginCode struct { state protoimpl.MessageState `protogen:"open.v1"` - TelPhone string `protobuf:"bytes,1,opt,name=TelPhone,proto3" json:"TelPhone,omitempty"` // 手机号码; + TelPhone string `protobuf:"bytes,1,opt,name=TelPhone,proto3" json:"TelPhone,omitempty"` // 手机号码 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2225,9 +2225,9 @@ func (x *ReqLoginCode) GetTelPhone() string { type ResLoginCode struct { state protoimpl.MessageState `protogen:"open.v1"` - ResultCode int32 `protobuf:"varint,1,opt,name=ResultCode,proto3" json:"ResultCode,omitempty"` // 0 成功 其他失败; - Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` // 错误信息; - Code string `protobuf:"bytes,3,opt,name=Code,proto3" json:"Code,omitempty"` // 验证码 TODO 测试; + ResultCode int32 `protobuf:"varint,1,opt,name=ResultCode,proto3" json:"ResultCode,omitempty"` // 0 成功 其他失败 + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` // 错误信息 + Code string `protobuf:"bytes,3,opt,name=Code,proto3" json:"Code,omitempty"` // 验证码 TODO 测试 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2285,8 +2285,8 @@ func (x *ResLoginCode) GetCode() string { type ReqId2Verify struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // 身份证号码; - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 姓名; + Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // 身份证号码 + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 姓名 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2337,8 +2337,8 @@ func (x *ReqId2Verify) GetName() string { type ResId2Verify struct { state protoimpl.MessageState `protogen:"open.v1"` - ResultCode RES_CODE `protobuf:"varint,1,opt,name=ResultCode,proto3,enum=tutorial.RES_CODE" json:"ResultCode,omitempty"` // 0 成功 其他失败; - Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` // 错误信息; + ResultCode RES_CODE `protobuf:"varint,1,opt,name=ResultCode,proto3,enum=tutorial.RES_CODE" json:"ResultCode,omitempty"` // 0 成功 其他失败 + Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` // 错误信息 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2394,7 +2394,7 @@ type ResLogin struct { DwUin int64 `protobuf:"varint,2,opt,name=dwUin,proto3" json:"dwUin,omitempty"` UserName string `protobuf:"bytes,3,opt,name=UserName,proto3" json:"UserName,omitempty"` FaceBookId string `protobuf:"bytes,4,opt,name=FaceBookId,proto3" json:"FaceBookId,omitempty"` - Msg string `protobuf:"bytes,5,opt,name=Msg,proto3" json:"Msg,omitempty"` // 错误信息; + Msg string `protobuf:"bytes,5,opt,name=Msg,proto3" json:"Msg,omitempty"` // 错误信息 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2467,7 +2467,7 @@ func (x *ResLogin) GetMsg() string { type ReqChangePassword struct { state protoimpl.MessageState `protogen:"open.v1"` UserName string `protobuf:"bytes,1,opt,name=UserName,proto3" json:"UserName,omitempty"` - OldPwd string `protobuf:"bytes,2,opt,name=OldPwd,proto3" json:"OldPwd,omitempty"` // -1表示不校验旧密码; + OldPwd string `protobuf:"bytes,2,opt,name=OldPwd,proto3" json:"OldPwd,omitempty"` // -1表示不校验旧密码 NewPwd string `protobuf:"bytes,3,opt,name=NewPwd,proto3" json:"NewPwd,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -2628,7 +2628,7 @@ type ResPlayerBaseInfo struct { Guild int32 `protobuf:"varint,10,opt,name=guild,proto3" json:"guild,omitempty"` PackUnlockCount int32 `protobuf:"varint,11,opt,name=pack_unlock_count,json=packUnlockCount,proto3" json:"pack_unlock_count,omitempty"` LastPlayTime int32 `protobuf:"varint,12,opt,name=last_play_time,json=lastPlayTime,proto3" json:"last_play_time,omitempty"` - EnergyBuyCount int32 `protobuf:"varint,13,opt,name=EnergyBuyCount,proto3" json:"EnergyBuyCount,omitempty"` + Ban int64 `protobuf:"varint,13,opt,name=ban,proto3" json:"ban,omitempty"` UserName string `protobuf:"bytes,14,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` LoginTime int32 `protobuf:"varint,15,opt,name=login_time,json=loginTime,proto3" json:"login_time,omitempty"` LogoutTime int32 `protobuf:"varint,16,opt,name=logout_time,json=logoutTime,proto3" json:"logout_time,omitempty"` @@ -2758,9 +2758,9 @@ func (x *ResPlayerBaseInfo) GetLastPlayTime() int32 { return 0 } -func (x *ResPlayerBaseInfo) GetEnergyBuyCount() int32 { +func (x *ResPlayerBaseInfo) GetBan() int64 { if x != nil { - return x.EnergyBuyCount + return x.Ban } return 0 } @@ -2890,8 +2890,8 @@ type ResPlayerAsset struct { Exp int32 `protobuf:"varint,7,opt,name=exp,proto3" json:"exp,omitempty"` Login int32 `protobuf:"varint,8,opt,name=Login,proto3" json:"Login,omitempty"` Logout int32 `protobuf:"varint,9,opt,name=Logout,proto3" json:"Logout,omitempty"` - PExp int32 `protobuf:"varint,10,opt,name=PExp,proto3" json:"PExp,omitempty"` // 玩家经验; - LoginDay int32 `protobuf:"varint,11,opt,name=LoginDay,proto3" json:"LoginDay,omitempty"` // 登录天数; + PExp int32 `protobuf:"varint,10,opt,name=PExp,proto3" json:"PExp,omitempty"` // 玩家经验 + LoginDay int32 `protobuf:"varint,11,opt,name=LoginDay,proto3" json:"LoginDay,omitempty"` // 登录天数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3461,8 +3461,8 @@ type ResPlayerChessInfo struct { ChessBag *ChessBag `protobuf:"bytes,3,opt,name=ChessBag,proto3" json:"ChessBag,omitempty"` RetireEmit []string `protobuf:"bytes,4,rep,name=RetireEmit,proto3" json:"RetireEmit,omitempty"` Honor []int32 `protobuf:"varint,5,rep,packed,name=Honor,proto3" json:"Honor,omitempty"` - PartBag *PartBag `protobuf:"bytes,6,opt,name=PartBag,proto3" json:"PartBag,omitempty"` // 满级零件; - RetireReward []string `protobuf:"bytes,7,rep,name=RetireReward,proto3" json:"RetireReward,omitempty"` // 退役奖励; + PartBag *PartBag `protobuf:"bytes,6,opt,name=PartBag,proto3" json:"PartBag,omitempty"` // 满级零件 + RetireReward []string `protobuf:"bytes,7,rep,name=RetireReward,proto3" json:"RetireReward,omitempty"` // 退役奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3548,7 +3548,7 @@ func (x *ResPlayerChessInfo) GetRetireReward() []string { type ReqGetChessRetireReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // 发射器系列ID:A、B、C...; + Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // 发射器系列ID:A、B、C... unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3594,7 +3594,7 @@ type ResGetChessRetireReward struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=code,proto3,enum=tutorial.RES_CODE" json:"code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` - Id string `protobuf:"bytes,3,opt,name=Id,proto3" json:"Id,omitempty"` // 发射器系列ID:A、B、C...; + Id string `protobuf:"bytes,3,opt,name=Id,proto3" json:"Id,omitempty"` // 发射器系列ID:A、B、C... unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3652,7 +3652,7 @@ func (x *ResGetChessRetireReward) GetId() string { type PartBag struct { state protoimpl.MessageState `protogen:"open.v1"` - PartBagGrids []*PartBagGrid `protobuf:"bytes,1,rep,name=PartBagGrids,proto3" json:"PartBagGrids,omitempty"` //已解锁零件背包格子; + PartBagGrids []*PartBagGrid `protobuf:"bytes,1,rep,name=PartBagGrids,proto3" json:"PartBagGrids,omitempty"` //已解锁零件背包格子 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3696,8 +3696,8 @@ func (x *PartBag) GetPartBagGrids() []*PartBagGrid { type PartBagGrid struct { state protoimpl.MessageState `protogen:"open.v1"` - PartId int32 `protobuf:"varint,1,opt,name=PartId,proto3" json:"PartId,omitempty"` //零件ID; - Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` //数量; + PartId int32 `protobuf:"varint,1,opt,name=PartId,proto3" json:"PartId,omitempty"` //零件ID + Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` //数量 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3748,7 +3748,7 @@ func (x *PartBagGrid) GetCount() int32 { type ReqPutPartInBag struct { state protoimpl.MessageState `protogen:"open.v1"` - ChessId int32 `protobuf:"varint,1,opt,name=ChessId,proto3" json:"ChessId,omitempty"` //零件ID; + ChessId int32 `protobuf:"varint,1,opt,name=ChessId,proto3" json:"ChessId,omitempty"` //零件ID MChessData map[string]int32 `protobuf:"bytes,2,rep,name=mChessData,proto3" json:"mChessData,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -3857,7 +3857,7 @@ type ChessHandle struct { Emit int32 `protobuf:"varint,2,opt,name=Emit,proto3" json:"Emit,omitempty"` ChessId int32 `protobuf:"varint,3,opt,name=ChessId,proto3" json:"ChessId,omitempty"` Id int32 `protobuf:"varint,4,opt,name=Id,proto3" json:"Id,omitempty"` - ActType []int32 `protobuf:"varint,5,rep,packed,name=ActType,proto3" json:"ActType,omitempty"` // 活动类型; + ActType []int32 `protobuf:"varint,5,rep,packed,name=ActType,proto3" json:"ActType,omitempty"` // 活动类型 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4361,9 +4361,9 @@ type ReqChessEx struct { OldChessId int32 `protobuf:"varint,1,opt,name=OldChessId,proto3" json:"OldChessId,omitempty"` NewChessId int32 `protobuf:"varint,2,opt,name=NewChessId,proto3" json:"NewChessId,omitempty"` CostDia int32 `protobuf:"varint,3,opt,name=CostDia,proto3" json:"CostDia,omitempty"` - Type CHESS_EX_TYPE `protobuf:"varint,4,opt,name=Type,proto3,enum=tutorial.CHESS_EX_TYPE" json:"Type,omitempty"` //1 气泡 2 宝箱解锁 3 快捷购买 4 限时事件气泡; + Type CHESS_EX_TYPE `protobuf:"varint,4,opt,name=Type,proto3,enum=tutorial.CHESS_EX_TYPE" json:"Type,omitempty"` //1 气泡 2 宝箱解锁 3 快捷购买 4 限时事件气泡 MChessData map[string]int32 `protobuf:"bytes,5,rep,name=mChessData,proto3" json:"mChessData,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` - CostStar int32 `protobuf:"varint,6,opt,name=CostStar,proto3" json:"CostStar,omitempty"` // 消耗星星; + CostStar int32 `protobuf:"varint,6,opt,name=CostStar,proto3" json:"CostStar,omitempty"` // 消耗星星 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4603,7 +4603,7 @@ type ReqPlayroomOutline struct { OldChessId int32 `protobuf:"varint,1,opt,name=OldChessId,proto3" json:"OldChessId,omitempty"` NewChessId int32 `protobuf:"varint,2,opt,name=NewChessId,proto3" json:"NewChessId,omitempty"` CostDia int32 `protobuf:"varint,3,opt,name=CostDia,proto3" json:"CostDia,omitempty"` - Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` //1 气泡 2 宝箱解锁 3 快捷购买 4 打工离线; + Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` //1 气泡 2 宝箱解锁 3 快捷购买 4 打工离线 MChessData map[string]int32 `protobuf:"bytes,5,rep,name=mChessData,proto3" json:"mChessData,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -4729,9 +4729,9 @@ func (x *ResPlayroomOutline) GetMsg() string { // 棋盘背包 type ChessBag struct { state protoimpl.MessageState `protogen:"open.v1"` - ChessBagGrids []*ChessBagGrid `protobuf:"bytes,1,rep,name=ChessBagGrids,proto3" json:"ChessBagGrids,omitempty"` //已解锁棋盘背包格子; - ChessBuyCnt int32 `protobuf:"varint,2,opt,name=ChessBuyCnt,proto3" json:"ChessBuyCnt,omitempty"` //已购买棋盘格子数; - ChessFreeCnt int32 `protobuf:"varint,3,opt,name=ChessFreeCnt,proto3" json:"ChessFreeCnt,omitempty"` //剩余免费解锁次数; + ChessBagGrids []*ChessBagGrid `protobuf:"bytes,1,rep,name=ChessBagGrids,proto3" json:"ChessBagGrids,omitempty"` //已解锁棋盘背包格子 + ChessBuyCnt int32 `protobuf:"varint,2,opt,name=ChessBuyCnt,proto3" json:"ChessBuyCnt,omitempty"` //已购买棋盘格子数 + ChessFreeCnt int32 `protobuf:"varint,3,opt,name=ChessFreeCnt,proto3" json:"ChessFreeCnt,omitempty"` //剩余免费解锁次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4789,9 +4789,9 @@ func (x *ChessBag) GetChessFreeCnt() int32 { type ChessBagGrid struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //格子ID; - ChessId int32 `protobuf:"varint,2,opt,name=ChessId,proto3" json:"ChessId,omitempty"` //棋子ID; - EmitId int32 `protobuf:"varint,3,opt,name=EmitId,proto3" json:"EmitId,omitempty"` //发射器ID; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //格子ID + ChessId int32 `protobuf:"varint,2,opt,name=ChessId,proto3" json:"ChessId,omitempty"` //棋子ID + EmitId int32 `protobuf:"varint,3,opt,name=EmitId,proto3" json:"EmitId,omitempty"` //发射器ID unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4852,7 +4852,7 @@ type ReqPutChessInBag struct { state protoimpl.MessageState `protogen:"open.v1"` ChessId int32 `protobuf:"varint,1,opt,name=ChessId,proto3" json:"ChessId,omitempty"` BagId int32 `protobuf:"varint,2,opt,name=BagId,proto3" json:"BagId,omitempty"` - EmitId int32 `protobuf:"varint,3,opt,name=EmitId,proto3" json:"EmitId,omitempty"` //发射器ID; + EmitId int32 `protobuf:"varint,3,opt,name=EmitId,proto3" json:"EmitId,omitempty"` //发射器ID MChessData map[string]int32 `protobuf:"bytes,4,rep,name=mChessData,proto3" json:"mChessData,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -5369,7 +5369,7 @@ type ResPlayerBriefProfileData struct { NickName string `protobuf:"bytes,5,opt,name=NickName,proto3" json:"NickName,omitempty"` PicURL string `protobuf:"bytes,6,opt,name=PicURL,proto3" json:"PicURL,omitempty"` ActiveTime int32 `protobuf:"varint,7,opt,name=ActiveTime,proto3" json:"ActiveTime,omitempty"` - SetEmoji map[int32]int32 `protobuf:"bytes,8,rep,name=SetEmoji,proto3" json:"SetEmoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 已设置的头像; + SetEmoji map[int32]int32 `protobuf:"bytes,11,rep,name=SetEmoji,proto3" json:"SetEmoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 已设置的头像 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5560,7 +5560,7 @@ func (x *ResSetEnergyMul) GetMsg() string { // 设置能量倍数 type ReqLang struct { state protoimpl.MessageState `protogen:"open.v1"` - Lang LANG_TYPE `protobuf:"varint,1,opt,name=Lang,proto3,enum=tutorial.LANG_TYPE" json:"Lang,omitempty"` // 语言 1 英文 0 中文; + Lang LANG_TYPE `protobuf:"varint,1,opt,name=Lang,proto3,enum=tutorial.LANG_TYPE" json:"Lang,omitempty"` // 语言 1 英文 0 中文 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5656,11 +5656,11 @@ func (x *ResLang) GetMsg() string { type BaseInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - EnergyMul int32 `protobuf:"varint,1,opt,name=EnergyMul,proto3" json:"EnergyMul,omitempty"` // 能量倍数; - IsFirstBuy bool `protobuf:"varint,2,opt,name=IsFirstBuy,proto3" json:"IsFirstBuy,omitempty"` // 是否已第一次购买体力商店; - EnergyBuy int32 `protobuf:"varint,3,opt,name=EnergyBuy,proto3" json:"EnergyBuy,omitempty"` // 今日体力商店购买次数; - EnergyAD int32 `protobuf:"varint,4,opt,name=EnergyAD,proto3" json:"EnergyAD,omitempty"` // 今日看广告获取体力次数; - Lang LANG_TYPE `protobuf:"varint,5,opt,name=Lang,proto3,enum=tutorial.LANG_TYPE" json:"Lang,omitempty"` // 语言 1 英文 2 中文; + EnergyMul int32 `protobuf:"varint,1,opt,name=EnergyMul,proto3" json:"EnergyMul,omitempty"` // 能量倍数 + IsFirstBuy bool `protobuf:"varint,2,opt,name=IsFirstBuy,proto3" json:"IsFirstBuy,omitempty"` // 是否已第一次购买体力商店 + EnergyBuy int32 `protobuf:"varint,3,opt,name=EnergyBuy,proto3" json:"EnergyBuy,omitempty"` // 今日体力商店购买次数 + EnergyAD int32 `protobuf:"varint,4,opt,name=EnergyAD,proto3" json:"EnergyAD,omitempty"` // 今日看广告获取体力次数 + Lang LANG_TYPE `protobuf:"varint,5,opt,name=Lang,proto3,enum=tutorial.LANG_TYPE" json:"Lang,omitempty"` // 语言 1 英文 2 中文 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5775,12 +5775,12 @@ type UserInfo struct { DecorateCnt int32 `protobuf:"varint,5,opt,name=DecorateCnt,proto3" json:"DecorateCnt,omitempty"` AvatarList []*AvatarInfo `protobuf:"bytes,6,rep,name=AvatarList,proto3" json:"AvatarList,omitempty"` FaceList []*FaceInfo `protobuf:"bytes,7,rep,name=FaceList,proto3" json:"FaceList,omitempty"` - Login int32 `protobuf:"varint,8,opt,name=Login,proto3" json:"Login,omitempty"` // 登录; - PetName string `protobuf:"bytes,9,opt,name=PetName,proto3" json:"PetName,omitempty"` //宠物名字; - EmojiList []*EmojiInfo `protobuf:"bytes,10,rep,name=EmojiList,proto3" json:"EmojiList,omitempty"` // 表情列表; - SetEmoji map[int32]int32 `protobuf:"bytes,11,rep,name=SetEmoji,proto3" json:"SetEmoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 已设置的头像; - IdNum string `protobuf:"bytes,12,opt,name=IdNum,proto3" json:"IdNum,omitempty"` // 身份证号码; - AddCode string `protobuf:"bytes,13,opt,name=AddCode,proto3" json:"AddCode,omitempty"` // 邀请码; + Login int32 `protobuf:"varint,8,opt,name=Login,proto3" json:"Login,omitempty"` // 登录 + PetName string `protobuf:"bytes,9,opt,name=PetName,proto3" json:"PetName,omitempty"` //宠物名字 + EmojiList []*EmojiInfo `protobuf:"bytes,10,rep,name=EmojiList,proto3" json:"EmojiList,omitempty"` // 表情列表 + SetEmoji map[int32]int32 `protobuf:"bytes,11,rep,name=SetEmoji,proto3" json:"SetEmoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 已设置的头像 + IdNum string `protobuf:"bytes,12,opt,name=IdNum,proto3" json:"IdNum,omitempty"` // 身份证号码 + AddCode string `protobuf:"bytes,13,opt,name=AddCode,proto3" json:"AddCode,omitempty"` // 邀请码 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6103,7 +6103,7 @@ func (x *ResSetPetName) GetMsg() string { // 购买能量 type ReqBuyEnergy struct { state protoimpl.MessageState `protogen:"open.v1"` - Energy int32 `protobuf:"varint,1,opt,name=Energy,proto3" json:"Energy,omitempty"` // 购买体力; + Energy int32 `protobuf:"varint,1,opt,name=Energy,proto3" json:"Energy,omitempty"` // 购买体力 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6437,7 +6437,7 @@ func (x *HandbookInfo) GetStatus() int32 { type Handbook struct { state protoimpl.MessageState `protogen:"open.v1"` Handbooks []*HandbookInfo `protobuf:"bytes,1,rep,name=Handbooks,proto3" json:"Handbooks,omitempty"` - Collect []string `protobuf:"bytes,2,rep,name=Collect,proto3" json:"Collect,omitempty"` // 全收集奖励; + Collect []string `protobuf:"bytes,2,rep,name=Collect,proto3" json:"Collect,omitempty"` // 全收集奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6488,7 +6488,7 @@ func (x *Handbook) GetCollect() []string { type RegHandbookAllReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Type string `protobuf:"bytes,1,opt,name=Type,proto3" json:"Type,omitempty"` // "棋子系列 A B C"; + Type string `protobuf:"bytes,1,opt,name=Type,proto3" json:"Type,omitempty"` // "棋子系列 A B C" unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6586,7 +6586,7 @@ type ReqRewardOrder struct { state protoimpl.MessageState `protogen:"open.v1"` OrderId int32 `protobuf:"varint,1,opt,name=OrderId,proto3" json:"OrderId,omitempty"` MChessData map[string]int32 `protobuf:"bytes,2,rep,name=mChessData,proto3" json:"mChessData,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` - ActType []int32 `protobuf:"varint,3,rep,packed,name=ActType,proto3" json:"ActType,omitempty"` // 活动类型; + ActType []int32 `protobuf:"varint,3,rep,packed,name=ActType,proto3" json:"ActType,omitempty"` // 活动类型 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6921,7 +6921,7 @@ type Order struct { Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` ChessId []int32 `protobuf:"varint,2,rep,packed,name=ChessId,proto3" json:"ChessId,omitempty"` Type int32 `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"` - Items []*ItemInfo `protobuf:"bytes,4,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励; + Items []*ItemInfo `protobuf:"bytes,4,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7033,8 +7033,8 @@ type ResDecorateInfo struct { state protoimpl.MessageState `protogen:"open.v1"` AreaId int32 `protobuf:"varint,1,opt,name=AreaId,proto3" json:"AreaId,omitempty"` MFinishList []int32 `protobuf:"varint,2,rep,packed,name=mFinishList,proto3" json:"mFinishList,omitempty"` - RewardArea []int32 `protobuf:"varint,3,rep,packed,name=RewardArea,proto3" json:"RewardArea,omitempty"` // 已领取区域奖励; - Parts []*DecoratePart `protobuf:"bytes,4,rep,name=Parts,proto3" json:"Parts,omitempty"` // 零件; + RewardArea []int32 `protobuf:"varint,3,rep,packed,name=RewardArea,proto3" json:"RewardArea,omitempty"` // 已领取区域奖励 + Parts []*DecoratePart `protobuf:"bytes,4,rep,name=Parts,proto3" json:"Parts,omitempty"` // 零件 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7100,7 +7100,7 @@ func (x *ResDecorateInfo) GetParts() []*DecoratePart { type DecoratePart struct { state protoimpl.MessageState `protogen:"open.v1"` Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 零件; + Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 零件 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7583,20 +7583,20 @@ func (*ReqCardInfo) Descriptor() ([]byte, []int) { type ResCardInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - CardList []*Card `protobuf:"bytes,1,rep,name=CardList,proto3" json:"CardList,omitempty"` // 卡牌列表; - ExStar int32 `protobuf:"varint,2,opt,name=ExStar,proto3" json:"ExStar,omitempty"` // 额外星级; - Status int32 `protobuf:"varint,3,opt,name=Status,proto3" json:"Status,omitempty"` // 全收集奖励0:未领取 1:已领取; - CollectId []int32 `protobuf:"varint,4,rep,packed,name=CollectId,proto3" json:"CollectId,omitempty"` // 已领取的收集奖励; - ExTimes int32 `protobuf:"varint,5,opt,name=ExTimes,proto3" json:"ExTimes,omitempty"` //剩余交换次数; - ReqTimes int32 `protobuf:"varint,6,opt,name=ReqTimes,proto3" json:"ReqTimes,omitempty"` //剩余请求次数; - AllCard map[int32]int32 `protobuf:"bytes,7,rep,name=AllCard,proto3" json:"AllCard,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 万能卡牌; - EndTime int32 `protobuf:"varint,8,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //周期结束时间; - ReqUid []int64 `protobuf:"varint,9,rep,packed,name=ReqUid,proto3" json:"ReqUid,omitempty"` // 今日已请求的Uid; - ExUid []int64 `protobuf:"varint,10,rep,packed,name=ExUid,proto3" json:"ExUid,omitempty"` // 今日已置换的Uid; - GoldTimes int32 `protobuf:"varint,11,opt,name=GoldTimes,proto3" json:"GoldTimes,omitempty"` //剩余金卡交换次数; - Round int32 `protobuf:"varint,12,opt,name=Round,proto3" json:"Round,omitempty"` // 轮次; - Handbook map[int32]int32 `protobuf:"bytes,13,rep,name=Handbook,proto3" json:"Handbook,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 图鉴 CardId => Status 1:已解锁 2:已领取; - SeasonFirst bool `protobuf:"varint,14,opt,name=SeasonFirst,proto3" json:"SeasonFirst,omitempty"` // 是否已领取赛季初奖励; + CardList []*Card `protobuf:"bytes,1,rep,name=CardList,proto3" json:"CardList,omitempty"` // 卡牌列表 + ExStar int32 `protobuf:"varint,2,opt,name=ExStar,proto3" json:"ExStar,omitempty"` // 额外星级 + Status int32 `protobuf:"varint,3,opt,name=Status,proto3" json:"Status,omitempty"` // 全收集奖励0:未领取 1:已领取 + CollectId []int32 `protobuf:"varint,4,rep,packed,name=CollectId,proto3" json:"CollectId,omitempty"` // 已领取的收集奖励 + ExTimes int32 `protobuf:"varint,5,opt,name=ExTimes,proto3" json:"ExTimes,omitempty"` //剩余交换次数 + ReqTimes int32 `protobuf:"varint,6,opt,name=ReqTimes,proto3" json:"ReqTimes,omitempty"` //剩余请求次数 + AllCard map[int32]int32 `protobuf:"bytes,7,rep,name=AllCard,proto3" json:"AllCard,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 万能卡牌 + EndTime int32 `protobuf:"varint,8,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //周期结束时间 + ReqUid []int64 `protobuf:"varint,9,rep,packed,name=ReqUid,proto3" json:"ReqUid,omitempty"` // 今日已请求的Uid + ExUid []int64 `protobuf:"varint,10,rep,packed,name=ExUid,proto3" json:"ExUid,omitempty"` // 今日已置换的Uid + GoldTimes int32 `protobuf:"varint,11,opt,name=GoldTimes,proto3" json:"GoldTimes,omitempty"` //剩余金卡交换次数 + Round int32 `protobuf:"varint,12,opt,name=Round,proto3" json:"Round,omitempty"` // 轮次 + Handbook map[int32]int32 `protobuf:"bytes,13,rep,name=Handbook,proto3" json:"Handbook,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 图鉴 CardId => Status 1:已解锁 2:已领取 + SeasonFirst bool `protobuf:"varint,14,opt,name=SeasonFirst,proto3" json:"SeasonFirst,omitempty"` // 是否已领取赛季初奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7731,11 +7731,11 @@ func (x *ResCardInfo) GetSeasonFirst() bool { type ResNotifyCardTimes struct { state protoimpl.MessageState `protogen:"open.v1"` - ExTimes int32 `protobuf:"varint,1,opt,name=ExTimes,proto3" json:"ExTimes,omitempty"` //剩余兑换次数; - ReqTimes int32 `protobuf:"varint,2,opt,name=ReqTimes,proto3" json:"ReqTimes,omitempty"` //剩余请求次数; - ReqUid []int64 `protobuf:"varint,3,rep,packed,name=ReqUid,proto3" json:"ReqUid,omitempty"` // 今日已请求的Uid; - ExUid []int64 `protobuf:"varint,4,rep,packed,name=ExUid,proto3" json:"ExUid,omitempty"` // 今日已置换的Uid; - GoldTimes int32 `protobuf:"varint,5,opt,name=GoldTimes,proto3" json:"GoldTimes,omitempty"` //剩余金卡交换次数; + ExTimes int32 `protobuf:"varint,1,opt,name=ExTimes,proto3" json:"ExTimes,omitempty"` //剩余兑换次数 + ReqTimes int32 `protobuf:"varint,2,opt,name=ReqTimes,proto3" json:"ReqTimes,omitempty"` //剩余请求次数 + ReqUid []int64 `protobuf:"varint,3,rep,packed,name=ReqUid,proto3" json:"ReqUid,omitempty"` // 今日已请求的Uid + ExUid []int64 `protobuf:"varint,4,rep,packed,name=ExUid,proto3" json:"ExUid,omitempty"` // 今日已置换的Uid + GoldTimes int32 `protobuf:"varint,5,opt,name=GoldTimes,proto3" json:"GoldTimes,omitempty"` //剩余金卡交换次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8001,8 +8001,8 @@ func (x *ResCardHandbookReward) GetCardId() int32 { // 万能卡兑换 type ReqMasterCard struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 万能卡id 6 普通 7 金卡; - CardId int32 `protobuf:"varint,2,opt,name=CardId,proto3" json:"CardId,omitempty"` // 兑换的卡id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 万能卡id 6 普通 7 金卡 + CardId int32 `protobuf:"varint,2,opt,name=CardId,proto3" json:"CardId,omitempty"` // 兑换的卡id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8510,7 +8510,7 @@ func (x *ResCardGive) GetMsg() string { // 同意请求卡牌 type ReqAgreeCardGive struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // Id; + Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8615,7 +8615,7 @@ func (x *ResAgreeCardGive) GetId() string { // 拒绝请求卡牌 type ReqRefuseCardGive struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // Id; + Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` // Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8722,7 +8722,7 @@ type ReqCardSend struct { state protoimpl.MessageState `protogen:"open.v1"` Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` CardId int32 `protobuf:"varint,2,opt,name=CardId,proto3" json:"CardId,omitempty"` - Emoji int32 `protobuf:"varint,3,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id; + Emoji int32 `protobuf:"varint,3,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8835,7 +8835,7 @@ type ReqCardExchange struct { state protoimpl.MessageState `protogen:"open.v1"` Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` CardId int32 `protobuf:"varint,2,opt,name=CardId,proto3" json:"CardId,omitempty"` - Emoji int32 `protobuf:"varint,3,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id; + Emoji int32 `protobuf:"varint,3,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9106,7 +9106,7 @@ type ResAgreeCardExchange struct { Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` Id string `protobuf:"bytes,3,opt,name=Id,proto3" json:"Id,omitempty"` - Emoji int32 `protobuf:"varint,4,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id; + Emoji int32 `protobuf:"varint,4,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9430,7 +9430,7 @@ type ResGetFriendCard struct { Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` Id string `protobuf:"bytes,3,opt,name=Id,proto3" json:"Id,omitempty"` CardId int32 `protobuf:"varint,4,opt,name=CardId,proto3" json:"CardId,omitempty"` - Emoji int32 `protobuf:"varint,5,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id; + Emoji int32 `protobuf:"varint,5,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9539,8 +9539,8 @@ func (*ReqGetGoldCard) Descriptor() ([]byte, []int) { type ResGetGoldCard struct { state protoimpl.MessageState `protogen:"open.v1"` - Four int32 `protobuf:"varint,1,opt,name=Four,proto3" json:"Four,omitempty"` // 四星金卡; - Five int32 `protobuf:"varint,2,opt,name=Five,proto3" json:"Five,omitempty"` // 五星金卡; + Four int32 `protobuf:"varint,1,opt,name=Four,proto3" json:"Four,omitempty"` // 四星金卡 + Five int32 `protobuf:"varint,2,opt,name=Five,proto3" json:"Five,omitempty"` // 五星金卡 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9873,9 +9873,9 @@ func (x *ResGuideInfo) GetReward() map[int32]int32 { type ResItemPop struct { state protoimpl.MessageState `protogen:"open.v1"` Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` - Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 道具; - CardPacks []*CardPack `protobuf:"bytes,3,rep,name=CardPacks,proto3" json:"CardPacks,omitempty"` // 卡包; - Lable string `protobuf:"bytes,4,opt,name=Lable,proto3" json:"Lable,omitempty"` // 标签; + Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 道具 + CardPacks []*CardPack `protobuf:"bytes,3,rep,name=CardPacks,proto3" json:"CardPacks,omitempty"` // 卡包 + Lable string `protobuf:"bytes,4,opt,name=Lable,proto3" json:"Lable,omitempty"` // 标签 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9992,7 +9992,7 @@ func (x *ItemInfo) GetNum() int32 { type CardPack struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 卡包id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 卡包id Card []int32 `protobuf:"varint,2,rep,packed,name=Card,proto3" json:"Card,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -10045,10 +10045,10 @@ func (x *CardPack) GetCard() []int32 { // 新手任务 type ResGuideTask struct { state protoimpl.MessageState `protogen:"open.v1"` - ActiveReward []int32 `protobuf:"varint,1,rep,packed,name=ActiveReward,proto3" json:"ActiveReward,omitempty"` //已领取活跃度奖励; - Task map[int32]*GuideTask `protobuf:"bytes,2,rep,name=Task,proto3" json:"Task,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //任务进度; - Active int32 `protobuf:"varint,3,opt,name=Active,proto3" json:"Active,omitempty"` //活跃度; - UnlockTime int32 `protobuf:"varint,4,opt,name=UnlockTime,proto3" json:"UnlockTime,omitempty"` // 功能解锁时间; + ActiveReward []int32 `protobuf:"varint,1,rep,packed,name=ActiveReward,proto3" json:"ActiveReward,omitempty"` //已领取活跃度奖励 + Task map[int32]*GuideTask `protobuf:"bytes,2,rep,name=Task,proto3" json:"Task,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //任务进度 + Active int32 `protobuf:"varint,3,opt,name=Active,proto3" json:"Active,omitempty"` //活跃度 + UnlockTime int32 `protobuf:"varint,4,opt,name=UnlockTime,proto3" json:"UnlockTime,omitempty"` // 功能解锁时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10113,9 +10113,9 @@ func (x *ResGuideTask) GetUnlockTime() int32 { type GuideTask struct { state protoimpl.MessageState `protogen:"open.v1"` - Status int32 `protobuf:"varint,1,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未完成, 1已完成 2已领取; - Progress *QuestProgress `protobuf:"bytes,2,opt,name=Progress,proto3" json:"Progress,omitempty"` //任务进度; - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` //任务id; + Status int32 `protobuf:"varint,1,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未完成, 1已完成 2已领取 + Progress *QuestProgress `protobuf:"bytes,2,opt,name=Progress,proto3" json:"Progress,omitempty"` //任务进度 + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` //任务id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10173,7 +10173,7 @@ func (x *GuideTask) GetId() int32 { type ReqGetGuideTaskReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10219,7 +10219,7 @@ type ResGetGuideTaskReward struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10277,7 +10277,7 @@ func (x *ResGetGuideTaskReward) GetId() int32 { type ReqGetGuideActiveReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 进度奖励id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 进度奖励id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10323,7 +10323,7 @@ type ResGetGuideActiveReward struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 进度奖励id; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 进度奖励id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10382,11 +10382,11 @@ func (x *ResGetGuideActiveReward) GetId() int32 { // 日常任务 type ResDailyTask struct { state protoimpl.MessageState `protogen:"open.v1"` - WeekReward map[int32]*DailyWeek `protobuf:"bytes,1,rep,name=WeekReward,proto3" json:"WeekReward,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //周奖励; - DailyTask map[int32]*DailyTask `protobuf:"bytes,2,rep,name=DailyTask,proto3" json:"DailyTask,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //任务进度; - Active int32 `protobuf:"varint,3,opt,name=Active,proto3" json:"Active,omitempty"` //活跃度; - DayEnd int32 `protobuf:"varint,4,opt,name=DayEnd,proto3" json:"DayEnd,omitempty"` // 日结束时间戳; - WeekEnd int32 `protobuf:"varint,5,opt,name=WeekEnd,proto3" json:"WeekEnd,omitempty"` //周结束时间戳; + WeekReward map[int32]*DailyWeek `protobuf:"bytes,1,rep,name=WeekReward,proto3" json:"WeekReward,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //周奖励 + DailyTask map[int32]*DailyTask `protobuf:"bytes,2,rep,name=DailyTask,proto3" json:"DailyTask,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //任务进度 + Active int32 `protobuf:"varint,3,opt,name=Active,proto3" json:"Active,omitempty"` //活跃度 + DayEnd int32 `protobuf:"varint,4,opt,name=DayEnd,proto3" json:"DayEnd,omitempty"` // 日结束时间戳 + WeekEnd int32 `protobuf:"varint,5,opt,name=WeekEnd,proto3" json:"WeekEnd,omitempty"` //周结束时间戳 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10458,9 +10458,9 @@ func (x *ResDailyTask) GetWeekEnd() int32 { type DailyWeek struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ItemInfo `protobuf:"bytes,1,rep,name=Items,proto3" json:"Items,omitempty"` //奖励; - Status bool `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未领取 1:已领取; - NeedActive int32 `protobuf:"varint,3,opt,name=NeedActive,proto3" json:"NeedActive,omitempty"` //需要的活跃度; + Items []*ItemInfo `protobuf:"bytes,1,rep,name=Items,proto3" json:"Items,omitempty"` //奖励 + Status bool `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未领取 1:已领取 + NeedActive int32 `protobuf:"varint,3,opt,name=NeedActive,proto3" json:"NeedActive,omitempty"` //需要的活跃度 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10518,12 +10518,12 @@ func (x *DailyWeek) GetNeedActive() int32 { type DailyTask struct { state protoimpl.MessageState `protogen:"open.v1"` - Status int32 `protobuf:"varint,1,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未完成, 1已完成 2已领取; - UnLock bool `protobuf:"varint,2,opt,name=UnLock,proto3" json:"UnLock,omitempty"` //是否解锁 0:未解锁 1:已解锁; - Progress *QuestProgress `protobuf:"bytes,3,opt,name=Progress,proto3" json:"Progress,omitempty"` //任务进度; - Items []*ItemInfo `protobuf:"bytes,4,rep,name=Items,proto3" json:"Items,omitempty"` //奖励; - Id int32 `protobuf:"varint,5,opt,name=Id,proto3" json:"Id,omitempty"` //任务id; - Index int32 `protobuf:"varint,6,opt,name=Index,proto3" json:"Index,omitempty"` //任务索引; + Status int32 `protobuf:"varint,1,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未完成, 1已完成 2已领取 + UnLock bool `protobuf:"varint,2,opt,name=UnLock,proto3" json:"UnLock,omitempty"` //是否解锁 0:未解锁 1:已解锁 + Progress *QuestProgress `protobuf:"bytes,3,opt,name=Progress,proto3" json:"Progress,omitempty"` //任务进度 + Items []*ItemInfo `protobuf:"bytes,4,rep,name=Items,proto3" json:"Items,omitempty"` //奖励 + Id int32 `protobuf:"varint,5,opt,name=Id,proto3" json:"Id,omitempty"` //任务id + Index int32 `protobuf:"varint,6,opt,name=Index,proto3" json:"Index,omitempty"` //任务索引 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10602,11 +10602,11 @@ func (x *DailyTask) GetIndex() int32 { type QuestProgress struct { state protoimpl.MessageState `protogen:"open.v1"` - Label string `protobuf:"bytes,1,opt,name=Label,proto3" json:"Label,omitempty"` //任务标签; - Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` //当前进度; - Target int32 `protobuf:"varint,3,opt,name=Target,proto3" json:"Target,omitempty"` //目标; - Status bool `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未完成, 1已完成; - Param int32 `protobuf:"varint,5,opt,name=Param,proto3" json:"Param,omitempty"` //参数; + Label string `protobuf:"bytes,1,opt,name=Label,proto3" json:"Label,omitempty"` //任务标签 + Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` //当前进度 + Target int32 `protobuf:"varint,3,opt,name=Target,proto3" json:"Target,omitempty"` //目标 + Status bool `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未完成, 1已完成 + Param int32 `protobuf:"varint,5,opt,name=Param,proto3" json:"Param,omitempty"` //参数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -11012,9 +11012,9 @@ func (x *ResFaceInfo) GetSetId() int32 { type FaceInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 头像id; - EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 头像id + EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -11220,9 +11220,9 @@ func (x *ResAvatarInfo) GetSetId() int32 { type AvatarInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 头像框id; - EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 头像框id + EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -11377,9 +11377,9 @@ func (x *ResSetAvatar) GetMsg() string { // 表情 Emoji type EmojiInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 表情id; - EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 表情id + EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -11438,8 +11438,8 @@ func (x *EmojiInfo) GetAddTime() int64 { // 设置表情 type ReqSetEmoji struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 表情Id; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 表情类型 Greeting = 0, Happy = 1, Taunt = 2, Fail = 3; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 表情Id + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 表情类型 Greeting = 0, Happy = 1, Taunt = 2, Fail = 3 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -11543,10 +11543,10 @@ func (x *ResSetEmoji) GetMsg() string { // 七日签到 type ResSevenLogin struct { state protoimpl.MessageState `protogen:"open.v1"` - WeekReward []*SevenLoginReward `protobuf:"bytes,1,rep,name=WeekReward,proto3" json:"WeekReward,omitempty"` //周奖励; - MonthReward []*SevenLoginReward `protobuf:"bytes,2,rep,name=MonthReward,proto3" json:"MonthReward,omitempty"` //月奖励; - Active int32 `protobuf:"varint,3,opt,name=Active,proto3" json:"Active,omitempty"` //活跃度; - IsBack bool `protobuf:"varint,4,opt,name=IsBack,proto3" json:"IsBack,omitempty"` //是否召回; + WeekReward []*SevenLoginReward `protobuf:"bytes,1,rep,name=WeekReward,proto3" json:"WeekReward,omitempty"` //周奖励 + MonthReward []*SevenLoginReward `protobuf:"bytes,2,rep,name=MonthReward,proto3" json:"MonthReward,omitempty"` //月奖励 + Active int32 `protobuf:"varint,3,opt,name=Active,proto3" json:"Active,omitempty"` //活跃度 + IsBack bool `protobuf:"varint,4,opt,name=IsBack,proto3" json:"IsBack,omitempty"` //是否召回 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -11611,11 +11611,11 @@ func (x *ResSevenLogin) GetIsBack() bool { type SevenLoginReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Item1 []*ItemInfo `protobuf:"bytes,1,rep,name=Item1,proto3" json:"Item1,omitempty"` //奖励1; - Item2 []*ItemInfo `protobuf:"bytes,2,rep,name=Item2,proto3" json:"Item2,omitempty"` //奖励2; - Item3 []*ItemInfo `protobuf:"bytes,3,rep,name=Item3,proto3" json:"Item3,omitempty"` //奖励3; - Status int32 `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未领取 1:可领取 2:已领取; - Id int32 `protobuf:"varint,5,opt,name=Id,proto3" json:"Id,omitempty"` //id; + Item1 []*ItemInfo `protobuf:"bytes,1,rep,name=Item1,proto3" json:"Item1,omitempty"` //奖励1 + Item2 []*ItemInfo `protobuf:"bytes,2,rep,name=Item2,proto3" json:"Item2,omitempty"` //奖励2 + Item3 []*ItemInfo `protobuf:"bytes,3,rep,name=Item3,proto3" json:"Item3,omitempty"` //奖励3 + Status int32 `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未领取 1:可领取 2:已领取 + Id int32 `protobuf:"varint,5,opt,name=Id,proto3" json:"Id,omitempty"` //id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -11926,13 +11926,13 @@ func (x *ResActivity) GetActiveList() []*ActivityInfo { type ActivityInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //id; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` //类型; - StartTime int32 `protobuf:"varint,3,opt,name=StartTime,proto3" json:"StartTime,omitempty"` //开始时间; - EndTime int32 `protobuf:"varint,4,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //结束时间; - Status int32 `protobuf:"varint,5,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未开始 1:进行中 2:已结束; - Title string `protobuf:"bytes,6,opt,name=Title,proto3" json:"Title,omitempty"` //标题; - Red int32 `protobuf:"varint,7,opt,name=Red,proto3" json:"Red,omitempty"` //红点; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //id + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` //类型 + StartTime int32 `protobuf:"varint,3,opt,name=StartTime,proto3" json:"StartTime,omitempty"` //开始时间 + EndTime int32 `protobuf:"varint,4,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //结束时间 + Status int32 `protobuf:"varint,5,opt,name=Status,proto3" json:"Status,omitempty"` //状态 0:未开始 1:进行中 2:已结束 + Title string `protobuf:"bytes,6,opt,name=Title,proto3" json:"Title,omitempty"` //标题 + Red int32 `protobuf:"varint,7,opt,name=Red,proto3" json:"Red,omitempty"` //红点 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12019,7 +12019,7 @@ func (x *ActivityInfo) GetRed() int32 { // 领取活动奖励 type ReqActivityReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //活动id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //活动id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12153,7 +12153,7 @@ func (*ReqLimitEvent) Descriptor() ([]byte, []int) { type ResLimitEvent struct { state protoimpl.MessageState `protogen:"open.v1"` - LimitEventList map[int32]*LimitEvent `protobuf:"bytes,1,rep,name=LimitEventList,proto3" json:"LimitEventList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //限时事件列表; + LimitEventList map[int32]*LimitEvent `protobuf:"bytes,1,rep,name=LimitEventList,proto3" json:"LimitEventList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //限时事件列表 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12197,9 +12197,9 @@ func (x *ResLimitEvent) GetLimitEventList() map[int32]*LimitEvent { type ResLimitEventProgress struct { state protoimpl.MessageState `protogen:"open.v1"` - ProgressMax int32 `protobuf:"varint,1,opt,name=ProgressMax,proto3" json:"ProgressMax,omitempty"` //最大进度; - Progress int32 `protobuf:"varint,2,opt,name=Progress,proto3" json:"Progress,omitempty"` //进度; - ProgressReward map[int32]int32 `protobuf:"bytes,3,rep,name=ProgressReward,proto3" json:"ProgressReward,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` //奖励 可以选择的奖励 Id =》 RewardId; + ProgressMax int32 `protobuf:"varint,1,opt,name=ProgressMax,proto3" json:"ProgressMax,omitempty"` //最大进度 + Progress int32 `protobuf:"varint,2,opt,name=Progress,proto3" json:"Progress,omitempty"` //进度 + ProgressReward map[int32]int32 `protobuf:"bytes,3,rep,name=ProgressReward,proto3" json:"ProgressReward,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` //奖励 可以选择的奖励 Id =》 RewardId unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12449,12 +12449,12 @@ func (x *ResSelectLimitEvent) GetMsg() string { type LimitEvent struct { state protoimpl.MessageState `protogen:"open.v1"` - EndTime int32 `protobuf:"varint,1,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //结束时间; - Cd int32 `protobuf:"varint,2,opt,name=Cd,proto3" json:"Cd,omitempty"` //cd; - Mul float32 `protobuf:"fixed32,3,opt,name=mul,proto3" json:"mul,omitempty"` //倍数; - StartTime int32 `protobuf:"varint,4,opt,name=StartTime,proto3" json:"StartTime,omitempty"` //开始时间; - Param map[string]int32 `protobuf:"bytes,5,rep,name=Param,proto3" json:"Param,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` //key 为枚举 LimitEventParam; - ShowTime int32 `protobuf:"varint,6,opt,name=ShowTime,proto3" json:"ShowTime,omitempty"` //显示时间; + EndTime int32 `protobuf:"varint,1,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //结束时间 + Cd int32 `protobuf:"varint,2,opt,name=Cd,proto3" json:"Cd,omitempty"` //cd + Mul float32 `protobuf:"fixed32,3,opt,name=mul,proto3" json:"mul,omitempty"` //倍数 + StartTime int32 `protobuf:"varint,4,opt,name=StartTime,proto3" json:"StartTime,omitempty"` //开始时间 + Param map[string]int32 `protobuf:"bytes,5,rep,name=Param,proto3" json:"Param,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` //key 为枚举 LimitEventParam + ShowTime int32 `protobuf:"varint,6,opt,name=ShowTime,proto3" json:"ShowTime,omitempty"` //显示时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12533,10 +12533,10 @@ func (x *LimitEvent) GetShowTime() int32 { type LimitEventNotify struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 限时事件类型; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 0 开始 1 结束; - EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //结束时间; - Cd int32 `protobuf:"varint,4,opt,name=Cd,proto3" json:"Cd,omitempty"` //cd; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 限时事件类型 + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 0 开始 1 结束 + EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //结束时间 + Cd int32 `protobuf:"varint,4,opt,name=Cd,proto3" json:"Cd,omitempty"` //cd unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12793,8 +12793,8 @@ func (x *ResLimitSenceReward) GetMsg() string { type ResChessRainReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ItemInfo `protobuf:"bytes,1,rep,name=Items,proto3" json:"Items,omitempty"` //奖励道具; - Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 转盘id; + Items []*ItemInfo `protobuf:"bytes,1,rep,name=Items,proto3" json:"Items,omitempty"` //奖励道具 + Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 转盘id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12881,9 +12881,9 @@ func (*ReqFastProduceInfo) Descriptor() ([]byte, []int) { type ResFastProduceInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Energy int32 `protobuf:"varint,1,opt,name=Energy,proto3" json:"Energy,omitempty"` // 快手能量; - Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 快手次数; - EndTime int64 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; + Energy int32 `protobuf:"varint,1,opt,name=Energy,proto3" json:"Energy,omitempty"` // 快手能量 + Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 快手次数 + EndTime int64 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13092,7 +13092,7 @@ type ResCatTrickReward struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - IsClose bool `protobuf:"varint,3,opt,name=IsClose,proto3" json:"IsClose,omitempty"` // 是否关闭; + IsClose bool `protobuf:"varint,3,opt,name=IsClose,proto3" json:"IsClose,omitempty"` // 是否关闭 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13300,14 +13300,14 @@ type ResFriendPlayerSimple struct { Login int32 `protobuf:"varint,7,opt,name=login,proto3" json:"login,omitempty"` Loginout int32 `protobuf:"varint,8,opt,name=loginout,proto3" json:"loginout,omitempty"` Facebook string `protobuf:"bytes,9,opt,name=Facebook,proto3" json:"Facebook,omitempty"` - Emoji map[int32]int32 `protobuf:"bytes,10,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情; - AddTime int64 `protobuf:"varint,11,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; - Interact int64 `protobuf:"varint,12,opt,name=Interact,proto3" json:"Interact,omitempty"` // 最后一次互动的时间; - Playroom map[int32]int32 `protobuf:"bytes,13,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id; - DressSet map[int32]int32 `protobuf:"bytes,14,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id; - Friend []int32 `protobuf:"varint,15,rep,packed,name=Friend,proto3" json:"Friend,omitempty"` // 好友列表; - Last *ActLog `protobuf:"bytes,16,opt,name=Last,proto3" json:"Last,omitempty"` // 最后一次动态; - Physiology map[int32]int32 `protobuf:"bytes,17,rep,name=Physiology,proto3" json:"Physiology,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 生理状态 位置 =》 状态; + Emoji map[int32]int32 `protobuf:"bytes,10,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情 + AddTime int64 `protobuf:"varint,11,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + Interact int64 `protobuf:"varint,12,opt,name=Interact,proto3" json:"Interact,omitempty"` // 最后一次互动的时间 + Playroom map[int32]int32 `protobuf:"bytes,13,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id + DressSet map[int32]int32 `protobuf:"bytes,14,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id + Friend []int32 `protobuf:"varint,15,rep,packed,name=Friend,proto3" json:"Friend,omitempty"` // 好友列表 + Last *ActLog `protobuf:"bytes,16,opt,name=Last,proto3" json:"Last,omitempty"` // 最后一次动态 + Physiology map[int32]int32 `protobuf:"bytes,17,rep,name=Physiology,proto3" json:"Physiology,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 生理状态 位置 =》 状态 PetName string `protobuf:"bytes,18,opt,name=PetName,proto3" json:"PetName,omitempty"` //宠物名字; unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -13480,9 +13480,9 @@ type ResPlayerSimple struct { Login int32 `protobuf:"varint,7,opt,name=login,proto3" json:"login,omitempty"` Loginout int32 `protobuf:"varint,8,opt,name=loginout,proto3" json:"loginout,omitempty"` Facebook string `protobuf:"bytes,9,opt,name=Facebook,proto3" json:"Facebook,omitempty"` - Emoji map[int32]int32 `protobuf:"bytes,10,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情; - AddTime int64 `protobuf:"varint,11,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; - Interact int64 `protobuf:"varint,12,opt,name=Interact,proto3" json:"Interact,omitempty"` // 最后一次互动的时间; + Emoji map[int32]int32 `protobuf:"bytes,10,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情 + AddTime int64 `protobuf:"varint,11,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + Interact int64 `protobuf:"varint,12,opt,name=Interact,proto3" json:"Interact,omitempty"` // 最后一次互动的时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13669,7 +13669,7 @@ type ResPlayerRank struct { Avatar int32 `protobuf:"varint,4,opt,name=Avatar,proto3" json:"Avatar,omitempty"` Level int32 `protobuf:"varint,5,opt,name=Level,proto3" json:"Level,omitempty"` Score float32 `protobuf:"fixed32,6,opt,name=score,proto3" json:"score,omitempty"` - Type int32 `protobuf:"varint,7,opt,name=type,proto3" json:"type,omitempty"` // 排行类型 0:玩家 2:机器人; + Type int32 `protobuf:"varint,7,opt,name=type,proto3" json:"type,omitempty"` // 排行类型 0:玩家 2:机器人 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13760,7 +13760,7 @@ type ResFriendLog struct { Time int32 `protobuf:"varint,3,opt,name=Time,proto3" json:"Time,omitempty"` Param string `protobuf:"bytes,4,opt,name=Param,proto3" json:"Param,omitempty"` Id int32 `protobuf:"varint,5,opt,name=Id,proto3" json:"Id,omitempty"` - Upvote bool `protobuf:"varint,6,opt,name=Upvote,proto3" json:"Upvote,omitempty"` // 是否点赞; + Upvote bool `protobuf:"varint,6,opt,name=Upvote,proto3" json:"Upvote,omitempty"` // 是否点赞 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13840,7 +13840,7 @@ func (x *ResFriendLog) GetUpvote() bool { type NotifyFriendLog struct { state protoimpl.MessageState `protogen:"open.v1"` Info *ResFriendLog `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` - Bubble *FriendBubbleInfo `protobuf:"bytes,2,opt,name=Bubble,proto3" json:"Bubble,omitempty"` // 气泡; + Bubble *FriendBubbleInfo `protobuf:"bytes,2,opt,name=Bubble,proto3" json:"Bubble,omitempty"` // 气泡 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13891,9 +13891,9 @@ func (x *NotifyFriendLog) GetBubble() *FriendBubbleInfo { type FriendBubbleInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2:; - Items []*ItemInfo `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2: + Items []*ItemInfo `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -14006,7 +14006,7 @@ type ResFriendCard struct { ExCardId int32 `protobuf:"varint,9,opt,name=ExCardId,proto3" json:"ExCardId,omitempty"` Status int32 `protobuf:"varint,10,opt,name=Status,proto3" json:"Status,omitempty"` Id string `protobuf:"bytes,11,opt,name=Id,proto3" json:"Id,omitempty"` - Emoji int32 `protobuf:"varint,12,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id; + Emoji int32 `protobuf:"varint,12,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -14223,7 +14223,7 @@ func (x *ResKv) GetKv() map[int32]string { type ReqFriendByCode struct { state protoimpl.MessageState `protogen:"open.v1"` - Code string `protobuf:"bytes,1,opt,name=Code,proto3" json:"Code,omitempty"` // 邀请码; + Code string `protobuf:"bytes,1,opt,name=Code,proto3" json:"Code,omitempty"` // 邀请码 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -14269,7 +14269,7 @@ type ResFriendByCode struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Player *ResPlayerSimple `protobuf:"bytes,3,opt,name=Player,proto3" json:"Player,omitempty"` // 玩家信息; + Player *ResPlayerSimple `protobuf:"bytes,3,opt,name=Player,proto3" json:"Player,omitempty"` // 玩家信息 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -14543,9 +14543,9 @@ func (*ReqFriendList) Descriptor() ([]byte, []int) { type ResFriendList struct { state protoimpl.MessageState `protogen:"open.v1"` FriendList []*ResPlayerSimple `protobuf:"bytes,1,rep,name=FriendList,proto3" json:"FriendList,omitempty"` - ReqApplyList []int64 `protobuf:"varint,2,rep,packed,name=ReqApplyList,proto3" json:"ReqApplyList,omitempty"` // 已申请好友列表; - Npc []int32 `protobuf:"varint,3,rep,packed,name=Npc,proto3" json:"Npc,omitempty"` // npc列表; - Sponsor int32 `protobuf:"varint,4,opt,name=Sponsor,proto3" json:"Sponsor,omitempty"` // 今日赞助次数; + ReqApplyList []int64 `protobuf:"varint,3,rep,packed,name=ReqApplyList,proto3" json:"ReqApplyList,omitempty"` // 已申请好友列表 + Npc []int32 `protobuf:"varint,2,rep,packed,name=Npc,proto3" json:"Npc,omitempty"` // npc列表 + Sponsor int32 `protobuf:"varint,4,opt,name=Sponsor,proto3" json:"Sponsor,omitempty"` // 今日赞助次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -15203,14 +15203,14 @@ func (x *ResFriendTimeLine) GetReply() []*ResFriendReply { type ResFriendReply struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 回复id; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 回复类型 1:打招呼 2:被打招呼; - Param string `protobuf:"bytes,3,opt,name=Param,proto3" json:"Param,omitempty"` // 回复内容; - Status int32 `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` // 状态 0:未处理 1:已处理; - AddTime int64 `protobuf:"varint,5,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; - EndTime int64 `protobuf:"varint,6,opt,name=EndTime,proto3" json:"EndTime,omitempty"` //; - Player *ResPlayerSimple `protobuf:"bytes,7,opt,name=Player,proto3" json:"Player,omitempty"` // 玩家信息; - Items []*ItemInfo `protobuf:"bytes,8,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 回复id + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 回复类型 1:打招呼 2:被打招呼 + Param string `protobuf:"bytes,3,opt,name=Param,proto3" json:"Param,omitempty"` // 回复内容 + Status int32 `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` // 状态 0:未处理 1:已处理 + AddTime int64 `protobuf:"varint,5,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + EndTime int64 `protobuf:"varint,6,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // + Player *ResPlayerSimple `protobuf:"bytes,7,opt,name=Player,proto3" json:"Player,omitempty"` // 玩家信息 + Items []*ItemInfo `protobuf:"bytes,8,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -15303,9 +15303,9 @@ func (x *ResFriendReply) GetItems() []*ItemInfo { type ReqFriendReplyHandle struct { state protoimpl.MessageState `protogen:"open.v1"` - LogId int32 `protobuf:"varint,1,opt,name=LogId,proto3" json:"LogId,omitempty"` // 时间线id; - Param string `protobuf:"bytes,2,opt,name=Param,proto3" json:"Param,omitempty"` // 回复内容; - Type int32 `protobuf:"varint,3,opt,name=Type,proto3" json:"Type,omitempty"` // 回复类型 1:处理 2:删除 3:查看; + LogId int32 `protobuf:"varint,1,opt,name=LogId,proto3" json:"LogId,omitempty"` // 时间线id + Param string `protobuf:"bytes,2,opt,name=Param,proto3" json:"Param,omitempty"` // 回复内容 + Type int32 `protobuf:"varint,3,opt,name=Type,proto3" json:"Type,omitempty"` // 回复类型 1:处理 2:删除 3:查看 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -15365,7 +15365,7 @@ type ResFriendReplyHandle struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - LogId int32 `protobuf:"varint,3,opt,name=LogId,proto3" json:"LogId,omitempty"` // 时间线id; + LogId int32 `protobuf:"varint,3,opt,name=LogId,proto3" json:"LogId,omitempty"` // 时间线id Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` // 回复类型 1:处理 2:删除 3:查看; ErrType FRIEND_REPLY_HANDLE_ERR_TYPE `protobuf:"varint,5,opt,name=ErrType,proto3,enum=tutorial.FRIEND_REPLY_HANDLE_ERR_TYPE" json:"ErrType,omitempty"` // 错误类型; unknownFields protoimpl.UnknownFields @@ -15439,7 +15439,7 @@ func (x *ResFriendReplyHandle) GetErrType() FRIEND_REPLY_HANDLE_ERR_TYPE { type ResFriendBubble struct { state protoimpl.MessageState `protogen:"open.v1"` - Bubble []*FriendBubbleInfo `protobuf:"bytes,1,rep,name=Bubble,proto3" json:"Bubble,omitempty"` // 气泡; + Bubble []*FriendBubbleInfo `protobuf:"bytes,1,rep,name=Bubble,proto3" json:"Bubble,omitempty"` // 气泡 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -15753,7 +15753,7 @@ func (x *ResFriendApplyNotify) GetTime() int32 { type ResFriendReplyNotify struct { state protoimpl.MessageState `protogen:"open.v1"` - Info *ResFriendLog `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` + Info *ResFriendReply `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 1:打招呼 2:被打招呼; Time int32 `protobuf:"varint,3,opt,name=Time,proto3" json:"Time,omitempty"` unknownFields protoimpl.UnknownFields @@ -15790,7 +15790,7 @@ func (*ResFriendReplyNotify) Descriptor() ([]byte, []int) { return file_proto_Gameapi_proto_rawDescGZIP(), []int{259} } -func (x *ResFriendReplyNotify) GetInfo() *ResFriendLog { +func (x *ResFriendReplyNotify) GetInfo() *ResFriendReply { if x != nil { return x.Info } @@ -15815,7 +15815,7 @@ func (x *ResFriendReplyNotify) GetTime() int32 { type ReqApplyFriend struct { state protoimpl.MessageState `protogen:"open.v1"` Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 0:普通请求 1:赞助请求; + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 0:普通请求 1:赞助请求 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -16250,7 +16250,7 @@ func (x *ResDelFriend) GetUid() int64 { // 玩家榜单 type ReqRank struct { state protoimpl.MessageState `protogen:"open.v1"` - Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 1:玩家榜单 2:全球榜单; + Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 1:玩家榜单 2:全球榜单 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -16294,10 +16294,10 @@ func (x *ReqRank) GetType() int32 { type ResRank struct { state protoimpl.MessageState `protogen:"open.v1"` - Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 榜单类型; - RankList map[int32]*ResPlayerSimple `protobuf:"bytes,2,rep,name=RankList,proto3" json:"RankList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 榜单数据; - MyRank int32 `protobuf:"varint,3,opt,name=MyRank,proto3" json:"MyRank,omitempty"` // 我的排行; - MyScore float32 `protobuf:"fixed32,4,opt,name=MyScore,proto3" json:"MyScore,omitempty"` //我的积分; + Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 榜单类型 + RankList map[int32]*ResPlayerSimple `protobuf:"bytes,2,rep,name=RankList,proto3" json:"RankList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 榜单数据 + MyRank int32 `protobuf:"varint,3,opt,name=MyRank,proto3" json:"MyRank,omitempty"` // 我的排行 + MyScore float32 `protobuf:"fixed32,4,opt,name=MyScore,proto3" json:"MyScore,omitempty"` //我的积分 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -16443,20 +16443,20 @@ func (x *ResMailList) GetMailList() map[int32]*MailInfo { type MailInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 邮件id; - Title string `protobuf:"bytes,2,opt,name=Title,proto3" json:"Title,omitempty"` // 标题; - Content string `protobuf:"bytes,3,opt,name=Content,proto3" json:"Content,omitempty"` // 内容; - Time int32 `protobuf:"varint,4,opt,name=Time,proto3" json:"Time,omitempty"` // 时间; - Status int32 `protobuf:"varint,5,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未读 1 已读 2 已领取 3 已删除; - Items []*ItemInfo `protobuf:"bytes,6,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励; - Type int32 `protobuf:"varint,7,opt,name=Type,proto3" json:"Type,omitempty"` //邮件类型 1普通邮件 2节日邮件 3 礼包邮件; - TitleEn string `protobuf:"bytes,8,opt,name=TitleEn,proto3" json:"TitleEn,omitempty"` // 英文标题; - ContentEn string `protobuf:"bytes,9,opt,name=ContentEn,proto3" json:"ContentEn,omitempty"` // 英文内容; - SubTitle string `protobuf:"bytes,10,opt,name=SubTitle,proto3" json:"SubTitle,omitempty"` // 子标题; - SubTitleEn string `protobuf:"bytes,11,opt,name=SubTitleEn,proto3" json:"SubTitleEn,omitempty"` // 英文子标题; - TitlePtBr string `protobuf:"bytes,12,opt,name=TitlePtBr,proto3" json:"TitlePtBr,omitempty"` // 葡萄牙标题; - ContentPtBr string `protobuf:"bytes,13,opt,name=ContentPtBr,proto3" json:"ContentPtBr,omitempty"` // 葡萄牙内容; - SubTitlePtBr string `protobuf:"bytes,14,opt,name=SubTitlePtBr,proto3" json:"SubTitlePtBr,omitempty"` // 葡萄牙子标题; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 邮件id + Title string `protobuf:"bytes,2,opt,name=Title,proto3" json:"Title,omitempty"` // 标题 + Content string `protobuf:"bytes,3,opt,name=Content,proto3" json:"Content,omitempty"` // 内容 + Time int32 `protobuf:"varint,4,opt,name=Time,proto3" json:"Time,omitempty"` // 时间 + Status int32 `protobuf:"varint,5,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未读 1 已读 2 已领取 3 已删除 + Items []*ItemInfo `protobuf:"bytes,6,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励 + Type int32 `protobuf:"varint,7,opt,name=Type,proto3" json:"Type,omitempty"` //邮件类型 1普通邮件 2节日邮件 3 礼包邮件 + TitleEn string `protobuf:"bytes,8,opt,name=TitleEn,proto3" json:"TitleEn,omitempty"` // 英文标题 + ContentEn string `protobuf:"bytes,9,opt,name=ContentEn,proto3" json:"ContentEn,omitempty"` // 英文内容 + SubTitle string `protobuf:"bytes,10,opt,name=SubTitle,proto3" json:"SubTitle,omitempty"` // 子标题 + SubTitleEn string `protobuf:"bytes,11,opt,name=SubTitleEn,proto3" json:"SubTitleEn,omitempty"` // 英文子标题 + TitlePtBr string `protobuf:"bytes,12,opt,name=TitlePtBr,proto3" json:"TitlePtBr,omitempty"` // 葡萄牙标题 + ContentPtBr string `protobuf:"bytes,13,opt,name=ContentPtBr,proto3" json:"ContentPtBr,omitempty"` // 葡萄牙内容 + SubTitlePtBr string `protobuf:"bytes,14,opt,name=SubTitlePtBr,proto3" json:"SubTitlePtBr,omitempty"` // 葡萄牙子标题 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -16950,23 +16950,23 @@ func (x *ResDeleteMail) GetId() int32 { type ResCharge struct { state protoimpl.MessageState `protogen:"open.v1"` - Charge float32 `protobuf:"fixed32,1,opt,name=Charge,proto3" json:"Charge,omitempty"` // 总充值金额; - Total int32 `protobuf:"varint,2,opt,name=Total,proto3" json:"Total,omitempty"` // 总充值次数; - First []int32 `protobuf:"varint,3,rep,packed,name=First,proto3" json:"First,omitempty"` //已首充档次; - SpecialShop map[int32]*ResSpecialShop `protobuf:"bytes,4,rep,name=SpecialShop,proto3" json:"SpecialShop,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 特惠礼包; - FreeShop int32 `protobuf:"varint,5,opt,name=FreeShop,proto3" json:"FreeShop,omitempty"` // 已领取免费礼包档次; - ChessShop map[int32]*ResChessShop `protobuf:"bytes,6,rep,name=ChessShop,proto3" json:"ChessShop,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 棋子商店; - Gift map[int32]int32 `protobuf:"bytes,7,rep,name=Gift,proto3" json:"Gift,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 礼包 礼包id =》 礼包数量; - Ad bool `protobuf:"varint,8,opt,name=Ad,proto3" json:"Ad,omitempty"` // 是否有广告礼包; - Wish *WishList `protobuf:"bytes,9,opt,name=Wish,proto3" json:"Wish,omitempty"` // 心愿单; - SpecialCharge float32 `protobuf:"fixed32,10,opt,name=SpecialCharge,proto3" json:"SpecialCharge,omitempty"` // 特35天最大充值金额; - SpecialChargeWeek int32 `protobuf:"varint,11,opt,name=SpecialChargeWeek,proto3" json:"SpecialChargeWeek,omitempty"` // 距离现在多少周; - TodayCharge float32 `protobuf:"fixed32,12,opt,name=TodayCharge,proto3" json:"TodayCharge,omitempty"` // 今日充值金额; - MonthCharge float32 `protobuf:"fixed32,13,opt,name=MonthCharge,proto3" json:"MonthCharge,omitempty"` // 本月充值金额; - AdEndTime int64 `protobuf:"varint,14,opt,name=AdEndTime,proto3" json:"AdEndTime,omitempty"` // 广告礼包结束时间; - WeeklyDiscount map[int32]*WeeklyDiscountInfo `protobuf:"bytes,15,rep,name=WeeklyDiscount,proto3" json:"WeeklyDiscount,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 每周优惠 id -> 限购次数; - PetWorkRemainTime int64 `protobuf:"varint,16,opt,name=PetWorkRemainTime,proto3" json:"PetWorkRemainTime,omitempty"` // 剩余时间; - WeeklyEndTime int64 `protobuf:"varint,17,opt,name=WeeklyEndTime,proto3" json:"WeeklyEndTime,omitempty"` // 每周优惠结束时间; + Charge float32 `protobuf:"fixed32,1,opt,name=Charge,proto3" json:"Charge,omitempty"` // 总充值金额 + Total int32 `protobuf:"varint,2,opt,name=Total,proto3" json:"Total,omitempty"` // 总充值次数 + First []int32 `protobuf:"varint,3,rep,packed,name=First,proto3" json:"First,omitempty"` //已首充档次 + SpecialShop map[int32]*ResSpecialShop `protobuf:"bytes,4,rep,name=SpecialShop,proto3" json:"SpecialShop,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 特惠礼包 + FreeShop int32 `protobuf:"varint,5,opt,name=FreeShop,proto3" json:"FreeShop,omitempty"` // 已领取免费礼包档次 + ChessShop map[int32]*ResChessShop `protobuf:"bytes,6,rep,name=ChessShop,proto3" json:"ChessShop,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 棋子商店 + Gift map[int32]int32 `protobuf:"bytes,7,rep,name=Gift,proto3" json:"Gift,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 礼包 礼包id =》 礼包数量 + Ad bool `protobuf:"varint,8,opt,name=Ad,proto3" json:"Ad,omitempty"` // 是否有广告礼包 + Wish *WishList `protobuf:"bytes,9,opt,name=Wish,proto3" json:"Wish,omitempty"` // 心愿单 + SpecialCharge float32 `protobuf:"fixed32,10,opt,name=SpecialCharge,proto3" json:"SpecialCharge,omitempty"` // 特35天最大充值金额 + SpecialChargeWeek int32 `protobuf:"varint,11,opt,name=SpecialChargeWeek,proto3" json:"SpecialChargeWeek,omitempty"` // 距离现在多少周 + TodayCharge float32 `protobuf:"fixed32,12,opt,name=TodayCharge,proto3" json:"TodayCharge,omitempty"` // 今日充值金额 + MonthCharge float32 `protobuf:"fixed32,13,opt,name=MonthCharge,proto3" json:"MonthCharge,omitempty"` // 本月充值金额 + AdEndTime int64 `protobuf:"varint,14,opt,name=AdEndTime,proto3" json:"AdEndTime,omitempty"` // 广告礼包结束时间 + WeeklyDiscount map[int32]*WeeklyDiscountInfo `protobuf:"bytes,15,rep,name=WeeklyDiscount,proto3" json:"WeeklyDiscount,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 每周优惠 id -> 限购次数 + PetWorkRemainTime int64 `protobuf:"varint,16,opt,name=PetWorkRemainTime,proto3" json:"PetWorkRemainTime,omitempty"` // 剩余时间 + WeeklyEndTime int64 `protobuf:"varint,17,opt,name=WeeklyEndTime,proto3" json:"WeeklyEndTime,omitempty"` // 每周优惠结束时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17122,8 +17122,8 @@ func (x *ResCharge) GetWeeklyEndTime() int64 { type LogoutPetWork struct { state protoimpl.MessageState `protogen:"open.v1"` - WorkTime int64 `protobuf:"varint,1,opt,name=WorkTime,proto3" json:"WorkTime,omitempty"` // 工作时间; - RemainTime int64 `protobuf:"varint,2,opt,name=RemainTime,proto3" json:"RemainTime,omitempty"` // 剩余时间; + WorkTime int64 `protobuf:"varint,1,opt,name=WorkTime,proto3" json:"WorkTime,omitempty"` // 工作时间 + RemainTime int64 `protobuf:"varint,2,opt,name=RemainTime,proto3" json:"RemainTime,omitempty"` // 剩余时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17174,9 +17174,9 @@ func (x *LogoutPetWork) GetRemainTime() int64 { type WeeklyDiscountInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 每周优惠id; - Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` // 剩余购买次数; - Discount int32 `protobuf:"varint,3,opt,name=Discount,proto3" json:"Discount,omitempty"` // 折扣百分比; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 每周优惠id + Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` // 剩余购买次数 + Discount int32 `protobuf:"varint,3,opt,name=Discount,proto3" json:"Discount,omitempty"` // 折扣百分比 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17234,9 +17234,9 @@ func (x *WeeklyDiscountInfo) GetDiscount() int32 { type WishList struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 物品id; - Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` // 心愿点数; - Uid []int64 `protobuf:"varint,3,rep,packed,name=Uid,proto3" json:"Uid,omitempty"` // 今日已发送玩家id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 物品id + Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` // 心愿点数 + Uid []int64 `protobuf:"varint,3,rep,packed,name=Uid,proto3" json:"Uid,omitempty"` // 今日已发送玩家id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17295,8 +17295,8 @@ func (x *WishList) GetUid() []int64 { // 添加心愿单 type ReqAddWish struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 商店id; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 物品类型 1 playroom商店; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 商店id + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 物品类型 1 playroom商店 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17489,7 +17489,7 @@ func (x *ResGetWish) GetMsg() string { // 发送心愿单请求 type ReqSendWishBeg struct { state protoimpl.MessageState `protogen:"open.v1"` - Uid []int64 `protobuf:"varint,1,rep,packed,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id; + Uid []int64 `protobuf:"varint,1,rep,packed,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17585,8 +17585,8 @@ func (x *ResSendWishBeg) GetMsg() string { type ResSpecialShop struct { state protoimpl.MessageState `protogen:"open.v1"` - Grade int32 `protobuf:"varint,1,opt,name=Grade,proto3" json:"Grade,omitempty"` //挡位; - Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` //剩余购买次数; + Grade int32 `protobuf:"varint,1,opt,name=Grade,proto3" json:"Grade,omitempty"` //挡位 + Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` //剩余购买次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17637,9 +17637,9 @@ func (x *ResSpecialShop) GetCount() int32 { type ResChessShop struct { state protoimpl.MessageState `protogen:"open.v1"` - Diamond int32 `protobuf:"varint,1,opt,name=Diamond,proto3" json:"Diamond,omitempty"` // 需要花费钻石; - Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` // 剩余购买数量; - ChessId int32 `protobuf:"varint,3,opt,name=ChessId,proto3" json:"ChessId,omitempty"` // 棋子id; + Diamond int32 `protobuf:"varint,1,opt,name=Diamond,proto3" json:"Diamond,omitempty"` // 需要花费钻石 + Count int32 `protobuf:"varint,2,opt,name=Count,proto3" json:"Count,omitempty"` // 剩余购买数量 + ChessId int32 `protobuf:"varint,3,opt,name=ChessId,proto3" json:"ChessId,omitempty"` // 棋子id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -18312,10 +18312,10 @@ func (x *ResEndlessReward) GetMsg() string { type ResPiggyBank struct { state protoimpl.MessageState `protogen:"open.v1"` - Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 存钱罐类型 1:充值 2:广告; - Diamond int32 `protobuf:"varint,2,opt,name=Diamond,proto3" json:"Diamond,omitempty"` // 存钱罐中的钻石; - Count int32 `protobuf:"varint,3,opt,name=Count,proto3" json:"Count,omitempty"` // 剩余可以触发的次数; - EndTime int32 `protobuf:"varint,4,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 当前存钱罐结束时间; + Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 存钱罐类型 1:充值 2:广告 + Diamond int32 `protobuf:"varint,2,opt,name=Diamond,proto3" json:"Diamond,omitempty"` // 存钱罐中的钻石 + Count int32 `protobuf:"varint,3,opt,name=Count,proto3" json:"Count,omitempty"` // 剩余可以触发的次数 + EndTime int32 `protobuf:"varint,4,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 当前存钱罐结束时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -18468,8 +18468,8 @@ func (x *ResPiggyBankReward) GetMsg() string { type ReqChargeReceive struct { state protoimpl.MessageState `protogen:"open.v1"` - Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id; - Content string `protobuf:"bytes,2,opt,name=Content,proto3" json:"Content,omitempty"` // 回复邮件内容; + Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id + Content string `protobuf:"bytes,2,opt,name=Content,proto3" json:"Content,omitempty"` // 回复邮件内容 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -18573,10 +18573,10 @@ func (x *ResChargeReceive) GetMsg() string { type ReqCreateOrderSn struct { state protoimpl.MessageState `protogen:"open.v1"` ChargeId int32 `protobuf:"varint,1,opt,name=ChargeId,proto3" json:"ChargeId,omitempty"` - PlatForm string `protobuf:"bytes,2,opt,name=PlatForm,proto3" json:"PlatForm,omitempty"` // 平台标识 测试用test; - Channel string `protobuf:"bytes,3,opt,name=channel,proto3" json:"channel,omitempty"` // 支付渠道标识 测试用test; - Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` // 订单类型 1:充值 2赠送; - Uid int64 `protobuf:"varint,5,opt,name=Uid,proto3" json:"Uid,omitempty"` // 赠送的uid; + PlatForm string `protobuf:"bytes,2,opt,name=PlatForm,proto3" json:"PlatForm,omitempty"` // 平台标识 测试用test + Channel string `protobuf:"bytes,3,opt,name=channel,proto3" json:"channel,omitempty"` // 支付渠道标识 测试用test + Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` // 订单类型 1:充值 2赠送 + Uid int64 `protobuf:"varint,5,opt,name=Uid,proto3" json:"Uid,omitempty"` // 赠送的uid unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -18648,7 +18648,7 @@ func (x *ReqCreateOrderSn) GetUid() int64 { type ResCreateOrderSn struct { state protoimpl.MessageState `protogen:"open.v1"` - OrderSn string `protobuf:"bytes,1,opt,name=OrderSn,proto3" json:"OrderSn,omitempty"` // 订单号; + OrderSn string `protobuf:"bytes,1,opt,name=OrderSn,proto3" json:"OrderSn,omitempty"` // 订单号 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -18692,10 +18692,10 @@ func (x *ResCreateOrderSn) GetOrderSn() string { type ReqShippingOrder struct { state protoimpl.MessageState `protogen:"open.v1"` - OrderSn string `protobuf:"bytes,1,opt,name=OrderSn,proto3" json:"OrderSn,omitempty"` // 订单号; - ProduceId string `protobuf:"bytes,2,opt,name=ProduceId,proto3" json:"ProduceId,omitempty"` // 商品Id; - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` // token; - Status int32 `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` // 1:支付成功 2:支付失败; + OrderSn string `protobuf:"bytes,1,opt,name=OrderSn,proto3" json:"OrderSn,omitempty"` // 订单号 + ProduceId string `protobuf:"bytes,2,opt,name=ProduceId,proto3" json:"ProduceId,omitempty"` // 商品Id + Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` // token + Status int32 `protobuf:"varint,4,opt,name=Status,proto3" json:"Status,omitempty"` // 1:支付成功 2:支付失败 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -19152,9 +19152,9 @@ func (*ReqChampshipRank) Descriptor() ([]byte, []int) { type ResChampshipRank struct { state protoimpl.MessageState `protogen:"open.v1"` - RankList map[int32]*ResPlayerRank `protobuf:"bytes,1,rep,name=RankList,proto3" json:"RankList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 榜单数据; - MyRank int32 `protobuf:"varint,2,opt,name=MyRank,proto3" json:"MyRank,omitempty"` // 我的排行; - MyScore float32 `protobuf:"fixed32,3,opt,name=MyScore,proto3" json:"MyScore,omitempty"` //我的积分; + RankList map[int32]*ResPlayerRank `protobuf:"bytes,1,rep,name=RankList,proto3" json:"RankList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 榜单数据 + MyRank int32 `protobuf:"varint,2,opt,name=MyRank,proto3" json:"MyRank,omitempty"` // 我的排行 + MyScore float32 `protobuf:"fixed32,3,opt,name=MyScore,proto3" json:"MyScore,omitempty"` //我的积分 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -19248,9 +19248,9 @@ func (*ReqChampshipPreRank) Descriptor() ([]byte, []int) { type ResChampshipPreRank struct { state protoimpl.MessageState `protogen:"open.v1"` - RankList map[int32]*ResPlayerRank `protobuf:"bytes,1,rep,name=RankList,proto3" json:"RankList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 榜单数据; - MyRank int32 `protobuf:"varint,2,opt,name=MyRank,proto3" json:"MyRank,omitempty"` // 我的排行; - MyScore float32 `protobuf:"fixed32,3,opt,name=MyScore,proto3" json:"MyScore,omitempty"` //我的积分; + RankList map[int32]*ResPlayerRank `protobuf:"bytes,1,rep,name=RankList,proto3" json:"RankList,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 榜单数据 + MyRank int32 `protobuf:"varint,2,opt,name=MyRank,proto3" json:"MyRank,omitempty"` // 我的排行 + MyScore float32 `protobuf:"fixed32,3,opt,name=MyScore,proto3" json:"MyScore,omitempty"` //我的积分 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -19308,10 +19308,10 @@ func (x *ResChampshipPreRank) GetMyScore() float32 { type ResNotifyCard struct { state protoimpl.MessageState `protogen:"open.v1"` - Card map[int32]int32 `protobuf:"bytes,1,rep,name=Card,proto3" json:"Card,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 卡牌; - Master map[int32]int32 `protobuf:"bytes,2,rep,name=Master,proto3" json:"Master,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 万能卡牌; - ExStar int32 `protobuf:"varint,3,opt,name=ExStar,proto3" json:"ExStar,omitempty"` // 额外星星; - Handbook map[int32]int32 `protobuf:"bytes,4,rep,name=Handbook,proto3" json:"Handbook,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 图鉴; + Card map[int32]int32 `protobuf:"bytes,1,rep,name=Card,proto3" json:"Card,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 卡牌 + Master map[int32]int32 `protobuf:"bytes,2,rep,name=Master,proto3" json:"Master,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 万能卡牌 + ExStar int32 `protobuf:"varint,3,opt,name=ExStar,proto3" json:"ExStar,omitempty"` // 额外星星 + Handbook map[int32]int32 `protobuf:"bytes,4,rep,name=Handbook,proto3" json:"Handbook,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 图鉴 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -19797,7 +19797,7 @@ func (x *ResGetInviteReward) GetResultCode() int32 { type ReqAutoAddInviteFriend struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // uid; + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // uid unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -19885,7 +19885,7 @@ func (x *ResAutoAddInviteFriend) GetResultCode() int32 { type ReqAutoAddInviteFriend2 struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // facebook id; + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // facebook id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20010,14 +20010,14 @@ func (*ReqMining) Descriptor() ([]byte, []int) { type ResMining struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板; - Pass int32 `protobuf:"varint,5,opt,name=Pass,proto3" json:"Pass,omitempty"` // 关卡; - Gem []int32 `protobuf:"varint,6,rep,packed,name=Gem,proto3" json:"Gem,omitempty"` // 宝石; - Map map[int32]string `protobuf:"bytes,7,rep,name=Map,proto3" json:"Map,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 地图; - Mining int32 `protobuf:"varint,8,opt,name=Mining,proto3" json:"Mining,omitempty"` // 本关挖矿次数; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板 + Pass int32 `protobuf:"varint,5,opt,name=Pass,proto3" json:"Pass,omitempty"` // 关卡 + Gem []int32 `protobuf:"varint,6,rep,packed,name=Gem,proto3" json:"Gem,omitempty"` // 宝石 + Map map[int32]string `protobuf:"bytes,7,rep,name=Map,proto3" json:"Map,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 地图 + Mining int32 `protobuf:"varint,8,opt,name=Mining,proto3" json:"Mining,omitempty"` // 本关挖矿次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20110,8 +20110,8 @@ func (x *ResMining) GetMining() int32 { type ReqMiningTake struct { state protoimpl.MessageState `protogen:"open.v1"` - Map map[int32]string `protobuf:"bytes,1,rep,name=Map,proto3" json:"Map,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 地图; - Gem int32 `protobuf:"varint,2,opt,name=Gem,proto3" json:"Gem,omitempty"` // 解锁的宝石; + Map map[int32]string `protobuf:"bytes,1,rep,name=Map,proto3" json:"Map,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 地图 + Gem int32 `protobuf:"varint,2,opt,name=Gem,proto3" json:"Gem,omitempty"` // 解锁的宝石 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20339,14 +20339,14 @@ func (*ReqActPass) Descriptor() ([]byte, []int) { type ResActPass struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板; - Score int32 `protobuf:"varint,5,opt,name=Score,proto3" json:"Score,omitempty"` // 经验; - Reward []int32 `protobuf:"varint,6,rep,packed,name=Reward,proto3" json:"Reward,omitempty"` // 奖励 已领取的奖励 Id; - LowPass bool `protobuf:"varint,7,opt,name=LowPass,proto3" json:"LowPass,omitempty"` // 是否购买低级通行证; - HighPass bool `protobuf:"varint,8,opt,name=HighPass,proto3" json:"HighPass,omitempty"` // 是否购买高级通行证; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板 + Score int32 `protobuf:"varint,6,opt,name=Score,proto3" json:"Score,omitempty"` // 经验 + Reward []int32 `protobuf:"varint,7,rep,packed,name=Reward,proto3" json:"Reward,omitempty"` // 奖励 已领取的奖励 Id + LowPass bool `protobuf:"varint,8,opt,name=LowPass,proto3" json:"LowPass,omitempty"` // 是否购买低级通行证 + HighPass bool `protobuf:"varint,9,opt,name=HighPass,proto3" json:"HighPass,omitempty"` // 是否购买高级通行证 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20477,7 +20477,7 @@ type ResActPassReward struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - RewardLevel []int32 `protobuf:"varint,3,rep,packed,name=RewardLevel,proto3" json:"RewardLevel,omitempty"` // 已领取的奖励 Id; + RewardLevel []int32 `protobuf:"varint,3,rep,packed,name=RewardLevel,proto3" json:"RewardLevel,omitempty"` // 已领取的奖励 Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20535,7 +20535,7 @@ func (x *ResActPassReward) GetRewardLevel() []int32 { type ResActRed struct { state protoimpl.MessageState `protogen:"open.v1"` - Red map[int32]int32 `protobuf:"bytes,1,rep,name=Red,proto3" json:"Red,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 活动红点; + Red map[int32]int32 `protobuf:"bytes,1,rep,name=Red,proto3" json:"Red,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 活动红点 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20721,7 +20721,7 @@ func (x *ResItem) GetItem() map[int32]int32 { type ItemNotify struct { state protoimpl.MessageState `protogen:"open.v1"` - Item map[int32]int32 `protobuf:"bytes,1,rep,name=Item,proto3" json:"Item,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 道具id =》 变化的数量; + Item map[int32]int32 `protobuf:"bytes,1,rep,name=Item,proto3" json:"Item,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 道具id =》 变化的数量 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20802,15 +20802,15 @@ func (*ReqGuessColor) Descriptor() ([]byte, []int) { type ResGuessColor struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板; - Pass int32 `protobuf:"varint,5,opt,name=Pass,proto3" json:"Pass,omitempty"` // 关卡; - MapList []*GuessColorInfo `protobuf:"bytes,6,rep,name=MapList,proto3" json:"MapList,omitempty"` // 我的错误历史; - OMap map[int32]int32 `protobuf:"bytes,7,rep,name=OMap,proto3" json:"OMap,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 对手完成进度; - WinTime int32 `protobuf:"varint,8,opt,name=WinTime,proto3" json:"WinTime,omitempty"` // 赢的次数; - Opponent *Opponent `protobuf:"bytes,9,opt,name=Opponent,proto3" json:"Opponent,omitempty"` // 对手; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板 + Pass int32 `protobuf:"varint,5,opt,name=Pass,proto3" json:"Pass,omitempty"` // 关卡 + MapList []*GuessColorInfo `protobuf:"bytes,6,rep,name=MapList,proto3" json:"MapList,omitempty"` // 我的错误历史 + OMap map[int32]int32 `protobuf:"bytes,7,rep,name=OMap,proto3" json:"OMap,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 对手完成进度 + WinTime int32 `protobuf:"varint,8,opt,name=WinTime,proto3" json:"WinTime,omitempty"` // 赢的次数 + Opponent *Opponent `protobuf:"bytes,9,opt,name=Opponent,proto3" json:"Opponent,omitempty"` // 对手 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20910,10 +20910,10 @@ func (x *ResGuessColor) GetOpponent() *Opponent { type Opponent struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` - Face int32 `protobuf:"varint,2,opt,name=Face,proto3" json:"Face,omitempty"` - Avatar int32 `protobuf:"varint,3,opt,name=Avatar,proto3" json:"Avatar,omitempty"` - Progress int32 `protobuf:"varint,4,opt,name=Progress,proto3" json:"Progress,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` + Face int32 `protobuf:"varint,3,opt,name=Face,proto3" json:"Face,omitempty"` + Avatar int32 `protobuf:"varint,4,opt,name=Avatar,proto3" json:"Avatar,omitempty"` + Progress int32 `protobuf:"varint,5,opt,name=Progress,proto3" json:"Progress,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -20979,8 +20979,8 @@ func (x *Opponent) GetProgress() int32 { // 猜颜色 type ReqGuessColorTake struct { state protoimpl.MessageState `protogen:"open.v1"` - Map *GuessColorInfo `protobuf:"bytes,1,opt,name=Map,proto3" json:"Map,omitempty"` // 我的错误历史; - OMap map[int32]int32 `protobuf:"bytes,2,rep,name=OMap,proto3" json:"OMap,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 对手完成进度; + Map *GuessColorInfo `protobuf:"bytes,1,opt,name=Map,proto3" json:"Map,omitempty"` // 我的错误历史 + OMap map[int32]int32 `protobuf:"bytes,2,rep,name=OMap,proto3" json:"OMap,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 对手完成进度 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -21031,7 +21031,7 @@ func (x *ReqGuessColorTake) GetOMap() map[int32]int32 { type GuessColorInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Map map[int32]int32 `protobuf:"bytes,1,rep,name=Map,proto3" json:"Map,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 我的错误历史; + Map map[int32]int32 `protobuf:"bytes,1,rep,name=Map,proto3" json:"Map,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 我的错误历史 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -21252,16 +21252,16 @@ func (*ReqRace) Descriptor() ([]byte, []int) { type ResRace struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板; - Pass int32 `protobuf:"varint,5,opt,name=Pass,proto3" json:"Pass,omitempty"` // 关卡; - GameStartTime int32 `protobuf:"varint,6,opt,name=GameStartTime,proto3" json:"GameStartTime,omitempty"` // 游戏开始时间; - GameEndTime int32 `protobuf:"varint,7,opt,name=GameEndTime,proto3" json:"GameEndTime,omitempty"` // 游戏结束时间; - Progress int32 `protobuf:"varint,8,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度; - Opponent []*Raceopponent `protobuf:"bytes,9,rep,name=Opponent,proto3" json:"Opponent,omitempty"` // 对手; - Rank int32 `protobuf:"varint,10,opt,name=Rank,proto3" json:"Rank,omitempty"` // 排名; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板 + Pass int32 `protobuf:"varint,5,opt,name=Pass,proto3" json:"Pass,omitempty"` // 关卡 + GameStartTime int32 `protobuf:"varint,6,opt,name=GameStartTime,proto3" json:"GameStartTime,omitempty"` // 游戏开始时间 + GameEndTime int32 `protobuf:"varint,7,opt,name=GameEndTime,proto3" json:"GameEndTime,omitempty"` // 游戏结束时间 + Progress int32 `protobuf:"varint,8,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度 + Opponent []*Raceopponent `protobuf:"bytes,9,rep,name=Opponent,proto3" json:"Opponent,omitempty"` // 对手 + Rank int32 `protobuf:"varint,10,opt,name=Rank,proto3" json:"Rank,omitempty"` // 排名 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -21657,36 +21657,36 @@ func (*ReqPlayroom) Descriptor() ([]byte, []int) { type ResPlayroom struct { state protoimpl.MessageState `protogen:"open.v1"` - Status int32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` // 状态; - Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 触发式订单奖励; - Opponent []*RoomOpponent `protobuf:"bytes,3,rep,name=Opponent,proto3" json:"Opponent,omitempty"` // 对手; - Friend []*FriendRoom `protobuf:"bytes,4,rep,name=Friend,proto3" json:"Friend,omitempty"` // 好友; - Playroom map[int32]int32 `protobuf:"bytes,5,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id; - Collect []*PlayroomCollectInfo `protobuf:"bytes,6,rep,name=collect,proto3" json:"collect,omitempty"` // 已解锁的装饰; - Mood map[int32]int32 `protobuf:"bytes,7,rep,name=Mood,proto3" json:"Mood,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 心情 <位置, 心情>; - LoseItem []*ItemInfo `protobuf:"bytes,8,rep,name=LoseItem,proto3" json:"LoseItem,omitempty"` // 损失的道具; - StartTime int32 `protobuf:"varint,9,opt,name=StartTime,proto3" json:"StartTime,omitempty"` // 开始时间; - WorkStatus int32 `protobuf:"varint,10,opt,name=WorkStatus,proto3" json:"WorkStatus,omitempty"` // 1 工作中 2 休息中; - AllMood int32 `protobuf:"varint,11,opt,name=AllMood,proto3" json:"AllMood,omitempty"` // 总心情; - Chip []*ChipInfo `protobuf:"bytes,12,rep,name=Chip,proto3" json:"Chip,omitempty"` // 碎片; - WorkOutline int32 `protobuf:"varint,13,opt,name=WorkOutline,proto3" json:"WorkOutline,omitempty"` // 离线打工状态 0 未离线 1 已离线; - Jackpot int32 `protobuf:"varint,14,opt,name=Jackpot,proto3" json:"Jackpot,omitempty"` // 每日转盘次数; + Status int32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` // 状态 + Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 触发式订单奖励 + Opponent []*RoomOpponent `protobuf:"bytes,3,rep,name=Opponent,proto3" json:"Opponent,omitempty"` // 对手 + Friend []*FriendRoom `protobuf:"bytes,4,rep,name=Friend,proto3" json:"Friend,omitempty"` // 好友 + Playroom map[int32]int32 `protobuf:"bytes,5,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id + Collect []*PlayroomCollectInfo `protobuf:"bytes,6,rep,name=collect,proto3" json:"collect,omitempty"` // 已解锁的装饰 + Mood map[int32]int32 `protobuf:"bytes,7,rep,name=Mood,proto3" json:"Mood,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 心情 <位置, 心情> + LoseItem []*ItemInfo `protobuf:"bytes,8,rep,name=LoseItem,proto3" json:"LoseItem,omitempty"` // 损失的道具 + StartTime int32 `protobuf:"varint,9,opt,name=StartTime,proto3" json:"StartTime,omitempty"` // 开始时间 + WorkStatus int32 `protobuf:"varint,10,opt,name=WorkStatus,proto3" json:"WorkStatus,omitempty"` // 1 工作中 2 休息中 + AllMood int32 `protobuf:"varint,11,opt,name=AllMood,proto3" json:"AllMood,omitempty"` // 总心情 + Chip []*ChipInfo `protobuf:"bytes,12,rep,name=Chip,proto3" json:"Chip,omitempty"` // 碎片 + WorkOutline int32 `protobuf:"varint,13,opt,name=WorkOutline,proto3" json:"WorkOutline,omitempty"` // 离线打工状态 0 未离线 1 已离线 + Jackpot int32 `protobuf:"varint,14,opt,name=Jackpot,proto3" json:"Jackpot,omitempty"` // 每日转盘次数 Physiology map[int32]int32 `protobuf:"bytes,15,rep,name=Physiology,proto3" json:"Physiology,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` - Dress map[int32]*PlayroomDress `protobuf:"bytes,16,rep,name=Dress,proto3" json:"Dress,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 服装仓库 位置 =》 服装id 位置ID: 1 帽子 2 眼镜 3 上衣 4 裤子 5 鞋子 6 连体 7 胡子 8 脸 9 美瞳; - DressSet map[int32]int32 `protobuf:"bytes,17,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id; - PetAir []*PlayroomAirInfo `protobuf:"bytes,18,rep,name=PetAir,proto3" json:"PetAir,omitempty"` // 宠物背包; - PetAirSet int32 `protobuf:"varint,19,opt,name=PetAirSet,proto3" json:"PetAirSet,omitempty"` // 宠物背包设置; - Upvote int32 `protobuf:"varint,20,opt,name=Upvote,proto3" json:"Upvote,omitempty"` // 点赞次数; - RoomPoint int32 `protobuf:"varint,21,opt,name=RoomPoint,proto3" json:"RoomPoint,omitempty"` // 房间积分; - Unlock []int32 `protobuf:"varint,22,rep,packed,name=Unlock,proto3" json:"Unlock,omitempty"` // 解锁的房间id; - DailyTask []*DailyTask `protobuf:"bytes,23,rep,name=DailyTask,proto3" json:"DailyTask,omitempty"` // 每日任务; - DailyTaskReward []int32 `protobuf:"varint,24,rep,packed,name=DailyTaskReward,proto3" json:"DailyTaskReward,omitempty"` // 任务大奖励; - InteractNum int32 `protobuf:"varint,25,opt,name=InteractNum,proto3" json:"InteractNum,omitempty"` // 互动次数; - Kiss int32 `protobuf:"varint,26,opt,name=Kiss,proto3" json:"Kiss,omitempty"` // 亲吻次数; - Revenge int64 `protobuf:"varint,27,opt,name=Revenge,proto3" json:"Revenge,omitempty"` // 复仇Uid; - AdItem []*AdItem `protobuf:"bytes,28,rep,name=AdItem,proto3" json:"AdItem,omitempty"` // 广告奖励信息; - Target *FriendRoom `protobuf:"bytes,29,opt,name=Target,proto3" json:"Target,omitempty"` // 目标房间; - WeeklyDiscount map[int32]*WeeklyDiscountInfo `protobuf:"bytes,30,rep,name=WeeklyDiscount,proto3" json:"WeeklyDiscount,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 每周优惠 id -> 限购次数; + Dress map[int32]*PlayroomDress `protobuf:"bytes,16,rep,name=Dress,proto3" json:"Dress,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 服装仓库 位置 =》 服装id 位置ID: 1 帽子 2 眼镜 3 上衣 4 裤子 5 鞋子 6 连体 7 胡子 8 脸 9 美瞳 + DressSet map[int32]int32 `protobuf:"bytes,17,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id + PetAir []*PlayroomAirInfo `protobuf:"bytes,18,rep,name=PetAir,proto3" json:"PetAir,omitempty"` // 宠物背包 + PetAirSet int32 `protobuf:"varint,19,opt,name=PetAirSet,proto3" json:"PetAirSet,omitempty"` // 宠物背包设置 + Upvote int32 `protobuf:"varint,20,opt,name=Upvote,proto3" json:"Upvote,omitempty"` // 点赞次数 + RoomPoint int32 `protobuf:"varint,21,opt,name=RoomPoint,proto3" json:"RoomPoint,omitempty"` // 房间积分 + Unlock []int32 `protobuf:"varint,22,rep,packed,name=Unlock,proto3" json:"Unlock,omitempty"` // 解锁的房间id + DailyTask []*DailyTask `protobuf:"bytes,23,rep,name=DailyTask,proto3" json:"DailyTask,omitempty"` // 每日任务 + DailyTaskReward []int32 `protobuf:"varint,24,rep,packed,name=DailyTaskReward,proto3" json:"DailyTaskReward,omitempty"` // 任务大奖励 + InteractNum int32 `protobuf:"varint,25,opt,name=InteractNum,proto3" json:"InteractNum,omitempty"` // 互动次数 + Kiss int32 `protobuf:"varint,26,opt,name=Kiss,proto3" json:"Kiss,omitempty"` // 亲吻次数 + Revenge int64 `protobuf:"varint,27,opt,name=Revenge,proto3" json:"Revenge,omitempty"` // 复仇Uid + AdItem []*AdItem `protobuf:"bytes,28,rep,name=AdItem,proto3" json:"AdItem,omitempty"` // 广告奖励信息 + Target *FriendRoom `protobuf:"bytes,29,opt,name=Target,proto3" json:"Target,omitempty"` // 目标房间 + WeeklyDiscount map[int32]*WeeklyDiscountInfo `protobuf:"bytes,30,rep,name=WeeklyDiscount,proto3" json:"WeeklyDiscount,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 每周优惠 id -> 限购次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -21933,8 +21933,8 @@ func (x *ResPlayroom) GetWeeklyDiscount() map[int32]*WeeklyDiscountInfo { type NotifyPlayroomTask struct { state protoimpl.MessageState `protogen:"open.v1"` - DailyTask []*DailyTask `protobuf:"bytes,1,rep,name=DailyTask,proto3" json:"DailyTask,omitempty"` // 每日任务; - DailyTaskReward []int32 `protobuf:"varint,2,rep,packed,name=DailyTaskReward,proto3" json:"DailyTaskReward,omitempty"` // 任务大奖励; + DailyTask []*DailyTask `protobuf:"bytes,1,rep,name=DailyTask,proto3" json:"DailyTask,omitempty"` // 每日任务 + DailyTaskReward []int32 `protobuf:"varint,2,rep,packed,name=DailyTaskReward,proto3" json:"DailyTaskReward,omitempty"` // 任务大奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -21986,7 +21986,7 @@ func (x *NotifyPlayroomTask) GetDailyTaskReward() []int32 { // 领取任务奖励 type ReqPlayroomTask struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22032,7 +22032,7 @@ type ResPlayroomTask struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22091,7 +22091,7 @@ func (x *ResPlayroomTask) GetId() int32 { // 领取任务大奖 type ReqPlayroomTaskReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 领奖类型 1 2; + Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 领奖类型 1 2 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22137,8 +22137,8 @@ type ResPlayroomTaskReward struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id; - Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` // 领奖类型 1 2; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id + Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` // 领奖类型 1 2 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22203,7 +22203,7 @@ func (x *ResPlayroomTaskReward) GetType() int32 { type ReqPlayroomUnlock struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 房间id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 房间id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22249,7 +22249,7 @@ type ResPlayroomUnlock struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 房间id; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 房间id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22307,7 +22307,7 @@ func (x *ResPlayroomUnlock) GetId() int32 { type ReqPlayroomUpvote struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 对手id; + Id int64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 对手id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22353,7 +22353,7 @@ type ResPlayroomUpvote struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int64 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 对手id; + Id int64 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 对手id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22411,7 +22411,7 @@ func (x *ResPlayroomUpvote) GetId() int64 { type PlayroomDress struct { state protoimpl.MessageState `protogen:"open.v1"` - List []*PlayroomDressInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` // 服装仓库 位置 =》 服装id; + List []*PlayroomDressInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` // 服装仓库 位置 =》 服装id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22455,10 +22455,10 @@ func (x *PlayroomDress) GetList() []*PlayroomDressInfo { type PlayroomDressInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 服装id; - EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; - Label string `protobuf:"bytes,4,opt,name=Label,proto3" json:"Label,omitempty"` // 标签; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 服装id + EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + Label string `protobuf:"bytes,4,opt,name=Label,proto3" json:"Label,omitempty"` // 标签 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22523,10 +22523,10 @@ func (x *PlayroomDressInfo) GetLabel() string { type PlayroomAirInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 服装id; - EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; - Label string `protobuf:"bytes,4,opt,name=Label,proto3" json:"Label,omitempty"` // 标签; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 服装id + EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + Label string `protobuf:"bytes,4,opt,name=Label,proto3" json:"Label,omitempty"` // 标签 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22591,10 +22591,10 @@ func (x *PlayroomAirInfo) GetLabel() string { type PlayroomCollectInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 服装id; - EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; - Label string `protobuf:"bytes,4,opt,name=Label,proto3" json:"Label,omitempty"` // 标签; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 服装id + EndTime int64 `protobuf:"varint,2,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + AddTime int64 `protobuf:"varint,3,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + Label string `protobuf:"bytes,4,opt,name=Label,proto3" json:"Label,omitempty"` // 标签 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22659,7 +22659,7 @@ func (x *PlayroomCollectInfo) GetLabel() string { type ReqPlayroomDressSet struct { state protoimpl.MessageState `protogen:"open.v1"` - DressSet map[int32]int32 `protobuf:"bytes,1,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id; + DressSet map[int32]int32 `protobuf:"bytes,1,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22755,7 +22755,7 @@ func (x *ResPlayroomDressSet) GetMsg() string { type ReqPlayroomPetAirSet struct { state protoimpl.MessageState `protogen:"open.v1"` - PetAirSet int32 `protobuf:"varint,1,opt,name=PetAirSet,proto3" json:"PetAirSet,omitempty"` // 宠物背包设置; + PetAirSet int32 `protobuf:"varint,1,opt,name=PetAirSet,proto3" json:"PetAirSet,omitempty"` // 宠物背包设置 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22939,7 +22939,7 @@ func (x *ResPlayroomWrokOutline) GetMsg() string { type NofiPlayroomStatus struct { state protoimpl.MessageState `protogen:"open.v1"` - WorkOutline int32 `protobuf:"varint,1,opt,name=WorkOutline,proto3" json:"WorkOutline,omitempty"` // 状态; + WorkOutline int32 `protobuf:"varint,1,opt,name=WorkOutline,proto3" json:"WorkOutline,omitempty"` // 状态 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -22983,8 +22983,8 @@ func (x *NofiPlayroomStatus) GetWorkOutline() int32 { type NotifyPlayroomWork struct { state protoimpl.MessageState `protogen:"open.v1"` - StartTime int32 `protobuf:"varint,1,opt,name=StartTime,proto3" json:"StartTime,omitempty"` // 开始时间; - WorkStatus int32 `protobuf:"varint,2,opt,name=WorkStatus,proto3" json:"WorkStatus,omitempty"` // 1 工作中 2 休息中; + StartTime int32 `protobuf:"varint,1,opt,name=StartTime,proto3" json:"StartTime,omitempty"` // 开始时间 + WorkStatus int32 `protobuf:"varint,2,opt,name=WorkStatus,proto3" json:"WorkStatus,omitempty"` // 1 工作中 2 休息中 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23035,9 +23035,9 @@ func (x *NotifyPlayroomWork) GetWorkStatus() int32 { type NotifyPlayroomLose struct { state protoimpl.MessageState `protogen:"open.v1"` - LoseItem []*ItemInfo `protobuf:"bytes,1,rep,name=LoseItem,proto3" json:"LoseItem,omitempty"` // 损失的道具; - Chip []*ChipInfo `protobuf:"bytes,2,rep,name=Chip,proto3" json:"Chip,omitempty"` // 碎片; - Revenge int64 `protobuf:"varint,3,opt,name=Revenge,proto3" json:"Revenge,omitempty"` // 复仇; + LoseItem []*ItemInfo `protobuf:"bytes,1,rep,name=LoseItem,proto3" json:"LoseItem,omitempty"` // 损失的道具 + Chip []*ChipInfo `protobuf:"bytes,2,rep,name=Chip,proto3" json:"Chip,omitempty"` // 碎片 + Revenge int64 `protobuf:"varint,3,opt,name=Revenge,proto3" json:"Revenge,omitempty"` // 复仇 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23095,8 +23095,8 @@ func (x *NotifyPlayroomLose) GetRevenge() int64 { type ChipInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id; - EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id; + Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 玩家id + EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23147,10 +23147,10 @@ func (x *ChipInfo) GetEmojiId() int32 { type NotifyPlayroomMood struct { state protoimpl.MessageState `protogen:"open.v1"` - AllMood int32 `protobuf:"varint,1,opt,name=AllMood,proto3" json:"AllMood,omitempty"` // 总心情; - Mood map[int32]int32 `protobuf:"bytes,2,rep,name=Mood,proto3" json:"Mood,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 心情 <位置, 心情>; - Physiology map[int32]int32 `protobuf:"bytes,3,rep,name=Physiology,proto3" json:"Physiology,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 生理 <位置, 生理>; - AdItem []*AdItem `protobuf:"bytes,4,rep,name=AdItem,proto3" json:"AdItem,omitempty"` // 广告奖励; + AllMood int32 `protobuf:"varint,1,opt,name=AllMood,proto3" json:"AllMood,omitempty"` // 总心情 + Mood map[int32]int32 `protobuf:"bytes,2,rep,name=Mood,proto3" json:"Mood,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 心情 <位置, 心情> + Physiology map[int32]int32 `protobuf:"bytes,3,rep,name=Physiology,proto3" json:"Physiology,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 生理 <位置, 生理> + AdItem []*AdItem `protobuf:"bytes,4,rep,name=AdItem,proto3" json:"AdItem,omitempty"` // 广告奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23215,9 +23215,9 @@ func (x *NotifyPlayroomMood) GetAdItem() []*AdItem { type AdItem struct { state protoimpl.MessageState `protogen:"open.v1"` - Watch int32 `protobuf:"varint,1,opt,name=Watch,proto3" json:"Watch,omitempty"` // 今日观看次数; - LastWatch int32 `protobuf:"varint,2,opt,name=LastWatch,proto3" json:"LastWatch,omitempty"` // 上次观看时间; - ItemId int32 `protobuf:"varint,3,opt,name=ItemId,proto3" json:"ItemId,omitempty"` // 道具id; + Watch int32 `protobuf:"varint,1,opt,name=Watch,proto3" json:"Watch,omitempty"` // 今日观看次数 + LastWatch int32 `protobuf:"varint,2,opt,name=LastWatch,proto3" json:"LastWatch,omitempty"` // 上次观看时间 + ItemId int32 `protobuf:"varint,3,opt,name=ItemId,proto3" json:"ItemId,omitempty"` // 道具id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23275,7 +23275,7 @@ func (x *AdItem) GetItemId() int32 { type NotifyPlayroomKiss struct { state protoimpl.MessageState `protogen:"open.v1"` - Kiss int32 `protobuf:"varint,1,opt,name=Kiss,proto3" json:"Kiss,omitempty"` // 亲吻次数; + Kiss int32 `protobuf:"varint,1,opt,name=Kiss,proto3" json:"Kiss,omitempty"` // 亲吻次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23323,7 +23323,7 @@ type FriendRoom struct { Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` Face int32 `protobuf:"varint,3,opt,name=Face,proto3" json:"Face,omitempty"` Avatar int32 `protobuf:"varint,4,opt,name=Avatar,proto3" json:"Avatar,omitempty"` - Times int32 `protobuf:"varint,5,opt,name=Times,proto3" json:"Times,omitempty"` // 以你为目标的次数; + Times int32 `protobuf:"varint,5,opt,name=Times,proto3" json:"Times,omitempty"` // 以你为目标的次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23399,7 +23399,7 @@ type RoomOpponent struct { Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` Face int32 `protobuf:"varint,3,opt,name=Face,proto3" json:"Face,omitempty"` Avatar int32 `protobuf:"varint,4,opt,name=Avatar,proto3" json:"Avatar,omitempty"` - LastTime int32 `protobuf:"varint,5,opt,name=LastTime,proto3" json:"LastTime,omitempty"` // 上次被攻击时间; + LastTime int32 `protobuf:"varint,5,opt,name=LastTime,proto3" json:"LastTime,omitempty"` // 上次被攻击时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23520,19 +23520,19 @@ type ResPlayroomInfo struct { Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Face int32 `protobuf:"varint,3,opt,name=Face,proto3" json:"Face,omitempty"` Avatar int32 `protobuf:"varint,4,opt,name=Avatar,proto3" json:"Avatar,omitempty"` - Playroom map[int32]int32 `protobuf:"bytes,5,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id; - GameId int32 `protobuf:"varint,6,opt,name=GameId,proto3" json:"GameId,omitempty"` // 游戏id; - Items map[int32]*ItemInfo `protobuf:"bytes,7,rep,name=Items,proto3" json:"Items,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 游戏奖励; - Status int32 `protobuf:"varint,8,opt,name=Status,proto3" json:"Status,omitempty"` // 状态 0 未开始 1 选择奖励 2 已结束; - Defense bool `protobuf:"varint,9,opt,name=defense,proto3" json:"defense,omitempty"` // 是否有防御; - Flip map[int32]int32 `protobuf:"bytes,10,rep,name=flip,proto3" json:"flip,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 翻牌 <位置, 牌>; - Chip int32 `protobuf:"varint,11,opt,name=Chip,proto3" json:"Chip,omitempty"` // 碎片; - PetName string `protobuf:"bytes,12,opt,name=PetName,proto3" json:"PetName,omitempty"` // 宠物名; - Emoji map[int32]int32 `protobuf:"bytes,13,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情; - Upvote bool `protobuf:"varint,14,opt,name=Upvote,proto3" json:"Upvote,omitempty"` // 是否点赞; - UpvoteCount int32 `protobuf:"varint,15,opt,name=UpvoteCount,proto3" json:"UpvoteCount,omitempty"` // 点赞次数; - DressSet map[int32]int32 `protobuf:"bytes,16,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id; - Kiss int32 `protobuf:"varint,17,opt,name=Kiss,proto3" json:"Kiss,omitempty"` // 亲吻次数; + Playroom map[int32]int32 `protobuf:"bytes,5,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id + GameId int32 `protobuf:"varint,6,opt,name=GameId,proto3" json:"GameId,omitempty"` // 游戏id + Items map[int32]*ItemInfo `protobuf:"bytes,7,rep,name=Items,proto3" json:"Items,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 游戏奖励 + Status int32 `protobuf:"varint,8,opt,name=Status,proto3" json:"Status,omitempty"` // 状态 0 未开始 1 选择奖励 2 已结束 + Defense bool `protobuf:"varint,9,opt,name=defense,proto3" json:"defense,omitempty"` // 是否有防御 + Flip map[int32]int32 `protobuf:"bytes,10,rep,name=flip,proto3" json:"flip,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 翻牌 <位置, 牌> + Chip int32 `protobuf:"varint,11,opt,name=Chip,proto3" json:"Chip,omitempty"` // 碎片 + PetName string `protobuf:"bytes,12,opt,name=PetName,proto3" json:"PetName,omitempty"` // 宠物名 + Emoji map[int32]int32 `protobuf:"bytes,13,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情 + Upvote bool `protobuf:"varint,14,opt,name=Upvote,proto3" json:"Upvote,omitempty"` // 是否点赞 + UpvoteCount int32 `protobuf:"varint,15,opt,name=UpvoteCount,proto3" json:"UpvoteCount,omitempty"` // 点赞次数 + DressSet map[int32]int32 `protobuf:"bytes,16,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id + Kiss int32 `protobuf:"varint,17,opt,name=Kiss,proto3" json:"Kiss,omitempty"` // 亲吻次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23689,7 +23689,7 @@ func (x *ResPlayroomInfo) GetKiss() int32 { // 请求翻牌 type ReqPlayroomFlip struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 翻牌位置; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 翻牌位置 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23735,8 +23735,8 @@ type ResPlayroomFlip struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 翻牌位置; - CardId int32 `protobuf:"varint,4,opt,name=CardId,proto3" json:"CardId,omitempty"` // 卡牌id; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 翻牌位置 + CardId int32 `protobuf:"varint,4,opt,name=CardId,proto3" json:"CardId,omitempty"` // 卡牌id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23802,7 +23802,7 @@ func (x *ResPlayroomFlip) GetCardId() int32 { // 引导修改playroom生理值 type ReqPlayroomGuide struct { state protoimpl.MessageState `protogen:"open.v1"` - Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` //; + Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23899,7 +23899,7 @@ func (x *ResPlayroomGuide) GetMsg() string { // 领取游戏奖励 type ReqPlayroomFlipReward struct { state protoimpl.MessageState `protogen:"open.v1"` - EmojiId int32 `protobuf:"varint,1,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id; + EmojiId int32 `protobuf:"varint,1,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -23995,8 +23995,8 @@ func (x *ResPlayroomFlipReward) GetMsg() string { type ReqPlayroomGame struct { state protoimpl.MessageState `protogen:"open.v1"` - Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 游戏结果; - EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id; + Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` // 游戏结果 + EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24050,7 +24050,7 @@ type ResPlayroomGame struct { Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` Type int32 `protobuf:"varint,3,opt,name=Type,proto3" json:"Type,omitempty"` - Items map[int32]*ItemInfo `protobuf:"bytes,4,rep,name=Items,proto3" json:"Items,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 游戏奖励; + Items map[int32]*ItemInfo `protobuf:"bytes,4,rep,name=Items,proto3" json:"Items,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 游戏奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24116,8 +24116,8 @@ func (x *ResPlayroomGame) GetItems() map[int32]*ItemInfo { // 展示游戏结果数据 type ReqPlayroomGameShowReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` //游戏结果; - SelectId int32 `protobuf:"varint,2,opt,name=SelectId,proto3" json:"SelectId,omitempty"` // 选择id; + Type int32 `protobuf:"varint,1,opt,name=Type,proto3" json:"Type,omitempty"` //游戏结果 + SelectId int32 `protobuf:"varint,2,opt,name=SelectId,proto3" json:"SelectId,omitempty"` // 选择id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24213,8 +24213,8 @@ func (x *ResPlayroomGameShowReward) GetItems() []*ItemInfo { // 宠物交互 type ReqPlayroomInteract struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 互动类型; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 1 消耗道具1 2 消耗道具2; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 互动类型 + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 1 消耗道具1 2 消耗道具2 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24267,7 +24267,7 @@ type ResPlayroomInteract struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - InteractNum int32 `protobuf:"varint,3,opt,name=InteractNum,proto3" json:"InteractNum,omitempty"` // 互动次数; + InteractNum int32 `protobuf:"varint,3,opt,name=InteractNum,proto3" json:"InteractNum,omitempty"` // 互动次数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24326,7 +24326,7 @@ func (x *ResPlayroomInteract) GetInteractNum() int32 { // playroom装饰 type ReqPlayroomSetRoom struct { state protoimpl.MessageState `protogen:"open.v1"` - Playroom map[int32]int32 `protobuf:"bytes,1,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id; + Playroom map[int32]int32 `protobuf:"bytes,1,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24422,8 +24422,8 @@ func (x *ResPlayroomSetRoom) GetMsg() string { type ReqPlayroomSelectReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 奖励id; - EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 奖励id + EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24832,7 +24832,7 @@ type ResPlayroomDraw struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 奖励Id; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 奖励Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24891,7 +24891,7 @@ func (x *ResPlayroomDraw) GetId() int32 { // 消除 纸屑 type ReqPlayroomChip struct { state protoimpl.MessageState `protogen:"open.v1"` - Uid []int64 `protobuf:"varint,1,rep,packed,name=Uid,proto3" json:"Uid,omitempty"` // 要消除的层数; + Uid []int64 `protobuf:"varint,1,rep,packed,name=Uid,proto3" json:"Uid,omitempty"` // 要消除的层数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -24987,7 +24987,7 @@ func (x *ResPlayroomChip) GetMsg() string { type ReqPlayroomBuyItem struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // Mood Id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // Mood Id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -25084,8 +25084,8 @@ func (x *ResPlayroomBuyItem) GetMsg() string { // playroom商店 购买 type ReqPlayroomShop struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 商店id; - Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 购买数量; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 商店id + Num int32 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` // 购买数量 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -25225,12 +25225,12 @@ func (*ReqFriendTreasure) Descriptor() ([]byte, []int) { type ResFriendTreasure struct { state protoimpl.MessageState `protogen:"open.v1"` - Status int32 `protobuf:"varint,1,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - Star int32 `protobuf:"varint,2,opt,name=Star,proto3" json:"Star,omitempty"` // 星级; - Shift int32 `protobuf:"varint,3,opt,name=Shift,proto3" json:"Shift,omitempty"` // 当前挡位; - List []*TreasureInfo `protobuf:"bytes,4,rep,name=List,proto3" json:"List,omitempty"` // 列表; - List2 []int32 `protobuf:"varint,5,rep,packed,name=List2,proto3" json:"List2,omitempty"` // 今日已翻玩家列表; - Uids []int64 `protobuf:"varint,6,rep,packed,name=Uids,proto3" json:"Uids,omitempty"` // 今日已翻位置列表; + Status int32 `protobuf:"varint,1,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + Star int32 `protobuf:"varint,2,opt,name=Star,proto3" json:"Star,omitempty"` // 星级 + Shift int32 `protobuf:"varint,3,opt,name=Shift,proto3" json:"Shift,omitempty"` // 当前挡位 + List []*TreasureInfo `protobuf:"bytes,4,rep,name=List,proto3" json:"List,omitempty"` // 列表 + List2 []int32 `protobuf:"varint,5,rep,packed,name=List2,proto3" json:"List2,omitempty"` // 今日已翻玩家列表 + Uids []int64 `protobuf:"varint,6,rep,packed,name=Uids,proto3" json:"Uids,omitempty"` // 今日已翻位置列表 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -25309,13 +25309,13 @@ func (x *ResFriendTreasure) GetUids() []int64 { type TreasureInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Pos int32 `protobuf:"varint,1,opt,name=Pos,proto3" json:"Pos,omitempty"` // 位置; - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 类型; - Face int32 `protobuf:"varint,3,opt,name=Face,proto3" json:"Face,omitempty"` // 头像; - Avatar int32 `protobuf:"varint,4,opt,name=Avatar,proto3" json:"Avatar,omitempty"` // 头像框; - Uid int64 `protobuf:"varint,5,opt,name=Uid,proto3" json:"Uid,omitempty"` // Uid; - Status int32 `protobuf:"varint,6,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未翻 1 已翻; - NickName string `protobuf:"bytes,7,opt,name=NickName,proto3" json:"NickName,omitempty"` // 昵称; + Pos int32 `protobuf:"varint,1,opt,name=Pos,proto3" json:"Pos,omitempty"` // 位置 + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 类型 + Face int32 `protobuf:"varint,3,opt,name=Face,proto3" json:"Face,omitempty"` // 头像 + Avatar int32 `protobuf:"varint,4,opt,name=Avatar,proto3" json:"Avatar,omitempty"` // 头像框 + Uid int64 `protobuf:"varint,5,opt,name=Uid,proto3" json:"Uid,omitempty"` // Uid + Status int32 `protobuf:"varint,6,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未翻 1 已翻 + NickName string `protobuf:"bytes,7,opt,name=NickName,proto3" json:"NickName,omitempty"` // 昵称 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -25401,7 +25401,7 @@ func (x *TreasureInfo) GetNickName() string { type ReqFriendTreasureStart struct { state protoimpl.MessageState `protogen:"open.v1"` - List []*TreasureInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` // 列表; + List []*TreasureInfo `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"` // 列表 List2 []int32 `protobuf:"varint,2,rep,packed,name=List2,proto3" json:"List2,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -25689,7 +25689,7 @@ func (x *ResFriendTreasureFilp) GetMsg() string { type ResFriendTreasureStar struct { state protoimpl.MessageState `protogen:"open.v1"` - Star int32 `protobuf:"varint,1,opt,name=Star,proto3" json:"Star,omitempty"` // 星级; + Star int32 `protobuf:"varint,1,opt,name=Star,proto3" json:"Star,omitempty"` // 星级 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -25821,8 +25821,8 @@ func (*ReqCollectInfo) Descriptor() ([]byte, []int) { type ResCollectInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id []int32 `protobuf:"varint,1,rep,packed,name=Id,proto3" json:"Id,omitempty"` // [1,10,19]; - Items []*CollectItem `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 领奖道具; + Id []int32 `protobuf:"varint,1,rep,packed,name=Id,proto3" json:"Id,omitempty"` // [1,10,19] + Items []*CollectItem `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 领奖道具 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -25873,8 +25873,8 @@ func (x *ResCollectInfo) GetItems() []*CollectItem { type CollectItem struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 索引; - Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 领奖道具; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 索引 + Items []*ItemInfo `protobuf:"bytes,2,rep,name=Items,proto3" json:"Items,omitempty"` // 领奖道具 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -25925,7 +25925,7 @@ func (x *CollectItem) GetItems() []*ItemInfo { type ReqCollect struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 领奖id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 领奖id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26060,13 +26060,13 @@ func (*ReqCatnip) Descriptor() ([]byte, []int) { type ResCatnip struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间; - Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板; - GameList []*CatnipGame `protobuf:"bytes,5,rep,name=GameList,proto3" json:"GameList,omitempty"` // 小游戏列表; - Multiply int32 `protobuf:"varint,6,opt,name=Multiply,proto3" json:"Multiply,omitempty"` // 倍数; - FriendList []*CatnipInvite `protobuf:"bytes,7,rep,name=FriendList,proto3" json:"FriendList,omitempty"` // 好友列表; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 活动id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + EndTime int32 `protobuf:"varint,3,opt,name=EndTime,proto3" json:"EndTime,omitempty"` // 结束时间 + Template int32 `protobuf:"varint,4,opt,name=Template,proto3" json:"Template,omitempty"` // 模板 + GameList []*CatnipGame `protobuf:"bytes,5,rep,name=GameList,proto3" json:"GameList,omitempty"` // 小游戏列表 + Multiply int32 `protobuf:"varint,6,opt,name=Multiply,proto3" json:"Multiply,omitempty"` // 倍数 + FriendList []*CatnipInvite `protobuf:"bytes,7,rep,name=FriendList,proto3" json:"FriendList,omitempty"` // 好友列表 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26153,12 +26153,12 @@ func (x *ResCatnip) GetFriendList() []*CatnipInvite { // 小游戏信息 type CatnipGame struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - Progress int32 `protobuf:"varint,3,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度; - Reward []int32 `protobuf:"varint,4,rep,packed,name=Reward,proto3" json:"Reward,omitempty"` // 已领取进度奖励列表 [1,2,3]; - Partner *ResPlayerSimple `protobuf:"bytes,5,opt,name=Partner,proto3" json:"Partner,omitempty"` // 伙伴; - Emoji int32 `protobuf:"varint,6,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + Progress int32 `protobuf:"varint,3,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度 + Reward []int32 `protobuf:"varint,4,rep,packed,name=Reward,proto3" json:"Reward,omitempty"` // 已领取进度奖励列表 [1,2,3] + Partner *ResPlayerSimple `protobuf:"bytes,5,opt,name=Partner,proto3" json:"Partner,omitempty"` // 伙伴 + Emoji int32 `protobuf:"varint,6,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情id SendEmoji int32 `protobuf:"varint,7,opt,name=SendEmoji,proto3" json:"SendEmoji,omitempty"` // 发送的表情id FriendProgress int32 `protobuf:"varint,8,opt,name=FriendProgress,proto3" json:"FriendProgress,omitempty"` // 好友进度; unknownFields protoimpl.UnknownFields @@ -26253,10 +26253,10 @@ func (x *CatnipGame) GetFriendProgress() int32 { type CatnipInvite struct { state protoimpl.MessageState `protogen:"open.v1"` - Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id; - Time int64 `protobuf:"varint,2,opt,name=Time,proto3" json:"Time,omitempty"` // 邀请时间; - Type int32 `protobuf:"varint,3,opt,name=Type,proto3" json:"Type,omitempty"` // 状态 0 可以邀请,1 已邀请 2 被邀请 3 已满员 4 已合作; - Player *ResPlayerSimple `protobuf:"bytes,4,opt,name=Player,proto3" json:"Player,omitempty"` // 好友信息; + Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id + Time int64 `protobuf:"varint,2,opt,name=Time,proto3" json:"Time,omitempty"` // 邀请时间 + Type int32 `protobuf:"varint,3,opt,name=Type,proto3" json:"Type,omitempty"` // 状态 0 可以邀请,1 已邀请 2 被邀请 3 已满员 + Player *ResPlayerSimple `protobuf:"bytes,4,opt,name=Player,proto3" json:"Player,omitempty"` // 好友信息 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26322,8 +26322,8 @@ func (x *CatnipInvite) GetPlayer() *ResPlayerSimple { // 邀请好友 type ReqCatnipInvite struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id; - Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26376,7 +26376,7 @@ type ResCatnipInvite struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Uid int64 `protobuf:"varint,3,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id; + Uid int64 `protobuf:"varint,3,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26435,8 +26435,8 @@ func (x *ResCatnipInvite) GetUid() int64 { // 同意邀请 type ReqCatnipAgree struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 游戏id; - Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 游戏id + Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26489,7 +26489,7 @@ type ResCatnipAgree struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Uid int64 `protobuf:"varint,3,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id; + Uid int64 `protobuf:"varint,3,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26547,8 +26547,8 @@ func (x *ResCatnipAgree) GetUid() int64 { type ReqCatnipRefuse struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 游戏id; - Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 游戏id + Uid int64 `protobuf:"varint,2,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26601,7 +26601,7 @@ type ResCatnipRefuse struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Uid int64 `protobuf:"varint,3,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id; + Uid int64 `protobuf:"varint,3,opt,name=Uid,proto3" json:"Uid,omitempty"` // 好友id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26660,7 +26660,7 @@ func (x *ResCatnipRefuse) GetUid() int64 { // 设置游戏倍数 type ReqCatnipMultiply struct { state protoimpl.MessageState `protogen:"open.v1"` - Multiply int32 `protobuf:"varint,1,opt,name=Multiply,proto3" json:"Multiply,omitempty"` // 倍数; + Multiply int32 `protobuf:"varint,1,opt,name=Multiply,proto3" json:"Multiply,omitempty"` // 倍数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26706,7 +26706,7 @@ type ResCatnipMultiply struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Multiply int32 `protobuf:"varint,3,opt,name=Multiply,proto3" json:"Multiply,omitempty"` // 倍数; + Multiply int32 `protobuf:"varint,3,opt,name=Multiply,proto3" json:"Multiply,omitempty"` // 倍数 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26765,7 +26765,7 @@ func (x *ResCatnipMultiply) GetMultiply() int32 { // 游戏转盘 type ReqCatnipPlay struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26811,7 +26811,7 @@ type ResCatnipPlay struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草转盘id; + Id int32 `protobuf:"varint,3,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草转盘id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26870,7 +26870,7 @@ func (x *ResCatnipPlay) GetId() int32 { // 领取阶段奖励 type ReqCatnipReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -27056,8 +27056,8 @@ func (x *ResCatnipGrandReward) GetMsg() string { // 发送表情 type ReqCatnipEmoji struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id; - EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + EmojiId int32 `protobuf:"varint,2,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -27110,8 +27110,8 @@ type ResCatnipEmoji struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - EmojiId int32 `protobuf:"varint,3,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id; - Id int32 `protobuf:"varint,4,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id; + EmojiId int32 `protobuf:"varint,3,opt,name=EmojiId,proto3" json:"EmojiId,omitempty"` // 表情id + Id int32 `protobuf:"varint,4,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -27433,8 +27433,8 @@ func (*ReqReload) Descriptor() ([]byte, []int) { type ReqAdminGm struct { state protoimpl.MessageState `protogen:"open.v1"` - Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // uid; - Command string `protobuf:"bytes,2,opt,name=Command,proto3" json:"Command,omitempty"` // 命令; + Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // uid + Command string `protobuf:"bytes,2,opt,name=Command,proto3" json:"Command,omitempty"` // 命令 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -27485,9 +27485,9 @@ func (x *ReqAdminGm) GetCommand() string { type ReqAdminBan struct { state protoimpl.MessageState `protogen:"open.v1"` - Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // uid; - Time int64 `protobuf:"varint,2,opt,name=Time,proto3" json:"Time,omitempty"` // 禁止时间; - Reason string `protobuf:"bytes,3,opt,name=Reason,proto3" json:"Reason,omitempty"` // 禁止原因; + Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` // uid + Time int64 `protobuf:"varint,2,opt,name=Time,proto3" json:"Time,omitempty"` // 禁止时间 + Reason string `protobuf:"bytes,3,opt,name=Reason,proto3" json:"Reason,omitempty"` // 禁止原因 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -27545,9 +27545,9 @@ func (x *ReqAdminBan) GetReason() string { type ReqAdminShipping struct { state protoimpl.MessageState `protogen:"open.v1"` - OrderSn string `protobuf:"bytes,1,opt,name=OrderSn,proto3" json:"OrderSn,omitempty"` // 订单号; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 1:支付成功 2:支付失败; - ChannelOrderSn string `protobuf:"bytes,3,opt,name=ChannelOrderSn,proto3" json:"ChannelOrderSn,omitempty"` // 渠道订单号; + OrderSn string `protobuf:"bytes,1,opt,name=OrderSn,proto3" json:"OrderSn,omitempty"` // 订单号 + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 1:支付成功 2:支付失败 + ChannelOrderSn string `protobuf:"bytes,3,opt,name=ChannelOrderSn,proto3" json:"ChannelOrderSn,omitempty"` // 渠道订单号 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -27717,7 +27717,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "ResultCode\x18\x01 \x01(\x05R\n" + "ResultCode\")\n" + "\x11ReqPlayerBaseInfo\x12\x14\n" + - "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\"\x93\x06\n" + + "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\"\xfd\x05\n" + "\x11ResPlayerBaseInfo\x12\x14\n" + "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\x12\x16\n" + "\x06energy\x18\x02 \x01(\x05R\x06energy\x12\x12\n" + @@ -27732,8 +27732,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x05guild\x18\n" + " \x01(\x05R\x05guild\x12*\n" + "\x11pack_unlock_count\x18\v \x01(\x05R\x0fpackUnlockCount\x12$\n" + - "\x0elast_play_time\x18\f \x01(\x05R\flastPlayTime\x12&\n" + - "\x0eEnergyBuyCount\x18\r \x01(\x05R\x0eEnergyBuyCount\x12\x1b\n" + + "\x0elast_play_time\x18\f \x01(\x05R\flastPlayTime\x12\x10\n" + + "\x03ban\x18\r \x01(\x03R\x03ban\x12\x1b\n" + "\tuser_name\x18\x0e \x01(\tR\buserName\x12\x1d\n" + "\n" + "login_time\x18\x0f \x01(\x05R\tloginTime\x12\x1f\n" + @@ -28000,7 +28000,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\n" + "ActiveTime\x18\a \x01(\x05R\n" + "ActiveTime\x12M\n" + - "\bSetEmoji\x18\b \x03(\v21.tutorial.ResPlayerBriefProfileData.SetEmojiEntryR\bSetEmoji\x1a;\n" + + "\bSetEmoji\x18\v \x03(\v21.tutorial.ResPlayerBriefProfileData.SetEmojiEntryR\bSetEmoji\x1a;\n" + "\rSetEmojiEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\x05R\x05value:\x028\x01\"/\n" + @@ -28669,8 +28669,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\n" + "FriendList\x18\x01 \x03(\v2\x19.tutorial.ResPlayerSimpleR\n" + "FriendList\x12\"\n" + - "\fReqApplyList\x18\x02 \x03(\x03R\fReqApplyList\x12\x10\n" + - "\x03Npc\x18\x03 \x03(\x05R\x03Npc\x12\x18\n" + + "\fReqApplyList\x18\x03 \x03(\x03R\fReqApplyList\x12\x10\n" + + "\x03Npc\x18\x02 \x03(\x05R\x03Npc\x12\x18\n" + "\aSponsor\x18\x04 \x01(\x05R\aSponsor\"!\n" + "\tReqAddNpc\x12\x14\n" + "\x05NpcId\x18\x01 \x01(\x05R\x05NpcId\"[\n" + @@ -28736,9 +28736,9 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x14ResFriendApplyNotify\x121\n" + "\x06Player\x18\x01 \x01(\v2\x19.tutorial.ResPlayerSimpleR\x06Player\x12\x12\n" + "\x04Type\x18\x02 \x01(\x05R\x04Type\x12\x12\n" + - "\x04Time\x18\x03 \x01(\x05R\x04Time\"j\n" + - "\x14ResFriendReplyNotify\x12*\n" + - "\x04info\x18\x01 \x01(\v2\x16.tutorial.ResFriendLogR\x04info\x12\x12\n" + + "\x04Time\x18\x03 \x01(\x05R\x04Time\"l\n" + + "\x14ResFriendReplyNotify\x12,\n" + + "\x04info\x18\x01 \x01(\v2\x18.tutorial.ResFriendReplyR\x04info\x12\x12\n" + "\x04Type\x18\x02 \x01(\x05R\x04Type\x12\x12\n" + "\x04Time\x18\x03 \x01(\x05R\x04Time\"6\n" + "\x0eReqApplyFriend\x12\x10\n" + @@ -29086,10 +29086,10 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x06Status\x18\x02 \x01(\x05R\x06Status\x12\x18\n" + "\aEndTime\x18\x03 \x01(\x05R\aEndTime\x12\x1a\n" + "\bTemplate\x18\x04 \x01(\x05R\bTemplate\x12\x14\n" + - "\x05Score\x18\x05 \x01(\x05R\x05Score\x12\x16\n" + - "\x06Reward\x18\x06 \x03(\x05R\x06Reward\x12\x18\n" + - "\aLowPass\x18\a \x01(\bR\aLowPass\x12\x1a\n" + - "\bHighPass\x18\b \x01(\bR\bHighPass\"\x12\n" + + "\x05Score\x18\x06 \x01(\x05R\x05Score\x12\x16\n" + + "\x06Reward\x18\a \x03(\x05R\x06Reward\x12\x18\n" + + "\aLowPass\x18\b \x01(\bR\aLowPass\x12\x1a\n" + + "\bHighPass\x18\t \x01(\bR\bHighPass\"\x12\n" + "\x10ReqActPassReward\"n\n" + "\x10ResActPassReward\x12&\n" + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + @@ -29131,10 +29131,10 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\x05R\x05value:\x028\x01\"f\n" + "\bopponent\x12\x12\n" + - "\x04Name\x18\x01 \x01(\tR\x04Name\x12\x12\n" + - "\x04Face\x18\x02 \x01(\x05R\x04Face\x12\x16\n" + - "\x06Avatar\x18\x03 \x01(\x05R\x06Avatar\x12\x1a\n" + - "\bProgress\x18\x04 \x01(\x05R\bProgress\"\xb3\x01\n" + + "\x04Name\x18\x02 \x01(\tR\x04Name\x12\x12\n" + + "\x04Face\x18\x03 \x01(\x05R\x04Face\x12\x16\n" + + "\x06Avatar\x18\x04 \x01(\x05R\x06Avatar\x12\x1a\n" + + "\bProgress\x18\x05 \x01(\x05R\bProgress\"\xb3\x01\n" + "\x11ReqGuessColorTake\x12*\n" + "\x03Map\x18\x01 \x01(\v2\x18.tutorial.GuessColorInfoR\x03Map\x129\n" + "\x04OMap\x18\x02 \x03(\v2%.tutorial.ReqGuessColorTake.OMapEntryR\x04OMap\x1a7\n" + @@ -29718,16 +29718,15 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\bRES_CODE\x12\b\n" + "\x04FAIL\x10\x00\x12\v\n" + "\aSUCCESS\x10\x01\x12 \n" + - "\x1cProtocol_Error_Account_Exist\x10\x02\x12'\n" + - "#Protocol_Error_Account_OR_PWD_ERROR\x10\x03\x12'\n" + - "#Protocol_Error_Account_OR_PWD_Short\x10\x04\x12\x1f\n" + - "\x1bProtocol_Error_Account_Fail\x10\x05\x12\"\n" + - "\x1eProtocol_Error_Account_NoExsit\x10\x06\x12%\n" + - "!Protocol_Error_Account_Code_Error\x10\a\x12'\n" + - "#Protocol_Error_Account_Device_Error\x10\b\x12 \n" + - "\x1cProtocol_Error_Id_Not_Verify\x10\t\x12\"\n" + - "\x1eProtocol_Error_Id_Verify_Error\x10\n" + - "*.\n" + + "\x1cProtocol_Error_Account_Exist\x10d\x12'\n" + + "#Protocol_Error_Account_OR_PWD_ERROR\x10e\x12'\n" + + "#Protocol_Error_Account_OR_PWD_Short\x10f\x12\x1f\n" + + "\x1bProtocol_Error_Account_Fail\x10g\x12\"\n" + + "\x1eProtocol_Error_Account_NoExsit\x10h\x12%\n" + + "!Protocol_Error_Account_Code_Error\x10i\x12'\n" + + "#Protocol_Error_Account_Device_Error\x10j\x12 \n" + + "\x1cProtocol_Error_Id_Not_Verify\x10k\x12\"\n" + + "\x1eProtocol_Error_Id_Verify_Error\x10l*.\n" + "\tITEM_TYPE\x12\n" + "\n" + "\x06ENERGY\x10\x00\x12\b\n" + @@ -29769,7 +29768,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\n" + "CODE_LOGIN\x10\x01\x12\x10\n" + "\fDEVICE_LOGIN\x10\x02\x12\r\n" + - "\tSDK_LOGIN\x10\x03*\xf6\x06\n" + + "\tSDK_LOGIN\x10\x03*\xf7\x06\n" + "\x0eTIME_LINE_TYPE\x12\v\n" + "\aDEFAULT\x10\x00\x12\x19\n" + "\x15LOG_TYPE_FRIEND_APPLY\x10\x01\x12\x1a\n" + @@ -29788,8 +29787,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x17LOG_TYPE_PLAYROOM_VISIT\x10\x0f\x12\x15\n" + "\x11LOG_TYPE_HANDBOOK\x10\x10\x12\x1c\n" + "\x18LOG_TYPE_HANDBOOK_UPVOTE\x10\x11\x12\x18\n" + - "\x14LOG_TYPE_CHARGE_SEND\x10\x12\x12\x1b\n" + - "\x17LOG_TYPE_CHARGE_RECEIVE\x10\x13\x12\x11\n" + + "\x14LOG_TYPE_CHARGE_SEND\x10\x12\x12\x1c\n" + + "\x18LOG_TYPE_CHARGE_RECEIVED\x10\x13\x12\x11\n" + "\rLOG_TYPE_WISH\x10\x14\x12\x1e\n" + "\x1aLOG_TYPE_FRIEND_BECOME_NPC\x10\x15\x12\x1c\n" + "\x18LOG_TYPE_PLAYROOM_UPVOTE\x10\x16\x12\x1f\n" + @@ -30590,7 +30589,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 2, // 153: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE 2, // 154: tutorial.ResFriendTReward.Code:type_name -> tutorial.RES_CODE 233, // 155: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple - 236, // 156: tutorial.ResFriendReplyNotify.info:type_name -> tutorial.ResFriendLog + 264, // 156: tutorial.ResFriendReplyNotify.info:type_name -> tutorial.ResFriendReply 2, // 157: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE 2, // 158: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE 233, // 159: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple From b25a10f2fee582e6887420a19a223d0fbd8ae4ee Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:28:38 +0800 Subject: [PATCH 22/27] 6 --- src/server/game/GameLogic.go | 1 + src/server/game/champship_mgr.go | 2 ++ src/server/game/message_mgr.go | 32 +++++++++++++++++++++++++++----- src/server/game/mod/msg/Msg.go | 15 +++++++++++++++ src/server/game/var_mgr.go | 4 ++-- 5 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 7be14116..426a7c9d 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -914,6 +914,7 @@ func (ad *GameLogic) GetStartTime() int64 { func NotifyPlayer(Uid int, m *MsgMod.Msg) { m.To = Uid + m.HandleType = MsgMod.HANDLE_MOD_PLAYER_MSG CenterPlayerMsgHandler(m) } diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 574a685b..03f765a1 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -249,6 +249,8 @@ func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank { RankList: RL, } } + +// TODO 待优化 func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { ChampshipData := c.getData() GroupId := ChampshipData.GroupInfo[Uid] diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 9d077517..845096cf 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -105,6 +105,9 @@ func (m *MessageMgr) CenterRegister() { m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_GET, MessageHandlerFunc(GetUserVarDataHandler)) m.RegisterHandler(msg.HANDLE_MOD_CATNIP_PARTNER, MessageHandlerFunc(CatnipPartnerHandler)) m.RegisterHandler(msg.HANDLE_MDO_CHAMPSHIP_INRANK, MessageHandlerFunc(ChampshipInRankHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO, MessageHandlerFunc(ChampshipRankInfoHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_LIST, MessageHandlerFunc(ChampshipRankListHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_PRE_RANK, MessageHandlerFunc(ChampshipRankPreHandler)) } } @@ -113,6 +116,28 @@ func getMessageData() *MessageData { } // ----------------------------------- 处理函数实现 --------------------------- +func ChampshipRankPreHandler(data *msg.Msg) (interface{}, error) { + PlayerId := data.From + PreRankMsg := G_GameLogicPtr.ChampshipMgr.GetPreRankMsg(PlayerId) + ReplyPlayerMsgASync(data, PreRankMsg) + return nil, nil +} + +func ChampshipRankListHandler(data *msg.Msg) (interface{}, error) { + PlayerId := data.From + RankMsg := G_GameLogicPtr.ChampshipMgr.GetRankMsg(PlayerId) + ReplyPlayerMsgASync(data, RankMsg) + return nil, nil +} + +func ChampshipRankInfoHandler(data *msg.Msg) (interface{}, error) { + PlayerId := data.From + MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(PlayerId) + MyPreRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(PlayerId) + ReplyPlayerMsgASync(data, []int{MyRank, MyPreRank}) + return nil, nil +} + func NotifyAllPlayerMsg(m *msg.Msg) { messageMgrData := getMessageData() for PlayerId, node := range messageMgrData.PlayerList { @@ -134,11 +159,8 @@ func CatnipPartnerHandler(data *msg.Msg) (interface{}, error) { return G_GameLogicPtr.VarMgr.HandleCatnipPartner(m.Uid, m.Partner, m.GameId, m.EndTime) } -func ReplyPlayerMsgSync(m *msg.Msg, reply interface{}) (interface{}, error) { - clone := m.Clone() - clone.To = m.From - clone.HandleType = msg.HANDLE_MOD_REPLY_PLAYER_MSG - clone.Extra = reply +func ReplyPlayerMsgASync(m *msg.Msg, reply interface{}) (interface{}, error) { + clone := m.Reply(reply) messageMgrData := getMessageData() if node, ok := messageMgrData.PlayerList[int64(m.From)]; ok { go SendMsgToNodeAsync(clone, node) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index ed3ffd8a..02c7077b 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -174,6 +174,21 @@ func (m *Msg) Clone() *Msg { } } +func (m *Msg) Reply(data interface{}) *Msg { + return &Msg{ + Type: m.Type, + To: m.From, + Item: m.Item, + SendT: m.SendT, + End: m.End, + Extra: data, + Id: m.Id, + H: m.H, + UniKey: m.UniKey, + HandleType: HANDLE_MOD_REPLY_PLAYER_MSG, + } +} + func Handle(fun func(Msg) error, m Msg) error { return fun(m) } diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index deb2d655..1df2c8ca 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -231,7 +231,7 @@ func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) { if userVar == nil { userVar = &VarExpireData{} } - ReplyPlayerMsgSync(m, userVar.D) + ReplyPlayerMsgASync(m, userVar.D) return userVar, nil } return nil, fmt.Errorf("invalid parameters for getting var data") @@ -288,7 +288,7 @@ func GetVarDataHandler(m *msg.Msg) (interface{}, error) { if varData == nil { varData = &VarExpireData{} } - ReplyPlayerMsgSync(m, varData.D) + ReplyPlayerMsgASync(m, varData.D) return varData, nil } return nil, fmt.Errorf("invalid parameters for getting var data") From 68c8cfe6209421d8341a679590433688ad923ec0 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Dec 2025 11:49:29 +0800 Subject: [PATCH 23/27] 6 --- src/server/game/champship_mgr.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 03f765a1..d54fbed9 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -102,9 +102,11 @@ func (c *ChampshipMgr) Init() { }) } -func (c *ChampshipMgr) NotifyAll(m *msg.Msg) (interface{}, error) { - m.HandleType = msg.HANDLE_MOD_PLAYER_MSG - NotifyAllPlayerMsg(m) +func (c *ChampshipMgr) NotifyAll() (interface{}, error) { + NotifyAllPlayerMsg(&msg.Msg{ + Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY, + HandleType: msg.HANDLE_MOD_PLAYER_MSG, + }) return nil, nil } @@ -121,13 +123,11 @@ func (c *ChampshipMgr) ZeroUpdate() (interface{}, error) { c.getData().GroupInfo = make(map[int]int, 0) c.update = true c.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.SERVER_ZERO_UPDATE, - }) + c.ZeroUpdate() }) c.NotifyPlayer() c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { - c.ZeroUpdate() + c.NotifyAll() }) return nil, nil } From 7e58fd3f4b3fdf3e23d4b023fe75e1956f3f7573 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Dec 2025 11:50:23 +0800 Subject: [PATCH 24/27] 6 --- src/server/db/Redis.go | 11 ++++++++ src/server/game/player_data.go | 2 +- src/server/game/var.go | 46 +++++++++++++++++++++++++++++----- src/server/game/var_mgr.go | 5 ++++ src/server/game_util/GoUtil.go | 4 +++ 5 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/server/db/Redis.go b/src/server/db/Redis.go index f8f59896..bc5ab33d 100644 --- a/src/server/db/Redis.go +++ b/src/server/db/Redis.go @@ -164,6 +164,17 @@ func RedisGetKey(key string) (string, error) { return val, nil } +func RedisGetKeyBytes(key string) ([]byte, error) { + if RdbRead == nil { + return nil, nil + } + val, err := RdbRead.Get(ctx, key).Bytes() + if err != nil { + return nil, err + } + return val, nil +} + func RedisDelKey(key string) { if RdbWrite == nil { log.Debug("redis write client is nil") diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 03c9cb89..28cc71c8 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -986,7 +986,7 @@ func (p *Player) UpdateUserInfo() { //TODO 存储到redis 在新版本中将优化成gob进行压缩 value, _ := json.Marshal(simple) - IdStr := strconv.Itoa(int(p.M_DwUin)) + IdStr := GoUtil.String(p.M_DwUin) go db.RedisSetKeyBytes(IdStr, value, 0) } diff --git a/src/server/game/var.go b/src/server/game/var.go index a9702673..61046939 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -1,6 +1,8 @@ package game import ( + "fmt" + "server/db" "server/game/mod/msg" GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" @@ -17,15 +19,27 @@ const ( ) func (p *Player) GetVarData(key string) interface{} { - data, err := GetUserData(p.M_DwUin, key) + cache := &VarExpireData{} + err := LoadCacheVarData(key, cache) if err != nil { log.Error("GetVarData err : %s", err) return nil } - if data == nil { + return cache.D +} + +func (p *Player) GetUserVarData(key string) interface{} { + cache := map[string]*VarExpireData{} + err := LoadCacheVarData(GoUtil.GetVarKey(int(p.M_DwUin)), cache) + if err != nil { + log.Error("GetVarData err : %s", err) return nil } - return data.Extra + data, ok := cache[key] + if !ok { + return nil + } + return data.D } func GetServerVarData(key string) interface{} { @@ -100,7 +114,7 @@ func (p *Player) SubPlayroomChip(PlayerId int) { } func (p *Player) GetPlayroomUpvote() int { - data := p.GetVarData(VAR_PLAYROOM_UPVOTE) + data := p.GetUserVarData(VAR_PLAYROOM_UPVOTE) if data == nil { return 0 } @@ -108,7 +122,7 @@ func (p *Player) GetPlayroomUpvote() int { } func (p *Player) GetPlayroomChip() int { - data := p.GetVarData(VAR_PLAYROOM_CHIP) + data := p.GetUserVarData(VAR_PLAYROOM_CHIP) if data == nil { return 0 } @@ -120,7 +134,7 @@ func (p *Player) SetPlayroomKiss(Kiss int) { } func (p *Player) GetPlayroomKiss() int { - data := p.GetVarData(VAR_PLAYROOM_KISS) + data := p.GetUserVarData(VAR_PLAYROOM_KISS) if data == nil { return 0 } @@ -146,3 +160,23 @@ func (p *Player) GetCatnipPartner(Uid int) []int { } return GoUtil.IntSlice(data.Extra) } + +func SaveCacheVarData(key string, value interface{}) { + data, err := GoUtil.GobMarshal(value) + if err != nil { + log.Error("SaveCacheVarData GobMarshal err : %s", err) + return + } + db.RedisSetKeyBytes(key, data, 0) +} + +func LoadCacheVarData(key string, value interface{}) error { + data, err := db.RedisGetKeyBytes(key) + if err != nil { + return err + } + if data == nil { + return fmt.Errorf("no data") + } + return GoUtil.GobUnmarshal(data, value) +} diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index 1df2c8ca..0bc9f9f1 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -140,6 +140,7 @@ func (f *VarMgr) SetUserVar(uid int, key string, value interface{}) { } ved.D = value varData[key] = ved + SaveCacheVarData(GoUtil.GetVarKey(uid), varData) } func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData { @@ -160,6 +161,7 @@ func (f *VarMgr) SetVar(key string, value interface{}) { f.getData().NewVar[key] = &VarExpireData{ D: value, } + SaveCacheVarData(key, f.getData().NewVar[key]) } func (f *VarMgr) GetVar(key string) *VarExpireData { @@ -217,6 +219,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { ved.T = m.End } data.Var[v.Key] = ved + SaveCacheVarData(v.Key, ved) } return nil, nil } @@ -277,6 +280,8 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { } data.Var[v.Key] = ved } + // 保存到缓存中 + SaveCacheVarData(GoUtil.GetVarKey(m.From), data.NewUseVar[m.From]) return nil, nil } diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index a57553fa..fde503f6 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -531,3 +531,7 @@ func GetISOCodeByIP(ip string) (string, error) { } return GetISOCodeByCountry(country) } + +func GetVarKey(Uid int) string { + return fmt.Sprintf("var_%d", Uid) +} From e884b20e32ded8d0549173b24d181e2933a760a5 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Dec 2025 14:30:37 +0800 Subject: [PATCH 25/27] 7 --- src/server/game/var_mgr.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index 0bc9f9f1..e2d2b309 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -140,6 +140,7 @@ func (f *VarMgr) SetUserVar(uid int, key string, value interface{}) { } ved.D = value varData[key] = ved + f.getData().NewUseVar[uid] = varData SaveCacheVarData(GoUtil.GetVarKey(uid), varData) } From 30eab6db4bde3708a517bb302216599d9f65b80e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Dec 2025 14:31:29 +0800 Subject: [PATCH 26/27] 7 --- src/server/game/game_type.go | 6 ++++++ src/server/game/gm_handler.go | 1 + src/server/game/message_mgr.go | 12 ++++++------ src/server/game/mod/friend/Friend.go | 5 +++++ src/server/game/var.go | 22 +++++++++++----------- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 23171816..df0a844c 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -2,7 +2,9 @@ package game import ( "encoding/gob" + "server/game/mod/card" "server/game/mod/friend" + "server/game/mod/item" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/msg" proto "server/msg" @@ -125,4 +127,8 @@ func init() { gob.Register(CRank{}) gob.Register(&proto.ResChampshipRank{}) gob.Register(&proto.ResChampshipPreRank{}) + gob.Register(card.CardInfo{}) + gob.Register(item.Item{}) + gob.Register([]*item.Item{}) // 注册 []*item.Item 类型 + gob.Register(friend.ReplyInfo{}) } diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 115a0cde..8f6f457c 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -513,6 +513,7 @@ func ReqGmCommand_(player *Player, Command string) error { BaseMod.Uid = player.M_DwUin BaseMod.NickName = player.PlayMod.getBaseMod().NickName BaseMod.LoginTime = GoUtil.Now() + BaseMod.AddCode = fmt.Sprintf("MMM-%s-%s", "156", GoUtil.UniqueStringFromInt(int(BaseMod.Uid))) // deep copy p1.PlayMod.mod_list to avoid sharing internal pointers var modCopy PlayerModList var buf bytes.Buffer diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 845096cf..f2da29e9 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -622,9 +622,9 @@ func GetUserData(PlayerId int64, Key string) (*msg.Msg, error) { }) } -func GetServerData(Key string) (*msg.Msg, error) { - return SendMsgToCenterSync(&msg.Msg{ - HandleType: msg.HANDLE_MOD_VAR_GET, - Extra: msg.VarData{Key: Key}, - }) -} +// func GetServerData(Key string) (*msg.Msg, error) { +// return SendMsgToCenterSync(&msg.Msg{ +// HandleType: msg.HANDLE_MOD_VAR_GET, +// Extra: msg.VarData{Key: Key}, +// }) +// } diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index fe69b2a6..2bb2c8f5 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -219,6 +219,11 @@ func (f *FriendMod) SetNpc(id int) error { if !friendCfg.IsNpcFriend(id) { return fmt.Errorf("not npc friend") } + for _, v := range f.Npc { + if v == id { + return fmt.Errorf("npc already exist") + } + } f.Npc = append(f.Npc, id) return nil } diff --git a/src/server/game/var.go b/src/server/game/var.go index 61046939..72b51563 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -22,7 +22,7 @@ func (p *Player) GetVarData(key string) interface{} { cache := &VarExpireData{} err := LoadCacheVarData(key, cache) if err != nil { - log.Error("GetVarData err : %s", err) + log.Error("GetVarData err : %s, key: %s", err, key) return nil } return cache.D @@ -30,9 +30,9 @@ func (p *Player) GetVarData(key string) interface{} { func (p *Player) GetUserVarData(key string) interface{} { cache := map[string]*VarExpireData{} - err := LoadCacheVarData(GoUtil.GetVarKey(int(p.M_DwUin)), cache) + err := LoadCacheVarData(GoUtil.GetVarKey(int(p.M_DwUin)), &cache) if err != nil { - log.Error("GetVarData err : %s", err) + log.Error("GetUserVarData err : %s, key: %s", err, key) return nil } data, ok := cache[key] @@ -42,14 +42,14 @@ func (p *Player) GetUserVarData(key string) interface{} { return data.D } -func GetServerVarData(key string) interface{} { - data, err := GetServerData(key) - if err != nil { - log.Error("GetServerVarData err : %s", err) - return nil - } - return data.Extra -} +// func GetServerVarData(key string) interface{} { +// data, err := GetServerData(key) +// if err != nil { +// log.Error("GetServerVarData err : %s", err) +// return nil +// } +// return data.Extra +// } func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) { SendMsgToCenterAsync(&msg.Msg{ From ef1125b75d764696c91c4c3cf82da2e50cc65df6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Dec 2025 15:04:20 +0800 Subject: [PATCH 27/27] =?UTF-8?q?gm=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 8f6f457c..e57ed313 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -393,13 +393,8 @@ func ReqGmCommand_(player *Player, Command string) error { } player.PushClientRes(CardMod.NotifyCard()) case "resetRankUser": - O := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER) - for _, v := range O { - Uid := strconv.Itoa(v.Uid) - TimeSort := fmt.Sprintf("0.%d", RANK_TIME_SORT-GoUtil.Now()) - TimeSortF, _ := strconv.ParseFloat(TimeSort, 64) - db.RedisZAdd(RANK_USER, Uid, v.Score+TimeSortF) - } + db.RedisDelKey(RANK_USER) + db.RedisDelKey(fmt.Sprintf("%s_%s", RANK_COUNTRY_USER, conf.Server.CountryCode)) case "addFriendStar": FriendTreasureMod := player.PlayMod.getFriendTreasureMod() FriendTreasureMod.AddStar(200)