Files
bl/logic/service/task/list.go
昔念 c9bc4be244 ```
feat: 添加ItemInfo结构体并重构抽蛋和任务系统

- 在common/data/color.go中添加ItemInfo结构体用于表示发放物品的信息
- 在common/utils/tomap.go中添加RandomSlice泛型函数用于从切片中随机选取元素
- 重构action_egg.go中的EggGamePlay功能,实现抽蛋逻辑和物品发放
- 更新fight_boss.go中使用新的ItemInfo结构体替换旧的model.ItemInfo
- 修改user_talk.go中获取物品数量的逻辑
- 更新user_task.go中任务完成逻辑使用新的ItemInfo结构体
- 在egg.go中更新抽蛋结果结构体使用ItemInfo
- 更新战斗奖励结构体使用ItemInfo
- 在player.go中添加学习力道具处理逻辑
- 重构任务系统使用新的ItemInfo结构体
- 移除旧的model.ItemInfo定义
- 更新宠物奖励配置模型添加成长值等字段
- 实现GetEgg方法用于获取扭蛋奖励
- 修复宠物融合材料服务中的道具验证逻辑
```
2025-12-26 20:38:08 +08:00

347 lines
10 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 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
}