From eff23d5bd02c2947ac72519251e953e20ecfdb7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn> Date: Mon, 13 Oct 2025 23:38:48 +0800 Subject: [PATCH] =?UTF-8?q?fix(login):=20=E6=B7=B1=E6=8B=B7=E8=B4=9D?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E4=BB=A5=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=AB=9E=E4=BA=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在登录逻辑中,使用 `copier.CopyWithOption` 进行深拷贝,确保发送给其他玩家的 玩家信息不会因为引用同一对象而导致数据异常。同时修正了部分字段注释和默认值说明。 feat(maps): 更新地图角色信息结构体字段描述 更新 `OutInfo` 结构体中的 `Action`、`Direction` 和 `ChangeShape` 字段的注释, 使其更准确地反映其用途和含义,便于后续维护与开发理解。 fix(player): 完善登录位置判断条件 在玩家完成登录时,除了判断 `MapID > 10000` 外,增加对 `MapID == 0` 的处理, 确保角色能正确被传送到默认地图。 refactor(walk): 移除无用上下文导入并优化日志记录 移除了未使用的 `context` 包导入,并调整了行走逻辑中的赋值顺序,使代码更清晰。 同时注释掉不再需要的调试日志输出语句。 --- logic/controller/login.go | 11 ++++++----- logic/controller/map.go | 2 +- logic/controller/walk.go | 7 +++---- logic/service/maps/mapin.go | 6 +++--- logic/service/player/player.go | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/logic/controller/login.go b/logic/controller/login.go index 88e950c00..67ffd6d7a 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -16,6 +16,7 @@ import ( "time" "github.com/gogf/gf/v2/os/glog" + "github.com/jinzhu/copier" ) func IsToday(t time.Time) bool { @@ -78,14 +79,14 @@ func (h *Controller) Login(data *user.MAIN_LOGIN_IN, c *player.Conn) (result *us result.PlayerInfo = *t.Info - tt := maps.NewOutInfo() - //copier.Copy(t.Info, tt) - t1 := player.NewTomeeHeader(2001, t.Info.UserID) - defer func() { + tt := maps.NewOutInfo() + copier.CopyWithOption(tt, t.Info, copier.Option{DeepCopy: true}) + //copier.Copy(t.Info, tt) + t1 := player.NewTomeeHeader(2001, t.Info.UserID) space.GetSpace(t.Info.MapID).User.Set(t.Info.UserID, t) space.GetSpace(t.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) { - player.SendPack(t1.Pack(&tt)) + player.SendPack(t1.Pack(tt)) }) diff --git a/logic/controller/map.go b/logic/controller/map.go index 668b65999..ac1669f33 100644 --- a/logic/controller/map.go +++ b/logic/controller/map.go @@ -51,7 +51,7 @@ func (h *Controller) MapList(data *maps.ListMapPlayerInboundInfo, c *player.Play result.Player = make([]maps.OutInfo, 0) space.GetSpace(c.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) { result1 := maps.NewOutInfo() - copier.Copy(result1, player.GetInfo()) + copier.CopyWithOption(result1, player.GetInfo(), copier.Option{DeepCopy: true}) result.Player = append(result.Player, *result1) }) diff --git a/logic/controller/walk.go b/logic/controller/walk.go index 9fd9f7c71..0266bef4a 100644 --- a/logic/controller/walk.go +++ b/logic/controller/walk.go @@ -4,17 +4,16 @@ import ( "blazing/common/socket/errorcode" "blazing/logic/service/maps" "blazing/logic/service/player" - "context" - "github.com/gogf/gf/v2/os/glog" "github.com/jinzhu/copier" ) func (h Controller) Walk(data *maps.WalkInInfo, c *player.Player) (result *maps.WalkOutInfo, err errorcode.ErrorCode) { result = &maps.WalkOutInfo{} - err1 := copier.Copy(result, data) + copier.Copy(result, data) result.UserID = data.Head.UserID - glog.Debug(context.Background(), err1) + c.Info.Pos = data.Point + //glog.Debug(context.Background(), err1) data.Broadcast(c.Info.MapID, *result) //走路的广播 return nil, -1 diff --git a/logic/service/maps/mapin.go b/logic/service/maps/mapin.go index f975b5282..b73d22214 100644 --- a/logic/service/maps/mapin.go +++ b/logic/service/maps/mapin.go @@ -62,13 +62,13 @@ type OutInfo struct { // 上线的地图id Pos model.Pos `fieldDesc:"上线的地图id" json:"pos"` - // 暂时不明给0 + // 动作, 大于10000时为蹲下 Action uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"action"` - // 暂时不明给2 + // 动作, 默认情况下为2, 蹲下为3 Direction uint32 `struc:"uint32" default:"2" fieldDesc:"暂时不明给2" json:"direction"` - // 暂时不明给0 + // 变形套装ID ChangeShape uint32 `struc:"uint32" fieldDesc:"暂时不明给0" json:"change_shape"` // 暂时不明给0 diff --git a/logic/service/player/player.go b/logic/service/player/player.go index c32196bba..bff114432 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -369,7 +369,7 @@ func (lw *Player) WaitForLoginWithCtx(ctx context.Context) error { func (lw *Player) CompleteLogin() { lw.mu.Lock() defer lw.mu.Unlock() - if lw.Info.MapID > 10000 { //如果位于基地,就重置到传送仓 + if lw.Info.MapID > 10000 || lw.Info.MapID == 0 { //如果位于基地,就重置到传送仓 lw.Info.MapID = 1 }