活动优化 + 错误码补充

This commit is contained in:
meixiongfeng 2023-08-09 18:07:56 +08:00
parent bda8c44208
commit 0d9e9f86a0
8 changed files with 128 additions and 59 deletions

View File

@ -4,6 +4,7 @@ import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/configure" "go_dreamfactory/sys/configure"
"go_dreamfactory/utils"
) )
//参数校验 //参数校验
@ -22,6 +23,7 @@ func (this *apiComp) GetLattice(session comm.IUserSession, req *pb.UiGameGetLatt
hdData *pb.DBLatticeData // 玩家的活动数据 hdData *pb.DBLatticeData // 玩家的活动数据
update map[string]interface{} // update map[string]interface{} //
) )
update = make(map[string]interface{})
curTime := configure.Now().Unix() curTime := configure.Now().Unix()
if activity, err = this.module.ModuleActivity.GetHdInfoByHdId(req.Hdid); err != nil { // 活动不存在 if activity, err = this.module.ModuleActivity.GetHdInfoByHdId(req.Hdid); err != nil { // 活动不存在
errdata = &pb.ErrorData{ errdata = &pb.ErrorData{
@ -40,22 +42,38 @@ func (this *apiComp) GetLattice(session comm.IUserSession, req *pb.UiGameGetLatt
// 获取玩家活动数据 // 获取玩家活动数据
hdData, _ = this.module.modelLattice.getLatticeList(session.GetUserId(), activity.Id) hdData, _ = this.module.modelLattice.getLatticeList(session.GetUserId(), activity.Id)
if e, err := this.module.ModuleUser.GetUserExpand(session.GetUserId()); err != nil { if e, err := this.module.ModuleUser.GetUserExpand(session.GetUserId()); err == nil {
if conf, err := this.module.configure.GetLatticeConsumConf(); err != nil { if conf, err := this.module.configure.GetLatticeConsumConf(); err == nil {
bchange := false
// 清除每日获得的碎片数据
if !utils.IsToday(hdData.Lasttime) {
hdData.Lasttime = configure.Now().Unix()
hdData.Val = 0
update["val"] = hdData.Val
update["lasttime"] = hdData.Lasttime
bchange = true
}
if conf.Getmax > hdData.Val { // 超过今日上限 if conf.Getmax > hdData.Val { // 超过今日上限
if e.ConsumPs/conf.Usepawer >= hdData.Val { if e.ConsumPs/conf.Usepawer >= hdData.Val {
hdData.Val = e.ConsumPs / conf.Usepawer hdData.Val = e.ConsumPs / conf.Usepawer
if conf.Getmax < hdData.Val { // 超过今日上限 if conf.Getmax < hdData.Val { // 超过今日上限
hdData.Val = conf.Getmax hdData.Val = conf.Getmax
update["val"] = hdData.Val update["val"] = hdData.Val
this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), update) // 修改进度 bchange = true
} }
} }
} }
if bchange {
this.module.modelLattice.modifyLatticeListByObjId(session.GetUserId(), update)
}
} }
} }
this.LatticeReward(session, &pb.UiGameLatticeRewardReq{
Hdid: "64d4b1f7510317d189bb6ee5",
Id: 3,
})
session.SendMsg(string(this.module.GetType()), "getlattice", &pb.UiGameGetLatticeResp{Data: hdData}) session.SendMsg(string(this.module.GetType()), "getlattice", &pb.UiGameGetLatticeResp{Data: hdData})
return return
} }

View File

