diff --git a/modules/entertainment/room.go b/modules/entertainment/room.go index d25962c9c..4b67bbd88 100644 --- a/modules/entertainment/room.go +++ b/modules/entertainment/room.go @@ -566,7 +566,7 @@ func (this *Room) GameOver(winner *pb.PlayerData) (errdata *pb.ErrorData) { } } if lostPlayer.Userinfo.Uid != "999" { - if conf, err := this.module.configure.GetGameConsumeHero(lostPlayer.Cardid); err != nil { + if conf, err := this.module.configure.GetGameConsumeHero(lostPlayer.Cardid); err == nil { update := map[string]interface{}{} if list, err := this.module.model.getEntertainmList(lostPlayer.Userinfo.Uid); err == nil { if list.Liansheng != 0 { @@ -583,7 +583,7 @@ func (this *Room) GameOver(winner *pb.PlayerData) (errdata *pb.ErrorData) { break } } - if c, err := this.module.configure.GetGameConsumeHero(lostPlayer.Cardid); err != nil { + if c, err := this.module.configure.GetGameConsumeHero(lostPlayer.Cardid); err == nil { if len(c.Lost) == 0 { // 容错处理 bDestruction = false } else { diff --git a/modules/hero/model_hero.go b/modules/hero/model_hero.go index 69a04f764..b1bf29f86 100644 --- a/modules/hero/model_hero.go +++ b/modules/hero/model_hero.go @@ -693,13 +693,6 @@ func (this *ModelHero) setTalentProperty(hero *pb.DBHero, conf *cfg.GameHeroTale hero.TalentProperty[conf.Attr.A] += conf.Attr.N _heroMap := make(map[string]interface{}, 0) - if conf.Skill != 0 { - hero.NormalSkill = append(hero.NormalSkill, &pb.SkillData{ - SkillID: conf.Skill, - SkillLv: 1, - }) - _heroMap["normalSkill"] = hero.NormalSkill - } _heroMap["talentProperty"] = hero.TalentProperty if err := this.ChangeList(hero.Uid, hero.Id, _heroMap); err != nil { diff --git a/modules/plunder/api_challengeover.go b/modules/plunder/api_challengeover.go index 96cc99340..1bf88e71e 100644 --- a/modules/plunder/api_challengeover.go +++ b/modules/plunder/api_challengeover.go @@ -3,6 +3,7 @@ package plunder import ( "fmt" "go_dreamfactory/comm" + "go_dreamfactory/lego/sys/redis" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" @@ -41,6 +42,7 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PlunderCha newShip map[string]*pb.ShipData heros []*pb.DBHero hids []string + lock *redis.RedisMutex ) update = make(map[string]interface{}) changExp = make(map[string]int32, 0) @@ -94,6 +96,13 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PlunderCha } return } + if list.Line[req.Pos].Oid != "" { // 运输中 + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_PlundeShipRunning, + Title: pb.ErrorCode_PlundeShipRunning.ToString(), + } + return + } // 校验通过 errdata, isWin = this.module.battle.CheckBattleReport(session, req.Report) if errdata != nil { @@ -107,6 +116,15 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PlunderCha } return } + if lock, err = this.module.modelLand.landMutexLock(list.Landid); err != nil { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_DBError, + Title: pb.ErrorCode_DBError.ToString(), + Message: err.Error(), + } + return + } + defer lock.Unlock() if land, err = this.module.modelLand.getPlunderLandData(list.Landid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, diff --git a/modules/plunder/api_getlist.go b/modules/plunder/api_getlist.go index 1a475f4f7..48d563e62 100644 --- a/modules/plunder/api_getlist.go +++ b/modules/plunder/api_getlist.go @@ -46,6 +46,13 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.PlunderGetListRe return } } + if len(list.Source) == 0 { + list.Source, err = this.module.modelPlunder.refreshGoodsInfo() + list.Setout = []int32{} + this.module.modelPlunder.changePlunderData(session.GetUserId(), map[string]interface{}{ + "source": list.Source, + }) + } session.SendMsg(string(this.module.GetType()), "getlist", &pb.PlunderGetListResp{ List: list, Land: land, diff --git a/modules/plunder/api_pvpchallenge.go b/modules/plunder/api_pvpchallenge.go index f4f34c841..9a99c6f62 100644 --- a/modules/plunder/api_pvpchallenge.go +++ b/modules/plunder/api_pvpchallenge.go @@ -98,8 +98,19 @@ func (this *apiComp) PvpChallenge(session comm.IUserSession, req *pb.PlunderPvpC } return } + if land.Ship[req.Oid].Status == 2 { + if land.Ship[req.Oid].Cd >= configure.Now().Unix() { // cd + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_PlundeShipCDIng, + Title: pb.ErrorCode_PlundeShipCDIng.ToString(), + Message: fmt.Sprintf("ErrorCode_PlundeShipCDIng :%d", land.Ship[req.Oid].Cd), + } + return + } + land.Ship[req.Oid].Status = 0 + } // 状态校验 状态 0 运输 1 正在被攻击 2 战败cd中 3 掠夺成功 - if land.Ship[req.Oid].Status == 0 { // return + if land.Ship[req.Oid].Status != 0 { // return errdata = &pb.ErrorData{ Code: pb.ErrorCode_PlunderNotFoundShip, Title: pb.ErrorCode_PlunderNotFoundShip.ToString(), @@ -107,14 +118,7 @@ func (this *apiComp) PvpChallenge(session comm.IUserSession, req *pb.PlunderPvpC } return } - if land.Ship[req.Oid].Status == 2 && land.Ship[req.Oid].Cd >= configure.Now().Unix() { // cd - errdata = &pb.ErrorData{ - Code: pb.ErrorCode_PlundeShipCDIng, - Title: pb.ErrorCode_PlundeShipCDIng.ToString(), - Message: fmt.Sprintf("ErrorCode_PlundeShipCDIng :%d", land.Ship[req.Oid].Cd), - } - return - } + if heros, err = this.module.modelPlunder.queryUserHeros(session.GetUserId(), req.Battle.Format); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, diff --git a/modules/plunder/api_reach.go b/modules/plunder/api_reach.go index 759667259..8e3c96ff1 100644 --- a/modules/plunder/api_reach.go +++ b/modules/plunder/api_reach.go @@ -2,6 +2,7 @@ package plunder import ( "go_dreamfactory/comm" + "go_dreamfactory/lego/sys/redis" "go_dreamfactory/pb" ) @@ -23,6 +24,7 @@ func (this *apiComp) Reach(session comm.IUserSession, req *pb.PlunderReachReq) ( list *pb.DBPlunder land *pb.DBPlunderLand // 岛屿数据 //changeShip map[string]*pb.ShipData // 变化的信息 + lock *redis.RedisMutex ) //changeShip = make(map[string]*pb.ShipData, 0) if errdata = this.ReachCheck(session, req); errdata != nil { @@ -36,6 +38,15 @@ func (this *apiComp) Reach(session comm.IUserSession, req *pb.PlunderReachReq) ( } return } + if lock, err = this.module.modelLand.landMutexLock(list.Landid); err != nil { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_DBError, + Title: pb.ErrorCode_DBError.ToString(), + Message: err.Error(), + } + return + } + defer lock.Unlock() if land, err = this.module.modelLand.getPlunderLandData(list.Landid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, diff --git a/modules/plunder/model_land.go b/modules/plunder/model_land.go index faa687369..99fc70fc9 100644 --- a/modules/plunder/model_land.go +++ b/modules/plunder/model_land.go @@ -70,6 +70,7 @@ func (this *modelLand) createPlunderLandData(uid string) (land *pb.DBPlunderLand limtSocre = 0 } uids = append(uids, uid) // 优先加入自己 + uInfos = append(uInfos, comm.GetUserBaseInfo(user)) cur, err := this.DB.Find(core.SqlTable(comm.TableUser), bson.M{"gold": bson.M{"$gte": limtSocre}, "name": bson.M{"$ne": ""}}, options.Find().SetSkip(int64(0)).SetLimit(int64(30))) for cur.Next(context.TODO()) { tmp := &pb.DBUser{} diff --git a/modules/plunder/model_plunder.go b/modules/plunder/model_plunder.go index baa5c5e2b..e30225c0a 100644 --- a/modules/plunder/model_plunder.go +++ b/modules/plunder/model_plunder.go @@ -123,18 +123,31 @@ func (this *modelPlunder) queryUserHeros(uid string, heroids []string) (results } return } + func (this *modelPlunder) queryPlunderInfos(uids []string, landid string) (data []*pb.DBPlunder, err error) { - results := make([]*pb.DBPlunder, 0) var ( + mp map[string]struct{} // 没找到的数据 + results []*pb.DBPlunder onfound []string newdata map[string]interface{} = make(map[string]interface{}) + unfound []string ) + results = make([]*pb.DBPlunder, 0) + mp = make(map[string]struct{}) + if onfound, err = this.Gets(uids, &results); err != nil { this.module.Errorln(err) return } - for _, v := range onfound { + mp[v] = struct{}{} + } + for _, v := range uids { + if _, ok := mp[v]; !ok { + unfound = append(unfound, v) + } + } + for _, v := range unfound { temp := &pb.DBPlunder{ Id: primitive.NewObjectID().Hex(), Uid: v, diff --git a/pb/chat_db.pb.go b/pb/chat_db.pb.go index 5bd5b60ea..491fc39d9 100644 --- a/pb/chat_db.pb.go +++ b/pb/chat_db.pb.go @@ -23,7 +23,7 @@ const ( type ChatChannel int32 const ( - ChatChannel_World ChatChannel = 0 //世界频道 + ChatChannel_World ChatChannel = 0 //服聊天 ChatChannel_Union ChatChannel = 1 //工会频道 ChatChannel_Private ChatChannel = 2 //私有频道 ChatChannel_Area ChatChannel = 3 //区聊天 diff --git a/pb/errorcode.pb.go b/pb/errorcode.pb.go index f266965f1..8e714660c 100644 --- a/pb/errorcode.pb.go +++ b/pb/errorcode.pb.go @@ -478,6 +478,7 @@ const ( ErrorCode_PlundeShipReach ErrorCode = 5404 //船已经达到不能被掠夺 ErrorCode_PlundeNormalShip ErrorCode = 5405 //普通船不能被掠夺 ErrorCode_PlundeShipCDIng ErrorCode = 5406 //掠夺cd中 + ErrorCode_PlundeShipRunning ErrorCode = 5407 //运输中 ) // Enum value maps for ErrorCode. @@ -891,6 +892,7 @@ var ( 5404: "PlundeShipReach", 5405: "PlundeNormalShip", 5406: "PlundeShipCDIng", + 5407: "PlundeShipRunning", } ErrorCode_value = map[string]int32{ "Success": 0, @@ -1301,6 +1303,7 @@ var ( "PlundeShipReach": 5404, "PlundeNormalShip": 5405, "PlundeShipCDIng": 5406, + "PlundeShipRunning": 5407, } ) @@ -1335,7 +1338,7 @@ var File_errorcode_proto protoreflect.FileDescriptor var file_errorcode_proto_rawDesc = []byte{ 0x0a, 0x0f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2a, 0x89, 0x4c, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x6f, 0x2a, 0xa1, 0x4c, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, @@ -1943,8 +1946,10 @@ var file_errorcode_proto_rawDesc = []byte{ 0x75, 0x6e, 0x64, 0x65, 0x53, 0x68, 0x69, 0x70, 0x52, 0x65, 0x61, 0x63, 0x68, 0x10, 0x9c, 0x2a, 0x12, 0x15, 0x0a, 0x10, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x53, 0x68, 0x69, 0x70, 0x10, 0x9d, 0x2a, 0x12, 0x14, 0x0a, 0x0f, 0x50, 0x6c, 0x75, 0x6e, 0x64, - 0x65, 0x53, 0x68, 0x69, 0x70, 0x43, 0x44, 0x49, 0x6e, 0x67, 0x10, 0x9e, 0x2a, 0x42, 0x06, 0x5a, - 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x53, 0x68, 0x69, 0x70, 0x43, 0x44, 0x49, 0x6e, 0x67, 0x10, 0x9e, 0x2a, 0x12, 0x16, 0x0a, + 0x11, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x53, 0x68, 0x69, 0x70, 0x52, 0x75, 0x6e, 0x6e, 0x69, + 0x6e, 0x67, 0x10, 0x9f, 0x2a, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pb/plunder_db.pb.go b/pb/plunder_db.pb.go index 580d722a0..c6ba5bfcc 100644 --- a/pb/plunder_db.pb.go +++ b/pb/plunder_db.pb.go @@ -36,6 +36,7 @@ type DBPlunder struct { Refresh int32 `protobuf:"varint,8,opt,name=refresh,proto3" json:"refresh"` // 刷新次数 Ctime int64 `protobuf:"varint,9,opt,name=ctime,proto3" json:"ctime"` // 刷新时间 客户端不用 Score int32 `protobuf:"varint,10,opt,name=score,proto3" json:"score"` // 当前赛季积分 + Etime int64 `protobuf:"varint,11,opt,name=etime,proto3" json:"etime"` // 结束时间 } func (x *DBPlunder) Reset() { @@ -140,6 +141,13 @@ func (x *DBPlunder) GetScore() int32 { return 0 } +func (x *DBPlunder) GetEtime() int64 { + if x != nil { + return x.Etime + } + return 0 +} + type TransportLine struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -435,7 +443,7 @@ var file_plunder_plunder_db_proto_rawDesc = []byte{ 0x72, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x2f, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xf5, 0x01, 0x0a, 0x09, 0x44, 0x42, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, + 0x74, 0x6f, 0x22, 0x8b, 0x02, 0x0a, 0x09, 0x44, 0x42, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 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, 0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, @@ -450,47 +458,49 @@ var file_plunder_plunder_db_proto_rawDesc = []byte{ 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3f, 0x0a, 0x0d, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x5d, 0x0a, 0x0b, 0x50, - 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x69, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x08, 0x53, - 0x68, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x04, 0x6c, 0x69, 0x6e, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x02, 0x63, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x64, - 0x65, 0x66, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x44, 0x42, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, - 0x74, 0x52, 0x06, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x64, 0x22, 0xa1, 0x02, 0x0a, 0x0d, 0x44, 0x42, - 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x61, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x75, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x44, 0x42, 0x50, - 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x61, 0x6e, 0x64, 0x2e, 0x55, 0x69, 0x6e, 0x66, 0x6f, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x75, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x04, - 0x73, 0x68, 0x69, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x42, 0x50, - 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x61, 0x6e, 0x64, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x73, 0x68, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, - 0x1a, 0x47, 0x0a, 0x0a, 0x55, 0x69, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x09, 0x53, 0x68, 0x69, - 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x44, 0x61, - 0x74, 0x61, 0x52, 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, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, + 0x22, 0x3f, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x6e, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6f, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x74, 0x69, 0x6d, + 0x65, 0x22, 0x5d, 0x0a, 0x0b, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x69, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, + 0x22, 0xac, 0x01, 0x0a, 0x08, 0x53, 0x68, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, + 0x20, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x6c, 0x69, 0x6e, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x63, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x44, 0x42, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x61, 0x74, 0x74, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x74, 0x52, 0x06, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x64, 0x22, + 0xa1, 0x02, 0x0a, 0x0d, 0x44, 0x42, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x61, 0x6e, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x75, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x44, 0x42, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x61, 0x6e, 0x64, + 0x2e, 0x55, 0x69, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x75, 0x69, 0x6e, + 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x04, 0x73, 0x68, 0x69, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x44, 0x42, 0x50, 0x6c, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x4c, 0x61, 0x6e, 0x64, + 0x2e, 0x53, 0x68, 0x69, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x73, 0x68, 0x69, 0x70, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x47, 0x0a, 0x0a, 0x55, 0x69, 0x6e, 0x66, 0x6f, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x42, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, + 0x53, 0x68, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x52, 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 (