From 2ee0cbc09430d751e01ec17c93598840b0bd3e61 Mon Sep 17 00:00:00 2001 From: xinian Date: Sun, 5 Apr 2026 07:28:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dboss=E5=A5=96=E5=8A=B1?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logic/controller/fight_boss野怪和地图怪.go | 14 ++++++++++---- logic/controller/fight_擂台.go | 21 ++++++++------------- logic/service/fight/info/over.go | 20 +++++++++++++++++++- logic/service/player/boss.go | 6 ++++-- 4 files changed, 41 insertions(+), 20 deletions(-) diff --git a/logic/controller/fight_boss野怪和地图怪.go b/logic/controller/fight_boss野怪和地图怪.go index 19d15088b..acfafda6e 100644 --- a/logic/controller/fight_boss野怪和地图怪.go +++ b/logic/controller/fight_boss野怪和地图怪.go @@ -18,6 +18,10 @@ import ( "github.com/gogf/gf/v2/util/grand" ) +const ( + rewardItemExpPool = 3 +) + // PlayerFightBoss 挑战地图boss func (Controller) PlayerFightBoss(req *ChallengeBossInboundInfo, p *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { if err = p.CanFight(); err != 0 { @@ -250,7 +254,7 @@ func handleNpcFightRewards(p *player.Player, foi model.FightOverInfo, monster *m rewards := &fightinfo.S2C_GET_BOSS_MONSTER{} p.ItemAdd(3, int64(poolexp+addexp)) - rewards.ADDitem(3, uint32(poolexp)) + rewards.AddItem(rewardItemExpPool, uint32(poolexp)) p.AddPetExp(foi.Winpet, int64(addexp)) if p.CanGetItem() { @@ -258,7 +262,7 @@ func handleNpcFightRewards(p *player.Player, foi model.FightOverInfo, monster *m if itemID != 0 { count := uint32(grand.N(1, 2)) if p.ItemAdd(itemID, int64(count)) { - rewards.ADDitem(uint32(itemID), count) + rewards.AddItem(uint32(itemID), count) } } } @@ -268,10 +272,12 @@ func handleNpcFightRewards(p *player.Player, foi model.FightOverInfo, monster *m xuanID := uint32(400686 + petType) count := uint32(grand.N(1, 2)) if p.ItemAdd(int64(xuanID), int64(count)) { - rewards.ADDitem(xuanID, count) + rewards.AddItem(xuanID, count) } } - p.SendPackCmd(8004, rewards) + if rewards.HasReward() { + p.SendPackCmd(8004, rewards) + } foi.Winpet.AddEV(gconv.Int64s(strings.Fields(petCfg.YieldingEV))) } diff --git a/logic/controller/fight_擂台.go b/logic/controller/fight_擂台.go index f0e464161..f79d32077 100644 --- a/logic/controller/fight_擂台.go +++ b/logic/controller/fight_擂台.go @@ -1,7 +1,6 @@ package controller import ( - "blazing/common/data" "blazing/common/socket/errorcode" "blazing/modules/player/model" "sync/atomic" @@ -35,9 +34,11 @@ func (h Controller) ArenaSetOwner(data *ARENA_SET_OWENR, c *player.Player) (resu return nil, errorcode.ErrorCodes.ErrChampionExists } + type ARENA_FIGHT_OWENR struct { Head common.TomeeHeader `cmd:"2418" struc:"skip"` } + // ArenaFightOwner 挑战擂台的包 // 还是后端主动发送2503的包给双方前端后 等待前端加载完毕 主动发送2404包通知后端开始战斗 // ArenaFightOwner 并不会通知对方是否接受挑战。只要有人挑战就直接进入对战 @@ -87,12 +88,9 @@ func (h Controller) ArenaFightOwner(data1 *ARENA_FIGHT_OWENR, c *player.Player) if addev != 0 { c.Info.EVPool += addev - c.SendPackCmd(8004, &info.S2C_GET_BOSS_MONSTER{ //发送EV - ItemList: []data.ItemInfo{{ - ItemId: 9, - ItemCnt: int64(addev), - }}, - }) + rewards := &info.S2C_GET_BOSS_MONSTER{} + rewards.AddItem(9, uint32(addev)) + c.SendPackCmd(8004, rewards) //发送EV } } else { @@ -103,12 +101,9 @@ func (h Controller) ArenaFightOwner(data1 *ARENA_FIGHT_OWENR, c *player.Player) if addev != 0 { c.GetSpace().Owner.ARENA_Player.GetInfo().EVPool += addev - c.GetSpace().Owner.ARENA_Player.SendPackCmd(8004, &info.S2C_GET_BOSS_MONSTER{ //发送EV - ItemList: []data.ItemInfo{{ - ItemId: 9, - ItemCnt: int64(addev), - }}, - }) + rewards := &info.S2C_GET_BOSS_MONSTER{} + rewards.AddItem(9, uint32(addev)) + c.GetSpace().Owner.ARENA_Player.SendPackCmd(8004, rewards) //发送EV } } diff --git a/logic/service/fight/info/over.go b/logic/service/fight/info/over.go index 2cdd5a4ef..5ced2f915 100644 --- a/logic/service/fight/info/over.go +++ b/logic/service/fight/info/over.go @@ -16,9 +16,27 @@ type S2C_GET_BOSS_MONSTER struct { // 3. 该List结构参考PetInfo的特性List(长度为Uint型,非int) } -func (s *S2C_GET_BOSS_MONSTER) ADDitem(id, count uint32) { +func (s *S2C_GET_BOSS_MONSTER) AddItem(id, count uint32) bool { + if id == 0 || count == 0 { + return false + } + s.ItemList = append(s.ItemList, data.ItemInfo{ ItemId: int64(id), ItemCnt: int64(count), }) + return true +} + +func (s *S2C_GET_BOSS_MONSTER) AddItemInfo(item data.ItemInfo) bool { + if item.ItemId == 0 || item.ItemCnt <= 0 { + return false + } + + s.ItemList = append(s.ItemList, item) + return true +} + +func (s *S2C_GET_BOSS_MONSTER) HasReward() bool { + return s.BonusID != 0 || s.PetID != 0 || s.CaptureTm != 0 || len(s.ItemList) > 0 } diff --git a/logic/service/player/boss.go b/logic/service/player/boss.go index 1b9da0e93..b6bb852e1 100644 --- a/logic/service/player/boss.go +++ b/logic/service/player/boss.go @@ -102,7 +102,7 @@ func (p *Player) bossgive(taskID int, ot int) { // 发放道具奖励(仅成功添加的道具才返回给前端) for _, item := range gift.ItemList { if success := p.ItemAdd(item.ItemId, item.ItemCnt); success { - res.ItemList = append(res.ItemList, item) + res.AddItemInfo(item) } } @@ -112,5 +112,7 @@ func (p *Player) bossgive(taskID int, ot int) { } // 发送奖励通知给前端 - p.SendPackCmd(8004, res) + if res.HasReward() { + p.SendPackCmd(8004, res) + } }