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方法用于获取扭蛋奖励 - 修复宠物融合材料服务中的道具验证逻辑 ```
347 lines
10 KiB
Go
347 lines
10 KiB
Go
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
|
||
}
|