From 5a44154d3094ac747d51bf56ea5a32fd9ce6643c Mon Sep 17 00:00:00 2001 From: xinian Date: Mon, 6 Apr 2026 05:24:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=8C=B9=E9=85=8D=E5=92=8C=E6=88=98=E6=96=97?= =?UTF-8?q?=E7=AD=89=E7=BA=A7=E4=B8=8A=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logic/controller/fight_boss野怪和地图怪.go | 5 ++++- logic/controller/fight_pvp_withplayer.go | 2 +- logic/service/fight/pvp/service.go | 7 +++++- logic/service/space/space.go | 25 +++++++++++++++++++++- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/logic/controller/fight_boss野怪和地图怪.go b/logic/controller/fight_boss野怪和地图怪.go index 191679c5..ec519c69 100644 --- a/logic/controller/fight_boss野怪和地图怪.go +++ b/logic/controller/fight_boss野怪和地图怪.go @@ -27,7 +27,10 @@ func (Controller) PlayerFightBoss(req *ChallengeBossInboundInfo, p *player.Playe return nil, err } - mapNode := service.NewMapNodeService().GetDataNode(p.Info.MapID, req.BossId) + mapNode := p.GetSpace().GetMatchedMapNode(req.BossId) + if mapNode == nil { + return nil, errorcode.ErrorCodes.ErrPokemonNotExists + } bossConfigs, err := loadMapBossConfigs(mapNode) if err != 0 { return nil, err diff --git a/logic/controller/fight_pvp_withplayer.go b/logic/controller/fight_pvp_withplayer.go index e3a91176..414c937a 100644 --- a/logic/controller/fight_pvp_withplayer.go +++ b/logic/controller/fight_pvp_withplayer.go @@ -55,7 +55,7 @@ func (h Controller) OnPlayerHandleFightInvite(data *HandleFightInviteInboundInfo return } - _, err = fight.NewFight(v, c, v.GetInfo().PetList, c.GetInfo().PetList, func(foi model.FightOverInfo) { + _, err = fight.NewFight(v, c, v.GetPetInfo(100), c.GetPetInfo(100), func(foi model.FightOverInfo) { //println("好友对战测试", foi.Reason) diff --git a/logic/service/fight/pvp/service.go b/logic/service/fight/pvp/service.go index 70c4d92a..65a9988a 100644 --- a/logic/service/fight/pvp/service.go +++ b/logic/service/fight/pvp/service.go @@ -28,6 +28,7 @@ const ( queueTTL = 12 * time.Second banPickTimeout = 45 * time.Second banPickStartCmd = 2461 + battleLevelCap = 100 ) type localQueueTicket struct { @@ -665,7 +666,11 @@ func resolveBattlePets(catchTimes []uint32, limit int) []model.PetInfo { if pet == nil || pet.Data.ID == 0 { continue } - result = append(result, pet.Data) + petInfo := pet.Data + if petInfo.Level > battleLevelCap { + petInfo.Level = battleLevelCap + } + result = append(result, petInfo) } return result } diff --git a/logic/service/space/space.go b/logic/service/space/space.go index 24331c7e..2b6cc2ca 100644 --- a/logic/service/space/space.go +++ b/logic/service/space/space.go @@ -45,6 +45,7 @@ type Space struct { IsTime bool DropItemIds []uint32 PitS *csmap.CsMap[int, []model.MapPit] + MapNodeS *csmap.CsMap[uint32, *model.MapNode] } func NewSpace() *Space { @@ -52,6 +53,7 @@ func NewSpace() *Space { ret := &Space{ User: csmap.New[uint32, common.PlayerI](), UserInfo: csmap.New[uint32, info.SimpleInfo](), + MapNodeS: csmap.New[uint32, *model.MapNode](), } return ret @@ -185,12 +187,20 @@ func (ret *Space) init() { } ret.MapBossSInfo = info.MapModelBroadcastInfo{} ret.MapBossSInfo.INFO = make([]info.MapModelBroadcastEntry, 0) + + mapNodes := service.NewMapNodeService().GetData(ret.ID) + for i := range mapNodes { + ret.MapNodeS.Store(mapNodes[i].NodeID, &mapNodes[i]) + } if len(r.WeatherType) > 1 { ret.WeatherType = r.WeatherType cool.Cron.CustomFunc(ret, ret.GenWer) } - for _, v := range service.NewMapNodeService().GetDataB(ret.ID) { + for _, v := range mapNodes { + if v.IsBroadcast == 0 { + continue + } r := service.NewMapmodelService().GetDataByModelId(v.IsBroadcast) if r == nil { @@ -220,6 +230,19 @@ func (ret *Space) init() { } } +func (p *Space) GetMatchedMapNode(nodeID uint32) *model.MapNode { + if p == nil || p.MapNodeS == nil { + return nil + } + + mapNode, ok := p.MapNodeS.Load(nodeID) + if !ok || mapNode == nil || mapNode.Event == nil || !p.IsMatch(*mapNode.Event) { + return nil + } + + return mapNode +} + func (p *Space) IsMatch(t model.Event) bool { if len(t.Weather) > 0 { _, ok := lo.Find(t.Weather, func(item int32) bool {