2026-01-01 19:57:39 +08:00
|
|
|
|
package player
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2026-01-19 18:51:56 +08:00
|
|
|
|
"blazing/modules/player/model"
|
2026-01-01 19:57:39 +08:00
|
|
|
|
|
2026-01-19 18:51:56 +08:00
|
|
|
|
"github.com/pointernil/bitset32"
|
|
|
|
|
|
)
|
2026-01-01 19:57:39 +08:00
|
|
|
|
|
2026-02-05 23:44:07 +08:00
|
|
|
|
// SptCompletedTask 完成任务(单分支)
|
|
|
|
|
|
// 优化点:仅当奖励存在时,才完成任务并发放奖励
|
2026-01-20 04:40:36 +08:00
|
|
|
|
func (p *Player) SptCompletedTask(taskID int, ot int) {
|
2026-02-07 00:18:14 +08:00
|
|
|
|
if !p.IsLogin {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-02-05 23:44:07 +08:00
|
|
|
|
// 1. 检查任务当前状态:未接受才处理
|
2026-03-05 15:20:19 +08:00
|
|
|
|
if p.Info.GetTask(taskID) == model.Completed {
|
2026-02-05 23:44:07 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-11 19:25:59 +08:00
|
|
|
|
if !p.canCompleteTaskReward(taskID, ot) {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
granted, err := p.ApplyTaskCompletion(uint32(taskID), ot, nil)
|
|
|
|
|
|
if err != 0 {
|
2026-02-05 23:44:07 +08:00
|
|
|
|
return
|
2026-01-20 04:40:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-05 23:44:07 +08:00
|
|
|
|
p.Info.SetTask(taskID, model.Completed)
|
2026-04-11 19:25:59 +08:00
|
|
|
|
p.SendTaskCompletionBonus(uint32(taskID), granted)
|
2026-01-20 04:40:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-05 23:44:07 +08:00
|
|
|
|
// TawerCompletedTask 完成塔类任务(多分支)
|
|
|
|
|
|
// 优化点:1. 默认分支仅奖励存在时才完成主任务 2. 指定分支仅奖励存在时才标记完成并发奖
|
2026-01-20 04:40:36 +08:00
|
|
|
|
func (p *Player) TawerCompletedTask(taskID int, ot int) {
|
2026-02-07 00:18:14 +08:00
|
|
|
|
if !p.IsLogin {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-02-05 23:44:07 +08:00
|
|
|
|
// 处理默认分支(ot=-1):仅奖励存在时才完成主任务
|
2026-03-11 12:19:13 +08:00
|
|
|
|
if p.Info.GetTask(taskID) != model.Completed {
|
2026-04-11 19:25:59 +08:00
|
|
|
|
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)
|
|
|
|
|
|
}
|
2026-02-05 23:44:07 +08:00
|
|
|
|
}
|
2026-01-19 18:51:56 +08:00
|
|
|
|
}
|
2026-01-01 19:57:39 +08:00
|
|
|
|
|
2026-02-05 23:44:07 +08:00
|
|
|
|
// 处理指定分支(ot):仅奖励存在时才标记分支完成并发奖
|
2026-04-10 10:28:22 +08:00
|
|
|
|
taskData, err := p.Service.Task.GetTask(uint32(taskID))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-02-05 23:44:07 +08:00
|
|
|
|
|
2026-04-11 19:25:59 +08:00
|
|
|
|
if !p.canCompleteTaskReward(taskID, ot) {
|
2026-04-10 10:28:22 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-01-01 19:57:39 +08:00
|
|
|
|
|
2026-04-10 10:28:22 +08:00
|
|
|
|
r := bitset32.From(taskData.Data)
|
|
|
|
|
|
if !r.Test(uint(ot)) {
|
|
|
|
|
|
r.Set(uint(ot))
|
2026-04-11 19:25:59 +08:00
|
|
|
|
granted, rewardErr := p.ApplyTaskCompletion(uint32(taskID), ot, nil)
|
|
|
|
|
|
if rewardErr != 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
p.SendTaskCompletionBonus(uint32(taskID), granted)
|
2026-04-10 10:28:22 +08:00
|
|
|
|
taskData.Data = r.Bytes()
|
|
|
|
|
|
_ = p.Service.Task.SetTask(taskData)
|
|
|
|
|
|
}
|
2026-01-19 18:51:56 +08:00
|
|
|
|
}
|