diff --git a/logic/controller/map.go b/logic/controller/map.go index 0ad79c23..112cc02e 100644 --- a/logic/controller/map.go +++ b/logic/controller/map.go @@ -14,8 +14,9 @@ import ( func (h *Controller) MapEnter(data *maps.InInfo, c *player.Player) (result *maps.OutInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 - c.Info.MapID = data.MapId //登录地图 - space.GetSpace(c.Info.MapID).Set(c.Info.UserID, c) //添加玩家 + c.Info.MapID = data.MapId //登录地图 + t := space.GetSpace(c.Info.MapID) + t.Set(c.Info.UserID, c) //添加玩家 result = maps.NewOutInfo() c.Info.Pos = data.Point copier.Copy(result, c.Info) diff --git a/logic/service/space/space.go b/logic/service/space/space.go index 71a75d39..793ebe7c 100644 --- a/logic/service/space/space.go +++ b/logic/service/space/space.go @@ -12,14 +12,14 @@ import ( // Space 针对Player的并发安全map,键为uint32类型 type Space struct { - mu sync.RWMutex // 读写锁,读多写少场景更高效 - data utils.ConcurrentMap[uint32, common.PlayerI]// 存储玩家数据的map,键为玩家ID - CanRefresh bool //是否能够刷怪 - ID uint32 // 地图ID - Name string //地图名称 - DefaultPos model.Pos //默认位置DefaultPos - - Positions *utils.SyncMap[uint32, model.Pos] //从上一个地图跳转后默认位置 + mu sync.RWMutex // 读写锁,读多写少场景更高效 + data utils.ConcurrentMap[uint32, common.PlayerI] // 存储玩家数据的map,键为玩家ID + CanRefresh bool //是否能够刷怪 + ID uint32 // 地图ID + Name string //地图名称 + DefaultPos model.Pos //默认位置DefaultPos + + //Positions map[uint32]model.Pos //从上一个地图跳转后默认位置 无任何写操作 } // NewSyncMap 创建一个新的玩家同步map @@ -96,14 +96,14 @@ func GetSpace(id uint32) *Space { for _, v := range xmlres.MapConfig.Maps { if v.ID == int(id) { //找到这个地图 t := NewSpace() - t.DefaultPos = model.Pos{X: uint32(v.X), Y: uint32(v.Y)} + //t.DefaultPos = model.Pos{X: uint32(v.X), Y: uint32(v.Y)} t.ID = uint32(v.ID) t.Name = v.Name - t.Positions = make(map[uint32]model.Pos) - for _, v := range v.Entries.Entries { //添加地图入口 - t.Positions[uint32(v.FromMap)] = model.Pos{X: uint32(v.PosX), Y: uint32(v.PosY)} + // t.Positions = make(map[uint32]model.Pos) + // for _, v := range v.Entries.Entries { //添加地图入口 + // t.Positions[uint32(v.FromMap)] = model.Pos{X: uint32(v.PosX), Y: uint32(v.PosY)} - } + // } planetmap.Store(id, t) return t