diff --git a/gate/net/kcp_event.go b/gate/net/kcp_event.go index ced323e1..3a842cf6 100644 --- a/gate/net/kcp_event.go +++ b/gate/net/kcp_event.go @@ -1,6 +1,9 @@ package net -import "hk4e/pkg/logger" +import ( + "hk4e/pkg/logger" + "reflect" +) const ( KcpXorKeyChange = iota @@ -28,7 +31,7 @@ func (k *KcpConnectManager) eventHandle() { // 事件处理 for { event := <-k.kcpEventInput - logger.LOG.Info("kcp manager recv event, ConvId: %v, EventId: %v, EventMessage: %v", event.ConvId, event.EventId, event.EventMessage) + logger.LOG.Info("kcp manager recv event, ConvId: %v, EventId: %v, EventMessage Type: %v", event.ConvId, event.EventId, reflect.TypeOf(event.EventMessage)) switch event.EventId { case KcpXorKeyChange: // XOR密钥切换 diff --git a/gate/net/proto_endecode.go b/gate/net/proto_endecode.go index 868768e5..c5d14885 100644 --- a/gate/net/proto_endecode.go +++ b/gate/net/proto_endecode.go @@ -63,15 +63,22 @@ func (p *ProtoEnDecode) protoDecode(kcpMsg *KcpMsg) (protoMsgList []*ProtoMsg) { msg.PayloadMessage = protoMessage.message protoMsgList = append(protoMsgList, msg) } + for _, msg := range protoMsgList { + cmdName := "???" + if msg.PayloadMessage != nil { + cmdName = string(msg.PayloadMessage.ProtoReflect().Descriptor().FullName()) + } + logger.LOG.Debug("[RECV UNION CMD], cmdId: %v, cmdName: %v, convId: %v, headMsg: %v", msg.CmdId, cmdName, msg.ConvId, msg.HeadMessage) + } } else { protoMsg.PayloadMessage = protoMessageList[0].message protoMsgList = append(protoMsgList, protoMsg) + cmdName := "" + if protoMsg.PayloadMessage != nil { + cmdName = string(protoMsg.PayloadMessage.ProtoReflect().Descriptor().FullName()) + } + logger.LOG.Debug("[RECV], cmdId: %v, cmdName: %v, convId: %v, headMsg: %v", protoMsg.CmdId, cmdName, protoMsg.ConvId, protoMsg.HeadMessage) } - cmdName := "" - if protoMsg.PayloadMessage != nil { - cmdName = string(protoMsg.PayloadMessage.ProtoReflect().Descriptor().FullName()) - } - logger.LOG.Debug("[recv], cmdId: %v, cmdName: %v, convId: %v, headMsg: %v", protoMsg.CmdId, cmdName, protoMsg.ConvId, protoMsg.HeadMessage) return protoMsgList } @@ -103,7 +110,7 @@ func (p *ProtoEnDecode) protoEncode(protoMsg *ProtoMsg) (kcpMsg *KcpMsg) { if protoMsg.PayloadMessage != nil { cmdName = string(protoMsg.PayloadMessage.ProtoReflect().Descriptor().FullName()) } - logger.LOG.Debug("[send], cmdId: %v, cmdName: %v, convId: %v, headMsg: %v", protoMsg.CmdId, cmdName, protoMsg.ConvId, protoMsg.HeadMessage) + logger.LOG.Debug("[SEND], cmdId: %v, cmdName: %v, convId: %v, headMsg: %v", protoMsg.CmdId, cmdName, protoMsg.ConvId, protoMsg.HeadMessage) kcpMsg = new(KcpMsg) kcpMsg.ConvId = protoMsg.ConvId kcpMsg.CmdId = protoMsg.CmdId diff --git a/gdconf/avatar_data.go b/gdconf/avatar_data.go index f2a84f6f..046e0918 100644 --- a/gdconf/avatar_data.go +++ b/gdconf/avatar_data.go @@ -21,7 +21,7 @@ type AvatarData struct { QualityType int32 `csv:"QualityType,omitempty"` // 角色品质 ConfigJson string `csv:"ConfigJson,omitempty"` // 战斗config InitialWeapon int32 `csv:"InitialWeapon,omitempty"` // 初始武器 - WeaponType int32 `csv:"WeaponType"` // 武器种类 + WeaponType int32 `csv:"WeaponType,omitempty"` // 武器种类 SkillDepotId int32 `csv:"SkillDepotId,omitempty"` // 技能库ID AbilityHashCodeList []int32 diff --git a/gs/game/route_manager.go b/gs/game/route_manager.go index 8f6c9c57..cb2df806 100644 --- a/gs/game/route_manager.go +++ b/gs/game/route_manager.go @@ -49,6 +49,7 @@ func (r *RouteManager) doRoute(cmdId uint16, userId uint32, clientSeq uint32, pa func (r *RouteManager) InitRoute() { r.registerRouter(cmd.UnionCmdNotify, r.gameManager.UnionCmdNotify) r.registerRouter(cmd.MassiveEntityElementOpBatchNotify, r.gameManager.MassiveEntityElementOpBatchNotify) + r.registerRouter(cmd.ToTheMoonEnterSceneReq, r.gameManager.ToTheMoonEnterSceneReq) r.registerRouter(cmd.PlayerSetPauseReq, r.gameManager.PlayerSetPauseReq) r.registerRouter(cmd.EnterSceneReadyReq, r.gameManager.EnterSceneReadyReq) r.registerRouter(cmd.PathfindingEnterSceneReq, r.gameManager.PathfindingEnterSceneReq) diff --git a/gs/game/tick_manager.go b/gs/game/tick_manager.go index e5c1a88b..dc6d027f 100644 --- a/gs/game/tick_manager.go +++ b/gs/game/tick_manager.go @@ -117,6 +117,15 @@ func (t *TickManager) onTickMinute(now int64) { func (t *TickManager) onTick10Second(now int64) { for _, world := range t.gameManager.worldManager.worldMap { + for _, scene := range world.sceneMap { + for _, player := range scene.playerMap { + // PacketSceneTimeNotify + sceneTimeNotify := new(proto.SceneTimeNotify) + sceneTimeNotify.SceneId = player.SceneId + sceneTimeNotify.SceneTime = uint64(scene.GetSceneTime()) + GAME.SendMsg(cmd.SceneTimeNotify, player.PlayerID, player.ClientSeq, sceneTimeNotify) + } + } if !world.IsBigWorld() && (world.multiplayer || !world.owner.Pause) { // 刷怪 scene := world.GetSceneById(3) diff --git a/gs/game/user_combat.go b/gs/game/user_combat.go index 0bba32cc..e6df3850 100644 --- a/gs/game/user_combat.go +++ b/gs/game/user_combat.go @@ -13,7 +13,6 @@ func (g *GameManager) UnionCmdNotify(player *model.Player, payloadMsg pb.Message //logger.LOG.Debug("user send union cmd, uid: %v", player.PlayerID) req := payloadMsg.(*proto.UnionCmdNotify) _ = req - world := g.worldManager.GetWorldByID(player.WorldId) if world == nil { return @@ -84,34 +83,8 @@ func (g *GameManager) UnionCmdNotify(player *model.Player, payloadMsg pb.Message g.SendMsg(cmd.AbilityInvocationsNotify, world.owner.PlayerID, player.ClientSeq, abilityInvocationsNotify) } - // ClientAbilityInitFinishNotify转发 - // PacketClientAbilityInitFinishNotify - if player.ClientAbilityInvokeHandler.AllLen() > 0 { - clientAbilityInitFinishNotify := new(proto.ClientAbilityInitFinishNotify) - clientAbilityInitFinishNotify.Invokes = player.ClientAbilityInvokeHandler.EntryListForwardAll - for _, v := range surrPlayerList { - g.SendMsg(cmd.ClientAbilityInitFinishNotify, v.PlayerID, player.ClientSeq, clientAbilityInitFinishNotify) - } - } - if player.ClientAbilityInvokeHandler.AllExceptCurLen() > 0 { - clientAbilityInitFinishNotify := new(proto.ClientAbilityInitFinishNotify) - clientAbilityInitFinishNotify.Invokes = player.ClientAbilityInvokeHandler.EntryListForwardAllExceptCur - for _, v := range surrPlayerList { - if player.PlayerID == v.PlayerID { - continue - } - g.SendMsg(cmd.ClientAbilityInitFinishNotify, v.PlayerID, player.ClientSeq, clientAbilityInitFinishNotify) - } - } - if player.ClientAbilityInvokeHandler.HostLen() > 0 { - clientAbilityInitFinishNotify := new(proto.ClientAbilityInitFinishNotify) - clientAbilityInitFinishNotify.Invokes = player.ClientAbilityInvokeHandler.EntryListForwardHost - g.SendMsg(cmd.ClientAbilityInitFinishNotify, world.owner.PlayerID, player.ClientSeq, clientAbilityInitFinishNotify) - } - player.CombatInvokeHandler.Clear() player.AbilityInvokeHandler.Clear() - player.ClientAbilityInvokeHandler.Clear() } func (g *GameManager) MassiveEntityElementOpBatchNotify(player *model.Player, payloadMsg pb.Message) { @@ -125,6 +98,7 @@ func (g *GameManager) MassiveEntityElementOpBatchNotify(player *model.Player, pa scene := world.GetSceneById(player.SceneId) ntf.OpIdx = scene.meeoIndex scene.meeoIndex++ + // 只给附近aoi区域的玩家广播消息 surrPlayerList := make([]*model.Player, 0) entityIdList := world.aoiManager.GetEntityIdListByPos(float32(player.Pos.X), float32(player.Pos.Y), float32(player.Pos.Z)) @@ -146,6 +120,7 @@ func (g *GameManager) MassiveEntityElementOpBatchNotify(player *model.Player, pa func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg pb.Message) { //logger.LOG.Debug("user combat invocations, uid: %v", player.PlayerID) req := payloadMsg.(*proto.CombatInvocationsNotify) + world := g.worldManager.GetWorldByID(player.WorldId) if world == nil { return @@ -160,6 +135,9 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p // uid: player.PlayerID, // }) case proto.CombatTypeArgument_COMBAT_TYPE_ARGUMENT_ENTITY_MOVE: + if player.SceneLoadState != model.SceneEnterDone { + continue + } entityMoveInfo := new(proto.EntityMoveInfo) err := pb.Unmarshal(entry.CombatData, entityMoveInfo) if err != nil { @@ -348,6 +326,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p func (g *GameManager) AbilityInvocationsNotify(player *model.Player, payloadMsg pb.Message) { //logger.LOG.Debug("user ability invocations, uid: %v", player.PlayerID) req := payloadMsg.(*proto.AbilityInvocationsNotify) + for _, entry := range req.Invokes { //logger.LOG.Debug("AT: %v, FT: %v, UID: %v", entry.ArgumentType, entry.ForwardType, player.PlayerID) @@ -361,13 +340,141 @@ func (g *GameManager) AbilityInvocationsNotify(player *model.Player, payloadMsg func (g *GameManager) ClientAbilityInitFinishNotify(player *model.Player, payloadMsg pb.Message) { //logger.LOG.Debug("user client ability init finish, uid: %v", player.PlayerID) req := payloadMsg.(*proto.ClientAbilityInitFinishNotify) + invokeHandler := model.NewInvokeHandler[proto.AbilityInvokeEntry]() for _, entry := range req.Invokes { //logger.LOG.Debug("AT: %v, FT: %v, UID: %v", entry.ArgumentType, entry.ForwardType, player.PlayerID) // 处理能力调用 g.HandleAbilityInvoke(player, entry) - player.ClientAbilityInvokeHandler.AddEntry(entry.ForwardType, entry) + invokeHandler.AddEntry(entry.ForwardType, entry) + } + world := g.worldManager.GetWorldByID(player.WorldId) + if world == nil { + return + } + scene := world.GetSceneById(player.SceneId) + + // 只给附近aoi区域的玩家广播消息 + surrPlayerList := make([]*model.Player, 0) + entityIdList := world.aoiManager.GetEntityIdListByPos(float32(player.Pos.X), float32(player.Pos.Y), float32(player.Pos.Z)) + for _, entityId := range entityIdList { + entity := scene.GetEntity(entityId) + if entity == nil { + continue + } + if entity.avatarEntity != nil { + otherPlayer := g.userManager.GetOnlineUser(entity.avatarEntity.uid) + surrPlayerList = append(surrPlayerList, otherPlayer) + } + } + + // ClientAbilityInitFinishNotify转发 + // PacketClientAbilityInitFinishNotify + if invokeHandler.AllLen() == 0 && invokeHandler.AllExceptCurLen() == 0 && invokeHandler.HostLen() == 0 { + for _, v := range surrPlayerList { + if player.PlayerID == v.PlayerID { + continue + } + clientAbilityInitFinishNotify := new(proto.ClientAbilityInitFinishNotify) + clientAbilityInitFinishNotify.EntityId = req.EntityId + g.SendMsg(cmd.ClientAbilityInitFinishNotify, v.PlayerID, player.ClientSeq, clientAbilityInitFinishNotify) + } + } + if invokeHandler.AllLen() > 0 { + clientAbilityInitFinishNotify := new(proto.ClientAbilityInitFinishNotify) + clientAbilityInitFinishNotify.EntityId = req.EntityId + clientAbilityInitFinishNotify.Invokes = invokeHandler.EntryListForwardAll + for _, v := range surrPlayerList { + g.SendMsg(cmd.ClientAbilityInitFinishNotify, v.PlayerID, player.ClientSeq, clientAbilityInitFinishNotify) + } + } + if invokeHandler.AllExceptCurLen() > 0 { + clientAbilityInitFinishNotify := new(proto.ClientAbilityInitFinishNotify) + clientAbilityInitFinishNotify.EntityId = req.EntityId + clientAbilityInitFinishNotify.Invokes = invokeHandler.EntryListForwardAllExceptCur + for _, v := range surrPlayerList { + if player.PlayerID == v.PlayerID { + continue + } + g.SendMsg(cmd.ClientAbilityInitFinishNotify, v.PlayerID, player.ClientSeq, clientAbilityInitFinishNotify) + } + } + if invokeHandler.HostLen() > 0 { + clientAbilityInitFinishNotify := new(proto.ClientAbilityInitFinishNotify) + clientAbilityInitFinishNotify.EntityId = req.EntityId + clientAbilityInitFinishNotify.Invokes = invokeHandler.EntryListForwardHost + g.SendMsg(cmd.ClientAbilityInitFinishNotify, world.owner.PlayerID, player.ClientSeq, clientAbilityInitFinishNotify) + } +} + +func (g *GameManager) ClientAbilityChangeNotify(player *model.Player, payloadMsg pb.Message) { + //logger.LOG.Debug("user client ability change, uid: %v", player.PlayerID) + req := payloadMsg.(*proto.ClientAbilityChangeNotify) + invokeHandler := model.NewInvokeHandler[proto.AbilityInvokeEntry]() + for _, entry := range req.Invokes { + invokeHandler.AddEntry(entry.ForwardType, entry) + } + world := g.worldManager.GetWorldByID(player.WorldId) + if world == nil { + return + } + scene := world.GetSceneById(player.SceneId) + + // 只给附近aoi区域的玩家广播消息 + surrPlayerList := make([]*model.Player, 0) + entityIdList := world.aoiManager.GetEntityIdListByPos(float32(player.Pos.X), float32(player.Pos.Y), float32(player.Pos.Z)) + for _, entityId := range entityIdList { + entity := scene.GetEntity(entityId) + if entity == nil { + continue + } + if entity.avatarEntity != nil { + otherPlayer := g.userManager.GetOnlineUser(entity.avatarEntity.uid) + surrPlayerList = append(surrPlayerList, otherPlayer) + } + } + + // ClientAbilityChangeNotify转发 + // PacketClientAbilityChangeNotify + if invokeHandler.AllLen() == 0 && invokeHandler.AllExceptCurLen() == 0 && invokeHandler.HostLen() == 0 { + clientAbilityChangeNotify := new(proto.ClientAbilityChangeNotify) + clientAbilityChangeNotify.EntityId = req.EntityId + clientAbilityChangeNotify.IsInitHash = req.IsInitHash + for _, v := range surrPlayerList { + if player.PlayerID == v.PlayerID { + continue + } + g.SendMsg(cmd.ClientAbilityChangeNotify, v.PlayerID, player.ClientSeq, clientAbilityChangeNotify) + } + } + if invokeHandler.AllLen() > 0 { + clientAbilityChangeNotify := new(proto.ClientAbilityChangeNotify) + clientAbilityChangeNotify.EntityId = req.EntityId + clientAbilityChangeNotify.IsInitHash = req.IsInitHash + clientAbilityChangeNotify.Invokes = invokeHandler.EntryListForwardAll + for _, v := range surrPlayerList { + g.SendMsg(cmd.ClientAbilityChangeNotify, v.PlayerID, player.ClientSeq, clientAbilityChangeNotify) + } + } + if invokeHandler.AllExceptCurLen() > 0 { + clientAbilityChangeNotify := new(proto.ClientAbilityChangeNotify) + clientAbilityChangeNotify.EntityId = req.EntityId + clientAbilityChangeNotify.IsInitHash = req.IsInitHash + clientAbilityChangeNotify.Invokes = invokeHandler.EntryListForwardAllExceptCur + for _, v := range surrPlayerList { + if player.PlayerID == v.PlayerID { + continue + } + g.SendMsg(cmd.ClientAbilityChangeNotify, v.PlayerID, player.ClientSeq, clientAbilityChangeNotify) + } + } + if invokeHandler.HostLen() > 0 { + clientAbilityChangeNotify := new(proto.ClientAbilityChangeNotify) + clientAbilityChangeNotify.EntityId = req.EntityId + clientAbilityChangeNotify.IsInitHash = req.IsInitHash + clientAbilityChangeNotify.Invokes = invokeHandler.EntryListForwardHost + g.SendMsg(cmd.ClientAbilityChangeNotify, world.owner.PlayerID, player.ClientSeq, clientAbilityChangeNotify) } } @@ -379,9 +486,3 @@ func (g *GameManager) EvtDoSkillSuccNotify(player *model.Player, payloadMsg pb.M // 处理技能开始时的耐力消耗 g.HandleSkillStartStamina(player, req.SkillId) } - -func (g *GameManager) ClientAbilityChangeNotify(player *model.Player, payloadMsg pb.Message) { - logger.LOG.Debug("user client ability change, uid: %v", player.PlayerID) - req := payloadMsg.(*proto.ClientAbilityChangeNotify) - logger.LOG.Debug("ClientAbilityChangeNotify: %v", req) -} diff --git a/gs/game/user_common_handler.go b/gs/game/user_common_handler.go index b4289a29..721e0f81 100644 --- a/gs/game/user_common_handler.go +++ b/gs/game/user_common_handler.go @@ -100,3 +100,16 @@ func (g *GameManager) ServerAnnounceRevokeNotify(announceId uint32) { g.SendMsg(cmd.ServerAnnounceRevokeNotify, onlinePlayer.PlayerID, 0, serverAnnounceRevokeNotify) } } + +func (g *GameManager) ToTheMoonEnterSceneReq(player *model.Player, payloadMsg pb.Message) { + logger.LOG.Debug("user ttm enter scene, uid: %v", player.PlayerID) + req := payloadMsg.(*proto.ToTheMoonEnterSceneReq) + _ = req + g.SendMsg(cmd.ServerAnnounceRevokeNotify, player.PlayerID, player.ClientSeq, new(proto.ToTheMoonEnterSceneRsp)) +} + +func (g *GameManager) SetEntityClientDataNotify(player *model.Player, payloadMsg pb.Message) { + logger.LOG.Debug("user set entity client data, uid: %v", player.PlayerID) + ntf := payloadMsg.(*proto.SetEntityClientDataNotify) + g.SendMsg(cmd.SetEntityClientDataNotify, player.PlayerID, player.ClientSeq, ntf) +} diff --git a/gs/game/user_login.go b/gs/game/user_login.go index f09c34d9..78fa43db 100644 --- a/gs/game/user_login.go +++ b/gs/game/user_login.go @@ -40,7 +40,6 @@ func (g *GameManager) OnLoginOk(userId uint32, player *model.Player, clientSeq u player.CombatInvokeHandler = model.NewInvokeHandler[proto.CombatInvokeEntry]() player.AbilityInvokeHandler = model.NewInvokeHandler[proto.AbilityInvokeEntry]() - player.ClientAbilityInvokeHandler = model.NewInvokeHandler[proto.AbilityInvokeEntry]() //// TODO 薄荷标记 //if world.IsBigWorld() { diff --git a/gs/game/user_map.go b/gs/game/user_map.go index 331577d1..825273cf 100644 --- a/gs/game/user_map.go +++ b/gs/game/user_map.go @@ -138,17 +138,21 @@ func (g *GameManager) GetScenePointReq(player *model.Player, payloadMsg pb.Messa logger.LOG.Debug("user get scene point, uid: %v", player.PlayerID) req := payloadMsg.(*proto.GetScenePointReq) + if req.SceneId != 3 { + getScenePointRsp := new(proto.GetScenePointRsp) + getScenePointRsp.SceneId = req.SceneId + g.SendMsg(cmd.GetScenePointRsp, player.PlayerID, player.ClientSeq, getScenePointRsp) + return + } + // PacketGetScenePointRsp getScenePointRsp := new(proto.GetScenePointRsp) - getScenePointRsp.SceneId = req.SceneId - getScenePointRsp.UnlockedPointList = make([]uint32, 0) - for i := uint32(1); i < 1000; i++ { - getScenePointRsp.UnlockedPointList = append(getScenePointRsp.UnlockedPointList, i) - } - getScenePointRsp.UnlockAreaList = make([]uint32, 0) - for i := uint32(1); i < 9; i++ { - getScenePointRsp.UnlockAreaList = append(getScenePointRsp.UnlockAreaList, i) - } + getScenePointRsp.SceneId = 3 + getScenePointRsp.UnlockAreaList = []uint32{12, 11, 19, 28, 5, 1, 24, 10, 21, 2, 7, 18, 3, 26, 6, 17, 22, 20, 9, 14, 16, 8, 13, 4, 27, 23} + getScenePointRsp.UnlockedPointList = []uint32{553, 155, 58, 257, 38, 135, 528, 329, 13, 212, 401, 3, 600, 545, 589, 180, 416, 7, 615, 206, 400, 599, 114, 12, 211, 104, 502, 93, 325, 540, 131, 320, 519, 121, 616, 218, 606, 197, 208, 703, 305, 499, 254, 652, 60, 458, 282, 691, 167, 366, 323, 32, 319, 222, 181, 380, 612, 234, 433, 391, 488, 79, 338, 139, 241, 42, 57, 256, 154, 353, 588, 491, 82, 209, 10, 500, 91, 301, 489, 4, 392, 536, 127, 337, 605, 8, 487, 78, 228, 626, 598, 1, 200, 137, 336, 535, 382, 310, 509, 100, 498, 14, 213, 625, 361, 471, 674, 475, 603, 6, 205, 485, 76, 77, 486, 359, 165, 364, 317, 271, 384, 72, 481, 253, 156, 350, 45, 244, 516, 107, 306, 296, 97, 162, 571, 495, 86, 44, 248, 646, 539, 221, 22, 318, 706, 308, 507, 103, 302, 258, 442, 33, 324, 393, 61, 255, 655, 246, 385, 73, 482, 551, 153, 363, 35, 444, 245, 439, 251, 445, 36, 235, 15, 424, 225, 214, 623, 327, 537, 128, 542, 133, 332, 322, 31, 20, 429, 432, 443, 34, 59, 468, 604, 405, 515, 316, 117, 321, 122, 249, 459, 50, 29, 438, 40, 330, 116, 326, 503, 304, 514, 105, 550, 351, 152, 586, 387, 250, 541, 328, 236, 435, 247, 48, 37, 446, 538, 339, 11, 210, 476, 379, 671, 477, 676, 242, 168, 577, 378, 383, 81, 490, 501, 92, 331, 543, 252, 87, 496, 463, 307, 484, 75, 505, 96, 534, 555, 146, 462, 365, 381, 182, 166, 575, 69, 478, 494, 85, 74, 483, 368, 465, 386, 95, 84, 493, 396, 587, 5, 602, 204, 99, 497, 298, 492, 702, 293} + getScenePointRsp.LockedPointList = []uint32{173, 398, 627, 223, 417, 419, 231, 278, 699, 408, 276, 229, 520, 512, 415, 113, 274, 565, 344, 436, 394, 403, 262, 430, 195, 412, 315, 233, 440, 52, 409, 334, 193, 240, 566, 469, 187, 704, 413, 346, 259, 447, 286, 102, 345, 580, 411, 129, 578, 202, 682, 294, 570, 414, 511, 622, 428, 449, 426, 238, 265, 273, 564, 467, 563, 175, 269, 457, 574, 89, 388, 291, 707, 125, 559, 268, 656, 183, 280, 267, 357, 260, 354, 451, 410, 119, 216} + getScenePointRsp.HidePointList = []uint32{458, 515, 459, 514} + getScenePointRsp.GroupUnlimitPointList = []uint32{221, 131, 107, 350, 50, 424, 359} g.SendMsg(cmd.GetScenePointRsp, player.PlayerID, player.ClientSeq, getScenePointRsp) } @@ -156,13 +160,25 @@ func (g *GameManager) GetSceneAreaReq(player *model.Player, payloadMsg pb.Messag logger.LOG.Debug("user get scene area, uid: %v", player.PlayerID) req := payloadMsg.(*proto.GetSceneAreaReq) + if req.SceneId != 3 { + getSceneAreaRsp := new(proto.GetSceneAreaRsp) + getSceneAreaRsp.SceneId = req.SceneId + g.SendMsg(cmd.GetSceneAreaRsp, player.PlayerID, player.ClientSeq, getSceneAreaRsp) + return + } + // PacketGetSceneAreaRsp getSceneAreaRsp := new(proto.GetSceneAreaRsp) - getSceneAreaRsp.SceneId = req.SceneId - getSceneAreaRsp.AreaIdList = []uint32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 100, 101, 102, 103, 200, 210, 300, 400, 401, 402, 403} + getSceneAreaRsp.SceneId = 3 + getSceneAreaRsp.AreaIdList = []uint32{12, 11, 19, 28, 5, 1, 24, 10, 21, 2, 7, 18, 3, 26, 6, 17, 22, 20, 9, 14, 16, 8, 13, 4, 27, 23} getSceneAreaRsp.CityInfoList = make([]*proto.CityInfo, 0) - getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 1, Level: 1}) - getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 2, Level: 1}) - getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 3, Level: 1}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 1, Level: 10}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 2, Level: 10}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 3, Level: 10}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 4, Level: 10}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 99, Level: 1}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 100, Level: 1}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 101, Level: 1}) + getSceneAreaRsp.CityInfoList = append(getSceneAreaRsp.CityInfoList, &proto.CityInfo{CityId: 102, Level: 1}) g.SendMsg(cmd.GetSceneAreaRsp, player.PlayerID, player.ClientSeq, getSceneAreaRsp) } diff --git a/gs/game/user_multiplayer.go b/gs/game/user_multiplayer.go index 2f7b1a7a..36596109 100644 --- a/gs/game/user_multiplayer.go +++ b/gs/game/user_multiplayer.go @@ -194,8 +194,9 @@ func (g *GameManager) UserDealEnterWorld(hostPlayer *model.Player, otherUid uint if hostWorld.multiplayer == false { g.UserWorldRemovePlayer(hostWorld, hostPlayer) - hostPlayer.TeamConfig.CurrTeamIndex = 0 - hostPlayer.TeamConfig.CurrAvatarIndex = 0 + hostWorld = g.worldManager.CreateWorld(hostPlayer, true) + g.UserWorldAddPlayer(hostWorld, hostPlayer) + hostPlayer.SceneLoadState = model.SceneNone // PacketPlayerEnterSceneNotify hostPlayerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyMp( @@ -207,10 +208,6 @@ func (g *GameManager) UserDealEnterWorld(hostPlayer *model.Player, otherUid uint hostPlayer.Pos, ) g.SendMsg(cmd.PlayerEnterSceneNotify, hostPlayer.PlayerID, hostPlayer.ClientSeq, hostPlayerEnterSceneNotify) - - hostWorld = g.worldManager.CreateWorld(hostPlayer, true) - g.UserWorldAddPlayer(hostWorld, hostPlayer) - hostPlayer.SceneLoadState = model.SceneNone } otherWorld := g.worldManager.GetWorldByID(otherPlayer.WorldId) @@ -234,8 +231,9 @@ func (g *GameManager) UserDealEnterWorld(hostPlayer *model.Player, otherUid uint Z: hostPlayer.Rot.Z, } otherPlayer.SceneId = hostPlayer.SceneId - otherPlayer.TeamConfig.CurrTeamIndex = 0 - otherPlayer.TeamConfig.CurrAvatarIndex = 0 + + g.UserWorldAddPlayer(hostWorld, otherPlayer) + otherPlayer.SceneLoadState = model.SceneNone // PacketPlayerEnterSceneNotify playerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyMp( @@ -247,9 +245,6 @@ func (g *GameManager) UserDealEnterWorld(hostPlayer *model.Player, otherUid uint otherPlayerOldPos, ) g.SendMsg(cmd.PlayerEnterSceneNotify, otherPlayer.PlayerID, otherPlayer.ClientSeq, playerEnterSceneNotify) - - g.UserWorldAddPlayer(hostWorld, otherPlayer) - otherPlayer.SceneLoadState = model.SceneNone } func (g *GameManager) UserLeaveWorld(player *model.Player) bool { diff --git a/gs/game/user_scene.go b/gs/game/user_scene.go index 425264c3..dc65c73c 100644 --- a/gs/game/user_scene.go +++ b/gs/game/user_scene.go @@ -81,22 +81,14 @@ func (g *GameManager) SceneInitFinishReq(player *model.Player, payloadMsg pb.Mes // PacketPlayerWorldSceneInfoListNotify playerWorldSceneInfoListNotify := new(proto.PlayerWorldSceneInfoListNotify) playerWorldSceneInfoListNotify.InfoList = []*proto.PlayerWorldSceneInfo{ - {SceneId: 1, IsLocked: false, SceneTagIdList: []uint32{}}, - {SceneId: 3, IsLocked: false, SceneTagIdList: []uint32{102, 113, 117}}, - {SceneId: 4, IsLocked: false, SceneTagIdList: []uint32{106, 109, 117}}, - {SceneId: 5, IsLocked: false, SceneTagIdList: []uint32{}}, - {SceneId: 6, IsLocked: false, SceneTagIdList: []uint32{}}, - {SceneId: 7, IsLocked: false, SceneTagIdList: []uint32{}}, + {SceneId: 1, IsLocked: true, SceneTagIdList: []uint32{}}, + {SceneId: 3, IsLocked: false, SceneTagIdList: []uint32{102, 111, 112, 116, 118, 126, 135, 140, 142, 149, 1091, 1094, 1095, 1099, 1101, 1103, 1105, 1110, 1120, 1122, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1138, 1140, 1143, 1146, 1165, 1168}}, + {SceneId: 4, IsLocked: true, SceneTagIdList: []uint32{}}, + {SceneId: 5, IsLocked: false, SceneTagIdList: []uint32{121, 1031}}, + {SceneId: 6, IsLocked: false, SceneTagIdList: []uint32{144, 146, 1062, 1063}}, + {SceneId: 7, IsLocked: true, SceneTagIdList: []uint32{136, 137, 138, 148, 1034}}, + {SceneId: 9, IsLocked: true, SceneTagIdList: []uint32{1012, 1016, 1021, 1022, 1060, 1077}}, } - xumi := &proto.PlayerWorldSceneInfo{ - SceneId: 9, - IsLocked: false, - SceneTagIdList: []uint32{}, - } - for i := 0; i < 3000; i++ { - xumi.SceneTagIdList = append(xumi.SceneTagIdList, uint32(i)) - } - playerWorldSceneInfoListNotify.InfoList = append(playerWorldSceneInfoListNotify.InfoList, xumi) g.SendMsg(cmd.PlayerWorldSceneInfoListNotify, player.PlayerID, player.ClientSeq, playerWorldSceneInfoListNotify) // SceneForceUnlockNotify @@ -291,11 +283,13 @@ func (g *GameManager) ChangeGameTimeReq(player *model.Player, payloadMsg pb.Mess } func (g *GameManager) PacketPlayerEnterSceneNotify(player *model.Player) *proto.PlayerEnterSceneNotify { - player.EnterSceneToken = uint32(random.GetRandomInt32(1000, 99999)) + world := g.worldManager.GetWorldByID(player.WorldId) + scene := world.GetSceneById(player.SceneId) + player.EnterSceneToken = uint32(random.GetRandomInt32(5000, 50000)) playerEnterSceneNotify := new(proto.PlayerEnterSceneNotify) playerEnterSceneNotify.SceneId = player.SceneId playerEnterSceneNotify.Pos = &proto.Vector{X: float32(player.Pos.X), Y: float32(player.Pos.Y), Z: float32(player.Pos.Z)} - playerEnterSceneNotify.SceneBeginTime = uint64(time.Now().UnixMilli()) + playerEnterSceneNotify.SceneBeginTime = uint64(scene.GetSceneCreateTime()) playerEnterSceneNotify.Type = proto.EnterType_ENTER_TYPE_SELF playerEnterSceneNotify.TargetUid = player.PlayerID playerEnterSceneNotify.EnterSceneToken = player.EnterSceneToken @@ -307,7 +301,8 @@ func (g *GameManager) PacketPlayerEnterSceneNotify(player *model.Player) *proto. playerEnterSceneNotify.SceneTransaction = strconv.Itoa(int(player.SceneId)) + "-" + strconv.Itoa(int(player.PlayerID)) + "-" + strconv.Itoa(int(time.Now().Unix())) + "-" + - "18402" + "296359" + playerEnterSceneNotify.SceneTagIdList = []uint32{102, 111, 112, 116, 118, 126, 135, 140, 142, 149, 1091, 1094, 1095, 1099, 1101, 1103, 1105, 1110, 1120, 1122, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1138, 1140, 1143, 1146, 1165, 1168} return playerEnterSceneNotify } @@ -329,13 +324,15 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp( prevSceneId uint32, prevPos *model.Vector, ) *proto.PlayerEnterSceneNotify { - player.EnterSceneToken = uint32(random.GetRandomInt32(1000, 99999)) + world := g.worldManager.GetWorldByID(player.WorldId) + scene := world.GetSceneById(player.SceneId) + player.EnterSceneToken = uint32(random.GetRandomInt32(5000, 50000)) playerEnterSceneNotify := new(proto.PlayerEnterSceneNotify) playerEnterSceneNotify.PrevSceneId = prevSceneId playerEnterSceneNotify.PrevPos = &proto.Vector{X: float32(prevPos.X), Y: float32(prevPos.Y), Z: float32(prevPos.Z)} playerEnterSceneNotify.SceneId = player.SceneId playerEnterSceneNotify.Pos = &proto.Vector{X: float32(player.Pos.X), Y: float32(player.Pos.Y), Z: float32(player.Pos.Z)} - playerEnterSceneNotify.SceneBeginTime = uint64(time.Now().UnixMilli()) + playerEnterSceneNotify.SceneBeginTime = uint64(scene.GetSceneCreateTime()) playerEnterSceneNotify.Type = enterType playerEnterSceneNotify.TargetUid = targetPlayer.PlayerID playerEnterSceneNotify.EnterSceneToken = player.EnterSceneToken @@ -345,14 +342,8 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp( playerEnterSceneNotify.SceneTransaction = strconv.Itoa(int(player.SceneId)) + "-" + strconv.Itoa(int(targetPlayer.PlayerID)) + "-" + strconv.Itoa(int(time.Now().Unix())) + "-" + - "18402" - - //playerEnterSceneNotify.SceneTagIdList = []uint32{102, 107, 109, 113, 117} - playerEnterSceneNotify.SceneTagIdList = make([]uint32, 0) - for sceneTagId := uint32(0); sceneTagId < 3000; sceneTagId++ { - playerEnterSceneNotify.SceneTagIdList = append(playerEnterSceneNotify.SceneTagIdList, sceneTagId) - } - + "296359" + playerEnterSceneNotify.SceneTagIdList = []uint32{102, 111, 112, 116, 118, 126, 135, 140, 142, 149, 1091, 1094, 1095, 1099, 1101, 1103, 1105, 1110, 1120, 1122, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1138, 1140, 1143, 1146, 1165, 1168} return playerEnterSceneNotify } diff --git a/gs/game/world_manager.go b/gs/game/world_manager.go index 91d5e5dd..58aa72b6 100644 --- a/gs/game/world_manager.go +++ b/gs/game/world_manager.go @@ -216,6 +216,10 @@ func (s *Scene) ChangeGameTime(time uint32) { s.gameTime = time % 1440 } +func (s *Scene) GetSceneCreateTime() int64 { + return s.createTime +} + func (s *Scene) GetSceneTime() int64 { now := time.Now().UnixMilli() return now - s.createTime diff --git a/gs/model/player.go b/gs/model/player.go index 966f84a6..500570c2 100644 --- a/gs/model/player.go +++ b/gs/model/player.go @@ -53,23 +53,22 @@ type Player struct { ChatMsgMap map[uint32][]*ChatMsg `bson:"chatMsgMap"` // 聊天信息 IsGM uint8 `bson:"isGM"` // 管理员权限等级 // 在线数据 - EnterSceneToken uint32 `bson:"-"` // 玩家的世界进入令牌 - DbState int `bson:"-"` // 数据库存档状态 - WorldId uint32 `bson:"-"` // 所在的世界id - PeerId uint32 `bson:"-"` // 多人世界的玩家编号 - GameObjectGuidCounter uint64 `bson:"-"` // 游戏对象guid计数器 - ClientTime uint32 `bson:"-"` // 玩家客户端的本地时钟 - ClientRTT uint32 `bson:"-"` // 玩家客户端往返时延 - GameObjectGuidMap map[uint64]GameObject `bson:"-"` // 游戏对象guid映射表 - Online bool `bson:"-"` // 在线状态 - Pause bool `bson:"-"` // 暂停状态 - SceneLoadState int `bson:"-"` // 场景加载状态 - CoopApplyMap map[uint32]int64 `bson:"-"` // 敲门申请的玩家uid及时间 - StaminaInfo *StaminaInfo `bson:"-"` // 耐力临时数据 - ClientSeq uint32 `bson:"-"` // 客户端发包请求的序号 - CombatInvokeHandler *InvokeHandler[proto.CombatInvokeEntry] - AbilityInvokeHandler *InvokeHandler[proto.AbilityInvokeEntry] - ClientAbilityInvokeHandler *InvokeHandler[proto.AbilityInvokeEntry] + EnterSceneToken uint32 `bson:"-"` // 玩家的世界进入令牌 + DbState int `bson:"-"` // 数据库存档状态 + WorldId uint32 `bson:"-"` // 所在的世界id + PeerId uint32 `bson:"-"` // 多人世界的玩家编号 + GameObjectGuidCounter uint64 `bson:"-"` // 游戏对象guid计数器 + ClientTime uint32 `bson:"-"` // 玩家客户端的本地时钟 + ClientRTT uint32 `bson:"-"` // 玩家客户端往返时延 + GameObjectGuidMap map[uint64]GameObject `bson:"-"` // 游戏对象guid映射表 + Online bool `bson:"-"` // 在线状态 + Pause bool `bson:"-"` // 暂停状态 + SceneLoadState int `bson:"-"` // 场景加载状态 + CoopApplyMap map[uint32]int64 `bson:"-"` // 敲门申请的玩家uid及时间 + StaminaInfo *StaminaInfo `bson:"-"` // 耐力临时数据 + ClientSeq uint32 `bson:"-"` // 客户端发包请求的序号 + CombatInvokeHandler *InvokeHandler[proto.CombatInvokeEntry] + AbilityInvokeHandler *InvokeHandler[proto.AbilityInvokeEntry] } func (p *Player) GetNextGameObjectGuid() uint64 { diff --git a/protocol/cmd/cmd_id_proto_obj_map.go b/protocol/cmd/cmd_id_proto_obj_map.go index 75945f84..3c0ee681 100644 --- a/protocol/cmd/cmd_id_proto_obj_map.go +++ b/protocol/cmd/cmd_id_proto_obj_map.go @@ -24,236 +24,239 @@ func NewCmdProtoMap() (r *CmdProtoMap) { return r } -func (a *CmdProtoMap) registerAllMessage() { +func (c *CmdProtoMap) registerAllMessage() { // 登录 - a.registerMessage(DoSetPlayerBornDataNotify, &proto.DoSetPlayerBornDataNotify{}) // 注册账号通知 新号播放开场动画 - a.registerMessage(SetPlayerBornDataReq, &proto.SetPlayerBornDataReq{}) // 注册账号请求 - a.registerMessage(SetPlayerBornDataRsp, &proto.SetPlayerBornDataRsp{}) // 注册账号响应 - a.registerMessage(GetPlayerTokenReq, &proto.GetPlayerTokenReq{}) // 获取玩家token请求 第一个登录包 - a.registerMessage(GetPlayerTokenRsp, &proto.GetPlayerTokenRsp{}) // 获取玩家token响应 - a.registerMessage(PlayerLoginReq, &proto.PlayerLoginReq{}) // 玩家登录请求 第二个登录包 - a.registerMessage(PlayerLoginRsp, &proto.PlayerLoginRsp{}) // 玩家登录响应 - a.registerMessage(PlayerForceExitReq, &proto.PlayerForceExitReq{}) // 退出游戏请求 - a.registerMessage(PlayerForceExitRsp, &proto.PlayerForceExitRsp{}) // 退出游戏响应 - a.registerMessage(ServerDisconnectClientNotify, &proto.ServerDisconnectClientNotify{}) // 服务器断开连接通知 - a.registerMessage(ClientReconnectNotify, &proto.ClientReconnectNotify{}) // 在线重连通知 + c.registerMessage(DoSetPlayerBornDataNotify, &proto.DoSetPlayerBornDataNotify{}) // 注册账号通知 新号播放开场动画 + c.registerMessage(SetPlayerBornDataReq, &proto.SetPlayerBornDataReq{}) // 注册账号请求 + c.registerMessage(SetPlayerBornDataRsp, &proto.SetPlayerBornDataRsp{}) // 注册账号响应 + c.registerMessage(GetPlayerTokenReq, &proto.GetPlayerTokenReq{}) // 获取玩家token请求 第一个登录包 + c.registerMessage(GetPlayerTokenRsp, &proto.GetPlayerTokenRsp{}) // 获取玩家token响应 + c.registerMessage(PlayerLoginReq, &proto.PlayerLoginReq{}) // 玩家登录请求 第二个登录包 + c.registerMessage(PlayerLoginRsp, &proto.PlayerLoginRsp{}) // 玩家登录响应 + c.registerMessage(PlayerForceExitReq, &proto.PlayerForceExitReq{}) // 退出游戏请求 + c.registerMessage(PlayerForceExitRsp, &proto.PlayerForceExitRsp{}) // 退出游戏响应 + c.registerMessage(ServerDisconnectClientNotify, &proto.ServerDisconnectClientNotify{}) // 服务器断开连接通知 + c.registerMessage(ClientReconnectNotify, &proto.ClientReconnectNotify{}) // 在线重连通知 // 基础相关 - a.registerMessage(UnionCmdNotify, &proto.UnionCmdNotify{}) // 聚合消息 - a.registerMessage(PingReq, &proto.PingReq{}) // ping请求 - a.registerMessage(PingRsp, &proto.PingRsp{}) // ping响应 - a.registerMessage(WorldPlayerRTTNotify, &proto.WorldPlayerRTTNotify{}) // 世界玩家RTT时延 - a.registerMessage(PlayerDataNotify, &proto.PlayerDataNotify{}) // 玩家信息通知 昵称、属性表等 - a.registerMessage(PlayerPropNotify, &proto.PlayerPropNotify{}) // 玩家属性表通知 - a.registerMessage(OpenStateUpdateNotify, &proto.OpenStateUpdateNotify{}) // 游戏功能模块开放状态更新通知 - a.registerMessage(PlayerTimeNotify, &proto.PlayerTimeNotify{}) // 玩家累计在线时长通知 - a.registerMessage(ServerTimeNotify, &proto.ServerTimeNotify{}) // 服务器时间通知 + c.registerMessage(UnionCmdNotify, &proto.UnionCmdNotify{}) // 聚合消息 + c.registerMessage(PingReq, &proto.PingReq{}) // ping请求 + c.registerMessage(PingRsp, &proto.PingRsp{}) // ping响应 + c.registerMessage(WorldPlayerRTTNotify, &proto.WorldPlayerRTTNotify{}) // 世界玩家RTT时延 + c.registerMessage(PlayerDataNotify, &proto.PlayerDataNotify{}) // 玩家信息通知 昵称、属性表等 + c.registerMessage(PlayerPropNotify, &proto.PlayerPropNotify{}) // 玩家属性表通知 + c.registerMessage(OpenStateUpdateNotify, &proto.OpenStateUpdateNotify{}) // 游戏功能模块开放状态更新通知 + c.registerMessage(PlayerTimeNotify, &proto.PlayerTimeNotify{}) // 玩家累计在线时长通知 + c.registerMessage(ServerTimeNotify, &proto.ServerTimeNotify{}) // 服务器时间通知 // 场景 - a.registerMessage(PlayerSetPauseReq, &proto.PlayerSetPauseReq{}) // 玩家暂停请求 - a.registerMessage(PlayerSetPauseRsp, &proto.PlayerSetPauseRsp{}) // 玩家暂停响应 - a.registerMessage(EnterSceneReadyReq, &proto.EnterSceneReadyReq{}) // 进入场景准备就绪请求 - a.registerMessage(EnterSceneReadyRsp, &proto.EnterSceneReadyRsp{}) // 进入场景准备就绪响应 - a.registerMessage(SceneInitFinishReq, &proto.SceneInitFinishReq{}) // 场景初始化完成请求 - a.registerMessage(SceneInitFinishRsp, &proto.SceneInitFinishRsp{}) // 场景初始化完成响应 - a.registerMessage(EnterSceneDoneReq, &proto.EnterSceneDoneReq{}) // 进入场景完成请求 - a.registerMessage(EnterSceneDoneRsp, &proto.EnterSceneDoneRsp{}) // 进入场景完成响应 - a.registerMessage(PostEnterSceneReq, &proto.PostEnterSceneReq{}) // 进入场景完成后请求 - a.registerMessage(PostEnterSceneRsp, &proto.PostEnterSceneRsp{}) // 进入场景完成后响应 - a.registerMessage(EnterWorldAreaReq, &proto.EnterWorldAreaReq{}) // 进入世界区域请求 - a.registerMessage(EnterWorldAreaRsp, &proto.EnterWorldAreaRsp{}) // 进入世界区域响应 - a.registerMessage(SceneTransToPointReq, &proto.SceneTransToPointReq{}) // 场景传送点传送请求 - a.registerMessage(SceneTransToPointRsp, &proto.SceneTransToPointRsp{}) // 场景传送点传送响应 - a.registerMessage(PathfindingEnterSceneReq, &proto.PathfindingEnterSceneReq{}) // 寻路进入场景请求 - a.registerMessage(PathfindingEnterSceneRsp, &proto.PathfindingEnterSceneRsp{}) // 寻路进入场景响应 - a.registerMessage(QueryPathReq, &proto.QueryPathReq{}) // 寻路请求 - a.registerMessage(QueryPathRsp, &proto.QueryPathRsp{}) // 寻路响应 - a.registerMessage(GetScenePointReq, &proto.GetScenePointReq{}) // 获取场景传送点请求 - a.registerMessage(GetScenePointRsp, &proto.GetScenePointRsp{}) // 获取场景传送点响应 - a.registerMessage(GetSceneAreaReq, &proto.GetSceneAreaReq{}) // 获取场景区域请求 - a.registerMessage(GetSceneAreaRsp, &proto.GetSceneAreaRsp{}) // 获取场景区域响应 - a.registerMessage(ChangeGameTimeReq, &proto.ChangeGameTimeReq{}) // 改变游戏内时间请求 - a.registerMessage(ChangeGameTimeRsp, &proto.ChangeGameTimeRsp{}) // 改变游戏内时间响应 - a.registerMessage(SceneTimeNotify, &proto.SceneTimeNotify{}) // 场景时间通知 - a.registerMessage(PlayerGameTimeNotify, &proto.PlayerGameTimeNotify{}) // 玩家游戏内时间通知 - a.registerMessage(SceneEntityAppearNotify, &proto.SceneEntityAppearNotify{}) // 场景实体出现通知 - a.registerMessage(SceneEntityDisappearNotify, &proto.SceneEntityDisappearNotify{}) // 场景实体消失通知 - a.registerMessage(SceneAreaWeatherNotify, &proto.SceneAreaWeatherNotify{}) // 场景区域天气通知 - a.registerMessage(WorldPlayerLocationNotify, &proto.WorldPlayerLocationNotify{}) // 世界玩家位置通知 - a.registerMessage(ScenePlayerLocationNotify, &proto.ScenePlayerLocationNotify{}) // 场景玩家位置通知 - a.registerMessage(SceneForceUnlockNotify, &proto.SceneForceUnlockNotify{}) // 场景强制解锁通知 - a.registerMessage(PlayerWorldSceneInfoListNotify, &proto.PlayerWorldSceneInfoListNotify{}) // 玩家世界场景信息列表通知 地图上已解锁点亮的区域 - a.registerMessage(PlayerEnterSceneNotify, &proto.PlayerEnterSceneNotify{}) // 玩家进入场景通知 通知客户端进入某个场景 - a.registerMessage(PlayerEnterSceneInfoNotify, &proto.PlayerEnterSceneInfoNotify{}) // 玩家进入场景信息通知 角色、队伍、武器等实体相关信息 - a.registerMessage(ScenePlayerInfoNotify, &proto.ScenePlayerInfoNotify{}) // 场景玩家信息通知 玩家uid、昵称、多人世界玩家编号等 - a.registerMessage(EnterScenePeerNotify, &proto.EnterScenePeerNotify{}) // 进入场景多人世界玩家编号通知 - a.registerMessage(EntityAiSyncNotify, &proto.EntityAiSyncNotify{}) // 实体AI怪物同步通知 - a.registerMessage(WorldDataNotify, &proto.WorldDataNotify{}) // 世界数据通知 世界等级、是否多人世界等 - a.registerMessage(WorldPlayerInfoNotify, &proto.WorldPlayerInfoNotify{}) // 世界玩家信息通知 - a.registerMessage(HostPlayerNotify, &proto.HostPlayerNotify{}) // 世界房主玩家信息通知 + c.registerMessage(PlayerSetPauseReq, &proto.PlayerSetPauseReq{}) // 玩家暂停请求 + c.registerMessage(PlayerSetPauseRsp, &proto.PlayerSetPauseRsp{}) // 玩家暂停响应 + c.registerMessage(EnterSceneReadyReq, &proto.EnterSceneReadyReq{}) // 进入场景准备就绪请求 + c.registerMessage(EnterSceneReadyRsp, &proto.EnterSceneReadyRsp{}) // 进入场景准备就绪响应 + c.registerMessage(SceneInitFinishReq, &proto.SceneInitFinishReq{}) // 场景初始化完成请求 + c.registerMessage(SceneInitFinishRsp, &proto.SceneInitFinishRsp{}) // 场景初始化完成响应 + c.registerMessage(EnterSceneDoneReq, &proto.EnterSceneDoneReq{}) // 进入场景完成请求 + c.registerMessage(EnterSceneDoneRsp, &proto.EnterSceneDoneRsp{}) // 进入场景完成响应 + c.registerMessage(PostEnterSceneReq, &proto.PostEnterSceneReq{}) // 进入场景完成后请求 + c.registerMessage(PostEnterSceneRsp, &proto.PostEnterSceneRsp{}) // 进入场景完成后响应 + c.registerMessage(EnterWorldAreaReq, &proto.EnterWorldAreaReq{}) // 进入世界区域请求 + c.registerMessage(EnterWorldAreaRsp, &proto.EnterWorldAreaRsp{}) // 进入世界区域响应 + c.registerMessage(SceneTransToPointReq, &proto.SceneTransToPointReq{}) // 场景传送点传送请求 + c.registerMessage(SceneTransToPointRsp, &proto.SceneTransToPointRsp{}) // 场景传送点传送响应 + c.registerMessage(PathfindingEnterSceneReq, &proto.PathfindingEnterSceneReq{}) // 寻路进入场景请求 + c.registerMessage(PathfindingEnterSceneRsp, &proto.PathfindingEnterSceneRsp{}) // 寻路进入场景响应 + c.registerMessage(QueryPathReq, &proto.QueryPathReq{}) // 寻路请求 + c.registerMessage(QueryPathRsp, &proto.QueryPathRsp{}) // 寻路响应 + c.registerMessage(GetScenePointReq, &proto.GetScenePointReq{}) // 获取场景传送点请求 + c.registerMessage(GetScenePointRsp, &proto.GetScenePointRsp{}) // 获取场景传送点响应 + c.registerMessage(GetSceneAreaReq, &proto.GetSceneAreaReq{}) // 获取场景区域请求 + c.registerMessage(GetSceneAreaRsp, &proto.GetSceneAreaRsp{}) // 获取场景区域响应 + c.registerMessage(ChangeGameTimeReq, &proto.ChangeGameTimeReq{}) // 改变游戏内时间请求 + c.registerMessage(ChangeGameTimeRsp, &proto.ChangeGameTimeRsp{}) // 改变游戏内时间响应 + c.registerMessage(SceneTimeNotify, &proto.SceneTimeNotify{}) // 场景时间通知 + c.registerMessage(PlayerGameTimeNotify, &proto.PlayerGameTimeNotify{}) // 玩家游戏内时间通知 + c.registerMessage(SceneEntityAppearNotify, &proto.SceneEntityAppearNotify{}) // 场景实体出现通知 + c.registerMessage(SceneEntityDisappearNotify, &proto.SceneEntityDisappearNotify{}) // 场景实体消失通知 + c.registerMessage(SceneAreaWeatherNotify, &proto.SceneAreaWeatherNotify{}) // 场景区域天气通知 + c.registerMessage(WorldPlayerLocationNotify, &proto.WorldPlayerLocationNotify{}) // 世界玩家位置通知 + c.registerMessage(ScenePlayerLocationNotify, &proto.ScenePlayerLocationNotify{}) // 场景玩家位置通知 + c.registerMessage(SceneForceUnlockNotify, &proto.SceneForceUnlockNotify{}) // 场景强制解锁通知 + c.registerMessage(PlayerWorldSceneInfoListNotify, &proto.PlayerWorldSceneInfoListNotify{}) // 玩家世界场景信息列表通知 地图上已解锁点亮的区域 + c.registerMessage(PlayerEnterSceneNotify, &proto.PlayerEnterSceneNotify{}) // 玩家进入场景通知 通知客户端进入某个场景 + c.registerMessage(PlayerEnterSceneInfoNotify, &proto.PlayerEnterSceneInfoNotify{}) // 玩家进入场景信息通知 角色、队伍、武器等实体相关信息 + c.registerMessage(ScenePlayerInfoNotify, &proto.ScenePlayerInfoNotify{}) // 场景玩家信息通知 玩家uid、昵称、多人世界玩家编号等 + c.registerMessage(EnterScenePeerNotify, &proto.EnterScenePeerNotify{}) // 进入场景多人世界玩家编号通知 + c.registerMessage(EntityAiSyncNotify, &proto.EntityAiSyncNotify{}) // 实体AI怪物同步通知 + c.registerMessage(WorldDataNotify, &proto.WorldDataNotify{}) // 世界数据通知 世界等级、是否多人世界等 + c.registerMessage(WorldPlayerInfoNotify, &proto.WorldPlayerInfoNotify{}) // 世界玩家信息通知 + c.registerMessage(HostPlayerNotify, &proto.HostPlayerNotify{}) // 世界房主玩家信息通知 + c.registerMessage(ToTheMoonEnterSceneReq, &proto.ToTheMoonEnterSceneReq{}) // 进入场景请求 + c.registerMessage(ToTheMoonEnterSceneRsp, &proto.ToTheMoonEnterSceneRsp{}) // 进入场景响应 + c.registerMessage(SetEntityClientDataNotify, &proto.SetEntityClientDataNotify{}) // 通知 // 战斗与技能 - a.registerMessage(AvatarFightPropNotify, &proto.AvatarFightPropNotify{}) // 角色战斗属性通知 - a.registerMessage(EntityFightPropUpdateNotify, &proto.EntityFightPropUpdateNotify{}) // 实体战斗属性更新通知 - a.registerMessage(CombatInvocationsNotify, &proto.CombatInvocationsNotify{}) // 战斗通知 包含场景中实体的移动数据和伤害数据,多人游戏服务器转发 - a.registerMessage(AbilityInvocationsNotify, &proto.AbilityInvocationsNotify{}) // 技能通知 多人游戏服务器转发 - a.registerMessage(ClientAbilityInitFinishNotify, &proto.ClientAbilityInitFinishNotify{}) // 客户端技能初始化完成通知 多人游戏服务器转发 - a.registerMessage(EvtDoSkillSuccNotify, &proto.EvtDoSkillSuccNotify{}) // 释放技能成功事件通知 - a.registerMessage(ClientAbilityChangeNotify, &proto.ClientAbilityChangeNotify{}) // 客户端技能改变通知 - a.registerMessage(MassiveEntityElementOpBatchNotify, &proto.MassiveEntityElementOpBatchNotify{}) // MEEO通知 + c.registerMessage(AvatarFightPropNotify, &proto.AvatarFightPropNotify{}) // 角色战斗属性通知 + c.registerMessage(EntityFightPropUpdateNotify, &proto.EntityFightPropUpdateNotify{}) // 实体战斗属性更新通知 + c.registerMessage(CombatInvocationsNotify, &proto.CombatInvocationsNotify{}) // 战斗通知 包含场景中实体的移动数据和伤害数据,多人游戏服务器转发 + c.registerMessage(AbilityInvocationsNotify, &proto.AbilityInvocationsNotify{}) // 技能通知 多人游戏服务器转发 + c.registerMessage(ClientAbilityInitFinishNotify, &proto.ClientAbilityInitFinishNotify{}) // 客户端技能初始化完成通知 多人游戏服务器转发 + c.registerMessage(EvtDoSkillSuccNotify, &proto.EvtDoSkillSuccNotify{}) // 释放技能成功事件通知 + c.registerMessage(ClientAbilityChangeNotify, &proto.ClientAbilityChangeNotify{}) // 客户端技能改变通知 + c.registerMessage(MassiveEntityElementOpBatchNotify, &proto.MassiveEntityElementOpBatchNotify{}) // MEEO通知 风元素染色 // 队伍 - a.registerMessage(ChangeAvatarReq, &proto.ChangeAvatarReq{}) // 更换角色请求 切人 - a.registerMessage(ChangeAvatarRsp, &proto.ChangeAvatarRsp{}) // 更换角色响应 - a.registerMessage(SetUpAvatarTeamReq, &proto.SetUpAvatarTeamReq{}) // 配置队伍请求 队伍换人 - a.registerMessage(SetUpAvatarTeamRsp, &proto.SetUpAvatarTeamRsp{}) // 配置队伍响应 - a.registerMessage(ChooseCurAvatarTeamReq, &proto.ChooseCurAvatarTeamReq{}) // 切换队伍请求 切队伍 - a.registerMessage(ChooseCurAvatarTeamRsp, &proto.ChooseCurAvatarTeamRsp{}) // 切换队伍响应 - a.registerMessage(ChangeMpTeamAvatarReq, &proto.ChangeMpTeamAvatarReq{}) // 配置多人游戏队伍请求 多人游戏队伍换人 - a.registerMessage(ChangeMpTeamAvatarRsp, &proto.ChangeMpTeamAvatarRsp{}) // 配置多人游戏队伍响应 - a.registerMessage(AvatarTeamUpdateNotify, &proto.AvatarTeamUpdateNotify{}) // 角色队伍更新通知 全部队伍的名字和其中中包含了哪些角色 - a.registerMessage(SceneTeamUpdateNotify, &proto.SceneTeamUpdateNotify{}) // 场景队伍更新通知 - a.registerMessage(SyncTeamEntityNotify, &proto.SyncTeamEntityNotify{}) // 同步队伍实体通知 - a.registerMessage(DelTeamEntityNotify, &proto.DelTeamEntityNotify{}) // 删除队伍实体通知 - a.registerMessage(SyncScenePlayTeamEntityNotify, &proto.SyncScenePlayTeamEntityNotify{}) // 同步场景玩家队伍实体通知 + c.registerMessage(ChangeAvatarReq, &proto.ChangeAvatarReq{}) // 更换角色请求 切人 + c.registerMessage(ChangeAvatarRsp, &proto.ChangeAvatarRsp{}) // 更换角色响应 + c.registerMessage(SetUpAvatarTeamReq, &proto.SetUpAvatarTeamReq{}) // 配置队伍请求 队伍换人 + c.registerMessage(SetUpAvatarTeamRsp, &proto.SetUpAvatarTeamRsp{}) // 配置队伍响应 + c.registerMessage(ChooseCurAvatarTeamReq, &proto.ChooseCurAvatarTeamReq{}) // 切换队伍请求 切队伍 + c.registerMessage(ChooseCurAvatarTeamRsp, &proto.ChooseCurAvatarTeamRsp{}) // 切换队伍响应 + c.registerMessage(ChangeMpTeamAvatarReq, &proto.ChangeMpTeamAvatarReq{}) // 配置多人游戏队伍请求 多人游戏队伍换人 + c.registerMessage(ChangeMpTeamAvatarRsp, &proto.ChangeMpTeamAvatarRsp{}) // 配置多人游戏队伍响应 + c.registerMessage(AvatarTeamUpdateNotify, &proto.AvatarTeamUpdateNotify{}) // 角色队伍更新通知 全部队伍的名字和其中中包含了哪些角色 + c.registerMessage(SceneTeamUpdateNotify, &proto.SceneTeamUpdateNotify{}) // 场景队伍更新通知 + c.registerMessage(SyncTeamEntityNotify, &proto.SyncTeamEntityNotify{}) // 同步队伍实体通知 + c.registerMessage(DelTeamEntityNotify, &proto.DelTeamEntityNotify{}) // 删除队伍实体通知 + c.registerMessage(SyncScenePlayTeamEntityNotify, &proto.SyncScenePlayTeamEntityNotify{}) // 同步场景玩家队伍实体通知 // 多人世界 - a.registerMessage(PlayerApplyEnterMpReq, &proto.PlayerApplyEnterMpReq{}) // 世界敲门请求 - a.registerMessage(PlayerApplyEnterMpRsp, &proto.PlayerApplyEnterMpRsp{}) // 世界敲门响应 - a.registerMessage(PlayerApplyEnterMpNotify, &proto.PlayerApplyEnterMpNotify{}) // 世界敲门通知 - a.registerMessage(PlayerApplyEnterMpResultReq, &proto.PlayerApplyEnterMpResultReq{}) // 世界敲门处理请求 - a.registerMessage(PlayerApplyEnterMpResultRsp, &proto.PlayerApplyEnterMpResultRsp{}) // 世界敲门处理响应 - a.registerMessage(PlayerApplyEnterMpResultNotify, &proto.PlayerApplyEnterMpResultNotify{}) // 世界敲门处理通知 - a.registerMessage(PlayerGetForceQuitBanInfoReq, &proto.PlayerGetForceQuitBanInfoReq{}) // 获取强退禁令信息请求 - a.registerMessage(PlayerGetForceQuitBanInfoRsp, &proto.PlayerGetForceQuitBanInfoRsp{}) // 获取强退禁令信息响应 - a.registerMessage(BackMyWorldReq, &proto.BackMyWorldReq{}) // 返回单人世界请求 - a.registerMessage(BackMyWorldRsp, &proto.BackMyWorldRsp{}) // 返回单人世界响应 - a.registerMessage(ChangeWorldToSingleModeReq, &proto.ChangeWorldToSingleModeReq{}) // 转换单人模式请求 - a.registerMessage(ChangeWorldToSingleModeRsp, &proto.ChangeWorldToSingleModeRsp{}) // 转换单人模式响应 - a.registerMessage(SceneKickPlayerReq, &proto.SceneKickPlayerReq{}) // 剔除玩家请求 - a.registerMessage(SceneKickPlayerRsp, &proto.SceneKickPlayerRsp{}) // 剔除玩家响应 - a.registerMessage(SceneKickPlayerNotify, &proto.SceneKickPlayerNotify{}) // 剔除玩家通知 - a.registerMessage(PlayerQuitFromMpNotify, &proto.PlayerQuitFromMpNotify{}) // 退出多人游戏通知 + c.registerMessage(PlayerApplyEnterMpReq, &proto.PlayerApplyEnterMpReq{}) // 世界敲门请求 + c.registerMessage(PlayerApplyEnterMpRsp, &proto.PlayerApplyEnterMpRsp{}) // 世界敲门响应 + c.registerMessage(PlayerApplyEnterMpNotify, &proto.PlayerApplyEnterMpNotify{}) // 世界敲门通知 + c.registerMessage(PlayerApplyEnterMpResultReq, &proto.PlayerApplyEnterMpResultReq{}) // 世界敲门处理请求 + c.registerMessage(PlayerApplyEnterMpResultRsp, &proto.PlayerApplyEnterMpResultRsp{}) // 世界敲门处理响应 + c.registerMessage(PlayerApplyEnterMpResultNotify, &proto.PlayerApplyEnterMpResultNotify{}) // 世界敲门处理通知 + c.registerMessage(PlayerGetForceQuitBanInfoReq, &proto.PlayerGetForceQuitBanInfoReq{}) // 获取强退禁令信息请求 + c.registerMessage(PlayerGetForceQuitBanInfoRsp, &proto.PlayerGetForceQuitBanInfoRsp{}) // 获取强退禁令信息响应 + c.registerMessage(BackMyWorldReq, &proto.BackMyWorldReq{}) // 返回单人世界请求 + c.registerMessage(BackMyWorldRsp, &proto.BackMyWorldRsp{}) // 返回单人世界响应 + c.registerMessage(ChangeWorldToSingleModeReq, &proto.ChangeWorldToSingleModeReq{}) // 转换单人模式请求 + c.registerMessage(ChangeWorldToSingleModeRsp, &proto.ChangeWorldToSingleModeRsp{}) // 转换单人模式响应 + c.registerMessage(SceneKickPlayerReq, &proto.SceneKickPlayerReq{}) // 剔除玩家请求 + c.registerMessage(SceneKickPlayerRsp, &proto.SceneKickPlayerRsp{}) // 剔除玩家响应 + c.registerMessage(SceneKickPlayerNotify, &proto.SceneKickPlayerNotify{}) // 剔除玩家通知 + c.registerMessage(PlayerQuitFromMpNotify, &proto.PlayerQuitFromMpNotify{}) // 退出多人游戏通知 // 社交 - a.registerMessage(SetPlayerBirthdayReq, &proto.SetPlayerBirthdayReq{}) // 设置生日请求 - a.registerMessage(SetPlayerBirthdayRsp, &proto.SetPlayerBirthdayRsp{}) // 设置生日响应 - a.registerMessage(SetNameCardReq, &proto.SetNameCardReq{}) // 修改名片请求 - a.registerMessage(SetNameCardRsp, &proto.SetNameCardRsp{}) // 修改名片响应 - a.registerMessage(GetAllUnlockNameCardReq, &proto.GetAllUnlockNameCardReq{}) // 获取全部已解锁名片请求 - a.registerMessage(GetAllUnlockNameCardRsp, &proto.GetAllUnlockNameCardRsp{}) // 获取全部已解锁名片响应 - a.registerMessage(UnlockNameCardNotify, &proto.UnlockNameCardNotify{}) // 名片解锁通知 - a.registerMessage(SetPlayerSignatureReq, &proto.SetPlayerSignatureReq{}) // 修改签名请求 - a.registerMessage(SetPlayerSignatureRsp, &proto.SetPlayerSignatureRsp{}) // 修改签名响应 - a.registerMessage(SetPlayerNameReq, &proto.SetPlayerNameReq{}) // 修改昵称请求 - a.registerMessage(SetPlayerNameRsp, &proto.SetPlayerNameRsp{}) // 修改昵称响应 - a.registerMessage(SetPlayerHeadImageReq, &proto.SetPlayerHeadImageReq{}) // 修改头像请求 - a.registerMessage(SetPlayerHeadImageRsp, &proto.SetPlayerHeadImageRsp{}) // 修改头像响应 - a.registerMessage(GetPlayerFriendListReq, &proto.GetPlayerFriendListReq{}) // 好友列表请求 - a.registerMessage(GetPlayerFriendListRsp, &proto.GetPlayerFriendListRsp{}) // 好友列表响应 - a.registerMessage(GetPlayerAskFriendListReq, &proto.GetPlayerAskFriendListReq{}) // 好友申请列表请求 - a.registerMessage(GetPlayerAskFriendListRsp, &proto.GetPlayerAskFriendListRsp{}) // 好友申请列表响应 - a.registerMessage(AskAddFriendReq, &proto.AskAddFriendReq{}) // 加好友请求 - a.registerMessage(AskAddFriendRsp, &proto.AskAddFriendRsp{}) // 加好友响应 - a.registerMessage(AskAddFriendNotify, &proto.AskAddFriendNotify{}) // 加好友通知 - a.registerMessage(DealAddFriendReq, &proto.DealAddFriendReq{}) // 处理好友申请请求 - a.registerMessage(DealAddFriendRsp, &proto.DealAddFriendRsp{}) // 处理好友申请响应 - a.registerMessage(GetPlayerSocialDetailReq, &proto.GetPlayerSocialDetailReq{}) // 获取玩家社区信息请求 - a.registerMessage(GetPlayerSocialDetailRsp, &proto.GetPlayerSocialDetailRsp{}) // 获取玩家社区信息响应 - a.registerMessage(GetOnlinePlayerListReq, &proto.GetOnlinePlayerListReq{}) // 在线玩家列表请求 - a.registerMessage(GetOnlinePlayerListRsp, &proto.GetOnlinePlayerListRsp{}) // 在线玩家列表响应 - a.registerMessage(PullRecentChatReq, &proto.PullRecentChatReq{}) // 最近聊天拉取请求 - a.registerMessage(PullRecentChatRsp, &proto.PullRecentChatRsp{}) // 最近聊天拉取响应 - a.registerMessage(PullPrivateChatReq, &proto.PullPrivateChatReq{}) // 私聊历史记录请求 - a.registerMessage(PullPrivateChatRsp, &proto.PullPrivateChatRsp{}) // 私聊历史记录响应 - a.registerMessage(PrivateChatReq, &proto.PrivateChatReq{}) // 私聊消息发送请求 - a.registerMessage(PrivateChatRsp, &proto.PrivateChatRsp{}) // 私聊消息发送响应 - a.registerMessage(PrivateChatNotify, &proto.PrivateChatNotify{}) // 私聊消息通知 - a.registerMessage(ReadPrivateChatReq, &proto.ReadPrivateChatReq{}) // 私聊消息已读请求 - a.registerMessage(ReadPrivateChatRsp, &proto.ReadPrivateChatRsp{}) // 私聊消息已读响应 - a.registerMessage(PlayerChatReq, &proto.PlayerChatReq{}) // 多人聊天消息发送请求 - a.registerMessage(PlayerChatRsp, &proto.PlayerChatRsp{}) // 多人聊天消息发送响应 - a.registerMessage(PlayerChatNotify, &proto.PlayerChatNotify{}) // 多人聊天消息通知 + c.registerMessage(SetPlayerBirthdayReq, &proto.SetPlayerBirthdayReq{}) // 设置生日请求 + c.registerMessage(SetPlayerBirthdayRsp, &proto.SetPlayerBirthdayRsp{}) // 设置生日响应 + c.registerMessage(SetNameCardReq, &proto.SetNameCardReq{}) // 修改名片请求 + c.registerMessage(SetNameCardRsp, &proto.SetNameCardRsp{}) // 修改名片响应 + c.registerMessage(GetAllUnlockNameCardReq, &proto.GetAllUnlockNameCardReq{}) // 获取全部已解锁名片请求 + c.registerMessage(GetAllUnlockNameCardRsp, &proto.GetAllUnlockNameCardRsp{}) // 获取全部已解锁名片响应 + c.registerMessage(UnlockNameCardNotify, &proto.UnlockNameCardNotify{}) // 名片解锁通知 + c.registerMessage(SetPlayerSignatureReq, &proto.SetPlayerSignatureReq{}) // 修改签名请求 + c.registerMessage(SetPlayerSignatureRsp, &proto.SetPlayerSignatureRsp{}) // 修改签名响应 + c.registerMessage(SetPlayerNameReq, &proto.SetPlayerNameReq{}) // 修改昵称请求 + c.registerMessage(SetPlayerNameRsp, &proto.SetPlayerNameRsp{}) // 修改昵称响应 + c.registerMessage(SetPlayerHeadImageReq, &proto.SetPlayerHeadImageReq{}) // 修改头像请求 + c.registerMessage(SetPlayerHeadImageRsp, &proto.SetPlayerHeadImageRsp{}) // 修改头像响应 + c.registerMessage(GetPlayerFriendListReq, &proto.GetPlayerFriendListReq{}) // 好友列表请求 + c.registerMessage(GetPlayerFriendListRsp, &proto.GetPlayerFriendListRsp{}) // 好友列表响应 + c.registerMessage(GetPlayerAskFriendListReq, &proto.GetPlayerAskFriendListReq{}) // 好友申请列表请求 + c.registerMessage(GetPlayerAskFriendListRsp, &proto.GetPlayerAskFriendListRsp{}) // 好友申请列表响应 + c.registerMessage(AskAddFriendReq, &proto.AskAddFriendReq{}) // 加好友请求 + c.registerMessage(AskAddFriendRsp, &proto.AskAddFriendRsp{}) // 加好友响应 + c.registerMessage(AskAddFriendNotify, &proto.AskAddFriendNotify{}) // 加好友通知 + c.registerMessage(DealAddFriendReq, &proto.DealAddFriendReq{}) // 处理好友申请请求 + c.registerMessage(DealAddFriendRsp, &proto.DealAddFriendRsp{}) // 处理好友申请响应 + c.registerMessage(GetPlayerSocialDetailReq, &proto.GetPlayerSocialDetailReq{}) // 获取玩家社区信息请求 + c.registerMessage(GetPlayerSocialDetailRsp, &proto.GetPlayerSocialDetailRsp{}) // 获取玩家社区信息响应 + c.registerMessage(GetOnlinePlayerListReq, &proto.GetOnlinePlayerListReq{}) // 在线玩家列表请求 + c.registerMessage(GetOnlinePlayerListRsp, &proto.GetOnlinePlayerListRsp{}) // 在线玩家列表响应 + c.registerMessage(PullRecentChatReq, &proto.PullRecentChatReq{}) // 最近聊天拉取请求 + c.registerMessage(PullRecentChatRsp, &proto.PullRecentChatRsp{}) // 最近聊天拉取响应 + c.registerMessage(PullPrivateChatReq, &proto.PullPrivateChatReq{}) // 私聊历史记录请求 + c.registerMessage(PullPrivateChatRsp, &proto.PullPrivateChatRsp{}) // 私聊历史记录响应 + c.registerMessage(PrivateChatReq, &proto.PrivateChatReq{}) // 私聊消息发送请求 + c.registerMessage(PrivateChatRsp, &proto.PrivateChatRsp{}) // 私聊消息发送响应 + c.registerMessage(PrivateChatNotify, &proto.PrivateChatNotify{}) // 私聊消息通知 + c.registerMessage(ReadPrivateChatReq, &proto.ReadPrivateChatReq{}) // 私聊消息已读请求 + c.registerMessage(ReadPrivateChatRsp, &proto.ReadPrivateChatRsp{}) // 私聊消息已读响应 + c.registerMessage(PlayerChatReq, &proto.PlayerChatReq{}) // 多人聊天消息发送请求 + c.registerMessage(PlayerChatRsp, &proto.PlayerChatRsp{}) // 多人聊天消息发送响应 + c.registerMessage(PlayerChatNotify, &proto.PlayerChatNotify{}) // 多人聊天消息通知 // 卡池 - a.registerMessage(GetGachaInfoReq, &proto.GetGachaInfoReq{}) // 卡池获取请求 - a.registerMessage(GetGachaInfoRsp, &proto.GetGachaInfoRsp{}) // 卡池获取响应 - a.registerMessage(DoGachaReq, &proto.DoGachaReq{}) // 抽卡请求 - a.registerMessage(DoGachaRsp, &proto.DoGachaRsp{}) // 抽卡响应 + c.registerMessage(GetGachaInfoReq, &proto.GetGachaInfoReq{}) // 卡池获取请求 + c.registerMessage(GetGachaInfoRsp, &proto.GetGachaInfoRsp{}) // 卡池获取响应 + c.registerMessage(DoGachaReq, &proto.DoGachaReq{}) // 抽卡请求 + c.registerMessage(DoGachaRsp, &proto.DoGachaRsp{}) // 抽卡响应 // 角色 - a.registerMessage(AvatarDataNotify, &proto.AvatarDataNotify{}) // 角色信息通知 - a.registerMessage(AvatarAddNotify, &proto.AvatarAddNotify{}) // 角色新增通知 - a.registerMessage(AvatarChangeCostumeReq, &proto.AvatarChangeCostumeReq{}) // 角色换装请求 - a.registerMessage(AvatarChangeCostumeRsp, &proto.AvatarChangeCostumeRsp{}) // 角色换装响应 - a.registerMessage(AvatarChangeCostumeNotify, &proto.AvatarChangeCostumeNotify{}) // 角色换装通知 - a.registerMessage(AvatarWearFlycloakReq, &proto.AvatarWearFlycloakReq{}) // 角色换风之翼请求 - a.registerMessage(AvatarWearFlycloakRsp, &proto.AvatarWearFlycloakRsp{}) // 角色换风之翼响应 - a.registerMessage(AvatarFlycloakChangeNotify, &proto.AvatarFlycloakChangeNotify{}) // 角色换风之翼通知 + c.registerMessage(AvatarDataNotify, &proto.AvatarDataNotify{}) // 角色信息通知 + c.registerMessage(AvatarAddNotify, &proto.AvatarAddNotify{}) // 角色新增通知 + c.registerMessage(AvatarChangeCostumeReq, &proto.AvatarChangeCostumeReq{}) // 角色换装请求 + c.registerMessage(AvatarChangeCostumeRsp, &proto.AvatarChangeCostumeRsp{}) // 角色换装响应 + c.registerMessage(AvatarChangeCostumeNotify, &proto.AvatarChangeCostumeNotify{}) // 角色换装通知 + c.registerMessage(AvatarWearFlycloakReq, &proto.AvatarWearFlycloakReq{}) // 角色换风之翼请求 + c.registerMessage(AvatarWearFlycloakRsp, &proto.AvatarWearFlycloakRsp{}) // 角色换风之翼响应 + c.registerMessage(AvatarFlycloakChangeNotify, &proto.AvatarFlycloakChangeNotify{}) // 角色换风之翼通知 // 背包与道具 - a.registerMessage(PlayerStoreNotify, &proto.PlayerStoreNotify{}) // 玩家背包数据通知 - a.registerMessage(StoreWeightLimitNotify, &proto.StoreWeightLimitNotify{}) // 背包容量上限通知 - a.registerMessage(StoreItemChangeNotify, &proto.StoreItemChangeNotify{}) // 背包道具变动通知 - a.registerMessage(ItemAddHintNotify, &proto.ItemAddHintNotify{}) // 道具增加提示通知 - a.registerMessage(StoreItemDelNotify, &proto.StoreItemDelNotify{}) // 背包道具删除通知 + c.registerMessage(PlayerStoreNotify, &proto.PlayerStoreNotify{}) // 玩家背包数据通知 + c.registerMessage(StoreWeightLimitNotify, &proto.StoreWeightLimitNotify{}) // 背包容量上限通知 + c.registerMessage(StoreItemChangeNotify, &proto.StoreItemChangeNotify{}) // 背包道具变动通知 + c.registerMessage(ItemAddHintNotify, &proto.ItemAddHintNotify{}) // 道具增加提示通知 + c.registerMessage(StoreItemDelNotify, &proto.StoreItemDelNotify{}) // 背包道具删除通知 // 装备 - a.registerMessage(WearEquipReq, &proto.WearEquipReq{}) // 装备穿戴请求 - a.registerMessage(WearEquipRsp, &proto.WearEquipRsp{}) // 装备穿戴响应 - a.registerMessage(AvatarEquipChangeNotify, &proto.AvatarEquipChangeNotify{}) // 角色装备改变通知 + c.registerMessage(WearEquipReq, &proto.WearEquipReq{}) // 装备穿戴请求 + c.registerMessage(WearEquipRsp, &proto.WearEquipRsp{}) // 装备穿戴响应 + c.registerMessage(AvatarEquipChangeNotify, &proto.AvatarEquipChangeNotify{}) // 角色装备改变通知 // 商店 - a.registerMessage(GetShopmallDataReq, &proto.GetShopmallDataReq{}) // 商店信息请求 - a.registerMessage(GetShopmallDataRsp, &proto.GetShopmallDataRsp{}) // 商店信息响应 - a.registerMessage(GetShopReq, &proto.GetShopReq{}) // 商店详情请求 - a.registerMessage(GetShopRsp, &proto.GetShopRsp{}) // 商店详情响应 - a.registerMessage(BuyGoodsReq, &proto.BuyGoodsReq{}) // 商店货物购买请求 - a.registerMessage(BuyGoodsRsp, &proto.BuyGoodsRsp{}) // 商店货物购买响应 - a.registerMessage(McoinExchangeHcoinReq, &proto.McoinExchangeHcoinReq{}) // 结晶换原石请求 - a.registerMessage(McoinExchangeHcoinRsp, &proto.McoinExchangeHcoinRsp{}) // 结晶换原石响应 + c.registerMessage(GetShopmallDataReq, &proto.GetShopmallDataReq{}) // 商店信息请求 + c.registerMessage(GetShopmallDataRsp, &proto.GetShopmallDataRsp{}) // 商店信息响应 + c.registerMessage(GetShopReq, &proto.GetShopReq{}) // 商店详情请求 + c.registerMessage(GetShopRsp, &proto.GetShopRsp{}) // 商店详情响应 + c.registerMessage(BuyGoodsReq, &proto.BuyGoodsReq{}) // 商店货物购买请求 + c.registerMessage(BuyGoodsRsp, &proto.BuyGoodsRsp{}) // 商店货物购买响应 + c.registerMessage(McoinExchangeHcoinReq, &proto.McoinExchangeHcoinReq{}) // 结晶换原石请求 + c.registerMessage(McoinExchangeHcoinRsp, &proto.McoinExchangeHcoinRsp{}) // 结晶换原石响应 // 耐力 - a.registerMessage(SceneAvatarStaminaStepReq, &proto.SceneAvatarStaminaStepReq{}) // 缓慢游泳或缓慢攀爬时消耗耐力请求 - a.registerMessage(SceneAvatarStaminaStepRsp, &proto.SceneAvatarStaminaStepRsp{}) // 缓慢游泳或缓慢攀爬时消耗耐力响应 + c.registerMessage(SceneAvatarStaminaStepReq, &proto.SceneAvatarStaminaStepReq{}) // 缓慢游泳或缓慢攀爬时消耗耐力请求 + c.registerMessage(SceneAvatarStaminaStepRsp, &proto.SceneAvatarStaminaStepRsp{}) // 缓慢游泳或缓慢攀爬时消耗耐力响应 // 乱七八糟 - a.registerMessage(MarkMapReq, &proto.MarkMapReq{}) // 标记地图请求 - a.registerMessage(TowerAllDataReq, &proto.TowerAllDataReq{}) // 深渊数据请求 - a.registerMessage(TowerAllDataRsp, &proto.TowerAllDataRsp{}) // 深渊数据响应 - a.registerMessage(ServerAnnounceNotify, &proto.ServerAnnounceNotify{}) // 服务器公告通知 - a.registerMessage(ServerAnnounceRevokeNotify, &proto.ServerAnnounceRevokeNotify{}) // 服务器公告撤销通知 + c.registerMessage(MarkMapReq, &proto.MarkMapReq{}) // 标记地图请求 + c.registerMessage(TowerAllDataReq, &proto.TowerAllDataReq{}) // 深渊数据请求 + c.registerMessage(TowerAllDataRsp, &proto.TowerAllDataRsp{}) // 深渊数据响应 + c.registerMessage(ServerAnnounceNotify, &proto.ServerAnnounceNotify{}) // 服务器公告通知 + c.registerMessage(ServerAnnounceRevokeNotify, &proto.ServerAnnounceRevokeNotify{}) // 服务器公告撤销通知 //// TODO - //a.registerMessage(EvtAiSyncSkillCdNotify, &proto.EvtAiSyncSkillCdNotify{}) - //a.registerMessage(EvtAiSyncCombatThreatInfoNotify, &proto.EvtAiSyncCombatThreatInfoNotify{}) - //a.registerMessage(EntityConfigHashNotify, &proto.EntityConfigHashNotify{}) - //a.registerMessage(MonsterAIConfigHashNotify, &proto.MonsterAIConfigHashNotify{}) - //a.registerMessage(GetRegionSearchReq, &proto.GetRegionSearchReq{}) - //a.registerMessage(ObstacleModifyNotify, &proto.ObstacleModifyNotify{}) - //a.registerMessage(EvtCreateGadgetNotify, &proto.EvtCreateGadgetNotify{}) - //a.registerMessage(EvtDestroyGadgetNotify, &proto.EvtDestroyGadgetNotify{}) + //c.registerMessage(EvtAiSyncSkillCdNotify, &proto.EvtAiSyncSkillCdNotify{}) + //c.registerMessage(EvtAiSyncCombatThreatInfoNotify, &proto.EvtAiSyncCombatThreatInfoNotify{}) + //c.registerMessage(EntityConfigHashNotify, &proto.EntityConfigHashNotify{}) + //c.registerMessage(MonsterAIConfigHashNotify, &proto.MonsterAIConfigHashNotify{}) + //c.registerMessage(GetRegionSearchReq, &proto.GetRegionSearchReq{}) + //c.registerMessage(ObstacleModifyNotify, &proto.ObstacleModifyNotify{}) + //c.registerMessage(EvtCreateGadgetNotify, &proto.EvtCreateGadgetNotify{}) + //c.registerMessage(EvtDestroyGadgetNotify, &proto.EvtDestroyGadgetNotify{}) // 空消息 - a.registerMessage(65535, &proto.NullMsg{}) + c.registerMessage(65535, &proto.NullMsg{}) } -func (a *CmdProtoMap) registerMessage(cmdId uint16, protoObj pb.Message) { - _, exist := a.cmdDeDupMap[cmdId] +func (c *CmdProtoMap) registerMessage(cmdId uint16, protoObj pb.Message) { + _, exist := c.cmdDeDupMap[cmdId] if exist { logger.LOG.Error("reg dup msg, cmd id: %v", cmdId) return } else { - a.cmdDeDupMap[cmdId] = true + c.cmdDeDupMap[cmdId] = true } // cmdId -> protoObj - a.cmdIdProtoObjMap[cmdId] = reflect.TypeOf(protoObj) + c.cmdIdProtoObjMap[cmdId] = reflect.TypeOf(protoObj) // protoObj -> cmdId - a.protoObjCmdIdMap[reflect.TypeOf(protoObj)] = cmdId + c.protoObjCmdIdMap[reflect.TypeOf(protoObj)] = cmdId } -func (a *CmdProtoMap) GetProtoObjByCmdId(cmdId uint16) (protoObj pb.Message) { - protoObjTypePointer, ok := a.cmdIdProtoObjMap[cmdId] +func (c *CmdProtoMap) GetProtoObjByCmdId(cmdId uint16) (protoObj pb.Message) { + protoObjTypePointer, ok := c.cmdIdProtoObjMap[cmdId] if !ok { logger.LOG.Error("unknown cmd id: %v", cmdId) protoObj = nil @@ -264,9 +267,9 @@ func (a *CmdProtoMap) GetProtoObjByCmdId(cmdId uint16) (protoObj pb.Message) { return protoObj } -func (a *CmdProtoMap) GetCmdIdByProtoObj(protoObj pb.Message) (cmdId uint16) { +func (c *CmdProtoMap) GetCmdIdByProtoObj(protoObj pb.Message) (cmdId uint16) { var ok = false - cmdId, ok = a.protoObjCmdIdMap[reflect.TypeOf(protoObj)] + cmdId, ok = c.protoObjCmdIdMap[reflect.TypeOf(protoObj)] if !ok { logger.LOG.Error("unknown proto object: %v", protoObj) cmdId = 0