Merge branch 'develop' into release

This commit is contained in:
sk 2024-08-29 09:03:31 +08:00
commit c14c15e18b
50 changed files with 2995 additions and 2751 deletions

View File

@ -66,6 +66,10 @@ const (
GameID_Thirteen8 = 212 // 十三张(八人场)
GameID_ThirteenFree = 213 // 十三张(自由场经典场)
GameID_ThirteenFreeLaiZi = 214 // 十三张(自由场癞子场)
GameId_TienLenCustom = 215 // tienlen房卡经典版
GameId_TienLenCustom_yl = 216 // tienlen房卡娱乐版
GameId_TienLenCustom_toend = 217 // tienlen房卡典版打到底
GameId_TienLenCustom_yl_toend = 218 // tienlen房卡娱乐版打到底
__GameId_Slot_Min__ = 300 //################拉霸类################
GameId_CaiShen = 301 // 财神
GameId_Avengers = 302 // 复仇者联盟
@ -116,7 +120,9 @@ func IsTienLenYuLe(gameId int) bool {
GameId_TienLenSelect_yl,
GameId_TienLenRank_yl,
GameId_TienLenSelect_yl_toend,
GameId_TienLenRank_yl_toend:
GameId_TienLenRank_yl_toend,
GameId_TienLenCustom_yl,
GameId_TienLenCustom_yl_toend:
return true
}
return false
@ -131,7 +137,9 @@ func IsTienLenToEnd(gameId int) bool {
GameId_TienLenSelect_toend,
GameId_TienLenSelect_yl_toend,
GameId_TienLenRank_toend,
GameId_TienLenRank_yl_toend:
GameId_TienLenRank_yl_toend,
GameId_TienLenCustom_toend,
GameId_TienLenCustom_yl_toend:
return true
}
return false
@ -853,3 +861,9 @@ const (
On = 1 // 开启
Off = 2 // 关闭
)
const (
DataConfigAll = 0 // 全部配置
DataConfigSprite = 1 // 精灵配置
DataConfigMatchAudience = 2 // 赛事观战开关
)

Binary file not shown.

View File

@ -3424,6 +3424,106 @@
"BetWaterRate": 100,
"IsDrop": 1
},
{
"Id": 2150001,
"Name": "tienlen房卡经典",
"Title": "房卡场",
"GameId": 215,
"GameRule": 21500,
"GameType": 2,
"SceneType": 1,
"Desc": "0",
"ShowType": 3,
"BaseScore": 10,
"BetDec": "10",
"Ai": [
0
],
"OtherIntParams": [
0
],
"GameDif": "207",
"GameClass": 1,
"PlatformName": "越南棋牌",
"PlayerWaterRate": 100,
"BetWaterRate": 100,
"IsCustom": 1
},
{
"Id": 2160001,
"Name": "tienlen房卡娱乐",
"Title": "房卡场",
"GameId": 216,
"GameRule": 21600,
"GameType": 2,
"SceneType": 1,
"Desc": "0",
"ShowType": 3,
"BaseScore": 10,
"BetDec": "10",
"Ai": [
0
],
"OtherIntParams": [
0
],
"GameDif": "207",
"GameClass": 1,
"PlatformName": "越南棋牌",
"PlayerWaterRate": 100,
"BetWaterRate": 100,
"IsCustom": 1
},
{
"Id": 2170001,
"Name": "tienlen房卡经典打到底",
"Title": "房卡场",
"GameId": 217,
"GameRule": 21700,
"GameType": 2,
"SceneType": 1,
"Desc": "0",
"ShowType": 3,
"BaseScore": 10,
"BetDec": "10",
"Ai": [
0
],
"OtherIntParams": [
0
],
"GameDif": "207",
"GameClass": 1,
"PlatformName": "越南棋牌",
"PlayerWaterRate": 100,
"BetWaterRate": 100,
"IsCustom": 1
},
{
"Id": 2180001,
"Name": "tienlen房卡娱乐打到底",
"Title": "房卡场",
"GameId": 218,
"GameRule": 21800,
"GameType": 2,
"SceneType": 1,
"Desc": "0",
"ShowType": 3,
"BaseScore": 10,
"BetDec": "10",
"Ai": [
0
],
"OtherIntParams": [
0
],
"GameDif": "207",
"GameClass": 1,
"PlatformName": "越南棋牌",
"PlayerWaterRate": 100,
"BetWaterRate": 100,
"IsCustom": 1
},
{
"Id": 8070001,
"Name": "Tienlen经典",

Binary file not shown.

View File

@ -142,6 +142,30 @@
"GameId": 247,
"GameDif": "247"
},
{
"Id": 21500,
"Name": "tienlen房卡经典",
"GameId": 215,
"GameDif": "215"
},
{
"Id": 21600,
"Name": "tienlen房卡娱乐",
"GameId": 216,
"GameDif": "216"
},
{
"Id": 21700,
"Name": "tienlen房卡经典打到底",
"GameId": 217,
"GameDif": "217"
},
{
"Id": 21800,
"Name": "tienlen房卡娱乐打到底",
"GameId": 218,
"GameDif": "218"
},
{
"Id": 60600,
"Name": "愤怒大叔",

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,7 @@


ä§*
VIPShow.t1
ã§ *
VIPShow.t2
±ê *
VIPShow.t3

View File

@ -2,12 +2,23 @@
"Arr": [
{
"Id": 1,
"SkinId": 300004
"Type": 1,
"SkinId": 300004,
"VIPDes": "VIPShow.t1"
},
{
"Id": 2,
"Type": 1,
"SkinId": 300003,
"VIPLevel": 3
"VIPLevel": 3,
"VIPDes": "VIPShow.t2"
},
{
"Id": 3,
"Type": 2,
"SkinId": 30001,
"VIPLevel": 6,
"VIPDes": "VIPShow.t3"
}
]
}

View File

@ -0,0 +1,13 @@
{
"GameName":"tienlen房卡经典",
"GameId":215,
"GameMode":[0],
"SceneType":[1],
"CanForceStart":true,
"MinPlayerCnt":2,
"DefaultPlayerCnt":4,
"TimeFreeStart":0,
"TimeFreeEnd":0,
"DependentPlayerCnt":true,
"EnterAfterStart":false
}

View File

@ -0,0 +1,13 @@
{
"GameName":"tienlen房卡经典打到底",
"GameId":217,
"GameMode":[0],
"SceneType":[1],
"CanForceStart":true,
"MinPlayerCnt":2,
"DefaultPlayerCnt":4,
"TimeFreeStart":0,
"TimeFreeEnd":0,
"DependentPlayerCnt":true,
"EnterAfterStart":false
}

View File

@ -0,0 +1,13 @@
{
"GameName":"tienlen房卡娱乐",
"GameId":216,
"GameMode":[0],
"SceneType":[1],
"CanForceStart":true,
"MinPlayerCnt":2,
"DefaultPlayerCnt":4,
"TimeFreeStart":0,
"TimeFreeEnd":0,
"DependentPlayerCnt":true,
"EnterAfterStart":false
}

View File

@ -0,0 +1,13 @@
{
"GameName":"tienlen房卡娱乐打到底",
"GameId":218,
"GameMode":[0],
"SceneType":[1],
"CanForceStart":true,
"MinPlayerCnt":2,
"DefaultPlayerCnt":4,
"TimeFreeStart":0,
"TimeFreeEnd":0,
"DependentPlayerCnt":true,
"EnterAfterStart":false
}

View File

