Files
bl/modules/blazing/service/task.go
昔念 75e428f62e refactor(blazing): 重构任务系统并优化相关功能
- 重构了任务系统的数据结构和执行逻辑
- 优化了地图加载和怪物刷新机制
- 改进了宠物系统的基础架构
- 调整了玩家信息和背包的处理方式
- 统一了数据访问层的接口和实现
2025-08-30 21:59:52 +08:00

152 lines
3.1 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 service
import (
"blazing/cool"
"blazing/modules/blazing/model"
"encoding/json"
"time"
)
func Exec[T cool.UserModel, F any](userid uint32, s *cool.Service, processFunc func(F) F) bool {
//todo待测试
var player T
m1 := cool.DBM(s.Model).Where("player_id", userid)
m1.Scan(&player)
// 方法2使用反射获取
// 获取反射值对象
ttt := player
//fmt.Println(dataField.Interface().(string))
var tt F
err := json.Unmarshal([]byte(ttt.GetData()), &tt)
if err != nil {
panic(err)
}
tt1 := processFunc(tt)
tmep, err := json.Marshal(tt1)
if err != nil {
panic(err)
}
ttt.SetData(string(tmep))
m1.Save(player)
return false
}
func (s *UserService) InitTask() {
tt := model.NewTask()
tt.PlayerID = uint64(s.userid)
var ggg []model.TaskInfo
for i := 0; i < 500; i++ {
ggg = append(ggg, model.TaskInfo{
TaskID: (uint32(i)),
TaskInfo: make([]uint32, 0),
})
}
ffgg, _ := json.Marshal(ggg)
tt.Data = string(ffgg)
_, err := cool.DBM(s.task.Model).Data(tt).FieldsEx("id").Insert()
if err != nil {
panic(err)
}
//panic(err)
}
func (s *UserService) TaskExec(t func([]model.TaskInfo) []model.TaskInfo, isdaliy bool) (ret bool) {
//待实现检测是否为每日任务
// if isdaliy {
// Exec[*model.Task](s.userid, s.task, func(tt []model.TaskInfo) []model.TaskInfo {
// var ttt = make([]model.TaskInfo, 500)
// //先重置每日
// for k, v := range tt {
// if k > 400 && !IsToday(v.LastResetTime) { //判断是每日任务
// v.Status = 0 //重置+自动接受每日任务
// v.LastResetTime = time.Now()
// }
// ttt = append(ttt, v)
// }
// return ttt
// })
// }
return Exec[*model.Task](s.userid, s.task, t)
// m := cool.DBM(s.task.Model).Where("player_id", s.userid)
// var tt model.Task
// m.Scan(&tt)
// var ttt map[uint32]model.TaskInfo
// json.Unmarshal([]byte(tt.Data), &ttt)
// ret = t(ttt)
// t1, _ := json.Marshal(&ttt)
// tt.Data = string(t1)
// m.Save(&tt) //退出时保存
// return
}
// IsToday 判断给定时间是否是今天
func IsToday(t time.Time) bool {
// 获取当前时间
now := time.Now()
// 比较年、月、日是否相同
return t.Year() == now.Year() &&
t.Month() == now.Month() &&
t.Day() == now.Day()
}
// /**
// * 完成任务
// */
// func (s *TaskService) CompleteTask(task uint32) bool {
// return s.Exec(func(ttt map[uint32]model.TaskInfo) bool {
// if conditions, ok := ttt[task]; ok {
// conditions.Status = 3
// ttt[task] = conditions
// }
// return false
// })
// }
// /**
// * 校验任务是否已经完成
// */
// func (s *TaskService) CheckTaskCompleted(task uint32) bool {
// return s.Exec(func(ttt map[uint32]model.TaskInfo) bool {
// if conditions, ok := ttt[task]; ok {
// return conditions.Status == 3
// }
// return false
// })
// }
// func (s *UserService) GenTask() [500]byte {
// ret := [500]byte{}
// Exec[*model.Task](s.userid, s.task, func(tt []model.TaskInfo) []model.TaskInfo {
// //先重置每日
// for _, v := range tt {
// ret[v.TaskID] = v.Status
// }
// return tt
// })
// return ret
// }