refactor(task): 重构任务奖励系统,优化任务奖励处理逻辑

移除废弃的任务相关代码文件,包括task/list.go和task/list_daily.go,
以及相关的模型定义config_task表和PetReward服务。

修改任务奖励获取方式,从原有的TaskResultMap改为通过数据库配置获取,
新增TaskService.Get方法用于获取任务配置信息。

---
feat(boss): 优化
This commit is contained in:
2025-12-31 21:00:29 +08:00
parent c082eb3e91
commit 3efbba3883
12 changed files with 117 additions and 433 deletions

View File

@@ -1,346 +0,0 @@
package task
import (
"blazing/common/data"
"sync"
)
// RegisterTask 注册任务奖励
// 参数任务ID、分支(OutState)、物品列表、精灵类型(0=无)
func RegisterTask(taskID uint32, outState uint32, items []data.ItemInfo, petType uint32) {
if _, ok := TaskResultMap[taskID]; !ok {
TaskResultMap[taskID] = make(map[uint32]TaskResult)
}
TaskResultMap[taskID][outState] = TaskResult{
ItemList: items,
PetTypeId: petType,
}
}
func init() {
// -------------------------- 新手任务 --------------------------
RegisterTask(85, 1, []data.ItemInfo{ // 新手任务1默认分支1
{100027, 1}, // 新手帽
{100028, 1}, // 新手腰带
{500001, 1}, // 精灵仓库
{500502, 1}, // 精灵恢复仓
}, 0)
RegisterTask(86, 1, []data.ItemInfo{}, 1) // 新手任务2分支1布布种子
RegisterTask(86, 2, []data.ItemInfo{}, 7) // 新手任务2分支2小火猴
RegisterTask(86, 3, []data.ItemInfo{}, 4) // 新手任务2分支3伊优
RegisterTask(86, 0, []data.ItemInfo{}, 1) // 新手任务2默认分支布布种子
RegisterTask(87, 0, []data.ItemInfo{ // 新手任务3默认分支
{300001, 5}, // 普通胶囊x5
{300011, 3}, // 初级体力药剂x3
}, 0)
RegisterTask(88, 1, []data.ItemInfo{ // 新手任务4默认分支
{1, 50000}, // 赛尔豆x50000
{3, 50000}, // 累积经验x50000
{5, 20}, // 金豆x20
{300650, 3}, // 全能学习力遗忘器x3
// {300651, 6}, // 全能学习力注入器x6
}, 0)
// -------------------------- 普通任务(无精灵奖励) --------------------------
RegisterTask(90, 0, []data.ItemInfo{ // 克洛斯星的皮皮
{1, 1000}, // 赛尔豆x1000
{3, 1000}, // 经验x1000
}, 0)
RegisterTask(8, 0, []data.ItemInfo{{500510, 1}}, 0) // 西塔的珍贵回忆记忆晶体x1
RegisterTask(9, 0, []data.ItemInfo{{100059, 1}}, 0) // 进入神秘通道电能锯子x1
RegisterTask(10, 0, []data.ItemInfo{}, 0) // 神秘通道拼图(无奖励)
RegisterTask(12, 0, []data.ItemInfo{}, 0) // 精灵广场拿石头(无奖励)
RegisterTask(19, 0, []data.ItemInfo{{3, 3000}}, 0) // 先锋队招募积累经验x3000
RegisterTask(25, 0, []data.ItemInfo{{400501, 10}}, 0) // 新船员的考验神奇扭蛋牌x10
RegisterTask(37, 0, []data.ItemInfo{ // 帕诺星系星球测绘
{1, 3000}, // 赛尔豆x3000
{100178, 1}, // 勘察头盔x1
{100179, 1}, // 勘察护腕x1
{100180, 1}, // 勘察腰带x1
{100181, 1}, // 勘察军靴x1
}, 0)
RegisterTask(47, 0, []data.ItemInfo{ // 突围磁风暴
{3, 5000}, // 累积经验x5000
{1, 5000}, // 赛尔豆x5000
{500585, 1}, // 磁力光束枪台x1
}, 0)
RegisterTask(48, 0, []data.ItemInfo{ // 神秘失踪的爱丽丝
{3, 3000}, // 累积经验x3000
{1, 2000}, // 赛尔豆x2000
//{700452, 2}, // 中型智慧芯片x2
}, 0)
RegisterTask(52, 0, []data.ItemInfo{ // 谁偷走了雪球能源?
{3, 3000}, // 累积经验x3000
{400021, 10}, // 雪球能源x10
{100254, 1}, // 斯诺纪念x1
}, 0)
RegisterTask(54, 0, []data.ItemInfo{ // 米鲁族的两个小不点
{3, 5000}, // 累积经验x5000
{400021, 10}, // 雪球能源x10
}, 0)
RegisterTask(57, 0, []data.ItemInfo{ // 米鲁族食王选拔赛
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(58, 0, []data.ItemInfo{ // 斯诺岩洞的不解之谜
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
{400021, 10}, // 雪球能源x10
}, 0)
RegisterTask(63, 0, []data.ItemInfo{ // 新型试作机SR-01同步调试
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(64, 0, []data.ItemInfo{ // 铸造斯诺冰冠
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
{400021, 10}, // 雪球能源x10
}, 0)
RegisterTask(65, 0, []data.ItemInfo{ // 露希欧星勘察
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(66, 0, []data.ItemInfo{ // 合金强化试验
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(68, 0, []data.ItemInfo{ // 资料室的神秘事件
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(69, 0, []data.ItemInfo{ // 宇宙遭遇站
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(70, 0, []data.ItemInfo{ // 船体紧急修复
{3, 3000}, // 累积经验x3000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(72, 0, []data.ItemInfo{ // 船长搜救任务
{3, 2000}, // 累积经验x2000
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(73, 0, []data.ItemInfo{ // 秘制改良机SR-02
{100303, 1}, // SR-02铠甲x1
{400055, 30}, // 变形能量块x30
{3, 3000}, // 累积经验x3000
}, 0)
RegisterTask(74, 0, []data.ItemInfo{{3, 3000}}, 0) // 露希欧星历险积累经验x3000
RegisterTask(75, 0, []data.ItemInfo{ // 哈莫的童年片段一
{3, 3000}, // 累积经验x3000
{100324, 1}, // 龙之纪念x1
}, 0)
RegisterTask(79, 0, []data.ItemInfo{ // 寻找哈莫雷特的族人
{3, 3000}, // 累积经验x3000
{1, 2000}, // 赛尔豆x2000
}, 0)
RegisterTask(80, 0, []data.ItemInfo{ // 重铸贾斯丁站长
{3, 2000}, // 累积经验x2000
{1, 3000}, // 赛尔豆x3000
}, 0)
RegisterTask(81, 0, []data.ItemInfo{ // 守候宿命的追随者
{3, 1000}, // 累积经验x1000
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(83, 0, []data.ItemInfo{ // 光暗之迷
{3, 1000}, // 累积经验x1000
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(84, 0, []data.ItemInfo{ // 星球改造计划
{3, 2000}, // 累积经验x2000
{1, 2000}, // 赛尔豆x2000
}, 0)
RegisterTask(89, 0, []data.ItemInfo{ // 试炼之塔的磨练
{3, 500}, // 累积经验x500
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(91, 0, []data.ItemInfo{ // 月光下的约定
{3, 2000}, // 累积经验x2000
{1, 2000}, // 赛尔豆x2000
}, 246)
RegisterTask(93, 0, []data.ItemInfo{ // 云霄星的新来客
{3, 1000}, // 累积经验x1000
{1, 500}, // 赛尔豆x500
}, 0)
RegisterTask(94, 0, []data.ItemInfo{ // 初识星球能源
{3, 500}, // 累积经验x500
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(96, 0, []data.ItemInfo{ // 旅途中的伙伴
{3, 500}, // 累积经验x500
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(97, 0, []data.ItemInfo{ // 我是音乐小麦霸
{3, 1000}, // 累积经验x1000
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(98, 0, []data.ItemInfo{ // 尼布守卫战
{3, 2000}, // 累积经验x2000
{1, 1000}, // 赛尔豆x1000
}, 0)
RegisterTask(201, 0, []data.ItemInfo{{100062, 1}}, 0) // 教官考核教官指挥棒x1
RegisterTask(300, 0, []data.ItemInfo{}, 300) // 领取谱尼真身谱尼的精元x1
// -------------------------- 带精灵奖励的任务 --------------------------
RegisterTask(28, 0, []data.ItemInfo{}, 102) // 遗迹中的精灵信号奇塔类型102
RegisterTask(40, 0, []data.ItemInfo{}, 139) // 时空之门迪卢卡类型139
RegisterTask(49, 0, []data.ItemInfo{ // 密林中的托尼(托尼+物品)
// {700452, 2}, // 中型智慧芯片x2
}, 158) // 托尼类型158
RegisterTask(71, 0, []data.ItemInfo{ // 赛尔号大整修TOE+物品)
{3, 1000}, // 累积经验x1000
{1, 1000}, // 赛尔豆x1000
}, 213) // TOE类型213
RegisterTask(92, 0, []data.ItemInfo{ // 站长归来(尼布+物品)
{3, 2000}, // 累积经验x2000
{1, 2000}, // 赛尔豆x2000
}, 95) // 尼布类型95
RegisterTask(133, 0, []data.ItemInfo{ // 寻找迷失的心(史空+物品)
{3, 2000}, // 累积经验x2000
{1, 2000}, // 赛尔豆x2000
}, 381) // 史空类型381
// -------------------------- 多分支任务 --------------------------
RegisterTask(95, 1, []data.ItemInfo{ // 宇宙中的黑色旋涡分支1刺蜂套装
{3, 4000}, // 累积经验x4000
{1, 2000}, // 赛尔豆x2000
{100346, 1}, // 刺蜂重盔x1
{100347, 1}, // 刺蜂护肩x1
{100348, 1}, // 刺蜂腰带x1
{100349, 1}, // 刺蜂滚轮x1
}, 0)
RegisterTask(95, 2, []data.ItemInfo{ // 宇宙中的黑色旋涡分支2锡蝶套装
{3, 4000}, // 累积经验x4000
{1, 2000}, // 赛尔豆x2000
{100350, 1}, // 锡蝶重盔x1
{100351, 1}, // 锡蝶护肩x1
{100352, 1}, // 锡蝶腰带x1
{100353, 1}, // 锡蝶滚轮x1
}, 0)
}
// 任务触发里程碑
// func Test_event(b *testing.T) {
// topic := bus.NewTopic[*Task]() //直接注册到用户
// for i := 0; i < 1; i++ {
// isdone := false
// t := topic.Sub(func(v *Task) { //用户初始化时注册里程碑
// if v.done { //如果任务完成
// isdone = true
// fmt.Println(v.id, "任务完成")
// return
// }
// // if v.cfunc != nil {
// // v.cont = v.cfunc(v.cont) //增加计数
// // }
// if v.cont > 5 { //如果计数达到,标记任务完成
// v.done = true
// }
// fmt.Println(v.id, "当前任务计数", v.cont, "是否完成", v.done)
// })
// if isdone { //如果任务完成,取消注册
// t.Cancel()
// }
// }
// // task1 := &Task{id: 1, cfunc: func(t uint32) uint32 { //满足任务1后推定
// // //fmt.Println(1, "当前任务计数", t)
// // //实现自定义逻辑
// // //增加用户计数
// // //增加服务器总计数
// // return t + 1
// // }}
// topic.Pub(task1)
// topic.Pub(task1)
// topic.Pub(&Task{id: 2, done: true})
// topic.Pub(task1) //发送事件
// task1.Complete()
// fmt.Println("当前任务状态", task1.IsDone())
// }
type TaskTree struct {
AllTasks []*Task //任务集合
mu sync.Mutex
}
// Various event types
const EventA = 0x01
type Task struct {
id uint32
//cfunc func(uint32) uint32
cont uint32
done bool
}
func (e *Task) IsDone() bool {
return e.done
}
func (e *Task) Complete() {
e.done = true
}
func (e *Task) EventID() string {
return "Task"
}
// Event type for testing purposes
type Event struct {
Data string
type1 uint32
}
// Type returns the event type
func (ev Event) Type() uint32 {
return ev.type1
}

View File

@@ -1,56 +0,0 @@
package task
import (
"blazing/common/data"
)
type TaskResult struct {
PetTypeId uint32 `json:"petTypeId" description:"发放的精灵ID"` // 发放的精灵ID
ItemList []data.ItemInfo `json:"itemList" description:"发放物品的数组"` // 发放物品的数组,
}
var TaskResultMap = make(map[uint32]map[uint32]TaskResult)
// 添加默认分支0
func Get_Task_Info(v CompleteTaskInboundInfo) *TaskResult {
t, ok := TaskResultMap[v.TaskId][v.OutState]
if ok {
return &t
} else {
t, ok := TaskResultMap[v.TaskId][0]
if ok {
return &t
}
}
return nil
}
func init() {
// 定义通用奖励经验奖励ItemId:3数量20000
expReward := []data.ItemInfo{{ItemId: 3, ItemCnt: 20000}}
// 定义扭蛋牌奖励ItemId:400501数量5
eggReward := []data.ItemInfo{{ItemId: 400501, ItemCnt: 5}}
// 批量初始化任务ID 401-407奖励均为经验
for taskID := 401; taskID <= 407; taskID++ {
// 为每个任务ID初始化内层map
TaskResultMap[uint32(taskID)] = make(map[uint32]TaskResult)
// 设置状态0对应的奖励与401格式一致
TaskResultMap[uint32(taskID)][0] = TaskResult{
ItemList: expReward,
}
}
// 单独初始化任务462奖励为扭蛋牌
TaskResultMap[462] = make(map[uint32]TaskResult)
TaskResultMap[462][0] = TaskResult{
ItemList: eggReward,
}
// 后续若有其他任务,按相同格式添加即可
// 例如:
// TaskResultMap[xxx] = make(map[uint32]TaskResult)
// TaskResultMap[xxx][0] = TaskResult{ItemList: ...}
}

View File

@@ -0,0 +1,36 @@
package task
import (
"blazing/common/data"
"blazing/modules/blazing/model"
"blazing/modules/config/service"
)
type TaskResult struct {
Pet *model.PetInfo `json:"petTypeId" description:"发放的精灵ID"` // 发放的精灵ID
ItemList []data.ItemInfo `json:"itemList" description:"发放物品的数组"` // 发放物品的数组,
}
func GetTaskInfo(id, ot uint32) *TaskResult {
ret := &TaskResult{}
r := service.NewTaskService().Get(id, ot)
if r == nil {
return nil
}
pet := service.NewPetRewardService().Get(r.ElfRewardIds)
if pet != nil {
ret.Pet = model.GenPetInfo(int(pet.MonID), int(pet.Lv), int(pet.Nature), int(pet.Effect), int(pet.DV), nil)
}
for _, itemID := range r.ItemRewardIds {
iteminfo := service.NewItemService().GetItemCount(itemID)
ret.ItemList = append(ret.ItemList, data.ItemInfo{ItemId: itemID, ItemCnt: iteminfo.ItemCnt})
}
return nil
}