2025-08-27 18:06:33 +00:00
|
|
|
|
package task
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2025-09-14 01:35:16 +08:00
|
|
|
|
"blazing/logic/service/player"
|
2025-08-27 18:06:33 +00:00
|
|
|
|
"encoding/binary"
|
|
|
|
|
|
"errors"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/pointernil/bitset32"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type GetTaskBufInboundInfo struct {
|
2025-09-14 01:35:16 +08:00
|
|
|
|
Head player.TomeeHeader `cmd:"2203|2234" struc:"[0]pad"`
|
2025-08-27 18:06:33 +00:00
|
|
|
|
|
2025-09-21 08:07:17 +00:00
|
|
|
|
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,
|
2025-08-27 18:06:33 +00:00
|
|
|
|
}
|
|
|
|
|
|
type GetTaskBufOutboundInfo struct {
|
2025-09-21 08:07:17 +00:00
|
|
|
|
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,
|
|
|
|
|
|
Flag uint32 `json:"flag" description:"暂时未知"` // 暂时未知,
|
|
|
|
|
|
TaskList []uint32 `struc:"[20]byte"` // 任务步骤信息,
|
2025-08-27 18:06:33 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获得任务数组
|
|
|
|
|
|
func (t *GetTaskBufOutboundInfo) GetList() *bitset32.BitSet32 {
|
|
|
|
|
|
|
|
|
|
|
|
return bitset32.From(t.TaskList)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// BytesToInt32Slice 将[]byte转换为[]int32
|
|
|
|
|
|
// 注意:src长度必须是4的倍数,因为每个int32由4字节组成
|
|
|
|
|
|
// order参数指定字节序(binary.BigEndian 或 binary.LittleEndian)
|
|
|
|
|
|
func BytesToInt32Slice(src []byte, order binary.ByteOrder) ([]int32, error) {
|
|
|
|
|
|
// 检查输入长度是否为4的倍数
|
|
|
|
|
|
if len(src)%4 != 0 {
|
|
|
|
|
|
return nil, errors.New("输入字节切片长度必须是4的倍数")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 计算目标切片长度
|
|
|
|
|
|
dstLen := len(src) / 4
|
|
|
|
|
|
dst := make([]int32, dstLen)
|
|
|
|
|
|
|
|
|
|
|
|
// 逐个转换4字节为int32
|
|
|
|
|
|
for i := 0; i < dstLen; i++ {
|
|
|
|
|
|
// 计算当前位置的字节偏移
|
|
|
|
|
|
offset := i * 4
|
|
|
|
|
|
// 读取4字节并转换为uint32,再转换为int32
|
|
|
|
|
|
dst[i] = int32(order.Uint32(src[offset : offset+4]))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return dst, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Int32SliceToBytes 将[]int32转换回[]byte
|
|
|
|
|
|
// order参数指定字节序(binary.BigEndian 或 binary.LittleEndian)
|
|
|
|
|
|
func Int32SliceToBytes(src []int32, order binary.ByteOrder) []byte {
|
|
|
|
|
|
// 计算目标字节切片长度
|
|
|
|
|
|
dst := make([]byte, len(src)*4)
|
|
|
|
|
|
|
|
|
|
|
|
// 逐个将int32转换为4字节
|
|
|
|
|
|
for i, v := range src {
|
|
|
|
|
|
// 计算当前位置的字节偏移
|
|
|
|
|
|
offset := i * 4
|
|
|
|
|
|
// 将int32转换为uint32,再写入字节切片
|
|
|
|
|
|
order.PutUint32(dst[offset:offset+4], uint32(v))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return dst
|
|
|
|
|
|
}
|