diff --git a/.gitignore b/.gitignore
index aacd81458..96475ea72 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,9 @@
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
+*.log
+
+.vscode
+./bin/log
+~$*.xlsx
+cmd/luban/
\ No newline at end of file
diff --git a/bin/json/tbitem.json b/bin/json/tbitem.json
new file mode 100644
index 000000000..ff7be71b9
--- /dev/null
+++ b/bin/json/tbitem.json
@@ -0,0 +1,74 @@
+[
+ {
+ "id": 40000,
+ "name": "发型1",
+ "desc": "初始发型",
+ "price": 0,
+ "batch_useable": false
+ },
+ {
+ "id": 40001,
+ "name": "外套1",
+ "desc": "初始外套",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 40002,
+ "name": "上衣1",
+ "desc": "初始上衣",
+ "price": 0,
+ "batch_useable": false
+ },
+ {
+ "id": 40003,
+ "name": "裙子1",
+ "desc": "初始下装",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 40004,
+ "name": "袜子1",
+ "desc": "初始袜子",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 40005,
+ "name": "鞋子1",
+ "desc": "初始鞋子",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 40006,
+ "name": "发饰1",
+ "desc": "初始发饰",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 40007,
+ "name": "中秋节发饰1",
+ "desc": "中秋节发饰",
+ "price": 200,
+ "expire_time": 1633881599,
+ "batch_useable": false
+ },
+ {
+ "id": 40008,
+ "name": "中秋节鞋子1",
+ "desc": "中秋节鞋子",
+ "price": 300,
+ "expire_time": 1633967999,
+ "batch_useable": false
+ },
+ {
+ "id": 40009,
+ "name": "礼包1",
+ "desc": "中秋节礼包",
+ "price": 100,
+ "batch_useable": true
+ }
+]
\ No newline at end of file
diff --git a/bin/json/tbrewards.json b/bin/json/tbrewards.json
new file mode 100644
index 000000000..1e0f395ff
--- /dev/null
+++ b/bin/json/tbrewards.json
@@ -0,0 +1,74 @@
+[
+ {
+ "id": 10000,
+ "name": "发型",
+ "desc": "初始发型",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 10001,
+ "name": "外套",
+ "desc": "初始外套",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 10002,
+ "name": "上衣",
+ "desc": "初始上衣",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 10003,
+ "name": "裙子",
+ "desc": "初始下装",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 10004,
+ "name": "袜子",
+ "desc": "初始袜子",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 10005,
+ "name": "鞋子",
+ "desc": "初始鞋子",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 10006,
+ "name": "发饰",
+ "desc": "初始发饰",
+ "price": 100,
+ "batch_useable": false
+ },
+ {
+ "id": 10007,
+ "name": "中秋节发饰",
+ "desc": "中秋节发饰",
+ "price": 200,
+ "expire_time": 1633881599,
+ "batch_useable": false
+ },
+ {
+ "id": 10008,
+ "name": "中秋节鞋子",
+ "desc": "中秋节鞋子",
+ "price": 300,
+ "expire_time": 1633967999,
+ "batch_useable": false
+ },
+ {
+ "id": 10009,
+ "name": "礼包",
+ "desc": "中秋节礼包",
+ "price": 100,
+ "batch_useable": true
+ }
+]
\ No newline at end of file
diff --git a/sys/configure/serialization/ByteBuf.go b/sys/configure/serialization/ByteBuf.go
new file mode 100644
index 000000000..0b7e23fb4
--- /dev/null
+++ b/sys/configure/serialization/ByteBuf.go
@@ -0,0 +1,662 @@
+package serialization
+
+import (
+ "errors"
+ "math"
+)
+
+var EmptyBytes []byte
+
+var UnmarshalErr = errors.New("read not enough")
+
+func init() {
+ EmptyBytes = make([]byte, 0)
+}
+
+type ByteBuf struct {
+ readerIndex int
+ writerIndex int
+ capacity int
+ bytes []byte
+}
+
+func NewByteBuf(capacity int) *ByteBuf {
+ v := &ByteBuf{}
+ v.bytes = make([]byte, capacity, capacity)
+ v.readerIndex = 0
+ v.writerIndex = 0
+ v.capacity = capacity
+ return v
+}
+
+func WrapByteBuf(bytes []byte) *ByteBuf {
+ v := &ByteBuf{}
+ v.bytes = bytes
+ v.readerIndex = 0
+ v.writerIndex = len(bytes)
+ v.capacity = len(bytes)
+ return v
+}
+
+func (buf *ByteBuf) Replace(bytes []byte) {
+ buf.bytes = bytes
+ buf.readerIndex = 0
+ buf.writerIndex = len(bytes)
+ buf.capacity = len(bytes)
+}
+
+func (buf *ByteBuf) Clear() {
+ buf.readerIndex = 0
+ buf.writerIndex = 0
+}
+
+func (buf *ByteBuf) Size() int {
+ return buf.writerIndex - buf.readerIndex
+}
+
+func (buf *ByteBuf) GetBytes() []byte {
+ return buf.bytes
+}
+
+func (buf *ByteBuf) CopyRemainData() []byte {
+ size := len(buf.bytes)
+ if size > 0 {
+ bs := make([]byte, size, size)
+ copy(bs, buf.bytes[buf.readerIndex:buf.writerIndex])
+ return bs
+ } else {
+ return EmptyBytes
+ }
+}
+
+func (buf *ByteBuf) CalcNewCap(curSize int, needSize int) int {
+ curSize *= 2
+ if curSize < 16 {
+ curSize = 16
+ }
+ for ; curSize < needSize; curSize *= 2 {
+ }
+ return curSize
+}
+
+func (buf *ByteBuf) EnsureWrite(remain int) {
+ if buf.writerIndex+remain > buf.capacity {
+ size := buf.Size()
+ if size+remain <= buf.capacity {
+ copy(buf.bytes, buf.bytes[buf.readerIndex:buf.writerIndex])
+ } else {
+ buf.capacity = buf.CalcNewCap(buf.capacity, size+remain)
+ newBytes := make([]byte, buf.capacity, buf.capacity)
+ copy(newBytes, buf.bytes[buf.readerIndex:buf.writerIndex])
+ buf.bytes = newBytes
+ }
+ buf.writerIndex = size
+ buf.readerIndex = 0
+ }
+}
+
+func (buf *ByteBuf) ReadBool() (bool, error) {
+ if buf.readerIndex < buf.writerIndex {
+ x := buf.bytes[buf.readerIndex] != 0
+ buf.readerIndex++
+ return x, nil
+ } else {
+ return false, UnmarshalErr
+ }
+}
+
+func (buf *ByteBuf) WriteBool(x bool) {
+ buf.EnsureWrite(1)
+ if x {
+ buf.bytes[buf.writerIndex] = 1
+ } else {
+ buf.bytes[buf.writerIndex] = 0
+ }
+ buf.writerIndex++
+}
+
+func (buf *ByteBuf) ReadByte() (byte, error) {
+ if buf.readerIndex < buf.writerIndex {
+ x := buf.bytes[buf.readerIndex]
+ buf.readerIndex++
+ return x, nil
+ } else {
+ return 0, UnmarshalErr
+ }
+}
+
+func (buf *ByteBuf) WriteByte(x byte) {
+ buf.EnsureWrite(1)
+ buf.bytes[buf.writerIndex] = x
+ buf.writerIndex++
+}
+
+func (buf *ByteBuf) ReadShort() (int16, error) {
+ if buf.readerIndex >= buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ h := uint32(buf.bytes[buf.readerIndex])
+ if h < 0x80 {
+ buf.readerIndex++
+ return int16(h), nil
+ } else if h < 0xc0 {
+ if buf.readerIndex+2 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x3f) << 8) | uint32(buf.bytes[buf.readerIndex+1])
+ buf.readerIndex += 2
+ return int16(x), nil
+ } else if h == 0xff {
+ if buf.readerIndex+3 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := (uint32(buf.bytes[buf.readerIndex+1]) << 8) | uint32(buf.bytes[buf.readerIndex+2])
+ buf.readerIndex += 3
+ return int16(x), nil
+ } else {
+ return 0, UnmarshalErr
+ }
+}
+
+func (buf *ByteBuf) WriteShort(x int16) {
+ if x >= 0 {
+ if x < 0x80 {
+ buf.EnsureWrite(1)
+ buf.bytes[buf.writerIndex] = byte(x)
+ buf.writerIndex++
+ return
+ } else if x < 0x4000 {
+ buf.EnsureWrite(2)
+ buf.bytes[buf.writerIndex+1] = byte(x)
+ buf.bytes[buf.writerIndex] = byte((x >> 8) | 0x80)
+ buf.writerIndex += 2
+ return
+ }
+ }
+ buf.EnsureWrite(3)
+ buf.bytes[buf.writerIndex] = 0xff
+ buf.bytes[buf.writerIndex+2] = byte(x)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 8)
+ buf.writerIndex += 3
+}
+
+func (buf *ByteBuf) ReadFshort() (int16, error) {
+ if buf.readerIndex+2 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := int(buf.bytes[buf.readerIndex]) | (int(buf.bytes[buf.readerIndex+1]) << 8)
+ buf.readerIndex += 2
+ return int16(x), nil
+}
+
+func (buf *ByteBuf) WriteFshort(x int16) {
+ buf.EnsureWrite(2)
+ buf.bytes[buf.writerIndex] = byte(x)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 8)
+ buf.writerIndex += 2
+}
+
+func (buf *ByteBuf) ReadInt() (int32, error) {
+ x, err := buf.ReadUint()
+ return int32(x), err
+}
+
+func (buf *ByteBuf) WriteInt(x int32) {
+ buf.WriteUint(uint32(x))
+}
+
+func (buf *ByteBuf) ReadUint() (uint32, error) {
+ if buf.readerIndex >= buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ h := uint32(buf.bytes[buf.readerIndex])
+ if h < 0x80 {
+ buf.readerIndex++
+ return h, nil
+ } else if h < 0xc0 {
+ if buf.readerIndex+2 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x3f) << 8) | uint32(buf.bytes[buf.readerIndex+1])
+ buf.readerIndex += 2
+ return x, nil
+ } else if h < 0xe0 {
+ if buf.readerIndex+3 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x1f) << 16) | (uint32(buf.bytes[buf.readerIndex+1]) << 8) | uint32(buf.bytes[buf.readerIndex+2])
+ buf.readerIndex += 3
+ return x, nil
+ } else if h < 0xf0 {
+ if buf.readerIndex+4 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x0f) << 24) | (uint32(buf.bytes[buf.readerIndex+1]) << 16) | (uint32(buf.bytes[buf.readerIndex+2]) << 8) | uint32(buf.bytes[buf.readerIndex+3])
+ buf.readerIndex += 4
+ return x, nil
+ } else {
+ if buf.readerIndex+5 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := (uint32(buf.bytes[buf.readerIndex+1]) << 24) | (uint32(buf.bytes[buf.readerIndex+2]) << 16) | (uint32(buf.bytes[buf.readerIndex+3]) << 8) | uint32(buf.bytes[buf.readerIndex+4])
+ buf.readerIndex += 5
+ return x, nil
+ }
+}
+
+func (buf *ByteBuf) WriteUint(x uint32) {
+ if x < 0x80 {
+ buf.EnsureWrite(1)
+ buf.bytes[buf.writerIndex] = byte(x)
+ buf.writerIndex++
+ } else if x < 0x4000 {
+ buf.EnsureWrite(2)
+ buf.bytes[buf.writerIndex+1] = byte(x)
+ buf.bytes[buf.writerIndex] = byte((x >> 8) | 0x80)
+ buf.writerIndex += 2
+ } else if x < 0x200000 {
+ buf.EnsureWrite(3)
+ buf.bytes[buf.writerIndex+2] = byte(x)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 8)
+ buf.bytes[buf.writerIndex] = byte((x >> 16) | 0xc0)
+ buf.writerIndex += 3
+ } else if x < 0x10000000 {
+ buf.EnsureWrite(4)
+ buf.bytes[buf.writerIndex+3] = byte(x)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 16)
+ buf.bytes[buf.writerIndex] = byte((x >> 24) | 0xe0)
+ buf.writerIndex += 4
+ } else {
+ buf.EnsureWrite(5)
+ buf.bytes[buf.writerIndex] = 0xf0
+ buf.bytes[buf.writerIndex+4] = byte(x)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 24)
+ buf.writerIndex += 5
+ }
+}
+
+func (buf *ByteBuf) ReadFint() (int32, error) {
+ if buf.readerIndex+4 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := int32(uint(buf.bytes[buf.readerIndex]) | (uint(buf.bytes[buf.readerIndex+1]) << 8) |
+ (uint(buf.bytes[buf.readerIndex+2]) << 16) | (uint(buf.bytes[buf.readerIndex+3]) << 24))
+ buf.readerIndex += 4
+ return x, nil
+}
+
+func (buf *ByteBuf) WriteFint(x int32) {
+ buf.EnsureWrite(4)
+ buf.bytes[buf.writerIndex] = byte(x)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 24)
+ buf.writerIndex += 4
+}
+
+func (buf *ByteBuf) ReadLong() (int64, error) {
+ x, err := buf.ReadUlong()
+ return int64(x), err
+}
+
+func (buf *ByteBuf) WriteLong(x int64) {
+ buf.WriteUlong(uint64(x))
+}
+
+func (buf *ByteBuf) ReadUlong() (uint64, error) {
+ if buf.readerIndex >= buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ h := uint64(buf.bytes[buf.readerIndex])
+ if h < 0x80 {
+ buf.readerIndex++
+ return h, nil
+ } else if h < 0xc0 {
+ if buf.readerIndex+2 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x3f) << 8) | uint64(buf.bytes[buf.readerIndex+1])
+ buf.readerIndex += 2
+ return x, nil
+ } else if h < 0xe0 {
+ if buf.readerIndex+3 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x1f) << 16) | (uint64(buf.bytes[buf.readerIndex+1]) << 8) | uint64(buf.bytes[buf.readerIndex+2])
+ buf.readerIndex += 3
+ return x, nil
+ } else if h < 0xf0 {
+ if buf.readerIndex+4 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x1f) << 24) | (uint64(buf.bytes[buf.readerIndex+1]) << 16) | (uint64(buf.bytes[buf.readerIndex+2]) << 8) |
+ uint64(buf.bytes[buf.readerIndex+3])
+ buf.readerIndex += 4
+ return x, nil
+ } else if h < 0xf8 {
+ if buf.readerIndex+5 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x7) << 32) | (uint64(buf.bytes[buf.readerIndex+1]) << 24) | (uint64(buf.bytes[buf.readerIndex+2]) << 16) |
+ (uint64(buf.bytes[buf.readerIndex+3]) << 8) | uint64(buf.bytes[buf.readerIndex+4])
+ buf.readerIndex += 5
+ return x, nil
+ } else if h < 0xfc {
+ if buf.readerIndex+6 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x3) << 40) | (uint64(buf.bytes[buf.readerIndex+1]) << 32) | (uint64(buf.bytes[buf.readerIndex+2]) << 24) |
+ (uint64(buf.bytes[buf.readerIndex+3]) << 16) | (uint64(buf.bytes[buf.readerIndex+4]) << 8) |
+ (uint64(buf.bytes[buf.readerIndex+5]))
+ buf.readerIndex += 6
+ return x, nil
+ } else if h < 0xfe {
+ if buf.readerIndex+7 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := ((h & 0x1) << 48) | (uint64(buf.bytes[buf.readerIndex+1]) << 40) | (uint64(buf.bytes[buf.readerIndex+2]) << 32) |
+ (uint64(buf.bytes[buf.readerIndex+3]) << 24) | (uint64(buf.bytes[buf.readerIndex+4]) << 16) |
+ (uint64(buf.bytes[buf.readerIndex+5]) << 8) | (uint64(buf.bytes[buf.readerIndex+6]))
+ buf.readerIndex += 7
+ return x, nil
+ } else if h < 0xff {
+ if buf.readerIndex+8 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := (uint64(buf.bytes[buf.readerIndex+1]) << 48) | (uint64(buf.bytes[buf.readerIndex+2]) << 40) |
+ (uint64(buf.bytes[buf.readerIndex+3]) << 32) | (uint64(buf.bytes[buf.readerIndex+4]) << 24) |
+ (uint64(buf.bytes[buf.readerIndex+5]) << 16) | (uint64(buf.bytes[buf.readerIndex+6]) << 8) |
+ (uint64(buf.bytes[buf.readerIndex+7]))
+ buf.readerIndex += 8
+ return x, nil
+ } else {
+ if buf.readerIndex+9 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := (uint64(buf.bytes[buf.readerIndex+1]) << 56) | (uint64(buf.bytes[buf.readerIndex+2]) << 48) |
+ (uint64(buf.bytes[buf.readerIndex+3]) << 40) | (uint64(buf.bytes[buf.readerIndex+4]) << 32) |
+ (uint64(buf.bytes[buf.readerIndex+5]) << 24) | (uint64(buf.bytes[buf.readerIndex+6]) << 16) |
+ (uint64(buf.bytes[buf.readerIndex+7]) << 8) | (uint64(buf.bytes[buf.readerIndex+8]))
+ buf.readerIndex += 9
+ return x, nil
+ }
+}
+
+func (buf *ByteBuf) WriteUlong(x uint64) {
+ if x < 0x80 {
+ buf.EnsureWrite(1)
+ buf.bytes[buf.writerIndex] = byte(x)
+ buf.writerIndex++
+ } else if x < 0x4000 {
+ buf.EnsureWrite(2)
+ buf.bytes[buf.writerIndex+1] = byte(x)
+ buf.bytes[buf.writerIndex] = byte((x >> 8) | 0x80)
+ buf.writerIndex += 2
+ } else if x < 0x200000 {
+ buf.EnsureWrite(3)
+ buf.bytes[buf.writerIndex+2] = byte(x)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 8)
+ buf.bytes[buf.writerIndex] = byte((x >> 16) | 0xc0)
+ buf.writerIndex += 3
+ } else if x < 0x10000000 {
+ buf.EnsureWrite(4)
+ buf.bytes[buf.writerIndex+3] = byte(x)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 16)
+ buf.bytes[buf.writerIndex] = byte((x >> 24) | 0xe0)
+ buf.writerIndex += 4
+ } else if x < 0x800000000 {
+ buf.EnsureWrite(5)
+ buf.bytes[buf.writerIndex+4] = byte(x)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 24)
+ buf.bytes[buf.writerIndex] = byte((x >> 32) | 0xf0)
+ buf.writerIndex += 5
+ } else if x < 0x40000000000 {
+ buf.EnsureWrite(6)
+ buf.bytes[buf.writerIndex+5] = byte(x)
+ buf.bytes[buf.writerIndex+4] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 24)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 32)
+ buf.bytes[buf.writerIndex] = byte((x >> 40) | 0xf8)
+ buf.writerIndex += 6
+ } else if x < 0x200000000000 {
+ buf.EnsureWrite(7)
+ buf.bytes[buf.writerIndex+6] = byte(x)
+ buf.bytes[buf.writerIndex+5] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+4] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 24)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 32)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 40)
+ buf.bytes[buf.writerIndex] = byte((x >> 48) | 0xfc)
+ buf.writerIndex += 7
+ } else if x < 0x100000000000000 {
+ buf.EnsureWrite(8)
+ buf.bytes[buf.writerIndex+7] = byte(x)
+ buf.bytes[buf.writerIndex+6] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+5] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+4] = byte(x >> 24)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 32)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 40)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 48)
+ buf.bytes[buf.writerIndex] = byte((x >> 56) | 0xfe)
+ buf.writerIndex += 8
+ } else {
+ buf.EnsureWrite(9)
+ buf.bytes[buf.writerIndex+8] = byte(x)
+ buf.bytes[buf.writerIndex+7] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+6] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+5] = byte(x >> 24)
+ buf.bytes[buf.writerIndex+4] = byte(x >> 32)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 40)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 48)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 56)
+ buf.bytes[buf.writerIndex] = 0xff
+ buf.writerIndex += 9
+ }
+}
+
+func (buf *ByteBuf) ReadFlong() (int64, error) {
+ if buf.readerIndex+8 > buf.writerIndex {
+ return 0, UnmarshalErr
+ }
+ x := (uint64(buf.bytes[buf.readerIndex+7]) << 56) | (uint64(buf.bytes[buf.readerIndex+6]) << 48) |
+ (uint64(buf.bytes[buf.readerIndex+5]) << 40) | (uint64(buf.bytes[buf.readerIndex+4]) << 32) |
+ (uint64(buf.bytes[buf.readerIndex+3]) << 24) | (uint64(buf.bytes[buf.readerIndex+2]) << 16) |
+ (uint64(buf.bytes[buf.readerIndex+1]) << 8) | (uint64(buf.bytes[buf.readerIndex]))
+ buf.readerIndex += 8
+ return int64(x), nil
+}
+
+func (buf *ByteBuf) WriteFlong(x int64) {
+ buf.EnsureWrite(8)
+ buf.bytes[buf.writerIndex] = byte(x)
+ buf.bytes[buf.writerIndex+1] = byte(x >> 8)
+ buf.bytes[buf.writerIndex+2] = byte(x >> 16)
+ buf.bytes[buf.writerIndex+3] = byte(x >> 24)
+ buf.bytes[buf.writerIndex+4] = byte(x >> 32)
+ buf.bytes[buf.writerIndex+5] = byte(x >> 40)
+ buf.bytes[buf.writerIndex+6] = byte(x >> 48)
+ buf.bytes[buf.writerIndex+7] = byte(x >> 56)
+ buf.writerIndex += 8
+}
+
+func (buf *ByteBuf) ReadFloat() (float32, error) {
+ if x, err := buf.ReadFint(); err == nil {
+ return math.Float32frombits(uint32(x)), nil
+ } else {
+ return 0, err
+ }
+}
+
+func (buf *ByteBuf) WriteFloat(x float32) {
+ buf.WriteFint(int32(math.Float32bits(x)))
+}
+
+func (buf *ByteBuf) ReadDouble() (float64, error) {
+ if x, err := buf.ReadFlong(); err == nil {
+ return math.Float64frombits(uint64(x)), nil
+ } else {
+ return 0, err
+ }
+}
+
+func (buf *ByteBuf) WriteDouble(x float64) {
+ buf.WriteFlong(int64(math.Float64bits(x)))
+}
+
+func (buf *ByteBuf) ReadSize() (int, error) {
+ x, err := buf.ReadUint()
+ return int(x), err
+}
+
+func (buf *ByteBuf) WriteSize(x int) {
+ buf.WriteUint(uint32(x))
+}
+
+// marshal int
+// n -> (n << 1) ^ (n >> 31)
+// Read
+// (x >>> 1) ^ ((x << 31) >> 31)
+// (x >>> 1) ^ -(n&1)
+func (buf *ByteBuf) ReadSint() (int32, error) {
+ if x, err := buf.ReadUint(); err == nil {
+ return int32((x >> 1) ^ ((x & 1) << 31)), nil
+ } else {
+ return 0, err
+ }
+}
+
+func (buf *ByteBuf) WriteSint(x int32) {
+ buf.WriteUint((uint32(x) << 1) ^ (uint32(x) >> 31))
+}
+
+// marshal long
+// n -> (n << 1) ^ (n >> 63)
+// Read
+// (x >>> 1) ^((x << 63) >> 63)
+// (x >>> 1) ^ -(n&1L)
+func (buf *ByteBuf) ReadSlong() (int64, error) {
+ if x, err := buf.ReadUlong(); err == nil {
+ return int64((x >> 1) ^ ((x & 1) << 63)), nil
+ } else {
+ return 0, err
+ }
+}
+
+func (buf *ByteBuf) WriteSlong(x int64) {
+ buf.WriteUlong((uint64(x) << 1) ^ (uint64(x) >> 31))
+}
+
+func (buf *ByteBuf) WriteString(x string) {
+ bs := []byte(x)
+ buf.WriteSize(len(bs))
+ buf.WriteBytesWithoutSize(bs)
+}
+
+func (buf *ByteBuf) ReadString() (string, error) {
+ if size, err := buf.ReadSize(); err == nil {
+ if buf.readerIndex+size > buf.writerIndex {
+ return "", UnmarshalErr
+ }
+ s := string(buf.bytes[buf.readerIndex : buf.readerIndex+size])
+ buf.readerIndex += size
+ return s, nil
+ } else {
+ return "", err
+ }
+}
+
+func (buf *ByteBuf) ReadBytes() ([]byte, error) {
+ if size, err := buf.ReadSize(); err == nil {
+ if size == 0 {
+ return EmptyBytes, nil
+ } else if buf.readerIndex+size > buf.writerIndex {
+ return nil, UnmarshalErr
+ } else {
+ bs := make([]byte, size)
+ copy(bs, buf.bytes[buf.readerIndex:buf.readerIndex+size])
+ buf.readerIndex += size
+ return bs, nil
+ }
+ } else {
+ return nil, err
+ }
+}
+
+func (buf *ByteBuf) WriteBytes(x []byte) {
+ size := len(x)
+ buf.WriteSize(size)
+ if size > 0 {
+ buf.EnsureWrite(size)
+ copy(buf.bytes[buf.writerIndex:], x)
+ buf.writerIndex += size
+ }
+}
+
+func (buf *ByteBuf) WriteBytesWithSize(x []byte) {
+ buf.WriteBytes(x)
+}
+
+func (buf *ByteBuf) WriteBytesWithoutSize(x []byte) {
+ size := len(x)
+ buf.EnsureWrite(size)
+ copy(buf.bytes[buf.writerIndex:], x)
+ buf.writerIndex += size
+}
+
+func (buf *ByteBuf) ReadVector2() (Vector2, error) {
+ if x, err := buf.ReadFloat(); err == nil {
+ if y, err2 := buf.ReadFloat(); err2 == nil {
+ return Vector2{X: x, Y: y}, nil
+ }
+ }
+ return Vector2{}, UnmarshalErr
+}
+
+func (buf *ByteBuf) WriteVector2(x Vector2) {
+ buf.WriteFloat(x.X)
+ buf.WriteFloat(x.Y)
+}
+
+func (buf *ByteBuf) ReadVector3() (Vector3, error) {
+ if x, err := buf.ReadFloat(); err == nil {
+ if y, err2 := buf.ReadFloat(); err2 == nil {
+ if z, err3 := buf.ReadFloat(); err3 == nil {
+ return Vector3{X: x, Y: y, Z: z}, nil
+ }
+ }
+ }
+ return Vector3{}, UnmarshalErr
+}
+
+func (buf *ByteBuf) WriteVector3(x Vector3) {
+ buf.WriteFloat(x.X)
+ buf.WriteFloat(x.Y)
+ buf.WriteFloat(x.Z)
+}
+
+func (buf *ByteBuf) ReadVector4() (Vector4, error) {
+ if x, err := buf.ReadFloat(); err == nil {
+ if y, err2 := buf.ReadFloat(); err2 == nil {
+ if z, err3 := buf.ReadFloat(); err3 == nil {
+ if w, err4 := buf.ReadFloat(); err4 == nil {
+ return Vector4{X: x, Y: y, Z: z, W: w}, nil
+ }
+ }
+ }
+ }
+ return Vector4{}, UnmarshalErr
+}
+
+func (buf *ByteBuf) WriteVector4(x Vector4) {
+ buf.WriteFloat(x.X)
+ buf.WriteFloat(x.Y)
+ buf.WriteFloat(x.Z)
+ buf.WriteFloat(x.W)
+}
diff --git a/sys/configure/serialization/ISerializable.go b/sys/configure/serialization/ISerializable.go
new file mode 100644
index 000000000..d5a4662c2
--- /dev/null
+++ b/sys/configure/serialization/ISerializable.go
@@ -0,0 +1,7 @@
+package serialization
+
+type ISerializable interface {
+ GetTypeId() int32
+ Serialize(buf *ByteBuf)
+ Deserialize(buf *ByteBuf) error
+}
diff --git a/sys/configure/serialization/Vector2.go b/sys/configure/serialization/Vector2.go
new file mode 100644
index 000000000..a317f6779
--- /dev/null
+++ b/sys/configure/serialization/Vector2.go
@@ -0,0 +1,10 @@
+package serialization
+
+type Vector2 struct {
+ X float32
+ Y float32
+}
+
+func NewVector2(x float32, y float32) Vector2 {
+ return Vector2{X: x, Y: y}
+}
diff --git a/sys/configure/serialization/Vector3.go b/sys/configure/serialization/Vector3.go
new file mode 100644
index 000000000..d81602838
--- /dev/null
+++ b/sys/configure/serialization/Vector3.go
@@ -0,0 +1,11 @@
+package serialization
+
+type Vector3 struct {
+ X float32
+ Y float32
+ Z float32
+}
+
+func NewVector3(x float32, y float32, z float32) Vector3 {
+ return Vector3{X: x, Y: y, Z: z}
+}
diff --git a/sys/configure/serialization/Vector4.go b/sys/configure/serialization/Vector4.go
new file mode 100644
index 000000000..54201fc05
--- /dev/null
+++ b/sys/configure/serialization/Vector4.go
@@ -0,0 +1,12 @@
+package serialization
+
+type Vector4 struct {
+ X float32
+ Y float32
+ Z float32
+ W float32
+}
+
+func NewVector4(x float32, y float32, z float32, w float32) Vector4 {
+ return Vector4{X: x, Y: y, Z: z, W: w}
+}
diff --git a/sys/configure/serialization/marshal_test.go b/sys/configure/serialization/marshal_test.go
new file mode 100644
index 000000000..0a3fd21ba
--- /dev/null
+++ b/sys/configure/serialization/marshal_test.go
@@ -0,0 +1,205 @@
+package serialization
+
+import (
+ "bytes"
+ "testing"
+)
+
+func TestMarshal(t *testing.T) {
+ buf := NewByteBuf(10)
+
+ for i := 0; i < 2; i++ {
+ x := i != 0
+ buf.WriteBool(x)
+ if v, err := buf.ReadBool(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 256; i = i*3/2 + 1 {
+ x := byte(i)
+ buf.WriteByte(x)
+ if v, err := buf.ReadByte(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x10000; i = i*3/2 + 1 {
+ x := int16(i)
+ buf.WriteShort(x)
+ if v, err := buf.ReadShort(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x10000; i = i*3/2 + 1 {
+ x := int16(i)
+ buf.WriteFshort(x)
+ if v, err := buf.ReadFshort(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x1000000000; i = i*3/2 + 1 {
+ x := int32(i)
+ buf.WriteInt(x)
+ if v, err := buf.ReadInt(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x1000000000; i = i*3/2 + 1 {
+ x := int32(i)
+ buf.WriteFint(x)
+ if v, err := buf.ReadFint(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x100000000; i = i*3/2 + 1 {
+ x := int(i)
+ buf.WriteSize(x)
+ if v, err := buf.ReadSize(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x100000000; i = i*3/2 + 1 {
+ x := int32(i)
+ buf.WriteSint(x)
+ if v, err := buf.ReadSint(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x1000000000000000; i = i*3/2 + 1 {
+ x := int64(i)
+ buf.WriteLong(x)
+ if v, err := buf.ReadLong(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+
+ x = -x
+ buf.WriteLong(x)
+ if v, err := buf.ReadLong(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ for i := 0; i < 0x100000000; i = i*3/2 + 1 {
+ x := float32(i)
+ buf.WriteFloat(x)
+ if v, err := buf.ReadFloat(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+ for i := 0; i < 0x100000000; i = i*3/2 + 1 {
+ x := float64(i)
+ buf.WriteDouble(x)
+ if v, err := buf.ReadDouble(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ {
+ x := "walon"
+ buf.WriteString(x)
+ if v, err := buf.ReadString(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ {
+ x := Vector2{X: 1, Y: 2}
+ buf.WriteVector2(x)
+ if v, err := buf.ReadVector2(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ {
+ x := Vector3{X: 1, Y: 2, Z: 3}
+ buf.WriteVector3(x)
+ if v, err := buf.ReadVector3(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ {
+ x := Vector4{X: 1, Y: 2, Z: 3, W: 4}
+ buf.WriteVector4(x)
+ if v, err := buf.ReadVector4(); err != nil || v != x {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+ {
+ x := []byte{1, 2, 3}
+ buf.WriteBytes(x)
+ if v, err := buf.ReadBytes(); err != nil || !bytes.Equal(x, v) {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+ {
+ x := []byte{1, 2, 3, 4}
+ buf.WriteBytesWithoutSize(x)
+ if v, err := buf.ReadFint(); err != nil || v != 0x04030201 {
+ t.Fatalf("expect %v, get %v", x, v)
+ }
+ if buf.Size() != 0 {
+ t.Fatalf("expect empty. but size:%v, x:%v", buf.Size(), x)
+ }
+ }
+
+}
diff --git a/sys/configure/structs/MyBean.Items.go b/sys/configure/structs/MyBean.Items.go
new file mode 100644
index 000000000..4ae2aec04
--- /dev/null
+++ b/sys/configure/structs/MyBean.Items.go
@@ -0,0 +1,45 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+import "errors"
+
+type MyBeanItems struct {
+ Id int32
+ Name string
+ Desc string
+ Price int32
+ ExpireTime *int32
+ BatchUseable bool
+}
+
+const TypeId_MyBeanItems = -1804629298
+
+func (*MyBeanItems) GetTypeId() int32 {
+ return -1804629298
+}
+
+func (_v *MyBeanItems)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id"].(float64); !_ok_ { err = errors.New("id error"); return }; _v.Id = int32(_tempNum_) }
+ { var _ok_ bool; if _v.Name, _ok_ = _buf["name"].(string); !_ok_ { err = errors.New("name error"); return } }
+ { var _ok_ bool; if _v.Desc, _ok_ = _buf["desc"].(string); !_ok_ { err = errors.New("desc error"); return } }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["price"].(float64); !_ok_ { err = errors.New("price error"); return }; _v.Price = int32(_tempNum_) }
+ { var _ok_ bool; var __json_expire_time__ interface{}; if __json_expire_time__, _ok_ = _buf["expire_time"]; !_ok_ || __json_expire_time__ == nil { _v.ExpireTime = nil } else { var __x__ int32; { var _ok_ bool; var _x_ float64; if _x_, _ok_ = __json_expire_time__.(float64); !_ok_ { err = errors.New("__x__ error"); return }; __x__ = int32(_x_) }; _v.ExpireTime = &__x__ }}
+ { var _ok_ bool; if _v.BatchUseable, _ok_ = _buf["batch_useable"].(bool); !_ok_ { err = errors.New("batch_useable error"); return } }
+ return
+}
+
+func DeserializeMyBeanItems(_buf map[string]interface{}) (*MyBeanItems, error) {
+ v := &MyBeanItems{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/MyBean.Rewards.go b/sys/configure/structs/MyBean.Rewards.go
new file mode 100644
index 000000000..0410594c7
--- /dev/null
+++ b/sys/configure/structs/MyBean.Rewards.go
@@ -0,0 +1,45 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+import "errors"
+
+type MyBeanRewards struct {
+ Id int32
+ Name string
+ Desc string
+ Price int32
+ ExpireTime *int32
+ BatchUseable bool
+}
+
+const TypeId_MyBeanRewards = -97538382
+
+func (*MyBeanRewards) GetTypeId() int32 {
+ return -97538382
+}
+
+func (_v *MyBeanRewards)Deserialize(_buf map[string]interface{}) (err error) {
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id"].(float64); !_ok_ { err = errors.New("id error"); return }; _v.Id = int32(_tempNum_) }
+ { var _ok_ bool; if _v.Name, _ok_ = _buf["name"].(string); !_ok_ { err = errors.New("name error"); return } }
+ { var _ok_ bool; if _v.Desc, _ok_ = _buf["desc"].(string); !_ok_ { err = errors.New("desc error"); return } }
+ { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["price"].(float64); !_ok_ { err = errors.New("price error"); return }; _v.Price = int32(_tempNum_) }
+ { var _ok_ bool; var __json_expire_time__ interface{}; if __json_expire_time__, _ok_ = _buf["expire_time"]; !_ok_ || __json_expire_time__ == nil { _v.ExpireTime = nil } else { var __x__ int32; { var _ok_ bool; var _x_ float64; if _x_, _ok_ = __json_expire_time__.(float64); !_ok_ { err = errors.New("__x__ error"); return }; __x__ = int32(_x_) }; _v.ExpireTime = &__x__ }}
+ { var _ok_ bool; if _v.BatchUseable, _ok_ = _buf["batch_useable"].(bool); !_ok_ { err = errors.New("batch_useable error"); return } }
+ return
+}
+
+func DeserializeMyBeanRewards(_buf map[string]interface{}) (*MyBeanRewards, error) {
+ v := &MyBeanRewards{}
+ if err := v.Deserialize(_buf); err == nil {
+ return v, nil
+ } else {
+ return nil, err
+ }
+}
diff --git a/sys/configure/structs/Tables.go b/sys/configure/structs/Tables.go
new file mode 100644
index 000000000..d747ebe7e
--- /dev/null
+++ b/sys/configure/structs/Tables.go
@@ -0,0 +1,36 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type JsonLoader func(string) ([]map[string]interface{}, error)
+
+type Tables struct {
+ TbRewards *TbRewards
+ TbItem *TbItem
+}
+
+func NewTables(loader JsonLoader) (*Tables, error) {
+ var err error
+ var buf []map[string]interface{}
+
+ tables := &Tables{}
+ if buf, err = loader("tbrewards") ; err != nil {
+ return nil, err
+ }
+ if tables.TbRewards, err = NewTbRewards(buf) ; err != nil {
+ return nil, err
+ }
+ if buf, err = loader("tbitem") ; err != nil {
+ return nil, err
+ }
+ if tables.TbItem, err = NewTbItem(buf) ; err != nil {
+ return nil, err
+ }
+ return tables, nil
+}
diff --git a/sys/configure/structs/TbItem.go b/sys/configure/structs/TbItem.go
new file mode 100644
index 000000000..dc1822842
--- /dev/null
+++ b/sys/configure/structs/TbItem.go
@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type TbItem struct {
+ _dataMap map[int32]*MyBeanItems
+ _dataList []*MyBeanItems
+}
+
+func NewTbItem(_buf []map[string]interface{}) (*TbItem, error) {
+ _dataList := make([]*MyBeanItems, 0, len(_buf))
+ dataMap := make(map[int32]*MyBeanItems)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeMyBeanItems(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Id] = _v
+ }
+ }
+ return &TbItem{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *TbItem) GetDataMap() map[int32]*MyBeanItems {
+ return table._dataMap
+}
+
+func (table *TbItem) GetDataList() []*MyBeanItems {
+ return table._dataList
+}
+
+func (table *TbItem) Get(key int32) *MyBeanItems {
+ return table._dataMap[key]
+}
+
+
diff --git a/sys/configure/structs/TbRewards.go b/sys/configure/structs/TbRewards.go
new file mode 100644
index 000000000..93fe56a6d
--- /dev/null
+++ b/sys/configure/structs/TbRewards.go
@@ -0,0 +1,42 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+package cfg
+
+type TbRewards struct {
+ _dataMap map[int32]*MyBeanRewards
+ _dataList []*MyBeanRewards
+}
+
+func NewTbRewards(_buf []map[string]interface{}) (*TbRewards, error) {
+ _dataList := make([]*MyBeanRewards, 0, len(_buf))
+ dataMap := make(map[int32]*MyBeanRewards)
+ for _, _ele_ := range _buf {
+ if _v, err2 := DeserializeMyBeanRewards(_ele_); err2 != nil {
+ return nil, err2
+ } else {
+ _dataList = append(_dataList, _v)
+ dataMap[_v.Id] = _v
+ }
+ }
+ return &TbRewards{_dataList:_dataList, _dataMap:dataMap}, nil
+}
+
+func (table *TbRewards) GetDataMap() map[int32]*MyBeanRewards {
+ return table._dataMap
+}
+
+func (table *TbRewards) GetDataList() []*MyBeanRewards {
+ return table._dataList
+}
+
+func (table *TbRewards) Get(key int32) *MyBeanRewards {
+ return table._dataMap[key]
+}
+
+