装备副本排行

This commit is contained in:
meixiongfeng 2023-07-06 18:02:48 +08:00
parent e4a5caccd3
commit 4a03deaeda
6 changed files with 409 additions and 90 deletions

View File

@ -14,6 +14,7 @@ const (
VikingGetRewardResp = "getreward"
VikingBuyResp = "buy"
VikingRankListResp = "ranklist"
VikingSeasonRankReq = "seasonrank"
)
type apiComp struct {

View File

@ -0,0 +1,75 @@
package viking
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/lego/sys/redis/pipe"
"go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"strconv"
"github.com/go-redis/redis/v8"
)
//参数校验
func (this *apiComp) SeasonRankCheck(session comm.IUserSession, req *pb.VikingSeasonRankReq) (errdata *pb.ErrorData) {
if req.BoosType == 0 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
}
return
}
func (this *apiComp) SeasonRank(session comm.IUserSession, req *pb.VikingSeasonRankReq) (errdata *pb.ErrorData) {
var (
szRank []*pb.DBVSeasonRank
rd *redis.StringSliceCmd
conn *db.DBConn
pipe *pipe.RedisPipe
err error
)
if errdata = this.SeasonRankCheck(session, req); errdata != nil {
return // 参数校验失败直接返回
}
if this.module.CheckCurSeasonData() {
conn, err = db.Local()
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Message: err.Error(),
}
return
}
} else {
conn, _ = db.Cross()
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Message: err.Error(),
}
return
}
}
dbModel := db.NewDBModel(comm.TableVikingRank, 0, conn)
pipe = conn.Redis.RedisPipe(context.TODO())
rd = pipe.ZRevRange("vSeasonRank"+strconv.Itoa(int(req.BoosType)), 0, comm.MaxRankList)
if _, err := pipe.Exec(); err != nil {
this.module.Errorln(err)
return
}
_dataList := rd.Val()
for _, v := range _dataList {
result := &pb.DBVSeasonRank{}
if err := dbModel.Redis.HGetAll(v, result); err == nil {
szRank = append(szRank, result)
}
}
session.SendMsg(string(this.module.GetType()), VikingSeasonRankReq, &pb.VikingSeasonRankResp{Ranks: szRank})
return
}

View File

@ -1,15 +1,11 @@
package viking
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/redis/pipe"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"github.com/go-redis/redis/v8"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx"
)
@ -59,29 +55,3 @@ func (this *ModelRank) getVikingRankListByBossType(uid string, bossType int32) *
}
return nil
}
// 排行数据写跨服
func (this *ModelRank) SetRankListData(tableName string, score int64, objId string) {
if !db.IsCross() {
if conn, err := db.Cross(); err == nil {
var (
pipe *pipe.RedisPipe = conn.Redis.RedisPipe(context.TODO())
menbers *redis.Z
)
menbers = &redis.Z{Score: float64(score), Member: objId}
if cmd := pipe.ZAdd(tableName, menbers); cmd != nil {
dock, err1 := cmd.Result()
if err1 != nil {
this.moduleViking.Errorln(dock, err1)
}
}
if _, err := pipe.Exec(); err != nil {
this.moduleViking.Errorln(err)
return
}
}
}
}

View File

@ -1,15 +1,11 @@
package viking
import (
"context"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/redis/pipe"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"github.com/go-redis/redis/v8"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx"
)
@ -59,29 +55,3 @@ func (this *ModelSeasonRank) getVikingSeasonRankListByBossType(uid string, bossT
}
return nil
}
// 排行数据写跨服
func (this *ModelSeasonRank) SetRankListData(tableName string, score int64, objId string) {
if !db.IsCross() {
if conn, err := db.Cross(); err == nil {
var (
pipe *pipe.RedisPipe = conn.Redis.RedisPipe(context.TODO())
menbers *redis.Z
)
menbers = &redis.Z{Score: float64(score), Member: objId}
if cmd := pipe.ZAdd(tableName, menbers); cmd != nil {
dock, err1 := cmd.Result()
if err1 != nil {
this.moduleViking.Errorln(dock, err1)
}
}
if _, err := pipe.Exec(); err != nil {
this.moduleViking.Errorln(err)
return
}
}
}
}

View File

