From 1d830ea8085f13cbf021402124310e7d5c733437 Mon Sep 17 00:00:00 2001 From: 1 <1@72wo.cn> Date: Tue, 16 Dec 2025 08:35:22 +0000 Subject: [PATCH] =?UTF-8?q?"refactor(map):=20=E4=BC=98=E5=8C=96=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E6=80=AA=E7=89=A9=E5=88=B7=E6=96=B0=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E8=B0=83=E6=95=B4=E5=A4=A9=E6=B0=94=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logic/controller/map.go | 2 ++ logic/service/player/Monster.go | 24 +++++++++++++----------- logic/service/player/new.go | 12 +++++++----- logic/service/player/player.go | 2 +- logic/service/player/save.go | 2 +- logic/service/space/boss_wer.go | 15 --------------- logic/service/space/space.go | 24 ++++++++++++++++++++---- 7 files changed, 44 insertions(+), 37 deletions(-) diff --git a/logic/controller/map.go b/logic/controller/map.go index 96b8e140..bc304d4e 100644 --- a/logic/controller/map.go +++ b/logic/controller/map.go @@ -3,6 +3,7 @@ package controller import ( "blazing/common/socket/errorcode" "sync/atomic" + "time" "blazing/logic/service/fight" "blazing/logic/service/maphot" @@ -38,6 +39,7 @@ func (h Controller) MapHot(data *maphot.InInfo, c *player.Player) (result *mapho } func (h *Controller) MapLeave(data *space.LeaveMapInboundInfo, c *player.Player) (result *info.LeaveMapOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 atomic.StoreUint32(&c.Canmon, 0) + c.MapNPC.Reset(5 * time.Second) //data.Broadcast(c.Info.MapID, info.LeaveMapOutboundInfo{UserID: c.Info.UserID}) //同步广播 result = &info.LeaveMapOutboundInfo{ UserID: c.Info.UserID, diff --git a/logic/service/player/Monster.go b/logic/service/player/Monster.go index 86a7148b..e6912565 100644 --- a/logic/service/player/Monster.go +++ b/logic/service/player/Monster.go @@ -6,6 +6,7 @@ import ( "blazing/logic/service/common" "strings" "sync/atomic" + "time" "github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/grand" @@ -19,20 +20,22 @@ func RandomStringFromSlice(s []string) string { } // 刷怪具体实现 -func (p *Player) SpawnMonsters() { - // 获取当前地图的怪物配置 - // 创建数据包 - tt := common.NewTomeeHeader(2004, p.Info.UserID) +func (p *Player) Next(time.Time) time.Time { + if atomic.LoadUint32(&p.Canmon) != 1 { + return time.Now().Add(5 * time.Second) + } + - p.genMonster() //生成野怪 - - p.SendPack(tt.Pack(&p.OgreInfo)) + return time.Now().Add(10 * time.Second) } // 应该根据怪物信息决定后端生成 func (p *Player) genMonster() { + if atomic.LoadUint32(&p.Canmon) == 0 { //已经进入地图或者没在战斗中,就可以刷新怪 + return + } var oldnum, newNum int p.monsters, oldnum, newNum = replaceOneNumber(p.monsters) // 设置怪物信息 @@ -99,10 +102,9 @@ func (p *Player) genMonster() { } p.OgreInfo.Data[oldnum] = OgrePetInfo{} p.OgreInfo.Data[newNum] = t1.Data[newNum] - // for i, e := range p.OgreInfo.Data { - // println(i, e.Id, len(e.ShinyInfo)) - - // } + // 创建数据包 + tt := common.NewTomeeHeader(2004, p.Info.UserID) + p.SendPack(tt.Pack(&p.OgreInfo)) } diff --git a/logic/service/player/new.go b/logic/service/player/new.go index ab0a6adf..1258888c 100644 --- a/logic/service/player/new.go +++ b/logic/service/player/new.go @@ -15,14 +15,16 @@ func NewPlayer(opts ...PlayerOption) *Player { HavePVPinfo: make([]common.PlayerI, 0), baseplayer: newbaseplayer(), } - + p.User = service.NewBaseSysUserService() p.monsters = generateThreeUniqueNumbers() p.Done = NewDone(p) //发布订阅事件 - p.StopChan = cool.Cron.ScheduleFunc(10*time.Second, func() { - if p.Canmon != 0 { //已经进入地图或者没在战斗中,就可以刷新怪 - p.SpawnMonsters() - } + p.MapNPC = cool.Cron.ScheduleFunc(10*time.Second, func() { + + // 获取当前地图的怪物配置 + + p.genMonster() //生成野怪 + }) for _, opt := range opts { diff --git a/logic/service/player/player.go b/logic/service/player/player.go index 9a1c351b..ad55f671 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -84,7 +84,7 @@ type Player struct { IsLogin bool //是否登录 Done - StopChan timer.TimeNoder + MapNPC timer.TimeNoder context.Context Fightinfo info.Fightinfo //当前邀请的玩家ID diff --git a/logic/service/player/save.go b/logic/service/player/save.go index 146a51b3..1130a51e 100644 --- a/logic/service/player/save.go +++ b/logic/service/player/save.go @@ -50,7 +50,7 @@ func (p *Player) Save() { p.Service.Info.Save(*p.Info) space.GetSpace(p.Info.MapID).LeaveMap(p) - p.StopChan.Stop() //停止刷怪 + p.MapNPC.Stop() //停止刷怪 p.IsLogin = false diff --git a/logic/service/space/boss_wer.go b/logic/service/space/boss_wer.go index 1990bcc8..69061ce2 100644 --- a/logic/service/space/boss_wer.go +++ b/logic/service/space/boss_wer.go @@ -37,21 +37,6 @@ func (s *Space) getwerboss() { } func (t *Space) Next(time.Time) time.Time { - if t.CanWeather == 1 { - var neww uint32 = 0 - - if grand.Meet(1, 10) { - neww = uint32(grand.N(1, 2)) - - } - - if neww != t.Weather { - t.Broadcast(nil, 50004, &info.S2C_50004{Id: uint32(neww)}) - t.Weather = neww - t.getwerboss() - } - - } return time.Now().Add(grand.D(6*time.Second, 30*time.Second)) diff --git a/logic/service/space/space.go b/logic/service/space/space.go index a9721a84..155e1855 100644 --- a/logic/service/space/space.go +++ b/logic/service/space/space.go @@ -8,6 +8,7 @@ import ( "blazing/logic/service/common" "blazing/logic/service/space/info" + "github.com/gogf/gf/v2/util/grand" csmap "github.com/mhmtszr/concurrent-swiss-map" "github.com/samber/lo" "github.com/tnnmigga/enum" @@ -34,9 +35,9 @@ type Space struct { Name string //地图名称 Owner ARENA info.MapBossInfo - TimeBoss info.S2C_2022 - Weather uint32 - CanWeather uint32 + TimeBoss info.S2C_2022 + Weather uint32 + //CanWeather uint32 } // NewSyncMap 创建一个新的玩家同步map @@ -113,8 +114,23 @@ func GetSpace(id uint32) *Space { } if _, ok := lo.Find(wermap, func(mapID uint32) bool { return mapID == ret.ID }); ok { - ret.CanWeather = 1 + // ret.CanWeather = 1 cool.Cron.CustomFunc(ret, func() { + //if ret.CanWeather == 1 { + var neww uint32 = 0 + + if grand.Meet(1, 10) { + neww = uint32(grand.N(1, 2)) + + } + + if neww != ret.Weather { + ret.Broadcast(nil, 50004, &info.S2C_50004{Id: uint32(neww)}) + ret.Weather = neww + ret.getwerboss() + } + + //} })