diff --git a/logic/controller/map.go b/logic/controller/map.go index 1dc80d9ca..62e99780b 100644 --- a/logic/controller/map.go +++ b/logic/controller/map.go @@ -12,25 +12,22 @@ import ( "blazing/logic/service/player" "blazing/logic/service/space" - - "github.com/jinzhu/copier" ) func (h Controller) EnterMap(data *space.InInfo, c *player.Player) (result *info.SimpleInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 - c.Info.MapID = data.MapId //登录地图 - c.GetSpace().User.Store(c.Info.UserID, c) //添加玩家 + c.Info.MapID = data.MapId //登录地图 + c.Info.Pos = data.Point if cool.Config.ServerInfo.IsDebug != 0 { println("进入地图", c.Info.UserID, c.Info.MapID) } - result = info.NewOutInfo() - c.Info.Pos = data.Point - copier.CopyWithOption(result, c.Info, copier.Option{DeepCopy: true}) + + // copier.CopyWithOption(result, c.Info, copier.Option{DeepCopy: true}) defer c.GetSpace().EnterMap(c) - return result, 0 + return nil, -1 } func (h Controller) GetMapHot(data *maphot.InInfo, c *player.Player) (result *maphot.OutInfo, err errorcode.ErrorCode) { diff --git a/logic/service/player/pack.go b/logic/service/player/pack.go index 96320d86f..c52e6370a 100644 --- a/logic/service/player/pack.go +++ b/logic/service/player/pack.go @@ -75,6 +75,7 @@ func (h *ClientData) Recv(data common.TomeeHeader) { // fmt.Println(tt1) err := struc.Unpack(bytes.NewBuffer(data.Data), tt1) if err != nil { + h.Conn.Close() fmt.Println(data.UserID, data.CMD, "解包失败,", hex.EncodeToString(data.Data)) return } diff --git a/logic/service/space/in_out.go b/logic/service/space/in_out.go index a42a97427..aa7806ae8 100644 --- a/logic/service/space/in_out.go +++ b/logic/service/space/in_out.go @@ -12,7 +12,7 @@ import ( ) // 向其他人广播,不含自己 -// 广播是c为空就不特判,发给全体成员广播 +// 广播是c 为空就不特判,发给全体成员广播 func (s *Space) Broadcast(c common.PlayerI, cmd uint32, data any) { s.User.Range(func(k uint32, v common.PlayerI) (stop bool) { if c != nil { @@ -30,15 +30,10 @@ func (s *Space) Broadcast(c common.PlayerI, cmd uint32, data any) { } func (s *Space) LeaveMap(c common.PlayerI) { + info := &info.LeaveMapOutboundInfo{UserID: c.GetInfo().UserID} + c.SendPackCmd(2002, info) - if atomic.CompareAndSwapUint32(&s.Owner.UserID, c.GetInfo().UserID, 0) { - - s.Owner.Reset() - - s.Broadcast(c, 2419, &s.Owner) - - } - s.Broadcast(c, 2002, &info.LeaveMapOutboundInfo{UserID: c.GetInfo().UserID}) + s.Broadcast(c, 2002, info) s.User.Delete(c.GetInfo().UserID) s.UserInfo.Delete(c.GetInfo().UserID) @@ -46,7 +41,13 @@ func (s *Space) LeaveMap(c common.PlayerI) { if ok && *current > 0 { atomic.AddInt32(maphot[s.Super], -1) } + if atomic.CompareAndSwapUint32(&s.Owner.UserID, c.GetInfo().UserID, 0) { + s.Owner.Reset() + + s.Broadcast(c, 2419, &s.Owner) + + } } func (s *Space) EnterMap(c common.PlayerI) { @@ -56,6 +57,7 @@ func (s *Space) EnterMap(c common.PlayerI) { s.User.Store(c.GetInfo().UserID, c) s.UserInfo.Store(c.GetInfo().UserID, *out) + c.SendPackCmd(2001, out) s.Broadcast(c, 2001, out) _, ok := maphot[s.Super] if ok { diff --git a/modules/base/controller/admin/base_sys_user.go b/modules/base/controller/admin/base_sys_user.go index d946d12df..8a17d908d 100644 --- a/modules/base/controller/admin/base_sys_user.go +++ b/modules/base/controller/admin/base_sys_user.go @@ -72,18 +72,23 @@ func (c *BaseSysUserController) GetSession(ctx context.Context, req *SessionReq) res.Server = config.NewServerService().GetPort(int(t1.Debug)) // share.ShareManager.DeleteSession(t1) ser := playerservice.NewUserService(uint32(t1.ID)) - kickErr := ser.Info.Kick(uint32(t1.ID)) - if kickErr != nil { - fmt.Println("踢人失败", kickErr) - } - logininfo := ser.Info.SetLogin() - if logininfo != nil { + res.Session = blazing.NewInfoService(uint32(t.UserId)).Gensession() + defer func() { + kickErr := ser.Info.Kick(uint32(t1.ID)) + if kickErr != nil { + fmt.Println("踢人失败", kickErr) - res.Session = blazing.NewInfoService(uint32(t.UserId)).Gensession() - cool.CacheManager.Set(context.TODO(), fmt.Sprintf("player:%d", uint32(t1.ID)), logininfo, 10*time.Minute) + } + logininfo := ser.Info.SetLogin() + if logininfo != nil { + + cool.CacheManager.Set(context.Background(), fmt.Sprintf("session:%d", uint32(t1.ID)), res.Session, 0) + cool.CacheManager.Set(context.TODO(), fmt.Sprintf("player:%d", uint32(t1.ID)), logininfo, 10*time.Minute) + + } + }() - } return } diff --git a/modules/player/service/info.go b/modules/player/service/info.go index ce2573245..2de3a2d84 100644 --- a/modules/player/service/info.go +++ b/modules/player/service/info.go @@ -161,7 +161,7 @@ func (s *InfoService) Gensession() string { uuidBytes, _ := hex.DecodeString(uuidStr) sessionID := hex.EncodeToString(uuidBytes) - cool.CacheManager.Set(context.Background(), fmt.Sprintf("session:%d", uint32(s.userid)), sessionID, 0) + // ///User.Store(string(uuidStr), uint32(s.userid)) // //share.ShareManager.SaveSession(string(uuidStr), uint32(s.userid)) return sessionID @@ -190,8 +190,11 @@ func (s *InfoService) Save(data model.PlayerInfo) { return } m := s.PModel(s.Model) - var tt model.PlayerEX + var tt *model.PlayerEX m.Scan(&tt) + if tt == nil { + return + } tt.Data = data _, err := m.Save(tt) if err != nil {