From 0891851f61740f7bc18118d6f5e16a98b9228a71 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 8 Sep 2022 17:25:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=88=98=E6=96=97=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/battle/configure.go | 19 +++ .../fight/attribute/attributenumeric.go | 46 +++++- .../battle/fight/attribute/fixednumeric.go | 20 +++ modules/battle/fight/attribute/fixedpoint.go | 42 ++++- modules/battle/fight/fightai.go | 4 + modules/battle/fight/fightbase.go | 66 ++++++++ modules/battle/fight/fightevent.go | 17 ++ modules/battle/fight/fightlog.go | 14 ++ modules/battle/fight/fightrole.go | 3 + modules/battle/modelBattle.go | 32 ++++ pb/battle_db.pb.go | 147 ++++++++++-------- 11 files changed, 343 insertions(+), 67 deletions(-) create mode 100644 modules/battle/fight/attribute/fixednumeric.go create mode 100644 modules/battle/fight/fightai.go create mode 100644 modules/battle/fight/fightevent.go create mode 100644 modules/battle/fight/fightlog.go diff --git a/modules/battle/configure.go b/modules/battle/configure.go index 711cbfdf3..3536f9cbc 100644 --- a/modules/battle/configure.go +++ b/modules/battle/configure.go @@ -8,6 +8,7 @@ import ( ) const ( + game_equipsuit = "game_equipsuit.json" //套装技能表 game_monsterformat = "game_monsterformat.json" //整容表 game_monster = "game_monster.json" //怪物表 ) @@ -22,6 +23,7 @@ type configureComp struct { func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.MCompConfigure.Init(service, module, comp, options) this.module = module.(*Battle) + this.LoadConfigure(game_equipsuit, cfg.NewGameEquipSuit) this.LoadConfigure(game_monster, cfg.NewGameMonster) this.LoadConfigure(game_monsterformat, cfg.NewGameMonsterFormat) return @@ -60,3 +62,20 @@ func (this *configureComp) GetMonster(id int32) (result *cfg.GameMonsterData, er } return } + +//查询装备套装表 +func (this *configureComp) Getequipsuit(id int32) (result *cfg.GameEquipSuitData, err error) { + var ( + v interface{} + ok bool + ) + if v, err = this.GetConfigure(game_monster); err != nil { + this.module.Errorln(err) + } else { + if result, ok = v.(*cfg.GameEquipSuit).GetDataMap()[id]; !ok { + err = fmt.Errorf("on found Getequipsuit:%d", id) + this.module.Errorln(err) + } + } + return +} diff --git a/modules/battle/fight/attribute/attributenumeric.go b/modules/battle/fight/attribute/attributenumeric.go index 5d6b66e71..71bd1012b 100644 --- a/modules/battle/fight/attribute/attributenumeric.go +++ b/modules/battle/fight/attribute/attributenumeric.go @@ -1,4 +1,48 @@ package attribute -type AttributeNumeric struct { +func NewAttributeNumeric(pData float32) *AttributeNumeric { + attribute := &AttributeNumeric{ + BaseValue: NewFixedNumeric(pData), + ProValue: NewFixedNumeric(pData), + AppendValue: NewFixedNumeric(pData), + BuffProValue: NewFixedNumeric(pData), + BuffValue: NewFixedNumeric(pData), + } + + attribute.SetBase(pData) + return attribute +} + +type AttributeNumeric struct { + fixedValue *FixedPoint + /// + /// 基础数值 + /// + BaseValue *FixedNumeric + /// + /// 附加数值 + /// + AppendValue *FixedNumeric + /// + /// 附加百分比数值 + /// + ProValue *FixedNumeric + /// + /// Buff附加数值 + /// + BuffValue *FixedNumeric + /// + /// Buff附加百分比数值 + /// + BuffProValue *FixedNumeric +} + +func (this *AttributeNumeric) SetBase(value float32) float32 { + this.BaseValue.Set(value) + this.onChange() + return this.BaseValue.Value() +} + +func (this *AttributeNumeric) onChange() { + // this.FixedValue = (BaseValue.Fixed*(1+ProValue.Fixed)+AppendValue.Fixed)*(1+BuffProValue.Fixed) + BuffValue.Fixed } diff --git a/modules/battle/fight/attribute/fixednumeric.go b/modules/battle/fight/attribute/fixednumeric.go new file mode 100644 index 000000000..2b1444ba9 --- /dev/null +++ b/modules/battle/fight/attribute/fixednumeric.go @@ -0,0 +1,20 @@ +package attribute + +func NewFixedNumeric(pData float32) *FixedNumeric { + fixed := &FixedNumeric{} + fixed.Set(pData) + return fixed +} + +type FixedNumeric struct { + baseValue *FixedPoint +} + +func (this *FixedNumeric) Set(value float32) float32 { + this.baseValue = NewFixedPoint(value) + return this.baseValue.Scalar() +} + +func (this *FixedNumeric) Value() float32 { + return this.baseValue.Scalar() +} diff --git a/modules/battle/fight/attribute/fixedpoint.go b/modules/battle/fight/attribute/fixedpoint.go index 0fc766fbd..ffbd3a283 100644 --- a/modules/battle/fight/attribute/fixedpoint.go +++ b/modules/battle/fight/attribute/fixedpoint.go @@ -1,6 +1,7 @@ package attribute import ( + "fmt" "math" ) @@ -15,10 +16,45 @@ func NewFixedPoint(value float32) *FixedPoint { type FixedPoint struct { rawValue int - - scalar float32 } func (this *FixedPoint) Scalar() float32 { - return this.scalar * 0.0001 + return float32(this.rawValue) * 0.0001 } + +func (this *FixedPoint) ToInt() int { + return this.rawValue / CARDINAL_NUMBER +} +func (this *FixedPoint) ToFloat() float32 { + return this.Scalar() +} +func (this *FixedPoint) ToString() string { + return fmt.Sprintf("%f", this.Scalar()) +} + +///+ +func (this *FixedPoint) Add(y *FixedPoint) *FixedPoint { + this.rawValue += y.rawValue + return this +} + +///- +func (this *FixedPoint) Reduce(y *FixedPoint) *FixedPoint { + this.rawValue -= y.rawValue + return this +} + +///* +func (this *FixedPoint) Multiply(y *FixedPoint) *FixedPoint { + this.rawValue = (this.rawValue * y.rawValue) / CARDINAL_NUMBER + return this +} + +/// / +func (this *FixedPoint) Divide(y *FixedPoint) *FixedPoint { + this.rawValue = (this.rawValue * CARDINAL_NUMBER) / y.rawValue + return this +} + + + diff --git a/modules/battle/fight/fightai.go b/modules/battle/fight/fightai.go new file mode 100644 index 000000000..706359747 --- /dev/null +++ b/modules/battle/fight/fightai.go @@ -0,0 +1,4 @@ +package fight + +type FightAI struct { +} diff --git a/modules/battle/fight/fightbase.go b/modules/battle/fight/fightbase.go index 609b9cae2..1305c8470 100644 --- a/modules/battle/fight/fightbase.go +++ b/modules/battle/fight/fightbase.go @@ -1,5 +1,9 @@ package fight +func NewFightBase() *FightBase { + return &FightBase{} +} + /// /// 每场战斗需要new一个类,因为客户端有同时进行多场战斗的需求,所以这里不能是单例 /// @@ -12,4 +16,66 @@ type FightBase struct { /// 战斗是否进行中 /// fightIng bool + /// + /// 所有参战角色集合 + /// + Roles []*FightRole + /// + /// 当前回合满足行动值大于等于100的所有角色 + /// + CanAtkRoles []*FightRole + /// + /// 最后一次攻击的角色 + /// + LastActionRole FightRole + /// + /// 是否自动战斗 + /// + AutoFight bool + /// + /// 战斗AI + /// + FightAI FightAI + /// + /// 随机数种子 + /// + RandSeed int64 + /// + /// 事件系统 + /// + FightEvent IFightEvent + /// + /// 战报 + /// + FightLog FightLog + + /// + /// 是否可进入下个循环 + /// + /// + /// 客户端专用逻辑 + /// + ToNextRound bool +} + +/// +/// 开始战斗 +/// +func (this *FightBase) StartFight() { + this.fightIng = true + + // FightDebug.Log("=========开始战斗=========") + + //记录战报 + // var com = new(ComStartFight) + // FightLog.AddCommand(com) + //不直接用enum,防止装箱拆箱 + this.FightEvent.Emit(int(EventType_OnFightStart)) + + // BeforeStart() + // EmitCaptainSkill() + // EmitPassiveSkillSkill() + // //todo...符文技?? + // InitRoleOperateValue() + // TurnRound() } diff --git a/modules/battle/fight/fightevent.go b/modules/battle/fight/fightevent.go new file mode 100644 index 000000000..6d932bfa1 --- /dev/null +++ b/modules/battle/fight/fightevent.go @@ -0,0 +1,17 @@ +package fight + +type IFightEvent interface { + Emit(eventNumber int, args ...interface{}) +} + +type FightEvent struct { +} + +/// +/// 发送消息 +/// +/// +/// +func (this *FightEvent) Emit(eventNumber int, args ...interface{}) { + +} diff --git a/modules/battle/fight/fightlog.go b/modules/battle/fight/fightlog.go new file mode 100644 index 000000000..2d0338deb --- /dev/null +++ b/modules/battle/fight/fightlog.go @@ -0,0 +1,14 @@ +package fight + +type FightLog struct { + Commands []interface{} +} + +/// +/// 增加战报日志 +/// +/// +func (this *FightLog) AddCommand(log interface{}) { + //FightDebug.Log($"战报:{log.ToString()}"); + // this.Commands = app +} diff --git a/modules/battle/fight/fightrole.go b/modules/battle/fight/fightrole.go index 5791dc25f..309dcf949 100644 --- a/modules/battle/fight/fightrole.go +++ b/modules/battle/fight/fightrole.go @@ -1,4 +1,7 @@ package fight +import "go_dreamfactory/modules/battle/fight/component" + type FightRole struct { + Data component.FightRoleData } diff --git a/modules/battle/modelBattle.go b/modules/battle/modelBattle.go index f18d9fe76..c71efcb11 100644 --- a/modules/battle/modelBattle.go +++ b/modules/battle/modelBattle.go @@ -91,6 +91,22 @@ func (this *modelBattleComp) createpve(session comm.IUserSession, conn *db.DBCon for k, v := range hero.JuexProperty { record.Redflist[0].Team[i].Property[k] += v } + if hero.SuiteId != 0 { //主套装 + if suit, err := this.module.configure.Getequipsuit(hero.SuiteId); err != nil { + code = pb.ErrorCode_ConfigNoFound + return + } else { + record.Redflist[0].Team[i].MainSuitSkill = suit.Skill + } + } + if hero.SuiteExtId != 0 { //副套装 + if suit, err := this.module.configure.Getequipsuit(hero.SuiteExtId); err != nil { + code = pb.ErrorCode_ConfigNoFound + return + } else { + record.Redflist[0].Team[i].SubSuitSkill = suit.Skill + } + } } else { record.Redflist[0].Team[i] = nil } @@ -129,6 +145,22 @@ func (this *modelBattleComp) createpve(session comm.IUserSession, conn *db.DBCon NormalSkill: hero.NormalSkill, Property: hero.Property, } + if monst.Equip4 != 0 { + if suit, err := this.module.configure.Getequipsuit(monst.Equip4); err != nil { + code = pb.ErrorCode_ConfigNoFound + return + } else { + record.Buleflist[i].Team[i1].MainSuitSkill = suit.Skill + } + } + if monst.Equip2 != 0 { + if suit, err := this.module.configure.Getequipsuit(monst.Equip2); err != nil { + code = pb.ErrorCode_ConfigNoFound + return + } else { + record.Buleflist[i].Team[i1].SubSuitSkill = suit.Skill + } + } record.Buleflist[i].Team[i1].Property[comm.Hp] = int32(float32(record.Buleflist[i].Team[i1].Property[comm.Hp]) * mf.Hppro) record.Buleflist[i].Team[i1].Property[comm.Atk] = int32(float32(record.Buleflist[i].Team[i1].Property[comm.Atk]) * mf.Atkpro) record.Buleflist[i].Team[i1].Property[comm.Def] = int32(float32(record.Buleflist[i].Team[i1].Property[comm.Def]) * mf.Defpro) diff --git a/pb/battle_db.pb.go b/pb/battle_db.pb.go index 5ba4ffdbf..de2e3eae9 100644 --- a/pb/battle_db.pb.go +++ b/pb/battle_db.pb.go @@ -224,15 +224,17 @@ type BattleRole struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Tid int32 `protobuf:"varint,1,opt,name=tid,proto3" json:"tid"` // 临时id - Oid string `protobuf:"bytes,2,opt,name=oid,proto3" json:"oid"` // 玩家英雄数据库id - Pos int32 `protobuf:"varint,3,opt,name=pos,proto3" json:"pos"` // 站位坐标 - HeroID string `protobuf:"bytes,4,opt,name=heroID,proto3" json:"heroID"` // 英雄的配置表ID - Star int32 `protobuf:"varint,5,opt,name=star,proto3" json:"star"` // 英雄星级 - Lv int32 `protobuf:"varint,6,opt,name=lv,proto3" json:"lv"` // 英雄等级 - CaptainSkill int32 `protobuf:"varint,7,opt,name=captainSkill,proto3" json:"captainSkill" bson:"captainSkill"` //队长技能 - NormalSkill []*SkillData `protobuf:"bytes,8,rep,name=normalSkill,proto3" json:"normalSkill" bson:"normalSkill"` //普通技能 - Property map[string]int32 `protobuf:"bytes,9,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 属性相关 + Tid int32 `protobuf:"varint,1,opt,name=tid,proto3" json:"tid"` // 临时id + Oid string `protobuf:"bytes,2,opt,name=oid,proto3" json:"oid"` // 玩家英雄数据库id + Pos int32 `protobuf:"varint,3,opt,name=pos,proto3" json:"pos"` // 站位坐标 + HeroID string `protobuf:"bytes,4,opt,name=heroID,proto3" json:"heroID" bson:"heroID"` //英雄的配置表ID + Star int32 `protobuf:"varint,5,opt,name=star,proto3" json:"star"` // 英雄星级 + Lv int32 `protobuf:"varint,6,opt,name=lv,proto3" json:"lv"` // 英雄等级 + CaptainSkill int32 `protobuf:"varint,7,opt,name=captainSkill,proto3" json:"captainSkill" bson:"captainSkill"` //队长技能 + MainSuitSkill int32 `protobuf:"varint,8,opt,name=mainSuitSkill,proto3" json:"mainSuitSkill" bson:"mainSuitSkill"` /// 主套装技能 + SubSuitSkill int32 `protobuf:"varint,9,opt,name=subSuitSkill,proto3" json:"subSuitSkill" bson:"subSuitSkill"` /// 副套装技能 + NormalSkill []*SkillData `protobuf:"bytes,10,rep,name=normalSkill,proto3" json:"normalSkill" bson:"normalSkill"` //普通技能 + Property map[string]int32 `protobuf:"bytes,11,rep,name=property,proto3" json:"property" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 属性相关 } func (x *BattleRole) Reset() { @@ -316,6 +318,20 @@ func (x *BattleRole) GetCaptainSkill() int32 { return 0 } +func (x *BattleRole) GetMainSuitSkill() int32 { + if x != nil { + return x.MainSuitSkill + } + return 0 +} + +func (x *BattleRole) GetSubSuitSkill() int32 { + if x != nil { + return x.SubSuitSkill + } + return 0 +} + func (x *BattleRole) GetNormalSkill() []*SkillData { if x != nil { return x.NormalSkill @@ -519,7 +535,7 @@ var File_battle_battle_db_proto protoreflect.FileDescriptor var file_battle_battle_db_proto_rawDesc = []byte{ 0x0a, 0x16, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x2f, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x68, 0x65, 0x72, 0x6f, 0x2f, 0x68, - 0x65, 0x72, 0x6f, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc4, 0x02, 0x0a, + 0x65, 0x72, 0x6f, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8e, 0x03, 0x0a, 0x0a, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x74, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, @@ -530,59 +546,64 @@ var file_battle_battle_db_proto_rawDesc = []byte{ 0x02, 0x6c, 0x76, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x6c, 0x76, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x74, 0x61, 0x69, 0x6e, 0x53, 0x6b, 0x69, 0x6c, - 0x6c, 0x12, 0x2c, 0x0a, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x53, 0x6b, 0x69, 0x6c, 0x6c, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x0b, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x12, - 0x35, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 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, 0x4a, 0x0a, 0x0d, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, - 0x6f, 0x72, 0x6d, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x61, 0x64, 0x70, 0x6f, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6c, 0x65, 0x61, 0x64, 0x70, 0x6f, 0x73, 0x12, 0x1f, - 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x42, - 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, - 0x91, 0x03, 0x0a, 0x0e, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0b, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, - 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x70, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x05, 0x70, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x23, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, - 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x49, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x49, - 0x64, 0x12, 0x2a, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x6f, - 0x72, 0x6d, 0x74, 0x52, 0x08, 0x72, 0x65, 0x64, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x62, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x49, 0x64, 0x12, 0x2c, 0x0a, - 0x09, 0x62, 0x75, 0x6c, 0x65, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x74, - 0x52, 0x09, 0x62, 0x75, 0x6c, 0x65, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0b, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x52, - 0x0b, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x44, - 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2a, 0x30, 0x0a, 0x0a, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x07, 0x0a, 0x03, 0x6e, 0x69, 0x6c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x70, 0x76, - 0x65, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x70, 0x76, 0x70, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, - 0x70, 0x76, 0x62, 0x10, 0x03, 0x2a, 0x35, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x6d, 0x61, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x6f, 0x64, 0x61, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x6d, - 0x6f, 0x6f, 0x6e, 0x66, 0x61, 0x6e, 0x74, 0x61, 0x73, 0x79, 0x10, 0x02, 0x2a, 0x1f, 0x0a, 0x0c, - 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x06, 0x0a, 0x02, - 0x69, 0x6e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x10, 0x02, 0x2a, 0x2b, 0x0a, - 0x0c, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x12, 0x08, 0x0a, - 0x04, 0x64, 0x72, 0x61, 0x77, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x72, 0x65, 0x64, 0x10, 0x01, - 0x12, 0x08, 0x0a, 0x04, 0x62, 0x75, 0x6c, 0x65, 0x10, 0x02, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, - 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x75, 0x69, 0x74, 0x53, 0x6b, 0x69, + 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x75, + 0x69, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x53, 0x75, + 0x69, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, + 0x75, 0x62, 0x53, 0x75, 0x69, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0x2c, 0x0a, 0x0b, 0x6e, + 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0a, 0x2e, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x6e, 0x6f, + 0x72, 0x6d, 0x61, 0x6c, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x42, 0x61, + 0x74, 0x74, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, + 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 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, 0x4a, 0x0a, + 0x0d, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x6c, 0x65, 0x61, 0x64, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x6c, 0x65, 0x61, 0x64, 0x70, 0x6f, 0x73, 0x12, 0x1f, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x22, 0x91, 0x03, 0x0a, 0x0e, 0x44, 0x42, + 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x05, + 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x42, 0x61, + 0x74, 0x74, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x1f, 0x0a, 0x05, 0x70, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, + 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x70, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x70, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x08, 0x72, + 0x65, 0x64, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x74, 0x52, 0x08, 0x72, + 0x65, 0x64, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x6c, 0x75, 0x65, 0x43, + 0x6f, 0x6d, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x6c, 0x75, + 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x62, 0x75, 0x6c, 0x65, 0x66, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x42, + 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x74, 0x52, 0x09, 0x62, 0x75, 0x6c, 0x65, + 0x66, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x42, + 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x44, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, + 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x30, 0x0a, + 0x0a, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x6e, + 0x69, 0x6c, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x70, 0x76, 0x65, 0x10, 0x01, 0x12, 0x07, 0x0a, + 0x03, 0x70, 0x76, 0x70, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x70, 0x76, 0x62, 0x10, 0x03, 0x2a, + 0x35, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x6d, + 0x61, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x70, 0x61, 0x67, + 0x6f, 0x64, 0x61, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x6d, 0x6f, 0x6f, 0x6e, 0x66, 0x61, 0x6e, + 0x74, 0x61, 0x73, 0x79, 0x10, 0x02, 0x2a, 0x1f, 0x0a, 0x0c, 0x42, 0x42, 0x61, 0x74, 0x74, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x06, 0x0a, 0x02, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x07, + 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x10, 0x02, 0x2a, 0x2b, 0x0a, 0x0c, 0x44, 0x42, 0x42, 0x61, 0x74, + 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x12, 0x08, 0x0a, 0x04, 0x64, 0x72, 0x61, 0x77, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x72, 0x65, 0x64, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x62, 0x75, + 0x6c, 0x65, 0x10, 0x02, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var (