@ -4,6 +4,7 @@ import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/configure" "go_dreamfactory/sys/configure"
"go_dreamfactory/utils"
) )
//参数校验 //参数校验
@ -22,6 +23,7 @@ func (this *apiComp) GetPuzzle(session comm.IUserSession, req *pb.UiGameGetPuzzl
hdData *pb.DBPuzzleData // 玩家的活动数据 hdData *pb.DBPuzzleData // 玩家的活动数据
update map[string]interface{} // update map[string]interface{} //
) )
update = make(map[string]interface{})
curTime := configure.Now().Unix() curTime := configure.Now().Unix()
if activity, err = this.module.ModuleActivity.GetHdInfoByHdId(req.Hdid); err != nil { // 活动不存在 if activity, err = this.module.ModuleActivity.GetHdInfoByHdId(req.Hdid); err != nil { // 活动不存在
errdata = &pb.ErrorData{ errdata = &pb.ErrorData{
@ -40,19 +42,31 @@ func (this *apiComp) GetPuzzle(session comm.IUserSession, req *pb.UiGameGetPuzzl
// 获取玩家活动数据 // 获取玩家活动数据
hdData, _ = this.module.modelPuzzle.getPuzzleList(session.GetUserId(), activity.Id) hdData, _ = this.module.modelPuzzle.getPuzzleList(session.GetUserId(), activity.Id)
if e, err := this.module.ModuleUser.GetUserExpand(session.GetUserId()); err != nil { if e, err := this.module.ModuleUser.GetUserExpand(session.GetUserId()); err == nil {
if conf, err := this.module.configure.GetPuzzleConsumConf(); err != nil { if conf, err := this.module.configure.GetPuzzleConsumConf(); err == nil {
bchange := false
// 清除每日获得的碎片数据
if !utils.IsToday(hdData.Lasttime) {
hdData.Lasttime = configure.Now().Unix()
hdData.Val = 0
update["val"] = hdData.Val
update["lasttime"] = hdData.Lasttime
bchange = true
}
if conf.Getmax > hdData.Val { // 超过今日上限 if conf.Getmax > hdData.Val { // 超过今日上限
if e.ConsumPs/conf.Usepawer >= hdData.Val { if e.ConsumPs/conf.Usepawer >= hdData.Val {
hdData.Val = e.ConsumPs / conf.Usepawer hdData.Val = e.ConsumPs / conf.Usepawer
if conf.Getmax < hdData.Val { // 超过今日上限 if conf.Getmax < hdData.Val { // 超过今日上限
hdData.Val = conf.Getmax hdData.Val = conf.Getmax
update["val"] = hdData.Val update["val"] = hdData.Val
this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), update) // 修改进度 bchange = true
} }
} }
} }
if bchange {
this.module.modelPuzzle.modifyPuzzleListByObjId(session.GetUserId(), update)
}
} }
} }

View File

