Commit 4a502dd5e1b6addff80f1c09e66909f90a18cf8d

Authored by zhangqijia
1 parent 07aebd7d

fix: game,account,gm的action添加godoc

1 -Subproject commit 8e21a91c0930bc6690a06824013c51f6bbda350b 1 +Subproject commit 815945c2f56281d9808f542a9320b400dfb9301e
@@ -12,7 +12,7 @@ gen: @@ -12,7 +12,7 @@ gen:
12 test: 12 test:
13 go run cmd/test/client.go 13 go run cmd/test/client.go
14 http: 14 http:
15 - go run $(race) cmd/httpserver/http.go cmd/httpserver/AccountAction.go 15 + go run $(race) cmd/httpserver/main.go
16 16
17 game: 17 game:
18 go run -race cmd/gameserver/*.go 18 go run -race cmd/gameserver/*.go
@@ -27,5 +27,8 @@ plugin: @@ -27,5 +27,8 @@ plugin:
27 cd bin && rm -rf ./plugin*.so && cd - 27 cd bin && rm -rf ./plugin*.so && cd -
28 go build $(race) $(DEBUG) --buildmode=plugin -o bin/$(pname).so cmd/gameserver/plugin/*.go #--ldflags="-pluginpath=$(pname)" 28 go build $(race) $(DEBUG) --buildmode=plugin -o bin/$(pname).so cmd/gameserver/plugin/*.go #--ldflags="-pluginpath=$(pname)"
29 cd bin && ln -s $(pname).so plugin.so && cd - 29 cd bin && ln -s $(pname).so plugin.so && cd -
  30 +doc:
  31 + godoc -http=:8980 -goroot="." -play
  32 + open localhost:8980/pkg/pro2d/cmd/gameserver/action/#pkg-index
30 33
31 -.PHONY: all build protos test cert plugin  
32 \ No newline at end of file 34 \ No newline at end of file
  35 +.PHONY: all build protos test cert plugin doc
33 \ No newline at end of file 36 \ No newline at end of file
cmd/gameserver/action/GmAction.go
  1 +// GM系统API
1 package action 2 package action
2 3
3 import ( 4 import (
4 - "pro2d/common/logger"  
5 "pro2d/models" 5 "pro2d/models"
6 "pro2d/pb" 6 "pro2d/pb"
7 "strconv" 7 "strconv"
8 ) 8 )
9 9
10 -type GmAction struct {  
11 -} 10 +type GmAction struct{}
  11 +
  12 +// GMParams GM系统API请求参数的基础类型
  13 +type GMParams map[string]string
12 14
13 -func (gm *GmAction) AddExp(role *models.RoleModel, params ...interface{}) {  
14 - logger.Debug(params)  
15 - expIncrease, _ := strconv.Atoi(params[0].(string)) 15 +/*
  16 +AddExp 增加经验
  17 + exp 增加经验数量
  18 +*/
  19 +func (gm *GmAction) AddExp(role *models.RoleModel, params GMParams) {
  20 + expIncrease, _ := strconv.Atoi(params["exp"])
16 exp := role.IncrProperty("exp", int64(expIncrease)) 21 exp := role.IncrProperty("exp", int64(expIncrease))
17 role.UpdateProperty("exp", exp, true) 22 role.UpdateProperty("exp", exp, true)
18 } 23 }
19 24
20 -func (gm *GmAction) AddEquip(role *models.RoleModel, params ...interface{}) {  
21 - logger.Debug(params) 25 +/*
  26 +AddEquip 添加装备
  27 + id: 装备id
  28 +*/
  29 +func (gm *GmAction) AddEquip(role *models.RoleModel, params GMParams) {
22 //TODO 验证装备是否存在 30 //TODO 验证装备是否存在
23 31
24 equip := &pb.Equipment{ 32 equip := &pb.Equipment{
25 Id: role.IncreEquipByKey(1), 33 Id: role.IncreEquipByKey(1),
26 RoleId: role.Role.Id, 34 RoleId: role.Role.Id,
27 - Type: params[0].(string), 35 + Type: params["id"],
28 Quality: 1, 36 Quality: 1,
29 } 37 }
30 role.AddEquip(equip) 38 role.AddEquip(equip)
31 } 39 }
  40 +
  41 +/*
  42 +AddItem 添加物品
  43 + id: 物品id
  44 + count: 物品数量
  45 +*/
  46 +func (gm *GmAction) AddItem(role *models.RoleModel, params GMParams) {
  47 + id := params["id"]
  48 + count, _ := strconv.Atoi(params["count"])
  49 + role.AddItem(id, int32(count))
  50 +}
  51 +
  52 +/*
  53 +UpdatePackLimit 更新背包限制
  54 + clotheslimit: 服饰限制数
  55 + weaponslimit: 武器限制数
  56 + otherlimit: 其他限制数
  57 +*/
  58 +func (gm *GmAction) UpdatePackLimit(role *models.RoleModel, params GMParams) {
  59 + update := make(map[string]interface{}, 3)
  60 + c, ok := params["clotheslimit"]
  61 + if ok {
  62 + update["clotheslimit"], _ = strconv.Atoi(c)
  63 + }
  64 + w := params["weaponslimit"]
  65 + if ok {
  66 + update["weaponslimit"], _ = strconv.Atoi(w)
  67 + }
  68 + o := params["otherlimit"]
  69 + if ok {
  70 + update["otherlimit"], _ = strconv.Atoi(o)
  71 + }
  72 + role.UpdateProperties(update, true)
  73 +}
