diff --git a/logic/controller/walk.go b/logic/controller/walk.go index 32b71ec38..8872eeab4 100644 --- a/logic/controller/walk.go +++ b/logic/controller/walk.go @@ -3,22 +3,19 @@ package controller import ( "blazing/common/socket/errorcode" "blazing/logic/service/maps" + "blazing/logic/service/maps/info" "blazing/logic/service/player" ) -func (h Controller) Walk(data *maps.WalkInInfo, c *player.Player) (result *maps.WalkOutInfo, err errorcode.ErrorCode) { - result = &maps.WalkOutInfo{ - Flag: data.Flag, - Point: data.Point, - Path: data.Path, - } +func (h Controller) Walk(data *maps.WalkInInfo, c *player.Player) (result *info.WalkOutInfo, err errorcode.ErrorCode) { - result.UserID = data.Head.UserID + go c.GetSpace().Walk(info.WalkOutInfo{ + Flag: data.Flag, + Point: data.Point, + Path: data.Path, + UserID: c.Info.UserID, + }) - //glog.Debug(context.Background(), err1) - if !c.Info.Pos.BothLessThan50(data.Point) { //距离超过50才广播 - data.Broadcast(c.Info.MapID, *result) //走路的广播 - } c.Info.Pos = data.Point return nil, -1 } diff --git a/logic/service/common/playeri.go b/logic/service/common/playeri.go index 7dd596cfd..0ee36ca64 100644 --- a/logic/service/common/playeri.go +++ b/logic/service/common/playeri.go @@ -22,4 +22,5 @@ type PlayerI interface { SetFightC(FightI) SendLeaveMapInfo(b maps.LeaveMapOutboundInfo) SendEnterMapInfo(b maps.OutInfo) + SendWalkMapInfo(b maps.WalkOutInfo) } diff --git a/logic/service/maps/info/info.go b/logic/service/maps/info/info.go index e7654e637..d6f4111e9 100644 --- a/logic/service/maps/info/info.go +++ b/logic/service/maps/info/info.go @@ -13,6 +13,21 @@ type ListMapPlayerOutboundInfo struct { Player []OutInfo ` json:"player"` } +// PeopleWalkOutboundInfo PeopleWalkOutboundInfo类,实现OutboundMessage接口 +type WalkOutInfo struct { + // Flag: 0为走,1为飞行模式 + Flag uint32 `fieldDesc:"0为走,1为飞行模式" codec:"uint"` + + // UserID: 走动的人的米米号 + UserID uint32 `fieldDesc:"走动的人的米米号" codec:"uint"` + + // Point: 直接给坐标x,y + Point model.Pos `fieldDesc:"直接给坐标x,y"` + + PathLen uint32 `struc:"sizeof=Path" ` + Path string +} + // 这里存储星球的map //var planetmap utils.SyncMap[] //= space.NewSyncMap() diff --git a/logic/service/maps/walk.go b/logic/service/maps/walk.go index 3acda65fe..171bda59c 100644 --- a/logic/service/maps/walk.go +++ b/logic/service/maps/walk.go @@ -1,13 +1,9 @@ package maps import ( - "blazing/logic/service/common" "blazing/logic/service/player" - "blazing/logic/service/space" "blazing/modules/blazing/model" - - "golang.org/x/time/rate" ) type WalkInInfo struct { @@ -21,36 +17,3 @@ type WalkInInfo struct { PathLen uint32 `struc:"sizeof=Path" ` Path string } - -var limiter = rate.NewLimiter(rate.Limit(10), 5) - -func (t *WalkInInfo) Broadcast(mapid uint32, o WalkOutInfo) { - // cool.Limiter.Take() - //r := cool.Limiter.Get("Broadcast"+gconv.String(mapid), rate.Limit(10), 5) - if !limiter.Allow() { - return - } - - space.GetSpace(mapid).User.Range(func(playerID uint32, player common.PlayerI) bool { - t.Head.Result = 0 - tt := t.Head.Pack(&o) - player.SendPack(tt) - return false - }) - -} - -// PeopleWalkOutboundInfo PeopleWalkOutboundInfo类,实现OutboundMessage接口 -type WalkOutInfo struct { - // Flag: 0为走,1为飞行模式 - Flag uint32 `fieldDesc:"0为走,1为飞行模式" codec:"uint"` - - // UserID: 走动的人的米米号 - UserID uint32 `fieldDesc:"走动的人的米米号" codec:"uint"` - - // Point: 直接给坐标x,y - Point model.Pos `fieldDesc:"直接给坐标x,y"` - - PathLen uint32 `struc:"sizeof=Path" ` - Path string -} diff --git a/logic/service/player/ai.go b/logic/service/player/ai.go index d884ba8d6..74c2325a0 100644 --- a/logic/service/player/ai.go +++ b/logic/service/player/ai.go @@ -16,6 +16,9 @@ type AI_player struct { func (f *AI_player) SendPack(b []byte) error { return nil +} +func (p *AI_player) SendWalkMapInfo(b maps.WalkOutInfo) { + } func (p *AI_player) SendLeaveMapInfo(b maps.LeaveMapOutboundInfo) { diff --git a/logic/service/player/cmd.go b/logic/service/player/cmd.go index 4e8042c4a..a717ca139 100644 --- a/logic/service/player/cmd.go +++ b/logic/service/player/cmd.go @@ -23,6 +23,13 @@ func (p *Player) SendEnterMapInfo(b maps.OutInfo) { p.SendPack(t1.Pack(&b)) //准备包由各自发,因为协议不一样 } +func (p *Player) SendWalkMapInfo(b maps.WalkOutInfo) { + t1 := NewTomeeHeader(2101, p.Info.UserID) + + p.SendPack(t1.Pack(&b)) //准备包由各自发,因为协议不一样 + +} + func (p *Player) SendChangePet(b info.ChangePetInfo) { t1 := NewTomeeHeader(2407, p.Info.UserID) diff --git a/logic/service/space/in_out.go b/logic/service/space/in_out.go index 163d15b57..f639b6eff 100644 --- a/logic/service/space/in_out.go +++ b/logic/service/space/in_out.go @@ -7,6 +7,7 @@ import ( "sync/atomic" "github.com/jinzhu/copier" + "golang.org/x/time/rate" ) func (s *Space) LeaveMap(c common.PlayerI) { @@ -66,6 +67,24 @@ func (s *Space) GetInfo() []maps.OutInfo { return ret } + +var limiter = rate.NewLimiter(rate.Limit(10), 5) + +func (s *Space) Walk(b maps.WalkOutInfo) { + // cool.Limiter.Take() + //r := cool.Limiter.Get("Broadcast"+gconv.String(mapid), rate.Limit(10), 5) + if !limiter.Allow() { + return + } + + s.User.Range(func(playerID uint32, player common.PlayerI) bool { + player.SendWalkMapInfo(b) + + return false + }) + +} + func LastFourElements[T any](s []T) []T { n := len(s) if n <= 30 {