Files
bl/logic/service/player/boss.go
昔念 fcb55d3a46 ```
refactor(controller): 替换BossCompletedTask为专用方法名

在战斗控制器中将p.BossCompletedTask替换为p.SptCompletedTask,
以及在塔沃控制器中将BossCompletedTask相关调用替换为TawerCompletedTask,
以更好地区分不同的任务完成逻辑。

---

fix(item_use): 添加nil检查防止程序崩溃

在处理神经元道具时,增加对oldPet对象的nil检查,
如果为空则返回系统错误码,避免程序出现
2026-01-20 04:40:36 +08:00

75 lines
1.5 KiB
Go

package player
import (
"blazing/logic/service/fight/info"
"blazing/logic/service/task"
"blazing/modules/player/model"
"github.com/pointernil/bitset32"
)
func (p *Player) SptCompletedTask(taskID int, ot int) {
//完成每日
if p.Info.GetTask(taskID) == model.Unaccepted {
p.Info.SetTask(taskID, model.Completed) //设置完成任务
p.bossgive(taskID, ot)
}
}
// 这个是通过总任务去完成,还可以去实现完成分支
// boss的完成时限,所以先完成默认的分支,然后完成指定分支
func (p *Player) TawerCompletedTask(taskID int, ot int) {
//完成每日
if p.Info.GetTask(taskID) == model.Unaccepted {
p.Info.SetTask(taskID, model.Completed) //设置完成任务
p.bossgive(taskID, -1)
}
p.Service.Task.Exec(uint32(taskID), func(te *model.TaskEX) bool {
if te.Data == nil {
te.Data = []uint32{}
}
r := bitset32.From(te.Data)
if !r.Test(uint(ot)) {
r.Set(uint(ot))
p.bossgive(taskID, ot)
te.Data = r.Bytes()
return true
}
return false
})
}
func (p *Player) bossgive(taskID int, ot int) {
gift := task.GetTaskInfo((taskID), ot)
if gift != nil {
res := &info.S2C_GET_BOSS_MONSTER{
BonusID: uint32(taskID),
}
if gift.Pet != nil {
p.Service.Pet.PetAdd(gift.Pet)
res.PetID = gift.Pet.ID
res.CaptureTm = gift.Pet.CatchTime
}
for _, item := range gift.ItemList {
success := p.ItemAdd(item.ItemId, item.ItemCnt)
if success {
res.ItemList = append(res.ItemList, item)
}
}
if gift.Title != 0 {
p.GiveTitle(gift.Title)
}
p.SendPackCmd(8004, res)
}
}