@ -72,11 +72,13 @@ func init() {
totalOfGames := msg.GetTotalOfGames()
baseScore := msg.GetBaseScore()
playerNum := int(msg.GetPlayerNum())
matchInfoId := msg.GetMatchInfoId()
scene := base.SceneMgrSington.CreateScene(s, sceneId, gameMode, sceneMode, gameId, msg.GetPlatform(), msg.GetParams(),
msg.GetAgentor(), msg.GetCreator(), msg.GetReplayCode(), hallId, groupId, totalOfGames, dbGameFree,
bEnterAfterStart, baseScore, playerNum, msg.GetChessRank(), paramsEx...)
if scene != nil {
if scene.IsMatchScene() {
scene.MatchInfoId = matchInfoId
if len(scene.Params) > 0 {
scene.MatchId = scene.Params[0]
}

View File

@ -136,6 +136,7 @@ type Scene struct {
Novice bool
Welfare bool
KillPoints bool
MatchInfoId int32
}
func NewScene(ws *netlib.Session, sceneId, gameMode, sceneMode, gameId int, platform string, params []int64,
@ -699,7 +700,7 @@ func (this *Scene) AudienceLeave(p *Player, reason int) {
//当前状态不能离场
if !this.CanChangeCoinScene(p) {
pack := &gamehall.SCLeaveRoom{
OpRetCode: (gamehall.OpResultCode_Game(p.OpCode)), //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave,
OpRetCode: gamehall.OpResultCode_Game(p.OpCode), //protocol.OpResultCode_OPRC_Hundred_YouHadBetCannotLeave,
RoomId: proto.Int(this.SceneId),
}
proto.SetDefaults(pack)

View File

@ -619,6 +619,9 @@ func (this *TienLenSceneData) SendHandCard_Match() {
proto.SetDefaults(pack)
seat.SendToClient(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack)
logger.Logger.Trace("SnId: ", seat.SnId, ";SCTienLenCard: ", pack.Cards)
pack.SnId = seat.SnId
this.BroadcastToAudience(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack)
}
}
@ -652,6 +655,9 @@ func (this *TienLenSceneData) SendHandCard_Match() {
proto.SetDefaults(pack)
seat.SendToClient(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack)
logger.Logger.Trace("SnId: ", seat.SnId, ";SCTienLenCard: ", pack.Cards)
pack.SnId = seat.SnId
this.BroadcastToAudience(int(tienlen.TienLenPacketID_PACKET_SCTienLenCard), pack)
}
}
}

View File

@ -436,6 +436,7 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen
CurPlayerNum: int32(s.MatchCurPlayerNum),
NextNeed: int32(s.MatchNextNeed),
RecordId: sceneEx.recordId,
TMInfoId: sceneEx.MatchInfoId,
}
pack.IsMatch = int32(0)
// 0.普通场 1.锦标赛 2.冠军赛 3.vip专属
@ -517,7 +518,7 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen
//手牌
for j := int32(0); j < rule.HandCardNum; j++ {
if nowPlayer.cards[j] != rule.InvalideCard {
if s.GetSceneState().GetState() == rule.TienLenSceneStateBilled { //结算状态显示用
if s.GetSceneState().GetState() == rule.TienLenSceneStateBilled || p.IsMarkFlag(base.PlayerState_Audience) { //结算状态显示用
pd1.Cards = append(pd1.Cards, nowPlayer.cards[j])
} else {
pd1.Cards = append(pd1.Cards, rule.InvalideCard)

View File

@ -135,7 +135,7 @@ type AllConfig struct {
*webapi.AwardLogConfig
// 新手引导配置
*webapi.GuideConfig
MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表
MatchAudience map[int32]*webapi.MatchAudience // 比赛观众列表 key: 玩家id
// 小精灵配置
*webapi.SpiritConfig
}

View File

@ -50,6 +50,7 @@ const (
OpResultCode_Game_OPRC_AllocRoomIdFailed_Game OpResultCode_Game = 1097 //房间id获取失败
OpResultCode_Game_OPRC_PrivateRoomCountLimit_Game OpResultCode_Game = 1098 //私人房间上限
OpResultCode_Game_OPRC_RoomNotExit OpResultCode_Game = 1099 // 已经不在房间了
OpResultCode_Game_OPRC_MatchAudience OpResultCode_Game = 1100 // 不在比赛观战白名单
OpResultCode_Game_OPRC_LowerRice_ScenceMax_Game OpResultCode_Game = 1075 //超过最大下米数量
OpResultCode_Game_OPRC_LowerRice_PlayerMax_Game OpResultCode_Game = 1076 //超过单个用户最大下米数
OpResultCode_Game_OPRC_LowerRice_PlayerDownMax_Game OpResultCode_Game = 1077
@ -95,6 +96,7 @@ var (
1097: "OPRC_AllocRoomIdFailed_Game",
1098: "OPRC_PrivateRoomCountLimit_Game",
1099: "OPRC_RoomNotExit",
1100: "OPRC_MatchAudience",
1075: "OPRC_LowerRice_ScenceMax_Game",
1076: "OPRC_LowerRice_PlayerMax_Game",
1077: "OPRC_LowerRice_PlayerDownMax_Game",
@ -136,6 +138,7 @@ var (
"OPRC_AllocRoomIdFailed_Game": 1097,
"OPRC_PrivateRoomCountLimit_Game": 1098,
"OPRC_RoomNotExit": 1099,
"OPRC_MatchAudience": 1100,
"OPRC_LowerRice_ScenceMax_Game": 1075,
"OPRC_LowerRice_PlayerMax_Game": 1076,
"OPRC_LowerRice_PlayerDownMax_Game": 1077,
@ -7942,7 +7945,7 @@ var file_game_proto_rawDesc = []byte{
0x09, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61,
0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x50, 0x61, 0x72, 0x61, 0x6d,
0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73,
0x2a, 0xe6, 0x09, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64,
0x2a, 0xff, 0x09, 0x0a, 0x11, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64,
0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53,
0x75, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f,
0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10,
@ -7993,226 +7996,228 @@ var file_game_proto_rawDesc = []byte{
0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d,
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10,
0xca, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x4e,
0x6f, 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52,
0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, 0x6e,
0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, 0x0a,
0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f,
0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb4,
0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52,
0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, 0x61,
0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52,
0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41, 0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x43,
0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10,
0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64,
0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, 0x61,
0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f,
0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65,
0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, 0x74,
0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d,
0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a, 0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, 0x75,
0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49, 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61,
0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67,
0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10,
0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, 0x6f,
0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, 0x19,
0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, 0x72,
0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52,
0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f,
0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, 0x4f,
0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x73,
0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb2, 0x46, 0x2a, 0xd0, 0x17, 0x0a, 0x10, 0x47, 0x61,
0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18,
0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c,
0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x98,
0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a,
0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x99, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f,
0x4f, 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11,
0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e,
0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f,
0x4d, 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12,
0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54,
0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9f, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45,
0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x18, 0x0a,
0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52,
0x47, 0x41, 0x4d, 0x45, 0x10, 0xa1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2,
0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51,
0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45,
0x10, 0xa4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x43, 0x41, 0x52, 0x44, 0x47, 0x41, 0x49, 0x4e, 0x57, 0x41, 0x59, 0x10, 0xa5, 0x11, 0x12,
0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x53,
0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa6, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7,
0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54,
0x41, 0x53, 0x4b, 0x43, 0x48, 0x47, 0x10, 0xa8, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x43, 0x4f, 0x4d, 0x50, 0x4c,
0x45, 0x54, 0x45, 0x10, 0xa9, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x44, 0x45, 0x4c, 0x10, 0xaa, 0x11, 0x12, 0x1c,
0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x43, 0x4b,
0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xab, 0x11, 0x12, 0x1c, 0x0a, 0x17,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52,
0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45, 0x10, 0xac, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54,
0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xaf, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54,
0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb0, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x41, 0x47, 0x45, 0x4e, 0x54,
0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43, 0x10, 0xb1, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10,
0xb2, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, 0xb3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x4c, 0x49, 0x53,
0x54, 0x10, 0xb4, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
0x53, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49,
0x44, 0x53, 0x10, 0xb5, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45,
0x49, 0x44, 0x53, 0x10, 0xb6, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49,
0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10,
0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53,
0x10, 0xb9, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc0, 0x11, 0x12, 0x18, 0x0a,
0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52,
0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc1, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc2,
0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c,
0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc3, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f,
0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc4, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49,
0x53, 0x54, 0x10, 0xc5, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54,
0x45, 0x52, 0x10, 0xc6, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41,
0x56, 0x45, 0x10, 0xc7, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x43, 0x48, 0x41, 0x4e,
0x47, 0x10, 0xc8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4e, 0x55, 0x4d, 0x10,
0xc9, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xca, 0x11,
0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x55,
0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xcb, 0x11, 0x12, 0x1f,
0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54,
0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcc, 0x11, 0x12,
0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x55, 0x53,
0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcd, 0x11,
0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e,
0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xce, 0x11, 0x12, 0x1a, 0x0a, 0x15,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44,
0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xcf, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d,
0x45, 0x10, 0xd0, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd1, 0x11,
0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c,
0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57,
0x45, 0x52, 0x10, 0xd2, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53,
0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, 0x10, 0xd3, 0x11, 0x12, 0x25, 0x0a, 0x20,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41,
0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43,
0x10, 0xd4, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41,
0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd5, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55,
0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd6, 0x11, 0x12, 0x1d, 0x0a,
0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52,
0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd7, 0x11, 0x12, 0x1d, 0x0a, 0x18,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54,
0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd8, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48,
0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd9, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52,
0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xda, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45,
0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49,
0x53, 0x54, 0x10, 0xdc, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41,
0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xdd, 0x11, 0x12, 0x25, 0x0a, 0x20,
0x6f, 0x74, 0x45, 0x78, 0x69, 0x74, 0x10, 0xcb, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x50, 0x52,
0x43, 0x5f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x10,
0xcc, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72,
0x52, 0x69, 0x63, 0x65, 0x5f, 0x53, 0x63, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x5f, 0x47,
0x61, 0x6d, 0x65, 0x10, 0xb3, 0x08, 0x12, 0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4c,
0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4d,
0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb4, 0x08, 0x12, 0x26, 0x0a, 0x21, 0x4f, 0x50,
0x52, 0x43, 0x5f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x52, 0x69, 0x63, 0x65, 0x5f, 0x50, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x4d, 0x61, 0x78, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10,
0xb5, 0x08, 0x12, 0x27, 0x0a, 0x22, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x59, 0x6f, 0x75, 0x72, 0x41,
0x72, 0x65, 0x47, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x4c, 0x65,
0x61, 0x76, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xb6, 0x08, 0x12, 0x21, 0x0a, 0x1c, 0x4f,
0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x69, 0x72, 0x64, 0x50, 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x63,
0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xc8, 0x08, 0x12, 0x1c,
0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x52, 0x6f, 0x6f, 0x6d, 0x47, 0x61, 0x6d, 0x65, 0x54,
0x69, 0x6d, 0x65, 0x73, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xcf, 0x08, 0x12, 0x1f, 0x0a, 0x1a,
0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x75, 0x73, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x72, 0x6f,
0x6d, 0x6f, 0x74, 0x65, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xd9, 0x08, 0x12, 0x1f, 0x0a,
0x1a, 0x4f, 0x70, 0x72, 0x63, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x5f, 0x43, 0x6c, 0x75, 0x62, 0x49,
0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0x9f, 0x27, 0x12, 0x1b,
0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10, 0xa8, 0x46, 0x12, 0x1a, 0x0a, 0x15, 0x4f,
0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x5f,
0x47, 0x61, 0x6d, 0x65, 0x10, 0xa9, 0x46, 0x12, 0x19, 0x0a, 0x14, 0x4f, 0x50, 0x52, 0x43, 0x5f,
0x44, 0x67, 0x5f, 0x50, 0x6c, 0x61, 0x74, 0x45, 0x72, 0x72, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10,
0xaa, 0x46, 0x12, 0x20, 0x0a, 0x1b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x67, 0x5f, 0x51, 0x75,
0x6f, 0x74, 0x61, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x47, 0x61, 0x6d,
0x65, 0x10, 0xab, 0x46, 0x12, 0x1c, 0x0a, 0x17, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x54, 0x68, 0x72,
0x5f, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x10,
0xb2, 0x46, 0x2a, 0xd0, 0x17, 0x0a, 0x10, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x50,
0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x47, 0x61, 0x6d, 0x65, 0x48, 0x61, 0x6c, 0x6c, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10,
0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4a,
0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x98, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x47, 0x41, 0x4d, 0x45,
0x10, 0x99, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9a, 0x11, 0x12, 0x19,
0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41,
0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9b, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d,
0x10, 0x9c, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9d, 0x11, 0x12, 0x19, 0x0a,
0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52,
0x4e, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0x9e, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x52, 0x4f, 0x4f, 0x4d,
0x10, 0x9f, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x52,
0x4f, 0x4f, 0x4d, 0x10, 0xa0, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa1, 0x11,
0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e,
0x54, 0x45, 0x52, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa2, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45,
0x10, 0xa3, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x51, 0x55, 0x49, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xa4, 0x11, 0x12, 0x1a, 0x0a, 0x15,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x41, 0x52, 0x44, 0x47, 0x41,
0x49, 0x4e, 0x57, 0x41, 0x59, 0x10, 0xa5, 0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa6,
0x11, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54,
0x41, 0x53, 0x4b, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53, 0x4b, 0x43, 0x48, 0x47, 0x10,
0xa8, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x54, 0x41, 0x43, 0x4b, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa9, 0x11, 0x12,
0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x41, 0x53,
0x4b, 0x44, 0x45, 0x4c, 0x10, 0xaa, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49,
0x5a, 0x45, 0x10, 0xab, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x54, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x57, 0x50, 0x52, 0x49, 0x5a, 0x45,
0x10, 0xac, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43,
0x10, 0xaf, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x47, 0x45, 0x54, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43,
0x10, 0xb0, 0x11, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x44, 0x45, 0x4c, 0x41, 0x47, 0x45, 0x4e, 0x54, 0x47, 0x41, 0x4d, 0x45, 0x52, 0x45, 0x43,
0x10, 0xb1, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59, 0x10, 0xb2, 0x11, 0x12, 0x16, 0x0a, 0x11, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x42, 0x55, 0x59,
0x10, 0xb3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xb4, 0x11, 0x12, 0x1f, 0x0a,
0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x4c, 0x41,
0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49, 0x44, 0x53, 0x10, 0xb5, 0x11, 0x12, 0x1f,
0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x4c,
0x41, 0x54, 0x45, 0x4c, 0x59, 0x47, 0x41, 0x4d, 0x45, 0x49, 0x44, 0x53, 0x10, 0xb6, 0x11, 0x12,
0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54,
0x47, 0x41, 0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb7, 0x11, 0x12, 0x1c, 0x0a,
0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x47, 0x41,
0x4d, 0x45, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0xb8, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x47,
0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0xb9, 0x11, 0x12, 0x18, 0x0a, 0x13,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48,
0x41, 0x4c, 0x4c, 0x10, 0xc0, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc1, 0x11,
0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45,
0x41, 0x56, 0x45, 0x48, 0x41, 0x4c, 0x4c, 0x10, 0xc2, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x48, 0x41, 0x4c,
0x4c, 0x10, 0xc3, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
0x53, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc4,
0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48,
0x41, 0x4c, 0x4c, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc5, 0x11, 0x12, 0x1e,
0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d,
0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0xc6, 0x11, 0x12, 0x1e,
0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d,
0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x10, 0xc7, 0x11, 0x12, 0x1d,
0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d,
0x53, 0x54, 0x41, 0x54, 0x45, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x10, 0xc8, 0x11, 0x12, 0x1c, 0x0a,
0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x48, 0x41, 0x4c, 0x4c, 0x50,
0x4c, 0x41, 0x59, 0x45, 0x52, 0x4e, 0x55, 0x4d, 0x10, 0xc9, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49,
0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xca, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x42, 0x55, 0x4c, 0x4c, 0x45, 0x54, 0x49, 0x4f, 0x4e,
0x49, 0x4e, 0x46, 0x4f, 0x10, 0xcb, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e, 0x46,
0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcc, 0x11, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x45, 0x52, 0x49, 0x4e,
0x46, 0x4f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcd, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41,
0x4d, 0x45, 0x10, 0xce, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xcf,
0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c,
0x45, 0x41, 0x56, 0x45, 0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd0, 0x11, 0x12, 0x1a, 0x0a,
0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45,
0x44, 0x47, 0x47, 0x41, 0x4d, 0x45, 0x10, 0xd1, 0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x52, 0x45, 0x43,
0x48, 0x41, 0x52, 0x47, 0x45, 0x41, 0x4e, 0x53, 0x57, 0x45, 0x52, 0x10, 0xd2, 0x11, 0x12, 0x25,
0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49,
0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54,
0x49, 0x43, 0x10, 0xd3, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x53,
0x54, 0x41, 0x54, 0x49, 0x43, 0x53, 0x54, 0x49, 0x43, 0x10, 0xd4, 0x11, 0x12, 0x23, 0x0a, 0x1e,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x41,
0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x10, 0xd5,
0x11, 0x12, 0x23, 0x0a, 0x1e, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54,
0x48, 0x52, 0x49, 0x44, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x54, 0x52, 0x41, 0x4e, 0x53,
0x46, 0x45, 0x52, 0x10, 0xd6, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x43, 0x53, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41,
0x4d, 0x45, 0x10, 0xd7, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d,
0x45, 0x10, 0xd8, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45,
0x10, 0xd9, 0x11, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x10,
0xda, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f,
0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x11,
0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48,
0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdc, 0x11, 0x12, 0x25,
0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x49,
0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41,
0x54, 0x45, 0x10, 0xdd, 0x11, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41,
0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xde, 0x11, 0x12, 0x2a, 0x0a, 0x25,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47,
0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43, 0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45,
0x10, 0xde, 0x11, 0x12, 0x2a, 0x0a, 0x25, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x54, 0x48, 0x52, 0x49, 0x44, 0x47, 0x41, 0x4d, 0x45, 0x42, 0x41, 0x4c, 0x41, 0x4e, 0x43,
0x45, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xdf, 0x11, 0x12,
0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45,
0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe0,
0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43,
0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d,
0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c,
0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f,
0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe3, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54,
0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe4, 0x11, 0x12,
0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54,
0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f,
0x52, 0x59, 0x10, 0xe5, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54,
0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe6, 0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49,
0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f,
0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d,
0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x54,
0x10, 0xeb, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4f, 0x42, 0x53, 0x45, 0x52, 0x56, 0x45, 0x10, 0xec, 0x11, 0x12,
0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d,
0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xed, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x47, 0x41, 0x4d, 0x45, 0x46,
0x52, 0x45, 0x45, 0x10, 0xee, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x53, 0x59, 0x4e, 0x43, 0x10,
0xef, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f,
0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf0, 0x11, 0x12, 0x19, 0x0a,
0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45,
0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf1, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x42, 0x49, 0x4c,
0x4c, 0x10, 0xf2, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
0x53, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf3, 0x11, 0x12, 0x18,
0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x4c, 0x4f,
0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf4, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49,
0x54, 0x10, 0xf5, 0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11,
0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f,
0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43,
0x45, 0x10, 0xf8, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49,
0x54, 0x43, 0x48, 0x10, 0xf9, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x10, 0xfa, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a,
0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45,
0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d,
0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12,
0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52,
0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41,
0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56,
0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7, 0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49,
0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47, 0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74,
0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xca, 0x3e, 0x42, 0x28, 0x5a, 0x26,
0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x61,
0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xdf, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52, 0x49, 0x56,
0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe0, 0x11, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x50, 0x52,
0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe1, 0x11, 0x12, 0x21, 0x0a, 0x1c,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49,
0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe2, 0x11, 0x12,
0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54,
0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x4c, 0x49, 0x53, 0x54, 0x10,
0xe3, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f,
0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49,
0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe4, 0x11, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x45, 0x54, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45,
0x52, 0x4f, 0x4f, 0x4d, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x52, 0x59, 0x10, 0xe5, 0x11, 0x12, 0x21,
0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x54,
0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xe6,
0x11, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44,
0x45, 0x53, 0x54, 0x52, 0x4f, 0x59, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x52, 0x4f, 0x4f,
0x4d, 0x10, 0xe7, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43,
0x53, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10,
0xe8, 0x11, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x51, 0x55, 0x45, 0x52, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe9, 0x11,
0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41,
0x4d, 0x45, 0x53, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xeb, 0x11, 0x12, 0x1a, 0x0a, 0x15,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x4f, 0x42,
0x53, 0x45, 0x52, 0x56, 0x45, 0x10, 0xec, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10,
0xed, 0x11, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x53, 0x59, 0x4e, 0x43, 0x47, 0x41, 0x4d, 0x45, 0x46, 0x52, 0x45, 0x45, 0x10, 0xee, 0x11, 0x12,
0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54,
0x54, 0x45, 0x52, 0x59, 0x53, 0x59, 0x4e, 0x43, 0x10, 0xef, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59,
0x4c, 0x4f, 0x47, 0x10, 0xf0, 0x11, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x4c, 0x4f, 0x47, 0x10, 0xf1,
0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4c,
0x4f, 0x54, 0x54, 0x45, 0x52, 0x59, 0x42, 0x49, 0x4c, 0x4c, 0x10, 0xf2, 0x11, 0x12, 0x18, 0x0a,
0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41,
0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf3, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x4c, 0x4f, 0x43, 0x10, 0xf4,
0x11, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41,
0x55, 0x44, 0x49, 0x45, 0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf5, 0x11, 0x12, 0x1a, 0x0a,
0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x41, 0x55, 0x44, 0x49, 0x45,
0x4e, 0x43, 0x45, 0x53, 0x49, 0x54, 0x10, 0xf6, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45,
0x10, 0xf7, 0x11, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x43, 0x4f, 0x4d, 0x4e, 0x4f, 0x54, 0x49, 0x43, 0x45, 0x10, 0xf8, 0x11, 0x12, 0x20, 0x0a,
0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47,
0x45, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x10, 0xf9, 0x11, 0x12,
0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x4e, 0x6f, 0x74,
0x69, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xfa, 0x11, 0x12, 0x18, 0x0a, 0x13,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52,
0x4f, 0x4f, 0x4d, 0x10, 0xc1, 0x3e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc2, 0x3e,
0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x44, 0x45,
0x53, 0x54, 0x52, 0x4f, 0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc3, 0x3e, 0x12, 0x1a, 0x0a, 0x15,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x52, 0x4f,
0x59, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc4, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54,
0x10, 0xc5, 0x3e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x5f, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0xc6, 0x3e, 0x12, 0x21,
0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x41, 0x55, 0x44, 0x49,
0x45, 0x4e, 0x43, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x52, 0x4f, 0x4f, 0x4d, 0x10, 0xc7,
0x3e, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50,
0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x46, 0x4c, 0x41, 0x47,
0x10, 0xc8, 0x3e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0xc9, 0x3e, 0x12, 0x17, 0x0a, 0x12,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x45, 0x76, 0x65,
0x6e, 0x74, 0x10, 0xca, 0x3e, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67,
0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x68, 0x61, 0x6c, 0x6c, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@ -30,6 +30,7 @@ enum OpResultCode_Game {
OPRC_AllocRoomIdFailed_Game = 1097; //id获取失败
OPRC_PrivateRoomCountLimit_Game = 1098; //
OPRC_RoomNotExit = 1099; //
OPRC_MatchAudience = 1100; //
OPRC_LowerRice_ScenceMax_Game = 1075; //
OPRC_LowerRice_PlayerMax_Game = 1076; //

View File

@ -10903,7 +10903,7 @@ type Config struct {
// Tp 类型:
// 1:小精灵快捷入口 On开关 Value地址
// 2: ...
// 2:比赛观战开关 On开关
// ...
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"`
On bool `protobuf:"varint,2,opt,name=On,proto3" json:"On,omitempty"`

View File

@ -1351,7 +1351,7 @@ message SCGuideConfig{
message Config{
// Tp
// 1: On开关 Value地址
// 2: ...
// 2: On开关
// ...
int32 Tp = 1;
bool On = 2;

File diff suppressed because it is too large Load Diff

View File

@ -837,6 +837,8 @@ message DB_GameFree {
int32 IsDrop = 72;
int32 IsCustom = 73;
}
message DB_GameFreeArray {
@ -1755,9 +1757,13 @@ message DB_VIPShow {
int32 Id = 1;
int32 SkinId = 2;
int32 Type = 2;
int32 VIPLevel = 3;
int32 SkinId = 3;
int32 VIPLevel = 4;
string VIPDes = 5;
}

File diff suppressed because it is too large Load Diff

View File

@ -186,6 +186,7 @@ message WGCreateScene {
int32 PlayerNum = 21;
bool RealCtrl = 22;
repeated int32 ChessRank = 23;
int32 MatchInfoId = 24;
}
//PACKET_WG_DESTROYSCENE

View File

@ -651,6 +651,7 @@ type SCTienLenRoomInfo struct {
OutCardRecord []int32 `protobuf:"varint,30,rep,packed,name=OutCardRecord,proto3" json:"OutCardRecord,omitempty"` //已打出去的牌
IsOutRecord bool `protobuf:"varint,31,opt,name=IsOutRecord,proto3" json:"IsOutRecord,omitempty"` //是否能用记牌器
ItemRecExpireTime int64 `protobuf:"varint,32,opt,name=ItemRecExpireTime,proto3" json:"ItemRecExpireTime,omitempty"` //记牌器到期时间
TMInfoId int32 `protobuf:"varint,33,opt,name=TMInfoId,proto3" json:"TMInfoId,omitempty"` //比赛配置ID
}
func (x *SCTienLenRoomInfo) Reset() {
@ -888,6 +889,13 @@ func (x *SCTienLenRoomInfo) GetItemRecExpireTime() int64 {
return 0
}
func (x *SCTienLenRoomInfo) GetTMInfoId() int32 {
if x != nil {
return x.TMInfoId
}
return 0
}
//房间状态更新
type SCTienLenRoomState struct {
state protoimpl.MessageState
@ -1501,6 +1509,7 @@ type SCTienLenCard struct {
Cards []int32 `protobuf:"varint,1,rep,packed,name=Cards,proto3" json:"Cards,omitempty"` //手牌
IsOutRecord bool `protobuf:"varint,2,opt,name=IsOutRecord,proto3" json:"IsOutRecord,omitempty"` // 是否有出牌记录
SnId int32 `protobuf:"varint,3,opt,name=SnId,proto3" json:"SnId,omitempty"` //玩家id
}
func (x *SCTienLenCard) Reset() {
@ -1549,6 +1558,13 @@ func (x *SCTienLenCard) GetIsOutRecord() bool {
return false
}
func (x *SCTienLenCard) GetSnId() int32 {
if x != nil {
return x.SnId
}
return 0
}
//测试数据
type SCTienLenCardTest struct {
state protoimpl.MessageState
@ -2357,7 +2373,7 @@ var file_tienlen_proto_rawDesc = []byte{
0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65,
0x76, 0x65, 0x6c, 0x22, 0x23, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61,
0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xab, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54,
0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xc7, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16,
0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f,
@ -2416,80 +2432,83 @@ var file_tienlen_proto_rawDesc = []byte{
0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d,
0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20,
0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69,
0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61,
0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03,
0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12,
0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72,
0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61,
0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03,
0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a,
0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f,
0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61,
0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c,
0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61,
0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12,
0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49,
0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65,
0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65,
0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02,
0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57,
0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69,
0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69,
0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69,
0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61,
0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57,
0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52,
0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64,
0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64,
0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d,
0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65,
0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74,
0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20,
0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c,
0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c,
0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d,
0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f,
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12,
0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20,
0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12,
0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73,
0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57,
0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69,
0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69,
0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69,
0x6e, 0x22, 0x47, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61,
0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75,
0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49,
0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53,
0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f,
0x49, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x54, 0x4d, 0x49, 0x6e, 0x66, 0x6f,
0x49, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52,
0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16,
0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f,
0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43,
0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02,
0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x8e, 0x01,
0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65,
0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f,
0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52,
0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74,
0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43,
0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x46,
0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65,
0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10,
0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73,
0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x49,
0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49,
0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12,
0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53,
0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72,
0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a,
0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49,
0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05,
0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f,
0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69,
0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20,
0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a,
0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x73,
0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63,
0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61,
0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53,
0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b,
0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72,
0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72,
0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x41, 0x64,
0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12,
0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x36,
0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e,
0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52,
0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c,
0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20,
0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x57,
0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c,
0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f,
0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73,
0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x4c, 0x6f, 0x73, 0x65,
0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f,
0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69,
0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20,
0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x5b, 0x0a,
0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14,
0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43,
0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63,
0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74,
0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03,
0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74,
0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65,

View File

@ -116,6 +116,7 @@ message SCTienLenRoomInfo {
repeated int32 OutCardRecord = 30 ;//
bool IsOutRecord = 31;//
int64 ItemRecExpireTime = 32; //
int32 TMInfoId = 33; //ID
}
//
@ -185,6 +186,7 @@ message SCTienLenSmallGameBilled {
message SCTienLenCard {
repeated int32 Cards = 1; //
bool IsOutRecord = 2; //
int32 SnId = 3; //id
}
//

2
public

@ -1 +1 @@
Subproject commit 5436469c04056f83ab69b52b7cdeb5d21832fa94
Subproject commit fd8bef907ea15489504529da70f72038444b54e0

View File

@ -183,94 +183,6 @@ failed:
return nil
}
type CSAudienceEnterRoomHandler struct {
}
func (this *CSAudienceEnterRoomHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSAudienceEnterRoomHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSEnterRoom); ok {
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
return nil
}
var code = gamehall.OpResultCode_Game_OPRC_Sucess_Game
var sp ScenePolicy
var dbGameFree *server.DB_GameFree
var cfg *webapiproto.GameFree
scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId()))
if scene == nil {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler scene == nil")
goto failed
}
if !scene.CanAudience() {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.CanAudience() %v", scene.sceneId)
goto failed
}
if scene.IsMatchScene() && !PlatformMgrSingleton.IsMatchAudience(p.Platform, p.SnId) {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.IsMatchAudience() %v", scene.sceneId)
goto failed
}
if p.scene != nil {
code = gamehall.OpResultCode_Game_OPRC_CannotWatchReasonInOther_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler p.scene != nil")
goto failed
}
cfg = PlatformMgrSingleton.GetGameFree(p.Platform, scene.dbGameFree.Id)
if cfg != nil && (cfg.GroupId != scene.groupId || cfg.GroupId == 0) {
if scene.limitPlatform != nil {
if scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.IdStr {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Tracef("CSEnterRoomHandler ScenePolicy(gameid:%v mode:%v) scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.Name", scene.gameId, scene.gameMode)
goto failed
}
}
}
//if !scene.starting {
// code = gamehall.OpResultCode_Game_OPRC_CannotWatchReasonRoomNotStart_Game
// logger.Logger.Trace("CSAudienceEnterRoomHandler !scene.starting")
// goto failed
//}
if scene.deleting {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler scene is deleting")
goto failed
}
if scene.closed {
code = gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler scene is closed")
goto failed
}
//if scene.IsCoinScene() || scene.IsHundredScene() {
// code = gamehall.OpResultCode_Game_OPRC_Error_Game
// logger.Logger.Trace("CSAudienceEnterRoomHandler scene is IsCoinScene IsHundredScene")
// goto failed
//}
sp = GetScenePolicy(scene.gameId, scene.gameMode)
if sp == nil {
code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game
logger.Logger.Tracef("CSAudienceEnterRoomHandler ScenePolicy(gameid:%v mode:%v) not registe", scene.gameId, scene.gameMode)
goto failed
}
dbGameFree = scene.dbGameFree
code = gamehall.OpResultCode_Game(CoinSceneMgrSingleton.AudienceEnter(p, dbGameFree.GetId(), msg.GetRoomId(), nil, true))
failed:
if code != gamehall.OpResultCode_Game_OPRC_Sucess_Game {
resp := &gamehall.SCEnterRoom{
OpRetCode: code,
}
proto.SetDefaults(resp)
p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_ENTERROOM), resp)
}
}
return nil
}
type CSReturnRoomPacketFactory struct {
}
type CSReturnRoomHandler struct {
@ -1235,10 +1147,95 @@ func (this *CSRecordAndNoticeHandler) Process(s *netlib.Session, packetid int, d
return nil
}
func CSAudienceEnterRoomHandler(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Trace("CSAudienceEnterRoomHandler Process recv ", data)
msg, ok := data.(*gamehall.CSEnterRoom)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
return nil
}
var code = gamehall.OpResultCode_Game_OPRC_Error_Game
var sp ScenePolicy
var cfg *webapiproto.GameFree
// 房间是否存在
scene := SceneMgrSingleton.GetScene(int(msg.GetRoomId()))
if scene == nil {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler scene == nil")
goto failed
}
// 房间是否正在销毁
if scene.deleting {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler scene is deleting")
goto failed
}
// 房间是否已经关闭
if scene.closed {
code = gamehall.OpResultCode_Game_OPRC_RoomHadClosed_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler scene is closed")
goto failed
}
// 玩家没有在房间中
if p.scene != nil {
code = gamehall.OpResultCode_Game_OPRC_CannotWatchReasonInOther_Game
logger.Logger.Trace("CSAudienceEnterRoomHandler p.scene != nil")
goto failed
}
// 房间是否可以观战
if !scene.CanAudience() {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.CanAudience() %v", scene.sceneId)
goto failed
}
// 比赛场白名单观众
if scene.IsMatchScene() && !PlatformMgrSingleton.IsMatchAudience(p.Platform, p.SnId) {
code = gamehall.OpResultCode_Game_OPRC_MatchAudience
logger.Logger.Tracef("CSAudienceEnterRoomHandler scene.IsMatchAudience() %v", scene.sceneId)
goto failed
}
// 是不是相同平台
cfg = PlatformMgrSingleton.GetGameFree(p.Platform, scene.dbGameFree.Id)
if cfg == nil || (scene.limitPlatform != nil && scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.IdStr) {
code = gamehall.OpResultCode_Game_OPRC_RoomNotExist_Game
logger.Logger.Tracef("CSEnterRoomHandler ScenePolicy(gameid:%v mode:%v) scene.limitPlatform.Isolated && p.Platform != scene.limitPlatform.Name", scene.gameId, scene.gameMode)
goto failed
}
// 游戏规则是否存在
sp = GetScenePolicy(scene.gameId, scene.gameMode)
if sp == nil {
code = gamehall.OpResultCode_Game_OPRC_GameNotExist_Game
logger.Logger.Tracef("CSAudienceEnterRoomHandler ScenePolicy(gameid:%v mode:%v) not registe", scene.gameId, scene.gameMode)
goto failed
}
switch {
case scene.IsCoinScene():
code = gamehall.OpResultCode_Game(CoinSceneMgrSingleton.AudienceEnter(p, cfg.GetDbGameFree().GetId(), msg.GetRoomId(), nil, true))
case scene.IsHundredScene():
case scene.IsMatchScene():
code = gamehall.OpResultCode_Game(MatchSceneMgrSingleton.AudienceEnter(p, cfg.GetDbGameFree().GetId(), int(msg.GetRoomId()), nil, true))
}
failed:
if code != gamehall.OpResultCode_Game_OPRC_Sucess_Game {
resp := &gamehall.SCEnterRoom{
OpRetCode: code,
}
p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SC_ENTERROOM), resp)
}
return nil
}
func init() {
// 观众进入房间
common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &CSAudienceEnterRoomHandler{})
netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &CSEnterRoomPacketFactory{})
// 返回房间
common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomHandler{})
netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_RETURNROOM), &CSReturnRoomPacketFactory{})
@ -1266,4 +1263,7 @@ func init() {
//我的游戏信息及平台公告
common.RegisterHandler(int(gamehall.GameHallPacketID_PACKET_CS_COMNOTICE), &CSRecordAndNoticeHandler{})
netlib.RegisterFactory(int(gamehall.GameHallPacketID_PACKET_CS_COMNOTICE), &CSRecordAndNoticePacketFactory{})
// 观众进入房间
common.Register(int(gamehall.GameHallPacketID_PACKET_CS_AUDIENCE_ENTERROOM), &gamehall.CSEnterRoom{}, CSAudienceEnterRoomHandler)
}

View File

@ -253,8 +253,11 @@ func init() {
p.GameCoinTs = gameCoinTs
p.dirty = true
}
CoinSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason()))
if scene.IsMatchScene() {
scene.AudienceLeave(p, int(msg.GetReason()))
} else {
CoinSceneMgrSingleton.PlayerLeave(p, int(msg.GetReason()))
}
//变化金币
p.dirty = true
@ -639,7 +642,7 @@ func init() {
if msg, ok := pack.(*serverproto.GWChangeSceneEvent); ok {
scene := SceneMgrSingleton.GetScene(int(msg.GetSceneId()))
if scene != nil {
scene.PlayerTryChange()
//scene.PlayerTryChange()
}
}
return nil

View File

@ -199,17 +199,25 @@ func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) er
if v.matchCtx == nil {
continue
}
p := PlayerMgrSington.GetPlayerBySnId(v.matchCtx.copySnid)
d := &tournament.MatchPlayer{
SnId: v.matchCtx.copySnid,
Name: v.Name,
HeadUrl: v.HeadUrl,
Name: p.GetName(),
UseRoleId: v.matchCtx.copyRoleId,
UseSkinId: v.matchCtx.copySkinId,
Rank: v.matchCtx.rank,
Rank: TournamentMgr.GetRank(tm.SortId, v.matchCtx.copySnid),
Score: v.matchCtx.grade,
}
room.Players = append(room.Players, d)
}
sort.Slice(room.Players, func(i, j int) bool {
if room.Players[i].Rank == room.Players[j].Rank {
return room.Players[i].SnId < room.Players[j].SnId
}
return room.Players[i].Rank < room.Players[j].Rank
})
pack.List = append(pack.List, room)
}
p.SendToClient(int(tournament.TOURNAMENTID_PACKET_TM_SCRoomList), pack)

View File

@ -370,7 +370,7 @@ func (m *CoinSceneMgr) OnPlatformDestroy(p *Platform) {
}
}
}
SceneMgrSingleton.DoDelete(ids, true)
SceneMgrSingleton.SendGameDestroy(ids, true)
}
func (m *CoinSceneMgr) OnPlatformChangeDisabled(p *Platform, disabled bool) {
@ -395,7 +395,7 @@ func (m *CoinSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCfg *web
for _, scene := range cps.scenes {
ids = append(ids, scene.sceneId)
}
SceneMgrSingleton.DoDelete(ids, true)
SceneMgrSingleton.SendGameDestroy(ids, true)
m.TouchCreateRoom(p.IdStr, newCfg.DbGameFree.Id)
}
}
@ -414,7 +414,7 @@ func (m *CoinSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFreeId int
}
}
}
SceneMgrSingleton.DoDelete(ids, true)
SceneMgrSingleton.SendGameDestroy(ids, true)
}
//=========================PlatformGameGroupObserver==============================