@ -37,9 +37,8 @@ func (this *apiComp) LatticeFinish(session comm.IUserSession, req *pb.UiGameLatt
list, _ := this.module.modelLattice.getLatticeList(session.GetUserId(), req.Hdid) list, _ := this.module.modelLattice.getLatticeList(session.GetUserId(), req.Hdid)
if list.BReward { if list.BReward {
errdata = &pb.ErrorData{ errdata = &pb.ErrorData{
Code: pb.ErrorCode_ActivityRepatReward, Code: pb.ErrorCode_ActivityRepatReward,
Title: pb.ErrorCode_ActivityRepatReward.ToString(), Title: pb.ErrorCode_ActivityRepatReward.ToString(),
Message: err.Error(),
} }
return return
} }

View File

@ -24,7 +24,6 @@ func (this *apiComp) LatticeGrid(session comm.IUserSession, req *pb.UiGameLattic
return // 参数校验失败直接返回 return // 参数校验失败直接返回
} }
var ( var (
consum *cfg.Gameatn // 获取消耗
latticeConf *cfg.GameUiGameLatticeData latticeConf *cfg.GameUiGameLatticeData
err error err error
atno []*pb.UserAtno atno []*pb.UserAtno
@ -37,19 +36,32 @@ func (this *apiComp) LatticeGrid(session comm.IUserSession, req *pb.UiGameLattic
session.SendMsg(string(this.module.GetType()), "latticegrid", &pb.UiGameLatticeGridResp{Data: list}) session.SendMsg(string(this.module.GetType()), "latticegrid", &pb.UiGameLatticeGridResp{Data: list})
return return
} }
// 校验消耗 if v1, ok := list.Lattice[list.Floor]; ok {
if conf, err = this.module.configure.GetLatticeConsumConf(); err != nil { if _, ok := v1.Data[req.Grid]; ok {
consum = &cfg.Gameatn{ errdata = &pb.ErrorData{ // 重复领取
A: conf.Itemget.A, Code: pb.ErrorCode_ActivityRepatReward,
T: conf.Itemget.T, Title: pb.ErrorCode_ActivityRepatReward.ToString(),
N: 1, }
return
}
list.Lattice[list.Floor].Data[req.Grid] = 1
} else {
list.Lattice[list.Floor] = &pb.LatticeData{
Data: map[int32]int32{req.Grid: 1},
} }
} }
if errdata = this.module.ConsumeRes(session, []*cfg.Gameatn{consum}, true); errdata != nil { // 校验消耗
return if conf, err = this.module.configure.GetLatticeConsumConf(); err != nil {
if conf.Cost.N > 0 {
if errdata = this.module.CheckRes(session, []*cfg.Gameatn{conf.Cost}); errdata != nil { // 消耗校验
return
}
}
} }
// 校验 是否是宝箱 // 校验 是否是宝箱
latticeConf, err = this.module.configure.GetLatticeConf(list.Val) latticeConf, err = this.module.configure.GetLatticeConf(list.Floor)
if err != nil { if err != nil {
return return
} }
@ -68,24 +80,27 @@ func (this *apiComp) LatticeGrid(session comm.IUserSession, req *pb.UiGameLattic
} }
} }
} }
if errdata = this.module.ConsumeRes(session, []*cfg.Gameatn{conf.Cost}, true); errdata != nil {
return
}
update["lattice"] = list.Lattice
// 如果是下一关 // 如果是下一关
if req.Grid == latticeConf.Outpos { if req.Grid == latticeConf.Outpos {
list.Val += 1 list.Floor += 1
// 校验是不是达到最大层数 // 校验是不是达到最大层数
if _, e := this.module.configure.GetLatticeConf(list.Val); e == nil { if _, e := this.module.configure.GetLatticeConf(list.Floor); e == nil {
list.Val -= 1 list.Floor -= 1
} }
update["val"] = list.Val update["Floor"] = list.Floor
if list.Total < list.Val { if list.Total < list.Floor {
list.Total = list.Val list.Total = list.Floor
update["total"] = list.Total update["total"] = list.Total
} }
} }
list.Gotarr[req.Grid] = 1 // list.Gotarr[req.Grid] = 1
update["gotarr"] = list.Gotarr // update["gotarr"] = list.Gotarr
this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), update) // 修改进度 this.module.modelLattice.modifyLatticeListByObjId(session.GetUserId(), update)
session.SendMsg(string(this.module.GetType()), "latticegrid", &pb.UiGameLatticeGridResp{ session.SendMsg(string(this.module.GetType()), "latticegrid", &pb.UiGameLatticeGridResp{
Data: list, Data: list,
Atno: atno, Atno: atno,

View File

@ -34,8 +34,19 @@ func (this *apiComp) LatticeReward(session comm.IUserSession, req *pb.UiGameLatt
} }
return return
} else { } else {
if len(conf.Openward) == 0 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
return
}
list, _ := this.module.modelLattice.getLatticeList(session.GetUserId(), req.Hdid) list, _ := this.module.modelLattice.getLatticeList(session.GetUserId(), req.Hdid)
if _, ok := list.Gotarr[req.Id]; ok { if _, ok := list.Gotarr[req.Id]; ok {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ActivityRepatReward,
Title: pb.ErrorCode_ActivityRepatReward.ToString(),
}
return return
} }

View File

@ -1,6 +1,7 @@
package uigame package uigame
import ( import (
"fmt"
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules" "go_dreamfactory/modules"
@ -98,6 +99,7 @@ func (this *configureComp) GetLatticeConsumConf() (conf *cfg.GameUiGameConsumDat
this.module.Errorf("GetLatticeConsumConf conf not found key :puzzle") this.module.Errorf("GetLatticeConsumConf conf not found key :puzzle")
return return
} }
func (this *configureComp) GetLatticeConf(id int32) (conf *cfg.GameUiGameLatticeData, err error) { func (this *configureComp) GetLatticeConf(id int32) (conf *cfg.GameUiGameLatticeData, err error) {
var ( var (
v interface{} v interface{}
@ -109,6 +111,7 @@ func (this *configureComp) GetLatticeConf(id int32) (conf *cfg.GameUiGameLattice
} }
} }
} }
err = fmt.Errorf("GetLatticeConf conf not found key :%d", id)
this.module.Errorf("GetLatticeConf conf not found key :%d", id) this.module.Errorf("GetLatticeConf conf not found key :%d", id)
return return
} }

View File

@ -39,11 +39,11 @@ func (this *modelLattice) getLatticeList(uid string, hid string) (result *pb.DBL
Gotarr: map[int32]int32{}, Gotarr: map[int32]int32{},
Lattice: map[int32]*pb.LatticeData{}, Lattice: map[int32]*pb.LatticeData{},
Lasttime: 0, Lasttime: 0,
Val: 1, //默认1层 Floor: 1, //默认1层
Total: 1, Total: 1,
} }
err = nil err = nil
this.module.modelPuzzle.Add(uid, result) this.module.modelLattice.Add(uid, result)
} }
return return
} }

View File

