diff --git a/comm/core.go b/comm/core.go index f8eeeec93..f135f31e7 100644 --- a/comm/core.go +++ b/comm/core.go @@ -44,6 +44,7 @@ const ( PandaType = "panda" //熊猫武馆资源 MountsType = "mts" //捕羊大赛坐骑资源 TitleType = "title" //称号资源 + XxlType = "xxl" //三消卡片资源 ) type Autogenerated struct { diff --git a/comm/imodule.go b/comm/imodule.go index 22a19c9bf..18debe6f0 100644 --- a/comm/imodule.go +++ b/comm/imodule.go @@ -672,4 +672,8 @@ type ( ICanineRabbit interface { CreateRoom(sessions []IUserSession, rulesStr string) (roomid string, err error) } + IEntertainment interface { + // 添加三消卡片资源 + AddXxlCard(session IUserSession, cards map[string]int32, bPush bool) (errdata *pb.ErrorData) + } ) diff --git a/modules/entertainment/api_match.go b/modules/entertainment/api_match.go index fd31abd3f..774550aa6 100644 --- a/modules/entertainment/api_match.go +++ b/modules/entertainment/api_match.go @@ -31,7 +31,7 @@ func (this *apiComp) Match(session comm.IUserSession, req *pb.EntertainMatchReq) Uid: user.Uid, Sid: user.Sid, Name: user.Name, - Gender: 0, + Gender: user.Gender, Skin: user.CurSkin, Aframe: "", Title: user.Curtitle, diff --git a/modules/entertainment/model.go b/modules/entertainment/model.go index 4f3140e15..fe6102f35 100644 --- a/modules/entertainment/model.go +++ b/modules/entertainment/model.go @@ -6,6 +6,8 @@ import ( "go_dreamfactory/lego/sys/redis" "go_dreamfactory/modules" "go_dreamfactory/pb" + "go_dreamfactory/sys/db" + "go_dreamfactory/utils" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" @@ -29,12 +31,29 @@ func (this *modelComp) Init(service core.IService, module core.IModule, comp cor } func (this *modelComp) getEntertainmList(uid string) (result *pb.DBXXLData, err error) { + + if db.IsCross() { + if tag, _, b := utils.UIdSplit(uid); b { + if conn, err := db.ServerDBConn(tag); err == nil { + dbModel := db.NewDBModel(comm.TableEntertainm, conn) + if err = dbModel.Get(uid, result); err != nil { + if redis.RedisNil != err { // 没有数据直接创建新的数据 + result.Id = primitive.NewObjectID().Hex() + result.Uid = uid + result.Reward = make(map[int32]int32) + result.Card = make(map[string]int32, 0) + } + } + } + } + } result = &pb.DBXXLData{} if err = this.Get(uid, result); err != nil { if redis.RedisNil != err { // 没有数据直接创建新的数据 result.Id = primitive.NewObjectID().Hex() result.Uid = uid result.Reward = make(map[int32]int32) + result.Card = make(map[string]int32, 0) } } err = nil @@ -42,5 +61,18 @@ func (this *modelComp) getEntertainmList(uid string) (result *pb.DBXXLData, err } func (this *modelComp) modifyEntertainmList(uid string, data map[string]interface{}) error { - return this.Change(uid, data) + var ( + err error + ) + if db.IsCross() { + if tag, _, b := utils.UIdSplit(uid); b { + if conn, err := db.ServerDBConn(tag); err == nil { + dbModel := db.NewDBModel(comm.TableEntertainm, conn) + err = dbModel.Change(uid, data) + } + } + } else { + err = this.Change(uid, data) + } + return err } diff --git a/modules/entertainment/module.go b/modules/entertainment/module.go index 223075ff1..6488f5909 100644 --- a/modules/entertainment/module.go +++ b/modules/entertainment/module.go @@ -56,12 +56,27 @@ func (this *Entertainment) Start() (err error) { return } -func (this *Entertainment) BroadcastRoomMsg(uids ...string) { - this.SendMsgToUsers(string(this.GetType()), "message", &pb.EntertainStartGamePush{ - User1: &pb.PlayerData{}, - User2: &pb.PlayerData{}, - Mpadata: &pb.MapData{}, - Power: "", - Round: 0, - }, uids...) +// 分发资源 +func (this *Entertainment) AddXxlCard(session comm.IUserSession, cards map[string]int32, bPush bool) (errdata *pb.ErrorData) { + + var ( + result *pb.DBXXLData + err error + ) + if result, err = this.model.getEntertainmList(session.GetUserId()); err != nil { + return + } + for k, v := range cards { + result.Card[k] += v + } + this.model.modifyEntertainmList(session.GetUserId(), map[string]interface{}{ + "card": result.Card, + }) + + if bPush { + session.SendMsg(string(this.GetType()), "titlelist", &pb.EntertainChangePush{ + Card: result.Card, + }) + } + return } diff --git a/modules/entertainment/xxlPlat.go b/modules/entertainment/xxlPlat.go index 998091b74..a42b51547 100644 --- a/modules/entertainment/xxlPlat.go +++ b/modules/entertainment/xxlPlat.go @@ -607,17 +607,9 @@ func (this *MapData) CheckAndRefreshPlat() (bEliminate bool) { if x+2 < Height { k1 := this.Plat[k].Color k2 := this.Plat[k+1].Color - if k1 == k2 { // 校验k3 左边和右边 if true { pos := k + 2 - if pos/Width-1 >= 0 { // 左 - p := this.Plat[pos-Width].Color - if p == k1 { - bEliminate = true - return - } - } if pos/Width+1 < Width { // 右 p := this.Plat[pos+Width].Color if p == k1 { @@ -633,33 +625,8 @@ func (this *MapData) CheckAndRefreshPlat() (bEliminate bool) { } } } - if true { // 下左右 - pos := k - 1 - if pos-1 >= 0 { // 下 - if this.Plat[pos-1].Color == k1 { - bEliminate = true - return - } - } - // 左 - if pos/Width-1 >= 0 { - p := this.Plat[pos-Width].Color - if p == k1 { - bEliminate = true - return - } - } - if pos/Width+1 < Width { - p := this.Plat[pos+Width].Color - if p == k1 { - bEliminate = true - return - } - } - } } } - if y+2 < Height { k1 := this.Plat[k].Color k2 := this.Plat[k+Width].Color @@ -681,43 +648,9 @@ func (this *MapData) CheckAndRefreshPlat() (bEliminate bool) { return } } - if pos%Height-1 >= 0 { // 下 - p := this.Plat[pos-1].Color - if p == k1 { - bEliminate = true - return - } - } - } - if true { // 下左右 - pos := k - Width - if pos < 0 { - break - } - if pos%Height-1 >= 0 { // 下 - if this.Plat[pos-1].Color == k1 { - bEliminate = true - return - } - } - if pos%Height+1 < Height { // 上 - p := this.Plat[pos+1].Color - if p == k1 { - bEliminate = true - return - } - } - if pos/Width-1 >= 0 { // 右 - p := this.Plat[pos-Width].Color - if p == k1 { - bEliminate = true - return - } - } } } } - } for index := Width - 1; index >= 0; index-- { @@ -728,7 +661,7 @@ func (this *MapData) CheckAndRefreshPlat() (bEliminate bool) { k2 := this.Plat[k+2*Width].Color pos := index + (j+1)*7 if k1 == k2 { - // 下 上 + // 上 if pos%Height+1 < Height { p := this.Plat[pos+1].Color if p == k1 { @@ -736,13 +669,6 @@ func (this *MapData) CheckAndRefreshPlat() (bEliminate bool) { return } } - if pos%Height-1 >= 0 { - p := this.Plat[pos-1].Color - if p == k1 { - bEliminate = true - return - } - } } } } @@ -756,14 +682,6 @@ func (this *MapData) CheckAndRefreshPlat() (bEliminate bool) { k2 := this.Plat[k+2].Color pos := k + 1 if k1 == k2 { - // 左 - if pos/Height-1 >= 0 { - p := this.Plat[pos-Height].Color - if p == k1 { - bEliminate = true - return - } - } if pos/Height+1 < Width { // 右 p := this.Plat[pos+Width].Color if p == k1 { diff --git a/modules/gm/module.go b/modules/gm/module.go index c991356f1..121d1ecbc 100644 --- a/modules/gm/module.go +++ b/modules/gm/module.go @@ -76,7 +76,8 @@ func (this *GM) CreateCmd(session comm.IUserSession, cmd string) (errdata *pb.Er this.Debugf("create CMD :%s", cmd) // 打印个日志方便查询 datas := strings.Split(keys[1], ",") if len(datas) == 3 && (comm.TitleType == datas[0] || datas[0] == comm.AttrType || datas[0] == comm.ItemType || - datas[0] == comm.HeroType || datas[0] == comm.EquipmentType || datas[0] == comm.VipType || datas[0] == comm.AtlasType || datas[0] == comm.PandaType || datas[0] == comm.MountsType) { + datas[0] == comm.HeroType || datas[0] == comm.EquipmentType || datas[0] == comm.VipType || + datas[0] == comm.AtlasType || datas[0] == comm.PandaType || datas[0] == comm.MountsType || datas[0] == comm.XxlType) { num, err := strconv.Atoi(datas[2]) if err != nil { errdata = &pb.ErrorData{ diff --git a/modules/modulebase.go b/modules/modulebase.go index a38ab6c6c..3c4b7d913 100644 --- a/modules/modulebase.go +++ b/modules/modulebase.go @@ -28,22 +28,23 @@ type ModuleBase struct { options IOptions scomp comm.ISC_GateRouteComp //网关服务组件 //常用的一些通用模块 在底层注册好 - ModuleSys comm.ISys //系统 - ModuleUser comm.IUser //用户模块 - ModuleItems comm.IItems //道具背包模块 - ModuleHero comm.IHero //英雄模块 - ModuleEquipment comm.IEquipment //装备模块 - ModuleFriend comm.IFriend //好友 - ModuleSociaty comm.ISociaty //公会 - ModulePrivilege comm.IPrivilege // 月卡 - ModuleSmithy comm.ISmithy //铁匠铺 - ModulePractice comm.IPractice //练功房 - ModuleTools comm.ITools //工具类 获取一些通用配置 - ModuleBuried comm.IBuried //触发埋点中心 - ModuleMail comm.Imail //邮件 - ModuleActivity comm.IActivity //活动模块 - ModuleUiGame comm.IUiGame // - ModuleDragon comm.IDragon // + ModuleSys comm.ISys //系统 + ModuleUser comm.IUser //用户模块 + ModuleItems comm.IItems //道具背包模块 + ModuleHero comm.IHero //英雄模块 + ModuleEquipment comm.IEquipment //装备模块 + ModuleFriend comm.IFriend //好友 + ModuleSociaty comm.ISociaty //公会 + ModulePrivilege comm.IPrivilege // 月卡 + ModuleSmithy comm.ISmithy //铁匠铺 + ModulePractice comm.IPractice //练功房 + ModuleTools comm.ITools //工具类 获取一些通用配置 + ModuleBuried comm.IBuried //触发埋点中心 + ModuleMail comm.Imail //邮件 + ModuleActivity comm.IActivity //活动模块 + ModuleUiGame comm.IUiGame // + ModuleDragon comm.IDragon // + ModuleEntertain comm.IEntertainment // } // 重构模块配置对象 @@ -154,6 +155,11 @@ func (this *ModuleBase) Start() (err error) { return } this.ModuleDragon = module.(comm.IDragon) + + if module, err = this.service.GetModule(comm.ModuleEntertainment); err != nil { + return + } + this.ModuleEntertain = module.(comm.IEntertainment) return } @@ -471,6 +477,7 @@ func (this *ModuleBase) DispenseRes(session comm.IUserSession, res []*cfg.Gameat mts map[string]int32 // 捕羊大赛资源 per map[string]int32 // 捕羊大赛资源 title map[string]int32 // 称号资源 + xxl map[string]int32 // 三消卡片资源 ) items = make(map[string]int32, 0) heros = make(map[string]int32, 0) @@ -482,6 +489,7 @@ func (this *ModuleBase) DispenseRes(session comm.IUserSession, res []*cfg.Gameat mts = make(map[string]int32, 0) per = make(map[string]int32, 0) title = make(map[string]int32, 0) + xxl = make(map[string]int32, 0) for _, v := range res { switch v.A { @@ -507,6 +515,8 @@ func (this *ModuleBase) DispenseRes(session comm.IUserSession, res []*cfg.Gameat per[v.T] = 1 case comm.TitleType: title[v.T] = 1 + case comm.XxlType: + xxl[v.T] += v.N default: this.Error("not found res type", log.Field{Key: "Type", Value: v.A}) // 找不到资源类型 } @@ -559,6 +569,10 @@ func (this *ModuleBase) DispenseRes(session comm.IUserSession, res []*cfg.Gameat errdata = this.ModuleUser.AddTitle(session, title, bPush) this.Debugf("发放用户称号资源资源: %v errdata: %v", mts, errdata) } + if len(xxl) > 0 { + errdata = this.ModuleEntertain.AddXxlCard(session, xxl, bPush) + this.Debugf("发放三消卡片资源资源: %v errdata: %v", mts, errdata) + } return } @@ -698,6 +712,7 @@ func (this *ModuleBase) DispenseAtno(session comm.IUserSession, res []*cfg.Gamea mts map[string]int32 // 捕羊大赛资源 per map[string]int32 // 捕羊大赛资源 title map[string]int32 // 称号资源 + xxl map[string]int32 // 三消资源 equipschange []*pb.DB_Equipment heroschange []*pb.UserAtno itemschange []*pb.UserAtno @@ -712,6 +727,7 @@ func (this *ModuleBase) DispenseAtno(session comm.IUserSession, res []*cfg.Gamea mts = make(map[string]int32, 0) per = make(map[string]int32, 0) title = make(map[string]int32, 0) + xxl = make(map[string]int32, 0) for _, v := range res { switch v.A { @@ -737,6 +753,8 @@ func (this *ModuleBase) DispenseAtno(session comm.IUserSession, res []*cfg.Gamea per[v.T] = 1 case comm.TitleType: title[v.T] = 1 + case comm.XxlType: + xxl[v.T] += v.N default: this.Error("not found res type", log.Field{Key: "Type", Value: v.A}) // 找不到资源类型 } @@ -863,6 +881,20 @@ func (this *ModuleBase) DispenseAtno(session comm.IUserSession, res []*cfg.Gamea } this.Debugf("发放用户称号资源资源: %v errdata: %v", mts, errdata) } + + if len(xxl) > 0 { + if errdata = this.ModuleEntertain.AddXxlCard(session, xxl, bPush); errdata != nil { + return + } + for k, v := range xxl { + atno = append(atno, &pb.UserAtno{ + A: comm.TitleType, + T: k, + N: v, + }) + } + this.Debugf("发放三消卡片资源资源: %v errdata: %v", mts, errdata) + } return } diff --git a/pb/entertain_db.pb.go b/pb/entertain_db.pb.go index b22851d46..063d39d8d 100644 --- a/pb/entertain_db.pb.go +++ b/pb/entertain_db.pb.go @@ -26,9 +26,10 @@ type MapData struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Data []*GirdeData `protobuf:"bytes,1,rep,name=data,proto3" json:"data"` // 地图数据 - CurSocre int32 `protobuf:"varint,2,opt,name=curSocre,proto3" json:"curSocre"` // 本次地图更新得分 - CurEnergy int32 `protobuf:"varint,3,opt,name=curEnergy,proto3" json:"curEnergy"` // 本次掉落获得的能量 + Data []*GirdeData `protobuf:"bytes,1,rep,name=data,proto3" json:"data"` // 地图数据 + CurSocre int32 `protobuf:"varint,2,opt,name=curSocre,proto3" json:"curSocre"` // 本次地图更新得分 + CurEnergy int32 `protobuf:"varint,3,opt,name=curEnergy,proto3" json:"curEnergy"` // 本次掉落获得的能量 + ChangeType int32 `protobuf:"varint,4,opt,name=changeType,proto3" json:"changeType"` // 1 地图刷新类型 } func (x *MapData) Reset() { @@ -84,6 +85,13 @@ func (x *MapData) GetCurEnergy() int32 { return 0 } +func (x *MapData) GetChangeType() int32 { + if x != nil { + return x.ChangeType + } + return 0 +} + // 消消乐 type GirdeData struct { state protoimpl.MessageState @@ -304,9 +312,10 @@ type DBXXLData struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //ID - Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID - Reward map[int32]int32 `protobuf:"bytes,3,rep,name=reward,proto3" json:"reward" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // key 配置表唯一ID + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` //ID + Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid" bson:"uid"` //用户ID + Reward map[int32]int32 `protobuf:"bytes,3,rep,name=reward,proto3" json:"reward" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // key 配置表唯一ID + Card map[string]int32 `protobuf:"bytes,4,rep,name=card,proto3" json:"card" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // key 卡id value 数量(可为0) } func (x *DBXXLData) Reset() { @@ -362,51 +371,66 @@ func (x *DBXXLData) GetReward() map[int32]int32 { return nil } +func (x *DBXXLData) GetCard() map[string]int32 { + if x != nil { + return x.Card + } + return nil +} + var File_entertain_entertain_db_proto protoreflect.FileDescriptor var file_entertain_entertain_db_proto_rawDesc = []byte{ 0x0a, 0x1c, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, - 0x63, 0x6f, 0x6d, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, 0x07, 0x4d, 0x61, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x69, 0x72, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x75, 0x72, 0x53, 0x6f, 0x63, 0x72, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x75, 0x72, 0x53, 0x6f, 0x63, 0x72, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x75, 0x72, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x75, 0x72, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x22, - 0x75, 0x0a, 0x09, 0x47, 0x69, 0x72, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, - 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x22, 0x8d, 0x01, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, + 0x63, 0x6f, 0x6d, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x83, 0x01, 0x0a, 0x07, 0x4d, + 0x61, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x69, 0x72, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x75, 0x72, 0x53, 0x6f, 0x63, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x75, 0x72, 0x53, 0x6f, 0x63, + 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x75, 0x72, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x75, 0x72, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, + 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x22, 0x75, 0x0a, 0x09, 0x47, 0x69, 0x72, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, + 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x22, 0x8d, 0x01, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, + 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x70, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x02, 0x70, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x22, 0x4f, 0x0a, 0x0a, 0x44, 0x42, 0x58, 0x58, 0x4c, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x29, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x70, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x22, 0x4f, 0x0a, 0x0a, 0x44, 0x42, 0x58, 0x58, 0x4c, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x29, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x69, 0x6e, 0x66, 0x6f, 0x12, - 0x16, 0x0a, 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x09, 0x44, 0x42, 0x58, 0x58, - 0x4c, 0x44, 0x61, 0x74, 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, 0x75, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x44, 0x42, 0x58, 0x58, 0x4c, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x39, 0x0a, 0x0b, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x45, 0x6e, 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, 0x20, 0x01, 0x28, 0x05, 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, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x61, 0x72, 0x64, 0x69, 0x64, 0x22, 0xfb, 0x01, 0x0a, 0x09, 0x44, 0x42, 0x58, + 0x58, 0x4c, 0x44, 0x61, 0x74, 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, 0x75, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x44, 0x42, 0x58, 0x58, 0x4c, + 0x44, 0x61, 0x74, 0x61, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x44, 0x42, 0x58, 0x58, 0x4c, 0x44, 0x61, + 0x74, 0x61, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x63, 0x61, + 0x72, 0x64, 0x1a, 0x39, 0x0a, 0x0b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 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, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, + 0x09, 0x43, 0x61, 0x72, 0x64, 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, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -421,7 +445,7 @@ func file_entertain_entertain_db_proto_rawDescGZIP() []byte { return file_entertain_entertain_db_proto_rawDescData } -var file_entertain_entertain_db_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_entertain_entertain_db_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_entertain_entertain_db_proto_goTypes = []interface{}{ (*MapData)(nil), // 0: MapData (*GirdeData)(nil), // 1: GirdeData @@ -429,18 +453,20 @@ var file_entertain_entertain_db_proto_goTypes = []interface{}{ (*DBXXLMatch)(nil), // 3: DBXXLMatch (*DBXXLData)(nil), // 4: DBXXLData nil, // 5: DBXXLData.RewardEntry - (*BaseUserInfo)(nil), // 6: BaseUserInfo + nil, // 6: DBXXLData.CardEntry + (*BaseUserInfo)(nil), // 7: BaseUserInfo } var file_entertain_entertain_db_proto_depIdxs = []int32{ 1, // 0: MapData.data:type_name -> GirdeData - 6, // 1: PlayerData.userinfo:type_name -> BaseUserInfo - 6, // 2: DBXXLMatch.userinfo:type_name -> BaseUserInfo + 7, // 1: PlayerData.userinfo:type_name -> BaseUserInfo + 7, // 2: DBXXLMatch.userinfo:type_name -> BaseUserInfo 5, // 3: DBXXLData.reward:type_name -> DBXXLData.RewardEntry - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 6, // 4: DBXXLData.card:type_name -> DBXXLData.CardEntry + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_entertain_entertain_db_proto_init() } @@ -517,7 +543,7 @@ func file_entertain_entertain_db_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_entertain_entertain_db_proto_rawDesc, NumEnums: 0, - NumMessages: 6, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/pb/entertain_msg.pb.go b/pb/entertain_msg.pb.go index 11c72e008..2c3bece3c 100644 --- a/pb/entertain_msg.pb.go +++ b/pb/entertain_msg.pb.go @@ -1275,6 +1275,54 @@ func (x *EntertainRewardResp) GetReward() []*UserAtno { return nil } +// 英雄卡数据变更推送 +type EntertainChangePush struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Card map[string]int32 `protobuf:"bytes,1,rep,name=card,proto3" json:"card" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // key 卡id value 数量(可为0) +} + +func (x *EntertainChangePush) Reset() { + *x = EntertainChangePush{} + if protoimpl.UnsafeEnabled { + mi := &file_entertain_entertain_msg_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntertainChangePush) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntertainChangePush) ProtoMessage() {} + +func (x *EntertainChangePush) ProtoReflect() protoreflect.Message { + mi := &file_entertain_entertain_msg_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntertainChangePush.ProtoReflect.Descriptor instead. +func (*EntertainChangePush) Descriptor() ([]byte, []int) { + return file_entertain_entertain_msg_proto_rawDescGZIP(), []int{21} +} + +func (x *EntertainChangePush) GetCard() map[string]int32 { + if x != nil { + return x.Card + } + return nil +} + var File_entertain_entertain_msg_proto protoreflect.FileDescriptor var file_entertain_entertain_msg_proto_rawDesc = []byte{ @@ -1406,8 +1454,17 @@ var file_entertain_entertain_msg_proto_rawDesc = []byte{ 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x44, 0x42, 0x58, 0x58, 0x4c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x41, 0x74, 0x6e, 0x6f, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x42, - 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x65, 0x72, 0x41, 0x74, 0x6e, 0x6f, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, + 0x82, 0x01, 0x0a, 0x13, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x50, 0x75, 0x73, 0x68, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x61, 0x72, 0x64, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x75, 0x73, 0x68, 0x2e, 0x43, 0x61, 0x72, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x63, 0x61, 0x72, 0x64, 0x1a, 0x37, 0x0a, 0x09, 0x43, + 0x61, 0x72, 0x64, 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, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1422,7 +1479,7 @@ func file_entertain_entertain_msg_proto_rawDescGZIP() []byte { return file_entertain_entertain_msg_proto_rawDescData } -var file_entertain_entertain_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_entertain_entertain_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_entertain_entertain_msg_proto_goTypes = []interface{}{ (*EntertainMatchReq)(nil), // 0: EntertainMatchReq (*EntertainMatchResp)(nil), // 1: EntertainMatchResp @@ -1445,37 +1502,40 @@ var file_entertain_entertain_msg_proto_goTypes = []interface{}{ (*EntertainGetListResp)(nil), // 18: EntertainGetListResp (*EntertainRewardReq)(nil), // 19: EntertainRewardReq (*EntertainRewardResp)(nil), // 20: EntertainRewardResp - (*PlayerData)(nil), // 21: PlayerData - (*MapData)(nil), // 22: MapData - (*UserAtno)(nil), // 23: UserAtno - (*DBXXLData)(nil), // 24: DBXXLData + (*EntertainChangePush)(nil), // 21: EntertainChangePush + nil, // 22: EntertainChangePush.CardEntry + (*PlayerData)(nil), // 23: PlayerData + (*MapData)(nil), // 24: MapData + (*UserAtno)(nil), // 25: UserAtno + (*DBXXLData)(nil), // 26: DBXXLData } var file_entertain_entertain_msg_proto_depIdxs = []int32{ - 21, // 0: EntertainStartGamePush.user1:type_name -> PlayerData - 21, // 1: EntertainStartGamePush.user2:type_name -> PlayerData - 22, // 2: EntertainStartGamePush.mpadata:type_name -> MapData - 22, // 3: EntertainOperatorRstPush.mpadata:type_name -> MapData - 21, // 4: EntertainOperatorRstPush.user1:type_name -> PlayerData - 21, // 5: EntertainOperatorRstPush.user2:type_name -> PlayerData - 21, // 6: EntertainGameOverPush.user1:type_name -> PlayerData - 21, // 7: EntertainGameOverPush.user2:type_name -> PlayerData - 22, // 8: EntertainGameOverPush.mpadata:type_name -> MapData - 23, // 9: EntertainGameOverPush.reward:type_name -> UserAtno - 21, // 10: EntertainEnterRoomPush.user1:type_name -> PlayerData - 21, // 11: EntertainEnterRoomPush.user2:type_name -> PlayerData - 22, // 12: EntertainReconnectResp.mpadata:type_name -> MapData - 21, // 13: EntertainReconnectResp.user1:type_name -> PlayerData - 21, // 14: EntertainReconnectResp.user2:type_name -> PlayerData - 22, // 15: EntertainRefreshPlatResp.mpadata:type_name -> MapData - 22, // 16: EntertainRefreshPush.mpadata:type_name -> MapData - 24, // 17: EntertainGetListResp.data:type_name -> DBXXLData - 24, // 18: EntertainRewardResp.data:type_name -> DBXXLData - 23, // 19: EntertainRewardResp.reward:type_name -> UserAtno - 20, // [20:20] is the sub-list for method output_type - 20, // [20:20] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 23, // 0: EntertainStartGamePush.user1:type_name -> PlayerData + 23, // 1: EntertainStartGamePush.user2:type_name -> PlayerData + 24, // 2: EntertainStartGamePush.mpadata:type_name -> MapData + 24, // 3: EntertainOperatorRstPush.mpadata:type_name -> MapData + 23, // 4: EntertainOperatorRstPush.user1:type_name -> PlayerData + 23, // 5: EntertainOperatorRstPush.user2:type_name -> PlayerData + 23, // 6: EntertainGameOverPush.user1:type_name -> PlayerData + 23, // 7: EntertainGameOverPush.user2:type_name -> PlayerData + 24, // 8: EntertainGameOverPush.mpadata:type_name -> MapData + 25, // 9: EntertainGameOverPush.reward:type_name -> UserAtno + 23, // 10: EntertainEnterRoomPush.user1:type_name -> PlayerData + 23, // 11: EntertainEnterRoomPush.user2:type_name -> PlayerData + 24, // 12: EntertainReconnectResp.mpadata:type_name -> MapData + 23, // 13: EntertainReconnectResp.user1:type_name -> PlayerData + 23, // 14: EntertainReconnectResp.user2:type_name -> PlayerData + 24, // 15: EntertainRefreshPlatResp.mpadata:type_name -> MapData + 24, // 16: EntertainRefreshPush.mpadata:type_name -> MapData + 26, // 17: EntertainGetListResp.data:type_name -> DBXXLData + 26, // 18: EntertainRewardResp.data:type_name -> DBXXLData + 25, // 19: EntertainRewardResp.reward:type_name -> UserAtno + 22, // 20: EntertainChangePush.card:type_name -> EntertainChangePush.CardEntry + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_entertain_entertain_msg_proto_init() } @@ -1738,6 +1798,18 @@ func file_entertain_entertain_msg_proto_init() { return nil } } + file_entertain_entertain_msg_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntertainChangePush); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1745,7 +1817,7 @@ func file_entertain_entertain_msg_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_entertain_entertain_msg_proto_rawDesc, NumEnums: 0, - NumMessages: 21, + NumMessages: 23, NumExtensions: 0, NumServices: 0, },