cmd/gameserver/action/RoleAction.go
  1 +// Package action 游戏服角色相关操作
1 package action 2 package action
2 3
3 import ( 4 import (
@@ -12,11 +13,13 @@ import ( @@ -12,11 +13,13 @@ import (
12 "pro2d/pb" 13 "pro2d/pb"
13 ) 14 )
14 15
  16 +// HeartRpc 心跳请求
15 func HeartRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { 17 func HeartRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
16 //msg.Conn.SetLastHeartCheckTime() 18 //msg.Conn.SetLastHeartCheckTime()
17 return 0, nil 19 return 0, nil
18 } 20 }
19 21
  22 +// getRandomName 随机名字
20 func getRandomName() string { 23 func getRandomName() string {
21 name := "" 24 name := ""
22 for { 25 for {
@@ -36,6 +39,11 @@ func getRandomName() string { @@ -36,6 +39,11 @@ func getRandomName() string {
36 return name 39 return name
37 } 40 }
38 41
  42 +/*
  43 +CreateRpc 创建角色请求
  44 + 1: proto解析错误
  45 + 2: 角色不存在
  46 +*/
39 func CreateRpc(role1 *models.RoleModel, msg components.IMessage) (int32, interface{}) { 47 func CreateRpc(role1 *models.RoleModel, msg components.IMessage) (int32, interface{}) {
40 req := pb.CreateReq{} 48 req := pb.CreateReq{}
41 if err := proto.Unmarshal(msg.GetData(), &req); err != nil { 49 if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
@@ -63,6 +71,7 @@ func CreateRpc(role1 *models.RoleModel, msg components.IMessage) (int32, interfa @@ -63,6 +71,7 @@ func CreateRpc(role1 *models.RoleModel, msg components.IMessage) (int32, interfa
63 return 0, nil 71 return 0, nil
64 } 72 }
65 73
  74 +// ChangeTeamRpc 阵容变换
66 func ChangeTeamRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { 75 func ChangeTeamRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
67 req := pb.ChangeTeamReq{} 76 req := pb.ChangeTeamReq{}
68 if err := proto.Unmarshal(msg.GetData(), &req); err != nil { 77 if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
@@ -74,6 +83,10 @@ func ChangeTeamRpc(role *models.RoleModel, msg components.IMessage) (int32, inte @@ -74,6 +83,10 @@ func ChangeTeamRpc(role *models.RoleModel, msg components.IMessage) (int32, inte
74 return 0, nil 83 return 0, nil
75 } 84 }
76 85
  86 +/*
  87 +HeroEquipReferRpc 穿戴/脱 装备
  88 + 2: 装备不存在
  89 +*/
77 func HeroEquipReferRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { 90 func HeroEquipReferRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
78 req := pb.HeroEquipReferReq{} 91 req := pb.HeroEquipReferReq{}
79 if err := proto.Unmarshal(msg.GetData(), &req); err != nil { 92 if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
@@ -118,6 +131,10 @@ func HeroEquipReferRpc(role *models.RoleModel, msg components.IMessage) (int32, @@ -118,6 +131,10 @@ func HeroEquipReferRpc(role *models.RoleModel, msg components.IMessage) (int32,
118 return 0, nil 131 return 0, nil
119 } 132 }
120 133
  134 +/*
  135 +RoleClearItemsRpc 删除物品
  136 + 2 删除失败
  137 +*/
121 func RoleClearItemsRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { 138 func RoleClearItemsRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
122 req := pb.RoleClearItemsReq{} 139 req := pb.RoleClearItemsReq{}
123 if err := proto.Unmarshal(msg.GetData(), &req); err != nil { 140 if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
@@ -132,6 +149,10 @@ func RoleClearItemsRpc(role *models.RoleModel, msg components.IMessage) (int32, @@ -132,6 +149,10 @@ func RoleClearItemsRpc(role *models.RoleModel, msg components.IMessage) (int32,
132 return 0, nil 149 return 0, nil
133 } 150 }
134 151
  152 +/*
  153 +EquipmentDelRpc 删除装备
  154 + 2 删除失败
  155 +*/
135 func EquipmentDelRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) { 156 func EquipmentDelRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
136 req := pb.EquipmentDelReq{} 157 req := pb.EquipmentDelReq{}
137 if err := proto.Unmarshal(msg.GetData(), &req); err != nil { 158 if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
cmd/gameserver/plugin/plugin.go
  1 +// plugin 热更插件
1 package main 2 package main
2 3
3 import ( 4 import (
cmd/gameserver/service/agent.go
@@ -58,6 +58,9 @@ func (c *Agent) OnConnection(conn components.IConnection) { @@ -58,6 +58,9 @@ func (c *Agent) OnConnection(conn components.IConnection) {
58 c.IConnection = conn 58 c.IConnection = conn
59 } 59 }
60 60
  61 +/*OnLoginQuery 登录请求
  62 +2 角色不存在
  63 +*/
61 func (c *Agent) OnLoginQuery(msg components.IMessage) (int32, proto.Message) { 64 func (c *Agent) OnLoginQuery(msg components.IMessage) (int32, proto.Message) {
62 //logger.Debug("11111111cmd: %v, msg: %s", msg.GetHeader().GetMsgID(), msg.GetData()) 65 //logger.Debug("11111111cmd: %v, msg: %s", msg.GetHeader().GetMsgID(), msg.GetData())
63 req := pb.LoginReq{} 66 req := pb.LoginReq{}
cmd/gameserver/service/gm.go
@@ -5,6 +5,7 @@ import ( @@ -5,6 +5,7 @@ import (
5 "net/http" 5 "net/http"
6 "pro2d/cmd/gameserver/action" 6 "pro2d/cmd/gameserver/action"
7 "pro2d/common/components" 7 "pro2d/common/components"
  8 + "pro2d/common/logger"
8 "pro2d/models" 9 "pro2d/models"
9 "reflect" 10 "reflect"
10 ) 11 )
@@ -25,19 +26,20 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc { @@ -25,19 +26,20 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc {
25 return func(c *gin.Context) { 26 return func(c *gin.Context) {
26 var roleId string 27 var roleId string
27 var ok bool 28 var ok bool
28 - properties := make([]interface{}, 2) 29 + properties := make(map[string]string, 2)
29 //请求类型,以及 format 参数 30 //请求类型,以及 format 参数
30 if c.Request.Method == "POST" { 31 if c.Request.Method == "POST" {
31 c.Request.ParseForm() 32 c.Request.ParseForm()
32 - for _, v := range c.Request.PostForm {  
33 - properties = append(properties, v[0]) 33 + for k, v := range c.Request.PostForm {
  34 + properties[k] = v[0]
34 } 35 }
35 roleId, ok = c.GetPostForm("role_id") 36 roleId, ok = c.GetPostForm("role_id")
36 37
37 } else if c.Request.Method == "GET" { 38 } else if c.Request.Method == "GET" {
38 roleId, ok = c.GetQuery("role_id") 39 roleId, ok = c.GetQuery("role_id")
39 - for _, v := range c.Request.URL.Query() {  
40 - properties = append(properties, v[0]) 40 + logger.Debug(c.Request.URL.Query())
  41 + for k, v := range c.Request.URL.Query() {
  42 + properties[k] = v[0]
41 } 43 }
42 } else { 44 } else {
43 c.JSON(http.StatusOK, gin.H{"code": -101, "message": "not support method"}) 45 c.JSON(http.StatusOK, gin.H{"code": -101, "message": "not support method"})
@@ -53,6 +55,7 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc { @@ -53,6 +55,7 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc {
53 conn := s.Server.GetConnManage().GetConnByRID(roleId) 55 conn := s.Server.GetConnManage().GetConnByRID(roleId)
54 var role *models.RoleModel 56 var role *models.RoleModel
55 callback := func() { 57 callback := func() {
  58 + logger.Debug(properties)
56 tvl.Call([]reflect.Value{obj, reflect.ValueOf(role), reflect.ValueOf(properties)}) 59 tvl.Call([]reflect.Value{obj, reflect.ValueOf(role), reflect.ValueOf(properties)})
57 role.SaveRoleData(0) 60 role.SaveRoleData(0)
58 } 61 }
cmd/httpserver/AccountAction.go renamed to cmd/httpserver/action/AccountAction.go
1 -package main 1 +// Account 账号系统API
  2 +package action
2 3
3 import ( 4 import (
4 "fmt" 5 "fmt"
5 "github.com/garyburd/redigo/redis" 6 "github.com/garyburd/redigo/redis"
6 "github.com/gin-gonic/gin" 7 "github.com/gin-gonic/gin"
  8 + "pro2d/cmd/httpserver/service"
7 "pro2d/common" 9 "pro2d/common"
8 "pro2d/common/db/redisproxy" 10 "pro2d/common/db/redisproxy"
9 "pro2d/common/etcd" 11 "pro2d/common/etcd"
@@ -14,9 +16,16 @@ import ( @@ -14,9 +16,16 @@ import (
14 ) 16 )
15 17
16 type AccountAction struct { 18 type AccountAction struct {
17 - HttpServer *AccountServer 19 + HttpServer *service.AccountServer
18 } 20 }
19 21
  22 +/*Register 账号注册
  23 +2 验证码转化为string错误
  24 +3 验证码错误
  25 +4 手机号已存在,不用重复注册
  26 +5 uid get error
  27 +6 mongo create error
  28 +*/
20 func (h *AccountAction) Register(c *gin.Context) (int, interface{}) { 29 func (h *AccountAction) Register(c *gin.Context) (int, interface{}) {
21 var register pb.Register 30 var register pb.Register
22 if err := c.ShouldBindJSON(&register); err != nil { 31 if err := c.ShouldBindJSON(&register); err != nil {
@@ -55,6 +64,10 @@ func (h *AccountAction) Register(c *gin.Context) (int, interface{}) { @@ -55,6 +64,10 @@ func (h *AccountAction) Register(c *gin.Context) (int, interface{}) {
55 return 0, "success" 64 return 0, "success"
56 } 65 }
57 66
  67 +/*Login 登录
  68 +2 账号不存在
  69 +3 密码错误
  70 +*/
58 func (h *AccountAction) Login(c *gin.Context) (int, interface{}) { 71 func (h *AccountAction) Login(c *gin.Context) (int, interface{}) {
59 var login pb.Account 72 var login pb.Account
60 if err := c.ShouldBindJSON(&login); err != nil { 73 if err := c.ShouldBindJSON(&login); err != nil {
@@ -62,7 +75,7 @@ func (h *AccountAction) Login(c *gin.Context) (int, interface{}) { @@ -62,7 +75,7 @@ func (h *AccountAction) Login(c *gin.Context) (int, interface{}) {
62 } 75 }
63 account := models.NewAccount(login.Phone) 76 account := models.NewAccount(login.Phone)
64 if err := account.Load(); err != nil { 77 if err := account.Load(); err != nil {
65 - return 2, err.Error() 78 + return 2, "account not exists"
66 } 79 }
67 80
68 if common.Md5V(login.Password) != account.Password { 81 if common.Md5V(login.Password) != account.Password {
@@ -84,6 +97,10 @@ func (h *AccountAction) Login(c *gin.Context) (int, interface{}) { @@ -84,6 +97,10 @@ func (h *AccountAction) Login(c *gin.Context) (int, interface{}) {
84 return 0, rsp 97 return 0, rsp
85 } 98 }
86 99
  100 +/*Sms 发短信
  101 +2 发送太频繁
  102 +3 发送失败
  103 +*/
87 func (h *AccountAction) Sms(c *gin.Context) (int, interface{}) { 104 func (h *AccountAction) Sms(c *gin.Context) (int, interface{}) {
88 phone, ok := c.GetQuery("phone") 105 phone, ok := c.GetQuery("phone")
89 if !ok { 106 if !ok {
cmd/httpserver/http.go renamed to cmd/httpserver/service/http.go
1 -package main 1 +package service
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 "math/rand" 5 "math/rand"
6 - "os"  
7 - "os/signal"  
8 "pro2d/common" 6 "pro2d/common"
9 "pro2d/common/components" 7 "pro2d/common/components"
10 "pro2d/common/db/mongoproxy" 8 "pro2d/common/db/mongoproxy"
11 "pro2d/common/db/redisproxy" 9 "pro2d/common/db/redisproxy"
12 "pro2d/common/etcd" 10 "pro2d/common/etcd"
13 - "pro2d/common/logger"  
14 "pro2d/models" 11 "pro2d/models"
15 - "syscall"  
16 "time" 12 "time"
17 ) 13 )
18 14
@@ -70,25 +66,3 @@ func (s *AccountServer) Stop() { @@ -70,25 +66,3 @@ func (s *AccountServer) Stop() {
70 s.IHttp.Stop() 66 s.IHttp.Stop()
71 etcd.CloseEtcd() 67 etcd.CloseEtcd()
72 } 68 }
73 -  
74 -func main() {  
75 - err := make(chan error)  
76 - stopChan := make(chan os.Signal)  
77 - signal.Notify(stopChan, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)  
78 -  
79 - common.GlobalSconf = common.GlobalConf.AccountConf  
80 -  
81 - web := NewAccountServer("v1", fmt.Sprintf(":%d", common.GlobalSconf.Port))  
82 - web.BindHandler(&AccountAction{HttpServer: web})  
83 - go func() {  
84 - err <- web.Start()  
85 - }()  
86 -  
87 - select {  
88 - case e := <-err:  
89 - logger.Error("http server error: %v", e)  
90 - case <-stopChan:  
91 - logger.Debug("http stop")  
92 - web.Stop()  
93 - }  
94 -}  
common/commonFunc.go
@@ -6,6 +6,7 @@ import ( @@ -6,6 +6,7 @@ import (
6 "fmt" 6 "fmt"
7 "github.com/garyburd/redigo/redis" 7 "github.com/garyburd/redigo/redis"
8 "pro2d/common/db/redisproxy" 8 "pro2d/common/db/redisproxy"
  9 + "strconv"
9 "strings" 10 "strings"
10 ) 11 )
11 12
@@ -54,7 +55,7 @@ func GetNextUId() (string, error) { @@ -54,7 +55,7 @@ func GetNextUId() (string, error) {
54 55
55 type IMapString map[string]interface{} 56 type IMapString map[string]interface{}
56 57
57 -func MapToString(params map[string]interface{}) string { 58 +func MapToString(params IMapString) string {
58 var items bytes.Buffer 59 var items bytes.Buffer
59 for k, v := range params { 60 for k, v := range params {
60 items.WriteString(k) 61 items.WriteString(k)
@@ -65,14 +66,22 @@ func MapToString(params map[string]interface{}) string { @@ -65,14 +66,22 @@ func MapToString(params map[string]interface{}) string {
65 return items.String() 66 return items.String()
66 } 67 }
67 68
68 -func StringToMap(items string) map[string]interface{} {  
69 - backPack := make(map[string]interface{}) 69 +func StringToMap(items string, num bool) IMapString {
  70 + backPack := make(map[string]interface{}, 10)
70 for _, v := range strings.Split(items, " ") { 71 for _, v := range strings.Split(items, " ") {
71 ii := strings.Split(v, "=") 72 ii := strings.Split(v, "=")
72 if len(ii) < 2 { 73 if len(ii) < 2 {
73 continue 74 continue
74 } 75 }
75 - backPack[ii[0]] = ii[1] 76 + if num {
  77 + c, err := strconv.Atoi(ii[1])
  78 + if err != nil {
  79 + continue
  80 + }
  81 + backPack[ii[0]] = uint32(c)
  82 + } else {
  83 + backPack[ii[0]] = ii[1]
  84 + }
76 } 85 }
77 return backPack 86 return backPack
78 } 87 }
@@ -25,6 +25,9 @@ const ( @@ -25,6 +25,9 @@ const (
25 //gm参数属性 25 //gm参数属性
26 Role_ = "_role" 26 Role_ = "_role"
27 Conn_ = "_conn" 27 Conn_ = "_conn"
  28 +
  29 + //背包容量
  30 + LimitCommon = 100
28 ) 31 )
29 32
30 //redis keys 33 //redis keys
@@ -52,11 +52,12 @@ require ( @@ -52,11 +52,12 @@ require (
52 go.uber.org/atomic v1.7.0 // indirect 52 go.uber.org/atomic v1.7.0 // indirect
53 go.uber.org/multierr v1.6.0 // indirect 53 go.uber.org/multierr v1.6.0 // indirect
54 go.uber.org/zap v1.17.0 // indirect 54 go.uber.org/zap v1.17.0 // indirect
55 - golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f // indirect  
56 - golang.org/x/net v0.0.0-20220403103023-749bd193bc2b // indirect 55 + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
  56 + golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 // indirect
57 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect 57 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
58 - golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect 58 + golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 // indirect
59 golang.org/x/text v0.3.7 // indirect 59 golang.org/x/text v0.3.7 // indirect
  60 + golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
60 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect 61 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect
61 google.golang.org/grpc v1.38.0 // indirect 62 google.golang.org/grpc v1.38.0 // indirect
62 gopkg.in/ini.v1 v1.66.4 // indirect 63 gopkg.in/ini.v1 v1.66.4 // indirect
@@ -242,8 +242,9 @@ golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPh @@ -242,8 +242,9 @@ golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPh
242 golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 242 golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
243 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 243 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
244 golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 244 golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
245 -golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f h1:aZp0e2vLN4MToVqnjNEYEtrEA8RH8U8FN1CU7JgqsPU=  
246 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= 245 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
  246 +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
  247 +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
247 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 248 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
248 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 249 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
249 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= 250 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -268,9 +269,10 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R @@ -268,9 +269,10 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
268 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 269 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
269 golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 270 golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
270 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 271 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
  272 +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
271 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 273 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
272 -golang.org/x/net v0.0.0-20220403103023-749bd193bc2b h1:vI32FkLJNAWtGD4BwkThwEy6XS7ZLLMHkSkYfF8M0W0=  
273 -golang.org/x/net v0.0.0-20220403103023-749bd193bc2b/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= 274 +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA=
  275 +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
274 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 276 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
275 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 277 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
276 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 278 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -305,8 +307,9 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w @@ -305,8 +307,9 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w
305 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 307 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
306 golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 308 golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
307 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 309 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
308 -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=  
309 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 310 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
  311 +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 h1:nonptSpoQ4vQjyraW20DXPAglgQfVnM9ZC6MmNLMR60=
  312 +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
310 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 313 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
311 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 314 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
312 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 315 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -332,8 +335,9 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -332,8 +335,9 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
332 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 335 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
333 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 336 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
334 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 337 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
335 -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=  
336 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 338 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
  339 +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U=
  340 +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
337 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 341 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
338 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 342 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
339 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 343 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -16,7 +16,7 @@ func NewHero(hero *pb.Hero) *HeroModel { @@ -16,7 +16,7 @@ func NewHero(hero *pb.Hero) *HeroModel {
16 m := &HeroModel{ 16 m := &HeroModel{
17 ISchema: NewSchema(hero.Id, hero), 17 ISchema: NewSchema(hero.Id, hero),
18 Hero: hero, 18 Hero: hero,
19 - Equipments: common.StringToMap(hero.Equipments), 19 + Equipments: common.StringToMap(hero.Equipments, false),
20 } 20 }
21 return m 21 return m
22 } 22 }
@@ -132,6 +132,9 @@ func (m *RoleModel) InitRole() { @@ -132,6 +132,9 @@ func (m *RoleModel) InitRole() {
132 t4.Id = m.IncreTeamByKey(1) 132 t4.Id = m.IncreTeamByKey(1)
133 m.AddTeam(&t4) 133 m.AddTeam(&t4)
134 134
  135 + //init limit
  136 + m.UpdateProperties(map[string]interface{}{"clotheslimit": 100, "weaponslimit": 100, "otherlimit": 100}, false)
  137 +
135 m.Update() 138 m.Update()
136 } 139 }
137 140
@@ -161,7 +164,7 @@ func (m *RoleModel) LoadTeams() { @@ -161,7 +164,7 @@ func (m *RoleModel) LoadTeams() {
161 164
162 //加载背包数据到内存 165 //加载背包数据到内存
163 func (m *RoleModel) LoadItems() { 166 func (m *RoleModel) LoadItems() {
164 - m.Items = common.StringToMap(m.Role.Items) 167 + m.Items = common.StringToMap(m.Role.Items, true)
165 } 168 }
166 169
167 func (m *RoleModel) LoadEquipments() { 170 func (m *RoleModel) LoadEquipments() {
models/rolePlugin.go
@@ -12,7 +12,7 @@ import ( @@ -12,7 +12,7 @@ import (
12 func (m *RoleModel) GetItemCount(key string) uint32 { 12 func (m *RoleModel) GetItemCount(key string) uint32 {
13 c, ok := m.Items[key] 13 c, ok := m.Items[key]
14 if !ok { 14 if !ok {
15 - c = 0 15 + c = uint32(0)
16 } 16 }
17 return c.(uint32) 17 return c.(uint32)
18 } 18 }
@@ -514,6 +514,7 @@ func (x *RoleUpdateItemsRsp) GetItems() string { @@ -514,6 +514,7 @@ func (x *RoleUpdateItemsRsp) GetItems() string {
514 return "" 514 return ""
515 } 515 }
516 516
  517 +//ResponseCmd RoleClearItemsReq
517 type RoleClearItemsReq struct { 518 type RoleClearItemsReq struct {
518 state protoimpl.MessageState 519 state protoimpl.MessageState
519 sizeCache protoimpl.SizeCache 520 sizeCache protoimpl.SizeCache
@@ -569,6 +570,7 @@ func (x *RoleClearItemsReq) GetCount() int32 { @@ -569,6 +570,7 @@ func (x *RoleClearItemsReq) GetCount() int32 {
569 return 0 570 return 0
570 } 571 }
571 572
  573 +//ResponseCmd EquipmentDelReq
572 type EquipmentDelReq struct { 574 type EquipmentDelReq struct {
573 state protoimpl.MessageState 575 state protoimpl.MessageState
574 sizeCache protoimpl.SizeCache 576 sizeCache protoimpl.SizeCache
@@ -459,19 +459,22 @@ type Role struct { @@ -459,19 +459,22 @@ type Role struct {
459 sizeCache protoimpl.SizeCache 459 sizeCache protoimpl.SizeCache
460 unknownFields protoimpl.UnknownFields 460 unknownFields protoimpl.UnknownFields
461 461
462 - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty" index:"unique" pri:"1"` // @inject_tag: index:"unique" pri:"1"  
463 - Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty" index:"unique"` // @inject_tag: index:"unique"  
464 - Device string `protobuf:"bytes,3,opt,name=device,proto3" json:"device,omitempty"`  
465 - Nick string `protobuf:"bytes,4,opt,name=nick,proto3" json:"nick,omitempty"`  
466 - Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"`  
467 - Exp int64 `protobuf:"varint,6,opt,name=exp,proto3" json:"exp,omitempty"`  
468 - Hp int64 `protobuf:"varint,7,opt,name=hp,proto3" json:"hp,omitempty"`  
469 - HpMax int64 `protobuf:"varint,8,opt,name=hp_max,json=hpMax,proto3" json:"hp_max,omitempty"`  
470 - BuyR string `protobuf:"bytes,11,opt,name=buy_r,json=buyR,proto3" json:"buy_r,omitempty"`  
471 - PayR string `protobuf:"bytes,12,opt,name=pay_r,json=payR,proto3" json:"pay_r,omitempty"`  
472 - Del bool `protobuf:"varint,13,opt,name=del,proto3" json:"del,omitempty"`  
473 - Incres map[string]uint32 `protobuf:"bytes,14,rep,name=incres,proto3" json:"incres,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`  
474 - Items string `protobuf:"bytes,15,opt,name=items,proto3" json:"items,omitempty"` //物品 "id=count id2=count2" 462 + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty" index:"unique" pri:"1"` // @inject_tag: index:"unique" pri:"1"
  463 + Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty" index:"unique"` // @inject_tag: index:"unique"
  464 + Device string `protobuf:"bytes,3,opt,name=device,proto3" json:"device,omitempty"`
  465 + Nick string `protobuf:"bytes,4,opt,name=nick,proto3" json:"nick,omitempty"`
  466 + Level int32 `protobuf:"varint,5,opt,name=level,proto3" json:"level,omitempty"`
  467 + Exp int64 `protobuf:"varint,6,opt,name=exp,proto3" json:"exp,omitempty"`
  468 + Hp int64 `protobuf:"varint,7,opt,name=hp,proto3" json:"hp,omitempty"`
  469 + HpMax int64 `protobuf:"varint,8,opt,name=hp_max,json=hpMax,proto3" json:"hp_max,omitempty"`
  470 + BuyR string `protobuf:"bytes,11,opt,name=buy_r,json=buyR,proto3" json:"buy_r,omitempty"`
  471 + PayR string `protobuf:"bytes,12,opt,name=pay_r,json=payR,proto3" json:"pay_r,omitempty"`
  472 + Del bool `protobuf:"varint,13,opt,name=del,proto3" json:"del,omitempty"`
  473 + Incres map[string]uint32 `protobuf:"bytes,14,rep,name=incres,proto3" json:"incres,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
  474 + Items string `protobuf:"bytes,15,opt,name=items,proto3" json:"items,omitempty"` //物品 "id=count id2=count2"
  475 + Clotheslimit uint32 `protobuf:"varint,16,opt,name=clotheslimit,proto3" json:"clotheslimit,omitempty"`
  476 + Weaponslimit uint32 `protobuf:"varint,17,opt,name=weaponslimit,proto3" json:"weaponslimit,omitempty"`
  477 + Otherlimit uint32 `protobuf:"varint,18,opt,name=otherlimit,proto3" json:"otherlimit,omitempty"`
475 } 478 }
476 479
477 func (x *Role) Reset() { 480 func (x *Role) Reset() {
@@ -597,6 +600,27 @@ func (x *Role) GetItems() string { @@ -597,6 +600,27 @@ func (x *Role) GetItems() string {
597 return "" 600 return ""
598 } 601 }
599 602
  603 +func (x *Role) GetClotheslimit() uint32 {
  604 + if x != nil {
  605 + return x.Clotheslimit
  606 + }
  607 + return 0
  608 +}
  609 +
  610 +func (x *Role) GetWeaponslimit() uint32 {
  611 + if x != nil {
  612 + return x.Weaponslimit
  613 + }
  614 + return 0
  615 +}
  616 +
  617 +func (x *Role) GetOtherlimit() uint32 {
  618 + if x != nil {
  619 + return x.Otherlimit
  620 + }
  621 + return 0
  622 +}
  623 +
600 var File_models_proto protoreflect.FileDescriptor 624 var File_models_proto protoreflect.FileDescriptor
601 625
602 var file_models_proto_rawDesc = []byte{ 626 var file_models_proto_rawDesc = []byte{
@@ -642,7 +666,7 @@ var file_models_proto_rawDesc = []byte{ @@ -642,7 +666,7 @@ var file_models_proto_rawDesc = []byte{
642 0x49, 0x64, 0x33, 0x22, 0x2f, 0x0a, 0x09, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 666 0x49, 0x64, 0x33, 0x22, 0x2f, 0x0a, 0x09, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74,
643 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 667 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
644 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 668 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
645 - 0x03, 0x76, 0x61, 0x6c, 0x22, 0xe2, 0x02, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 669 + 0x03, 0x76, 0x61, 0x6c, 0x22, 0xca, 0x03, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a,
646 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 670 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a,
647 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 671 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12,
648 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 672 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
@@ -660,12 +684,19 @@ var file_models_proto_rawDesc = []byte{ @@ -660,12 +684,19 @@ var file_models_proto_rawDesc = []byte{
660 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 684 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e,
661 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 685 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
662 0x52, 0x06, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 686 0x52, 0x06, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d,
663 - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x39,  
664 - 0x0a, 0x0b, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,  
665 - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,  
666 - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05,  
667 - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f,  
668 - 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 687 + 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x22,
  688 + 0x0a, 0x0c, 0x63, 0x6c, 0x6f, 0x74, 0x68, 0x65, 0x73, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x10,
  689 + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x63, 0x6c, 0x6f, 0x74, 0x68, 0x65, 0x73, 0x6c, 0x69, 0x6d,
  690 + 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x65, 0x61, 0x70, 0x6f, 0x6e, 0x73, 0x6c, 0x69, 0x6d,
  691 + 0x69, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x77, 0x65, 0x61, 0x70, 0x6f, 0x6e,
  692 + 0x73, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x6c,
  693 + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x74, 0x68, 0x65,
  694 + 0x72, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x73,
  695 + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
  696 + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
  697 + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
  698 + 0x01, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70,
  699 + 0x72, 0x6f, 0x74, 0x6f, 0x33,
669 } 700 }
670 701
671 var ( 702 var (