@ -425,11 +425,23 @@ func (this *Viking) CheckPreSeasonData() (bLocal bool) {
}
// 记录数据存在跨服
func (this *Viking) CheckSeasonRank(uid string, boosID int32, difficulty int32, leadpos int32, szLine []*pb.LineUp, huihe int32) {
conn_, err := db.Cross() // 获取跨服数据库对象
if err != nil {
return
func (this *Viking) CheckSeasonRank(uid string, boosID int32, difficulty int32, leadpos int32, szLine []*pb.LineUp, huihe int32, bcross bool) {
var (
conn_ *db.DBConn
err error
)
if bcross {
conn_, err = db.Cross() // 获取跨服数据库对象
if err != nil {
return
}
} else { //数据记录在本服
conn_, err = db.Local()
if err != nil {
return
}
}
userinfo := this.ModuleUser.GetUser(uid)
model := db.NewDBModel(comm.TableVikingSRank, 0, conn_)
@ -440,6 +452,11 @@ func (this *Viking) CheckSeasonRank(uid string, boosID int32, difficulty int32,
model.GetList(uid, &ranks)
for _, v := range ranks {
if v.Bosstype == boosID && v.Difficulty <= difficulty {
if v.Difficulty == difficulty { // 难度相等 则回合数少则更新
if v.Huihe <= huihe {
break
}
}
mapRankData := make(map[string]interface{}, 0)
mapRankData["difficulty"] = difficulty
mapRankData["bosstype"] = boosID
@ -454,7 +471,6 @@ func (this *Viking) CheckSeasonRank(uid string, boosID int32, difficulty int32,
}
}
if !bFind {
new := &pb.DBVSeasonRank{
Id: primitive.NewObjectID().Hex(),
Uid: uid,

View File

@ -597,6 +597,219 @@ func (x *VikingRankListResp) GetRanks() []*DBVikingRank {
return nil
}
// 排行榜
type VikingSeasonRankReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
BoosType int32 `protobuf:"varint,1,opt,name=boosType,proto3" json:"boosType"` // boss 类型
}
func (x *VikingSeasonRankReq) Reset() {
*x = VikingSeasonRankReq{}
if protoimpl.UnsafeEnabled {
mi := &file_viking_viking_msg_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *VikingSeasonRankReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VikingSeasonRankReq) ProtoMessage() {}
func (x *VikingSeasonRankReq) ProtoReflect() protoreflect.Message {
mi := &file_viking_viking_msg_proto_msgTypes[10]
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 VikingSeasonRankReq.ProtoReflect.Descriptor instead.
func (*VikingSeasonRankReq) Descriptor() ([]byte, []int) {
return file_viking_viking_msg_proto_rawDescGZIP(), []int{10}
}
func (x *VikingSeasonRankReq) GetBoosType() int32 {
if x != nil {
return x.BoosType
}
return 0
}
type VikingSeasonRankResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Ranks []*DBVSeasonRank `protobuf:"bytes,1,rep,name=ranks,proto3" json:"ranks"` // 排行数据 有序的 注意boss类型
}
func (x *VikingSeasonRankResp) Reset() {
*x = VikingSeasonRankResp{}
if protoimpl.UnsafeEnabled {
mi := &file_viking_viking_msg_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *VikingSeasonRankResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VikingSeasonRankResp) ProtoMessage() {}
func (x *VikingSeasonRankResp) ProtoReflect() protoreflect.Message {
mi := &file_viking_viking_msg_proto_msgTypes[11]
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 VikingSeasonRankResp.ProtoReflect.Descriptor instead.
func (*VikingSeasonRankResp) Descriptor() ([]byte, []int) {
return file_viking_viking_msg_proto_rawDescGZIP(), []int{11}
}
func (x *VikingSeasonRankResp) GetRanks() []*DBVSeasonRank {
if x != nil {
return x.Ranks
}
return nil
}
// 连续自动战斗结束 通知服务端
type VikingAutoOverReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
BossId int32 `protobuf:"varint,1,opt,name=bossId,proto3" json:"bossId"` // boos 类型
Difficulty int32 `protobuf:"varint,2,opt,name=difficulty,proto3" json:"difficulty"` // 难度
Line *LineUp `protobuf:"bytes,3,opt,name=line,proto3" json:"line"` // 阵型数据
LeadPos int32 `protobuf:"varint,4,opt,name=leadPos,proto3" json:"leadPos"` // 队长位置
Huihe int32 `protobuf:"varint,5,opt,name=huihe,proto3" json:"huihe"` // 平均回合数
}
func (x *VikingAutoOverReq) Reset() {
*x = VikingAutoOverReq{}
if protoimpl.UnsafeEnabled {
mi := &file_viking_viking_msg_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *VikingAutoOverReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VikingAutoOverReq) ProtoMessage() {}
func (x *VikingAutoOverReq) ProtoReflect() protoreflect.Message {
mi := &file_viking_viking_msg_proto_msgTypes[12]
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 VikingAutoOverReq.ProtoReflect.Descriptor instead.
func (*VikingAutoOverReq) Descriptor() ([]byte, []int) {
return file_viking_viking_msg_proto_rawDescGZIP(), []int{12}
}
func (x *VikingAutoOverReq) GetBossId() int32 {
if x != nil {
return x.BossId
}
return 0
}
func (x *VikingAutoOverReq) GetDifficulty() int32 {
if x != nil {
return x.Difficulty
}
return 0
}
func (x *VikingAutoOverReq) GetLine() *LineUp {
if x != nil {
return x.Line
}
return nil
}
func (x *VikingAutoOverReq) GetLeadPos() int32 {
if x != nil {
return x.LeadPos
}
return 0
}
func (x *VikingAutoOverReq) GetHuihe() int32 {
if x != nil {
return x.Huihe
}
return 0
}
type VikingAutoOverResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *VikingAutoOverResp) Reset() {
*x = VikingAutoOverResp{}
if protoimpl.UnsafeEnabled {
mi := &file_viking_viking_msg_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *VikingAutoOverResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VikingAutoOverResp) ProtoMessage() {}
func (x *VikingAutoOverResp) ProtoReflect() protoreflect.Message {
mi := &file_viking_viking_msg_proto_msgTypes[13]
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 VikingAutoOverResp.ProtoReflect.Descriptor instead.
func (*VikingAutoOverResp) Descriptor() ([]byte, []int) {
return file_viking_viking_msg_proto_rawDescGZIP(), []int{13}
}
var File_viking_viking_msg_proto protoreflect.FileDescriptor
var file_viking_viking_msg_proto_rawDesc = []byte{
@ -666,8 +879,26 @@ var file_viking_viking_msg_proto_rawDesc = []byte{
0x69, 0x6e, 0x67, 0x52, 0x61, 0x6e, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12,
0x23, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d,
0x2e, 0x44, 0x42, 0x56, 0x69, 0x6b, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x05, 0x72,
0x61, 0x6e, 0x6b, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
0x61, 0x6e, 0x6b, 0x73, 0x22, 0x31, 0x0a, 0x13, 0x56, 0x69, 0x6b, 0x69, 0x6e, 0x67, 0x53, 0x65,
0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x62,
0x6f, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62,
0x6f, 0x6f, 0x73, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3c, 0x0a, 0x14, 0x56, 0x69, 0x6b, 0x69, 0x6e,
0x67, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12,
0x24, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e,
0x2e, 0x44, 0x42, 0x56, 0x53, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x52, 0x05,
0x72, 0x61, 0x6e, 0x6b, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x11, 0x56, 0x69, 0x6b, 0x69, 0x6e, 0x67,
0x41, 0x75, 0x74, 0x6f, 0x4f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x62,
0x6f, 0x73, 0x73, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x62, 0x6f, 0x73,
0x73, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74,
0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75,
0x6c, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x07, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x55, 0x70, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65,
0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
0x05, 0x52, 0x07, 0x6c, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x75,
0x69, 0x68, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x68, 0x75, 0x69, 0x68, 0x65,
0x22, 0x14, 0x0a, 0x12, 0x56, 0x69, 0x6b, 0x69, 0x6e, 0x67, 0x41, 0x75, 0x74, 0x6f, 0x4f, 0x76,
0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -682,7 +913,7 @@ func file_viking_viking_msg_proto_rawDescGZIP() []byte {
return file_viking_viking_msg_proto_rawDescData
}
var file_viking_viking_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
var file_viking_viking_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
var file_viking_viking_msg_proto_goTypes = []interface{}{
(*VikingGetListReq)(nil), // 0: VikingGetListReq
(*VikingGetListResp)(nil), // 1: VikingGetListResp
@ -694,29 +925,37 @@ var file_viking_viking_msg_proto_goTypes = []interface{}{
(*VikingBuyResp)(nil), // 7: VikingBuyResp
(*VikingRankListReq)(nil), // 8: VikingRankListReq
(*VikingRankListResp)(nil), // 9: VikingRankListResp
nil, // 10: VikingChallengeOverResp.HeroexpEntry
(*DBViking)(nil), // 11: DBViking
(*BattleFormation)(nil), // 12: BattleFormation
(*BattleInfo)(nil), // 13: BattleInfo
(*BattleReport)(nil), // 14: BattleReport
(*UserAtno)(nil), // 15: UserAtno
(*DBVikingRank)(nil), // 16: DBVikingRank
(*VikingSeasonRankReq)(nil), // 10: VikingSeasonRankReq
(*VikingSeasonRankResp)(nil), // 11: VikingSeasonRankResp
(*VikingAutoOverReq)(nil), // 12: VikingAutoOverReq
(*VikingAutoOverResp)(nil), // 13: VikingAutoOverResp
nil, // 14: VikingChallengeOverResp.HeroexpEntry
(*DBViking)(nil), // 15: DBViking
(*BattleFormation)(nil), // 16: BattleFormation
(*BattleInfo)(nil), // 17: BattleInfo
(*BattleReport)(nil), // 18: BattleReport
(*UserAtno)(nil), // 19: UserAtno
(*DBVikingRank)(nil), // 20: DBVikingRank
(*DBVSeasonRank)(nil), // 21: DBVSeasonRank
(*LineUp)(nil), // 22: LineUp
}
var file_viking_viking_msg_proto_depIdxs = []int32{
11, // 0: VikingGetListResp.data:type_name -> DBViking
12, // 1: VikingChallengeReq.battle:type_name -> BattleFormation
13, // 2: VikingChallengeResp.info:type_name -> BattleInfo
14, // 3: VikingChallengeOverReq.report:type_name -> BattleReport
11, // 4: VikingChallengeOverResp.data:type_name -> DBViking
15, // 5: VikingChallengeOverResp.asset:type_name -> UserAtno
10, // 6: VikingChallengeOverResp.heroexp:type_name -> VikingChallengeOverResp.HeroexpEntry
11, // 7: VikingBuyResp.data:type_name -> DBViking
16, // 8: VikingRankListResp.ranks:type_name -> DBVikingRank
9, // [9:9] is the sub-list for method output_type
9, // [9:9] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
15, // 0: VikingGetListResp.data:type_name -> DBViking
16, // 1: VikingChallengeReq.battle:type_name -> BattleFormation
17, // 2: VikingChallengeResp.info:type_name -> BattleInfo
18, // 3: VikingChallengeOverReq.report:type_name -> BattleReport
15, // 4: VikingChallengeOverResp.data:type_name -> DBViking
19, // 5: VikingChallengeOverResp.asset:type_name -> UserAtno
14, // 6: VikingChallengeOverResp.heroexp:type_name -> VikingChallengeOverResp.HeroexpEntry
15, // 7: VikingBuyResp.data:type_name -> DBViking
20, // 8: VikingRankListResp.ranks:type_name -> DBVikingRank
21, // 9: VikingSeasonRankResp.ranks:type_name -> DBVSeasonRank
22, // 10: VikingAutoOverReq.line:type_name -> LineUp
11, // [11:11] is the sub-list for method output_type
11, // [11:11] is the sub-list for method input_type
11, // [11:11] is the sub-list for extension type_name
11, // [11:11] is the sub-list for extension extendee
0, // [0:11] is the sub-list for field type_name
}
func init() { file_viking_viking_msg_proto_init() }
@ -848,6 +1087,54 @@ func file_viking_viking_msg_proto_init() {
return nil
}
}
file_viking_viking_msg_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*VikingSeasonRankReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_viking_viking_msg_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*VikingSeasonRankResp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_viking_viking_msg_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*VikingAutoOverReq); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_viking_viking_msg_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*VikingAutoOverResp); 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{
@ -855,7 +1142,7 @@ func file_viking_viking_msg_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_viking_viking_msg_proto_rawDesc,
NumEnums: 0,
NumMessages: 11,
NumMessages: 15,
NumExtensions: 0,
NumServices: 0,
},