View File

@ -330,7 +330,7 @@ func (csp *CoinScenePool) onPlayerLeave(s *Scene, p *Player) {
// 玩家离开结算空房间的私人房
if s.IsPrivateScene() {
if s.IsEmpty() {
s.DoDelete(false)
s.SendGameDestroy(false)
}
return
}
@ -345,7 +345,7 @@ func (csp *CoinScenePool) onPlayerLeave(s *Scene, p *Player) {
}
}
if hasCnt > int(csp.dbGameFree.GetCreateRoomNum()) {
s.DoDelete(false)
s.SendGameDestroy(false)
}
}
}

View File

@ -323,15 +323,7 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e
case *webapi.SpiritConfig:
PlatformMgrSingleton.GetConfig(config.Platform).SpiritConfig = config
if !isInit {
PlayerMgrSington.BroadcastMessageToPlatform(config.Platform, int(playerproto.PlayerPacketID_PACKET_SCDataConfig), &playerproto.SCDataConfig{
Cfg: []*playerproto.Config{
{
Tp: 1,
On: config.GetOn() == 1,
Value: config.GetUrl(),
},
},
})
PlayerMgrSington.BroadcastDataConfigToPlatform(config.Platform, common.DataConfigSprite)
}
default:
logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey)
@ -404,8 +396,20 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c
switch event.Type {
case clientv3.EventTypePut:
PlatformMgrSingleton.AddMatchAudience(config)
if !isInit {
p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId())
if p != nil {
p.SCDataConfig(common.DataConfigMatchAudience)
}
}
case clientv3.EventTypeDelete:
PlatformMgrSingleton.DelMatchAudience(config)
if !isInit {
p := PlayerMgrSington.GetPlayerBySnId(config.GetSnId())
if p != nil {
p.SCDataConfig(common.DataConfigMatchAudience)
}
}
}
default:

View File

@ -80,18 +80,14 @@ func (this *GameSession) GetSrvId() int32 {
// 关闭其上的所有场景
func (this *GameSession) CloseAllScene() {
for sceneId, scene := range this.scenes {
if scene.IsMiniGameScene() {
} else {
scDestroyRoom := &gamehall_proto.SCDestroyRoom{
RoomId: proto.Int(sceneId),
OpRetCode: gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game,
IsForce: proto.Int(1),
}
proto.SetDefaults(scDestroyRoom)
scene.Broadcast(int(gamehall_proto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0)
SceneMgrSingleton.DestroyScene(sceneId, true)
scDestroyRoom := &gamehall_proto.SCDestroyRoom{
RoomId: proto.Int(sceneId),
OpRetCode: gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game,
IsForce: proto.Int(1),
}
proto.SetDefaults(scDestroyRoom)
scene.Broadcast(int(gamehall_proto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0)
SceneMgrSingleton.DestroyScene(sceneId, true)
}
this.scenes = nil
this.players = nil
@ -173,6 +169,7 @@ func (this *GameSession) AddScene(s *Scene) {
TotalOfGames: proto.Int32(s.totalRound),
BaseScore: proto.Int32(s.BaseScore),
PlayerNum: proto.Int(s.playerNum),
MatchInfoId: s.MatchInfoId,
}
var platform *Platform
if s.limitPlatform != nil {

View File

@ -373,7 +373,7 @@ func (this *HundredSceneMgr) OnPlatformDestroy(p *Platform) {
for _, scene := range ss {
ids = append(ids, scene.sceneId)
}
SceneMgrSingleton.DoDelete(ids, true)
SceneMgrSingleton.SendGameDestroy(ids, true)
}
}
@ -392,7 +392,7 @@ func (this *HundredSceneMgr) OnPlatformGameFreeUpdate(p *Platform, oldCfg, newCf
}
if scenes, exist := this.scenesOfPlatform[p.IdStr]; exist {
if s, ok := scenes[newCfg.DbGameFree.Id]; ok {
s.DoDelete(false)
s.SendGameDestroy(false)
}
}
}
@ -412,7 +412,7 @@ func (this *HundredSceneMgr) OnPlatformDestroyByGameFreeId(p *Platform, gameFree
ids = append(ids, scene.sceneId)
}
}
SceneMgrSingleton.DoDelete(ids, true)
SceneMgrSingleton.SendGameDestroy(ids, true)
}
}

View File

@ -5,6 +5,7 @@ import (
"mongo.games.com/game/common"
"mongo.games.com/game/proto"
hallproto "mongo.games.com/game/protocol/gamehall"
"mongo.games.com/game/protocol/server"
)
@ -59,7 +60,7 @@ func (ms *MatchSceneMgr) NewScene(tm *TmMatch, isFinals bool, round int32) *Scen
params := []int64{tm.SortId, int64(finals), int64(round), int64(curPlayerNum), int64(nextNeed), int64(tm.gmd.MatchType)}
scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, gameId, int(gameMode), common.SceneMode_Match, 1,
0, params, gs, limitPlatform, groupId, tm.dbGameFree, tm.dbGameFree.GetId())
0, params, gs, limitPlatform, groupId, tm.dbGameFree, tm.dbGameFree.GetId(), tm.gmd.Id)
if scene != nil {
scene.matchId = tm.SortId
return scene
@ -172,11 +173,22 @@ func (ms *MatchSceneMgr) OnDestroyScene(sceneId int) {
delete(ms.scenes, sceneId)
}
func (ms *MatchSceneMgr) AudienceEnter(p *Player, id int32, roomId int, exclude []int32, ischangeroom bool) hallproto.OpResultCode {
scene, ok := ms.scenes[roomId]
if !ok {
return hallproto.OpResultCode_OPRC_RoomHadClosed
}
if !scene.AudienceEnter(p, ischangeroom) {
return hallproto.OpResultCode_OPRC_RoomHadClosed
}
return hallproto.OpResultCode_OPRC_Sucess
}
func (ms *MatchSceneMgr) MatchStop(tm *TmMatch) {
if SceneMgrSingleton.scenes != nil && tm != nil {
for _, scene := range SceneMgrSingleton.scenes {
if scene.IsMatchScene() && scene.matchId == tm.SortId {
scene.DoDelete(false)
scene.SendGameDestroy(false)
}
}
}

View File

@ -1662,7 +1662,7 @@ func (this *Player) OnLogouted() {
this.Save(true)
}
func (this *Player) MarshalData(gameid int) (d []byte, e error) {
func (this *Player) MarshalData() (d []byte, e error) {
d, e = netlib.Gob.Marshal(this.PlayerData)
return
}
@ -2415,21 +2415,6 @@ func (this *Player) GetIP() string {
return this.Ip
}
func (this *Player) CreateScene(sceneId, gameId, gameMode, sceneMode int, numOfGames int32, params []int64, dbGameFree *serverproto.DB_GameFree) (*Scene, hallproto.OpResultCode_Game) {
gs := GameSessMgrSington.GetMinLoadSess(gameId)
if gs == nil {
logger.Logger.Warnf("(this *Player) EnterScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId)
return nil, hallproto.OpResultCode_Game_OPRC_SceneServerMaintain_Game
}
s := SceneMgrSingleton.CreateScene(0, this.SnId, sceneId, gameId, gameMode, sceneMode, 1, numOfGames, params, gs, this.GetPlatform(), 0, dbGameFree, dbGameFree.GetId())
if s == nil {
logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId)
return nil, hallproto.OpResultCode_Game_OPRC_Error_Game
}
return s, hallproto.OpResultCode_Game_OPRC_Sucess_Game
}
func (this *Player) CreateLocalGameScene(sceneId, gameId, gameSite, sceneMode, playerNum int, params []int64,
dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32) (*Scene, hallproto.OpResultCode_Game) {
gs := GameSessMgrSington.GetMinLoadSess(gameId)
@ -3101,8 +3086,8 @@ func (this *Player) SendPlayerInfo() {
this.SCItems()
// 引导配置
this.SCGuide()
// 小精灵配置
this.SCSpirit()
// 其它配置
this.SCDataConfig(common.DataConfigAll)
}
//func (this *Player) SendJackpotInfo() {
@ -3832,9 +3817,9 @@ func (this *Player) SCVIPInfo() {
logger.Logger.Tracef("send vipinfo to client:%v", pack)
}
func (this *Player) GetVIPExpByPay(payTotal int32) int32 {
func (this *Player) GetVIPExpByPay(payTotal int64) int64 {
vips := VipMgrSington.GetVIPcfg(this.Platform)
return int32(math.Floor(float64(payTotal) * vips.MoneyRatio / 100))
return payTotal * int64(vips.MoneyRatio)
}
func (this *Player) VIPDraw(id, vip int32) {
@ -3993,7 +3978,7 @@ func (this *Player) GetVIPLevel() int32 {
vips := VipMgrSington.GetVIPcfg(this.Platform)
vip := int32(0)
if vips != nil && this.MoneyPayTotal != 0 {
allExp := int64(float64(this.MoneyPayTotal) * vips.MoneyRatio)
allExp := this.MoneyPayTotal * int64(vips.MoneyRatio)
for _, v := range vips.List {
if allExp >= int64(v.VipEx) {
vip = v.VipId
@ -4126,7 +4111,7 @@ func (this *Player) GetPayGoodsInfo() {
this.dirty = true
this.SendDiffData()
info.Amount[2] = this.GetVIPExpByPay(info.ConsumeNum)
info.Amount[2] = int32(this.GetVIPExpByPay(int64(info.ConsumeNum)))
BagMgrSingleton.AddItems(this, items, 0, info.GainWay, info.Operator, info.Remark, 0, 0, false)
@ -4951,20 +4936,66 @@ func (this *Player) SCGuide() {
logger.Logger.Tracef("SCGuideConfig: %v", pack)
}
func (this *Player) SCSpirit() {
cfg := PlatformMgrSingleton.GetConfig(this.Platform).SpiritConfig
if cfg == nil {
// DataConfigFuncMap 配置查询方法
var DataConfigFuncMap = map[int]func(platform string, p *Player) *playerproto.Config{
common.DataConfigSprite: func(platform string, p *Player) *playerproto.Config {
cfg := PlatformMgrSingleton.GetConfig(platform).SpiritConfig
if cfg == nil {
return nil
}
return &playerproto.Config{
Tp: common.DataConfigSprite,
On: cfg.On == 1,
Value: cfg.Url,
}
},
common.DataConfigMatchAudience: func(platform string, p *Player) *playerproto.Config {
if p == nil {
return nil
}
cfg := PlatformMgrSingleton.GetConfig(platform).MatchAudience
if cfg == nil {
return nil
}
d, ok := cfg[p.GetSnId()]
if !ok || d == nil {
return &playerproto.Config{
Tp: common.DataConfigMatchAudience,
On: false,
}
}
return &playerproto.Config{
Tp: common.DataConfigMatchAudience,
On: true,
}
},
}
// SCDataConfig 通知配置
// tp 类型 0所有 1小精灵 2比赛观众开关
func (this *Player) SCDataConfig(tp int) {
if this == nil {
return
}
pack := &playerproto.SCDataConfig{
Cfg: []*playerproto.Config{
{
Tp: 1,
On: cfg.On == 1,
Value: cfg.Url,
},
},
pack := &playerproto.SCDataConfig{}
if tp == common.DataConfigAll {
for _, f := range DataConfigFuncMap {
d := f(this.Platform, this)
if d != nil {
pack.Cfg = append(pack.Cfg, d)
}
}
} else {
f, ok := DataConfigFuncMap[tp]
if ok {
d := f(this.Platform, this)
if d != nil {
pack.Cfg = append(pack.Cfg, d)
}
}
}
if len(pack.Cfg) > 0 {
this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCDataConfig), pack)
logger.Logger.Tracef("SCDataConfig: %v", pack)
}
this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCDataConfig), pack)
logger.Logger.Tracef("SCDataConfig: %v", pack)
}

View File

@ -15,6 +15,7 @@ import (
"mongo.games.com/game/common"
"mongo.games.com/game/model"
"mongo.games.com/game/proto"
playerproto "mongo.games.com/game/protocol/player"
serverproto "mongo.games.com/game/protocol/server"
"mongo.games.com/game/worldsrv/internal"
)
@ -328,6 +329,21 @@ func (this *PlayerMgr) BroadcastMessageToPlatform(platform string, packetid int,
}
}
func (this *PlayerMgr) BroadcastDataConfigToPlatform(platform string, tp int) {
packetId := int(playerproto.PlayerPacketID_PACKET_SCDataConfig)
pack := &playerproto.SCDataConfig{}
f, ok := DataConfigFuncMap[tp]
if ok {
d := f(platform, nil)
if d != nil {
pack.Cfg = append(pack.Cfg, d)
}
}
if len(pack.Cfg) > 0 {
this.BroadcastMessageToPlatform(platform, packetId, pack)
}
}
func (this *PlayerMgr) BroadcastMessageToPlatformByFunc(platform string, packetid int, rawpack interface{}, f func(p *Player) bool) {
if platform == "" {
this.BroadcastMessage(packetid, rawpack)

View File

@ -18,7 +18,6 @@ import (
"mongo.games.com/game/model"
"mongo.games.com/game/proto"
hallproto "mongo.games.com/game/protocol/gamehall"
playerproto "mongo.games.com/game/protocol/player"
serverproto "mongo.games.com/game/protocol/server"
"mongo.games.com/game/srvdata"
)
@ -50,11 +49,11 @@ type PlayerGameCtx struct {
type Scene struct {
sceneId int //场景id
gameId int //游戏id
gameMode int //游戏模式
gameMode int //游戏模式(玩法)
sceneMode int //房间模式,参考common.SceneMode_XXX
params []int64 //场景参数
paramsEx []int32 //其他扩展参数
playerNum int //人数
playerNum int //房间最大人数
robotNum int //机器人数量
robotLimit int //最大限制机器人数量
preInviteRobNum int //准备邀请机器人的数量
@ -104,6 +103,7 @@ type Scene struct {
gameSite int //tienlen游戏场次区分 1.初级 2.中级 3.高级场
BaseScore int32 //tienlen游戏底分
matchId int64 //比赛场id
MatchInfoId int32 // 比赛场配置id
csp *CoinScenePool // 所在场景池
hp *HundredSceneMgr // 百人场房间池
@ -145,7 +145,7 @@ func NewScene(agentor, creator int32, id, gameId, gameMode, sceneMode int, clycl
s.playerNum = int(sp.GetPlayerNum(s))
s.lastTime = s.createTime
if s.IsHallScene() || s.IsCoinScene() {
if s.IsCoinScene() {
code := SceneMgrSingleton.AllocReplayCode()
s.replayCode = code
}
@ -154,6 +154,9 @@ func NewScene(agentor, creator int32, id, gameId, gameMode, sceneMode int, clycl
}
if s.IsMatchScene() {
s.BaseScore = 10
if len(paramsEx) > 1 {
s.MatchInfoId = paramsEx[1]
}
}
s.sp.OnStart(s)
return s
@ -228,6 +231,13 @@ func (this *Scene) RobotIsLimit() bool {
return false
}
func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx {
if ctx, exist := this.gameCtx[snid]; exist {
return ctx
}
return nil
}
func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
logger.Logger.Infof("(this *Scene:%v) PlayerEnter(%v, %v) ", this.sceneId, p.SnId, pos)
@ -273,15 +283,6 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
this.players[p.SnId] = p
this.gameSess.AddPlayer(p)
switch {
case this.IsCoinScene():
case this.IsHundredScene():
case this.IsMatchScene():
}
// 如果正在等待比赛,退赛
if !this.IsMatchScene() {
isWaiting, tmid := TournamentMgr.IsMatchWaiting(p.Platform, p.SnId)
@ -458,8 +459,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
logger.Logger.Tracef("(this *Scene) PlayerEnter(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit)
}
//todo:send add msg to gamesrv
data, err := p.MarshalData(this.gameId)
data, err := p.MarshalData()
if err == nil {
var gateSid int64
if p.gateSess != nil {
@ -563,158 +563,146 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
}
}
func ExePMCmd(s *netlib.Session, cmd string) {
CSPMCmd := &playerproto.CSPMCmd{
Cmd: proto.String(cmd),
func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool {
logger.Logger.Infof("(this *Scene:%v) AudienceEnter(%v) ", this.sceneId, p.SnId)
p.scene = this
takeCoin := p.Coin
p.takeCoin = takeCoin
this.audiences[p.SnId] = p
this.gameSess.AddPlayer(p)
data, err := p.MarshalData()
if err != nil {
return false
}
proto.SetDefaults(CSPMCmd)
logger.Logger.Trace("CSPMCmd:", CSPMCmd)
s.Send(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), CSPMCmd)
}
func (this *Scene) GetPlayerGameCtx(snid int32) *PlayerGameCtx {
if ctx, exist := this.gameCtx[snid]; exist {
return ctx
var gateSid int64
if p.gateSess != nil {
if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil {
sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0)
gateSid = sessionId.Get()
}
}
return nil
}
func (this *Scene) PlayerLeave(p *Player, reason int) {
logger.Logger.Infof("(this *Scene:%v) PlayerLeave(%v, %v) ", this.sceneId, p.SnId, reason)
//if !this.IsMatchScene() {
//pack := &hall_proto.SCLeaveRoom{
// Reason: proto.Int(reason),
// OpRetCode: hall_proto.OpResultCode_Game_OPRC_Sucess_Game,
// Mode: proto.Int(0),
// RoomId: proto.Int(this.sceneId),
//}
//proto.SetDefaults(pack)
//p.SendToClient(int(hall_proto.GameHallPacketID_PACKET_SC_LEAVEROOM), pack)
pack := &hallproto.SCQuitGame{
Id: int32(this.dbGameFree.Id),
Reason: proto.Int(reason),
msg := &serverproto.WGPlayerEnter{
Sid: proto.Int64(p.sid),
SnId: proto.Int32(p.SnId),
GateSid: proto.Int64(gateSid),
SceneId: proto.Int(this.sceneId),
PlayerData: data,
TakeCoin: takeCoin,
IsLoaded: proto.Bool(ischangeroom),
IsQM: false,
IParams: p.MarshalIParam(),
SParams: p.MarshalSParam(),
CParams: p.MarshalCParam(),
}
pack.OpCode = hallproto.OpResultCode_Game_OPRC_Sucess_Game
proto.SetDefaults(pack)
p.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_QUITGAME), pack)
//}
//其他人直接从房间退出来
this.DelPlayer(p)
// 玩家最后所在游戏
p.LastGameId = int(this.dbGameFree.GetGameId())
if !p.IsRob {
if !p.IsRob { //保存下进入时的环境
p.enterts = time.Now()
this.gameCtx[p.SnId] = &PlayerGameCtx{
takeCoin: p.takeCoin,
enterTs: p.enterts.Unix(),
}
this.lastTime = time.Now()
}
this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_AUDIENCEENTER), msg)
return true
}
func (this *Scene) lastScene(p *Player) {
// 记录玩家在每个游戏场次最后进入的房间号
// 只记录金币场
if this.IsCoinScene() {
const MINHOLD = 10
const MAXHOLD = 20
holdCnt := MINHOLD
if this.csp != nil {
holdCnt = this.csp.GetHasTruePlayerSceneCnt() + 2
if holdCnt < MINHOLD {
holdCnt = MINHOLD
}
if holdCnt > MAXHOLD {
holdCnt = MAXHOLD
}
}
if p.lastSceneId == nil {
p.lastSceneId = make(map[int32][]int32)
}
id := this.dbGameFree.GetId()
if sceneIds, exist := p.lastSceneId[id]; exist {
if !common.InSliceInt32(sceneIds, int32(this.sceneId)) {
sceneIds = append(sceneIds, int32(this.sceneId))
cnt := len(sceneIds)
if cnt > holdCnt {
sceneIds = sceneIds[cnt-holdCnt:]
}
p.lastSceneId[id] = sceneIds
}
} else {
p.lastSceneId[id] = []int32{int32(this.sceneId)}
}
}
}
func (this *Scene) DelPlayer(p *Player) bool {
if p.scene != this {
inroomid := 0
roomId := 0
if p.scene != nil {
inroomid = p.scene.sceneId
roomId = p.scene.sceneId
}
logger.Logger.Warnf("(this *Scene) DelPlayer found player:%v in room:%v but room:%v", p.SnId, inroomid, this.sceneId)
logger.Logger.Errorf("DelPlayer found player:%v in room:%v but room:%v", p.SnId, roomId, this.sceneId)
}
if this.gameSess != nil {
this.gameSess.DelPlayer(p)
}
delete(this.players, p.SnId)
// 玩家离开游戏
if _, ok := this.players[p.SnId]; ok {
delete(this.players, p.SnId)
if p.IsRobot() {
this.robotNum--
}
// 记录玩家最近玩游戏的房间
this.lastScene(p)
// 玩家最后所在游戏
p.LastGameId = int(this.dbGameFree.GetGameId())
}
// 观众离开游戏
if _, ok := this.audiences[p.SnId]; ok {
delete(this.audiences, p.SnId)
}
for k, v := range this.seats {
if v != nil && v.SnId == p.SnId {
p.pos = -1
this.seats[k] = nil
break
}
}
if !p.IsRob {
delete(this.gameCtx, p.SnId)
}
p.scene = nil
SceneMgrSingleton.OnPlayerLeaveScene(this, p)
switch {
case this.IsHundredScene():
//case this.IsHallScene():
// PlatformMgrSingleton.OnPlayerLeaveScene(this, p)
// for i := 0; i < this.playerNum; i++ {
// if this.seats[i] == p {
// p.pos = -1
// this.seats[i] = nil
// break
// }
// }
case this.IsCoinScene() || this.IsMatchScene():
for i := 0; i < this.playerNum; i++ {
if this.seats[i] == p {
p.pos = -1
this.seats[i] = nil
break
}
}
if !p.IsRob {
this.lastTime = time.Now()
}
if p.IsRob {
this.robotNum--
name := this.GetSceneName()
logger.Logger.Tracef("(this *Scene) PlayerLeave(%v) robot(%v) robotlimit(%v)", name, this.robotNum, this.robotLimit)
}
//from gameserver, so don't need send msg
return true
}
func (this *Scene) AudienceEnter(p *Player, ischangeroom bool) bool {
logger.Logger.Infof("(this *Scene:%v) AudienceEnter(%v) ", this.sceneId, p.SnId)
p.scene = this
this.audiences[p.SnId] = p
this.gameSess.AddPlayer(p)
//todo:send add msg to gamesrv
data, err := p.MarshalData(this.gameId)
if err == nil {
var gateSid int64
if p.gateSess != nil {
if srvInfo, ok := p.gateSess.GetAttribute(srvlib.SessionAttributeServerInfo).(*srvlibproto.SSSrvRegiste); ok && srvInfo != nil {
sessionId := srvlib.NewSessionIdEx(srvInfo.GetAreaId(), srvInfo.GetType(), srvInfo.GetId(), 0)
gateSid = sessionId.Get()
}
}
isQuMin := false
//if !p.IsRob {
// pt := PlatformMgrSingleton.GetPackageTag(p.PackageID)
// if pt != nil && pt.SpreadTag == 1 {
// isQuMin = true
// }
//}
msg := &serverproto.WGPlayerEnter{
Sid: proto.Int64(p.sid),
SnId: proto.Int32(p.SnId),
GateSid: proto.Int64(gateSid),
SceneId: proto.Int(this.sceneId),
PlayerData: data,
IsLoaded: proto.Bool(ischangeroom),
IsQM: proto.Bool(isQuMin),
IParams: p.MarshalIParam(),
SParams: p.MarshalSParam(),
CParams: p.MarshalCParam(),
}
if !p.IsRob { //保存下进入时的环境
this.gameCtx[p.SnId] = &PlayerGameCtx{
takeCoin: p.takeCoin,
enterTs: p.enterts.Unix(),
totalConvertibleFlow: p.TotalConvertibleFlow,
}
this.lastTime = time.Now()
}
takeCoin := p.Coin
p.takeCoin = takeCoin
msg.TakeCoin = proto.Int64(takeCoin)
proto.SetDefaults(msg)
this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_AUDIENCEENTER), msg)
p.enterts = time.Now()
return true
// PlayerLeave 玩家离开
func (this *Scene) PlayerLeave(p *Player, reason int) {
logger.Logger.Infof("(this *Scene:%v) PlayerLeave(%v, %v) ", this.sceneId, p.SnId, reason)
pack := &hallproto.SCQuitGame{
Id: this.dbGameFree.Id,
Reason: proto.Int(reason),
}
return false
pack.OpCode = hallproto.OpResultCode_Game_OPRC_Sucess_Game
p.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_QUITGAME), pack)
logger.Logger.Tracef("SCQuitGame: %v, %v", p.SnId, pack)
this.DelPlayer(p)
}
// AudienceLeave 观众离开
func (this *Scene) AudienceLeave(p *Player, reason int) {
logger.Logger.Infof("(this *Scene:%v) AudienceLeave(%v, %v) ", this.sceneId, p.SnId, reason)
pack := &hallproto.SCLeaveRoom{
@ -723,97 +711,25 @@ func (this *Scene) AudienceLeave(p *Player, reason int) {
Mode: proto.Int(0),
RoomId: proto.Int(this.sceneId),
}
proto.SetDefaults(pack)
p.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_LEAVEROOM), pack)
//观众直接从房间退出来
this.DelAudience(p)
if !p.IsRob {
this.lastTime = time.Now()
}
logger.Logger.Tracef("AudienceLeave SCLeaveRoom: %v, %v", p.SnId, pack)
this.DelPlayer(p)
}
func (this *Scene) DelAudience(p *Player) bool {
logger.Logger.Infof("(this *Scene:%v) DelAudience(%v) ", this.sceneId, p.SnId)
if p.scene != this {
return false
}
if this.gameSess != nil {
this.gameSess.DelPlayer(p)
}
delete(this.audiences, p.SnId)
if !p.IsRob {
delete(this.gameCtx, p.SnId)
}
p.scene = nil
SceneMgrSingleton.OnPlayerLeaveScene(this, p)
//from gameserver, so don't need send msg
return true
}
//观众坐下
//func (this *Scene) AudienceSit(p *Player, pos int) bool {
// logger.Logger.Infof("(this *Scene:%v) AudienceSit(%v, %v, %v) ", this.sceneId, p.SnId, pos)
// if _, exist := this.audiences[p.SnId]; exist {
// if pos == -1 && !this.IsHundredScene() { //自动匹配;百人场没座位概念
// for i := 0; i < this.playerNum; i++ {
// if this.seats[i] == nil {
// pos = i
// break
// }
// }
// }
// if pos != -1 || this.IsHundredScene() {
// if !this.IsHundredScene() {
// if this.seats[pos] != nil {
// return false
// }
// p.pos = pos
// p.applyPos = -1
// this.seats[pos] = p
// }
// delete(this.audiences, p.SnId)
// }
//
// p.scene = this
// this.players[p.SnId] = p
//
// NpcServerAgentSington.OnPlayerEnterScene(this, p)
// if this.IsCoinScene() {
// CoinSceneMgrSingleton.OnPlayerEnter(p, int32(this.sceneId))
// } else if this.IsHallScene() {
// PlatformMgrSingleton.OnPlayerEnterScene(this, p)
// }
//
// msg := &protocol.WGAudienceSit{
// SnId: proto.Int32(p.SnId),
// SceneId: proto.Int(this.sceneId),
// Pos: proto.Int(pos),
// }
// p.takeCoin = p.Coin
// msg.TakeCoin = proto.Int64(p.Coin)
// proto.SetDefaults(msg)
// this.SendToGame(int(protocol.MmoPacketID_PACKET_WG_AUDIENCESIT), msg)
// this.lastTime = time.Now()
// return true
// }
// return false
//}
// AudienceSit 观众坐下
func (this *Scene) AudienceSit(p *Player, pos int) bool {
logger.Logger.Infof("(this *Scene:%v) AudienceSit(%v, %v, %v) ", this.sceneId, p.SnId, pos, this.dbGameFree.GetId())
if _, exist := this.audiences[p.SnId]; exist {
delete(this.audiences, p.SnId)
p.scene = this
this.players[p.SnId] = p
msg := &serverproto.WGAudienceSit{
SnId: proto.Int32(p.SnId),
SceneId: proto.Int(this.sceneId),
Pos: proto.Int(pos),
}
p.takeCoin = p.Coin
msg.TakeCoin = proto.Int64(p.Coin)
proto.SetDefaults(msg)
this.players[p.SnId] = p
msg := &serverproto.WGAudienceSit{
SnId: proto.Int32(p.SnId),
TakeCoin: p.Coin,
SceneId: proto.Int(this.sceneId),
Pos: proto.Int(pos),
}
this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_AUDIENCESIT), msg)
if !p.IsRob {
this.lastTime = time.Now()
@ -871,6 +787,8 @@ func (this *Scene) GetAudienceCnt() int {
return len(this.audiences)
}
// IsFull 是否满人
// 不包含观众
func (this *Scene) IsFull() bool {
return this.GetPlayerCnt() >= this.playerNum
}
@ -883,23 +801,24 @@ func (this *Scene) AllIsRobot() bool {
return len(this.players) == this.robotNum
}
// OnClose 房间销毁
func (this *Scene) OnClose() {
scDestroyRoom := &hallproto.SCDestroyRoom{
RoomId: proto.Int(this.sceneId),
OpRetCode: hallproto.OpResultCode_Game_OPRC_Sucess_Game,
IsForce: proto.Int(1),
}
proto.SetDefaults(scDestroyRoom)
this.Broadcast(int(hallproto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0)
this.deleting = true
this.closed = true
this.sp.OnStop(this)
//NpcServerAgentSington.OnSceneClose(this)
for _, p := range this.players {
this.DelPlayer(p)
}
for _, p := range this.audiences {
this.DelAudience(p)
this.DelPlayer(p)
}
this.players = nil
this.audiences = nil
@ -913,17 +832,13 @@ func (this *Scene) SendToGame(packetId int, pack interface{}) bool {
}
return false
}
func (this *Scene) SendToClient(packetid int, rawpack interface{}, excludeId int32) {
for snid, value := range this.players {
if snid == excludeId {
func (this *Scene) SendToClient(packetId int, pack interface{}, excludeId int32) {
for v, value := range this.players {
if v == excludeId {
continue
}
value.SendToClient(packetid, rawpack)
}
}
func (this *Scene) BilledRoomCard(snid []int32) {
if this.sp != nil {
this.sp.BilledRoomCard(this, snid)
value.SendToClient(packetId, pack)
}
}
@ -936,7 +851,7 @@ func (this *Scene) IsLongTimeInactive() bool {
return false
}
func (this *Scene) DoDelete(isGrace bool) {
func (this *Scene) SendGameDestroy(isGrace bool) {
if !isGrace {
this.deleting = true
this.force = true
@ -949,46 +864,32 @@ func (this *Scene) DoDelete(isGrace bool) {
logger.Logger.Tracef("WG_DESTROYSCENE: %v", pack)
}
func (this *Scene) Shutdown() {
if this.hadCost && this.sp != nil {
this.sp.OnShutdown(this)
}
}
// 小游戏场
func (this *Scene) IsMiniGameScene() bool {
return this.sceneId >= common.MiniGameSceneStartId && this.sceneId < common.MiniGameSceneMaxId
}
// 比赛场
// IsMatchScene 比赛场
func (this *Scene) IsMatchScene() bool {
return this.sceneId >= common.MatchSceneStartId && this.sceneId < common.MatchSceneMaxId
}
// 大厅场
func (this *Scene) IsHallScene() bool {
return this.sceneId >= common.HallSceneStartId && this.sceneId < common.HallSceneMaxId
}
// 金币场
// IsCoinScene 金币场
func (this *Scene) IsCoinScene() bool {
return this.sceneId >= common.CoinSceneStartId && this.sceneId < common.CoinSceneMaxId
}
// 百人场
// IsHundredScene 百人场
func (this *Scene) IsHundredScene() bool {
return this.sceneId >= common.HundredSceneStartId && this.sceneId < common.HundredSceneMaxId
}
// 私人房间
// IsPrivateScene 私人房间
func (this *Scene) IsPrivateScene() bool {
return this.sceneId >= common.PrivateSceneStartId && this.sceneId < common.PrivateSceneMaxId || this.sceneMode == common.SceneMode_Private
}
// IsSceneMode 房间模式
func (this *Scene) IsSceneMode(mode int) bool {
return this.sceneMode == mode
}
// IsRankMatch 排位赛
func (this *Scene) IsRankMatch() bool {
if this.dbGameFree == nil {
return false
@ -996,6 +897,7 @@ func (this *Scene) IsRankMatch() bool {
return this.dbGameFree.RankType > 0
}
// IsTestScene 试玩场
func (this *Scene) IsTestScene() bool {
if this.dbGameFree != nil {
return this.dbGameFree.GetSceneType() == -1
@ -1010,6 +912,9 @@ func (this *Scene) IsTestScene() bool {
}
func (this *Scene) GetSceneName() string {
if this.dbGameFree != nil {
return this.dbGameFree.GetName() + this.dbGameFree.GetTitle()
}
if len(this.paramsEx) > 0 {
dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(this.paramsEx[0])
if dbGameFree != nil {
@ -1020,6 +925,21 @@ func (this *Scene) GetSceneName() string {
}
func (this *Scene) RandRobotCnt() {
if this.dbGameFree != nil {
numrng := this.dbGameFree.GetRobotNumRng()
if len(numrng) >= 2 {
if numrng[1] == numrng[0] {
this.robotLimit = int(numrng[0])
} else {
if numrng[1] < numrng[0] {
numrng[1], numrng[0] = numrng[0], numrng[1]
}
this.robotLimit = int(numrng[1]) //int(numrng[0] + rand.Int31n(numrng[1]-numrng[0]) + 1)
}
}
return
}
if len(this.paramsEx) > 0 {
gps := PlatformMgrSingleton.GetGameFree(this.limitPlatform.IdStr, this.paramsEx[0])
if gps != nil {
@ -1045,7 +965,7 @@ func (this *Scene) RandRobotCnt() {
}
}
func (this *Scene) isPlatform(platform string) bool {
func (this *Scene) IsPlatform(platform string) bool {
if platform == "0" || platform == this.limitPlatform.IdStr {
return true
}
@ -1106,31 +1026,7 @@ func (this *Scene) GetTruePlayerCnt() int {
return len(this.players) - this.robotNum
}
func (this *Scene) GetPlayerType(gameid, gamefreeid int32) (types []int32) {
for _, p := range this.players {
t := int32(0)
if p.IsRob {
t = common.PlayerType_Rob
} else if p.WBLevel < 0 {
t = common.PlayerType_Black
} else if p.WBLevel > 0 {
t = common.PlayerType_White
} else {
pt := p.CheckType(gameid, gamefreeid)
if pt != nil {
t = pt.GetId()
} else {
t = common.PlayerType_Undefine
}
}
if !common.InSliceInt32(types, t) {
types = append(types, t)
}
}
return
}
func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int64) {
func (this *Scene) Broadcast(packetId int, msg rawproto.Message, excludeSid int64) {
mgs := make(map[*netlib.Session][]*srvlibproto.MCSessionUnion)
for _, p := range this.players {
if p != nil {
@ -1159,7 +1055,7 @@ func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int6
for gateSess, v := range mgs {
if gateSess != nil && len(v) != 0 {
pack, err := common.CreateMulticastPacket(packetid, msg, v...)
pack, err := common.CreateMulticastPacket(packetId, msg, v...)
if err == nil {
proto.SetDefaults(pack)
gateSess.Send(int(srvlibproto.SrvlibPacketID_PACKET_SS_MULTICAST), pack)
@ -1171,12 +1067,11 @@ func (this *Scene) Broadcast(packetid int, msg rawproto.Message, excludeSid int6
func (this *Scene) HasSameIp(ip string) bool {
for _, p := range this.players {
if !p.IsRob {
if p.GMLevel == 0 && p.Ip == ip {
if p.Ip == ip {
return true
}
}
}
return false
}
@ -1184,45 +1079,6 @@ func (this *Scene) IsPreCreateScene() bool {
return this.dbGameFree.GetCreateRoomNum() > 0
}
func (this *Scene) PlayerTryChange() {
var member []*Player
var player *Player
for _, value := range this.players {
if !value.IsRob {
member = append(member, value)
player = value
}
}
if len(member) <= 1 {
return
}
gameFreeId := this.dbGameFree.GetId()
gameConfig := PlatformMgrSingleton.GetGameFree(player.Platform, gameFreeId)
if gameConfig != nil && gameConfig.DbGameFree.GetMatchMode() == 1 {
return
}
for i := 0; i < len(member)-1; i++ {
p := member[i]
other := member[i+1:]
if this.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlaceBySnid(other, p,
this.dbGameFree.GetGameId(), this.dbGameFree.GetSamePlaceLimit()) {
if p.scene.IsPrivateScene() {
//if ClubSceneMgrSington.PlayerInChanging(p) {
// continue
//}
//ClubSceneMgrSington.PlayerTryChange(p, gameFreeId, []int32{int32(this.sceneId)}, false)
} else {
if CoinSceneMgrSingleton.PlayerInChanging(p) {
continue
}
excludeSceneIds := p.lastSceneId[gameFreeId]
CoinSceneMgrSingleton.PlayerTryChange(p, gameFreeId, excludeSceneIds, false)
}
}
}
}
func (this *Scene) GetParamEx(idx int) int32 {
if idx < 0 || idx > len(this.paramsEx) {
return -1
@ -1238,7 +1094,7 @@ func (this *Scene) SetParamEx(idx int, val int32) {
}
}
func (this *Scene) TryForceDelectMatchInfo() {
func (this *Scene) TryForceDeleteMatchInfo() {
if !this.IsMatchScene() {
return
}

View File

@ -10,7 +10,7 @@ import (
"mongo.games.com/game/common"
"mongo.games.com/game/model"
serverproto "mongo.games.com/game/protocol/server"
webapi2 "mongo.games.com/game/protocol/webapi"
webapiproto "mongo.games.com/game/protocol/webapi"
"mongo.games.com/game/webapi"
)
@ -28,21 +28,13 @@ var SceneMgrSingleton = &SceneMgr{
// SceneMgr 房间管理器
type SceneMgr struct {
BaseClockSinker // 驱动时间事件
BaseClockSinker // 驱动时间事件
scenes map[int]*Scene // 房间id: Scene
scenes map[int]*Scene // 房间id: Scene
privateAutoId int // 私人房房间号
matchAutoId int // 比赛场房间号
coinSceneAutoId int // 金币场房间号
hundredSceneAutoId int // 百人场房间号
}
func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string {
s := m.GetScene(sceneId)
if s != nil && s.limitPlatform != nil {
return s.limitPlatform.IdStr
}
return ""
privateAutoId int // 私人房房间号
matchAutoId int // 比赛场房间号
coinSceneAutoId int // 金币场房间号
hundredSceneAutoId int // 百人场房间号
}
// AllocReplayCode 获取回访码
@ -87,6 +79,14 @@ func (m *SceneMgr) GenOneMatchSceneId() int {
return m.matchAutoId
}
func (m *SceneMgr) GetPlatformBySceneId(sceneId int) string {
s := m.GetScene(sceneId)
if s != nil && s.limitPlatform != nil {
return s.limitPlatform.IdStr
}
return ""
}
// GetScene 获取房间对象
func (m *SceneMgr) GetScene(sceneId int) *Scene {
if s, exist := m.scenes[sceneId]; exist && !s.deleting {
@ -123,6 +123,8 @@ func (m *SceneMgr) GetScenesByGameFreeId(gameFreeId int32) []*Scene {
return scenes
}
// GetMatchRoom 获取比赛房间
// sortId 比赛id
func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene {
var scenes []*Scene
for _, value := range m.scenes {
@ -137,9 +139,10 @@ func (m *SceneMgr) GetMatchRoom(sortId int64) []*Scene {
}
// MarshalAllRoom 获取房间列表
// 返回 房间列表,总页数,总条数
func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode, clubId, sceneMode, sceneId int,
gameFreeId, snId int32, start, end, pageSize int32) ([]*webapi2.RoomInfo, int32, int32) {
roomInfo := make([]*webapi2.RoomInfo, 0, len(m.scenes))
gameFreeId, snId int32, start, end, pageSize int32) ([]*webapiproto.RoomInfo, int32, int32) {
roomInfo := make([]*webapiproto.RoomInfo, 0, len(m.scenes))
var isNeedFindAll = false
if model.GameParamData.IsFindRoomByGroup && platform != "" && snId != 0 && gameId == 0 &&
gameMode == 0 && sceneId == -1 && groupId == 0 && clubId == 0 && sceneMode == 0 {
@ -159,7 +162,7 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode
platformName = s.limitPlatform.IdStr
}
si := &webapi2.RoomInfo{
si := &webapiproto.RoomInfo{
Platform: platformName,
SceneId: int32(s.sceneId),
GameId: int32(s.gameId),
@ -266,18 +269,21 @@ func (m *SceneMgr) CreateScene(agentor, creator int32, sceneId, gameId, gameMode
numOfGames int32, params []int64, gs *GameSession, limitPlatform *Platform, groupId int32, dbGameFree *serverproto.DB_GameFree,
paramsEx ...int32) *Scene {
logger.Logger.Trace("(this *SceneMgr) CreateScene ")
// 创建房间
s := NewScene(agentor, creator, sceneId, gameId, gameMode, sceneMode, clycleTimes, numOfGames, params, gs, limitPlatform, groupId,
dbGameFree, paramsEx...)
if s == nil {
return nil
}
m.scenes[sceneId] = s
// 创建水池
if !s.IsMatchScene() && dbGameFree != nil && limitPlatform != nil {
//平台水池设置
gs.DetectCoinPoolSetting(limitPlatform.IdStr, dbGameFree.GetId(), s.groupId)
}
// 添加到游戏服记录中
gs.AddScene(s)
var platformName string
if limitPlatform != nil {
@ -298,10 +304,9 @@ func (m *SceneMgr) CreateLocalGameScene(creator int32, sceneId, gameId, gameSite
if s == nil {
return nil
}
m.scenes[sceneId] = s
gs.AddScene(s)
gs.AddScene(s)
var platformName string
if limitPlatform != nil {
platformName = limitPlatform.IdStr
@ -336,44 +341,7 @@ func (m *SceneMgr) DestroyScene(sceneId int, isCompleted bool) {
logger.Logger.Infof("(this *SceneMgr) DestroyScene, SceneId=%v", sceneId)
}
func (m *SceneMgr) OnPlayerLeaveScene(s *Scene, p *Player) {
logger.Logger.Trace("(this *SceneMgr) OnPlayerLeaveScene", p.SnId)
// 记录玩家在每个游戏场次最后进入的房间号
// 只记录金币场
if s.IsCoinScene() {
const MINHOLD = 10
const MAXHOLD = 20
holdCnt := MINHOLD
if s.csp != nil {
holdCnt = s.csp.GetHasTruePlayerSceneCnt() + 2
if holdCnt < MINHOLD {
holdCnt = MINHOLD
}
if holdCnt > MAXHOLD {
holdCnt = MAXHOLD
}
}
if p.lastSceneId == nil {
p.lastSceneId = make(map[int32][]int32)
}
id := s.dbGameFree.GetId()
if sceneIds, exist := p.lastSceneId[id]; exist {
if !common.InSliceInt32(sceneIds, int32(s.sceneId)) {
sceneIds = append(sceneIds, int32(s.sceneId))
cnt := len(sceneIds)
if cnt > holdCnt {
sceneIds = sceneIds[cnt-holdCnt:]
}
p.lastSceneId[id] = sceneIds
}
} else {
p.lastSceneId[id] = []int32{int32(s.sceneId)}
}
}
}
func (m *SceneMgr) DoDelete(sceneId []int, isGrace bool) {
func (m *SceneMgr) SendGameDestroy(sceneId []int, isGrace bool) {
if len(sceneId) == 0 {
return
}
@ -393,31 +361,6 @@ func (m *SceneMgr) DoDelete(sceneId []int, isGrace bool) {
srvlib.ServerSessionMgrSington.Broadcast(int(serverproto.SSPacketID_PACKET_WG_DESTROYSCENE), pack, common.GetSelfAreaId(), srvlib.GameServerType)
}
// GetThirdScene 获取三方游戏房间
//func (m *SceneMgr) GetThirdScene(i webapi.IThirdPlatform) *Scene {
// if i == nil {
// return nil
// }
// sceneId := i.GetPlatformBase().SceneId
// scene := m.scenes[sceneId]
// if scene != nil {
// return scene
// }
//
// gs := GameSessMgrSington.GetMinLoadSess(i.GetPlatformBase().BaseGameID)
// if gs != nil {
// limitPlatform := PlatformMgrSingleton.GetPlatform(DefaultPlatform)
// var gameMode = common.SceneMode_Thr
// dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(i.GetPlatformBase().VultGameID)
// scene := SceneMgrSingleton.CreateScene(0, 0, sceneId, i.GetPlatformBase().BaseGameID, gameMode, int(common.SceneMode_Thr), 1, -1,
// []int64{}, gs, limitPlatform, 0, dbGameFree, i.GetPlatformBase().VultGameID)
// return scene
// } else {
// logger.Logger.Errorf("Get %v game min session failed.", i.GetPlatformBase().BaseGameID)
// return nil
// }
//}
//=========================ClockSinker===============================
// InterestClockEvent 接收所有时间事件
@ -435,18 +378,18 @@ func (m *SceneMgr) OnMiniTimer() {
case s.IsCoinScene():
if s.IsLongTimeInactive() {
if s.dbGameFree.GetCreateRoomNum() == 0 {
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene DoDelete scene:%v IsLongTimeInactive", s.sceneId)
s.DoDelete(false)
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId)
s.SendGameDestroy(false)
}
if s.dbGameFree.GetCreateRoomNum() > 0 && s.csp != nil && s.csp.GetRoomNum() > int(s.dbGameFree.GetCreateRoomNum()) {
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene DoDelete scene:%v IsLongTimeInactive", s.sceneId)
s.DoDelete(false)
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive CoinScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId)
s.SendGameDestroy(false)
}
}
case s.IsPrivateScene():
if s.IsLongTimeInactive() {
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive PrivateScene DoDelete scene:%v IsLongTimeInactive", s.sceneId)
s.DoDelete(false)
logger.Logger.Warnf("SceneMgr.DeleteLongTimeInactive PrivateScene SendGameDestroy scene:%v IsLongTimeInactive", s.sceneId)
s.SendGameDestroy(false)
}
}
}

View File

@ -61,10 +61,6 @@ type ScenePolicyData struct {
customIndexParams []*ScenePolicyDataParam
}
func alignto(val, align int32) int32 {
return (val + align - 1) / align
}
func (spd *ScenePolicyData) Init() bool {
spd.nameMap = make(map[string]*ScenePolicyDataParam)
spd.aliasNameMap = make(map[string]*ScenePolicyDataParam)

View File

@ -19,6 +19,10 @@ import (
"mongo.games.com/game/srvdata"
)
func getSortId() int64 {
return time.Now().UnixMilli()
}
type TmPlayer struct {
SnId int32
seq int // 报名序号(第几个报名的)
@ -30,6 +34,7 @@ type TmGradeInfo struct {
copyLv int32
copyRoleId int32
CopySkinId int32
rank int32
}
type TmMatch struct {
@ -48,7 +53,7 @@ type TmMatch struct {
func NewTmMatch(platform string, match *webapi_proto.GameMatchDate, players map[int32]*TmPlayer) *TmMatch {
ret := &TmMatch{
SortId: time.Now().UnixNano(),
SortId: getSortId(),
TMId: match.Id,
TmPlayer: make(map[int32]*TmPlayer),
Platform: platform,
@ -307,6 +312,7 @@ func (tm *TmMatch) RobotGradesDecline(round int) {
copyLv: info.copyLv,
copyRoleId: info.copyRoleId,
CopySkinId: info.CopySkinId,
rank: info.rank,
}
tm.robotGrades[lastRound][i] = gradeInfo
if info.copySnid != 0 {

View File

@ -154,8 +154,8 @@ func (this *Tournament) addFinalPlayer(sortId int64, p *PerRankInfo) {
this.finalPerRank[sortId] = append(this.finalPerRank[sortId], p)
}
// 查询一场比赛某轮的历史数据
func (this *Tournament) getRoundPlayer(sortId int64, round int32) *PlayerRoundInfo {
// GetRoundPlayer 查询一场比赛某轮的历史数据
func (this *Tournament) GetRoundPlayer(sortId int64, round int32) *PlayerRoundInfo {
_, ok := this.roundPlayers[sortId]
if !ok {
return nil
@ -923,6 +923,78 @@ func (this *Tournament) getRank(sortId int64, round, snid int32, isFinals bool)
return 0
}
// GetRank 获取排名
func (this *Tournament) GetRank(sortId int64, snid int32) int32 {
tm := this.GetTm(sortId)
if tm == nil {
return 0
}
round := this.GetRound(sortId)
useRobot := this.IsRobotOn(tm.gmd)
robotRankFunc := func(n int, snid int32) int32 {
rank := int32(0)
for _, v := range tm.robotGrades[n] {
if v.copySnid == snid {
return v.rank
}
if v.copySnid == 0 {
rank = v.rank
}
}
return rank
}
playerRankFunc := func(n int, snid int32) int32 {
d := this.GetRoundPlayer(sortId, int32(n))
if d != nil {
for _, v := range d.players {
if v.p.SnId == snid {
return v.rank
}
}
}
d = this.GetRoundPlayer(sortId, int32(n-1))
if d != nil {
for _, v := range d.players {
if v.p.SnId == snid {
return v.rank
}
}
}
return 0
}
if round <= 1 {
d := tm.TmPlayer[snid]
if d != nil {
return int32(d.seq)
}
if useRobot {
n := 0
for _, v := range tm.TmPlayer {
n = v.seq - 1
break
}
for k, v := range tm.robotGrades[0] {
if v.copySnid == snid {
if k < n {
return int32(k)
}
return int32(k + 2)
}
}
}
return 0
} else {
if useRobot {
return robotRankFunc(int(round-1), snid)
} else {
return playerRankFunc(int(round-1), snid)
}
}
}
// UpdateMatchInfo 玩家比赛结束 更新积分
func (this *Tournament) UpdateMatchInfo(p *Player, sortId int64, grade, isWin int32, matchRobotGrades map[int32]int32) {
logger.Logger.Tracef("UpdateMatchInfo: sortId:%v, grade:%v, isWin: %v, matchRobotGrades:%v", sortId, grade, isWin, matchRobotGrades)
@ -999,7 +1071,7 @@ func (this *Tournament) stopMatch(matchId int32, sortId int64) (isOver bool) {
// 开启机器人时使用
func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatchContext, matchRobotGrades map[int32]int32) {
logger.Logger.Tracef("NextRoundStartSingle 当前第 %v 轮", playerCtx.round)
info := this.getRoundPlayer(sortId, playerCtx.round)
info := this.GetRoundPlayer(sortId, playerCtx.round)
if info == nil {
return
}
@ -1042,11 +1114,24 @@ func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatc
}
sort.Slice(arr, func(i, j int) bool {
if arr[i].grade == arr[j].grade { // 真人在前
if arr[i].copySnid == 0 {
return true
}
if arr[j].copySnid == 0 {
return false
}
}
return arr[i].grade > arr[j].grade
})
for k, v := range arr {
v.rank = int32(k + 1)
}
playerCtx.tm.robotGrades[int(round)] = arr
for _, info := range arr {
logger.Logger.Tracef("NextRoundStart_Single 本轮积分排名 Snid:%v Grade:%v copyLv:%v copyRoleId:%v", info.copySnid, info.grade, info.copyLv, info.copyRoleId)
logger.Logger.Tracef("NextRoundStart_Single 本轮积分排名 round:%v Snid:%v Grade:%v copyLv:%v copyRoleId:%v rank:%v",
playerCtx.round, info.copySnid, info.grade, info.copyLv, info.copyRoleId, info.rank)
}
// 获取排名
@ -1117,7 +1202,7 @@ func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatc
// 关闭机器时使用
func (this *Tournament) NextRoundStart(sortId int64, playerCtx *PlayerMatchContext) {
logger.Logger.Tracef("NextRoundStart 当前第 %v 轮", playerCtx.round)
info := this.getRoundPlayer(sortId, playerCtx.round)
info := this.GetRoundPlayer(sortId, playerCtx.round)
if info == nil {
return
}
@ -1158,7 +1243,7 @@ func (this *Tournament) NextRoundStart(sortId int64, playerCtx *PlayerMatchConte
info.players = info.players[len(ps):]
willOut := false
if promotionNum1 == this.getRoundPlayer(sortId, playerCtx.round-1).num {
if promotionNum1 == this.GetRoundPlayer(sortId, playerCtx.round-1).num {
// 最后一个人打完了,确定要淘汰的人
willOut = true
} else {

View File

@ -1747,24 +1747,24 @@ func init() {
switch msg.DestroyType {
case 1: //删除所有空房间
for _, s := range SceneMgrSingleton.scenes {
if !s.isPlatform(platform) {
if !s.IsPlatform(platform) {
continue
}
if s != nil && !s.deleting && len(s.players) == 0 {
logger.Logger.Warnf("WebService SpecailEmptySceneId destroyroom scene:%v", s.sceneId)
s.TryForceDelectMatchInfo()
s.DoDelete(false)
s.TryForceDeleteMatchInfo()
s.SendGameDestroy(false)
}
}
case 2: //删除所有未开始的房间
for _, s := range SceneMgrSingleton.scenes {
if !s.isPlatform(platform) {
if !s.IsPlatform(platform) {
continue
}
if s != nil && !s.deleting && !s.starting && !s.IsHundredScene() {
logger.Logger.Warnf("WebService SpecailUnstartSceneId destroyroom scene:%v", s.sceneId)
s.TryForceDelectMatchInfo()
s.DoDelete(false)
s.TryForceDeleteMatchInfo()
s.SendGameDestroy(false)
}
}
default: //删除指定房间
@ -1780,14 +1780,14 @@ func init() {
pack.Msg = "the sceneid is nil"
return common.ResponseTag_NoFindRoom, pack
}
if !s.isPlatform(platform) {
if !s.IsPlatform(platform) {
pack.Tag = webapiproto.TagCode_FAILED
pack.Msg = "the sceneid is not ower platform"
return common.ResponseTag_NoFindRoom, pack
}
logger.Logger.Warnf("WebService destroyroom scene:%v", s.sceneId)
s.TryForceDelectMatchInfo()
s.DoDelete(false)
s.TryForceDeleteMatchInfo()
s.SendGameDestroy(false)
}
}
return common.ResponseTag_Ok, pack
@ -3444,7 +3444,7 @@ func init() {
player.MoneyTotal += int64(info.ConsumeTypeNum)
player.dirty = true
player.SendDiffData()
info.Amount[2] = player.GetVIPExpByPay(info.ConsumeNum)
info.Amount[2] = int32(player.GetVIPExpByPay(int64(info.ConsumeNum)))
var itemInfo []*playerproto.PayItem
var items []*Item

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.