解决冲突

This commit is contained in:
DESKTOP-45ANQ2C\unis 2024-10-18 11:48:04 +08:00 committed by sk
commit e13dc580b6
49 changed files with 3803 additions and 3033 deletions

View File

@ -1,7 +1,9 @@
stages: stages:
- lock
- build - build
- save - save
- sync - sync
- unlock
variables: variables:
ProjectPath: "mongo.games.com/game" ProjectPath: "mongo.games.com/game"
@ -10,10 +12,27 @@ default:
tags: tags:
- gitlab - gitlab
# 锁定作业,防止并发流水线执行
lock_job:
stage: lock
script:
- |
if [ -f /tmp/ci_lock ]; then
echo "流水线已在运行,等待..."
exit 1
else
touch /tmp/ci_lock
echo "获得锁定,开始流水线。"
fi
build-job: build-job:
stage: build stage: build
only:
- develop
- release
script: script:
- git checkout $CI_COMMIT_REF_NAME - git checkout $CI_COMMIT_REF_NAME
- git pull origin $CI_COMMIT_REF_NAME
# 拷贝到GOPATH # 拷贝到GOPATH
- echo '拷贝到GOPATH' - echo '拷贝到GOPATH'
- cp -rfp ./* $GOPATH/src/$ProjectPath - cp -rfp ./* $GOPATH/src/$ProjectPath
@ -31,14 +50,18 @@ build-job:
cd .. cd ..
done < shell/programs.txt done < shell/programs.txt
deploy-job: save-job:
stage: save stage: save
only:
- develop
- release
script: script:
- cd $GOPATH/src/$ProjectPath - cd $GOPATH/src/$ProjectPath
# 拷贝文件 # 拷贝文件
- echo '拷贝文件' - echo '拷贝文件'
- mkdir -p ./temp - rm -rf ./temp
- mkdir -p ./temp/data - mkdir ./temp
- mkdir ./temp/data
- cp -rfp ./data/* ./temp/data - cp -rfp ./data/* ./temp/data
# 删除自定义配置 # 删除自定义配置
- echo '删除自定义配置' - echo '删除自定义配置'
@ -57,33 +80,49 @@ deploy-job:
mv ./$line/$line ./temp/$line mv ./$line/$line ./temp/$line
done < ./shell/programs.txt done < ./shell/programs.txt
push_job: sync_job:
stage: sync stage: sync
only:
- develop
- release
script: script:
- cd $GOPATH/src/$ProjectPath - cd $GOPATH/src/$ProjectPath
- | - if [ "$CI_COMMIT_BRANCH" == "develop" ]; then
if [ "$CI_COMMIT_BRANCH" == "develop" ]; then SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_DEVELOP";
SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_DEVELOP" REMOTE_HOST="$REMOTE_HOST_DEVELOP";
REMOTE_HOST="$REMOTE_HOST_DEVELOP" REMOTE_USER="$REMOTE_USER_DEVELOP";
REMOTE_USER="$REMOTE_USER_DEVELOP" SERVER_CI_TOKEN="$REMOTE_CI_TOKEN_DEVELOP";
REMOTE_PATH="$REMOTE_PATH_DEVELOP" ServerName="develop";
elif [ "$CI_COMMIT_BRANCH" == "release" ]; then elif [ "$CI_COMMIT_BRANCH" == "release" ]; then
SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_BETA" SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_BETA";
REMOTE_HOST="$REMOTE_HOST_BETA" REMOTE_HOST="$REMOTE_HOST_BETA";
REMOTE_USER="$REMOTE_USER_BETA" REMOTE_USER="$REMOTE_USER_BETA";
REMOTE_PATH="$REMOTE_PATH_BETA" SERVER_CI_TOKEN="$REMOTE_CI_TOKEN_BETA";
ServerName="beta";
else else
echo "不支持的分支"; echo "不支持的分支";
exit 1; exit 1;
fi fi
- echo "Setting up SSH keys..."
# 设置 .ssh 目录并写入 SSH 私钥 # 设置 .ssh 目录并写入 SSH 私钥
- echo "设置 SSH keys..."
- mkdir -p ~/.ssh - mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H "$REMOTE_HOST" >> ~/.ssh/known_hosts - ssh-keyscan -H "$REMOTE_HOST" >> ~/.ssh/known_hosts
# 使用 rsync 将文件同步到远程服务器 # 使用 rsync 将文件同步到远程服务器
- echo "同步到服务器"
- echo "Deploying to remote server using rsync..." - echo "Deploying to remote server using rsync..."
- rsync -avz --delete build/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH - rsync -avz --delete ./temp/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DEPLOY_PATH
# 触发部署
- "curl -X POST --fail -F token=$SERVER_CI_TOKEN -F ref=release -F variables[ServerName]=$ServerName https://git.pogorockgames.com/api/v4/projects/31/trigger/pipeline"
# 解锁作业,释放锁定
unlock_job:
stage: unlock
script:
- rm -f /tmp/ci_lock
- echo "释放锁定,流水线结束。"
when: always

View File

@ -348,3 +348,7 @@ func GetBElementFromA(A []interface{}, B int) []interface{} {
} }
} }
} }
func RandFloat(min, max float64) float64 {
return min + rand.Float64()*(max-min)
}

Binary file not shown.

View File

@ -6502,6 +6502,7 @@
"Desc": "0", "Desc": "0",
"ShowType": 2, "ShowType": 2,
"ShowId": 30800, "ShowId": 30800,
"LimitCoin": 10000,
"BaseScore": 1000, "BaseScore": 1000,
"Turn": 30800, "Turn": 30800,
"BetDec": "1000", "BetDec": "1000",
@ -6535,6 +6536,7 @@
"Desc": "0", "Desc": "0",
"ShowType": 2, "ShowType": 2,
"ShowId": 30900, "ShowId": 30900,
"LimitCoin": 10000,
"BaseScore": 1000, "BaseScore": 1000,
"Turn": 30900, "Turn": 30900,
"BetDec": "1000", "BetDec": "1000",
@ -6568,6 +6570,7 @@
"Desc": "0", "Desc": "0",
"ShowType": 2, "ShowType": 2,
"ShowId": 31000, "ShowId": 31000,
"LimitCoin": 10000,
"BaseScore": 1000, "BaseScore": 1000,
"Turn": 31000, "Turn": 31000,
"BetDec": "1000", "BetDec": "1000",
@ -6601,6 +6604,7 @@
"Desc": "0", "Desc": "0",
"ShowType": 2, "ShowType": 2,
"ShowId": 31100, "ShowId": 31100,
"LimitCoin": 10000,
"BaseScore": 1000, "BaseScore": 1000,
"Turn": 31100, "Turn": 31100,
"BetDec": "1000", "BetDec": "1000",
@ -6634,6 +6638,7 @@
"Desc": "0", "Desc": "0",
"ShowType": 2, "ShowType": 2,
"ShowId": 31200, "ShowId": 31200,
"LimitCoin": 10000,
"BaseScore": 1000, "BaseScore": 1000,
"Turn": 31200, "Turn": 31200,
"BetDec": "1000", "BetDec": "1000",
@ -6674,7 +6679,7 @@
0 0
], ],
"OtherIntParams": [ "OtherIntParams": [
0 1
], ],
"RobotNumRng": [ "RobotNumRng": [
0 0
@ -6707,7 +6712,7 @@
0 0
], ],
"OtherIntParams": [ "OtherIntParams": [
0 1
], ],
"RobotNumRng": [ "RobotNumRng": [
0 0
@ -6740,7 +6745,7 @@
0 0
], ],
"OtherIntParams": [ "OtherIntParams": [
1 2
], ],
"RobotNumRng": [ "RobotNumRng": [
0 0
@ -6773,7 +6778,7 @@
0 0
], ],
"OtherIntParams": [ "OtherIntParams": [
1 2
], ],
"RobotNumRng": [ "RobotNumRng": [
0 0

Binary file not shown.

Binary file not shown.

View File

@ -52,7 +52,11 @@ func InsertAnnouncerLog(logs ...*model.AnnouncerLog) (err error) {
// 取最新100条数据 // 取最新100条数据
func FetchAnnouncerLog(plt string) (recs []model.AnnouncerLog, err error) { func FetchAnnouncerLog(plt string) (recs []model.AnnouncerLog, err error) {
query := bson.M{} query := bson.M{}
err = AnnouncerLogCollection(plt).Find(query).Sort("-_id").Limit(100).All(&recs) c := AnnouncerLogCollection(plt)
if c == nil {
return recs, AnnouncerLogDBErr
}
err = c.Find(query).Sort("-_id").Limit(100).All(&recs)
return return
} }

View File

@ -26,7 +26,11 @@ func AwardLogCollection(plt string) *mongo.Collection {
} }
func FetchAwardLog(plt string) (recs model.AwardLog, err error) { func FetchAwardLog(plt string) (recs model.AwardLog, err error) {
err = AwardLogCollection(plt).Find(bson.M{}).One(&recs) c := AwardLogCollection(plt)
if c == nil {
return recs, AwardLogDBErr
}
err = c.Find(bson.M{}).One(&recs)
return return
} }

View File

@ -30,20 +30,21 @@ const (
ETCDKEY_PLAYERPOOL = "/game/plt/playerpool/" // 个人水池调控配置 ETCDKEY_PLAYERPOOL = "/game/plt/playerpool/" // 个人水池调控配置
ETCDKEY_GAME_CONFIG = "/game/plt/gameconfig/" // 游戏管理/全局配置 ETCDKEY_GAME_CONFIG = "/game/plt/gameconfig/" // 游戏管理/全局配置
ETCDKEY_ACT_PHONELOTTERY = "/game/act_phoneLottery" ETCDKEY_ACT_PHONELOTTERY = "/game/act_phoneLottery"
ETCDKEY_ChannelSwitch = "/game/channel/switch" // 渠道开关 ETCDKEY_ChannelSwitch = "/game/channel/switch" // 渠道开关
ETCDKEY_ACT_Invite = "/game/act_invite" // 邀请活动配置 ETCDKEY_ACT_Invite = "/game/act_invite" // 邀请活动配置
ETCDKEY_ACT_Permit = "/game/act_permit" // 赛季通行证配置 ETCDKEY_ACT_Permit = "/game/act_permit" // 赛季通行证配置
ETCDKEY_DIAMOND_LOTTERY = "/game/diamond_lottery" // 钻石抽奖配置 ETCDKEY_DIAMOND_LOTTERY = "/game/diamond_lottery" // 钻石抽奖配置
ETCDKEY_Item = "/game/item" // 道具列表 ETCDKEY_Item = "/game/item" // 道具列表
ETCDKEY_SKin = "/game/skin_config" // 皮肤配置 ETCDKEY_SKin = "/game/skin_config" // 皮肤配置
ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置 ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置
ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录 ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录
ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置 ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置
ETCDKEY_MACHINE = "/game/machine_config" //娃娃机配置 ETCDKEY_MACHINE = "/game/machine_config" //娃娃机配置
ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众 ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众
ETCDKEY_Spirit = "/game/spirit" // 小精灵配置 ETCDKEY_Spirit = "/game/spirit" // 小精灵配置
ETCDKEY_RoomType = "/game/room_type" // 房间类型配置 ETCDKEY_RoomType = "/game/room_type" // 房间类型配置
ETCDKEY_RoomConfig = "/game/room_config" // 房间配置 ETCDKEY_RoomConfig = "/game/room_config" // 房间配置
ETCDKEY_RoomConfigSystem = "/game/room_system" // 系统房间配置 ETCDKEY_RoomConfigSystem = "/game/room_system" // 系统房间配置
ETCDKEY_ClientUpgrade = "/game/client_upgrade" // 客户端升级奖励配置 ETCDKEY_ClientUpgrade = "/game/client_upgrade" // 客户端升级奖励配置
ETCDKEY_PopUpWindow = "/game/PopUpWindowConfig" //弹窗配置
) )

View File

@ -32,6 +32,8 @@ const (
ClawDollSceneGrapTimeOut = time.Second * 5 //下抓防卡死强制变状态倒计时 ClawDollSceneGrapTimeOut = time.Second * 5 //下抓防卡死强制变状态倒计时
ClawDollScenePayCoinTimeOut = time.Second * 2 //投币防卡死强制变状态倒计时 ClawDollScenePayCoinTimeOut = time.Second * 2 //投币防卡死强制变状态倒计时
ClawDollSceneExceptTimeOut = time.Second * 80 //
) )
// 玩家操作 // 玩家操作
@ -73,3 +75,5 @@ const (
Zego_ForbidRTCStream = iota + 1 Zego_ForbidRTCStream = iota + 1
Zego_ResumeRTCStream = iota + 1 Zego_ResumeRTCStream = iota + 1
) )
var DebugSwitch bool = false

View File

@ -631,7 +631,7 @@ func GetPressCards(cards, lastCards []int32, data *tienlenApi.PredictRequest, po
}) })
isWin := data.IsWin isWin := data.IsWin
//测试代码 //测试代码
//isWin = false isWin = true
logger.Logger.Trace("压牌 调控输赢 isWin = ", isWin) logger.Logger.Trace("压牌 调控输赢 isWin = ", isWin)
outCards := []int32{} outCards := []int32{}
//压牌测试代码 //压牌测试代码
@ -1734,7 +1734,7 @@ func GetOutCards(cards []int32, data *tienlenApi.PredictRequest, pos int32) []in
}) })
isWin := data.IsWin isWin := data.IsWin
//测试代码 //测试代码
//isWin = false isWin = true
logger.Logger.Trace("出牌 调控输赢 isWin = ", isWin) logger.Logger.Trace("出牌 调控输赢 isWin = ", isWin)
//测试代码 //测试代码
//cards = []int32{51, 4, 5} //cards = []int32{51, 4, 5}

View File

@ -1267,6 +1267,7 @@ func (this *Player) GetSkillAdd(id int32) int32 {
// 增加或减少道具 // 增加或减少道具
// 同步到 worldsrv // 同步到 worldsrv
func (this *Player) AddItems(args *model.AddItemParam) { func (this *Player) AddItems(args *model.AddItemParam) {
args.IsGame = true
changeItem := map[int32]int64{} changeItem := map[int32]int64{}
for _, v := range args.Change { for _, v := range args.Change {
item := srvdata.GameItemMgr.Get(this.Platform, v.ItemId) item := srvdata.GameItemMgr.Get(this.Platform, v.ItemId)

View File

@ -117,6 +117,8 @@ func (this *PlayerEx) CostPlayCoin() bool {
GameFreeId: int64(sceneEx.GetGameFreeId()), GameFreeId: int64(sceneEx.GetGameFreeId()),
}) })
sceneEx.PayCoinCount++
logger.Logger.Tracef("Clawdoll (*PlayerEx) CostPlayCoin, items = %v", items) logger.Logger.Tracef("Clawdoll (*PlayerEx) CostPlayCoin, items = %v", items)
return true return true
} }

View File

@ -11,6 +11,7 @@ import (
"mongo.games.com/game/common" "mongo.games.com/game/common"
rule "mongo.games.com/game/gamerule/clawdoll" rule "mongo.games.com/game/gamerule/clawdoll"
"mongo.games.com/game/gamesrv/base" "mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/model"
"mongo.games.com/game/proto" "mongo.games.com/game/proto"
"mongo.games.com/game/protocol/clawdoll" "mongo.games.com/game/protocol/clawdoll"
"mongo.games.com/game/protocol/machine" "mongo.games.com/game/protocol/machine"
@ -23,6 +24,7 @@ import (
"mongo.games.com/goserver/srvlib" "mongo.games.com/goserver/srvlib"
"net/http" "net/http"
"net/url" "net/url"
"strconv"
"time" "time"
) )
@ -66,6 +68,7 @@ type SceneEx struct {
machineId int //娃娃机ID machineId int //娃娃机ID
machineConn *netlib.Session //娃娃机链接 machineConn *netlib.Session //娃娃机链接
machineStatus int32 //娃娃机链接状态 0:离线 1:在线 machineStatus int32 //娃娃机链接状态 0:离线 1:在线
PayCoinCount int //娃娃机总投币次数
payCoinTimeHandle timer.TimerHandle //上分投币托管handle payCoinTimeHandle timer.TimerHandle //上分投币托管handle
grabTimerHandle timer.TimerHandle //下抓托管handle grabTimerHandle timer.TimerHandle //下抓托管handle
@ -152,7 +155,6 @@ func (this *SceneEx) OnPlayerLeave(p *base.Player, reason int) {
// 发送http Get请求 关闭直播间流 // 发送http Get请求 关闭直播间流
operateTask(this, 2, rule.Zego_ForbidRTCStream, p.Platform) operateTask(this, 2, rule.Zego_ForbidRTCStream, p.Platform)
} }
} }
func (this *SceneEx) SceneDestroy(force bool) { func (this *SceneEx) SceneDestroy(force bool) {
//销毁房间 //销毁房间
@ -237,6 +239,13 @@ func NewClawdollSceneData(s *base.Scene) *SceneEx {
func (this *SceneEx) init() bool { func (this *SceneEx) init() bool {
this.Clear() this.Clear()
this.PayCoinCount = this.LoadPayCoinCount()
return true
}
func (this *SceneEx) ShutDown() bool {
this.SavePayCoinCount(false)
return true return true
} }
@ -332,7 +341,36 @@ func (this *SceneEx) GetPlayGrabType(player *PlayerEx) int32 {
return rule.ClawWeak return rule.ClawWeak
} }
if this.RoundId/2 == 0 && this.RoundId != 0 { if this.PayCoinCount == 0 {
this.PayCoinCount = 1
}
machineId := this.GetDBGameFree().GetId() % 6080000
machineInfo := this.GetMachineServerInfo(machineId, player.Platform)
if machineInfo == nil {
logger.Logger.Errorf("Clawdoll GetPlayGrabType machineId: %v, platform: %v", machineId, player.Platform)
return rule.ClawWeak
}
ProfitRate := common.RandFloat(machineInfo.ProfitMin, machineInfo.ProfitMax)
strongRate := (machineInfo.CatchPrice/(machineInfo.BuyPrice*ProfitRate))*float64(this.PayCoinCount) - 1
logger.Logger.Tracef("Clawdoll GetPlayGrabType: SnId: %v, PayCoinCount:%v, ProfitRate:%v, strongRate:%v", player.SnId, this.PayCoinCount, ProfitRate, strongRate)
if strongRate <= 0.00000 {
return rule.ClawWeak
} else if strongRate > 0.00000 && strongRate <= 0.99999 {
// 再次随机
newRate := common.RandFromRangeInt64(0, 100)
logger.Logger.Tracef("Clawdoll GetPlayGrabType: newRate:%v, SnId: %v, PayCoinCount:%v, ProfitRate:%v, strongRate:%v ", newRate, player.SnId, this.PayCoinCount, ProfitRate, strongRate)
if int64(strongRate*100) >= newRate {
logger.Logger.Tracef("Clawdoll GetPlayGrabType: SnId: %v gain ClawStrong, PayCoinCount:%v", player.SnId, this.PayCoinCount)
return rule.ClawStrong
} else {
return rule.ClawWeak
}
} else if strongRate >= 1.00000 {
return rule.ClawStrong return rule.ClawStrong
} }
@ -395,6 +433,12 @@ func (this *SceneEx) TimeOutPlayGrab() bool {
playerEx := this.players[this.playingSnid] playerEx := this.players[this.playingSnid]
if playerEx != nil { if playerEx != nil {
grapType := this.GetPlayGrabType(playerEx) grapType := this.GetPlayGrabType(playerEx)
if grapType == rule.ClawStrong {
this.PayCoinCount = 0
}
logger.Logger.Trace("ClawDoll StatePlayGame OnPlayerOp Grab-----SnId:", playerEx.SnId, " grapType: ", grapType)
this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), grapType) this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), grapType)
} }
@ -464,6 +508,35 @@ func (this *SceneEx) PayCoinTimeHandle() {
}), nil, rule.ClawDollScenePayCoinTimeOut, 1) }), nil, rule.ClawDollScenePayCoinTimeOut, 1)
} }
// 得到投币次数
func (this *SceneEx) LoadPayCoinCount() int {
machineId := this.GetDBGameFree().GetId()
PayCoinCountDBKey := fmt.Sprintf("Clawdoll_PayCoinCount_%v", machineId)
data := model.GetStrKVGameData(PayCoinCountDBKey)
PayCoinCount, err := strconv.Atoi(data)
if err == nil {
return PayCoinCount
}
return 0
}
// 保存投币次数
func (this *SceneEx) SavePayCoinCount(asyn bool) {
machineId := this.GetDBGameFree().GetId()
PayCoinCountDBKey := fmt.Sprintf("Clawdoll_PayCoinCount_%v", machineId)
saveBuff := strconv.Itoa(int(this.PayCoinCount))
if asyn {
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
return model.UptStrKVGameData(PayCoinCountDBKey, string(saveBuff))
}), nil, "UptStrKVGameData").Start()
} else {
model.UptStrKVGameData(PayCoinCountDBKey, string(saveBuff))
}
}
// actionType : 1 禁止推流 ForbidRTCStream // actionType : 1 禁止推流 ForbidRTCStream
// actionType : 2 恢复推流 ResumeRTCStream // actionType : 2 恢复推流 ResumeRTCStream
func operateTask(sceneEx *SceneEx, times int, actionType int, platform string) { func operateTask(sceneEx *SceneEx, times int, actionType int, platform string) {
@ -512,7 +585,7 @@ func ZegoRTCStreamAction(Action string, machineInfo *webapi.MachineInfo) rule.Ze
timestamp := time.Now().Unix() timestamp := time.Now().Unix()
queryParams := url.Values{} queryParams := url.Values{}
queryParams.Set("StreamId", "test") queryParams.Set("StreamId", machineInfo.StreamId)
queryParams.Set("Sequence", fmt.Sprintf("%d", timestamp)) queryParams.Set("Sequence", fmt.Sprintf("%d", timestamp))
// 生成16进制随机字符串(16位) // 生成16进制随机字符串(16位)

View File

@ -56,6 +56,10 @@ func (this *PolicyClawdoll) OnStart(s *base.Scene) {
func (this *PolicyClawdoll) OnStop(s *base.Scene) { func (this *PolicyClawdoll) OnStop(s *base.Scene) {
logger.Logger.Trace("(this *PolicyClawdoll) OnStop , sceneId=", s.GetSceneId()) logger.Logger.Trace("(this *PolicyClawdoll) OnStop , sceneId=", s.GetSceneId())
sceneEx, ok := s.ExtraData.(*SceneEx)
if ok {
sceneEx.ShutDown()
}
} }
func (this *PolicyClawdoll) OnTick(s *base.Scene) { func (this *PolicyClawdoll) OnTick(s *base.Scene) {
@ -667,6 +671,9 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para
} }
grapType := sceneEx.GetPlayGrabType(playerEx) grapType := sceneEx.GetPlayGrabType(playerEx)
if grapType == rule.ClawStrong {
sceneEx.PayCoinCount = 0
}
logger.Logger.Trace("ClawDoll StatePlayGame OnPlayerOp Grab-----SnId:", p.SnId, " grapType: ", grapType) logger.Logger.Trace("ClawDoll StatePlayGame OnPlayerOp Grab-----SnId:", p.SnId, " grapType: ", grapType)
//1-弱力抓 2 -强力抓 //1-弱力抓 2 -强力抓
@ -805,6 +812,7 @@ func (this *StateBilled) OnEnter(s *base.Scene) {
} }
playerEx.lastIsWin = playerEx.IsWin playerEx.lastIsWin = playerEx.IsWin
playerEx.ReStartGame() playerEx.ReStartGame()
} }
} }

View File

@ -409,6 +409,9 @@ func (this *TienLenSceneData) BroadcastOpPos() {
if B < 0 { if B < 0 {
isWin = false isWin = false
} }
if this.WGCreateScene.GetCloseCtrl() {
isWin = true
}
isTienLenYule := this.IsTienLenYule() isTienLenYule := this.IsTienLenYule()
pack := &tienlen.SCTienLenAIData{ pack := &tienlen.SCTienLenAIData{
BombNum: 0, //炸弹数量 BombNum: 0, //炸弹数量
@ -554,6 +557,7 @@ func (this *TienLenSceneData) GetFreeGameSceneType() int32 {
return this.GetSceneType() return this.GetSceneType()
} }
// SendHandCard_Match 发牌
// 比赛场发牌 // 比赛场发牌
// 纯真人,随机发牌 // 纯真人,随机发牌
// 有机器人和真人,真人拿好牌 // 有机器人和真人,真人拿好牌

View File

@ -991,7 +991,6 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) {
if rule.TestOpen { if rule.TestOpen {
sceneEx.SendHandCardTest() sceneEx.SendHandCardTest()
} else { } else {
if len(sceneEx.testPokers) > 1 { if len(sceneEx.testPokers) > 1 {
sceneEx.SendHandCardOdds() sceneEx.SendHandCardOdds()
} else { } else {

View File

@ -135,7 +135,7 @@ func SMDollMachinePerateHandler(session *netlib.Session, packetId int, data inte
// 下抓 // 下抓
func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interface{}) error { func SMDollMachineGrabHandler(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Tracef("SMDollMachineGrabHandler %v", data) fmt.Println("下抓SMDollMachineGrabHandler %v", data)
msg, ok := data.(*machine.SMDollMachineGrab) msg, ok := data.(*machine.SMDollMachineGrab)
if !ok { if !ok {
return nil return nil

View File

@ -382,8 +382,8 @@ var data = []byte{
0x65, //0 几币几玩 0x65, //0 几币几玩
0x00, //1 几币几玩占用位 0x00, //1 几币几玩占用位
0x2D, //2 游戏时间 0x2D, //2 游戏时间
0x01, //3 出奖模式0 无概率 1 随机模式 2 固定模式 3 冠兴模式 0x00, //3 出奖模式0 无概率 1 随机模式 2 固定模式 3 冠兴模式
0x0A, //4 出奖概率 0x14, //4 出奖概率
0x00, //5 出奖概率占用位 0x00, //5 出奖概率占用位
0x00, //6 空中抓物 0关闭 1开启 0x00, //6 空中抓物 0关闭 1开启
0x00, //7 连续投币赠送 范围0~100 0x00, //7 连续投币赠送 范围0~100

View File

@ -151,7 +151,7 @@ func (this *MachineManager) UpdateToGameServer(conn *Conn, status int32) {
} }
func SendToGameServer(pid int, msg interface{}) { func SendToGameServer(pid int, msg interface{}) {
GameConn = srvlib.ServerSessionMgrSington.GetSession(1, 7, 777) GameConn = srvlib.ServerSessionMgrSington.GetSession(1, 7, 706)
if GameConn != nil { if GameConn != nil {
GameConn.Send(pid, msg) GameConn.Send(pid, msg)
} else { } else {

View File

@ -84,6 +84,7 @@ type AddItemParam struct {
GameId, GameFreeId int64 // 游戏id,场次id GameId, GameFreeId int64 // 游戏id,场次id
LogId string // 撤销的id,道具兑换失败 LogId string // 撤销的id,道具兑换失败
RoomConfigId int32 // 房间配置id RoomConfigId int32 // 房间配置id
IsGame bool // 是否为gamesrv的操作
} }
type ChangeItemParam struct { type ChangeItemParam struct {

View File

@ -155,6 +155,8 @@ type AllConfig struct {
RoomConfigSystem map[int32]*webapi.RoomConfigSystem RoomConfigSystem map[int32]*webapi.RoomConfigSystem
// 客户端升级奖励配置 // 客户端升级奖励配置
*webapi.ClientUpgrade *webapi.ClientUpgrade
//弹窗配置
*webapi.PopUpWindowConfig
} }
type GlobalConfig struct { type GlobalConfig struct {

View File

@ -2,7 +2,9 @@ package model
import ( import (
"bytes" "bytes"
"crypto/md5"
"encoding/gob" "encoding/gob"
"encoding/hex"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
@ -115,6 +117,20 @@ const (
SystemFreeGive_CoinType_Diamond //钻石 SystemFreeGive_CoinType_Diamond //钻石
SystemFreeGive_CoinType_Tiem // 道具 SystemFreeGive_CoinType_Tiem // 道具
) )
const (
ActivityLog_Sign = iota + 1 // 签到
ActivityLog_PhoneLottery //积分抽奖
ActivityLog_DiamondLottery //钻石抽奖
ActivityLog_CollectBox //开启礼盒集卡
ActivityLog_WeekCard //周卡
ActivityLog_Permit //通行证
ActivityLog_FirstPay // 超值首冲
ActivityLog_BlindBox // 开盲盒
ActivityLog_ContinuousPay // 累计充值
ActivityLog_PigBank // 购买存钱罐
ActivityLog_Shop //商城购买
ActivityLog_Exchange //商城兑换
)
type PlayerGameCtrlData struct { type PlayerGameCtrlData struct {
CtrlData map[string]*PlayerGameStatics CtrlData map[string]*PlayerGameStatics
@ -909,7 +925,13 @@ func NewPlayerData(acc string, name, headUrl string, id int32, channel, platform
logger.Logger.Trace("New player name is empty.") logger.Logger.Trace("New player name is empty.")
return nil return nil
} }
raw := fmt.Sprintf("%v%v", DEFAULT_PLAYER_SAFEBOX_PWD, common.GetAppId())
h := md5.New()
io.WriteString(h, raw)
pwd := hex.EncodeToString(h.Sum(nil))
tNow := time.Now() tNow := time.Now()
isRobot := channel == common.Channel_Rob
pd := &PlayerData{ pd := &PlayerData{
Id: bson.NewObjectId(), Id: bson.NewObjectId(),
AccountId: acc, AccountId: acc,
@ -920,6 +942,7 @@ func NewPlayerData(acc string, name, headUrl string, id int32, channel, platform
SnId: id, SnId: id,
Head: rand.Int31n(common.HeadRange), Head: rand.Int31n(common.HeadRange),
HeadUrl: headUrl, HeadUrl: headUrl,
SafeBoxPassword: pwd,
Ip: ip, Ip: ip,
RegIp: ip, RegIp: ip,
Params: params, Params: params,
@ -929,7 +952,7 @@ func NewPlayerData(acc string, name, headUrl string, id int32, channel, platform
CreateTime: tNow.Local(), CreateTime: tNow.Local(),
Ver: VER_PLAYER_MAX - 1, Ver: VER_PLAYER_MAX - 1,
HeadOutLine: 1, HeadOutLine: 1,
IsRob: false, IsRob: isRobot,
PackageID: packTag, PackageID: packTag,
YesterdayGameData: NewPlayerGameCtrlData(), YesterdayGameData: NewPlayerGameCtrlData(),
TodayGameData: NewPlayerGameCtrlData(), TodayGameData: NewPlayerGameCtrlData(),

View File

@ -61,3 +61,15 @@ func GeneratePhoneLottery(snid int32, platform string, items string, lotteryType
params["Ts"] = strconv.Itoa(int(time.Now().Unix())) params["Ts"] = strconv.Itoa(int(time.Now().Unix()))
return NewRabbitMQData(mq.BackPhoneLottery, params) return NewRabbitMQData(mq.BackPhoneLottery, params)
} }
// GenerateActivityLog 活动参与log
// childType 1-点击行为 2-兑换行为
func GenerateActivityLog(snid int32, platform string, typeId, childType int32) *mq.RabbitMQData {
params := make(map[string]string)
params["Snid"] = strconv.Itoa(int(snid))
params["Platform"] = platform
params["TypeId"] = strconv.Itoa(int(typeId))
params["ChildType"] = strconv.Itoa(int(childType))
params["Ts"] = strconv.FormatInt(time.Now().Unix(), 10)
return NewRabbitMQData(mq.BackActivityLog, params)
}

View File

@ -17,6 +17,7 @@ const (
BackSystemPermitJoin = "back_permitjoin" BackSystemPermitJoin = "back_permitjoin"
BackSystemPermitTask = "back_permittask" BackSystemPermitTask = "back_permittask"
BackSystemJyb = "back_jyblog" BackSystemJyb = "back_jyblog"
BackActivityLog = "back_activitylog"
) )
// mgrsrv // mgrsrv

File diff suppressed because it is too large Load Diff

View File

@ -236,6 +236,8 @@ enum PlayerPacketID {
PACKET_SCClawdollItemLog = 2845;// PACKET_SCClawdollItemLog = 2845;//
PACKET_CSDollConfig = 2846; // PACKET_CSDollConfig = 2846; //
PACKET_SCDollConfig = 2847; // PACKET_SCDollConfig = 2847; //
PACKET_CSPopUpWindowConfig = 2848; //
PACKET_SCPopUpWindowConfig = 2849; //
} }
// //
@ -1408,3 +1410,19 @@ message MachineInfo{
int32 MachineId = 5; int32 MachineId = 5;
string Name = 6; string Name = 6;
} }
//
//PACKET_CSPopUpWindowConfig
message CSPopUpWindowConfig{
}
//
//PACKET_SCPopUpWindowConfig
message SCPopUpWindowConfig{
repeated PopUpWindowInfo Info = 1;
}
message PopUpWindowInfo{
int32 Id = 1;
string Name = 2;
string Key = 3;
int32 OpenStatus = 4;//1- 0-
int32 Weight = 5;//
}

File diff suppressed because it is too large Load Diff

View File

@ -205,6 +205,7 @@ message WGCreateScene {
MatchParam Match = 16; // MatchParam Match = 16; //
repeated int32 ChessRank = 26; // repeated int32 ChessRank = 26; //
repeated int64 Params = 27; // ,GameRule中定义, repeated int64 Params = 27; // ,GameRule中定义,
bool CloseCtrl = 28; //
} }
//PACKET_WG_DESTROYSCENE //PACKET_WG_DESTROYSCENE

File diff suppressed because it is too large Load Diff

View File

@ -109,6 +109,7 @@ message GameFree {
int32 GroupId = 1; // ID int32 GroupId = 1; // ID
bool Status = 2; // bool Status = 2; //
server.DB_GameFree DbGameFree = 3; // excel导出结构 server.DB_GameFree DbGameFree = 3; // excel导出结构
bool CloseCtrl = 4; //
} }
// //
@ -920,6 +921,10 @@ message MachineInfo{
int32 ItemNum = 7; // int32 ItemNum = 7; //
string IconAddr = 8;// string IconAddr = 8;//
string Name = 9;// string Name = 9;//
double BuyPrice = 10; //
double CatchPrice = 11; //
double ProfitMin = 12; //
double ProfitMax = 13; //
} }
// etcd /game/match_audience // etcd /game/match_audience
message MatchAudience { message MatchAudience {
@ -989,3 +994,16 @@ message ClientUpgrade{
int32 OnForce = 3; // 1 2 int32 OnForce = 3; // 1 2
repeated ItemInfo Reward = 4; // repeated ItemInfo Reward = 4; //
} }
//etcd /game/PopUpWindowConfig
message PopUpWindowConfig{
string Platform = 1; //
repeated PopUpWindowInfo Info = 2;
}
message PopUpWindowInfo{
int32 Id = 1;
string Name = 2;
string Key = 3;
int32 OpenStatus = 4;//1- 2-
int32 Weight = 5;//
}

View File

@ -7265,6 +7265,7 @@ type SACreateOrder struct {
ExchangeOrderId string `protobuf:"bytes,14,opt,name=ExchangeOrderId,proto3" json:"ExchangeOrderId,omitempty"` //兑换订单号 ExchangeOrderId string `protobuf:"bytes,14,opt,name=ExchangeOrderId,proto3" json:"ExchangeOrderId,omitempty"` //兑换订单号
Channel string `protobuf:"bytes,15,opt,name=Channel,proto3" json:"Channel,omitempty"` // 渠道 Channel string `protobuf:"bytes,15,opt,name=Channel,proto3" json:"Channel,omitempty"` // 渠道
ChannelID string `protobuf:"bytes,16,opt,name=ChannelID,proto3" json:"ChannelID,omitempty"` // 渠道ID ChannelID string `protobuf:"bytes,16,opt,name=ChannelID,proto3" json:"ChannelID,omitempty"` // 渠道ID
BuyType int32 `protobuf:"varint,17,opt,name=BuyType,proto3" json:"BuyType,omitempty"` // 购买类型
} }
func (x *SACreateOrder) Reset() { func (x *SACreateOrder) Reset() {
@ -7411,6 +7412,13 @@ func (x *SACreateOrder) GetChannelID() string {
return "" return ""
} }
func (x *SACreateOrder) GetBuyType() int32 {
if x != nil {
return x.BuyType
}
return 0
}
type ASCreateOrder struct { type ASCreateOrder struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -10294,7 +10302,7 @@ var file_webapi_proto_rawDesc = []byte{
0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61,
0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12,
0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73,
0x67, 0x22, 0xdb, 0x03, 0x0a, 0x0d, 0x53, 0x41, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x67, 0x22, 0xf5, 0x03, 0x0a, 0x0d, 0x53, 0x41, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72,
0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x12, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x12,
@ -10323,213 +10331,215 @@ var file_webapi_proto_rawDesc = []byte{
0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e,
0x65, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x65, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x10, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x18, 0x10,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x12,
0x45, 0x0a, 0x0d, 0x41, 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0a, 0x07, 0x42, 0x75, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05,
0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x52, 0x07, 0x42, 0x75, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x45, 0x0a, 0x0d, 0x41, 0x53, 0x43,
0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61,
0x03, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03,
0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x54, 0x0a, 0x12, 0x53, 0x41, 0x57, 0x65, 0x62, 0x41, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x10,
0x50, 0x49, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x61, 0x22, 0x54, 0x0a, 0x12, 0x53, 0x41, 0x57, 0x65, 0x62, 0x41, 0x50, 0x49, 0x53, 0x79, 0x73, 0x74,
0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x42, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x65, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x43, 0x42, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16,
0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x66, 0x0a, 0x12, 0x0a, 0x06, 0x43, 0x42, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x41, 0x53, 0x57, 0x65, 0x62, 0x41, 0x50, 0x49, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x43, 0x42, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01,
0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x66, 0x0a, 0x12, 0x41, 0x53, 0x57, 0x65, 0x62, 0x41,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x49, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09,
0x12, 0x16, 0x0a, 0x06, 0x45, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x52, 0x06, 0x45, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x72,
0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x45, 0x72, 0x72, 0x4d,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a, 0x11, 0x41, 0x53, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03,
0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f,
0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x0a, 0x11, 0x41, 0x53, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d,
0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a,
0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x11, 0x53, 0x41, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61,
0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22,
0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x48, 0x0a, 0x11, 0x53, 0x41, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79,
0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f,
0x1e, 0x0a, 0x0a, 0x41, 0x53, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02,
0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x1e, 0x0a, 0x0a, 0x41, 0x53, 0x52,
0x41, 0x0a, 0x0a, 0x53, 0x41, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01,
0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x41, 0x0a, 0x0a, 0x53, 0x41, 0x52,
0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01,
0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61,
0x73, 0x67, 0x22, 0x7d, 0x0a, 0x09, 0x41, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x73, 0x12, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73,
0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x7d, 0x0a, 0x09,
0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x41, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69,
0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68,
0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x6f, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66,
0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66,
0x44, 0x22, 0x40, 0x0a, 0x09, 0x53, 0x41, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x73, 0x12, 0x21, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20,
0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x44, 0x22, 0x40, 0x0a, 0x09, 0x53,
0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x41, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18,
0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54,
0x4d, 0x73, 0x67, 0x22, 0xb9, 0x01, 0x0a, 0x13, 0x41, 0x53, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d,
0x63, 0x68, 0x41, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0xb9, 0x01,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x0a, 0x13, 0x41, 0x53, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x77, 0x61, 0x72,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x74, 0x65, 0x6d, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
0x6d, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x18,
0x28, 0x03, 0x52, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x65, 0x6c, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x12, 0x14, 0x0a,
0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4d, 0x6f,
0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6e, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x52, 0x03, 0x54, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70,
0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70,
0x74, 0x0a, 0x13, 0x53, 0x41, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x77, 0x61, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28,
0x72, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x74, 0x0a, 0x13, 0x53, 0x41, 0x47,
0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x64, 0x65,
0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a,
0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4d, 0x6f,
0x6e, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x4f, 0x0a, 0x0b, 0x41, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x54, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x54, 0x65, 0x6c, 0x22, 0x42, 0x0a, 0x0b, 0x53, 0x41, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x54, 0x65, 0x6c, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43,
0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x22, 0x0a, 0x0e, 0x41, 0x53,
0x47, 0x65, 0x74, 0x49, 0x6d, 0x67, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x54, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x65, 0x6c, 0x22, 0x77,
0x0a, 0x0e, 0x53, 0x41, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x67, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79,
0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e,
0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03,
0x54, 0x61, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79,
0x61, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, 0x10, 0x0a,
0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22,
0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x40, 0x0a, 0x0e, 0x41, 0x53, 0x50, 0x6c, 0x61, 0x4f, 0x0a, 0x0b, 0x41, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6c, 0x12, 0x1a,
0x79, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10,
0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x45, 0x0a, 0x0e, 0x53, 0x41, 0x50, 0x0a, 0x03, 0x54, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x65, 0x6c,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x22, 0x42, 0x0a, 0x0b, 0x53, 0x41, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6c, 0x12,
0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70,
0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10,
0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
0x22, 0x44, 0x0a, 0x12, 0x41, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x76, 0x69,
0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x12, 0x53, 0x41, 0x50, 0x6c, 0x61, 0x79,
0x65, 0x72, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x21, 0x0a, 0x03,
0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61,
0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12,
0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73,
0x67, 0x12, 0x12, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x22, 0x9d, 0x01, 0x0a, 0x0d, 0x41, 0x53, 0x41, 0x64, 0x64, 0x49,
0x74, 0x65, 0x6d, 0x42, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50,
0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49,
0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61,
0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x49, 0x74, 0x65,
0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18,
0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a,
0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x52,
0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x44, 0x0a, 0x0d, 0x53, 0x41, 0x41, 0x64, 0x64, 0x49, 0x74,
0x65, 0x6d, 0x42, 0x79, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67,
0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x3d, 0x0a, 0x0b, 0x41,
0x53, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x0b, 0x53,
0x41, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x49, 0x6e,
0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70,
0x69, 0x2e, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77,
0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54,
0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x4d, 0x73, 0x67, 0x22, 0x33, 0x0a, 0x07, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12,
0x18, 0x0a, 0x07, 0x53, 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x53, 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3c, 0x0a, 0x0a, 0x41, 0x53, 0x41,
0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x46, 0x0a, 0x14, 0x41, 0x53, 0x50, 0x6f, 0x70,
0x55, 0x70, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53,
0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22,
0xa4, 0x01, 0x0a, 0x14, 0x53, 0x41, 0x50, 0x6f, 0x70, 0x55, 0x70, 0x57, 0x69, 0x6e, 0x64, 0x6f,
0x77, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74,
0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74,
0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f,
0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e,
0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66,
0x6f, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f,
0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52,
0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x6e, 0x64, 0x6f,
0x77, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x61,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x61,
0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01,
0x28, 0x05, 0x52, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x74,
0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x74, 0x4e,
0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20,
0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x24, 0x0a, 0x0a,
0x41, 0x53, 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, 0x22, 0x5d, 0x0a, 0x09, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03,
0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c,
0x6f, 0x67, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49,
0x64, 0x22, 0x7c, 0x0a, 0x0a, 0x53, 0x41, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77,
0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54,
0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x22, 0x0a, 0x0e, 0x41, 0x53, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x67,
0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x65, 0x6c, 0x18, 0x01, 0x20,
0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x65, 0x6c, 0x22, 0x77, 0x0a, 0x0e, 0x53, 0x41, 0x47, 0x65,
0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x74, 0x49, 0x6d, 0x67, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61,
0x48, 0x0a, 0x16, 0x41, 0x53, 0x47, 0x65, 0x74, 0x44, 0x6f, 0x6c, 0x6c, 0x45, 0x78, 0x63, 0x68, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69,
0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x1c, 0x0a,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x52, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x43,
0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x74, 0x0a, 0x16, 0x53, 0x41, 0x47, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73,
0x67, 0x22, 0x40, 0x0a, 0x0e, 0x41, 0x53, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x65, 0x6c,
0x65, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12,
0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53,
0x6e, 0x69, 0x64, 0x22, 0x45, 0x0a, 0x0e, 0x53, 0x41, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44,
0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43,
0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x44, 0x0a, 0x12, 0x41, 0x53,
0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b,
0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04,
0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64,
0x22, 0x5d, 0x0a, 0x12, 0x53, 0x41, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x76, 0x69,
0x74, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67,
0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4c,
0x69, 0x6e, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x22,
0x9d, 0x01, 0x0a, 0x0d, 0x41, 0x53, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x49,
0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x12, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65,
0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72,
0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22,
0x44, 0x0a, 0x0d, 0x53, 0x41, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x49, 0x64,
0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e,
0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03,
0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x3d, 0x0a, 0x0b, 0x41, 0x53, 0x53, 0x4d, 0x53, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
0x53, 0x6e, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x0b, 0x53, 0x41, 0x53, 0x4d, 0x53, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
0x53, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x4d, 0x53, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e,
0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03,
0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x33,
0x0a, 0x07, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6d, 0x73,
0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x6d, 0x73, 0x4e,
0x61, 0x6d, 0x65, 0x22, 0x3c, 0x0a, 0x0a, 0x41, 0x53, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x6f,
0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a,
0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49,
0x64, 0x22, 0x46, 0x0a, 0x14, 0x41, 0x53, 0x50, 0x6f, 0x70, 0x55, 0x70, 0x57, 0x69, 0x6e, 0x64,
0x6f, 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61,
0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20,
0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0xa4, 0x01, 0x0a, 0x14, 0x53, 0x41,
0x50, 0x6f, 0x70, 0x55, 0x70, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12,
0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e,
0x49, 0x64, 0x12, 0x27, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x13, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77,
0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x03, 0x54,
0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70,
0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10,
0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
0x22, 0x83, 0x01, 0x0a, 0x0b, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x49, 0x6e, 0x66, 0x6f,
0x12, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x55, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x12, 0x12,
0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6f,
0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x18, 0x04, 0x20,
0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07,
0x47, 0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47,
0x61, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x22, 0x24, 0x0a, 0x0a, 0x41, 0x53, 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, 0x22, 0x5d, 0x0a, 0x09,
0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75,
0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12,
0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12,
0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x05,
0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x04,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x0a, 0x53,
0x41, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e,
0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03,
0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12,
0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e,
0x49, 0x64, 0x12, 0x25, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x16, 0x41, 0x53, 0x47,
0x65, 0x74, 0x44, 0x6f, 0x6c, 0x6c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x65, 0x74, 0x44, 0x6f, 0x6c, 0x6c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72,
0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x37, 0x0a, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4c, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x6f, 0x72, 0x6d, 0x22, 0x74, 0x0a, 0x16, 0x53, 0x41, 0x47, 0x65, 0x74, 0x44, 0x6f, 0x6c, 0x6c,
0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62,
0xdc, 0x01, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67,
0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x12, 0x37, 0x0a, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20,
0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63,
0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09,
0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0xdc, 0x01, 0x0a, 0x07, 0x54, 0x61,
0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12,
0x59, 0x42, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53,
0x11, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50,
0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10,
0x08, 0x54, 0x65, 0x6c, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52,
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x43, 0x4f, 0x44,
0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x6c, 0x61,
0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0c, 0x42, 0x26, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05,
0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x65, 0x6c, 0x45, 0x78,
0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x65,
0x6c, 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x0b, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f,
0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x10, 0x0c, 0x42, 0x26, 0x5a, 0x24, 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, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@ -811,6 +811,7 @@ message SACreateOrder {
string ExchangeOrderId = 14; // string ExchangeOrderId = 14; //
string Channel = 15; // string Channel = 15; //
string ChannelID = 16; // ID string ChannelID = 16; // ID
int32 BuyType = 17; //
} }
message ASCreateOrder { message ASCreateOrder {
int32 Tag = 1; //0. 1. int32 Tag = 1; //0. 1.

View File

@ -5,4 +5,3 @@ worldsrv
gamesrv gamesrv
robot robot
ranksrv ranksrv
machine

View File

@ -2,10 +2,14 @@ package webapi
import ( import (
"errors" "errors"
"time"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/model"
"mongo.games.com/game/mq"
"mongo.games.com/game/proto" "mongo.games.com/game/proto"
"mongo.games.com/game/protocol/webapi" "mongo.games.com/game/protocol/webapi"
"mongo.games.com/goserver/core/logger"
"time"
) )
type PlayerStatement struct { type PlayerStatement struct {
@ -109,7 +113,7 @@ func ApiPopupWindowsConfig(appId string, body proto.Message) ([]byte, error) {
// 支付订单 商城 // 支付订单 商城
func API_CreateOrder(appId, orderId string, configid, SnId, shopId int32, platform string, packageTag string, os, deviceId, shopname string, func API_CreateOrder(appId, orderId string, configid, SnId, shopId int32, platform string, packageTag string, os, deviceId, shopname string,
amount [3]int32, consumptionamount int32, itemInfo []*webapi.ItemInfo, exchangeOrderId, channel, channelId string) *webapi.ASCreateOrder { amount [3]int32, consumptionamount int32, itemInfo []*webapi.ItemInfo, exchangeOrderId, channel, channelId string, buyType int32) *webapi.ASCreateOrder {
body := &webapi.SACreateOrder{ body := &webapi.SACreateOrder{
OrderId: orderId, OrderId: orderId,
SnId: SnId, SnId: SnId,
@ -127,6 +131,7 @@ func API_CreateOrder(appId, orderId string, configid, SnId, shopId int32, platfo
ExchangeOrderId: exchangeOrderId, ExchangeOrderId: exchangeOrderId,
Channel: channel, Channel: channel,
ChannelID: channelId, ChannelID: channelId,
BuyType: buyType,
} }
ret := &webapi.ASCreateOrder{} ret := &webapi.ASCreateOrder{}
buff, err := postRequest(appId, "/create_order", nil, body, "http", DEFAULT_TIMEOUT) buff, err := postRequest(appId, "/create_order", nil, body, "http", DEFAULT_TIMEOUT)
@ -140,6 +145,7 @@ func API_CreateOrder(appId, orderId string, configid, SnId, shopId int32, platfo
logger.Logger.Error("API_CreateOrder Unmarshal err:", err) logger.Logger.Error("API_CreateOrder Unmarshal err:", err)
return nil return nil
} }
mq.Write(model.GenerateActivityLog(SnId, platform, buyType, 0))
return ret return ret
} }

View File

@ -269,6 +269,7 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e
} }
} }
gainFunc(common.GainWay_Collect, "player", "集卡活动") gainFunc(common.GainWay_Collect, "player", "集卡活动")
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_CollectBox, 1))
default: default:
logger.Logger.Warnf("道具使用未定义", msg.ItemId) logger.Logger.Warnf("道具使用未定义", msg.ItemId)

View File

@ -210,6 +210,7 @@ func (this *CSPhoneLotteryHandler) Process(s *netlib.Session, packetid int, data
mq.Write(model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, model.SystemFreeGive_PhoneLottery, tp1, v.ItemNum)) mq.Write(model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, model.SystemFreeGive_PhoneLottery, tp1, v.ItemNum))
} }
} }
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_PhoneLottery, 1))
} }
return nil return nil
} }
@ -419,6 +420,7 @@ func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, da
p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DiamondLottery), pack) p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DiamondLottery), pack)
logger.Logger.Trace("返回钻石抽奖信息:", pack.String()) logger.Logger.Trace("返回钻石抽奖信息:", pack.String())
} }
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_DiamondLottery, 1))
} }
return nil return nil
} }

View File

@ -3273,6 +3273,32 @@ func CSCLAWDOLLConfig(s *netlib.Session, packetId int, data interface{}, sid int
} }
return nil return nil
} }
// 客户端请求弹窗配置
func CSPopUpWindowConfig(s *netlib.Session, packetId int, data interface{}, sid int64) error {
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
return nil
}
config := PlatformMgrSingleton.GetConfig(p.Platform).PopUpWindowConfig
if config == nil {
return nil
}
pack := &player_proto.SCPopUpWindowConfig{}
for _, value := range config.Info {
info := &player_proto.PopUpWindowInfo{
Id: value.Id,
Name: value.Name,
Key: value.Key,
OpenStatus: value.OpenStatus,
Weight: value.Weight,
}
pack.Info = append(pack.Info, info)
}
p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SCPopUpWindowConfig), pack)
return nil
}
func init() { func init() {
// 用户信息 // 用户信息
common.Register(int(player_proto.PlayerPacketID_PACKET_CS_PLAYERDATA), player_proto.CSPlayerData{}, CSPlayerData) common.Register(int(player_proto.PlayerPacketID_PACKET_CS_PLAYERDATA), player_proto.CSPlayerData{}, CSPlayerData)
@ -3310,4 +3336,6 @@ func init() {
common.Register(int(player_proto.PlayerPacketID_PACKET_CSClawdollItemLog), player_proto.CSClawdollItemLog{}, CSClawdollItemLog) common.Register(int(player_proto.PlayerPacketID_PACKET_CSClawdollItemLog), player_proto.CSClawdollItemLog{}, CSClawdollItemLog)
//客户端请求配置信息 //客户端请求配置信息
common.Register(int(player_proto.PlayerPacketID_PACKET_CSDollConfig), player_proto.CSCLAWDOLLConfig{}, CSCLAWDOLLConfig) common.Register(int(player_proto.PlayerPacketID_PACKET_CSDollConfig), player_proto.CSCLAWDOLLConfig{}, CSCLAWDOLLConfig)
//客户端请求弹窗配置信息
common.Register(int(player_proto.PlayerPacketID_PACKET_CSPopUpWindowConfig), player_proto.CSPopUpWindowConfig{}, CSPopUpWindowConfig)
} }

View File

@ -141,6 +141,9 @@ func SendReward(p *Player, m map[int64]int64, tp int32) {
mq.Write(model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, giveType, tp, v.ItemNum)) mq.Write(model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, giveType, tp, v.ItemNum))
} }
} }
if giveType == model.SystemFreeGive_GiveType_TaskPermit {
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_Permit, 1))
}
} }
func CSTaskList(s *netlib.Session, packetId int, data interface{}, sid int64) error { func CSTaskList(s *netlib.Session, packetId int, data interface{}, sid int64) error {

View File

@ -1132,6 +1132,7 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int
Gain: gain, Gain: gain,
Ts: now.Unix(), Ts: now.Unix(),
}) })
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_Permit, 2))
} }
} }

View File

@ -729,7 +729,7 @@ func (this *BagMgr) AddItems(param *model.AddItemParam) (*BagInfo, bag.OpResultC
} }
// 同步游戏服务器 // 同步游戏服务器
if p.scene != nil { if p.scene != nil && !param.IsGame {
b, err := netlib.Gob.Marshal(items) b, err := netlib.Gob.Marshal(items)
if err != nil { if err != nil {
logger.Logger.Errorf("AddItems Marshal error(%v)", err) logger.Logger.Errorf("AddItems Marshal error(%v)", err)

View File

@ -102,6 +102,8 @@ func init() {
etcd.Register(etcd.ETCDKEY_MACHINE, webapi.MachineConfig{}, platformConfigEvent) etcd.Register(etcd.ETCDKEY_MACHINE, webapi.MachineConfig{}, platformConfigEvent)
//客户端升级奖励配置 //客户端升级奖励配置
etcd.Register(etcd.ETCDKEY_ClientUpgrade, webapi.ClientUpgrade{}, platformConfigEvent) etcd.Register(etcd.ETCDKEY_ClientUpgrade, webapi.ClientUpgrade{}, platformConfigEvent)
//弹窗活动配置
etcd.Register(etcd.ETCDKEY_PopUpWindow, webapi.PopUpWindowConfig{}, platformConfigEvent)
} }
func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) {
@ -338,6 +340,8 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e
} }
case *webapi.ClientUpgrade: case *webapi.ClientUpgrade:
PlatformMgrSingleton.GetConfig(config.Platform).ClientUpgrade = config PlatformMgrSingleton.GetConfig(config.Platform).ClientUpgrade = config
case *webapi.PopUpWindowConfig:
PlatformMgrSingleton.GetConfig(config.Platform).PopUpWindowConfig = config
default: default:
logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey)
} }

View File

@ -163,6 +163,7 @@ func (this *GameSession) AddScene(args *AddSceneParam) {
Custom: args.S.CustomParam, Custom: args.S.CustomParam,
Match: args.S.MatchParam, Match: args.S.MatchParam,
Params: args.S.params, Params: args.S.params,
CloseCtrl: args.S.CloseCtrl,
} }
if args.S.CustomParam.GetRoomConfigId() != 0 { if args.S.CustomParam.GetRoomConfigId() != 0 {
cfg := PlatformMgrSingleton.GetConfig(args.S.platform.IdStr).RoomConfig[args.S.CustomParam.GetRoomConfigId()] cfg := PlatformMgrSingleton.GetConfig(args.S.platform.IdStr).RoomConfig[args.S.CustomParam.GetRoomConfigId()]

View File

@ -127,6 +127,7 @@ func (cfg *GameList) GetGameConfig(gameFreeId int32) *webapiproto.GameFree {
func CompareGameFreeConfigChanged(oldCfg, newCfg *webapiproto.GameFree) bool { func CompareGameFreeConfigChanged(oldCfg, newCfg *webapiproto.GameFree) bool {
if oldCfg.Status != newCfg.Status || if oldCfg.Status != newCfg.Status ||
oldCfg.GroupId != newCfg.GroupId || oldCfg.GroupId != newCfg.GroupId ||
oldCfg.GetCloseCtrl() != newCfg.GetCloseCtrl() ||
oldCfg.DbGameFree.GetBot() != newCfg.DbGameFree.GetBot() || oldCfg.DbGameFree.GetBot() != newCfg.DbGameFree.GetBot() ||
oldCfg.DbGameFree.GetBaseScore() != newCfg.DbGameFree.GetBaseScore() || oldCfg.DbGameFree.GetBaseScore() != newCfg.DbGameFree.GetBaseScore() ||
oldCfg.DbGameFree.GetLimitCoin() != newCfg.DbGameFree.GetLimitCoin() || oldCfg.DbGameFree.GetLimitCoin() != newCfg.DbGameFree.GetLimitCoin() ||

View File

@ -4466,6 +4466,7 @@ func (this *Player) GetWeekCardAwary(id int32) {
} }
ret.WeekCard = info ret.WeekCard = info
this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCGetWeekCardAwary), ret) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCGetWeekCardAwary), ret)
mq.Write(model.GenerateActivityLog(this.SnId, this.Platform, model.ActivityLog_WeekCard, 1))
return return
} }

View File

@ -65,8 +65,10 @@ type Scene struct {
*serverproto.CustomParam // 房卡场参数 *serverproto.CustomParam // 房卡场参数
*serverproto.MatchParam // 比赛场参数 *serverproto.MatchParam // 比赛场参数
*webapiproto.RoomConfigSystem // 系统竞技馆房间 *webapiproto.RoomConfigSystem // 系统竞技馆房间
csp *CoinScenePool // 所在场景池 CloseCtrl bool // 调控开关
hp *HundredSceneMgr // 百人场房间池
csp *CoinScenePool // 所在场景池
hp *HundredSceneMgr // 百人场房间池
} }
// NewScene 创建房间 // NewScene 创建房间
@ -146,6 +148,10 @@ func NewScene(args *CreateSceneParam) *Scene {
if s.RoomConfigSystem == nil { if s.RoomConfigSystem == nil {
s.RoomConfigSystem = new(webapiproto.RoomConfigSystem) s.RoomConfigSystem = new(webapiproto.RoomConfigSystem)
} }
gf := PlatformMgrSingleton.GetGameFree(args.Platform.IdStr, args.GF.GetId())
if gf != nil {
s.CloseCtrl = gf.GetCloseCtrl()
}
return s return s
} }

View File

@ -707,6 +707,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po
p.AddDiamond(-costNum, 0, gainWay, "sys", shopName) p.AddDiamond(-costNum, 0, gainWay, "sys", shopName)
case ShopConsumePhoneScore: case ShopConsumePhoneScore:
p.AddPhoneScore(-costNum, 0, gainWay, "sys", shopName) p.AddPhoneScore(-costNum, 0, gainWay, "sys", shopName)
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_PhoneLottery, 2))
case ShopConsumeDiamondScore: case ShopConsumeDiamondScore:
BagMgrSingleton.AddItems(&model.AddItemParam{ BagMgrSingleton.AddItems(&model.AddItemParam{
Platform: p.Platform, Platform: p.Platform,
@ -721,6 +722,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po
Operator: "system", Operator: "system",
Remark: "商城购买消耗钻石积分", Remark: "商城购买消耗钻石积分",
}) })
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_DiamondLottery, 2))
default: default:
logger.Logger.Errorf("GainShop ConstType[%v] err", shopInfo.ConstType) logger.Logger.Errorf("GainShop ConstType[%v] err", shopInfo.ConstType)
return shop.OpResultCode_OPRC_Error return shop.OpResultCode_OPRC_Error
@ -1327,8 +1329,18 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any,
logger.Logger.Errorf("model.InsertDbShopLog err:", err) logger.Logger.Errorf("model.InsertDbShopLog err:", err)
return nil return nil
} }
buyType := model.ActivityLog_Shop
if shopInfo.Page == ShopPagePermit {
buyType = model.ActivityLog_Permit
}
if shopInfo.Page == ShopPageDiamondBank {
buyType = model.ActivityLog_PigBank
}
if shopInfo.Page == ShopPageGift {
buyType = model.ActivityLog_WeekCard
}
return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, shopInfo.Id, p.Platform, p.PackageID, p.DeviceOS, return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, shopInfo.Id, p.Platform, p.PackageID, p.DeviceOS,
p.DeviceId, shopInfo.Name, amount, costNum, webItemInfo, "", p.Channel, p.ChannelId) p.DeviceId, shopInfo.Name, amount, costNum, webItemInfo, "", p.Channel, p.ChannelId, int32(buyType))
} else if cdata, ok := data.(*ExchangeShopInfo); ok { } else if cdata, ok := data.(*ExchangeShopInfo); ok {
var info *shop.ExchangeType var info *shop.ExchangeType
@ -1353,7 +1365,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any,
//兑换 充值订单 //兑换 充值订单
logger.Logger.Infof("客户端请求兑换 创建支付订单AppId = %v,SnId = %v,Id = %v,dbShop.LogId.Hex() = %v,cash = %v", common.GetAppId(), p.SnId, cdata.Id, dbShop.LogId.Hex(), info.Cash*cdata.ExchangeNum) logger.Logger.Infof("客户端请求兑换 创建支付订单AppId = %v,SnId = %v,Id = %v,dbShop.LogId.Hex() = %v,cash = %v", common.GetAppId(), p.SnId, cdata.Id, dbShop.LogId.Hex(), info.Cash*cdata.ExchangeNum)
return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, cdata.Id, p.Platform, p.PackageID, p.DeviceOS, return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, cdata.Id, p.Platform, p.PackageID, p.DeviceOS,
p.DeviceId, cdata.Name, amount, info.Cash*cdata.ExchangeNum, nil, orderId, p.Channel, p.ChannelId) p.DeviceId, cdata.Name, amount, info.Cash*cdata.ExchangeNum, nil, orderId, p.Channel, p.ChannelId, model.ActivityLog_Exchange)
} else if bbd, ok := data.(*webapi_proto.BlindBoxData); ok { } else if bbd, ok := data.(*webapi_proto.BlindBoxData); ok {
if bbd.Type == ShopTypeCoin { if bbd.Type == ShopTypeCoin {
//金币 //金币
@ -1370,7 +1382,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any,
return nil return nil
} }
return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS, return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS,
p.DeviceId, bbd.Name, amount, int32(bbd.Price2), nil, "", p.Channel, p.ChannelId) p.DeviceId, bbd.Name, amount, int32(bbd.Price2), nil, "", p.Channel, p.ChannelId, model.ActivityLog_BlindBox)
} else if wfs, ok := data.(*webapi_proto.WelfareSpree); ok { } else if wfs, ok := data.(*webapi_proto.WelfareSpree); ok {
var items []model.ItemInfo var items []model.ItemInfo
var webItemInfo []*webapi_proto.ItemInfo var webItemInfo []*webapi_proto.ItemInfo
@ -1391,8 +1403,10 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any,
} }
} }
var gainWay int32 = common.GainWay_ActFirstPay var gainWay int32 = common.GainWay_ActFirstPay
buyType := model.ActivityLog_FirstPay
if remark == "ContinuousPay" { if remark == "ContinuousPay" {
gainWay = common.GainWay_ActContinuousPay gainWay = common.GainWay_ActContinuousPay
buyType = model.ActivityLog_ContinuousPay
} }
dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(wfs.Price2), gainWay, items, 0, "", 0, remark, []int32{wfs.Day}) dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(wfs.Price2), gainWay, items, 0, "", 0, remark, []int32{wfs.Day})
err := model.InsertDbShopLog(dbShop) err := model.InsertDbShopLog(dbShop)
@ -1401,7 +1415,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any,
return nil return nil
} }
return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS, return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS,
p.DeviceId, "FirstRecharge", amount, int32(wfs.Price2), webItemInfo, "", p.Channel, p.ChannelId) p.DeviceId, "FirstRecharge", amount, int32(wfs.Price2), webItemInfo, "", p.Channel, p.ChannelId, int32(buyType))
} }
return nil return nil
}), task.CompleteNotifyWrapper(func(retdata interface{}, t task.Task) { }), task.CompleteNotifyWrapper(func(retdata interface{}, t task.Task) {

View File

@ -404,6 +404,7 @@ func (this *WelfareMgr) GetTurnplate(p *Player) {
} }
logger.Logger.Tracef("GetTurnplate snid: %v pack: %v", p.SnId, pack) logger.Logger.Tracef("GetTurnplate snid: %v pack: %v", p.SnId, pack)
p.SendToClient(int(welfare.SPacketID_PACKET_SC_WELF_GETTURNPLATE), pack) p.SendToClient(int(welfare.SPacketID_PACKET_SC_WELF_GETTURNPLATE), pack)
mq.Write(model.GenerateActivityLog(p.SnId, p.Platform, model.ActivityLog_Sign, 1))
} }
// GetTurnplteVideo 转盘视频奖励 // GetTurnplteVideo 转盘视频奖励

Binary file not shown.