refactor(controller): 替换BossCompletedTask为专用方法名 在战斗控制器中将p.BossCompletedTask替换为p.SptCompletedTask, 以及在塔沃控制器中将BossCompletedTask相关调用替换为TawerCompletedTask, 以更好地区分不同的任务完成逻辑。 --- fix(item_use): 添加nil检查防止程序崩溃 在处理神经元道具时,增加对oldPet对象的nil检查, 如果为空则返回系统错误码,避免程序出现
75 lines
1.5 KiB
Go
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)
|
|
}
|
|
|
|
}
|