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) } }