任务提交

This commit is contained in:
1
2025-08-28 19:17:03 +00:00
parent 02c0582fe5
commit 00f38b8c53
10 changed files with 176 additions and 59 deletions

View File

@@ -7,6 +7,7 @@ import (
"blazing/cool"
"blazing/logic/service"
"os"
"strings"
"time"
"bytes"
@@ -89,32 +90,35 @@ func init() { //默认初始化扫描
methodValue := value.MethodByName(method.Name)
fmt.Println("找到注册方法", method.Name)
methodValue.Type().NumIn()
var func_cmd = getcmd(methodValue.Type().In(0))
if func_cmd == 0 { //说明不是注册方法
glog.Warning(context.Background(), "方法参数必须是结构体", method.Name, "跳过注册")
continue
for _, func_cmd := range getcmd(methodValue.Type().In(0)) {
if func_cmd == 0 { //说明不是注册方法
glog.Warning(context.Background(), "方法参数必须是结构体", method.Name, "跳过注册")
continue
}
if cool.Config.PortBL == 0 && func_cmd > 1000 { //判断login服务器
continue
}
if cool.Config.PortBL != 0 && func_cmd < 1000 { //判断login服务器
continue
}
glog.Debug(context.Background(), "注册方法", func_cmd, method.Name)
// fmt.Println(methodValue.Interface().(func(gnet.Conn, handler.TomeeHeader)))
_, ok := cool.CmdCache.LoadOrStore(func_cmd, methodValue) //TODO 待实现对不同用户初始化方法以取消全局cmdcache
if ok { //方法已存在init
glog.Error(context.Background(), "方法已存在init,不会初始化后面的方法", func_cmd)
}
}
if cool.Config.PortBL == 0 && func_cmd > 1000 { //判断login服务器
continue
}
if cool.Config.PortBL != 0 && func_cmd < 1000 { //判断login服务器
continue
}
glog.Debug(context.Background(), "注册方法", func_cmd, method.Name)
// fmt.Println(methodValue.Interface().(func(gnet.Conn, handler.TomeeHeader)))
_, ok := cool.CmdCache.LoadOrStore(func_cmd, methodValue) //TODO 待实现对不同用户初始化方法以取消全局cmdcache
if ok { //方法已存在init
glog.Error(context.Background(), "方法已存在init,不会初始化后面的方法", func_cmd)
}
}
}
func getcmd(t reflect.Type) uint32 {
func getcmd(t reflect.Type) []uint32 {
// 处理指针类型
if t.Kind() == reflect.Ptr {
t = t.Elem() // 获取指针指向的类型
@@ -123,7 +127,7 @@ func getcmd(t reflect.Type) uint32 {
// 确保是结构体
if t.Kind() != reflect.Struct {
return 0
return []uint32{0}
}
// 遍历结构体字段
@@ -135,7 +139,7 @@ func getcmd(t reflect.Type) uint32 {
if field.Type == reflect.TypeOf(handler.TomeeHeader{}) {
// fmt.Println(reflect.ValueOf(field))
return gconv.Uint32(field.Tag.Get("cmd"))
return gconv.SliceUint32(strings.Split(field.Tag.Get("cmd"), "|"))
}
@@ -150,7 +154,7 @@ func getcmd(t reflect.Type) uint32 {
}
// fmt.Println()
}
return 0
return []uint32{0}
}
// 遍历结构体方法并执行RECV_cmd

View File

@@ -21,7 +21,7 @@ func (h *Controller) MapEnter(data *maps.InInfo, c *entity.Player) (result *maps
data.Broadcast(c.MapId, *tt) //同步广播
// 如果是无怪地图,直接返回
if mservice.NewMonsterService().GetId(c.MapId) == 0 {
if mservice.NewMonsterService().GetId(c.MapId) == nil {
return nil, -1
}

View File

@@ -13,28 +13,48 @@ import (
*/
func (h Controller) AcceptTask(data *task.AcceptTaskInboundInfo, c *entity.Player) (result *task.AcceptTaskOutboundInfo, err errorcode.ErrorCode) {
if data.Head.CMD == 2201 { //判断不是每日任务
service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool {
ft, ok := ttt[data.TaskId]
if ok { //如果找到任务
if ft.Status == 0 { //可以接受
ft.Status = 1 //接受
return true
} else {
return false
}
} else {
ttt[data.TaskId] = model.TaskInfo{
Status: 1,
}
}
return false
})
} else {
service.NewUserService(c.UserID).DailyTaskExec(func(ttt map[uint32]model.DailyTaskInfo) bool {
ft, ok := ttt[data.TaskId]
if ok { //如果找到任务
if ft.Status == 0 { //可以接受
ft.Status = 1 //接受
return true
} else {
return false
}
} else {
ttt[data.TaskId] = model.DailyTaskInfo{
Status: 1,
}
}
return false
})
}
result = &task.AcceptTaskOutboundInfo{}
result.TaskId = data.TaskId
service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool {
ft, ok := ttt[data.TaskId]
if ok { //如果找到任务
if ft.Status == 0 { //可以接受
ft.Status = 1 //接受
return true
} else {
return false
}
} else {
ttt[data.TaskId] = model.TaskInfo{
Status: 1,
}
}
return false
})
return result, 0
}
@@ -42,15 +62,71 @@ func (h Controller) AcceptTask(data *task.AcceptTaskInboundInfo, c *entity.Playe
* 更新任务步骤
*/
func (h Controller) AddTaskBuf(data *task.AddTaskBufInboundInfo, c *entity.Player) (result *task.AddTaskBufOutboundInfo, err errorcode.ErrorCode) {
service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool {
if conditions, ok := ttt[data.TaskId]; ok {
conditions.TaskInfo = data.TaskList
ttt[data.TaskId] = conditions
return true
}
return false
})
if data.Head.CMD == 2204 { //判断不是每日任务
service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool {
if conditions, ok := ttt[data.TaskId]; ok {
conditions.TaskInfo = data.TaskList
ttt[data.TaskId] = conditions
return true
}
return false
})
} else {
service.NewUserService(c.UserID).DailyTaskExec(func(ttt map[uint32]model.DailyTaskInfo) bool {
if conditions, ok := ttt[data.TaskId]; ok {
conditions.DailyTaskInfo = data.TaskList
ttt[data.TaskId] = conditions
return true
}
return false
})
}
return &task.AddTaskBufOutboundInfo{}, 0
}
/**
* 完成任务
*/
func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *entity.Player) (result *task.CompleteTaskOutboundInfo, err errorcode.ErrorCode) {
if data.Head.CMD == 2202 { //判断不是每日任务
} else {
}
return &task.CompleteTaskOutboundInfo{}, 0
}
/**
* 获取任务状态
*/
func (h Controller) Get_Task_Buf(data *task.GetTaskBufInboundInfo, c *entity.Player) (result *task.GetTaskBufOutboundInfo, err errorcode.ErrorCode) {
if data.Head.CMD == 2203 { //判断不是每日任务
} else {
}
return &task.GetTaskBufOutboundInfo{}, 0
}
/**
* 删除任务
*/
func (h Controller) Delete_Task(data *task.DeleteTaskInboundInfo, c *entity.Player) (result *task.DeleteTaskOutboundInfo, err errorcode.ErrorCode) {
if data.Head.CMD == 2205 { //判断不是每日任务
} else {
}
return &task.DeleteTaskOutboundInfo{}, 0
}

View File

@@ -73,7 +73,7 @@ func (t *InInfo) genMonster(mapid uint32) OgreInfo {
for i := 0; i < 3; i++ {
ttt := OgrePetInfo{}
ttt.Id = mservice.NewMonsterService().GetId(mapid) //待修改成xml获取
// ttt.Id = mservice.NewMonsterService().GetId(mapid) //待修改成xml获取
ttt.Shiny = uint32(i + 1) //异色概率,待实现自定义
//t1.Data[i] = mservice.NewMonsterService().GetId(c.MapId)

View File

@@ -5,7 +5,7 @@ import "blazing/common/socket/handler"
// AcceptTaskInboundInfo 对应Java的AcceptTaskInboundInfo类
// 用于接收任务的入站信息
type AcceptTaskInboundInfo struct {
Head handler.TomeeHeader `cmd:"2201" struc:"[0]pad"`
Head handler.TomeeHeader `cmd:"2201|2231" struc:"[0]pad"`
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID对应Java的@UInt long
}

View File

@@ -5,7 +5,7 @@ import "blazing/common/socket/handler"
// AddTaskBufInboundInfo 对应Java的AddTaskBufInboundInfo类
// 用于接收添加任务缓冲区的入站信息
type AddTaskBufInboundInfo struct {
Head handler.TomeeHeader `cmd:"2204" struc:"[0]pad"`
Head handler.TomeeHeader `cmd:"2204|2235" struc:"[0]pad"`
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID对应Java的@UInt long
TaskList []uint32 `struc:"[20]byte"` // 任务步骤信息对应Java的@ArraySerialize注解
}

View File

@@ -3,7 +3,7 @@ package task
import "blazing/common/socket/handler"
type CompleteTaskInboundInfo struct {
Head handler.TomeeHeader `cmd:"2202" struc:"[0]pad"`
Head handler.TomeeHeader `cmd:"2202|2233" struc:"[0]pad"`
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID对应Java的@UInt long
OutState uint32 `json:"outState" description:"当前状态, 1为完成任务"` // 当前状态1表示完成任务对应Java的@UInt long
}

View File

@@ -0,0 +1,12 @@
package task
import "blazing/common/socket/handler"
// DeleteTaskInboundInfo 对应Java的DeleteTaskInboundInfo类
type DeleteTaskInboundInfo struct {
Head handler.TomeeHeader `cmd:"2205|2232" struc:"[0]pad"`
TaskId uint32 `json:"taskId" description:"任务ID"` // 使用uint64对应Java的@UInt long
}
type DeleteTaskOutboundInfo struct {
TaskId uint32 `json:"taskId" description:"任务ID"` // 对应@UInt long和@FieldDescription
}

View File

@@ -9,7 +9,7 @@ import (
)
type GetTaskBufInboundInfo struct {
Head handler.TomeeHeader `cmd:"2203" struc:"[0]pad"`
Head handler.TomeeHeader `cmd:"2203|2234" struc:"[0]pad"`
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID对应Java的@UInt long
}

View File

@@ -1,6 +1,10 @@
package main
import (
"fmt"
"reflect"
"strings"
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
_ "blazing/contrib/drivers/pgsql"
@@ -23,12 +27,13 @@ import (
"blazing/login/internal/cmd"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/util/gconv"
)
var tt task.GetTaskBufOutboundInfo
func main() {
// Test_kick()
//Test_kick()
cmd.Main.Run(gctx.New())
}
@@ -44,3 +49,23 @@ func kick(id int) {
// fmt.Println(err)
// }()
}
type ssss struct {
ttt int `cmd:"111|222"`
}
func Test_kick() {
value := reflect.ValueOf(ssss{})
// 获取类型
typ := value.Type()
// 遍历结构体字段
// fmt.Printf("结构体 %s 的字段信息:\n", t.Name())
for i := 0; i < typ.NumField(); i++ {
field := typ.Field(i)
t := field.Tag.Get("cmd")
//t1 := strings.Split(t, "|")
t2 := gconv.SliceUint32(strings.Split(t, "|"))
fmt.Println(t2)
}
}