@ -175,9 +175,10 @@ type DBLatticeData struct {
Gotarr map[int32]int32 `protobuf:"bytes,4,rep,name=gotarr,proto3" json:"gotarr" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 奖励领取状态 Gotarr map[int32]int32 `protobuf:"bytes,4,rep,name=gotarr,proto3" json:"gotarr" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 奖励领取状态
Lattice map[int32]*LatticeData `protobuf:"bytes,5,rep,name=lattice,proto3" json:"lattice" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // 迷宫数据 Lattice map[int32]*LatticeData `protobuf:"bytes,5,rep,name=lattice,proto3" json:"lattice" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // 迷宫数据
Lasttime int64 `protobuf:"varint,6,opt,name=lasttime,proto3" json:"lasttime"` Lasttime int64 `protobuf:"varint,6,opt,name=lasttime,proto3" json:"lasttime"`
Val int32 `protobuf:"varint,7,opt,name=val,proto3" json:"val"` // 当前第几层 Val int32 `protobuf:"varint,7,opt,name=val,proto3" json:"val"` // 今天获得N个碎片
Total int32 `protobuf:"varint,8,opt,name=total,proto3" json:"total"` // 总的层数 Total int32 `protobuf:"varint,8,opt,name=total,proto3" json:"total"` // 总的层数
BReward bool `protobuf:"varint,9,opt,name=bReward,proto3" json:"bReward"` // 总奖励 BReward bool `protobuf:"varint,9,opt,name=bReward,proto3" json:"bReward"` // 总奖励
Floor int32 `protobuf:"varint,10,opt,name=floor,proto3" json:"floor"` // 当前第几层
} }
func (x *DBLatticeData) Reset() { func (x *DBLatticeData) Reset() {
@ -275,6 +276,13 @@ func (x *DBLatticeData) GetBReward() bool {
return false return false
} }
func (x *DBLatticeData) GetFloor() int32 {
if x != nil {
return x.Floor
}
return 0
}
// 矿工 // 矿工
type DBMinerData struct { type DBMinerData struct {
state protoimpl.MessageState state protoimpl.MessageState
@ -404,7 +412,7 @@ var file_uigame_uigame_db_proto_rawDesc = []byte{
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
0x95, 0x03, 0x0a, 0x0d, 0x44, 0x42, 0x4c, 0x61, 0x74, 0x74, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0xab, 0x03, 0x0a, 0x0d, 0x44, 0x42, 0x4c, 0x61, 0x74, 0x74, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74,
0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x64, 0x6f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x64, 0x6f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01,
@ -421,32 +429,33 @@ var file_uigame_uigame_db_proto_rawDesc = []byte{
0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28,
0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x52, 0x65, 0x77, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x52, 0x65, 0x77,
0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x62, 0x52, 0x65, 0x77, 0x61, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x62, 0x52, 0x65, 0x77, 0x61,
0x72, 0x64, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x6f, 0x74, 0x61, 0x72, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x05, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x6f, 0x74, 0x61,
0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x72, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
0x0c, 0x4c, 0x61, 0x74, 0x74, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x74, 0x69, 0x63, 0x65, 0x45, 0x6e,
0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
0x2e, 0x4c, 0x61, 0x74, 0x74, 0x69, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfa, 0x01, 0x0a, 0x0b, 0x44, 0x42, 0x4d, 0x69, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4c, 0x61, 0x74, 0x74, 0x69, 0x63, 0x65, 0x44, 0x61,
0x6e, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfa, 0x01,
0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x0a, 0x0b, 0x44, 0x42, 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x64, 0x6f, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a,
0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x68, 0x64, 0x6f, 0x69, 0x64, 0x12, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12,
0x30, 0x0a, 0x06, 0x67, 0x6f, 0x74, 0x61, 0x72, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x0a, 0x05, 0x68, 0x64, 0x6f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x18, 0x2e, 0x44, 0x42, 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x6f, 0x68, 0x64, 0x6f, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x67, 0x6f, 0x74, 0x61, 0x72, 0x72, 0x18,
0x74, 0x61, 0x72, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x67, 0x6f, 0x74, 0x61, 0x72, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x42, 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x44,
0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x61, 0x74, 0x61, 0x2e, 0x47, 0x6f, 0x74, 0x61, 0x72, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x06, 0x67, 0x6f, 0x74, 0x61, 0x72, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x74,
0x03, 0x76, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x74,
0x18, 0x0a, 0x07, 0x62, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05,
0x52, 0x07, 0x62, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x6f, 0x74, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64,
0x61, 0x72, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x62, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x39, 0x0a, 0x0b, 0x47, 0x6f, 0x74, 0x61, 0x72, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
0x6f, 0x74, 0x6f, 0x33, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b,
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (