Files
bl/logic/service/player/boss.go
xinian f6aa0c3339
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
feat: 重构任务奖励系统并增加宠物技能和皮肤奖励
将任务奖励逻辑重构到单独的文件中,增加对宠物技能和皮肤奖励的支持,优化任务完成处理流程
2026-04-11 19:25:59 +08:00

72 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package player
import (
"blazing/modules/player/model"
"github.com/pointernil/bitset32"
)
// SptCompletedTask 完成任务(单分支)
// 优化点:仅当奖励存在时,才完成任务并发放奖励
func (p *Player) SptCompletedTask(taskID int, ot int) {
if !p.IsLogin {
return
}
// 1. 检查任务当前状态:未接受才处理
if p.Info.GetTask(taskID) == model.Completed {
return
}
if !p.canCompleteTaskReward(taskID, ot) {
return
}
granted, err := p.ApplyTaskCompletion(uint32(taskID), ot, nil)
if err != 0 {
return
}
p.Info.SetTask(taskID, model.Completed)
p.SendTaskCompletionBonus(uint32(taskID), granted)
}
// TawerCompletedTask 完成塔类任务(多分支)
// 优化点1. 默认分支仅奖励存在时才完成主任务 2. 指定分支仅奖励存在时才标记完成并发奖
func (p *Player) TawerCompletedTask(taskID int, ot int) {
if !p.IsLogin {
return
}
// 处理默认分支ot=-1仅奖励存在时才完成主任务
if p.Info.GetTask(taskID) != model.Completed {
if p.canCompleteTaskReward(taskID, -1) {
granted, err := p.ApplyTaskCompletion(uint32(taskID), -1, nil)
if err == 0 {
p.Info.SetTask(taskID, model.Completed)
p.SendTaskCompletionBonus(uint32(taskID), granted)
}
}
}
// 处理指定分支ot仅奖励存在时才标记分支完成并发奖
taskData, err := p.Service.Task.GetTask(uint32(taskID))
if err != nil {
return
}
if !p.canCompleteTaskReward(taskID, ot) {
return
}
r := bitset32.From(taskData.Data)
if !r.Test(uint(ot)) {
r.Set(uint(ot))
granted, rewardErr := p.ApplyTaskCompletion(uint32(taskID), ot, nil)
if rewardErr != 0 {
return
}
p.SendTaskCompletionBonus(uint32(taskID), granted)
taskData.Data = r.Bytes()
_ = p.Service.Task.SetTask(taskData)
}
}