Merge branch 'develop' into release

This commit is contained in:
sk 2024-07-15 11:15:15 +08:00
commit 8f24ca5592
83 changed files with 11272 additions and 7024 deletions

View File

@ -5,7 +5,5 @@ go env -w GO111MODULE=off
call shell/build.bat call shell/build.bat
echo "Wait all build task complete!" echo "Wait all build task complete!"
pause
if %errorcode% neq 0 (
pause
)

View File

@ -196,102 +196,105 @@ const (
) )
const ( const (
GainWay_NewPlayer int32 = 0 //新建角色 GainWay_NewPlayer int32 = 0 //新建角色
GainWay_Pay = 1 //后台增加(主要是充值) GainWay_Pay = 1 //后台增加(主要是充值)
GainWay_ByPMCmd = 2 //pm命令 GainWay_ByPMCmd = 2 //pm命令
GainWay_MatchBreakBack = 3 //退赛退还 GainWay_MatchBreakBack = 3 //退赛退还
GainWay_MatchSystemSupply = 4 //比赛奖励 GainWay_MatchSystemSupply = 4 //比赛奖励
GainWay_Exchange = 5 //兑换 GainWay_Exchange = 5 //兑换
GainWay_ServiceFee = 6 //桌费 GainWay_ServiceFee = 6 //桌费
GainWay_CoinSceneWin = 7 //金豆场赢取 GainWay_CoinSceneWin = 7 //金豆场赢取
GainWay_CoinSceneLost = 8 //金豆场输 GainWay_CoinSceneLost = 8 //金豆场输
GainWay_CoinSceneEnter = 9 //进入金币场预扣 GainWay_CoinSceneEnter = 9 //进入金币场预扣
GainWay_ShopBuy = 10 //商城购买或者兑换 GainWay_ShopBuy = 10 //商城购买或者兑换
GainWay_CoinSceneLeave = 11 //金豆场回兑 GainWay_CoinSceneLeave = 11 //金豆场回兑
GainWay_HundredSceneWin = 12 //万人场赢取 GainWay_HundredSceneWin = 12 //万人场赢取
GainWay_HundredSceneLost = 13 //万人场输 GainWay_HundredSceneLost = 13 //万人场输
GainWay_MessageAttach = 14 //邮件 GainWay_MessageAttach = 14 //邮件
GainWay_SafeBoxSave = 15 //保险箱存入 GainWay_SafeBoxSave = 15 //保险箱存入
GainWay_SafeBoxTakeOut = 16 //保险箱取出 GainWay_SafeBoxTakeOut = 16 //保险箱取出
GainWay_Fishing = 17 //捕鱼 GainWay_Fishing = 17 //捕鱼
GainWay_CoinSceneExchange = 18 //金豆场兑换 GainWay_CoinSceneExchange = 18 //金豆场兑换
GainWay_UpgradeAccount = 19 //升级账号 GainWay_UpgradeAccount = 19 //升级账号
GainWay_API_AddCoin = 20 //API操作钱包 GainWay_API_AddCoin = 20 //API操作钱包
GainWay_GoldCome = 21 //财神降临 GainWay_GoldCome = 21 //财神降临
GainWay_Transfer_System2Thrid = 22 //系统平台转入到第三方平台的金币 GainWay_Transfer_System2Thrid = 22 //系统平台转入到第三方平台的金币
GainWay_Transfer_Thrid2System = 23 //第三方平台转入到系统平台的金币 GainWay_Transfer_Thrid2System = 23 //第三方平台转入到系统平台的金币
GainWay_RebateTask = 24 //返利获取 GainWay_RebateTask = 24 //返利获取
GainWay_IOSINSTALLSTABLE = 25 //ios安装奖励 GainWay_IOSINSTALLSTABLE = 25 //ios安装奖励
GainWay_VirtualChange = 26 //德州虚拟账变 GainWay_VirtualChange = 26 //德州虚拟账变
GainWay_CreatePrivateScene = 27 //创建私有房间 GainWay_CreatePrivateScene = 27 //创建私有房间
GainWay_PrivateSceneReturn = 28 //解散私有房间返还 GainWay_PrivateSceneReturn = 28 //解散私有房间返还
GainWay_OnlineRandCoin = 29 //红包雨 GainWay_OnlineRandCoin = 29 //红包雨
GainWay_Expire = 30 //到期清理 GainWay_Expire = 30 //到期清理
GainWay_PromoterBind = 31 //手动绑定推广员 GainWay_PromoterBind = 31 //手动绑定推广员
GainWay_GradeShopReturn = 32 //积分商城撤单退还积分 GainWay_GradeShopReturn = 32 //积分商城撤单退还积分
GainWay_Api_In = 33 //转移金币 GainWay_Api_In = 33 //转移金币
GainWay_Api_Out = 34 //转移金币 GainWay_Api_Out = 34 //转移金币
GainWay_Shop_Buy = 35 //购买记录 GainWay_Shop_Buy = 35 //购买记录
GainWay_MAIL_MTEM = 36 //邮件领取道具 GainWay_MAIL_MTEM = 36 //邮件领取道具
GainWay_Item_Sale = 37 //道具出售 GainWay_Item_Sale = 37 //道具出售
GainWay_ReliefFund = 38 //领取救济金 GainWay_ReliefFund = 38 //领取救济金
GainWay_Shop_Revoke = 39 //撤单 GainWay_Shop_Revoke = 39 //撤单
GainWay_ActSign = 40 // GainWay_ActSign = 40 //
GainWay_MatchSignup = 41 //比赛报名费用 GainWay_MatchSignup = 41 //比赛报名费用
GainWay_MatchSeason = 42 //比赛赛季奖励 GainWay_MatchSeason = 42 //比赛赛季奖励
GainWay_ActSignNew = 43 //新签到 GainWay_ActSignNew = 43 //新签到
GainWay_ActTurnplate = 44 //轮盘 GainWay_ActTurnplate = 44 //轮盘
GainWay_ActBlindBox = 45 //盲盒 GainWay_ActBlindBox = 45 //盲盒
GainWay_ActFirstPay = 46 //首充 GainWay_ActFirstPay = 46 //首充
GainWay_VIPGift = 47 //vip礼包 GainWay_VIPGift = 47 //vip礼包
GainWay_ActContinuousPay = 48 //连续充值 GainWay_ActContinuousPay = 48 //连续充值
GainWay_ActJybAward = 49 //礼包码兑换 GainWay_ActJybAward = 49 //礼包码兑换
GainWay_LeaveDeduct = 50 //离开扣分 GainWay_LeaveDeduct = 50 //离开扣分
GainWay_LeaveCombat = 51 //离开补偿 GainWay_LeaveCombat = 51 //离开补偿
GainWay_RankMatch = 52 //排位赛段位奖励 GainWay_RankMatch = 52 //排位赛段位奖励
GainWay_AddBag = 53 //增加背包接口调用 GainWay_AddBag = 53 //增加背包接口调用
GainWay_SmallRocket = 54 //小火箭收入 GainWay_SmallRocket = 54 //小火箭收入
GainWay_BindTel = 55 //绑定手机号 GainWay_BindTel = 55 //绑定手机号
GainWay_ReliefFund2 = 56 //救济金看视频双倍领取 GainWay_ReliefFund2 = 56 //救济金看视频双倍领取
GainWay_ActTurnplate2 = 57 //轮盘看视频双倍领取 GainWay_ActTurnplate2 = 57 //轮盘看视频双倍领取
GainWay_ActSignNew2 = 58 //签到看视频双倍领取 GainWay_ActSignNew2 = 58 //签到看视频双倍领取
GainWay_ItemUse = 59 //道具使用 GainWay_ItemUse = 59 //道具使用
GainWay_PhoneScore = 60 //手机积分活动 GainWay_PhoneScore = 60 //手机积分活动
GainWay_RankReward = 61 //排位奖励 GainWay_RankReward = 61 //排位奖励
GainWay_TaskReward = 62 //任务奖励 GainWay_TaskReward = 62 //任务奖励
GainWay_Interact = 63 //房间内互动效果 GainWay_Interact = 63 //房间内互动效果
GainWayItemCollectExchange = 64 //集卡活动兑换 GainWayItemCollectExchange = 64 //集卡活动兑换
GainWay_WeekCardAward = 65 //周卡奖励 GainWay_WeekCardAward = 65 //周卡奖励
GainWay_PigrankTakeCoin = 66 //存钱罐领取耗费钻石 GainWay_PigrankTakeCoin = 66 //存钱罐领取耗费钻石
GainWay_PigrankGainCoin = 67 //存钱罐打开获取金币 GainWay_PigrankGainCoin = 67 //存钱罐打开获取金币
GainWay_ItemMove = 68 //道具赠送 GainWay_ItemMove = 68 //道具赠送
GainWay_RoleUpgrade = 69 //角色升级 GainWay_RoleUpgrade = 69 //角色升级
GainWay_PetUpgrade = 70 //宠物升级 GainWay_PetUpgrade = 70 //宠物升级
GainWay_Game = 71 //游戏掉落 GainWay_Game = 71 //游戏掉落
GainWayItemCollectLogin = 73 //集卡活动登录 GainWayItemCollectLogin = 73 //集卡活动登录
GainWay_Collect = 74 //集卡活动 GainWay_Collect = 74 //集卡活动
GainWayItemPhoneScoreExchange = 75 //抽手机活动兑换 GainWayItemPhoneScoreExchange = 75 //抽手机活动兑换
GainWayItemTaskInvite = 78 //邀请任务 GainWayItemTaskInvite = 78 //邀请任务
GainWayItemTaskNewPlayer = 79 //新手任务 GainWayItemTaskNewPlayer = 79 //新手任务
GainWayItemTaskAchievement = 80 //成就任务 GainWayItemTaskAchievement = 80 //成就任务
GainWayItemTaskEveryDay = 81 //每日任务 GainWayItemTaskEveryDay = 81 //每日任务
GainWayItemWeekActive = 82 //周活跃奖励 GainWayItemWeekActive = 82 //周活跃奖励
GainWayContinueSign = 83 //累计签到 GainWayContinueSign = 83 //累计签到
GainWayBackend = 84 // 后台操作 GainWayBackend = 84 // 后台操作
GainWayBuyCoin = 85 // 商城购买金币 GainWayBuyCoin = 85 // 商城购买金币
GainWayBuyItem = 86 // 商城购买道具 GainWayBuyItem = 86 // 商城购买道具
GainWayBuyWeekCard = 87 // 商城购买周卡 GainWayBuyWeekCard = 87 // 商城购买周卡
GainWayVipBuyCoin = 88 // vip商城购买金币 GainWayVipBuyCoin = 88 // vip商城购买金币
GainWaySign7Con = 89 // 累计签到进阶奖励消耗 GainWaySign7Con = 89 // 累计签到进阶奖励消耗
GainWay_PigrankGainDiamond = 90 //存钱罐打开获取钻石 GainWay_PigrankGainDiamond = 90 //存钱罐打开获取钻石
GainWaySign7Add = 91 // 累计签到进阶奖励获得 GainWaySign7Add = 91 // 累计签到进阶奖励获得
GainWayItemChange = 92 //背包内使用道具兑换话费 GainWayItemChange = 92 //背包内使用道具兑换话费
GainWayPetSkillLevelUp = 93 //宠物技能升级 GainWayPetSkillLevelUp = 93 //宠物技能升级
GainWayPermitAward = 94 // 赛季通行证等级奖励 GainWayPermitAward = 94 // 赛季通行证等级奖励
GainWayItemPermitRank = 95 // 赛季通行证排行奖励 GainWayItemPermitRank = 95 // 赛季通行证排行奖励
GainWayPermitExchangeCost = 96 // 赛季通行证兑换消耗 GainWayPermitExchangeCost = 96 // 赛季通行证兑换消耗
GainWayPermitExchangeGain = 97 // 赛季通行证兑换获得 GainWayPermitExchangeGain = 97 // 赛季通行证兑换获得
GainWayItemTaskPermit = 98 // 赛季通行证任务 GainWayItemTaskPermit = 98 // 赛季通行证任务
GainWayDiamondLottery = 99 //钻石抽奖
GainWaySkinUnLock = 100 // 皮肤解锁消耗
GainWaySkinUpGrade = 101 // 皮肤升级消耗
) )
// 后台选择 金币变化类型 的充值 类型id号起始 // 后台选择 金币变化类型 的充值 类型id号起始
@ -598,6 +601,9 @@ const (
ItemIDPermit = 100011 // 赛季通行证积分 ItemIDPermit = 100011 // 赛季通行证积分
ItemIDLong = 50013 // 龙币 ItemIDLong = 50013 // 龙币
ItemIDPetSkill = 11001 //宠物技能升级道具 ItemIDPetSkill = 11001 //宠物技能升级道具
ItemIDVCard = 30001 // v卡
ItemIDJCard = 30002 // 金券
ItemDiamondScore = 100012 //钻石积分
) )
func ToItemId(id int32) int32 { func ToItemId(id int32) int32 {
@ -706,6 +712,7 @@ const (
TaskTypeTienlenLoseCoin = 28 // Tienlen输的金币数量 TaskTypeTienlenLoseCoin = 28 // Tienlen输的金币数量
TaskTypeTienlenWinCoin = 29 // Tienlen赢取金币数量 TaskTypeTienlenWinCoin = 29 // Tienlen赢取金币数量
TaskTypeRankMatchWinTimes = 30 // 排位胜利次数 TaskTypeRankMatchWinTimes = 30 // 排位胜利次数
TaskTypeBuyPermit = 31 // 购买典藏通行证
) )
const ( const (
@ -716,12 +723,13 @@ const (
) )
const ( const (
TaskActivityTypeEveryDay = 1 // 每日任务 TaskActivityTypeEveryDay = 1 // 每日任务
TaskActivityTypeWeek = 2 // 每周任务 TaskActivityTypeWeek = 2 // 每周任务
TaskActivityTypeNovice = 3 // 新手任务 TaskActivityTypeNovice = 3 // 新手任务
TaskActivityTypeInvite = 4 // 邀请任务 TaskActivityTypeInvite = 4 // 邀请任务
TaskActivityTypeAchieve = 5 // 成就任务 TaskActivityTypeAchieve = 5 // 成就任务
TaskActivityTypePermit = 6 // 赛季通行证任务 TaskActivityTypePermitEveryDay = 6 // 赛季通行证每日任务
TaskActivityTypePermit = 7 // 赛季通行证任务
) )
const HeadRange = 3 // 机器人头像id范围 const HeadRange = 3 // 机器人头像id范围
@ -786,6 +794,7 @@ var PetIDs = []int32{PetIDChicken}
const ( const (
ChannelSwitchExchange = 1 ChannelSwitchExchange = 1
ChannelSwitchDropItem = 2 ChannelSwitchDropItem = 2
DiamondLottery = 4
) )
// 特殊商品id // 特殊商品id
@ -797,3 +806,8 @@ const (
const PermitStartTsKey = "permit_start_ts" const PermitStartTsKey = "permit_start_ts"
const PermitAdd = 0.2 // 典藏通行证赛季积分多加,百分比 const PermitAdd = 0.2 // 典藏通行证赛季积分多加,百分比
const (
SkinGetAuto = 1
SkinGetItem = 2
)

View File

@ -95,17 +95,9 @@ func GetIntegerBit(num int32, index int32) bool {
} }
// 校验身份证是否合法 // 校验身份证是否合法
var IDReg, _ = regexp.Compile(`(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)`) var REGEXP_IPRule, _ = regexp.Compile(`^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$`)
var REGEXP_IPRule, _ = regexp.Compile(`^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$`)
var ClubNameRule, _ = regexp.Compile("^[\u4e00-\u9fa5a-zA-Z-z0-9]+$") var ClubNameRule, _ = regexp.Compile("^[\u4e00-\u9fa5a-zA-Z-z0-9]+$")
func IsValidID(id string) bool {
if IDReg != nil {
return IDReg.Match([]byte(id))
}
return false
}
func IsValidIP(Ip string) bool { func IsValidIP(Ip string) bool {
const UNKNOWIP = "0.0.0.0" const UNKNOWIP = "0.0.0.0"
if Ip == "" || Ip == UNKNOWIP { if Ip == "" || Ip == UNKNOWIP {

Binary file not shown.

View File

@ -170,7 +170,7 @@
"Classify": [ "Classify": [
1, 1,
0, 0,
1 0
], ],
"Type": 3, "Type": 3,
"Effect0": [ "Effect0": [
@ -202,7 +202,7 @@
"Classify": [ "Classify": [
1, 1,
0, 0,
1 0
], ],
"Type": 3, "Type": 3,
"Effect0": [ "Effect0": [
@ -1264,6 +1264,35 @@
"Location": "0", "Location": "0",
"Describe": "通行证中任务获得积分,可作为排行使用" "Describe": "通行证中任务获得积分,可作为排行使用"
}, },
{
"Id": 100012,
"Name": "钻石积分",
"ShowLocation": [
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 20,
"Effect0": [
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0
],
"CompositionMax": 1,
"Location": "0",
"Describe": "钻石抽奖中获得的积分"
},
{ {
"Id": 100135, "Id": 100135,
"Name": "圣耀裁决", "Name": "圣耀裁决",
@ -1446,9 +1475,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1477,9 +1506,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1508,9 +1537,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1539,9 +1568,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1570,9 +1599,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1601,9 +1630,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1632,9 +1661,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1663,9 +1692,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1694,9 +1723,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1725,9 +1754,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1756,9 +1785,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1787,9 +1816,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1818,9 +1847,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1849,9 +1878,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1880,9 +1909,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1911,9 +1940,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1942,9 +1971,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -1973,9 +2002,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2004,9 +2033,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2035,9 +2064,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2066,9 +2095,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2097,9 +2126,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2128,9 +2157,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2159,9 +2188,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2190,9 +2219,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2221,9 +2250,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2252,9 +2281,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2283,9 +2312,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2314,9 +2343,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2345,9 +2374,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2376,9 +2405,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2407,9 +2436,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2438,9 +2467,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2469,9 +2498,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2500,9 +2529,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2531,9 +2560,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2562,9 +2591,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2593,9 +2622,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2624,9 +2653,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2655,9 +2684,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2686,9 +2715,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2717,9 +2746,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2748,9 +2777,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2779,9 +2808,9 @@
1 1
], ],
"Classify": [ "Classify": [
1, 0,
1, 0,
0 1
], ],
"Type": 16, "Type": 16,
"Effect0": [ "Effect0": [
@ -2921,6 +2950,36 @@
"Location": "0", "Location": "0",
"Describe": "用途:话费兑换码\n产出途径七日累签进阶奖励", "Describe": "用途:话费兑换码\n产出途径七日累签进阶奖励",
"Num": 10 "Num": 10
},
{
"Id": 300000,
"Name": "财神送福",
"ShowLocation": [
1,
1
],
"Classify": [
0,
0,
0
],
"Type": 21,
"Effect0": [
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0
],
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "作用:解锁角色皮肤-财神送福,可在皮肤功能界面使用"
} }
] ]
} }

Binary file not shown.

View File

@ -1,4 +1,5 @@
<18>‰z Łś <18>‰z Łś
鮮 鮮 N N
в§

View File

@ -11,6 +11,11 @@
"ShowType": 2, "ShowType": 2,
"ShowVolume": 10001, "ShowVolume": 10001,
"Location": 10001 "Location": 10001
},
{
"Id": 3,
"ShowType": 3,
"ShowVolume": 300002
} }
] ]
} }

Binary file not shown.

3
data/DB_Skin.dat Normal file
View File

@ -0,0 +1,3 @@
-á§juese icon_300001" 活力芒果*mg_01
7â§juese icon_300002" 财神é€<C3A9>ç¦<C3A7>*mg_060:à§

22
data/DB_Skin.json Normal file
View File

@ -0,0 +1,22 @@
{
"Arr": [
{
"Id": 300001,
"Model": "juese",
"SkinPic": "icon_300001",
"SkinName": "活力芒果",
"SkinType": "mg_01"
},
{
"Id": 300002,
"Model": "juese",
"SkinPic": "icon_300002",
"SkinName": "财神送福",
"SkinType": "mg_06",
"UnlockType": 1,
"UnlockItem": {
"300000": 1
}
}
]
}

19
data/DB_SkinLevel.dat Normal file
View File

@ -0,0 +1,19 @@
б§
б§"б§
б§"б§
б§"б§
б§"б§
б§"б§
в§
в§"в§
 в§"в§

в§"в§
 в§"в§
 в§"в§
 в§"в§
в§"в§
в§ "в§
в§
"в§

126
data/DB_SkinLevel.json Normal file
View File

@ -0,0 +1,126 @@
{
"Arr": [
{
"Id": 1,
"SkinId": 300001,
"Level": 1
},
{
"Id": 2,
"SkinId": 300001,
"Level": 2,
"UpItem": {
"300001": 20
}
},
{
"Id": 3,
"SkinId": 300001,
"Level": 3,
"UpItem": {
"300001": 21
}
},
{
"Id": 4,
"SkinId": 300001,
"Level": 4,
"UpItem": {
"300001": 22
}
},
{
"Id": 5,
"SkinId": 300001,
"Level": 5,
"UpItem": {
"300001": 23
}
},
{
"Id": 6,
"SkinId": 300001,
"Level": 6,
"UpItem": {
"300001": 24
}
},
{
"Id": 7,
"SkinId": 300002,
"Level": 1
},
{
"Id": 8,
"SkinId": 300002,
"Level": 2,
"UpItem": {
"300002": 20
}
},
{
"Id": 9,
"SkinId": 300002,
"Level": 3,
"UpItem": {
"300002": 21
}
},
{
"Id": 10,
"SkinId": 300002,
"Level": 4,
"UpItem": {
"300002": 22
}
},
{
"Id": 11,
"SkinId": 300002,
"Level": 5,
"UpItem": {
"300002": 23
}
},
{
"Id": 12,
"SkinId": 300002,
"Level": 6,
"UpItem": {
"300002": 24
}
},
{
"Id": 13,
"SkinId": 300002,
"Level": 7,
"UpItem": {
"300002": 25
}
},
{
"Id": 14,
"SkinId": 300002,
"Level": 8,
"UpItem": {
"300002": 26
}
},
{
"Id": 15,
"SkinId": 300002,
"Level": 9,
"UpItem": {
"300002": 27
}
},
{
"Id": 16,
"SkinId": 300002,
"Level": 10,
"UpItem": {
"300002": 28
}
}
]
}

Binary file not shown.

View File

@ -3,6 +3,8 @@
{ {
"Id": 1, "Id": 1,
"Order": 1, "Order": 1,
"Name": "每日任务",
"Des": "充值任意金额",
"ActivityType": 1, "ActivityType": 1,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 1, "TargetTimes": 1,
@ -19,6 +21,8 @@
{ {
"Id": 2, "Id": 2,
"Order": 2, "Order": 2,
"Name": "每日任务",
"Des": "购买一次金币",
"ActivityType": 1, "ActivityType": 1,
"TaskType": 2, "TaskType": 2,
"TargetTimes": 1, "TargetTimes": 1,
@ -35,6 +39,8 @@
{ {
"Id": 3, "Id": 3,
"Order": 3, "Order": 3,
"Name": "每日任务",
"Des": "每日登录游戏",
"ActivityType": 1, "ActivityType": 1,
"TaskType": 3, "TaskType": 3,
"TargetTimes": 1, "TargetTimes": 1,
@ -47,6 +53,8 @@
{ {
"Id": 4, "Id": 4,
"Order": 4, "Order": 4,
"Name": "每日任务",
"Des": "任意玩法对局胜利1次",
"ActivityType": 1, "ActivityType": 1,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 1, "TargetTimes": 1,
@ -60,6 +68,8 @@
{ {
"Id": 5, "Id": 5,
"Order": 5, "Order": 5,
"Name": "每日任务",
"Des": "任意玩法对局10次",
"ActivityType": 1, "ActivityType": 1,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 10, "TargetTimes": 10,
@ -73,6 +83,8 @@
{ {
"Id": 6, "Id": 6,
"Order": 6, "Order": 6,
"Name": "每日任务",
"Des": "在排位赛中对局一次",
"ActivityType": 1, "ActivityType": 1,
"TaskType": 6, "TaskType": 6,
"TargetTimes": 1, "TargetTimes": 1,
@ -86,6 +98,7 @@
{ {
"Id": 7, "Id": 7,
"Order": 1, "Order": 1,
"Name": "周活跃任务",
"ActivityType": 2, "ActivityType": 2,
"TaskType": 14, "TaskType": 14,
"TargetTimes": 200, "TargetTimes": 200,
@ -97,6 +110,7 @@
{ {
"Id": 8, "Id": 8,
"Order": 2, "Order": 2,
"Name": "周活跃任务",
"ActivityType": 2, "ActivityType": 2,
"TaskType": 14, "TaskType": 14,
"TargetTimes": 300, "TargetTimes": 300,
@ -108,6 +122,7 @@
{ {
"Id": 9, "Id": 9,
"Order": 3, "Order": 3,
"Name": "周活跃任务",
"ActivityType": 2, "ActivityType": 2,
"TaskType": 14, "TaskType": 14,
"TargetTimes": 400, "TargetTimes": 400,
@ -119,6 +134,7 @@
{ {
"Id": 10, "Id": 10,
"Order": 4, "Order": 4,
"Name": "周活跃任务",
"ActivityType": 2, "ActivityType": 2,
"TaskType": 14, "TaskType": 14,
"TargetTimes": 500, "TargetTimes": 500,
@ -130,6 +146,7 @@
{ {
"Id": 11, "Id": 11,
"Order": 5, "Order": 5,
"Name": "周活跃任务",
"ActivityType": 2, "ActivityType": 2,
"TaskType": 14, "TaskType": 14,
"TargetTimes": 600, "TargetTimes": 600,
@ -141,6 +158,8 @@
{ {
"Id": 12, "Id": 12,
"Order": 1, "Order": 1,
"Name": "新手任务",
"Des": "绑定邀请人",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 10, "TaskType": 10,
"TargetTimes": 1, "TargetTimes": 1,
@ -153,6 +172,8 @@
{ {
"Id": 13, "Id": 13,
"Order": 2, "Order": 2,
"Name": "新手任务",
"Des": "游玩Tienlen10次",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 10, "TargetTimes": 10,
@ -166,6 +187,8 @@
{ {
"Id": 14, "Id": 14,
"Order": 3, "Order": 3,
"Name": "新手任务",
"Des": "累计获取10M金币",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 11, "TaskType": 11,
"TargetTimes": 10000000, "TargetTimes": 10000000,
@ -177,6 +200,8 @@
{ {
"Id": 15, "Id": 15,
"Order": 4, "Order": 4,
"Name": "新手任务",
"Des": "Tienlen获胜10次",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 10, "TargetTimes": 10,
@ -190,6 +215,8 @@
{ {
"Id": 16, "Id": 16,
"Order": 5, "Order": 5,
"Name": "新手任务",
"Des": "成功邀请3人",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 16, "TaskType": 16,
"TargetTimes": 3, "TargetTimes": 3,
@ -202,6 +229,8 @@
{ {
"Id": 21, "Id": 21,
"Order": 6, "Order": 6,
"Name": "新手任务",
"Des": "被邀请人累计充值0.1$",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 18, "TaskType": 18,
"TargetTimes": 10, "TargetTimes": 10,
@ -214,6 +243,8 @@
{ {
"Id": 22, "Id": 22,
"Order": 7, "Order": 7,
"Name": "新手任务",
"Des": "成功邀请5人",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 16, "TaskType": 16,
"TargetTimes": 5, "TargetTimes": 5,
@ -226,6 +257,8 @@
{ {
"Id": 23, "Id": 23,
"Order": 8, "Order": 8,
"Name": "新手任务",
"Des": "成功邀请10人",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 16, "TaskType": 16,
"TargetTimes": 10, "TargetTimes": 10,
@ -238,6 +271,8 @@
{ {
"Id": 24, "Id": 24,
"Order": 9, "Order": 9,
"Name": "新手任务",
"Des": "被邀请人累计充值1$",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 18, "TaskType": 18,
"TargetTimes": 100, "TargetTimes": 100,
@ -250,6 +285,8 @@
{ {
"Id": 25, "Id": 25,
"Order": 10, "Order": 10,
"Name": "新手任务",
"Des": "被邀请人累计充值5$",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 18, "TaskType": 18,
"TargetTimes": 500, "TargetTimes": 500,
@ -262,6 +299,8 @@
{ {
"Id": 26, "Id": 26,
"Order": 11, "Order": 11,
"Name": "新手任务",
"Des": "被邀请人累计充值10$",
"ActivityType": 3, "ActivityType": 3,
"TaskType": 18, "TaskType": 18,
"TargetTimes": 1000, "TargetTimes": 1000,
@ -274,6 +313,8 @@
{ {
"Id": 17, "Id": 17,
"Order": 1, "Order": 1,
"Name": "邀请任务",
"Des": "邀请积分达到10000",
"ActivityType": 4, "ActivityType": 4,
"TaskType": 13, "TaskType": 13,
"TargetTimes": 10000, "TargetTimes": 10000,
@ -286,6 +327,8 @@
{ {
"Id": 18, "Id": 18,
"Order": 2, "Order": 2,
"Name": "邀请任务",
"Des": "邀请积分达到50000",
"ActivityType": 4, "ActivityType": 4,
"TaskType": 13, "TaskType": 13,
"TargetTimes": 50000, "TargetTimes": 50000,
@ -298,6 +341,8 @@
{ {
"Id": 19, "Id": 19,
"Order": 3, "Order": 3,
"Name": "邀请任务",
"Des": "邀请积分达到200000",
"ActivityType": 4, "ActivityType": 4,
"TaskType": 13, "TaskType": 13,
"TargetTimes": 200000, "TargetTimes": 200000,
@ -310,6 +355,8 @@
{ {
"Id": 20, "Id": 20,
"Order": 4, "Order": 4,
"Name": "邀请任务",
"Des": "邀请积分达到1000000",
"ActivityType": 4, "ActivityType": 4,
"TaskType": 13, "TaskType": 13,
"TargetTimes": 1000000, "TargetTimes": 1000000,
@ -322,6 +369,8 @@
{ {
"Id": 10001, "Id": 10001,
"Order": 1, "Order": 1,
"Name": "成就",
"Des": "累计获取100M金币",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 11, "TaskType": 11,
"TargetTimes": 100000000, "TargetTimes": 100000000,
@ -335,6 +384,8 @@
{ {
"Id": 10002, "Id": 10002,
"Order": 7, "Order": 7,
"Name": "成就",
"Des": "累计获取1B金币",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 11, "TaskType": 11,
"TargetTimes": 1000000000, "TargetTimes": 1000000000,
@ -348,6 +399,8 @@
{ {
"Id": 10003, "Id": 10003,
"Order": 13, "Order": 13,
"Name": "成就",
"Des": "累计获取10B金币",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 11, "TaskType": 11,
"TargetTimes": 10000000000, "TargetTimes": 10000000000,
@ -361,6 +414,8 @@
{ {
"Id": 10004, "Id": 10004,
"Order": 19, "Order": 19,
"Name": "成就",
"Des": "累计获取100B金币",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 11, "TaskType": 11,
"TargetTimes": 100000000000, "TargetTimes": 100000000000,
@ -374,6 +429,8 @@
{ {
"Id": 10005, "Id": 10005,
"Order": 25, "Order": 25,
"Name": "成就",
"Des": "累计获取500B金币",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 11, "TaskType": 11,
"TargetTimes": 500000000000, "TargetTimes": 500000000000,
@ -387,6 +444,8 @@
{ {
"Id": 10006, "Id": 10006,
"Order": 31, "Order": 31,
"Name": "成就",
"Des": "累计获取1000B金币",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 11, "TaskType": 11,
"TargetTimes": 1000000000000, "TargetTimes": 1000000000000,
@ -400,6 +459,8 @@
{ {
"Id": 20001, "Id": 20001,
"Order": 2, "Order": 2,
"Name": "成就",
"Des": "游玩Tienlen100次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 100, "TargetTimes": 100,
@ -413,6 +474,8 @@
{ {
"Id": 20002, "Id": 20002,
"Order": 8, "Order": 8,
"Name": "成就",
"Des": "游玩Tienlen1000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 1000, "TargetTimes": 1000,
@ -426,6 +489,8 @@
{ {
"Id": 20003, "Id": 20003,
"Order": 14, "Order": 14,
"Name": "成就",
"Des": "游玩Tienlen5000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 5000, "TargetTimes": 5000,
@ -439,6 +504,8 @@
{ {
"Id": 20004, "Id": 20004,
"Order": 20, "Order": 20,
"Name": "成就",
"Des": "游玩Tienlen10000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 10000, "TargetTimes": 10000,
@ -452,6 +519,8 @@
{ {
"Id": 20005, "Id": 20005,
"Order": 26, "Order": 26,
"Name": "成就",
"Des": "游玩Tienlen50000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 50000, "TargetTimes": 50000,
@ -465,6 +534,8 @@
{ {
"Id": 20006, "Id": 20006,
"Order": 32, "Order": 32,
"Name": "成就",
"Des": "游玩Tienlen100000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 5, "TaskType": 5,
"TargetTimes": 100000, "TargetTimes": 100000,
@ -478,6 +549,8 @@
{ {
"Id": 30001, "Id": 30001,
"Order": 3, "Order": 3,
"Name": "成就",
"Des": "Tienlen获胜100次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 100, "TargetTimes": 100,
@ -491,6 +564,8 @@
{ {
"Id": 30002, "Id": 30002,
"Order": 9, "Order": 9,
"Name": "成就",
"Des": "Tienlen获胜1000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 1000, "TargetTimes": 1000,
@ -504,6 +579,8 @@
{ {
"Id": 30003, "Id": 30003,
"Order": 15, "Order": 15,
"Name": "成就",
"Des": "Tienlen获胜5000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 5000, "TargetTimes": 5000,
@ -517,6 +594,8 @@
{ {
"Id": 30004, "Id": 30004,
"Order": 21, "Order": 21,
"Name": "成就",
"Des": "Tienlen获胜10000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 10000, "TargetTimes": 10000,
@ -530,6 +609,8 @@
{ {
"Id": 30005, "Id": 30005,
"Order": 27, "Order": 27,
"Name": "成就",
"Des": "Tienlen获胜50000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 50000, "TargetTimes": 50000,
@ -543,6 +624,8 @@
{ {
"Id": 30006, "Id": 30006,
"Order": 33, "Order": 33,
"Name": "成就",
"Des": "Tienlen获胜100000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 4, "TaskType": 4,
"TargetTimes": 100000, "TargetTimes": 100000,
@ -556,6 +639,8 @@
{ {
"Id": 40001, "Id": 40001,
"Order": 4, "Order": 4,
"Name": "成就",
"Des": "在排位赛中对局100次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 6, "TaskType": 6,
"TargetTimes": 100, "TargetTimes": 100,
@ -569,6 +654,8 @@
{ {
"Id": 40002, "Id": 40002,
"Order": 10, "Order": 10,
"Name": "成就",
"Des": "在排位赛中对局1000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 6, "TaskType": 6,
"TargetTimes": 1000, "TargetTimes": 1000,
@ -582,6 +669,8 @@
{ {
"Id": 40003, "Id": 40003,
"Order": 16, "Order": 16,
"Name": "成就",
"Des": "在排位赛中对局5000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 6, "TaskType": 6,
"TargetTimes": 5000, "TargetTimes": 5000,
@ -595,6 +684,8 @@
{ {
"Id": 40004, "Id": 40004,
"Order": 22, "Order": 22,
"Name": "成就",
"Des": "在排位赛中对局10000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 6, "TaskType": 6,
"TargetTimes": 10000, "TargetTimes": 10000,
@ -608,6 +699,8 @@
{ {
"Id": 40005, "Id": 40005,
"Order": 28, "Order": 28,
"Name": "成就",
"Des": "在排位赛中对局50000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 6, "TaskType": 6,
"TargetTimes": 50000, "TargetTimes": 50000,
@ -621,6 +714,8 @@
{ {
"Id": 40006, "Id": 40006,
"Order": 34, "Order": 34,
"Name": "成就",
"Des": "在排位赛中对局100000次",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 6, "TaskType": 6,
"TargetTimes": 100000, "TargetTimes": 100000,
@ -634,6 +729,8 @@
{ {
"Id": 50001, "Id": 50001,
"Order": 5, "Order": 5,
"Name": "成就",
"Des": "累积充值$0.1",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 10, "TargetTimes": 10,
@ -650,6 +747,8 @@
{ {
"Id": 50002, "Id": 50002,
"Order": 11, "Order": 11,
"Name": "成就",
"Des": "累积充值$1",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 100, "TargetTimes": 100,
@ -666,6 +765,8 @@
{ {
"Id": 50003, "Id": 50003,
"Order": 17, "Order": 17,
"Name": "成就",
"Des": "累积充值$10",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 1000, "TargetTimes": 1000,
@ -682,6 +783,8 @@
{ {
"Id": 50004, "Id": 50004,
"Order": 23, "Order": 23,
"Name": "成就",
"Des": "累积充值$100",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 10000, "TargetTimes": 10000,
@ -698,6 +801,8 @@
{ {
"Id": 50005, "Id": 50005,
"Order": 29, "Order": 29,
"Name": "成就",
"Des": "累积充值$500",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 50000, "TargetTimes": 50000,
@ -714,6 +819,8 @@
{ {
"Id": 50006, "Id": 50006,
"Order": 35, "Order": 35,
"Name": "成就",
"Des": "累积充值$1000",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 100000, "TargetTimes": 100000,
@ -730,6 +837,8 @@
{ {
"Id": 60001, "Id": 60001,
"Order": 6, "Order": 6,
"Name": "成就",
"Des": "累积登录10天",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 15, "TaskType": 15,
"TargetTimes": 10, "TargetTimes": 10,
@ -742,6 +851,8 @@
{ {
"Id": 60002, "Id": 60002,
"Order": 12, "Order": 12,
"Name": "成就",
"Des": "累积登录20天",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 15, "TaskType": 15,
"TargetTimes": 20, "TargetTimes": 20,
@ -754,6 +865,8 @@
{ {
"Id": 60003, "Id": 60003,
"Order": 18, "Order": 18,
"Name": "成就",
"Des": "累积登录50天",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 15, "TaskType": 15,
"TargetTimes": 50, "TargetTimes": 50,
@ -766,6 +879,8 @@
{ {
"Id": 60004, "Id": 60004,
"Order": 24, "Order": 24,
"Name": "成就",
"Des": "累积登录100天",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 15, "TaskType": 15,
"TargetTimes": 100, "TargetTimes": 100,
@ -778,6 +893,8 @@
{ {
"Id": 60005, "Id": 60005,
"Order": 30, "Order": 30,
"Name": "成就",
"Des": "累积登录500天",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 15, "TaskType": 15,
"TargetTimes": 500, "TargetTimes": 500,
@ -790,6 +907,8 @@
{ {
"Id": 60006, "Id": 60006,
"Order": 36, "Order": 36,
"Name": "成就",
"Des": "累积登录1000天",
"ActivityType": 5, "ActivityType": 5,
"TaskType": 15, "TaskType": 15,
"TargetTimes": 1000, "TargetTimes": 1000,
@ -802,6 +921,8 @@
{ {
"Id": 11001, "Id": 11001,
"Order": 1, "Order": 1,
"Name": "通行证",
"Des": "领取转盘签到奖励",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 17, "TaskType": 17,
"TargetTimes": 1, "TargetTimes": 1,
@ -813,21 +934,21 @@
{ {
"Id": 11002, "Id": 11002,
"Order": 2, "Order": 2,
"Name": "通行证",
"Des": "在线时长60分钟",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 21, "TaskType": 21,
"TargetTimes": 3600, "TargetTimes": 3600,
"FinishTimes": 1, "FinishTimes": 1,
"Award": { "Award": {
"100011": 20 "100011": 20
}, }
"Position": [
1,
1
]
}, },
{ {
"Id": 11003, "Id": 11003,
"Order": 3, "Order": 3,
"Name": "通行证",
"Des": "购买任意金币1次",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 2, "TaskType": 2,
"TargetTimes": 1, "TargetTimes": 1,
@ -843,6 +964,8 @@
{ {
"Id": 11004, "Id": 11004,
"Order": 4, "Order": 4,
"Name": "通行证",
"Des": "购买任意存钱罐1次",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 22, "TaskType": 22,
"TargetTimes": 1, "TargetTimes": 1,
@ -854,6 +977,8 @@
{ {
"Id": 11005, "Id": 11005,
"Order": 5, "Order": 5,
"Name": "通行证",
"Des": "参与大众场对局获得胜利3次",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 23, "TaskType": 23,
"TargetTimes": 3, "TargetTimes": 3,
@ -866,6 +991,8 @@
{ {
"Id": 11006, "Id": 11006,
"Order": 6, "Order": 6,
"Name": "通行证",
"Des": "参与排位赛获得胜利3次",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 30, "TaskType": 30,
"TargetTimes": 3, "TargetTimes": 3,
@ -878,6 +1005,8 @@
{ {
"Id": 11007, "Id": 11007,
"Order": 7, "Order": 7,
"Name": "通行证",
"Des": "邀请好友进行私人桌对局1次",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 24, "TaskType": 24,
"TargetTimes": 1, "TargetTimes": 1,
@ -890,6 +1019,8 @@
{ {
"Id": 11008, "Id": 11008,
"Order": 8, "Order": 8,
"Name": "通行证",
"Des": "成功参与比赛场3次",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 25, "TaskType": 25,
"TargetTimes": 3, "TargetTimes": 3,
@ -902,6 +1033,8 @@
{ {
"Id": 11009, "Id": 11009,
"Order": 9, "Order": 9,
"Name": "通行证",
"Des": "比赛场获得前十名1次",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 26, "TaskType": 26,
"TargetTimes": 1, "TargetTimes": 1,
@ -914,21 +1047,21 @@
{ {
"Id": 11010, "Id": 11010,
"Order": 10, "Order": 10,
"Name": "通行证",
"Des": "今日累计消耗100钻石",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 27, "TaskType": 27,
"TargetTimes": 100, "TargetTimes": 100,
"FinishTimes": 1, "FinishTimes": 1,
"Award": { "Award": {
"100011": 80 "100011": 80
}, }
"Position": [
1,
1
]
}, },
{ {
"Id": 11011, "Id": 11011,
"Order": 11, "Order": 11,
"Name": "通行证",
"Des": "充值任意金额",
"ActivityType": 6, "ActivityType": 6,
"TaskType": 7, "TaskType": 7,
"TargetTimes": 1, "TargetTimes": 1,
@ -940,6 +1073,107 @@
1, 1,
1 1
] ]
},
{
"Id": 12001,
"Order": 1,
"Name": "通行证",
"Des": "累计领取转盘签到奖励7天",
"ActivityType": 7,
"TaskType": 17,
"TargetTimes": 7,
"FinishTimes": 1,
"Award": {
"100011": 50
}
},
{
"Id": 12002,
"Order": 2,
"Name": "通行证",
"Des": "购买进阶典藏通行证",
"ActivityType": 7,
"TaskType": 31,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"100011": 50
}
},
{
"Id": 12003,
"Order": 3,
"Name": "通行证",
"Des": "累计充值$9.99",
"ActivityType": 7,
"TaskType": 7,
"TargetTimes": 999,
"FinishTimes": 1,
"Award": {
"100011": 50
},
"Position": [
1,
1
]
},
{
"Id": 12004,
"Order": 4,
"Name": "通行证",
"Des": "累计充值$19.99",
"ActivityType": 7,
"TaskType": 7,
"TargetTimes": 1999,
"FinishTimes": 1,
"Award": {
"100011": 100
},
"Position": [
1,
1
]
},
{
"Id": 12005,
"Order": 5,
"Name": "通行证",
"Des": "累计赚取10B金币",
"ActivityType": 7,
"TaskType": 11,
"TargetTimes": 10000000000,
"FinishTimes": 1,
"Award": {
"100011": 50
},
"GameType": 1
},
{
"Id": 12006,
"Order": 6,
"Name": "通行证",
"Des": "成功参加任意比赛20次",
"ActivityType": 7,
"TaskType": 25,
"TargetTimes": 20,
"FinishTimes": 1,
"Award": {
"100011": 50
},
"GameType": 1
},
{
"Id": 12007,
"Order": 7,
"Name": "通行证",
"Des": "累计在线时长1200分钟",
"ActivityType": 7,
"TaskType": 21,
"TargetTimes": 72000,
"FinishTimes": 1,
"Award": {
"100011": 50
}
} }
] ]
} }

View File

@ -1,6 +1,7 @@
package svc package svc
import ( import (
"errors"
"github.com/globalsign/mgo" "github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson" "github.com/globalsign/mgo/bson"
"mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/dbproxy/mongo"
@ -100,6 +101,29 @@ func (svc *DbShopLogSvc) GetDbShopLogsByState(args *model.DbShopLogArgs, dbShops
} }
return return
} }
func GetMoneyTotal(platform string, snid int32) int64 {
c := DbShopLogCollection(platform)
if c == nil {
logger.Logger.Error("UpdateDbShopState == nil")
return 0
}
var err error
type m struct {
Total int64 `bson:"total"`
}
tc := new(m)
err = c.Pipe([]bson.M{
{"$match": bson.M{"snid": snid, "state": 1, "consumetypenum": bson.M{"$gt": 0}}},
{"$group": bson.M{"_id": nil, "total": bson.M{"$sum": "$consumetypenum"}}},
}).AllowDiskUse().One(tc)
if err != nil && !errors.Is(err, mgo.ErrNotFound) {
logger.Logger.Error("GetMoneyTotal error:", err)
return 0
}
return tc.Total
}
func init() { func init() {
rpc.Register(new(DbShopLogSvc)) rpc.Register(new(DbShopLogSvc))
} }

View File

@ -129,7 +129,7 @@ func (b *BindScoreSvc) GetInviteRankList(req *model.FindPlayerRankInviteListArgs
type PInfo struct { type PInfo struct {
SnId int32 SnId int32
Name string // 昵称 Name string // 昵称
Roles *model.RolePetInfo Roles *model.ModInfo
} }
var retPlayerList []PInfo var retPlayerList []PInfo
cplayerdata := PlayerDataCollection(req.Platform) cplayerdata := PlayerDataCollection(req.Platform)
@ -205,7 +205,7 @@ func (b *BindScoreSvc) GetInviteScoreByType(req *model.FindPlayerRankInviteScore
type PInfo struct { type PInfo struct {
SnId int32 SnId int32
Name string // 昵称 Name string // 昵称
Roles *model.RolePetInfo Roles *model.ModInfo
} }
var retPlayer PInfo var retPlayer PInfo
@ -243,7 +243,7 @@ func (b *BindScoreSvc) GetInviteList(req *model.InviteLisArgs, ret *model.Invite
type M struct { type M struct {
Name string Name string
Roles *model.RolePetInfo Roles *model.ModInfo
CreateTime time.Time CreateTime time.Time
SnId int32 SnId int32
IScore int64 IScore int64

View File

@ -1,11 +1,16 @@
package svc package svc
import ( import (
"errors"
"net/rpc"
"github.com/globalsign/mgo" "github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
"mongo.games.com/game/common"
"mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/dbproxy/mongo"
"mongo.games.com/game/model" "mongo.games.com/game/model"
"mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/logger"
"net/rpc"
) )
func ItemLogsCollection(plt string) *mongo.Collection { func ItemLogsCollection(plt string) *mongo.Collection {
@ -13,7 +18,6 @@ func ItemLogsCollection(plt string) *mongo.Collection {
if s != nil { if s != nil {
c_itemlog, first := s.DB().C(model.ItemLogCollName) c_itemlog, first := s.DB().C(model.ItemLogCollName)
if first { if first {
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true})
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"logtype"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"logtype"}, Background: true, Sparse: true})
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"itemid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"itemid"}, Background: true, Sparse: true})
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"createts"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"createts"}, Background: true, Sparse: true})
@ -21,6 +25,7 @@ func ItemLogsCollection(plt string) *mongo.Collection {
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"typeid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"typeid"}, Background: true, Sparse: true})
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gameid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gameid"}, Background: true, Sparse: true})
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gamefreeid"}, Background: true, Sparse: true}) c_itemlog.EnsureIndex(mgo.Index{Key: []string{"gamefreeid"}, Background: true, Sparse: true})
c_itemlog.EnsureIndex(mgo.Index{Key: []string{"snid", "logtype", "itemid", "typeid"}, Background: true, Sparse: true})
} }
return c_itemlog return c_itemlog
} }
@ -44,6 +49,59 @@ func (svc *ItemLogSvc) InsertItemLog(log *model.ItemLog, ret *bool) (err error)
return return
} }
// GetItemCount 获取v卡兑换消耗数量
func GetItemCount(platform string, snid, id int32, tp int) (count int64) {
c := ItemLogsCollection(platform)
if c == nil {
return 0
}
var err error
var swapN int64
var costN int64
type m struct {
Count int64 `bson:"count"`
}
tc := new(m)
// 兑换返还
err = c.Pipe([]bson.M{
{"$match": bson.M{"snid": snid, "logtype": 0, "itemid": id, "typeid": common.GainWay_Exchange}},
{"$group": bson.M{"_id": nil, "count": bson.M{"$sum": "$count"}}},
}).AllowDiskUse().One(tc)
if err != nil && !errors.Is(err, mgo.ErrNotFound) {
logger.Logger.Warn("GetItemCount swapN error:", err)
return 0
}
swapN = tc.Count
// 消耗总数量
tc = new(m)
err = c.Pipe([]bson.M{
{"$match": bson.M{"snid": snid, "logtype": 1, "itemid": id, "typeid": common.GainWay_Exchange}},
{"$group": bson.M{"_id": nil, "count": bson.M{"$sum": "$count"}}},
}).AllowDiskUse().One(tc)
if err != nil && !errors.Is(err, mgo.ErrNotFound) {
logger.Logger.Warn("GetItemCount costN error:", err)
return 0
}
costN = tc.Count
if tp == 0 {
// 获得数量 = 获得总数量 - 兑换返还 - 比赛返回
} else {
// 消耗数量 = 消耗总数量 - 兑换返还
count = costN - swapN
}
if count < 0 {
count = 0
}
return count
}
func (svc *ItemLogSvc) GetItemCount(req *model.ItemCountParam, count *int64) error {
*count = GetItemCount(req.Platform, req.Snid, req.Id, req.Tp)
return nil
}
func init() { func init() {
rpc.Register(new(ItemLogSvc)) rpc.Register(new(ItemLogSvc))
} }

View File

@ -7,9 +7,11 @@ import (
"github.com/globalsign/mgo" "github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson" "github.com/globalsign/mgo/bson"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/common"
"mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/dbproxy/mongo"
"mongo.games.com/game/model" "mongo.games.com/game/model"
"mongo.games.com/goserver/core/logger"
) )
var ( var (
@ -95,6 +97,7 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error {
if bag.BagId == "" { if bag.BagId == "" {
bag.BagId = bson.NewObjectId() bag.BagId = bson.NewObjectId()
} }
var vCard int64 // v卡返还
for id, v := range args.BagItem { for id, v := range args.BagItem {
if item, exist := bag.BagItem[id]; !exist { if item, exist := bag.BagItem[id]; !exist {
if v.ItemNum <= 0 { if v.ItemNum <= 0 {
@ -111,12 +114,25 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error {
} }
item.ItemNum += v.ItemNum item.ItemNum += v.ItemNum
} }
// v卡返还
if id == common.ItemIDVCard && args.GainWay == common.GainWay_Exchange && v.ItemNum > 0 {
vCard = v.ItemNum
}
} }
_, err = cbag.Upsert(bson.M{"_id": bag.BagId}, bag) _, err = cbag.Upsert(bson.M{"_id": bag.BagId}, bag)
if err != nil { if err != nil {
*ret = false *ret = false
logger.Logger.Info("AddBagItem error ", err) logger.Logger.Info("AddBagItem error ", err)
} }
// v卡返还
if vCard > 0 {
c := PlayerDataCollection(args.Platform)
if c != nil {
err = c.Update(bson.M{"snid": args.SnId}, bson.M{"$inc": bson.M{"vcardcost": -vCard}})
}
}
return err return err
} }

View File

@ -328,6 +328,10 @@ func (svc *PlayerDataSvc) GetPlayerDataBySnId(args *model.GetPlayerDataBySnIdArg
return nil return nil
} }
defer func() {
logger.Logger.Debugf("Player Data: snid:%v VCardCost:%v MoneyTotal:%v", ret.Pd.SnId, ret.Pd.VCardCost, ret.Pd.MoneyTotal)
}()
f := func(p *model.PlayerData) { f := func(p *model.PlayerData) {
// 更新一下绑定关系 // 更新一下绑定关系
if p.PSnId > 0 && p.PCode != "" { if p.PSnId > 0 && p.PCode != "" {
@ -400,11 +404,16 @@ func (svc *PlayerDataSvc) GetPlayerDataBySnId(args *model.GetPlayerDataBySnIdArg
ret.Pd.IScoreTs = time.Now() ret.Pd.IScoreTs = time.Now()
cplayerdata.Update(bson.M{"snid": args.SnId}, bson.M{"$set": bson.M{"icode": code, "iscorets": ret.Pd.IScoreTs}}) cplayerdata.Update(bson.M{"snid": args.SnId}, bson.M{"$set": bson.M{"icode": code, "iscorets": ret.Pd.IScoreTs}})
} }
if ret.Pd.VCardCost == 0 {
ret.Pd.VCardCost = GetItemCount(ret.Pd.Platform, ret.Pd.SnId, common.ItemIDVCard, 1)
}
if ret.Pd.MoneyTotal == 0 {
ret.Pd.MoneyTotal = GetMoneyTotal(ret.Pd.Platform, ret.Pd.SnId)
}
f(ret.Pd) f(ret.Pd)
if args.CorrectData && ret.Pd != nil { if args.CorrectData && ret.Pd != nil {
CorrectData(ret.Pd) CorrectData(ret.Pd)
} }
return nil return nil
} }

View File

@ -30,7 +30,10 @@ 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_Item = "/game/item" // 道具列表
) )

View File

@ -261,16 +261,18 @@ func CSRoomEvent(s *netlib.Session, packetid int, data interface{}, sid int64) e
case 2: // 互动表情 case 2: // 互动表情
var totalCoin int64 var totalCoin int64
for _, v := range msg.GetParam() { for _, v := range msg.GetParam() {
item := srvdata.PBDB_GameItemMgr.GetData(v) item := srvdata.GameItemMgr.Get(p.Platform, v)
switch item.GetType() { if item != nil {
case common.ItemTypeInteract: switch item.GetType() {
totalCoin += item.GetNum() case common.ItemTypeInteract:
totalCoin += item.GetNum()
}
} }
} }
if p.GetCoin() >= totalCoin { if p.GetCoin() >= totalCoin {
for _, v := range msg.GetParam() { for _, v := range msg.GetParam() {
item := srvdata.PBDB_GameItemMgr.GetData(v) item := srvdata.GameItemMgr.Get(p.Platform, v)
if item.GetNum() > 0 { if item != nil && item.GetNum() > 0 {
p.AddCoin(-item.GetNum(), common.GainWay_Interact, base.SyncFlag_ToClient|base.SyncFlag_Broadcast, "system", "互动表情") p.AddCoin(-item.GetNum(), common.GainWay_Interact, base.SyncFlag_ToClient|base.SyncFlag_Broadcast, "system", "互动表情")
} }
} }

View File

@ -13,6 +13,45 @@ import (
"mongo.games.com/game/protocol/webapi" "mongo.games.com/game/protocol/webapi"
) )
func HandleWGUpdateSkin(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Trace("receive WGUpdateSkin")
msg, ok := data.(*server.WGUpdateSkin)
if !ok {
return nil
}
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnId())
if p == nil {
return nil
}
p.Skin.ModId = msg.GetId()
return nil
}
func HandleWGBuyRecTimeItem(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Trace("receive WGBuyRecTimeItem")
if msg, ok := data.(*server.WGBuyRecTimeItem); ok {
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnId())
if p != nil {
p.UpdateBuyRecTimeItem(msg.ExpireTime, msg.Diamond)
}
}
return nil
}
func HandleWGPlayerLeave(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Trace("receive WGPlayerLeaveGame")
if msg, ok := data.(*server.WGPlayerLeave); ok {
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnId())
if p != nil {
scene := p.GetScene()
if scene != nil {
scene.PlayerLeave(p, common.PlayerLeaveReason_DropLine, false)
}
}
}
return nil
}
func init() { func init() {
//创建场景 //创建场景
netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.PacketFactoryWrapper(func() interface{} { netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_CREATESCENE), netlib.PacketFactoryWrapper(func() interface{} {
@ -538,36 +577,9 @@ func init() {
})) }))
//玩家离开 //玩家离开
netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_PlayerLEAVE), netlib.PacketFactoryWrapper(func() interface{} { netlib.Register(int(server.SSPacketID_PACKET_WG_PlayerLEAVE), server.WGPlayerLeave{}, HandleWGPlayerLeave)
return &server.WGPlayerLeave{}
}))
netlib.RegisterHandler(int(server.SSPacketID_PACKET_WG_PlayerLEAVE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error {
logger.Logger.Trace("receive WGPlayerLeaveGame")
if msg, ok := pack.(*server.WGPlayerLeave); ok {
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnId())
if p != nil {
scene := p.GetScene()
if scene != nil {
scene.PlayerLeave(p, common.PlayerLeaveReason_DropLine, false)
}
}
}
return nil
}))
//同步记牌器过期时间 //同步记牌器过期时间
netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_BUYRECTIMEITEM), netlib.PacketFactoryWrapper(func() interface{} { netlib.Register(int(server.SSPacketID_PACKET_WG_BUYRECTIMEITEM), server.WGBuyRecTimeItem{}, HandleWGBuyRecTimeItem)
return &server.WGBuyRecTimeItem{} // 修改皮肤
})) netlib.Register(int(server.SSPacketID_PACKET_WG_UpdateSkin), server.WGUpdateSkin{}, HandleWGUpdateSkin)
netlib.RegisterHandler(int(server.SSPacketID_PACKET_WG_BUYRECTIMEITEM), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error {
logger.Logger.Trace("receive WGBuyRecTimeItem")
if msg, ok := pack.(*server.WGBuyRecTimeItem); ok {
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnId())
if p != nil {
p.UpdateBuyRecTimeItem(msg.ExpireTime, msg.Diamond)
}
}
return nil
}))
} }

View File

@ -2,6 +2,7 @@ package base
import ( import (
"fmt" "fmt"
"math"
"math/rand" "math/rand"
"strconv" "strconv"
"time" "time"
@ -2149,7 +2150,8 @@ func (this *Scene) TryBillExGameDrop(p *Player) {
if drop.MaxAmount > drop.MinAmount { if drop.MaxAmount > drop.MinAmount {
num = rand.Int31n(drop.MaxAmount-drop.MinAmount+1) + drop.MinAmount num = rand.Int31n(drop.MaxAmount-drop.MinAmount+1) + drop.MinAmount
} }
a := math.Max(float64(p.MoneyTotal), 50) * 10.0 / math.Max(float64(p.VCardCost), 500.0)
num = int32(float64(num) * math.Min(a, 1.5))
p.Items[drop.ItemId] += int64(num) p.Items[drop.ItemId] += int64(num)
realDrop[drop.ItemId] = num realDrop[drop.ItemId] = num
} }
@ -2164,7 +2166,7 @@ func (this *Scene) TryBillExGameDrop(p *Player) {
for id, num := range realDrop { for id, num := range realDrop {
remark := fmt.Sprintf("游戏掉落%v", id) remark := fmt.Sprintf("游戏掉落%v", id)
pack.Items[id] = proto.Int32(num) pack.Items[id] = proto.Int32(num)
itemData := srvdata.PBDB_GameItemMgr.GetData(id) itemData := srvdata.GameItemMgr.Get(p.Platform, id)
if itemData != nil { if itemData != nil {
//logType 0获得 1消耗 //logType 0获得 1消耗
log := model.NewItemLogEx(model.ItemParam{ log := model.NewItemLogEx(model.ItemParam{
@ -2208,7 +2210,7 @@ func (this *Scene) DropCollectBox(p *Player) {
if n < int(data.GetRate()) { if n < int(data.GetRate()) {
pack := &player.SCGameExDropItems{} pack := &player.SCGameExDropItems{}
pack.Items = make(map[int32]int32) pack.Items = make(map[int32]int32)
itemData := srvdata.PBDB_GameItemMgr.GetData(common.ItemIDCollectBox) itemData := srvdata.GameItemMgr.Get(p.Platform, common.ItemIDCollectBox)
if itemData != nil { if itemData != nil {
p.Items[itemData.Id] = p.Items[itemData.Id] + 1 p.Items[itemData.Id] = p.Items[itemData.Id] + 1
pack.Items = map[int32]int32{itemData.Id: 1} pack.Items = map[int32]int32{itemData.Id: 1}

View File

@ -58,6 +58,7 @@ type PlayerData struct {
TestLog []string TestLog []string
RoleId int32 RoleId int32
PlayerPool int // 个人水池分 PlayerPool int // 个人水池分
SkinId int32
} }
type SceneEx struct { type SceneEx struct {
@ -204,6 +205,9 @@ func (this *SceneEx) ThirteenWaterCreateRoomInfoPacket(s *base.Scene, p *base.Pl
Level: proto.Int64(playerEx.PlayerData.Level), Level: proto.Int64(playerEx.PlayerData.Level),
Exp: proto.Int64(playerEx.PlayerData.Exp), Exp: proto.Int64(playerEx.PlayerData.Exp),
} }
if playerEx.Skin != nil {
pd.SkinId = playerEx.Skin.ModId
}
ppp := &thirteen.Poker{} ppp := &thirteen.Poker{}
ppp.IndexType = -1 ppp.IndexType = -1
pd.CardsO = ppp pd.CardsO = ppp
@ -290,6 +294,7 @@ func (this *SceneEx) ThirteenWaterCreateRoomInfoPacket(s *base.Scene, p *base.Pl
IsConfirm: proto.Bool(playerEx.deterMine), IsConfirm: proto.Bool(playerEx.deterMine),
IsLeave: true, IsLeave: true,
RoleId: playerEx.RoleId, RoleId: playerEx.RoleId,
SkinId: playerEx.SkinId,
} }
ppp := &thirteen.Poker{} ppp := &thirteen.Poker{}
ppp.IndexType = -1 ppp.IndexType = -1
@ -1274,6 +1279,10 @@ func (this *SceneEx) CountBilled() {
func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) { func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) {
testLog := make([]string, len(p.TestLog)) testLog := make([]string, len(p.TestLog))
copy(testLog, p.TestLog) copy(testLog, p.TestLog)
skinId := int32(0)
if p.Skin != nil {
skinId = p.Skin.ModId
}
this.PlayerBackup[p.SnId] = &PlayerData{ this.PlayerBackup[p.SnId] = &PlayerData{
SnId: p.SnId, SnId: p.SnId,
cards: p.cards, cards: p.cards,
@ -1314,6 +1323,7 @@ func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) {
TestLog: testLog, TestLog: testLog,
RoleId: p.PlayerData.GetRoleId(), RoleId: p.PlayerData.GetRoleId(),
PlayerPool: p.playerPool, PlayerPool: p.playerPool,
SkinId: skinId,
} }
} }

View File

@ -2047,7 +2047,7 @@ func (this *TienLenSceneData) SendFirstGiveTimeItem(p *base.Player) {
if !p.PlayerData.IsTakeExpireItem { if !p.PlayerData.IsTakeExpireItem {
itemID := int32(60001) itemID := int32(60001)
itemData := srvdata.PBDB_GameItemMgr.GetData(itemID) itemData := srvdata.GameItemMgr.Get(p.Platform, itemID)
if itemData == nil { if itemData == nil {
return return
} }

View File

@ -400,6 +400,9 @@ func TienLenCreatePlayerData(p *base.Player, rankScore int64) *tienlen.TienLenPl
pd.SkillInfo = append(pd.SkillInfo, skillInfo) pd.SkillInfo = append(pd.SkillInfo, skillInfo)
} }
} }
if p.Skin != nil {
pd.SkinId = p.Skin.ModId
}
logger.Logger.Trace("TienLenCreatePlayerData pd : ", pd) logger.Logger.Trace("TienLenCreatePlayerData pd : ", pd)
return pd return pd

View File

@ -13,6 +13,7 @@ type BagInfo struct {
SnId int32 //玩家账号直接在这里生成 SnId int32 //玩家账号直接在这里生成
Platform string //平台 Platform string //平台
BagItem map[int32]*Item //背包数据 key为itemId BagItem map[int32]*Item //背包数据 key为itemId
GainWay int32 `bson:"-"`
} }
type Item struct { type Item struct {

View File

@ -12,13 +12,14 @@ import (
*/ */
const ( const (
OpAll = 0 OpAll = 0
OpTurnplate = 1 OpTurnplate = 1
OpBlindBox = 2 OpBlindBox = 2
OpFirstPay = 3 OpFirstPay = 3
OpContinuousPay = 4 OpContinuousPay = 4
OpPhoneLottery = 5 OpPhoneLottery = 5
OpCollect = 6 OpCollect = 6
OpDiamondLottery = 7
) )
const ( const (
@ -123,6 +124,9 @@ type AllConfig struct {
*webapi.ActPermitConfig *webapi.ActPermitConfig
PermitStartTs int64 // 开始时间戳 PermitStartTs int64 // 开始时间戳
PermitEndTs int64 // 结束时间戳 PermitEndTs int64 // 结束时间戳
*webapi.DiamondLotteryConfig
// 道具配置
*webapi.ItemConfig
} }
type GlobalConfig struct { type GlobalConfig struct {

View File

@ -1,9 +1,11 @@
package model package model
import ( import (
"errors"
"time" "time"
"github.com/globalsign/mgo/bson" "github.com/globalsign/mgo/bson"
"mongo.games.com/goserver/core/logger"
) )
var ( var (
@ -24,6 +26,7 @@ type ItemLog struct {
TypeId int32 // 变化类型 TypeId int32 // 变化类型
GameId int32 // 游戏id,游戏中获得时有值 GameId int32 // 游戏id,游戏中获得时有值
GameFreeId int32 // 场次id,游戏中获得时有值 GameFreeId int32 // 场次id,游戏中获得时有值
Cost []*ItemInfo // 消耗的道具
} }
func NewItemLog() *ItemLog { func NewItemLog() *ItemLog {
@ -32,16 +35,17 @@ func NewItemLog() *ItemLog {
} }
type ItemParam struct { type ItemParam struct {
Platform string // 平台 Platform string // 平台
SnId int32 // 玩家id SnId int32 // 玩家id
LogType int32 // 记录类型 0.获取 1.消耗 LogType int32 // 记录类型 0.获取 1.消耗
ItemId int32 // 道具id ItemId int32 // 道具id
ItemName string // 道具名称 ItemName string // 道具名称
Count int64 // 个数 Count int64 // 个数
Remark string // 备注 Remark string // 备注
TypeId int32 // 变化类型 TypeId int32 // 变化类型
GameId int64 // 游戏id,游戏中获得时有值 GameId int64 // 游戏id,游戏中获得时有值
GameFreeId int64 // 场次id,游戏中获得时有值 GameFreeId int64 // 场次id,游戏中获得时有值
Cost []*ItemInfo // 消耗的道具
} }
func NewItemLogEx(param ItemParam) *ItemLog { func NewItemLogEx(param ItemParam) *ItemLog {
@ -57,5 +61,29 @@ func NewItemLogEx(param ItemParam) *ItemLog {
itemLog.TypeId = param.TypeId itemLog.TypeId = param.TypeId
itemLog.GameId = int32(param.GameId) itemLog.GameId = int32(param.GameId)
itemLog.GameFreeId = int32(param.GameFreeId) itemLog.GameFreeId = int32(param.GameFreeId)
itemLog.Cost = param.Cost
return itemLog return itemLog
} }
type ItemCountParam struct {
Platform string
Snid int32 // 玩家id
Id int32 // 道具id
Tp int // 类型 0.获取 1.消耗
}
func GetItemCount(param *ItemCountParam) (int64, error) {
if rpcCli == nil {
logger.Logger.Warnf("rpcCli is nil")
return 0, errors.New("rpcCli is nil")
}
var ret int64
err := rpcCli.CallWithTimeout("ItemLogSvc.GetItemCount", param, &ret, time.Second*30)
if err != nil {
logger.Logger.Warnf("GetItemCount err:%v", err)
return 0, err
}
return ret, err
}

View File

@ -37,4 +37,20 @@ type BackendPermitJoin struct {
Platform string // 平台 Platform string // 平台
StartTs int64 // 活动开始时间 StartTs int64 // 活动开始时间
SnId int32 // 玩家id SnId int32 // 玩家id
Score int64 // 增加积分
Long int64 // 增加龙币数量
Ts int64 // 时间戳
}
// BackendPermitTask 通行证任务完成记录
type BackendPermitTask struct {
Platform string // 平台
StartTs int64 // 活动开始时间
SnId int32 // 玩家id
TaskId int32 // 任务id
TaskName string // 任务名称
ActivityType int32 // 活动类型
TaskType int32 // 任务类型
Gain []AwardItem // 任务获得奖励
Ts int64 // 时间戳
} }

View File

@ -113,6 +113,10 @@ const (
SystemFreeGive_GiveType_PermitAward // 赛季通行证奖励 SystemFreeGive_GiveType_PermitAward // 赛季通行证奖励
SystemFreeGive_GiveType_TaskPermit // 赛季通行证任务奖励 SystemFreeGive_GiveType_TaskPermit // 赛季通行证任务奖励
SystemFreeGive_GiveType_TaskPermitRank // 赛季通行证排名奖励 SystemFreeGive_GiveType_TaskPermitRank // 赛季通行证排名奖励
SystemFreeGive_PhoneLottery // 手机积分抽奖奖励
SystemFreeGive_PhoneLotterySwap // 手机积分兑换奖励
SystemFreeGive_CollectBox // 开启卡片礼盒奖励
SystemFreeGive_CollectBoxSwap // 卡片礼盒兑换奖励
) )
const ( const (
SystemFreeGive_CoinType_Coin int32 = iota //金币 SystemFreeGive_CoinType_Coin int32 = iota //金币
@ -212,10 +216,11 @@ type ShopTotal struct {
AdLookedNum int32 //已经观看的次数 AdLookedNum int32 //已经观看的次数
AdReceiveNum int32 //已经领取的次数 AdReceiveNum int32 //已经领取的次数
} }
type RolePetInfo struct {
ModUnlock map[int32]int32 //已经解锁的id type ModInfo struct {
ModUnlock map[int32]int32 //已经解锁的id:等级
ModId int32 //使用中的id ModId int32 //使用中的id
SkillInfo map[int32]map[int32]int32 //宠物技能 key1 - petId key2 - skillId value - level SkillInfo map[int32]map[int32]int32 //技能等级 ModId:技能id:技能等级
} }
// 七日签到数据 // 七日签到数据
@ -429,8 +434,9 @@ type PlayerData struct {
WBLevel int32 //黑白名单 白:[1,10] 黑:[-1,-10] WBLevel int32 //黑白名单 白:[1,10] 黑:[-1,-10]
ShopTotal map[int32]*ShopTotal //key为商品id ShopTotal map[int32]*ShopTotal //key为商品id
ShopLastLookTime map[int32]int64 //商品上一次的观看时间 ShopLastLookTime map[int32]int64 //商品上一次的观看时间
Roles *RolePetInfo //人物 Roles *ModInfo //人物
Pets *RolePetInfo //宠物 Pets *ModInfo //宠物
Skin *ModInfo //皮肤
WelfData *WelfareData //活动数据 WelfData *WelfareData //活动数据
*SignData *SignData
VipMatchTimes int32 //VIP比赛场参与次数 VipMatchTimes int32 //VIP比赛场参与次数
@ -474,6 +480,9 @@ type PlayerData struct {
IScoreTs time.Time // 邀请积分更新时间 IScoreTs time.Time // 邀请积分更新时间
Permit time.Time // 赛季通行证领取时间 Permit time.Time // 赛季通行证领取时间
PermitStartTs int64 // 赛季通行证开始时间戳 PermitStartTs int64 // 赛季通行证开始时间戳
DiamondLotteryScore int64 //钻石抽奖幸运值
VCardCost int64 // 消耗v卡数量
MoneyTotal int64 // 现金总充值金额,不包含api加币时的现金
} }
// 七日签到数据 // 七日签到数据
@ -484,7 +493,6 @@ type NewSignData struct {
TurnplateIdx []int32 //领取转盘下标 TurnplateIdx []int32 //领取转盘下标
VideoTicket int64 // 领取视频奖励时间戳 VideoTicket int64 // 领取视频奖励时间戳
Addup2Data map[int32]map[int32]int64 // 进阶奖励key1 - day key2-次数 value-结束领取时间戳(-1代表已领取) Addup2Data map[int32]map[int32]int64 // 进阶奖励key1 - day key2-次数 value-结束领取时间戳(-1代表已领取)
} }
type TaskData struct { type TaskData struct {
@ -563,13 +571,13 @@ type PlayerBaseInfo struct {
PromoterTree int32 PromoterTree int32
TelephoneCallNum int32 TelephoneCallNum int32
LastLogoutTime time.Time LastLogoutTime time.Time
Roles *RolePetInfo Roles *ModInfo
LastChannel string // 最后包类型 LastChannel string // 最后包类型
} }
type PlayerBaseInfo2 struct { type PlayerBaseInfo2 struct {
Name string Name string
Roles *RolePetInfo Roles *ModInfo
CreateTime time.Time CreateTime time.Time
} }
@ -702,6 +710,8 @@ func ConvertPlayerDataToWebData(param *WebPlayerDataParam) *webapi.PlayerData {
pdfw.IsPermit = param.IsPermit pdfw.IsPermit = param.IsPermit
pdfw.PermitScore = param.PermitScore pdfw.PermitScore = param.PermitScore
pdfw.Long = param.Long pdfw.Long = param.Long
pdfw.VCardCost = param.VCardCost
pdfw.MoneyTotal = param.MoneyTotal
return pdfw return pdfw
} }
func (this *PlayerData) IsMarkFlag(flag int) bool { func (this *PlayerData) IsMarkFlag(flag int) bool {
@ -774,6 +784,43 @@ func (this *PlayerData) GetPlayerDataEncoder() (bytes.Buffer, error) {
return buf, err return buf, err
} }
func (this *PlayerData) UpdateParams(params string) *PlayerParams {
if this.WhiteFlag > 0 {
return nil
}
this.Params = params
var pp PlayerParams
err := json.Unmarshal([]byte(params), &pp)
if err == nil {
if common.IsValidIP(pp.Ip) {
this.Ip = pp.Ip
if this.RegIp == "" {
this.RegIp = pp.Ip
}
} else if common.IsValidIP(this.RegIp) {
this.Ip = this.RegIp
} else {
this.Ip = ""
}
//if pp.City != "" {
// this.City = pp.City
//}
//switch pp.Platform {
//case 0:
// this.DeviceOS = common.WebStr
//case 1:
// this.DeviceOS = common.IOSStr
//case 2:
// this.DeviceOS = common.AndroidStr
//}
//if pp.Name != "" {
// this.Name = pp.Name
//}
}
return &pp
}
func NewPlayerData(acc string, name string, id int32, channel, platform string, params, tel string, func NewPlayerData(acc string, name string, id int32, channel, platform string, params, tel string,
packTag, ip string, addCoin int64, unionid, deviceInfo string, packTag, ip string, addCoin int64, unionid, deviceInfo string,
tagkey, accountType int32) *PlayerData { tagkey, accountType int32) *PlayerData {
@ -898,7 +945,7 @@ func (this *PlayerData) InitNewData(params string) {
this.Sex = 0 this.Sex = 0
} }
//更新参数 //更新参数
//this.UpdateParams(params) this.UpdateParams(params)
//生成校验和 //生成校验和
RecalcuPlayerCheckSum(this) RecalcuPlayerCheckSum(this)
@ -907,20 +954,30 @@ func (this *PlayerData) InitNewData(params string) {
func (this *PlayerData) InitRolesAndPets() { func (this *PlayerData) InitRolesAndPets() {
if this.Roles == nil || len(this.Roles.ModUnlock) == 0 { if this.Roles == nil || len(this.Roles.ModUnlock) == 0 {
this.Roles = new(RolePetInfo) this.Roles = &ModInfo{
this.Roles.ModUnlock = make(map[int32]int32) ModUnlock: make(map[int32]int32),
ModId: 2000001,
SkillInfo: make(map[int32]map[int32]int32),
}
this.Roles.ModUnlock[2000001] = 1 this.Roles.ModUnlock[2000001] = 1
this.Roles.ModId = 2000001
} }
if this.Pets == nil {
this.Pets = new(RolePetInfo) if this.Pets == nil || len(this.Pets.ModUnlock) == 0 {
this.Pets.ModUnlock = make(map[int32]int32) this.Pets = &ModInfo{
ModUnlock: make(map[int32]int32),
ModId: 1000001,
SkillInfo: make(map[int32]map[int32]int32),
}
this.Pets.ModUnlock[1000001] = 1 this.Pets.ModUnlock[1000001] = 1
this.Pets.ModId = 1000001
} }
if _, ok := this.Pets.ModUnlock[1000001]; !ok {
this.Pets.ModUnlock[1000001] = 1 if this.Skin == nil || len(this.Skin.ModUnlock) == 0 {
this.Pets.ModId = 1000001 this.Skin = &ModInfo{
ModUnlock: make(map[int32]int32),
ModId: 300001,
SkillInfo: make(map[int32]map[int32]int32),
}
this.Skin.ModUnlock[300001] = 1
} }
} }

View File

@ -52,34 +52,3 @@ 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)
} }
//type PlayerGameEntryEvent struct {
// RecordId string //游戏记录ID
// SnId int32 //用户ID
// Platform int32 //平台
// OS int //0 Windows 1 Android 2 iOS
// GameId int //游戏id
// ModeId int //游戏模式
// Time int64 //入场时间 RFC3339
// Id int32 //游戏id
//}
// GenerateEnterEvent 玩家或观众进场事件
//func GenerateEnterEvent(recordId string, snId int32, platform, os string, gameId, modeId int, gameFreeId int32) *RabbitMQData {
// m := &PlayerGameEntryEvent{
// RecordId: recordId,
// SnId: snId,
// GameId: gameId,
// ModeId: modeId,
// Time: time.Now().Unix(),
// Id: gameFreeId,
// }
// pf, err := strconv.Atoi(platform)
// if err != nil {
// logger.Error(err)
// return nil
// }
// m.Platform = int32(pf)
// m.OS = common.DeviceNum[os]
// return NewRabbitMQData(string(MqNameEnterEvent), m)
//}

View File

@ -14,6 +14,7 @@ const (
BackSystemPermitRank = "back_permitrank" BackSystemPermitRank = "back_permitrank"
BackSystemPermitExchange = "back_permitexchange" BackSystemPermitExchange = "back_permitexchange"
BackSystemPermitJoin = "back_permitjoin" BackSystemPermitJoin = "back_permitjoin"
BackSystemPermitTask = "back_permittask"
) )
// dbproxy 消息 // dbproxy 消息

View File

@ -38,6 +38,14 @@ const (
PetsPacketID_PACKET_SC_ROLEPETUNLOCK PetsPacketID = 2560 PetsPacketID_PACKET_SC_ROLEPETUNLOCK PetsPacketID = 2560
PetsPacketID_PACKET_CS_PETSKILLLEVELUP PetsPacketID = 2561 //技能升级 PetsPacketID_PACKET_CS_PETSKILLLEVELUP PetsPacketID = 2561 //技能升级
PetsPacketID_PACKET_SC_PETSKILLLEVELUP PetsPacketID = 2562 //技能升级返回 PetsPacketID_PACKET_SC_PETSKILLLEVELUP PetsPacketID = 2562 //技能升级返回
PetsPacketID_PACKET_CS_SKIN_INFO PetsPacketID = 2563 // 获取皮肤信息
PetsPacketID_PACKET_SC_SKIN_INFO PetsPacketID = 2564 // 获取皮肤信息
PetsPacketID_PACKET_CS_SKIN_USE PetsPacketID = 2565 // 使用皮肤
PetsPacketID_PACKET_SC_SKIN_USE PetsPacketID = 2566 // 使用皮肤
PetsPacketID_PACKET_CS_SKIN_UPGRADE PetsPacketID = 2567 // 皮肤升级
PetsPacketID_PACKET_SC_SKIN_UPGRADE PetsPacketID = 2568 // 皮肤升级
PetsPacketID_PACKET_CS_SKIN_UNLOCK PetsPacketID = 2569 // 皮肤解锁
PetsPacketID_PACKET_SC_SKIN_UNLOCK PetsPacketID = 2570 // 皮肤解锁
) )
// Enum value maps for PetsPacketID. // Enum value maps for PetsPacketID.
@ -57,6 +65,14 @@ var (
2560: "PACKET_SC_ROLEPETUNLOCK", 2560: "PACKET_SC_ROLEPETUNLOCK",
2561: "PACKET_CS_PETSKILLLEVELUP", 2561: "PACKET_CS_PETSKILLLEVELUP",
2562: "PACKET_SC_PETSKILLLEVELUP", 2562: "PACKET_SC_PETSKILLLEVELUP",
2563: "PACKET_CS_SKIN_INFO",
2564: "PACKET_SC_SKIN_INFO",
2565: "PACKET_CS_SKIN_USE",
2566: "PACKET_SC_SKIN_USE",
2567: "PACKET_CS_SKIN_UPGRADE",
2568: "PACKET_SC_SKIN_UPGRADE",
2569: "PACKET_CS_SKIN_UNLOCK",
2570: "PACKET_SC_SKIN_UNLOCK",
} }
PetsPacketID_value = map[string]int32{ PetsPacketID_value = map[string]int32{
"PACKET_CANDY_ZERO": 0, "PACKET_CANDY_ZERO": 0,
@ -73,6 +89,14 @@ var (
"PACKET_SC_ROLEPETUNLOCK": 2560, "PACKET_SC_ROLEPETUNLOCK": 2560,
"PACKET_CS_PETSKILLLEVELUP": 2561, "PACKET_CS_PETSKILLLEVELUP": 2561,
"PACKET_SC_PETSKILLLEVELUP": 2562, "PACKET_SC_PETSKILLLEVELUP": 2562,
"PACKET_CS_SKIN_INFO": 2563,
"PACKET_SC_SKIN_INFO": 2564,
"PACKET_CS_SKIN_USE": 2565,
"PACKET_SC_SKIN_USE": 2566,
"PACKET_CS_SKIN_UPGRADE": 2567,
"PACKET_SC_SKIN_UPGRADE": 2568,
"PACKET_CS_SKIN_UNLOCK": 2569,
"PACKET_SC_SKIN_UNLOCK": 2570,
} }
) )
@ -107,8 +131,11 @@ func (PetsPacketID) EnumDescriptor() ([]byte, []int) {
type OpResultCode int32 type OpResultCode int32
const ( const (
OpResultCode_OPRC_Sucess OpResultCode = 0 //成功 OpResultCode_OPRC_Sucess OpResultCode = 0 //成功
OpResultCode_OPRC_Error OpResultCode = 1 //失败 OpResultCode_OPRC_Error OpResultCode = 1 //失败
OpResultCode_OPRC_NotEnough OpResultCode = 2 //道具不足
OpResultCode_OPRC_MaxLevel OpResultCode = 3 //等级已满
OpResultCode_OPRC_Unlock OpResultCode = 4 //未解锁
) )
// Enum value maps for OpResultCode. // Enum value maps for OpResultCode.
@ -116,10 +143,16 @@ var (
OpResultCode_name = map[int32]string{ OpResultCode_name = map[int32]string{
0: "OPRC_Sucess", 0: "OPRC_Sucess",
1: "OPRC_Error", 1: "OPRC_Error",
2: "OPRC_NotEnough",
3: "OPRC_MaxLevel",
4: "OPRC_Unlock",
} }
OpResultCode_value = map[string]int32{ OpResultCode_value = map[string]int32{
"OPRC_Sucess": 0, "OPRC_Sucess": 0,
"OPRC_Error": 1, "OPRC_Error": 1,
"OPRC_NotEnough": 2,
"OPRC_MaxLevel": 3,
"OPRC_Unlock": 4,
} }
) )
@ -1288,6 +1321,571 @@ func (x *SCPetSkillLevelUp) GetSkillLevel() int32 {
return 0 return 0
} }
type Item struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //道具id
N int64 `protobuf:"varint,2,opt,name=N,proto3" json:"N,omitempty"` //道具数量
}
func (x *Item) Reset() {
*x = Item{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Item) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Item) ProtoMessage() {}
func (x *Item) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Item.ProtoReflect.Descriptor instead.
func (*Item) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{16}
}
func (x *Item) GetId() int32 {
if x != nil {
return x.Id
}
return 0
}
func (x *Item) GetN() int64 {
if x != nil {
return x.N
}
return 0
}
type SkinInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //皮肤id
Level int32 `protobuf:"varint,2,opt,name=Level,proto3" json:"Level,omitempty"` //皮肤等级
MaxLevel int32 `protobuf:"varint,3,opt,name=MaxLevel,proto3" json:"MaxLevel,omitempty"` //最大等级
Cost []*Item `protobuf:"bytes,4,rep,name=Cost,proto3" json:"Cost,omitempty"` // 升级消耗
Have []*Item `protobuf:"bytes,5,rep,name=Have,proto3" json:"Have,omitempty"` // 拥有道具
IsUsing bool `protobuf:"varint,6,opt,name=IsUsing,proto3" json:"IsUsing,omitempty"` //是否在使用中
IsUnlock bool `protobuf:"varint,7,opt,name=IsUnlock,proto3" json:"IsUnlock,omitempty"` //是否已经解锁
}
func (x *SkinInfo) Reset() {
*x = SkinInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SkinInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SkinInfo) ProtoMessage() {}
func (x *SkinInfo) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SkinInfo.ProtoReflect.Descriptor instead.
func (*SkinInfo) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{17}
}
func (x *SkinInfo) GetId() int32 {
if x != nil {
return x.Id
}
return 0
}
func (x *SkinInfo) GetLevel() int32 {
if x != nil {
return x.Level
}
return 0
}
func (x *SkinInfo) GetMaxLevel() int32 {
if x != nil {
return x.MaxLevel
}
return 0
}
func (x *SkinInfo) GetCost() []*Item {
if x != nil {
return x.Cost
}
return nil
}
func (x *SkinInfo) GetHave() []*Item {
if x != nil {
return x.Have
}
return nil
}
func (x *SkinInfo) GetIsUsing() bool {
if x != nil {
return x.IsUsing
}
return false
}
func (x *SkinInfo) GetIsUnlock() bool {
if x != nil {
return x.IsUnlock
}
return false
}
//PACKET_CS_SKIN_INFO
type CSSkinInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *CSSkinInfo) Reset() {
*x = CSSkinInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSSkinInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSSkinInfo) ProtoMessage() {}
func (x *CSSkinInfo) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CSSkinInfo.ProtoReflect.Descriptor instead.
func (*CSSkinInfo) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{18}
}
//PACKET_SC_SKIN_INFO
type SCSkinInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Infos []*SkinInfo `protobuf:"bytes,1,rep,name=Infos,proto3" json:"Infos,omitempty"`
}
func (x *SCSkinInfo) Reset() {
*x = SCSkinInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCSkinInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCSkinInfo) ProtoMessage() {}
func (x *SCSkinInfo) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SCSkinInfo.ProtoReflect.Descriptor instead.
func (*SCSkinInfo) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{19}
}
func (x *SCSkinInfo) GetInfos() []*SkinInfo {
if x != nil {
return x.Infos
}
return nil
}
//PACKET_CS_SKIN_USE
type CSSkinUse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
}
func (x *CSSkinUse) Reset() {
*x = CSSkinUse{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSSkinUse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSSkinUse) ProtoMessage() {}
func (x *CSSkinUse) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CSSkinUse.ProtoReflect.Descriptor instead.
func (*CSSkinUse) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{20}
}
func (x *CSSkinUse) GetId() int32 {
if x != nil {
return x.Id
}
return 0
}
//PACKET_SC_SKIN_USE
type SCSkinUse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
RetCode OpResultCode `protobuf:"varint,2,opt,name=RetCode,proto3,enum=pets.OpResultCode" json:"RetCode,omitempty"`
SnId int32 `protobuf:"varint,3,opt,name=SnId,proto3" json:"SnId,omitempty"`
}
func (x *SCSkinUse) Reset() {
*x = SCSkinUse{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCSkinUse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCSkinUse) ProtoMessage() {}
func (x *SCSkinUse) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SCSkinUse.ProtoReflect.Descriptor instead.
func (*SCSkinUse) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{21}
}
func (x *SCSkinUse) GetId() int32 {
if x != nil {
return x.Id
}
return 0
}
func (x *SCSkinUse) GetRetCode() OpResultCode {
if x != nil {
return x.RetCode
}
return OpResultCode_OPRC_Sucess
}
func (x *SCSkinUse) GetSnId() int32 {
if x != nil {
return x.SnId
}
return 0
}
//PACKET_CS_SKIN_UPGRADE
type CSSkinUpgrade struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
}
func (x *CSSkinUpgrade) Reset() {
*x = CSSkinUpgrade{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSSkinUpgrade) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSSkinUpgrade) ProtoMessage() {}
func (x *CSSkinUpgrade) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CSSkinUpgrade.ProtoReflect.Descriptor instead.
func (*CSSkinUpgrade) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{22}
}
func (x *CSSkinUpgrade) GetId() int32 {
if x != nil {
return x.Id
}
return 0
}
//PACKET_SC_SKIN_UPGRADE
type SCSkinUpgrade struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Info *SkinInfo `protobuf:"bytes,1,opt,name=Info,proto3" json:"Info,omitempty"`
RetCode OpResultCode `protobuf:"varint,2,opt,name=RetCode,proto3,enum=pets.OpResultCode" json:"RetCode,omitempty"`
}
func (x *SCSkinUpgrade) Reset() {
*x = SCSkinUpgrade{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCSkinUpgrade) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCSkinUpgrade) ProtoMessage() {}
func (x *SCSkinUpgrade) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SCSkinUpgrade.ProtoReflect.Descriptor instead.
func (*SCSkinUpgrade) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{23}
}
func (x *SCSkinUpgrade) GetInfo() *SkinInfo {
if x != nil {
return x.Info
}
return nil
}
func (x *SCSkinUpgrade) GetRetCode() OpResultCode {
if x != nil {
return x.RetCode
}
return OpResultCode_OPRC_Sucess
}
//PACKET_CS_SKIN_UNLOCK
type CSSKinUnLock struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
}
func (x *CSSKinUnLock) Reset() {
*x = CSSKinUnLock{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSSKinUnLock) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSSKinUnLock) ProtoMessage() {}
func (x *CSSKinUnLock) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CSSKinUnLock.ProtoReflect.Descriptor instead.
func (*CSSKinUnLock) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{24}
}
func (x *CSSKinUnLock) GetId() int32 {
if x != nil {
return x.Id
}
return 0
}
//PACKET_SC_SKIN_UNLOCK
type SCSkinUnLock struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
RetCode OpResultCode `protobuf:"varint,2,opt,name=RetCode,proto3,enum=pets.OpResultCode" json:"RetCode,omitempty"`
Info *SkinInfo `protobuf:"bytes,3,opt,name=Info,proto3" json:"Info,omitempty"`
}
func (x *SCSkinUnLock) Reset() {
*x = SCSkinUnLock{}
if protoimpl.UnsafeEnabled {
mi := &file_pets_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCSkinUnLock) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCSkinUnLock) ProtoMessage() {}
func (x *SCSkinUnLock) ProtoReflect() protoreflect.Message {
mi := &file_pets_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SCSkinUnLock.ProtoReflect.Descriptor instead.
func (*SCSkinUnLock) Descriptor() ([]byte, []int) {
return file_pets_proto_rawDescGZIP(), []int{25}
}
func (x *SCSkinUnLock) GetId() int32 {
if x != nil {
return x.Id
}
return 0
}
func (x *SCSkinUnLock) GetRetCode() OpResultCode {
if x != nil {
return x.RetCode
}
return OpResultCode_OPRC_Sucess
}
func (x *SCSkinUnLock) GetInfo() *SkinInfo {
if x != nil {
return x.Info
}
return nil
}
var File_pets_proto protoreflect.FileDescriptor var File_pets_proto protoreflect.FileDescriptor
var file_pets_proto_rawDesc = []byte{ var file_pets_proto_rawDesc = []byte{
@ -1423,39 +2021,100 @@ var file_pets_proto_rawDesc = []byte{
0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x65, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1e,
0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01,
0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x2a, 0x9f, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x24,
0x03, 0x0a, 0x0c, 0x50, 0x65, 0x74, 0x73, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
0x15, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x4e, 0x44, 0x59, 0x5f, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x0c, 0x0a, 0x01, 0x4e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x03, 0x52, 0x01, 0x4e, 0x22, 0xc2, 0x01, 0x0a, 0x08, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x6e, 0x66,
0x5f, 0x43, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xf6, 0x13, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49,
0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
0x4c, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xf7, 0x13, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x4c, 0x65,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4d, 0x61, 0x78, 0x4c, 0x65,
0x10, 0xf8, 0x13, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x76, 0x65, 0x6c, 0x12, 0x1e, 0x0a, 0x04, 0x43, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28,
0x5f, 0x50, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xf9, 0x13, 0x12, 0x1d, 0x0a, 0x18, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x65, 0x74, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x43,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x45, 0x54, 0x5f, 0x52, 0x49, 0x6f, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x04, 0x48, 0x61, 0x76, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28,
0x53, 0x49, 0x4e, 0x47, 0x53, 0x54, 0x41, 0x52, 0x10, 0xfa, 0x13, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x65, 0x74, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x48,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x49, 0x61, 0x76, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x06,
0x53, 0x49, 0x4e, 0x47, 0x53, 0x54, 0x41, 0x52, 0x10, 0xfb, 0x13, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x45, 0x54, 0x5f, 0x52, 0x49, 0x53, 0x08, 0x49, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52,
0x49, 0x4e, 0x47, 0x53, 0x54, 0x41, 0x52, 0x10, 0xfc, 0x13, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x08, 0x49, 0x73, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x0c, 0x0a, 0x0a, 0x43, 0x53, 0x53,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x6b, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x32, 0x0a, 0x0a, 0x53, 0x43, 0x53, 0x6b, 0x69,
0x53, 0x45, 0x4f, 0x50, 0x10, 0xfd, 0x13, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01,
0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x53, 0x45, 0x4f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x65, 0x74, 0x73, 0x2e, 0x53, 0x6b, 0x69, 0x6e,
0x50, 0x10, 0xfe, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x1b, 0x0a, 0x09, 0x43,
0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x53, 0x53, 0x6b, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01,
0xff, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x09, 0x53, 0x43, 0x53, 0x6b,
0x52, 0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x80, 0x14, 0x69, 0x6e, 0x55, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x45, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65,
0x54, 0x53, 0x4b, 0x49, 0x4c, 0x4c, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x55, 0x50, 0x10, 0x81, 0x14, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x65, 0x74, 0x73, 0x2e, 0x4f, 0x70,
0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x45, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43,
0x54, 0x53, 0x4b, 0x49, 0x4c, 0x4c, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x55, 0x50, 0x10, 0x82, 0x14, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
0x2a, 0x2f, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x1f, 0x0a, 0x0d, 0x43, 0x53, 0x53, 0x6b, 0x69,
0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x6e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01,
0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x0d, 0x53, 0x43, 0x53, 0x6b,
0x01, 0x42, 0x24, 0x5a, 0x22, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x69, 0x6e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x49, 0x6e, 0x66,
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x65, 0x74, 0x73, 0x2e, 0x53,
0x6f, 0x6c, 0x2f, 0x70, 0x65, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x6b, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a,
0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12,
0x2e, 0x70, 0x65, 0x74, 0x73, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f,
0x64, 0x65, 0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x1e, 0x0a, 0x0c, 0x43,
0x53, 0x53, 0x4b, 0x69, 0x6e, 0x55, 0x6e, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0x70, 0x0a, 0x0c, 0x53,
0x43, 0x53, 0x6b, 0x69, 0x6e, 0x55, 0x6e, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x07, 0x52,
0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70,
0x65, 0x74, 0x73, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65,
0x52, 0x07, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x49, 0x6e, 0x66,
0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x65, 0x74, 0x73, 0x2e, 0x53,
0x6b, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0xf7, 0x04,
0x0a, 0x0c, 0x50, 0x65, 0x74, 0x73, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x15,
0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x41, 0x4e, 0x44, 0x59, 0x5f, 0x5a,
0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x43, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xf6, 0x13, 0x12,
0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4c,
0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xf7, 0x13, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10,
0xf8, 0x13, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x50, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xf9, 0x13, 0x12, 0x1d, 0x0a, 0x18, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x45, 0x54, 0x5f, 0x52, 0x49, 0x53,
0x49, 0x4e, 0x47, 0x53, 0x54, 0x41, 0x52, 0x10, 0xfa, 0x13, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x49, 0x53,
0x49, 0x4e, 0x47, 0x53, 0x54, 0x41, 0x52, 0x10, 0xfb, 0x13, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x45, 0x54, 0x5f, 0x52, 0x49, 0x53, 0x49,
0x4e, 0x47, 0x53, 0x54, 0x41, 0x52, 0x10, 0xfc, 0x13, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x53,
0x45, 0x4f, 0x50, 0x10, 0xfd, 0x13, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x53, 0x45, 0x4f, 0x50,
0x10, 0xfe, 0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0xff,
0x13, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52,
0x4f, 0x4c, 0x45, 0x50, 0x45, 0x54, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x80, 0x14, 0x12,
0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x45, 0x54,
0x53, 0x4b, 0x49, 0x4c, 0x4c, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x55, 0x50, 0x10, 0x81, 0x14, 0x12,
0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x45, 0x54,
0x53, 0x4b, 0x49, 0x4c, 0x4c, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x55, 0x50, 0x10, 0x82, 0x14, 0x12,
0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x4b, 0x49,
0x4e, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x83, 0x14, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x4b, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x46, 0x4f,
0x10, 0x84, 0x14, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53,
0x5f, 0x53, 0x4b, 0x49, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x10, 0x85, 0x14, 0x12, 0x17, 0x0a, 0x12,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x4b, 0x49, 0x4e, 0x5f, 0x55,
0x53, 0x45, 0x10, 0x86, 0x14, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x43, 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x4e, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10,
0x87, 0x14, 0x12, 0x1b, 0x0a, 0x16, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f,
0x53, 0x4b, 0x49, 0x4e, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x88, 0x14, 0x12,
0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x4b, 0x49,
0x4e, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x89, 0x14, 0x12, 0x1a, 0x0a, 0x15, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x4b, 0x49, 0x4e, 0x5f, 0x55, 0x4e,
0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x8a, 0x14, 0x2a, 0x67, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f,
0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43,
0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x50, 0x52, 0x43,
0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d,
0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x61, 0x78, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x03, 0x12,
0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x10, 0x04,
0x42, 0x24, 0x5a, 0x22, 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, 0x70, 0x65, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -1471,7 +2130,7 @@ func file_pets_proto_rawDescGZIP() []byte {
} }
var file_pets_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_pets_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_pets_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_pets_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
var file_pets_proto_goTypes = []interface{}{ var file_pets_proto_goTypes = []interface{}{
(PetsPacketID)(0), // 0: pets.PetsPacketID (PetsPacketID)(0), // 0: pets.PetsPacketID
(OpResultCode)(0), // 1: pets.OpResultCode (OpResultCode)(0), // 1: pets.OpResultCode
@ -1491,6 +2150,16 @@ var file_pets_proto_goTypes = []interface{}{
(*PetSkillInfo)(nil), // 15: pets.PetSkillInfo (*PetSkillInfo)(nil), // 15: pets.PetSkillInfo
(*CSPetSkillLevelUp)(nil), // 16: pets.CSPetSkillLevelUp (*CSPetSkillLevelUp)(nil), // 16: pets.CSPetSkillLevelUp
(*SCPetSkillLevelUp)(nil), // 17: pets.SCPetSkillLevelUp (*SCPetSkillLevelUp)(nil), // 17: pets.SCPetSkillLevelUp
(*Item)(nil), // 18: pets.Item
(*SkinInfo)(nil), // 19: pets.SkinInfo
(*CSSkinInfo)(nil), // 20: pets.CSSkinInfo
(*SCSkinInfo)(nil), // 21: pets.SCSkinInfo
(*CSSkinUse)(nil), // 22: pets.CSSkinUse
(*SCSkinUse)(nil), // 23: pets.SCSkinUse
(*CSSkinUpgrade)(nil), // 24: pets.CSSkinUpgrade
(*SCSkinUpgrade)(nil), // 25: pets.SCSkinUpgrade
(*CSSKinUnLock)(nil), // 26: pets.CSSKinUnLock
(*SCSkinUnLock)(nil), // 27: pets.SCSkinUnLock
} }
var file_pets_proto_depIdxs = []int32{ var file_pets_proto_depIdxs = []int32{
2, // 0: pets.SCRoleInfo.Infos:type_name -> pets.RoleInfo 2, // 0: pets.SCRoleInfo.Infos:type_name -> pets.RoleInfo
@ -1504,11 +2173,19 @@ var file_pets_proto_depIdxs = []int32{
1, // 8: pets.SCRolePetUnlock.RetCode:type_name -> pets.OpResultCode 1, // 8: pets.SCRolePetUnlock.RetCode:type_name -> pets.OpResultCode
2, // 9: pets.SCRolePetUnlock.RoleInfo:type_name -> pets.RoleInfo 2, // 9: pets.SCRolePetUnlock.RoleInfo:type_name -> pets.RoleInfo
5, // 10: pets.SCRolePetUnlock.PetInfo:type_name -> pets.PetInfo 5, // 10: pets.SCRolePetUnlock.PetInfo:type_name -> pets.PetInfo
11, // [11:11] is the sub-list for method output_type 18, // 11: pets.SkinInfo.Cost:type_name -> pets.Item
11, // [11:11] is the sub-list for method input_type 18, // 12: pets.SkinInfo.Have:type_name -> pets.Item
11, // [11:11] is the sub-list for extension type_name 19, // 13: pets.SCSkinInfo.Infos:type_name -> pets.SkinInfo
11, // [11:11] is the sub-list for extension extendee 1, // 14: pets.SCSkinUse.RetCode:type_name -> pets.OpResultCode
0, // [0:11] is the sub-list for field type_name 19, // 15: pets.SCSkinUpgrade.Info:type_name -> pets.SkinInfo
1, // 16: pets.SCSkinUpgrade.RetCode:type_name -> pets.OpResultCode
1, // 17: pets.SCSkinUnLock.RetCode:type_name -> pets.OpResultCode
19, // 18: pets.SCSkinUnLock.Info:type_name -> pets.SkinInfo
19, // [19:19] is the sub-list for method output_type
19, // [19:19] is the sub-list for method input_type
19, // [19:19] is the sub-list for extension type_name
19, // [19:19] is the sub-list for extension extendee
0, // [0:19] is the sub-list for field type_name
} }
func init() { file_pets_proto_init() } func init() { file_pets_proto_init() }
@ -1709,6 +2386,126 @@ func file_pets_proto_init() {
return nil return nil
} }
} }
file_pets_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Item); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SkinInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSSkinInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCSkinInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSSkinUse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCSkinUse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSSkinUpgrade); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCSkinUpgrade); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSSKinUnLock); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_pets_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCSkinUnLock); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
} }
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
@ -1716,7 +2513,7 @@ func file_pets_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_pets_proto_rawDesc, RawDescriptor: file_pets_proto_rawDesc,
NumEnums: 2, NumEnums: 2,
NumMessages: 16, NumMessages: 26,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View File

@ -18,12 +18,23 @@ enum PetsPacketID {
PACKET_SC_ROLEPETUNLOCK = 2560; PACKET_SC_ROLEPETUNLOCK = 2560;
PACKET_CS_PETSKILLLEVELUP = 2561;// PACKET_CS_PETSKILLLEVELUP = 2561;//
PACKET_SC_PETSKILLLEVELUP = 2562;// PACKET_SC_PETSKILLLEVELUP = 2562;//
PACKET_CS_SKIN_INFO = 2563;//
PACKET_SC_SKIN_INFO = 2564;//
PACKET_CS_SKIN_USE = 2565;// 使
PACKET_SC_SKIN_USE = 2566;// 使
PACKET_CS_SKIN_UPGRADE = 2567;//
PACKET_SC_SKIN_UPGRADE = 2568;//
PACKET_CS_SKIN_UNLOCK = 2569;//
PACKET_SC_SKIN_UNLOCK = 2570;//
} }
// //
enum OpResultCode { enum OpResultCode {
OPRC_Sucess = 0; // OPRC_Sucess = 0; //
OPRC_Error = 1; // OPRC_Error = 1; //
OPRC_NotEnough = 2; //
OPRC_MaxLevel = 3; //
OPRC_Unlock = 4; //
} }
// //
message RoleInfo { message RoleInfo {
@ -139,4 +150,59 @@ message SCPetSkillLevelUp{
int32 PetId = 1; int32 PetId = 1;
int32 SkillId = 2; int32 SkillId = 2;
int32 SkillLevel = 3; int32 SkillLevel = 3;
}
message Item{
int32 Id = 1;//id
int64 N = 2;//
}
message SkinInfo{
int32 Id = 1;//id
int32 Level = 2;//
int32 MaxLevel = 3;//
repeated Item Cost = 4;//
repeated Item Have = 5;//
bool IsUsing = 6;//使
bool IsUnlock = 7;//
}
//PACKET_CS_SKIN_INFO
message CSSkinInfo{
}
//PACKET_SC_SKIN_INFO
message SCSkinInfo{
repeated SkinInfo Infos = 1;
}
//PACKET_CS_SKIN_USE
message CSSkinUse{
int32 Id = 1;
}
//PACKET_SC_SKIN_USE
message SCSkinUse{
int32 Id = 1;
OpResultCode RetCode = 2;
int32 SnId = 3;
}
//PACKET_CS_SKIN_UPGRADE
message CSSkinUpgrade{
int32 Id = 1;
}
//PACKET_SC_SKIN_UPGRADE
message SCSkinUpgrade{
SkinInfo Info = 1;
OpResultCode RetCode = 2;
}
//PACKET_CS_SKIN_UNLOCK
message CSSKinUnLock{
int32 Id = 1;
}
//PACKET_SC_SKIN_UNLOCK
message SCSkinUnLock{
int32 Id = 1;
OpResultCode RetCode = 2;
SkinInfo Info = 3;
} }

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,8 @@ syntax = "proto3";
package player; package player;
option go_package = "mongo.games.com/game/protocol/player"; option go_package = "mongo.games.com/game/protocol/player";
import "protocol/server/pbdata.proto";
// //
enum OpResultCode { enum OpResultCode {
OPRC_Sucess = 0; // OPRC_Sucess = 0; //
@ -209,6 +211,14 @@ enum PlayerPacketID {
PACKET_SCExchangeChannel = 2826; // PACKET_SCExchangeChannel = 2826; //
PACKET_CSSMSConfig = 2827; // PACKET_CSSMSConfig = 2827; //
PACKET_SCSMSConfig = 2828; // PACKET_SCSMSConfig = 2828; //
PACKET_CS_DiamondLotteryInfo = 2829; //
PACKET_SC_DiamondLotteryInfo = 2830; //
PACKET_CS_DiamondLottery = 2831; //
PACKET_SC_DiamondLottery = 2832; //
PACKET_CSDiamondLotteryLuckyAward = 2833; //
PACKET_SCDiamondLotteryLuckyAward = 2834; //
PACKET_SCItem = 2835; //
} }
// //
@ -318,6 +328,7 @@ message PlayerData {
int32 Age = 47; // int32 Age = 47; //
repeated WeekInfo WeekCard = 48;// repeated WeekInfo WeekCard = 48;//
repeated int32 RequestAddFriend = 49;// repeated int32 RequestAddFriend = 49;//
int32 UseSkinId = 50; // id
} }
// //
@ -1150,6 +1161,7 @@ message LotteryItem{
int32 Id = 1; int32 Id = 1;
int32 ItemId = 2; int32 ItemId = 2;
int64 ItemNum =3; int64 ItemNum =3;
int32 TypeId = 4;
} }
// //
@ -1186,12 +1198,12 @@ message SCPigBankCoin {
// PACKET_CSExchangeChannel // PACKET_CSExchangeChannel
message CSExchangeChannel{ message CSExchangeChannel{
int32 Tp = 1; // 0 1 2v卡掉落 int32 Tp = 1; // 0 1 2v卡掉落 ...
} }
message ChannelSwitch { message ChannelSwitch {
repeated string OnChannelName = 1; // repeated string OnChannelName = 1; //
int32 Tp = 2; // 1 2v卡掉落 3: int32 Tp = 2; // 1 2v卡掉落 ...
} }
// PACKET_SCExchangeChannel // PACKET_SCExchangeChannel
@ -1210,4 +1222,42 @@ message SCSMSConfig{
message SMSInfo{ message SMSInfo{
int32 Id = 1; int32 Id = 1;
string SmsName = 2; string SmsName = 2;
}
//
//PACKET_CS_DiamondLotteryInfo
message CSDiamondLotteryInfo{
}
//
//PACKET_SC_DiamondLotteryInfo
message SCDiamondLotteryInfo{
int64 LuckyScore = 1; //
repeated LotteryItem Item = 2;//
int32 MaxScore = 3;//
int32 DiamondNum = 4; //
}
//
//PACKET_CS_DiamondLottery
message CSDiamondLottery{
int32 LotteryType = 1; //1- 2-
}
//
//PACKET_SC_DiamondLottery
message SCDiamondLottery{
int64 LuckyScore = 1; //
repeated LotteryItem Item = 2; //
}
//
//PACKET_CSDiamondLotteryLuckyAward
message CSDiamondLotteryLuckyAward{
}
////PACKET_SCDiamondLotteryLuckyAward
message SCDiamondLotteryLuckyAward{
int64 LuckyScore = 1; //
repeated LotteryItem Item = 2; //
}
// PACKET_SCItem
message SCItem{
repeated server.DB_GameItem Items = 1; //
} }

File diff suppressed because it is too large Load Diff

View File

@ -879,6 +879,8 @@ message DB_GameItem {
int32 Entity = 17; int32 Entity = 17;
string Icon = 18;
} }
message DB_GameItemArray { message DB_GameItemArray {
@ -1511,6 +1513,44 @@ message DB_Sensitive_WordsArray {
repeated DB_Sensitive_Words Arr = 1; repeated DB_Sensitive_Words Arr = 1;
} }
message DB_Skin {
int32 Id = 1;
string Model = 2;
string SkinPic = 3;
string SkinName = 4;
string SkinType = 5;
int32 UnlockType = 6;
map<int64, int64> UnlockItem = 7;
}
message DB_SkinArray {
repeated DB_Skin Arr = 1;
}
message DB_SkinLevel {
int32 Id = 1;
int32 SkinId = 2;
int32 Level = 3;
map<int64, int64> UpItem = 4;
}
message DB_SkinLevelArray {
repeated DB_SkinLevel Arr = 1;
}
message DB_SlotRateWeight { message DB_SlotRateWeight {
int32 Id = 1; int32 Id = 1;
@ -1575,19 +1615,23 @@ message DB_Task {
int32 Order = 2; int32 Order = 2;
int32 ActivityType = 3; string Name = 3;
int32 TaskType = 4; string Des = 4;
int64 TargetTimes = 5; int32 ActivityType = 5;
int64 FinishTimes = 6; int32 TaskType = 6;
map<int64, int64> Award = 7; int64 TargetTimes = 7;
int32 GameType = 8; int64 FinishTimes = 8;
repeated int32 Position = 9; map<int64, int64> Award = 9;
int32 GameType = 10;
repeated int32 Position = 11;
} }

File diff suppressed because it is too large Load Diff

View File

@ -107,6 +107,7 @@ enum SSPacketID {
PACKET_WG_SINGLEADJUST = 1550; PACKET_WG_SINGLEADJUST = 1550;
PACKET_GW_ADDSINGLEADJUST = 1551; PACKET_GW_ADDSINGLEADJUST = 1551;
PACKET_WG_BUYRECTIMEITEM = 1552; PACKET_WG_BUYRECTIMEITEM = 1552;
PACKET_WG_UpdateSkin = 1553; // id
} }
//PACKET_SG_BINDGROUPTAG //PACKET_SG_BINDGROUPTAG
@ -225,6 +226,8 @@ message WGPlayerEnter {
map<int32, int64> Items = 17; map<int32, int64> Items = 17;
repeated int32 MatchParams = 18;// repeated int32 MatchParams = 18;//
map<int32, int64> RankScore = 19;// map<int32, int64> RankScore = 19;//
int64 Recharge = 20; //
int64 VCardCost = 21; // v卡消耗数量
} }
// //
@ -989,4 +992,10 @@ message WGBuyRecTimeItem{
int32 SnId = 1; int32 SnId = 1;
int64 ExpireTime = 2; int64 ExpireTime = 2;
int64 Diamond = 3; int64 Diamond = 3;
}
// PACKET_WG_UpdateSkin
message WGUpdateSkin{
int32 SnId = 1;
int32 Id = 2; // id
} }

File diff suppressed because it is too large Load Diff

View File

@ -134,6 +134,7 @@ message ShopExchangeRecord{
int32 ExchangeNum = 7;// int32 ExchangeNum = 7;//
int32 EXchangeType = 8;// int32 EXchangeType = 8;//
int32 GoodsId = 9;//Id int32 GoodsId = 9;//Id
int32 TelId = 10; //ID
} }
//PACKET_SC_SHOP_EXCHANGERECORD //PACKET_SC_SHOP_EXCHANGERECORD
message SCShopExchangeRecord{ message SCShopExchangeRecord{
@ -153,6 +154,7 @@ message CSShopExchange{
int32 Id = 5;//Id ExType中的id3 int32 Id = 5;//Id ExType中的id3
int32 Amount = 6;// int32 Amount = 6;//
int32 ExchangeType = 7; // 1- 2- int32 ExchangeType = 7; // 1- 2-
int32 TelId = 8; //id TelChargeData里的ID
} }
message SCShopExchange{ message SCShopExchange{
OpResultCode RetCode = 1; OpResultCode RetCode = 1;
@ -179,6 +181,8 @@ message ShopExchangeInfo{
int32 NotVipDayMaxLimit = 13;//VIP每日限购 int32 NotVipDayMaxLimit = 13;//VIP每日限购
int32 VipShopLimit = 14;//VIP限购总数 int32 VipShopLimit = 14;//VIP限购总数
int32 NotVipShopLimit = 15;//VIP限购总数 int32 NotVipShopLimit = 15;//VIP限购总数
int32 ShopType = 16; //
repeated TelChargeData TelData = 17;
} }
@ -189,10 +193,23 @@ message ExchangeType{
int32 Id = 4; // int32 Id = 4; //
} }
message TelChargeData {
int32 Id = 1;
string Name = 2;
string Url = 3;
}
message ShopWeight{
int32 ShopType = 1;
int32 Weight = 2;
string Name = 3;
int32 IsShow = 4;
}
message SCShopExchangeList{ message SCShopExchangeList{
OpResultCode RetCode = 1; OpResultCode RetCode = 1;
repeated ShopExchangeInfo Infos = 2;// repeated ShopExchangeInfo Infos = 2;//
repeated ShopWeight Weight = 3; //
} }
//PACKET_CSPAYINFO //PACKET_CSPAYINFO
message CSPayInfo{ message CSPayInfo{

View File

@ -555,6 +555,7 @@ type ThirteenPlayerData struct {
RoleId int32 `protobuf:"varint,27,opt,name=RoleId,proto3" json:"RoleId,omitempty"` //使用中的角色id RoleId int32 `protobuf:"varint,27,opt,name=RoleId,proto3" json:"RoleId,omitempty"` //使用中的角色id
Level int64 `protobuf:"varint,28,opt,name=Level,proto3" json:"Level,omitempty"` //玩家等级 Level int64 `protobuf:"varint,28,opt,name=Level,proto3" json:"Level,omitempty"` //玩家等级
Exp int64 `protobuf:"varint,29,opt,name=Exp,proto3" json:"Exp,omitempty"` //玩家经验 Exp int64 `protobuf:"varint,29,opt,name=Exp,proto3" json:"Exp,omitempty"` //玩家经验
SkinId int32 `protobuf:"varint,30,opt,name=SkinId,proto3" json:"SkinId,omitempty"` //皮肤id
} }
func (x *ThirteenPlayerData) Reset() { func (x *ThirteenPlayerData) Reset() {
@ -792,6 +793,13 @@ func (x *ThirteenPlayerData) GetExp() int64 {
return 0 return 0
} }
func (x *ThirteenPlayerData) GetSkinId() int32 {
if x != nil {
return x.SkinId
}
return 0
}
//玩家进入 //玩家进入
//PACKET_SCThirteenPlayerEnter //PACKET_SCThirteenPlayerEnter
type SCThirteenPlayerEnter struct { type SCThirteenPlayerEnter struct {
@ -1409,7 +1417,7 @@ var file_thirteen_proto_rawDesc = []byte{
0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12,
0x25, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x25, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f,
0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x50, 0x6f, 0x6b, 0x65, 0x72, 0x52, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x50, 0x6f, 0x6b, 0x65, 0x72, 0x52,
0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xf6, 0x05, 0x0a, 0x12, 0x54, 0x68, 0x69, 0x72, 0x74, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0x8e, 0x06, 0x0a, 0x12, 0x54, 0x68, 0x69, 0x72, 0x74,
0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a,
0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
@ -1456,105 +1464,106 @@ var file_thirteen_proto_rawDesc = []byte{
0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c,
0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x10, 0x0a, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x10, 0x0a,
0x03, 0x45, 0x78, 0x70, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x78, 0x70, 0x22, 0x03, 0x45, 0x78, 0x70, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x45, 0x78, 0x70, 0x12,
0x49, 0x0a, 0x15, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x16, 0x0a, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x05, 0x52,
0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x49, 0x0a, 0x15, 0x53, 0x43, 0x54, 0x68, 0x69,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72,
0x6e, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x29, 0x0a, 0x15, 0x53, 0x43, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65,
0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61,
0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x74, 0x61, 0x22, 0x29, 0x0a, 0x15, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e,
0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0xd4, 0x04, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50,
0x74, 0x65, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0xd4, 0x04,
0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d,
0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07,
0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43,
0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64,
0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a,
0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61,
0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61,
0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6d, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73,
0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d,
0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x18,
0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73,
0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52,
0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75,
0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74,
0x74, 0x65, 0x65, 0x6e, 0x2e, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x12, 0x36, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28,
0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x54, 0x68, 0x69,
0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x62, 0x61, 0x6e, 0x64, 0x47, 0x65, 0x6e, 0x18, 0x0b, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52,
0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69, 0x73, 0x62, 0x61, 0x6e, 0x64, 0x47, 0x65, 0x6e, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x62,
0x12, 0x20, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x73, 0x18, 0x61, 0x6e, 0x64, 0x47, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x44, 0x69,
0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x72, 0x64, 0x50, 0x73, 0x62, 0x61, 0x6e, 0x64, 0x47, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x77,
0x6f, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x53,
0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x67,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x41, 0x67, 0x65,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78,
0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x78,
0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20,
0x6f, 0x72, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c,
0x63, 0x6f, 0x72, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28,
0x61, 0x6d, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x22, 0x0a, 0x0c,
0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x65, 0x61, 0x76, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01,
0x65, 0x44, 0x65, 0x64, 0x75, 0x63, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4c, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73,
0x65, 0x61, 0x76, 0x65, 0x44, 0x65, 0x64, 0x75, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x44, 0x65, 0x64, 0x75, 0x63, 0x74, 0x18,
0x61, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x61, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x44, 0x65, 0x64, 0x75,
0x0b, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x61, 0x74, 0x22, 0x43, 0x0a, 0x13, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x62, 0x61,
0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6f,
0x6d, 0x62, 0x61, 0x74, 0x22, 0x43, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65,
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,
0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x5a, 0x0a, 0x13, 0x53, 0x43, 0x54,
0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x72, 0x64, 0x73,
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, 0x2b, 0x0a, 0x08, 0x41, 0x6c, 0x6c, 0x43,
0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x68, 0x69,
0x72, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x50, 0x6f, 0x6b, 0x65, 0x72, 0x52, 0x08, 0x41, 0x6c, 0x6c,
0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0x68, 0x0a, 0x06, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12,
0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f,
0x73, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
0x04, 0x43, 0x6f, 0x69, 0x6e, 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,
0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x62, 0x61, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20,
0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x62, 0x61, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x22,
0x42, 0x0a, 0x10, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x42, 0x69, 0x6c,
0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x09, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65,
0x6e, 0x2e, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x09, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x6c,
0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65,
0x6e, 0x54, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x2a, 0xee, 0x02, 0x0a, 0x0d, 0x54, 0x57,
0x4d, 0x6d, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x48, 0x49, 0x52, 0x54, 0x45, 0x45, 0x4e, 0x5f, 0x5a,
0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e,
0x66, 0x6f, 0x10, 0xc2, 0x2b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x43, 0x53, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x4f, 0x70, 0x10, 0xc3, 0x2b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74,
0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x61, 0x74, 0x65, 0x10, 0xc4, 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65,
0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xc5, 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43,
0x73, 0x22, 0x5a, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x53, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c,
0x68, 0x6f, 0x77, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xc6, 0x2b, 0x12, 0x21, 0x0a, 0x1c,
0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65,
0x12, 0x2b, 0x0a, 0x08, 0x41, 0x6c, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x61, 0x72, 0x64, 0x73, 0x10, 0xc7, 0x2b, 0x12,
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x50, 0x6f, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72,
0x6b, 0x65, 0x72, 0x52, 0x08, 0x41, 0x6c, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0x68, 0x0a, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xc8, 0x2b, 0x12,
0x06, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72,
0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x74, 0x65, 0x65, 0x6e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x61, 0x72, 0x64, 0x73, 0x10, 0xc9, 0x2b,
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69,
0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0xca, 0x2b, 0x12, 0x1a,
0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x62, 0x61, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74,
0x74, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x6f, 0x6d, 0x65, 0x65, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x10, 0xcb, 0x2b, 0x2a, 0x2f, 0x0a, 0x0c, 0x4f, 0x70,
0x62, 0x61, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x42, 0x0a, 0x10, 0x53, 0x43, 0x54, 0x68, 0x69, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50,
0x72, 0x74, 0x65, 0x65, 0x6e, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x09, 0x41, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f,
0x6c, 0x6c, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x42, 0x28, 0x5a, 0x26, 0x6d,
0x2e, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x2e, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67,
0x52, 0x09, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x53, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x74, 0x68, 0x69,
0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74,
0x61, 0x2a, 0xee, 0x02, 0x0a, 0x0d, 0x54, 0x57, 0x4d, 0x6d, 0x6f, 0x50, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x48,
0x49, 0x52, 0x54, 0x45, 0x45, 0x4e, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1e, 0x0a,
0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65,
0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xc2, 0x2b, 0x12, 0x1e, 0x0a,
0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65,
0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xc3, 0x2b, 0x12, 0x1f, 0x0a,
0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65,
0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0xc4, 0x2b, 0x12, 0x21,
0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74,
0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xc5,
0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68,
0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76,
0x65, 0x10, 0xc6, 0x2b, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43,
0x61, 0x72, 0x64, 0x73, 0x10, 0xc7, 0x2b, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79,
0x65, 0x72, 0x4f, 0x70, 0x10, 0xc8, 0x2b, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x53, 0x68, 0x6f, 0x77,
0x43, 0x61, 0x72, 0x64, 0x73, 0x10, 0xc9, 0x2b, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x42, 0x69, 0x6c,
0x6c, 0x65, 0x64, 0x10, 0xca, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x54, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x10,
0xcb, 0x2b, 0x2a, 0x2f, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f,
0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73,
0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f,
0x72, 0x10, 0x01, 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, 0x74, 0x68, 0x69, 0x72, 0x74, 0x65, 0x65, 0x6e, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@ -125,8 +125,9 @@ message ThirteenPlayerData {
bool IsConfirm = 25; // bool IsConfirm = 25; //
bool IsLeave = 26; // bool IsLeave = 26; //
int32 RoleId = 27; //使id int32 RoleId = 27; //使id
int64 Level = 28; // int64 Level = 28; //
int64 Exp = 29; // int64 Exp = 29; //
int32 SkinId = 30; //id
} }
// //

View File

@ -204,6 +204,7 @@ type TienLenPlayerData struct {
Exp int64 `protobuf:"varint,28,opt,name=Exp,proto3" json:"Exp,omitempty"` //玩家经验 Exp int64 `protobuf:"varint,28,opt,name=Exp,proto3" json:"Exp,omitempty"` //玩家经验
PigBankCoin int64 `protobuf:"varint,29,opt,name=PigBankCoin,proto3" json:"PigBankCoin,omitempty"` //存钱罐金币 PigBankCoin int64 `protobuf:"varint,29,opt,name=PigBankCoin,proto3" json:"PigBankCoin,omitempty"` //存钱罐金币
SkillInfo []*PetSkillInfo `protobuf:"bytes,30,rep,name=SkillInfo,proto3" json:"SkillInfo,omitempty"` //宠物技能信息 SkillInfo []*PetSkillInfo `protobuf:"bytes,30,rep,name=SkillInfo,proto3" json:"SkillInfo,omitempty"` //宠物技能信息
SkinId int32 `protobuf:"varint,31,opt,name=SkinId,proto3" json:"SkinId,omitempty"` //皮肤id
} }
func (x *TienLenPlayerData) Reset() { func (x *TienLenPlayerData) Reset() {
@ -448,6 +449,13 @@ func (x *TienLenPlayerData) GetSkillInfo() []*PetSkillInfo {
return nil return nil
} }
func (x *TienLenPlayerData) GetSkinId() int32 {
if x != nil {
return x.SkinId
}
return 0
}
//宠物技能 //宠物技能
type PetSkillInfo struct { type PetSkillInfo struct {
state protoimpl.MessageState state protoimpl.MessageState
@ -2279,7 +2287,7 @@ var File_tienlen_proto protoreflect.FileDescriptor
var file_tienlen_proto_rawDesc = []byte{ var file_tienlen_proto_rawDesc = []byte{
0x0a, 0x0d, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x0d, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
0x07, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x22, 0x81, 0x07, 0x0a, 0x11, 0x54, 0x69, 0x65, 0x07, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x22, 0x99, 0x07, 0x0a, 0x11, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12,
0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61,
0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
@ -2332,315 +2340,316 @@ var file_tienlen_proto_rawDesc = []byte{
0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x50, 0x65, 0x74, 0x53, 0x6b,
0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e,
0x66, 0x6f, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x1f, 0x20, 0x01,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74,
0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x56, 0x0a, 0x0c, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x50, 0x65, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x65, 0x74, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x56, 0x0a, 0x0c, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c,
0x49, 0x64, 0x12, 0x30, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x65, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20,
0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x01, 0x28, 0x05, 0x52, 0x05, 0x50, 0x65, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x09, 0x53, 0x6b,
0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x69, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
0x44, 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66,
0x6f, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x6f, 0x52, 0x09, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, 0x09,
0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6b, 0x69,
0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x53, 0x6b, 0x69, 0x6c,
0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x23, 0x0a, 0x0b, 0x4c, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65, 0x76, 0x65,
0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c, 0x65,
0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x76, 0x65, 0x6c, 0x22, 0x23, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61,
0x22, 0xab, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xab, 0x07, 0x0a, 0x11, 0x53, 0x43, 0x54,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16,
0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f,
0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72,
0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x06, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d,
0x72, 0x61, 0x6d, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05,
0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1c, 0x0a, 0x09,
0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x09, 0x42, 0x61, 0x6e, 0x6b, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74,
0x4f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65,
0x75, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28,
0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x05, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x50, 0x6c,
0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69,
0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61,
0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73,
0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18,
0x72, 0x4f, 0x70, 0x49, 0x64, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x75, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e,
0x72, 0x4f, 0x70, 0x49, 0x64, 0x78, 0x12, 0x38, 0x0a, 0x0c, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x49, 0x64, 0x78, 0x18, 0x0c,
0x6c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x49, 0x64, 0x78, 0x12, 0x38,
0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x0a, 0x0c, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0d,
0x72, 0x64, 0x52, 0x0c, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4c,
0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0e, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x52, 0x0c, 0x4c, 0x61, 0x73, 0x74,
0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4e, 0x75, 0x6d, 0x4f,
0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4e, 0x75,
0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x6d, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x6f, 0x74, 0x61,
0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c,
0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x66, 0x47, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a,
0x53, 0x6e, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05,
0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09,
0x72, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52,
0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x09, 0x42, 0x61, 0x73, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x4d, 0x61,
0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05,
0x64, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x52, 0x0c, 0x4d, 0x61, 0x78, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a,
0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x14, 0x20, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x05,
0x01, 0x28, 0x05, 0x52, 0x07, 0x49, 0x73, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73,
0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x49, 0x73, 0x4d,
0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x75, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x16, 0x20,
0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x43, 0x75, 0x72, 0x50, 0x6c, 0x61, 0x01, 0x28, 0x05, 0x52, 0x05, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x43, 0x75,
0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x4e, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05,
0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x4e, 0x65, 0x52, 0x0c, 0x43, 0x75, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x1a,
0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x0a, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05,
0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x52, 0x08, 0x4e, 0x65, 0x78, 0x74, 0x4e, 0x65, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x4d, 0x61,
0x6e, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52,
0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08,
0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x41, 0x64, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e, 0x65, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x61, 0x6e, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e,
0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x41, 0x64, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x63, 0x65, 0x6e,
0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x75, 0x74, 0x43, 0x65, 0x41, 0x64, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64,
0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x49, 0x64,
0x0d, 0x4f, 0x75, 0x74, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x75, 0x74, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72,
0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x1f, 0x20, 0x64, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x4f, 0x75, 0x74, 0x43, 0x61, 0x72, 0x64,
0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52,
0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f,
0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d,
0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20,
0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69,
0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e,
0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61,
0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x43, 0x53,
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, 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, 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, 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, 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, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50,
0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64,
0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03,
0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x33, 0x0a,
0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73,
0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f,
0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x64, 0x65, 0x22, 0x46, 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, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x44, 0x61,
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c,
0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x43,
0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61,
0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12,
0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x49,
0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65,
0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65,
0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02,
0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x57,
0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69,
0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69,
0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x6f, 0x69,
0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61,
0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x57,
0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52,
0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64,
0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x41, 0x64, 0x64,
0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d,
0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65,
0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64, 0x64, 0x49, 0x74,
0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x18, 0x0a, 0x20,
0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d, 0x0a, 0x13, 0x53,
0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c,
0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e,
0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c,
0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01, 0x0a, 0x18, 0x53,
0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d,
0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f,
0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x12,
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20,
0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12,
0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4c, 0x6f, 0x73,
0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x47, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x57,
0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x57, 0x69,
0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69,
0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x69,
0x72, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x6e, 0x22, 0x47, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61,
0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x4f, 0x75,
0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49,
0x54, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53,
0x52, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74,
0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61,
0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73,
0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18,
0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a,
0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f,
0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f,
0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06,
0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72,
0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f,
0x05, 0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05,
0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e,
0x0a, 0x19, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65,
0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c,
0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a, 0x19, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e,
0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53,
0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69,
0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53,
0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e,
0x19, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75,
0x05, 0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d,
0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65,
0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f,
0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e,
0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f,
0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65,
0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f,
0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65,
0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f,
0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65,
0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f,
0x65, 0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65,
0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f,
0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73,
0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e,
0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10,
0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31,
0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73,
0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72,
0x28, 0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52,
0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27,
0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74,
0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72,
0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28, 0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72,
0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28,
0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64,
0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64,
0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65,
0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65,
0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52,
0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a,
0x33, 0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18,
0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72,
0x61, 0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61,
0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61,
0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33, 0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61,
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10,
0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64,
0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f,
0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e,
0x08, 0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24,
0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18,
0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e,
0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48,
0x18, 0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72,
0x74, 0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f,
0x5f, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61,
0x65, 0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64,
0x66, 0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a,
0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61,
0x6f, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05,
0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c,
0x52, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03,
0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19,
0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05,
0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12,
0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28,
0x6f, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69,
0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18,
0x6e, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43,
0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69,
0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69,
0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a,
0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65,
0x5e, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02,
0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70,
0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65,
0x28, 0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12,
0x3e, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53,
0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c,
0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53,
0x80, 0x05, 0x0a, 0x0f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x2a, 0x3e, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73,
0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x50, 0x52, 0x43, 0x5f,
0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x52, 0x43,
0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0x80, 0x05, 0x0a, 0x0f, 0x54, 0x69, 0x65, 0x6e,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50,
0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x5a, 0x45, 0x52,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x10,
0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54,
0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54,
0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfc,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69,
0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfd, 0x29,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e,
0x43, 0x61, 0x72, 0x64, 0x10, 0x80, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42,
0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x81, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f,
0x70, 0x50, 0x6f, 0x73, 0x10, 0x82, 0x2a, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c,
0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a,
0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69,
0x64, 0x10, 0x84, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75,
0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e,
0x41, 0x49, 0x10, 0x86, 0x2a, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70,
0x50, 0x6f, 0x73, 0x10, 0x87, 0x2a, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65,
0x73, 0x74, 0x10, 0x88, 0x2a, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f,
0x6e, 0x67, 0x43, 0x6e, 0x74, 0x10, 0x89, 0x2a, 0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73,
0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a,
0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10,
0x8b, 0x2a, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54,
0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76,
0x63, 0x6f, 0x6c, 0x2f, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x74, 0x6f, 0x33, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x10, 0x80, 0x2a, 0x12,
0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x81, 0x2a,
0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x82, 0x2a, 0x12,
0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c,
0x65, 0x64, 0x10, 0x83, 0x2a, 0x12, 0x25, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d,
0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x10, 0x84, 0x2a, 0x12, 0x26, 0x0a, 0x21,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75,
0x6d, 0x10, 0x85, 0x2a, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x10, 0x86, 0x2a, 0x12, 0x1f, 0x0a,
0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x10, 0x87, 0x2a, 0x12, 0x1d,
0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x10, 0x88, 0x2a, 0x12, 0x21, 0x0a,
0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x10, 0x89, 0x2a,
0x12, 0x26, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65,
0x6d, 0x49, 0x74, 0x65, 0x6d, 0x10, 0x8a, 0x2a, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53,
0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x10, 0x8b, 0x2a, 0x42, 0x27, 0x5a, 0x25, 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, 0x74, 0x69, 0x65, 0x6e,
0x6c, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@ -64,7 +64,8 @@ message TienLenPlayerData {
int64 Level = 27; // int64 Level = 27; //
int64 Exp = 28; // int64 Exp = 28; //
int64 PigBankCoin = 29; // int64 PigBankCoin = 29; //
repeated PetSkillInfo SkillInfo = 30;// repeated PetSkillInfo SkillInfo = 30;//
int32 SkinId = 31; //id
} }
// //

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ syntax = "proto3";
package webapi; package webapi;
option go_package = "mongo.games.com/game/protocol/webapi"; option go_package = "mongo.games.com/game/protocol/webapi";
import "mongo.games.com/game/protocol/server/pbdata.proto"; import "protocol/server/pbdata.proto";
/* /*
*/ */
@ -205,6 +205,8 @@ message PlayerData{
bool IsPermit = 56; // bool IsPermit = 56; //
int64 Long = 57; // int64 Long = 57; //
int64 PermitScore = 58; // int64 PermitScore = 58; //
int64 VCardCost = 59; // v卡消耗
int64 MoneyTotal = 60; //
} }
message RoomInfo{ message RoomInfo{
@ -365,6 +367,14 @@ message ExchangeShop {
int32 NotVipDayMaxLimit = 13;//VIP每日限购 int32 NotVipDayMaxLimit = 13;//VIP每日限购
int32 VipShopLimit = 14;//VIP限购总数 int32 VipShopLimit = 14;//VIP限购总数
int32 NotVipShopLimit = 15;//VIP限购总数 int32 NotVipShopLimit = 15;//VIP限购总数
int32 ShopType = 16; //
repeated TelChargeData TelData = 17;
}
message TelChargeData{
int32 Id = 1;
string Name = 2;
string Url = 3;
} }
// //
@ -379,8 +389,17 @@ message ExchangeType{
message ExchangeShopList{ message ExchangeShopList{
repeated ExchangeShop List = 1; repeated ExchangeShop List = 1;
string Platform = 2; string Platform = 2;
repeated ShopWeight Weight = 3; //
} }
message ShopWeight{
int32 ShopType = 1;
int32 Weight = 2;
string Name = 3;
int32 IsShow = 4;
}
message ItemShop { message ItemShop {
int32 Id = 1; //ID int32 Id = 1; //ID
int32 ItemId = 2; //ID int32 ItemId = 2; //ID
@ -672,7 +691,7 @@ message WelfareCollectConfig{
// etcd /game/channel/switch // etcd /game/channel/switch
message ChannelSwitchConfig{ message ChannelSwitchConfig{
int32 Tp = 1; // 1. 2. 3. int32 Tp = 1; // 1. 2. 3. 4.
string Platform = 2; // id string Platform = 2; // id
repeated string OnChannelName = 3; // repeated string OnChannelName = 3; //
} }
@ -735,4 +754,44 @@ message ActPermitConfig{
int64 StartTs = 2; // int64 StartTs = 2; //
int32 Days = 3; // int32 Days = 3; //
repeated PermitChannelConfig Configs = 4; // repeated PermitChannelConfig Configs = 4; //
} }
//
message DiamondLotteryInfo{
int32 Id = 1;
int32 Type = 2;
string Name = 3;
int32 ItemId = 4;
int32 Grade = 5;
int32 Oddrate =6;
}
//
message DiamondLotteryPlayers{
int32 uid = 1;
int32 Count = 2; //
repeated AwardData Award = 3; //ID
}
message AwardData{
int32 AwardId = 1;
int32 Weight = 2;
}
message DiamondLotteryData{
string Channel = 1; //
repeated DiamondLotteryInfo Info = 2;
int32 MaxScore = 3; //
int32 DiamondNum = 4; //
repeated DiamondLotteryPlayers Players = 5;//
}
// etcd /game/diamond_lottery
message DiamondLotteryConfig{
string Platform = 1; //
repeated DiamondLotteryData LotteryData = 2;
}
// etcd /game/item
message ItemConfig {
string Platform = 1; //
repeated server.DB_GameItem Items = 2; //
}

View File

@ -6074,6 +6074,7 @@ type ASCreateExchangeOrder struct {
GiveType int32 `protobuf:"varint,14,opt,name=GiveType,proto3" json:"GiveType,omitempty"` // 领取方式 1自提 GiveType int32 `protobuf:"varint,14,opt,name=GiveType,proto3" json:"GiveType,omitempty"` // 领取方式 1自提
TelCharge int32 `protobuf:"varint,15,opt,name=TelCharge,proto3" json:"TelCharge,omitempty"` // 电话充值 TelCharge int32 `protobuf:"varint,15,opt,name=TelCharge,proto3" json:"TelCharge,omitempty"` // 电话充值
VipLevel int32 `protobuf:"varint,16,opt,name=VipLevel,proto3" json:"VipLevel,omitempty"` //VIP等级 VipLevel int32 `protobuf:"varint,16,opt,name=VipLevel,proto3" json:"VipLevel,omitempty"` //VIP等级
TelId int32 `protobuf:"varint,17,opt,name=TelId,proto3" json:"TelId,omitempty"` //运营商ID
} }
func (x *ASCreateExchangeOrder) Reset() { func (x *ASCreateExchangeOrder) Reset() {
@ -6220,6 +6221,13 @@ func (x *ASCreateExchangeOrder) GetVipLevel() int32 {
return 0 return 0
} }
func (x *ASCreateExchangeOrder) GetTelId() int32 {
if x != nil {
return x.TelId
}
return 0
}
type SACreateExchangeOrder struct { type SACreateExchangeOrder struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -6354,6 +6362,7 @@ type ExchangeOrderInfo struct {
PayStatus bool `protobuf:"varint,8,opt,name=PayStatus,proto3" json:"PayStatus,omitempty"` //订单的现金支付状态 PayStatus bool `protobuf:"varint,8,opt,name=PayStatus,proto3" json:"PayStatus,omitempty"` //订单的现金支付状态
ExchangeNum int32 `protobuf:"varint,9,opt,name=ExchangeNum,proto3" json:"ExchangeNum,omitempty"` //兑换数量 ExchangeNum int32 `protobuf:"varint,9,opt,name=ExchangeNum,proto3" json:"ExchangeNum,omitempty"` //兑换数量
EXchangeType int32 `protobuf:"varint,10,opt,name=EXchangeType,proto3" json:"EXchangeType,omitempty"` //兑换类型 EXchangeType int32 `protobuf:"varint,10,opt,name=EXchangeType,proto3" json:"EXchangeType,omitempty"` //兑换类型
TelId int32 `protobuf:"varint,11,opt,name=TelId,proto3" json:"TelId,omitempty"` //运营商ID
} }
func (x *ExchangeOrderInfo) Reset() { func (x *ExchangeOrderInfo) Reset() {
@ -6458,6 +6467,13 @@ func (x *ExchangeOrderInfo) GetEXchangeType() int32 {
return 0 return 0
} }
func (x *ExchangeOrderInfo) GetTelId() int32 {
if x != nil {
return x.TelId
}
return 0
}
type SAGetExchangeOrder struct { type SAGetExchangeOrder struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -6768,8 +6784,9 @@ type SAGetExchangeShop struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
Tag TagCode `protobuf:"varint,1,opt,name=Tag,proto3,enum=webapi.TagCode" json:"Tag,omitempty"` Tag TagCode `protobuf:"varint,1,opt,name=Tag,proto3,enum=webapi.TagCode" json:"Tag,omitempty"`
List []*ExchangeShop `protobuf:"bytes,2,rep,name=List,proto3" json:"List,omitempty"` List []*ExchangeShop `protobuf:"bytes,2,rep,name=List,proto3" json:"List,omitempty"`
Weight []*ShopWeight `protobuf:"bytes,3,rep,name=Weight,proto3" json:"Weight,omitempty"` //分类排序
} }
func (x *SAGetExchangeShop) Reset() { func (x *SAGetExchangeShop) Reset() {
@ -6818,6 +6835,13 @@ func (x *SAGetExchangeShop) GetList() []*ExchangeShop {
return nil return nil
} }
func (x *SAGetExchangeShop) GetWeight() []*ShopWeight {
if x != nil {
return x.Weight
}
return nil
}
//登录rocket/game_srv_third/register_or_login //登录rocket/game_srv_third/register_or_login
type SARocketLogin struct { type SARocketLogin struct {
state protoimpl.MessageState state protoimpl.MessageState
@ -9512,7 +9536,7 @@ var file_webapi_proto_rawDesc = []byte{
0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x2f, 0x0a, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x2f, 0x0a,
0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x43, 0x50, 0x4f, 0x52, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x22, 0xb5, 0x43, 0x50, 0x4f, 0x52, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x22, 0xcb,
0x03, 0x0a, 0x15, 0x41, 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x03, 0x0a, 0x15, 0x41, 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61,
0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08,
@ -9540,288 +9564,293 @@ var file_webapi_proto_rawDesc = []byte{
0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52,
0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x56, 0x69, 0x09, 0x54, 0x65, 0x6c, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x56, 0x69,
0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x56, 0x69, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x56, 0x69,
0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x6b, 0x0a, 0x15, 0x53, 0x41, 0x43, 0x72, 0x65, 0x61, 0x70, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x65, 0x6c, 0x49, 0x64, 0x18,
0x74, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x65, 0x6c, 0x49, 0x64, 0x22, 0x6b, 0x0a, 0x15,
0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x53, 0x41, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01,
0x61, 0x67, 0x12, 0x2f, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x52, 0x09, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x43, 0x50, 0x4f, 0x22, 0x58, 0x0a, 0x12, 0x41, 0x53, 0x47, 0x65, 0x74, 0x45, 0x78, 0x63, 0x68,
0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 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, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0x99, 0x02,
0x0a, 0x11, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20,
0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12,
0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d,
0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a,
0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x52,
0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74,
0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x50, 0x61, 0x79, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e,
0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e,
0x67, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x45, 0x58, 0x63, 0x68, 0x61, 0x6e, 0x67,
0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x45, 0x58, 0x63,
0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xdc, 0x01, 0x0a, 0x12, 0x53, 0x41,
0x47, 0x65, 0x74, 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, 0x32, 0x0f, 0x2e,
0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03,
0x54, 0x61, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01,
0x28, 0x05, 0x52, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72,
0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x50,
0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74,
0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69,
0x74, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05,
0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12,
0x37, 0x0a, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68,
0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x4f,
0x72, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x41, 0x53, 0x55,
0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73,
0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49,
0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
0x6d, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x65, 0x64, 0x4e, 0x75, 0x6d,
0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x12,
0x16, 0x0a, 0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x4a, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18,
0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x43, 0x61, 0x73, 0x68, 0x22, 0x49, 0x0a, 0x12, 0x53,
0x41, 0x55, 0x70, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 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, 0x43, 0x0a, 0x11, 0x41, 0x53, 0x47, 0x65, 0x74, 0x45,
0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 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, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x60, 0x0a, 0x11, 0x53,
0x41, 0x47, 0x65, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70,
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, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x14, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61,
0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x57, 0x0a,
0x0d, 0x53, 0x41, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x12,
0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x6e,
0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01,
0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c,
0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x45, 0x0a, 0x0d, 0x41, 0x53, 0x52, 0x6f, 0x63, 0x6b,
0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x55,
0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x42, 0x0a,
0x10, 0x53, 0x41, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4f, 0x75,
0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 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, 0x22, 0x4e, 0x0a, 0x10, 0x41, 0x53, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x67,
0x69, 0x6e, 0x4f, 0x75, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12,
0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73,
0x67, 0x22, 0x67, 0x0a, 0x15, 0x41, 0x53, 0x54, 0x68, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x42, 0x61,
0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
0x42, 0x61, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e,
0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a,
0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x4c, 0x0a, 0x15, 0x53, 0x41,
0x54, 0x68, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43,
0x6f, 0x69, 0x6e, 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, 0xbd, 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, 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, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, 0x61, 0x67,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54,
0x61, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
0x4f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a,
0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05,
0x52, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68,
0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x68,
0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x41,
0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x72, 0x64,
0x65, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d,
0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 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, 0x22, 0x0a, 0x0c, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72,
0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x6f,
0x6c, 0x6c, 0x61, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72,
0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64,
0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03,
0x52, 0x02, 0x54, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x45,
0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 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, 0x6c, 0x22, 0x45, 0x0a, 0x0d, 0x41, 0x53, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d,
0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x0a,
0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22,
0x54, 0x0a, 0x12, 0x53, 0x41, 0x57, 0x65, 0x62, 0x41, 0x50, 0x49, 0x53, 0x79, 0x73, 0x74, 0x65,
0x6d, 0x50, 0x61, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a,
0x06, 0x43, 0x42, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x43,
0x42, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x66, 0x0a, 0x12, 0x41, 0x53, 0x57, 0x65, 0x62, 0x41, 0x50,
0x49, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4f,
0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x72, 0x72,
0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x45, 0x72, 0x72, 0x4d, 0x73,
0x67, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a,
0x11, 0x41, 0x53, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65,
0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 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, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x48,
0x0a, 0x11, 0x53, 0x41, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d,
0x65, 0x6e, 0x74, 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, 0x1e, 0x0a, 0x0a, 0x41, 0x53, 0x52, 0x65,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x41, 0x0a, 0x0a, 0x53, 0x41, 0x52, 0x65,
0x73, 0x6f, 0x75, 0x72, 0x63, 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, 0x7d, 0x0a, 0x09, 0x41,
0x53, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05,
0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f,
0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f,
0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01,
0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x44, 0x22, 0x40, 0x0a, 0x09, 0x53, 0x41,
0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x73, 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, 0xb9, 0x01, 0x0a,
0x13, 0x41, 0x53, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x77, 0x61, 0x72, 0x64,
0x43, 0x6f, 0x64, 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, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x18, 0x03,
0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05,
0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4d, 0x6f, 0x6e,
0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x54, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x74, 0x0a, 0x13, 0x53, 0x41, 0x47, 0x65,
0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x64, 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, 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, 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, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x43, 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, 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, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12, 0x2f, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x75,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4c, 0x69, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65,
0x6e, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x22, 0x9d, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x52, 0x09,
0x01, 0x0a, 0x0d, 0x41, 0x53, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x43, 0x50, 0x4f, 0x22, 0x58, 0x0a, 0x12, 0x41, 0x53, 0x47,
0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x65, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12,
0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18,
0x12, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12,
0x28, 0x0b, 0x32, 0x10, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x61, 0x67, 0x65, 0x22, 0xaf, 0x02, 0x0a, 0x11, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70,
0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x44, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,
0x0a, 0x0d, 0x53, 0x41, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x49, 0x64, 0x12, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54,
0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64,
0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x12,
0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e,
0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x50,
0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
0x50, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x78, 0x63,
0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x45,
0x58, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28,
0x05, 0x52, 0x0c, 0x45, 0x58, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x54, 0x65, 0x6c, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
0x54, 0x65, 0x6c, 0x49, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x12, 0x53, 0x41, 0x47, 0x65, 0x74, 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, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61,
0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03, 0x54, 0x61, 0x67, 0x12,
0x14, 0x0a, 0x05, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x75, 0x72, 0x50, 0x61, 0x67, 0x65,
0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x43, 0x75, 0x72, 0x50, 0x61, 0x67, 0x65, 0x12,
0x1c, 0x0a, 0x09, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01,
0x28, 0x05, 0x52, 0x09, 0x50, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a,
0x09, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
0x52, 0x09, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x09, 0x4f,
0x72, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19,
0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72,
0x4c, 0x69, 0x73, 0x74, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x41, 0x53, 0x55, 0x70, 0x45, 0x78, 0x63,
0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x53,
0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x47, 0x6f, 0x6f, 0x64, 0x73, 0x49, 0x64, 0x12, 0x12, 0x0a,
0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69,
0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a,
0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x4e, 0x65, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01,
0x28, 0x05, 0x52, 0x07, 0x4e, 0x65, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x4a,
0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4a, 0x50, 0x72,
0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x43, 0x61, 0x73, 0x68, 0x22, 0x49, 0x0a, 0x12, 0x53, 0x41, 0x55, 0x70, 0x45,
0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 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, 0x43, 0x0a, 0x11, 0x41, 0x53, 0x47, 0x65, 0x74, 0x45, 0x78, 0x63, 0x68, 0x61,
0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 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, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x8c, 0x01, 0x0a, 0x11, 0x53, 0x41, 0x47, 0x65,
0x74, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x68, 0x6f, 0x70, 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, 0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14,
0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x53, 0x68, 0x6f, 0x70, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x57, 0x65,
0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x65, 0x62,
0x61, 0x70, 0x69, 0x2e, 0x53, 0x68, 0x6f, 0x70, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x06,
0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x57, 0x0a, 0x0d, 0x53, 0x41, 0x52, 0x6f, 0x63, 0x6b,
0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41,
0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x41, 0x6d, 0x6f,
0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22,
0x45, 0x0a, 0x0d, 0x41, 0x53, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54,
0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x42, 0x0a, 0x10, 0x53, 0x41, 0x52, 0x6f, 0x63, 0x6b,
0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 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, 0x22, 0x4e, 0x0a, 0x10, 0x41, 0x53,
0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x12, 0x10,
0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x54, 0x61, 0x67,
0x12, 0x16, 0x0a, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
0x52, 0x06, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x67, 0x0a, 0x15, 0x41, 0x53,
0x54, 0x68, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43,
0x6f, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x42, 0x61, 0x73, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x49,
0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x42, 0x61, 0x73, 0x65, 0x47, 0x61, 0x6d,
0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66,
0x6f, 0x72, 0x6d, 0x22, 0x4c, 0x0a, 0x15, 0x53, 0x41, 0x54, 0x68, 0x64, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x43, 0x6f, 0x69, 0x6e, 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, 0xbd, 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,
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,
0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x50,
0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0a, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, 0x61, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x4f,
0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x4f, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x18,
0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x68, 0x6f, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x20, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09,
0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 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,
0x22, 0x0a, 0x0c, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18,
0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x6d, 0x6f,
0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0c,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a,
0x02, 0x54, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x12, 0x28, 0x0a,
0x0f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x64,
0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
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,
0x6c, 0x22, 0x45, 0x0a, 0x0d, 0x41, 0x53, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x64,
0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x22, 0x54, 0x0a, 0x12, 0x53, 0x41, 0x57, 0x65,
0x62, 0x41, 0x50, 0x49, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x73, 0x73, 0x12, 0x16,
0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x42, 0x44, 0x61, 0x74, 0x61,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x43, 0x42, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e,
0x0a, 0x02, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x54, 0x73, 0x22, 0x66,
0x0a, 0x12, 0x41, 0x53, 0x57, 0x65, 0x62, 0x41, 0x50, 0x49, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d,
0x50, 0x61, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f,
0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x45, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a, 0x11, 0x41, 0x53, 0x43, 0x61, 0x6c, 0x6c,
0x62, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x4f,
0x72, 0x64, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4f, 0x72,
0x64, 0x65, 0x72, 0x49, 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, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x11, 0x53, 0x41, 0x43, 0x61, 0x6c,
0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 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, 0x1e, 0x0a, 0x0a, 0x41, 0x53, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73,
0x67, 0x22, 0x41, 0x0a, 0x0a, 0x53, 0x41, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x22, 0x3d, 0x0a, 0x0b, 0x41, 0x53, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x7d, 0x0a, 0x09, 0x41, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d,
0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x02,
0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43,
0x6e, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x0b, 0x53, 0x41, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x54,
0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x79, 0x70, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70,
0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x65, 0x49, 0x44, 0x22, 0x40, 0x0a, 0x09, 0x53, 0x41, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x6d, 0x73,
0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e,
0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x03,
0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0xb9, 0x01, 0x0a, 0x13, 0x41, 0x53, 0x47, 0x65, 0x74, 0x4d,
0x61, 0x74, 0x63, 0x68, 0x41, 0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x64, 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, 0x12, 0x16, 0x0a,
0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49,
0x74, 0x65, 0x6d, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x18, 0x04,
0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x54,
0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x65, 0x6c, 0x12, 0x1a, 0x0a,
0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
0x08, 0x43, 0x61, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d,
0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72,
0x6b, 0x22, 0x74, 0x0a, 0x13, 0x53, 0x41, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41,
0x77, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x64, 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, 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, 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, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44,
0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x43, 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, 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, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x3d, 0x0a,
0x07, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x0b, 0x41, 0x53, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08,
0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6d, 0x73, 0x4e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x6d, 0x73, 0x4e, 0x61, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64,
0x6d, 0x65, 0x2a, 0xce, 0x01, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a,
0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x0b, 0x53, 0x41, 0x53, 0x4d, 0x53, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08,
0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64,
0x4f, 0x52, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x04,
0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x65, 0x62,
0x42, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x49, 0x6e, 0x66,
0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x6f, 0x12, 0x21, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f,
0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x6c, 0x61, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x52,
0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x03, 0x54, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28,
0x12, 0x0c, 0x0a, 0x08, 0x54, 0x65, 0x6c, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67, 0x22, 0x33, 0x0a, 0x07, 0x53, 0x4d, 0x53, 0x49, 0x6e, 0x66,
0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49,
0x64, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x65, 0x6c, 0x4e, 0x6f, 0x74, 0x42, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
0x64, 0x10, 0x0b, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x28, 0x09, 0x52, 0x07, 0x53, 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0xce, 0x01, 0x0a, 0x07,
0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x54, 0x61, 0x67, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10,
0x74, 0x6f, 0x33, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a,
0x0a, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x14, 0x0a,
0x10, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x45, 0x52, 0x52, 0x4f,
0x52, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f,
0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x59, 0x42, 0x5f, 0x43,
0x4f, 0x44, 0x45, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x50,
0x6c, 0x61, 0x79, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x09,
0x0a, 0x05, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x65, 0x6c,
0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75,
0x6e, 0x74, 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, 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 (
@ -9985,6 +10014,7 @@ var file_webapi_proto_goTypes = []interface{}{
(*OnlineReport)(nil), // 143: webapi.OnlineReport (*OnlineReport)(nil), // 143: webapi.OnlineReport
(*ItemInfo)(nil), // 144: webapi.ItemInfo (*ItemInfo)(nil), // 144: webapi.ItemInfo
(*ExchangeShop)(nil), // 145: webapi.ExchangeShop (*ExchangeShop)(nil), // 145: webapi.ExchangeShop
(*ShopWeight)(nil), // 146: webapi.ShopWeight
} }
var file_webapi_proto_depIdxs = []int32{ var file_webapi_proto_depIdxs = []int32{
0, // 0: webapi.ASPlatformInfo.Tag:type_name -> webapi.TagCode 0, // 0: webapi.ASPlatformInfo.Tag:type_name -> webapi.TagCode
@ -10068,25 +10098,26 @@ var file_webapi_proto_depIdxs = []int32{
0, // 78: webapi.SAUpExchangeStatus.Tag:type_name -> webapi.TagCode 0, // 78: webapi.SAUpExchangeStatus.Tag:type_name -> webapi.TagCode
0, // 79: webapi.SAGetExchangeShop.Tag:type_name -> webapi.TagCode 0, // 79: webapi.SAGetExchangeShop.Tag:type_name -> webapi.TagCode
145, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop 145, // 80: webapi.SAGetExchangeShop.List:type_name -> webapi.ExchangeShop
0, // 81: webapi.SAThdUpdatePlayerCoin.Tag:type_name -> webapi.TagCode 146, // 81: webapi.SAGetExchangeShop.Weight:type_name -> webapi.ShopWeight
144, // 82: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo 0, // 82: webapi.SAThdUpdatePlayerCoin.Tag:type_name -> webapi.TagCode
0, // 83: webapi.SACallbackPayment.Tag:type_name -> webapi.TagCode 144, // 83: webapi.SACreateOrder.ItemInfo:type_name -> webapi.ItemInfo
0, // 84: webapi.SAResource.Tag:type_name -> webapi.TagCode 0, // 84: webapi.SACallbackPayment.Tag:type_name -> webapi.TagCode
0, // 85: webapi.SASendSms.Tag:type_name -> webapi.TagCode 0, // 85: webapi.SAResource.Tag:type_name -> webapi.TagCode
0, // 86: webapi.SAGetMatchAwardCode.Tag:type_name -> webapi.TagCode 0, // 86: webapi.SASendSms.Tag:type_name -> webapi.TagCode
0, // 87: webapi.SAUpdateTel.Tag:type_name -> webapi.TagCode 0, // 87: webapi.SAGetMatchAwardCode.Tag:type_name -> webapi.TagCode
0, // 88: webapi.SAGetImgVerify.Tag:type_name -> webapi.TagCode 0, // 88: webapi.SAUpdateTel.Tag:type_name -> webapi.TagCode
0, // 89: webapi.SAPlayerDelete.Tag:type_name -> webapi.TagCode 0, // 89: webapi.SAGetImgVerify.Tag:type_name -> webapi.TagCode
0, // 90: webapi.SAPlayerInviteLink.Tag:type_name -> webapi.TagCode 0, // 90: webapi.SAPlayerDelete.Tag:type_name -> webapi.TagCode
144, // 91: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo 0, // 91: webapi.SAPlayerInviteLink.Tag:type_name -> webapi.TagCode
0, // 92: webapi.SAAddItemById.Tag:type_name -> webapi.TagCode 144, // 92: webapi.ASAddItemById.ItemInfo:type_name -> webapi.ItemInfo
130, // 93: webapi.SASMSConfig.Info:type_name -> webapi.SMSInfo 0, // 93: webapi.SAAddItemById.Tag:type_name -> webapi.TagCode
0, // 94: webapi.SASMSConfig.Tag:type_name -> webapi.TagCode 130, // 94: webapi.SASMSConfig.Info:type_name -> webapi.SMSInfo
95, // [95:95] is the sub-list for method output_type 0, // 95: webapi.SASMSConfig.Tag:type_name -> webapi.TagCode
95, // [95:95] is the sub-list for method input_type 96, // [96:96] is the sub-list for method output_type
95, // [95:95] is the sub-list for extension type_name 96, // [96:96] is the sub-list for method input_type
95, // [95:95] is the sub-list for extension extendee 96, // [96:96] is the sub-list for extension type_name
0, // [0:95] is the sub-list for field type_name 96, // [96:96] is the sub-list for extension extendee
0, // [0:96] is the sub-list for field type_name
} }
func init() { file_webapi_proto_init() } func init() { file_webapi_proto_init() }

View File

@ -688,6 +688,7 @@ message ASCreateExchangeOrder {
int32 GiveType = 14; // 1 int32 GiveType = 14; // 1
int32 TelCharge = 15; // int32 TelCharge = 15; //
int32 VipLevel = 16; //VIP等级 int32 VipLevel = 16; //VIP等级
int32 TelId = 17; //ID
} }
message SACreateExchangeOrder { message SACreateExchangeOrder {
@ -711,6 +712,7 @@ message ExchangeOrderInfo {
bool PayStatus = 8; // bool PayStatus = 8; //
int32 ExchangeNum = 9;// int32 ExchangeNum = 9;//
int32 EXchangeType = 10;// int32 EXchangeType = 10;//
int32 TelId = 11; //ID
} }
message SAGetExchangeOrder { message SAGetExchangeOrder {
TagCode Tag = 1;// TagCode Tag = 1;//
@ -750,6 +752,7 @@ message ASGetExchangeShop{
message SAGetExchangeShop{ message SAGetExchangeShop{
TagCode Tag = 1; TagCode Tag = 1;
repeated ExchangeShop List = 2; repeated ExchangeShop List = 2;
repeated ShopWeight Weight = 3; //
} }
//rocket/game_srv_third/register_or_login //rocket/game_srv_third/register_or_login

2
public

@ -1 +1 @@
Subproject commit 7fba2cfaa48724a929e7b393ec9951b6bee61545 Subproject commit 6fefbb3db104ed096948a126db87d4e86d19362a

View File

@ -9,7 +9,7 @@ for /d %%s in (,*) do (
cd %%s cd %%s
for %%b in (,*.proto) do ( for %%b in (,*.proto) do (
rem echo %%b rem echo %%b
%protoc% --proto_path=%GOPATH%\src --proto_path=. --plugin=protoc-gen-go=%protoc-gen-go-plugin-path% --go_out=%GOPATH%\src %%b %protoc% --proto_path=%GOPATH%\src\mongo.games.com\game --proto_path=. --plugin=protoc-gen-go=%protoc-gen-go-plugin-path% --go_out=%GOPATH%\src %%b
) )
cd .. cd ..
) )

77
srvdata/db_skin.go Normal file
View File

@ -0,0 +1,77 @@
// Code generated by xlsx2proto.
// DO NOT EDIT!
package srvdata
import (
"google.golang.org/protobuf/proto"
"mongo.games.com/game/protocol/server"
)
var PBDB_SkinMgr = &DB_SkinMgr{
Datas: &server.DB_SkinArray{},
pool: make(map[int32]*server.DB_Skin),
}
type DB_SkinMgr struct {
Datas *server.DB_SkinArray
pool map[int32]*server.DB_Skin
}
func (this *DB_SkinMgr) unmarshal(data []byte) error {
err := proto.Unmarshal(data, this.Datas)
if err == nil {
this.arrangeData()
}
return err
}
func (this *DB_SkinMgr) reunmarshal(data []byte) error {
newDatas := &server.DB_SkinArray{}
err := proto.Unmarshal(data, newDatas)
if err == nil {
for _, item := range newDatas.Arr {
existItem := this.GetData(item.GetId())
if existItem == nil {
this.pool[item.GetId()] = item
this.Datas.Arr = append(this.Datas.Arr, item)
} else {
*existItem = *item
}
}
}
return err
}
func (this *DB_SkinMgr) arrangeData() {
if this.Datas == nil {
return
}
dataArr := this.Datas.GetArr()
if dataArr == nil {
return
}
for _, data := range dataArr {
this.pool[data.GetId()] = data
}
}
func (this *DB_SkinMgr) GetData(id int32) *server.DB_Skin {
if data, ok := this.pool[id]; ok {
return data
}
return nil
}
func init() {
DataMgr.register("DB_Skin.dat", &ProtobufDataLoader{dh: PBDB_SkinMgr})
}

77
srvdata/db_skinlevel.go Normal file
View File

@ -0,0 +1,77 @@
// Code generated by xlsx2proto.
// DO NOT EDIT!
package srvdata
import (
"google.golang.org/protobuf/proto"
"mongo.games.com/game/protocol/server"
)
var PBDB_SkinLevelMgr = &DB_SkinLevelMgr{
Datas: &server.DB_SkinLevelArray{},
pool: make(map[int32]*server.DB_SkinLevel),
}
type DB_SkinLevelMgr struct {
Datas *server.DB_SkinLevelArray
pool map[int32]*server.DB_SkinLevel
}
func (this *DB_SkinLevelMgr) unmarshal(data []byte) error {
err := proto.Unmarshal(data, this.Datas)
if err == nil {
this.arrangeData()
}
return err
}
func (this *DB_SkinLevelMgr) reunmarshal(data []byte) error {
newDatas := &server.DB_SkinLevelArray{}
err := proto.Unmarshal(data, newDatas)
if err == nil {
for _, item := range newDatas.Arr {
existItem := this.GetData(item.GetId())
if existItem == nil {
this.pool[item.GetId()] = item
this.Datas.Arr = append(this.Datas.Arr, item)
} else {
*existItem = *item
}
}
}
return err
}
func (this *DB_SkinLevelMgr) arrangeData() {
if this.Datas == nil {
return
}
dataArr := this.Datas.GetArr()
if dataArr == nil {
return
}
for _, data := range dataArr {
this.pool[data.GetId()] = data
}
}
func (this *DB_SkinLevelMgr) GetData(id int32) *server.DB_SkinLevel {
if data, ok := this.pool[id]; ok {
return data
}
return nil
}
func init() {
DataMgr.register("DB_SkinLevel.dat", &ProtobufDataLoader{dh: PBDB_SkinLevelMgr})
}

69
srvdata/gameitem.go Normal file
View File

@ -0,0 +1,69 @@
package srvdata
import (
"mongo.games.com/game/protocol/server"
"mongo.games.com/game/protocol/webapi"
)
func init() {
DataMgr.RegisterLoader("DB_GameItem.dat", GameItemMgr)
}
var GameItemMgr = &GameItem{
Data: make(map[int32]*server.DB_GameItem),
Items: make(map[string]map[int32]*server.DB_GameItem),
AllItems: make(map[string][]*server.DB_GameItem),
}
type GameItem struct {
Data map[int32]*server.DB_GameItem // 配置表
Items map[string]map[int32]*server.DB_GameItem // 后台动态配置
AllItems map[string][]*server.DB_GameItem
}
func (m *GameItem) Load(fileFullPath string) error {
m.Data = make(map[int32]*server.DB_GameItem)
m.AllItems = make(map[string][]*server.DB_GameItem)
for _, v := range PBDB_GameItemMgr.Datas.GetArr() {
m.Data[v.GetId()] = v
}
return nil
}
func (m *GameItem) Reload(fileFullPath string) error {
return m.Load(fileFullPath)
}
func (m *GameItem) SetConfig(config *webapi.ItemConfig) {
if config != nil && len(config.GetItems()) > 0 {
m.AllItems = make(map[string][]*server.DB_GameItem)
m.Items[config.GetPlatform()] = make(map[int32]*server.DB_GameItem)
for _, vv := range config.GetItems() {
m.Items[config.GetPlatform()][vv.GetId()] = vv
}
}
}
func (m *GameItem) Get(platform string, id int32) *server.DB_GameItem {
if v, ok := m.Data[id]; ok {
return v
}
if v, ok := m.Items[platform]; ok {
if v, ok := v[id]; ok {
return v
}
}
return nil
}
func (m *GameItem) GetArr(platform string) []*server.DB_GameItem {
if len(m.AllItems[platform]) == 0 {
for _, v := range m.Data {
m.AllItems[platform] = append(m.AllItems[platform], v)
}
for _, v := range m.Items[platform] {
m.AllItems[platform] = append(m.AllItems[platform], v)
}
}
return m.AllItems[platform]
}

View File

@ -8,16 +8,19 @@ import (
func init() { func init() {
DataMgr.RegisterLoader("DB_Game_Role.dat", RolePetMgrSington) DataMgr.RegisterLoader("DB_Game_Role.dat", RolePetMgrSington)
DataMgr.RegisterLoader("DB_Game_Pet.dat", RolePetMgrSington) DataMgr.RegisterLoader("DB_Game_Pet.dat", RolePetMgrSington)
DataMgr.RegisterLoader("DB_SkinLevel.dat", RolePetMgrSington)
} }
var RolePetMgrSington = &RolePetMgr{ var RolePetMgrSington = &RolePetMgr{
Roles: make(map[int32][]*server.DB_Game_Role), Roles: make(map[int32][]*server.DB_Game_Role),
Pets: make(map[int32][]*server.DB_Game_Pet), Pets: make(map[int32][]*server.DB_Game_Pet),
Skins: make(map[int32][]*server.DB_SkinLevel),
} }
type RolePetMgr struct { type RolePetMgr struct {
Roles map[int32][]*server.DB_Game_Role Roles map[int32][]*server.DB_Game_Role
Pets map[int32][]*server.DB_Game_Pet Pets map[int32][]*server.DB_Game_Pet
Skins map[int32][]*server.DB_SkinLevel
} }
func (this *RolePetMgr) Load(fileFullPath string) error { func (this *RolePetMgr) Load(fileFullPath string) error {
@ -33,11 +36,15 @@ func (this *RolePetMgr) Reload(fileFullPath string) error {
func (this *RolePetMgr) Init() { func (this *RolePetMgr) Init() {
this.Roles = make(map[int32][]*server.DB_Game_Role) this.Roles = make(map[int32][]*server.DB_Game_Role)
this.Pets = make(map[int32][]*server.DB_Game_Pet) this.Pets = make(map[int32][]*server.DB_Game_Pet)
this.Skins = make(map[int32][]*server.DB_SkinLevel)
for _, v := range PBDB_Game_RoleMgr.Datas.GetArr() { for _, v := range PBDB_Game_RoleMgr.Datas.GetArr() {
this.Roles[v.RoleId] = append(this.Roles[v.RoleId], v) this.Roles[v.GetRoleId()] = append(this.Roles[v.GetRoleId()], v)
} }
for _, v := range PBDB_Game_PetMgr.Datas.GetArr() { for _, v := range PBDB_Game_PetMgr.Datas.GetArr() {
this.Pets[v.PetId] = append(this.Pets[v.PetId], v) this.Pets[v.GetPetId()] = append(this.Pets[v.GetPetId()], v)
}
for _, v := range PBDB_SkinLevelMgr.Datas.GetArr() {
this.Skins[v.GetSkinId()] = append(this.Skins[v.GetSkinId()], v)
} }
} }
func (this *RolePetMgr) GetRoleByRoleIdAndLevel(roleId, level int32) *server.DB_Game_Role { func (this *RolePetMgr) GetRoleByRoleIdAndLevel(roleId, level int32) *server.DB_Game_Role {
@ -56,6 +63,17 @@ func (this *RolePetMgr) GetPetByPetIdAndLevel(petId, level int32) *server.DB_Gam
} }
return nil return nil
} }
func (this *RolePetMgr) GetSkinBySkinIdAndLevel(id, level int32) *server.DB_SkinLevel {
if v, ok := this.Skins[id]; ok {
if len(v) > int(level) {
return v[level]
}
}
return nil
}
func (this *RolePetMgr) GetSkinMaxLevel(id int32) int32 {
return this.Skins[id][len(this.Skins[id])-1].GetLevel()
}
// GetRoleAdd 获取角色加成 // GetRoleAdd 获取角色加成
// roleId 角色id // roleId 角色id

View File

@ -34,7 +34,7 @@ func CSBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) err
pack := &bag.SCBagInfo{RetCode: bag.OpResultCode_OPRC_Sucess, BagNumMax: BagItemMax} pack := &bag.SCBagInfo{RetCode: bag.OpResultCode_OPRC_Sucess, BagNumMax: BagItemMax}
if bagInfo != nil { if bagInfo != nil {
for _, v := range bagInfo.BagItem { for _, v := range bagInfo.BagItem {
item := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) item := srvdata.GameItemMgr.Get(p.Platform, v.ItemId)
if item != nil && v.ItemNum > 0 && (tp <= 0 || item.GetType() == tp) /*&& (nowLocation == -1 || (nowLocation < len(item.ShowLocation) && item.ShowLocation[nowLocation] == 1))*/ { if item != nil && v.ItemNum > 0 && (tp <= 0 || item.GetType() == tp) /*&& (nowLocation == -1 || (nowLocation < len(item.ShowLocation) && item.ShowLocation[nowLocation] == 1))*/ {
pack.Infos = append(pack.Infos, &bag.ItemInfo{ pack.Infos = append(pack.Infos, &bag.ItemInfo{
ItemId: v.ItemId, ItemId: v.ItemId,
@ -154,6 +154,20 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e
ObtainTime: v.ObtainTime, ObtainTime: v.ObtainTime,
}) })
} }
if gainWay == common.GainWay_Collect {
for _, v := range items {
tp1 := int32(-1)
if v.ItemId == common.ItemIDCoin {
tp1 = model.SystemFreeGive_CoinType_Coin
} else if v.ItemId == common.ItemIDDiamond {
tp1 = model.SystemFreeGive_CoinType_Diamond
}
if !p.IsRob && tp1 >= 0 {
LogChannelSingleton.WriteMQData(
model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, model.SystemFreeGive_CollectBox, tp1, v.ItemNum))
}
}
}
} }
} }
@ -286,7 +300,7 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e
} }
case ItemCanExchange: case ItemCanExchange:
logger.Logger.Trace("道具兑换", msg.ItemId) logger.Logger.Trace("道具兑换", msg.ItemId)
itemInfo := srvdata.PBDB_GameItemMgr.GetData(msg.ItemId) itemInfo := srvdata.GameItemMgr.Get(p.Platform, msg.ItemId)
if itemInfo == nil || itemInfo.Type != common.ItemTypeChange { if itemInfo == nil || itemInfo.Type != common.ItemTypeChange {
pack.RetCode = bag.OpResultCode_OPRC_NotChange pack.RetCode = bag.OpResultCode_OPRC_NotChange
send() send()
@ -385,7 +399,7 @@ func CSPropExchange(s *netlib.Session, packetid int, data interface{}, sid int64
send(bag.OpResultCode_OPRC_UseUp) send(bag.OpResultCode_OPRC_UseUp)
return nil return nil
} }
info := srvdata.PBDB_GameItemMgr.GetData(int32(k)) info := srvdata.GameItemMgr.Get(p.Platform, int32(k))
if info != nil { if info != nil {
costItems = append(costItems, &Item{ costItems = append(costItems, &Item{
ItemId: int32(k), ItemId: int32(k),
@ -395,7 +409,7 @@ func CSPropExchange(s *netlib.Session, packetid int, data interface{}, sid int64
} }
} }
for k, v := range info.GetGain() { for k, v := range info.GetGain() {
info := srvdata.PBDB_GameItemMgr.GetData(int32(k)) info := srvdata.GameItemMgr.Get(p.Platform, int32(k))
if info != nil { if info != nil {
items = append(items, &Item{ items = append(items, &Item{
ItemId: int32(k), ItemId: int32(k),
@ -415,6 +429,17 @@ func CSPropExchange(s *netlib.Session, packetid int, data interface{}, sid int64
ItemId: v.ItemId, ItemId: v.ItemId,
ItemNum: v.ItemNum, ItemNum: v.ItemNum,
}) })
tp1 := int32(-1)
if v.ItemId == common.ItemIDCoin {
tp1 = model.SystemFreeGive_CoinType_Coin
} else if v.ItemId == common.ItemIDDiamond {
tp1 = model.SystemFreeGive_CoinType_Diamond
}
if !p.IsRob && tp1 >= 0 {
LogChannelSingleton.WriteMQData(
model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, model.SystemFreeGive_CollectBoxSwap, tp1, v.ItemNum))
}
} }
send(bag.OpResultCode_OPRC_Sucess) send(bag.OpResultCode_OPRC_Sucess)

View File

@ -402,17 +402,238 @@ func (this *CSPetSkillLevelUpHandler) Process(s *netlib.Session, packetid int, d
return nil return nil
} }
func CSSkinInfo(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSSkinInfo %v", data)
_, ok := data.(*pets.CSSkinInfo)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSSkinInfo p == nil")
return nil
}
pack := &pets.SCSkinInfo{
Infos: PetMgrSington.GetSkinInfos(p),
}
p.SendToClient(int(pets.PetsPacketID_PACKET_SC_SKIN_INFO), pack)
logger.Logger.Tracef("SCSkinInfo: %v", pack)
return nil
}
func CSSkinUse(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSSkinUse %v", data)
msg, ok := data.(*pets.CSSkinUse)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSSkinUse p == nil")
return nil
}
pack := &pets.SCSkinUse{
Id: msg.GetId(),
SnId: p.SnId,
RetCode: pets.OpResultCode_OPRC_Error,
}
send := func() {
p.SendToClient(int(pets.PetsPacketID_PACKET_SC_SKIN_USE), pack)
logger.Logger.Tracef("SCSkinUse: %v", pack)
// 在游戏中广播
if pack.RetCode == pets.OpResultCode_OPRC_Sucess {
if p.scene != nil && p.scene.dbGameFree.GetGameType() == common.GameType_PVP {
p.scene.Broadcast(int(pets.PetsPacketID_PACKET_SC_SKIN_USE), pack, sid)
}
}
}
// 已解锁的
info := PetMgrSington.GetSkinInfo(p, msg.GetId())
if !info.GetIsUnlock() {
logger.Logger.Errorf("CSSkinUse unlock")
pack.RetCode = pets.OpResultCode_OPRC_Unlock
send()
return nil
}
p.Skin.ModId = msg.GetId()
pack.RetCode = pets.OpResultCode_OPRC_Sucess
send()
return nil
}
func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSSkinUpgrade %v", data)
msg, ok := data.(*pets.CSSkinUpgrade)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSSkinUpgrade p == nil")
return nil
}
pack := &pets.SCSkinUpgrade{
RetCode: pets.OpResultCode_OPRC_Error,
}
send := func() {
p.SendToClient(int(pets.PetsPacketID_PACKET_SC_SKIN_UPGRADE), pack)
logger.Logger.Tracef("SCSkinUpgrade: %v", pack)
}
// 是否已经解锁
info := PetMgrSington.GetSkinInfo(p, msg.GetId())
if !info.GetIsUnlock() {
logger.Logger.Errorf("CSSkinUpgrade not unlock")
send()
return nil
}
if info.GetLevel() >= srvdata.RolePetMgrSington.GetSkinMaxLevel(msg.GetId()) {
logger.Logger.Errorf("CSSkinUpgrade max level")
pack.RetCode = pets.OpResultCode_OPRC_MaxLevel
send()
return nil
}
var change []*Item
for _, v := range info.GetCost() {
e := BagMgrSingleton.GetItem(p.SnId, v.GetId())
if e == nil || e.ItemNum < v.GetN() {
logger.Logger.Errorf("CSSkinUpgrade not enough")
pack.RetCode = pets.OpResultCode_OPRC_NotEnough
send()
return nil
}
change = append(change, &Item{
ItemId: v.GetId(),
ItemNum: -v.GetN(),
})
}
_, _, ok = BagMgrSingleton.AddItemsV2(&ItemParam{
P: p,
Change: change,
Add: 0,
GainWay: common.GainWaySkinUpGrade,
Operator: "system",
Remark: "皮肤升级消耗",
noLog: false,
})
if !ok {
logger.Logger.Errorf("CSSkinUpgrade upgrade error")
send()
return nil
}
p.Skin.ModUnlock[msg.GetId()] = info.GetLevel() + 1
pack.RetCode = pets.OpResultCode_OPRC_Sucess
pack.Info = PetMgrSington.GetSkinInfo(p, msg.GetId())
send()
return nil
}
func SkinUnLock(p *Player, id int32) (*pets.SkinInfo, pets.OpResultCode) {
cfg := srvdata.PBDB_SkinMgr.GetData(id)
if cfg == nil {
return nil, pets.OpResultCode_OPRC_Error
}
info := PetMgrSington.GetSkinInfo(p, id)
if info.GetIsUnlock() {
return nil, pets.OpResultCode_OPRC_Error
}
var change []*Item
for _, v := range info.GetCost() {
e := BagMgrSingleton.GetItem(p.SnId, v.GetId())
if e == nil || e.ItemNum < v.GetN() {
return nil, pets.OpResultCode_OPRC_NotEnough
}
change = append(change, &Item{
ItemId: v.GetId(),
ItemNum: -v.GetN(),
})
}
_, _, ok := BagMgrSingleton.AddItemsV2(&ItemParam{
P: p,
Change: change,
Add: 0,
GainWay: common.GainWaySkinUnLock,
Operator: "system",
Remark: "皮肤解锁消耗",
noLog: false,
})
if !ok {
logger.Logger.Errorf("CSSKinUnLock Unlock error")
return nil, pets.OpResultCode_OPRC_Error
}
p.Skin.ModUnlock[id] = 1
pack := &pets.SCSkinUnLock{
Id: id,
RetCode: pets.OpResultCode_OPRC_Sucess,
Info: PetMgrSington.GetSkinInfo(p, id),
}
p.SendToClient(int(pets.PetsPacketID_PACKET_SC_SKIN_UNLOCK), pack)
logger.Logger.Tracef("SCSkinUnlock: %v", pack)
return pack.Info, pets.OpResultCode_OPRC_Sucess
}
func CSSKinUnLock(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSSKinUnLock %v", data)
msg, ok := data.(*pets.CSSKinUnLock)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Errorf("CSSKinUnLock p == nil")
return nil
}
pack := &pets.SCSkinUnLock{
Id: msg.GetId(),
RetCode: pets.OpResultCode_OPRC_Error,
}
send := func() {
p.SendToClient(int(pets.PetsPacketID_PACKET_SC_SKIN_UNLOCK), pack)
logger.Logger.Tracef("SCSkinUnlock: %v", pack)
}
pack.Info, pack.RetCode = SkinUnLock(p, msg.GetId())
if pack.GetRetCode() != pets.OpResultCode_OPRC_Sucess {
send()
}
return nil
}
func init() { func init() {
common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_ROLE_INFO), &CSRoleInfoHandler{}) common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_ROLE_INFO), &CSRoleInfoHandler{})
netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_ROLE_INFO), &CSRoleInfoPacketFactory{}) netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_ROLE_INFO), &CSRoleInfoPacketFactory{})
common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_PET_INFO), &CSPetInfoHandler{}) common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_PET_INFO), &CSPetInfoHandler{})
netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_PET_INFO), &CSPetInfoPacketFactory{}) netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_PET_INFO), &CSPetInfoPacketFactory{})
common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_PET_RISINGSTAR), &CSRisingStarHandler{}) common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_PET_RISINGSTAR), &CSRisingStarHandler{})
netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_PET_RISINGSTAR), &CSRisingStarPacketFactory{}) netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_PET_RISINGSTAR), &CSRisingStarPacketFactory{})
common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_ROLEPETUSEOP), &CSRolePetUseOpHandler{}) common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_ROLEPETUSEOP), &CSRolePetUseOpHandler{})
netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_ROLEPETUSEOP), &CSRolePetUseOpPacketFactory{}) netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_ROLEPETUSEOP), &CSRolePetUseOpPacketFactory{})
common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_ROLEPETUNLOCK), &CSRolePetUnlockHandler{}) common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_ROLEPETUNLOCK), &CSRolePetUnlockHandler{})
netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_ROLEPETUNLOCK), &CSRolePetUnlockPacketFactory{}) netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_ROLEPETUNLOCK), &CSRolePetUnlockPacketFactory{})
common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_PETSKILLLEVELUP), &CSPetSkillLevelUpHandler{}) common.RegisterHandler(int(pets.PetsPacketID_PACKET_CS_PETSKILLLEVELUP), &CSPetSkillLevelUpHandler{})
netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_PETSKILLLEVELUP), &CSPetSkillLevelUpPacketFactory{}) netlib.RegisterFactory(int(pets.PetsPacketID_PACKET_CS_PETSKILLLEVELUP), &CSPetSkillLevelUpPacketFactory{})
// 皮肤信息
common.Register(int(pets.PetsPacketID_PACKET_CS_SKIN_INFO), pets.CSSkinInfo{}, CSSkinInfo)
// 皮肤解锁
common.Register(int(pets.PetsPacketID_PACKET_CS_SKIN_UNLOCK), pets.CSSKinUnLock{}, CSSKinUnLock)
// 皮肤使用
common.Register(int(pets.PetsPacketID_PACKET_CS_SKIN_USE), pets.CSSkinUse{}, CSSkinUse)
// 皮肤升级
common.Register(int(pets.PetsPacketID_PACKET_CS_SKIN_UPGRADE), pets.CSSkinUpgrade{}, CSSkinUpgrade)
} }

View File

@ -6,6 +6,7 @@ import (
"mongo.games.com/game/common" "mongo.games.com/game/common"
"mongo.games.com/game/model" "mongo.games.com/game/model"
player_proto "mongo.games.com/game/protocol/player" player_proto "mongo.games.com/game/protocol/player"
"mongo.games.com/game/protocol/webapi"
"mongo.games.com/game/srvdata" "mongo.games.com/game/srvdata"
"mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/netlib"
@ -24,7 +25,6 @@ func (this *CSPhoneLotteryInfoPacketFactory) CreatePacket() interface{} {
// 获取抽奖信息 // 获取抽奖信息
func (this *CSPhoneLotteryInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { func (this *CSPhoneLotteryInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*player_proto.CSPhoneLotteryInfo); ok { if _, ok := data.(*player_proto.CSPhoneLotteryInfo); ok {
p := PlayerMgrSington.GetPlayer(sid) p := PlayerMgrSington.GetPlayer(sid)
logger.Logger.Trace("客户端请求抽奖信息snid = ", p.SnId) logger.Logger.Trace("客户端请求抽奖信息snid = ", p.SnId)
@ -80,7 +80,8 @@ func (this *CSPhoneLotteryHandler) Process(s *netlib.Session, packetid int, data
logger.Logger.Warn("CSPhoneLottery p == nil") logger.Logger.Warn("CSPhoneLottery p == nil")
return nil return nil
} }
if WelfareMgrSington.GetPhoneLotteryStatus(p.Platform) == model.WelfareClose { conf := PlatformMgrSingleton.GetConfig(p.Platform).ChannelSwitch[common.DiamondLottery]
if !model.GameParamData.CloseChannelSwitch && (conf == nil || !common.InSliceString(conf.OnChannelName, p.LastChannel)) {
return nil return nil
} }
countType := msg.GetLotteryType() countType := msg.GetLotteryType()
@ -91,10 +92,6 @@ func (this *CSPhoneLotteryHandler) Process(s *netlib.Session, packetid int, data
count = 10 count = 10
} }
logger.Logger.Tracef("玩家请求抽奖snid =%d,count = %d ", p.SnId, count) logger.Logger.Tracef("玩家请求抽奖snid =%d,count = %d ", p.SnId, count)
if p == nil {
logger.Logger.Warn("CSPhoneLottery p == nil")
return nil
}
if p.LotteryCount < count { if p.LotteryCount < count {
logger.Logger.Trace("剩余抽奖次数不足,无法抽奖 count = ", count) logger.Logger.Trace("剩余抽奖次数不足,无法抽奖 count = ", count)
return nil return nil
@ -193,10 +190,284 @@ func (this *CSPhoneLotteryHandler) Process(s *netlib.Session, packetid int, data
return err return err
} }
LogChannelSingleton.WriteMQData(model.GeneratePhoneLottery(p.SnId, p.Platform, string(jsonData), 1, 0, 0, 0)) LogChannelSingleton.WriteMQData(model.GeneratePhoneLottery(p.SnId, p.Platform, string(jsonData), 1, 0, 0, 0))
for _, v := range items {
tp1 := int32(-1)
if v.ItemId == common.ItemIDCoin {
tp1 = model.SystemFreeGive_CoinType_Coin
} else if v.ItemId == common.ItemIDDiamond {
tp1 = model.SystemFreeGive_CoinType_Diamond
}
if !p.IsRob && tp1 >= 0 {
LogChannelSingleton.WriteMQData(
model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, model.SystemFreeGive_PhoneLottery, tp1, v.ItemNum))
}
}
} }
return nil return nil
} }
type CSDiamondLotteryInfoPacketFactory struct {
}
type CSDiamondLotteryInfoHandler struct {
}
func (this *CSDiamondLotteryInfoPacketFactory) CreatePacket() interface{} {
pack := &player_proto.CSDiamondLotteryInfo{}
return pack
}
// 获取钻石抽奖信息
func (this *CSDiamondLotteryInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*player_proto.CSDiamondLotteryInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
logger.Logger.Trace("客户端请求钻石抽奖信息snid = ", p.SnId)
if p == nil {
logger.Logger.Warn("CSDiamondLotteryInfo p == nil")
return nil
}
// 渠道开关
conf := PlatformMgrSingleton.GetConfig(p.Platform).ChannelSwitch[common.DiamondLottery]
if !model.GameParamData.CloseChannelSwitch && (conf == nil || !common.InSliceString(conf.OnChannelName, p.LastChannel)) {
return nil
}
pack := &player_proto.SCDiamondLotteryInfo{}
pack.LuckyScore = p.DiamondLotteryScore
info := WelfareMgrSington.GetConfig(p.Platform)
if info != nil && info.DiamondLotteryConfig != nil {
for _, value := range info.DiamondLotteryConfig.LotteryData {
if value.Channel == p.Channel {
pack.MaxScore = value.MaxScore
pack.DiamondNum = value.DiamondNum
for _, lotteryInfo := range value.Info {
item := &player_proto.LotteryItem{
Id: lotteryInfo.Id,
ItemId: lotteryInfo.ItemId,
ItemNum: int64(lotteryInfo.Grade),
TypeId: lotteryInfo.Type,
}
pack.Item = append(pack.Item, item)
}
}
}
}
p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DiamondLotteryInfo), pack)
logger.Logger.Trace("返回钻石抽奖信息:", pack.String())
}
return nil
}
type CSDiamondLotteryPacketFactory struct {
}
type CSDiamondLotteryHandler struct {
}
func (this *CSDiamondLotteryPacketFactory) CreatePacket() interface{} {
pack := &player_proto.CSDiamondLottery{}
return pack
}
// 玩家钻石抽奖
func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if msg, ok := data.(*player_proto.CSDiamondLottery); ok {
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSDiamondLottery p == nil")
return nil
}
// 渠道开关
conf := PlatformMgrSingleton.GetConfig(p.Platform).ChannelSwitch[common.DiamondLottery]
if !model.GameParamData.CloseChannelSwitch && (conf == nil || !common.InSliceString(conf.OnChannelName, p.LastChannel)) {
return nil
}
countType := msg.GetLotteryType()
count := int32(0)
if countType == 1 {
count = 1
} else {
count = 10
}
logger.Logger.Tracef("玩家请求钻石抽奖snid =%d,count = %d ", p.SnId, count)
info := WelfareMgrSington.GetConfig(p.Platform)
var config *webapi.DiamondLotteryData
if info != nil && info.LotteryData != nil {
for _, value := range info.LotteryData {
if value.Channel == p.Channel {
config = value
break
}
}
if config == nil {
logger.Logger.Error("钻石抽奖未找到配置p.Channel = ", p.Channel)
return nil
}
//判断钻石数量
diamondNum := int64(config.DiamondNum * count)
if p.Diamond < diamondNum {
logger.Logger.Trace("钻石抽奖 ,钻石数量不足!")
return nil
}
p.AddDiamond(-diamondNum, 0, common.GainWayDiamondLottery, "sys", "钻石抽奖")
pack := &player_proto.SCDiamondLottery{}
weight := 0
for _, lotteryInfo := range config.Info {
if lotteryInfo.Type == 1 {
weight += int(lotteryInfo.Oddrate)
}
}
var items []*Item
for i := 1; i <= int(count); i++ {
random := rand.Intn(weight) + 1
value := 0
p.DiamondLotteryScore += 1
//判断是否白名单用户
whiteList := config.Players
status := false
var playerData *webapi.DiamondLotteryPlayers
for _, players := range whiteList {
if players.Uid == p.SnId {
playerData = players
break
}
}
if playerData != nil && p.DiamondLotteryScore%int64(playerData.Count) == 0 {
status = true
}
if status {
//白名单从列表里获取奖励
weight = 0
awardId := int32(0)
for _, awardData := range playerData.Award {
weight += int(awardData.Weight)
}
random = rand.Intn(weight) + 1
for _, awardData := range playerData.Award {
value += int(awardData.Weight)
if random <= value {
awardId = awardData.AwardId
break
}
}
for _, lotteryInfo := range config.Info {
if lotteryInfo.Id == awardId {
items = append(items, &Item{
ItemId: lotteryInfo.ItemId, // 物品id
ItemNum: int64(lotteryInfo.Grade), // 数量
})
itemData := &player_proto.LotteryItem{
Id: lotteryInfo.Id,
ItemId: lotteryInfo.ItemId,
ItemNum: int64(lotteryInfo.Grade),
}
pack.Item = append(pack.Item, itemData)
break
}
}
} else {
for _, lotteryInfo := range config.Info {
value += int(lotteryInfo.Oddrate)
if lotteryInfo.Type == 1 {
if random <= value {
items = append(items, &Item{
ItemId: lotteryInfo.ItemId, // 物品id
ItemNum: int64(lotteryInfo.Grade), // 数量
})
itemData := &player_proto.LotteryItem{
Id: lotteryInfo.Id,
ItemId: lotteryInfo.ItemId,
ItemNum: int64(lotteryInfo.Grade),
}
pack.Item = append(pack.Item, itemData)
break
}
}
}
}
}
BagMgrSingleton.AddItems(p, items, 0, common.GainWayDiamondLottery, "system", "钻石抽奖", 0, 0, false)
pack.LuckyScore = p.DiamondLotteryScore
p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DiamondLottery), pack)
logger.Logger.Trace("返回钻石抽奖信息:", pack.String())
}
}
return nil
}
// 领取保底奖励
type CSDiamondLotteryLuckyAwardPacketFactory struct {
}
type CSDiamondLotteryLuckyAwardHandler struct {
}
func (this *CSDiamondLotteryLuckyAwardPacketFactory) CreatePacket() interface{} {
pack := &player_proto.CSDiamondLotteryLuckyAward{}
return pack
}
// 玩家钻石抽奖保底奖励
func (this *CSDiamondLotteryLuckyAwardHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*player_proto.CSDiamondLotteryLuckyAward); ok {
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSDiamondLotteryLuckyAward p == nil")
return nil
}
// 渠道开关
conf := PlatformMgrSingleton.GetConfig(p.Platform).ChannelSwitch[common.DiamondLottery]
if !model.GameParamData.CloseChannelSwitch && (conf == nil || !common.InSliceString(conf.OnChannelName, p.LastChannel)) {
return nil
}
info := WelfareMgrSington.GetConfig(p.Platform)
var config *webapi.DiamondLotteryData
if info != nil && info.LotteryData != nil {
for _, value := range info.LotteryData {
if value.Channel == p.Channel {
config = value
break
}
}
if config == nil {
logger.Logger.Error("钻石抽奖未找到配置p.Channel = ", p.Channel)
return nil
}
if p.DiamondLotteryScore < int64(config.MaxScore) {
return nil
}
p.DiamondLotteryScore -= int64(config.MaxScore)
pack := &player_proto.SCDiamondLotteryLuckyAward{}
pack.LuckyScore = p.DiamondLotteryScore
//获取奖励
for _, lotteryInfo := range config.Info {
if lotteryInfo.Type == 2 {
var items []*Item
items = append(items, &Item{
ItemId: lotteryInfo.ItemId, // 物品id
ItemNum: int64(lotteryInfo.Grade), // 数量
})
itemData := &player_proto.LotteryItem{
Id: lotteryInfo.Id,
ItemId: lotteryInfo.ItemId,
ItemNum: int64(lotteryInfo.Grade),
}
BagMgrSingleton.AddItems(p, items, 0, common.GainWayDiamondLottery, "system", "钻石抽奖保底奖励", 0, 0, false)
pack.Item = append(pack.Item, itemData)
break
}
}
p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SCDiamondLotteryLuckyAward), pack)
logger.Logger.Trace("返回钻石抽奖领取保底奖励信息:", pack.String())
}
}
return nil
}
func init() { func init() {
// 抽奖信息 // 抽奖信息
common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_PhoneLotteryInfo), &CSPhoneLotteryInfoHandler{}) common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_PhoneLotteryInfo), &CSPhoneLotteryInfoHandler{})
@ -204,4 +475,13 @@ func init() {
// 抽奖 // 抽奖
common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_PhoneLottery), &CSPhoneLotteryHandler{}) common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_PhoneLottery), &CSPhoneLotteryHandler{})
netlib.RegisterFactory(int(player_proto.PlayerPacketID_PACKET_CS_PhoneLottery), &CSPhoneLotteryPacketFactory{}) netlib.RegisterFactory(int(player_proto.PlayerPacketID_PACKET_CS_PhoneLottery), &CSPhoneLotteryPacketFactory{})
//钻石抽奖信息
common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_DiamondLotteryInfo), &CSDiamondLotteryInfoHandler{})
netlib.RegisterFactory(int(player_proto.PlayerPacketID_PACKET_CS_DiamondLotteryInfo), &CSDiamondLotteryInfoPacketFactory{})
// 钻石抽奖
common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CS_DiamondLottery), &CSDiamondLotteryHandler{})
netlib.RegisterFactory(int(player_proto.PlayerPacketID_PACKET_CS_DiamondLottery), &CSDiamondLotteryPacketFactory{})
//钻石抽奖保底奖励
common.RegisterHandler(int(player_proto.PlayerPacketID_PACKET_CSDiamondLotteryLuckyAward), &CSDiamondLotteryLuckyAwardHandler{})
netlib.RegisterFactory(int(player_proto.PlayerPacketID_PACKET_CSDiamondLotteryLuckyAward), &CSDiamondLotteryLuckyAwardPacketFactory{})
} }

View File

@ -1926,7 +1926,7 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
//伪造IP地址 //伪造IP地址
p.Ip = fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)) p.Ip = fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255))
} }
//p.params = p.UpdateParams(msg.GetParams()) p.params = p.UpdateParams(msg.GetParams())
//player.DeviceInfo = deviceInfo //player.DeviceInfo = deviceInfo
p.DeviceId = msg.GetDeviceId() p.DeviceId = msg.GetDeviceId()
p.DeviceName = msg.GetDeviceName() p.DeviceName = msg.GetDeviceName()

View File

@ -166,16 +166,16 @@ func init() {
if !p.IsRob && !scene.IsTestScene() { if !p.IsRob && !scene.IsTestScene() {
// 同步背包数据 // 同步背包数据
diffItems := []*Item{} diffItems := []*Item{}
dbItemArr := srvdata.PBDB_GameItemMgr.Datas.Arr dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform)
if dbItemArr != nil { if dbItemArr != nil {
items := msg.GetItems() items := msg.GetItems()
if items != nil { if items != nil {
for _, dbItem := range dbItemArr { for _, dbItem := range dbItemArr {
if itemNum, exist := items[dbItem.Id]; exist { if itemNum, exist := items[dbItem.Id]; exist {
oldItem := BagMgrSingleton.GetItem(p.SnId, dbItem.Id) oldItem := BagMgrSingleton.GetItem(p.SnId, dbItem.Id)
diffNum := int64(itemNum) diffNum := itemNum
if oldItem != nil { if oldItem != nil {
diffNum = int64(itemNum) - oldItem.ItemNum diffNum = itemNum - oldItem.ItemNum
} }
if diffNum != 0 { if diffNum != 0 {
item := &Item{ item := &Item{

View File

@ -215,6 +215,12 @@ func (this *CSVCPayShopHandler) Process(s *netlib.Session, packetid int, data in
SendClient(shop.OpResultCode_OPRC_Error) SendClient(shop.OpResultCode_OPRC_Error)
return nil return nil
} }
case ShopConsumeDiamondScore:
item := BagMgrSingleton.GetItem(p.SnId, common.ItemDiamondScore)
if costNum > item.ItemNum {
SendClient(shop.OpResultCode_OPRC_Error)
return nil
}
default: default:
SendClient(shop.OpResultCode_OPRC_Error) SendClient(shop.OpResultCode_OPRC_Error)
return nil return nil
@ -308,7 +314,7 @@ func (this *CSShopExchangeHandler) Process(s *netlib.Session, packetid int, data
if msg.Amount <= 0 || msg.Amount > 100 { if msg.Amount <= 0 || msg.Amount > 100 {
return nil return nil
} }
ShopMgrSington.Exchange(p, msg.GoodsId, msg.UserName, msg.Mobile, msg.Comment, msg.Id, msg.Amount, msg.ExchangeType) ShopMgrSington.Exchange(p, msg.GoodsId, msg.UserName, msg.Mobile, msg.Comment, msg.Id, msg.Amount, msg.ExchangeType, msg.TelId)
return nil return nil
} }

View File

@ -52,7 +52,7 @@ func IsTaskReward(p *Player, id int32) bool {
if data := p.WelfData.Task[id]; data != nil && data.Ts > 0 { if data := p.WelfData.Task[id]; data != nil && data.Ts > 0 {
t := srvdata.PBDB_TaskMgr.GetData(id) t := srvdata.PBDB_TaskMgr.GetData(id)
switch t.ActivityType { switch t.ActivityType {
case common.TaskActivityTypeEveryDay, common.TaskActivityTypePermit: case common.TaskActivityTypeEveryDay, common.TaskActivityTypePermitEveryDay:
if common.TsInSameDay(time.Now().Unix(), data.Ts) { if common.TsInSameDay(time.Now().Unix(), data.Ts) {
return true return true
} }
@ -66,6 +66,13 @@ func IsTaskReward(p *Player, id int32) bool {
if data.Ts > 0 { if data.Ts > 0 {
return true return true
} }
case common.TaskActivityTypePermit:
startTs := PlatformMgrSingleton.GetConfig(p.Platform).PermitStartTs
endTs := PlatformMgrSingleton.GetConfig(p.Platform).PermitEndTs
if startTs > 0 {
return data.Ts >= startTs && data.Ts < endTs
}
return true
} }
} }
} }
@ -171,6 +178,8 @@ func CSTaskReward(s *netlib.Session, packetId int, data interface{}, sid int64)
return nil return nil
} }
now := time.Now()
ret := &taskproto.SCTaskReward{ ret := &taskproto.SCTaskReward{
OpCode: taskproto.OpResultCode_OPRC_Error, OpCode: taskproto.OpResultCode_OPRC_Error,
Tp: msg.GetTp(), Tp: msg.GetTp(),
@ -181,6 +190,14 @@ func CSTaskReward(s *netlib.Session, packetId int, data interface{}, sid int64)
f := func(id int32) { f := func(id int32) {
if IsTaskFinish(p, id) && !IsTaskReward(p, id) { if IsTaskFinish(p, id) && !IsTaskReward(p, id) {
p.WelfData.Task[id].Ts = time.Now().Unix() p.WelfData.Task[id].Ts = time.Now().Unix()
// 任务完成记录
taskLog := &model.BackendPermitTask{
Platform: p.Platform,
StartTs: PlatformMgrSingleton.GetConfig(p.Platform).PermitStartTs,
SnId: p.SnId,
TaskId: id,
Ts: now.Unix(),
}
data := srvdata.PBDB_TaskMgr.GetData(id) data := srvdata.PBDB_TaskMgr.GetData(id)
if data != nil { if data != nil {
SendReward(p, data.Award, msg.Tp) SendReward(p, data.Award, msg.Tp)
@ -190,7 +207,17 @@ func CSTaskReward(s *netlib.Session, packetId int, data interface{}, sid int64)
} }
ret.Reward[k] = ret.Reward[k] + vv ret.Reward[k] = ret.Reward[k] + vv
} }
for k, v := range ret.Reward {
taskLog.Gain = append(taskLog.Gain, model.AwardItem{
Id: int32(k),
Num: v,
})
}
taskLog.TaskName = data.GetDes()
taskLog.ActivityType = data.GetActivityType()
taskLog.TaskType = data.GetTaskType()
} }
LogChannelSingleton.WriteLog(taskLog)
ret.OpCode = taskproto.OpResultCode_OPRC_Success ret.OpCode = taskproto.OpResultCode_OPRC_Success
} }
} }

View File

@ -1029,13 +1029,14 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int
var items []*Item var items []*Item
var costItems []*Item var costItems []*Item
var cost, gain []model.AwardItem var cost, gain []model.AwardItem
var cost1 []*model.ItemInfo
for _, v := range exchangeConfig.GetCost() { for _, v := range exchangeConfig.GetCost() {
item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()) item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId())
if item == nil || item.ItemNum < v.GetItemNum() { if item == nil || item.ItemNum < v.GetItemNum() {
send(welfare.OpResultCode_OPRC_ErrCost) send(welfare.OpResultCode_OPRC_ErrCost)
return nil return nil
} }
info := srvdata.PBDB_GameItemMgr.GetData(v.GetItemId()) info := srvdata.GameItemMgr.Get(p.Platform, v.GetItemId())
if info != nil { if info != nil {
costItems = append(costItems, &Item{ costItems = append(costItems, &Item{
ItemId: v.GetItemId(), ItemId: v.GetItemId(),
@ -1046,10 +1047,14 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int
Id: v.GetItemId(), Id: v.GetItemId(),
Num: v.GetItemNum(), Num: v.GetItemNum(),
}) })
cost1 = append(cost1, &model.ItemInfo{
ItemId: v.GetItemId(),
ItemNum: v.GetItemNum(),
})
} }
} }
for _, v := range exchangeConfig.GetGain() { for _, v := range exchangeConfig.GetGain() {
info := srvdata.PBDB_GameItemMgr.GetData(v.GetItemId()) info := srvdata.GameItemMgr.Get(p.Platform, v.GetItemId())
if info != nil { if info != nil {
items = append(items, &Item{ items = append(items, &Item{
ItemId: v.GetItemId(), ItemId: v.GetItemId(),
@ -1064,10 +1069,22 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int
} }
// 扣除背包物品 // 扣除背包物品
for _, item := range costItems { for _, item := range costItems {
BagMgrSingleton.AddItem(p, int64(item.ItemId), -item.ItemNum, 0, common.GainWayPermitExchangeCost, "system", "赛季通行证兑换消耗", 0, 0, false) BagMgrSingleton.AddItem(p, int64(item.ItemId), -item.ItemNum, 0,
common.GainWayPermitExchangeCost, "system", "赛季通行证兑换消耗", 0, 0, false)
} }
// 增加背包物品 // 增加背包物品
BagMgrSingleton.AddItems(p, items, 0, common.GainWayPermitExchangeGain, "system", "赛季通行证兑换获得", 0, 0, false) BagMgrSingleton.AddItemsV2(&ItemParam{
P: p,
Change: items,
Cost: cost1,
Add: 0,
GainWay: common.GainWayPermitExchangeGain,
Operator: "system",
Remark: "赛季通行证兑换获得",
gameId: 0,
gameFreeId: 0,
noLog: false,
})
p.WelfData.PermitExchange[msg.GetId()] = append(p.WelfData.PermitExchange[msg.GetId()], now.Unix()) p.WelfData.PermitExchange[msg.GetId()] = append(p.WelfData.PermitExchange[msg.GetId()], now.Unix())
// 兑换记录 // 兑换记录
LogChannelSingleton.WriteLog(&model.BackendPermitExchange{ LogChannelSingleton.WriteLog(&model.BackendPermitExchange{

View File

@ -99,7 +99,7 @@ func (this *BagMgr) GetItem(snid, itemId int32) *Item {
ItemId: itemId, ItemId: itemId,
} }
f := func() { f := func() {
itemX := srvdata.PBDB_GameItemMgr.GetData(itemId) itemX := srvdata.GameItemMgr.Get(p.Platform, itemId)
if itemX != nil { if itemX != nil {
item.Name = itemX.Name item.Name = itemX.Name
//item.ShowLocation = itemX.ShowLocation //item.ShowLocation = itemX.ShowLocation
@ -139,6 +139,27 @@ func (this *BagMgr) GetItem(snid, itemId int32) *Item {
return item return item
} }
type ItemParam struct {
P *Player
Change []*Item // 道具变化数量
Cost []*model.ItemInfo // 获得道具时消耗的道具数量
Add int64 // 加成数量
GainWay int32 // 记录类型
Operator, Remark string // 操作人,备注
gameId, gameFreeId int64 // 游戏id,场次id
noLog bool // 是否不记录日志
}
type AddItemParam struct {
Cost []*model.ItemInfo // 获得道具时消耗的道具数量
}
func (this *BagMgr) AddItemsV2(args *ItemParam) (*BagInfo, bag.OpResultCode, bool) {
return this.AddItems(args.P, args.Change, args.Add, args.GainWay, args.Operator, args.Remark, args.gameId, args.gameFreeId, args.noLog, AddItemParam{
Cost: args.Cost,
})
}
// AddItems 给玩家背包添加道具 // AddItems 给玩家背包添加道具
// add 加成数量 // add 加成数量
// gainWay 记录类型 // gainWay 记录类型
@ -147,15 +168,20 @@ func (this *BagMgr) GetItem(snid, itemId int32) *Item {
// gameId 游戏id // gameId 游戏id
// gameFreeId 场次id // gameFreeId 场次id
// noLog 是否不记录日志 // noLog 是否不记录日志
// Deprecated: use [ AddItemsV2 ] instead
func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int32, operator, remark string, func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int32, operator, remark string,
gameId, gameFreeId int64, noLog bool) (*BagInfo, bag.OpResultCode, bool) { gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) {
longItem := this.GetItem(p.SnId, common.ItemIDPermit) var cost []*model.ItemInfo
if len(params) > 0 {
cost = params[0].Cost
}
var items []*Item var items []*Item
for _, v := range addItems { for _, v := range addItems {
if v == nil || v.ItemNum == 0 { if v == nil || v.ItemNum == 0 {
continue continue
} }
item := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) item := srvdata.GameItemMgr.Get(p.Platform, v.ItemId)
switch item.Type { switch item.Type {
case common.ItemTypeCoin: case common.ItemTypeCoin:
//增加金币 //增加金币
@ -193,7 +219,8 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
} }
// 添加道具到背包 // 添加道具到背包
var isSkin bool
var permitScore, long int64
var changeItems []int32 var changeItems []int32
var newBagInfo *BagInfo var newBagInfo *BagInfo
if _, exist := this.PlayerBag[p.SnId]; !exist { if _, exist := this.PlayerBag[p.SnId]; !exist {
@ -216,7 +243,7 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
continue continue
} }
item := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) item := srvdata.GameItemMgr.Get(p.Platform, v.ItemId)
if item == nil { if item == nil {
code = bag.OpResultCode_OPRC_IdErr code = bag.OpResultCode_OPRC_IdErr
return newBagInfo, code, false return newBagInfo, code, false
@ -234,11 +261,14 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
continue continue
} }
item := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) item := srvdata.GameItemMgr.Get(p.Platform, v.ItemId)
if item == nil { if item == nil {
code = bag.OpResultCode_OPRC_IdErr code = bag.OpResultCode_OPRC_IdErr
continue continue
} }
if !isSkin {
isSkin = item.GetType() == 21 && v.ItemNum > 0
}
if itm, exist := newBagInfo.BagItem[v.ItemId]; exist { if itm, exist := newBagInfo.BagItem[v.ItemId]; exist {
if itm.ItemNum+v.ItemNum < 0 { if itm.ItemNum+v.ItemNum < 0 {
code = bag.OpResultCode_OPRC_IdErr code = bag.OpResultCode_OPRC_IdErr
@ -278,6 +308,7 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
TypeId: gainWay, TypeId: gainWay,
GameId: gameId, GameId: gameId,
GameFreeId: gameFreeId, GameFreeId: gameFreeId,
Cost: cost,
}) })
if log != nil { if log != nil {
LogChannelSingleton.WriteLog(log) LogChannelSingleton.WriteLog(log)
@ -294,6 +325,19 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
if v.ItemId == common.ItemIDPetSkill && v.ItemNum > 0 { if v.ItemId == common.ItemIDPetSkill && v.ItemNum > 0 {
PetMgrSington.CheckShowRed(p) PetMgrSington.CheckShowRed(p)
} }
// 统计 v卡兑换消耗数量
if v.ItemId == common.ItemIDVCard && gainWay == common.GainWay_Exchange {
p.VCardCost += -v.ItemNum
if p.VCardCost < 0 {
p.VCardCost = 0
}
}
if v.ItemId == common.ItemIDPermit && v.ItemNum > 0 {
permitScore += v.ItemNum
}
if v.ItemId == common.ItemIDLong && v.ItemNum > 0 {
long += v.ItemNum
}
} }
if len(changeItems) > 0 { if len(changeItems) > 0 {
@ -318,14 +362,6 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
StartTs: startTs, StartTs: startTs,
Ts: time.Now().Unix(), Ts: time.Now().Unix(),
}) })
// 参与赛季通行证活动
if longItem == nil || longItem.ItemNum == 0 {
LogChannelSingleton.WriteLog(&model.BackendPermitJoin{
Platform: p.Platform,
StartTs: PlatformMgrSingleton.GetConfig(p.Platform).PermitStartTs,
SnId: p.SnId,
})
}
} }
} }
if v == common.ItemIDLong { if v == common.ItemIDLong {
@ -333,6 +369,22 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
} }
} }
if permitScore > 0 || long > 0 {
LogChannelSingleton.WriteLog(&model.BackendPermitJoin{
Platform: p.Platform,
StartTs: PlatformMgrSingleton.GetConfig(p.Platform).PermitStartTs,
SnId: p.SnId,
Score: permitScore,
Long: long,
Ts: time.Now().Unix(),
})
}
// 自动解锁皮肤
if isSkin {
p.AutoSkinUnlock()
}
if code != bag.OpResultCode_OPRC_Sucess { if code != bag.OpResultCode_OPRC_Sucess {
return newBagInfo, code, false return newBagInfo, code, false
} }
@ -340,9 +392,10 @@ func (this *BagMgr) AddItems(p *Player, addItems []*Item, add int64, gainWay int
} }
// Deprecated: use [ AddItemsV2 ] instead
func (this *BagMgr) AddItem(p *Player, itemId, itemNum int64, add int64, gainWay int32, operator, remark string, func (this *BagMgr) AddItem(p *Player, itemId, itemNum int64, add int64, gainWay int32, operator, remark string,
gameId, gameFreeId int64, noLog bool) (*BagInfo, bag.OpResultCode, bool) { gameId, gameFreeId int64, noLog bool, params ...AddItemParam) (*BagInfo, bag.OpResultCode, bool) {
return this.AddItems(p, []*Item{{ItemId: int32(itemId), ItemNum: itemNum}}, add, gainWay, operator, remark, gameId, gameFreeId, noLog) return this.AddItems(p, []*Item{{ItemId: int32(itemId), ItemNum: itemNum}}, add, gainWay, operator, remark, gameId, gameFreeId, noLog, params...)
} }
func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*Item, gainWay int32, operator, remark string, func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*Item, gainWay int32, operator, remark string,
@ -357,6 +410,7 @@ func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*Ite
SnId: findPlayer.SnId, SnId: findPlayer.SnId,
Platform: findPlayer.Platform, Platform: findPlayer.Platform,
BagItem: make(map[int32]*model.Item), BagItem: make(map[int32]*model.Item),
GainWay: gainWay,
} }
for _, v := range addItems { for _, v := range addItems {
if v == nil || v.ItemNum == 0 { if v == nil || v.ItemNum == 0 {
@ -374,7 +428,7 @@ func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*Ite
return return
} }
for _, v := range addItems { for _, v := range addItems {
itemData := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) itemData := srvdata.GameItemMgr.Get(platform, v.ItemId)
if itemData == nil { if itemData == nil {
continue continue
} }
@ -543,7 +597,7 @@ func (this *BagMgr) SyncBagData(snid int32, changeItemIds ...int32) {
//Describe: itemInfo.Describe, //Describe: itemInfo.Describe,
ObtainTime: itemInfo.ObtainTime, ObtainTime: itemInfo.ObtainTime,
}) })
if itemInfo.ItemId == VCard { if itemInfo.ItemId == common.ItemIDVCard {
FriendMgrSington.UpdateInfo(p.Platform, p.SnId) FriendMgrSington.UpdateInfo(p.Platform, p.SnId)
} }
} }
@ -658,7 +712,7 @@ func (this *BagMgr) Callback(player any, ret *internal.PlayerLoadReplay) {
BagItem: make(map[int32]*Item), BagItem: make(map[int32]*Item),
} }
for k, bi := range bagInfo.BagItem { for k, bi := range bagInfo.BagItem {
item := srvdata.PBDB_GameItemMgr.GetData(bi.ItemId) item := srvdata.GameItemMgr.Get(ret.Platform, bi.ItemId)
if item != nil { if item != nil {
if bi.ItemNum > 0 { if bi.ItemNum > 0 {
newBagInfo.BagItem[k] = &Item{ newBagInfo.BagItem[k] = &Item{
@ -696,6 +750,7 @@ func (this *BagMgr) CallbackAfter(ret *internal.PlayerLoadReplay) {
p := PlayerMgrSington.GetPlayerBySnId(ret.Snid) p := PlayerMgrSington.GetPlayerBySnId(ret.Snid)
if p != nil { if p != nil {
p.GameID = ret.Data.([]int32) p.GameID = ret.Data.([]int32)
p.AutoSkinUnlock()
} }
} }

View File

@ -18,7 +18,9 @@ import (
hallproto "mongo.games.com/game/protocol/gamehall" hallproto "mongo.games.com/game/protocol/gamehall"
loginproto "mongo.games.com/game/protocol/login" loginproto "mongo.games.com/game/protocol/login"
playerproto "mongo.games.com/game/protocol/player" playerproto "mongo.games.com/game/protocol/player"
serverproto "mongo.games.com/game/protocol/server"
"mongo.games.com/game/protocol/webapi" "mongo.games.com/game/protocol/webapi"
"mongo.games.com/game/srvdata"
) )
func init() { func init() {
@ -76,6 +78,10 @@ func init() {
etcd.Register(etcd.ETCDKEY_ACT_Invite, webapi.ActInviteConfig{}, platformConfigEvent) etcd.Register(etcd.ETCDKEY_ACT_Invite, webapi.ActInviteConfig{}, platformConfigEvent)
// 赛季通行证 // 赛季通行证
etcd.Register(etcd.ETCDKEY_ACT_Permit, webapi.ActPermitConfig{}, platformConfigEvent) etcd.Register(etcd.ETCDKEY_ACT_Permit, webapi.ActPermitConfig{}, platformConfigEvent)
// 钻石抽奖
etcd.Register(etcd.ETCDKEY_DIAMOND_LOTTERY, webapi.DiamondLotteryConfig{}, platformConfigEvent)
// 道具列表
etcd.Register(etcd.ETCDKEY_Item, webapi.ItemConfig{}, 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{}) {
@ -205,6 +211,8 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e
ChessRankMgrSington.UpdateChessRankConfig(config) ChessRankMgrSington.UpdateChessRankConfig(config)
case *webapi.WelfarePhoneLotteryStatus: case *webapi.WelfarePhoneLotteryStatus:
WelfareMgrSington.UpdatePhoneLotteryStatus(config) WelfareMgrSington.UpdatePhoneLotteryStatus(config)
case *webapi.DiamondLotteryConfig:
WelfareMgrSington.UpdateDiamondLotteryConfig(config)
case *webapi.ActInviteConfig: case *webapi.ActInviteConfig:
PlatformMgrSingleton.GetConfig(config.Platform).ActInviteConfig = config PlatformMgrSingleton.GetConfig(config.Platform).ActInviteConfig = config
case *webapi.ActPermitConfig: case *webapi.ActPermitConfig:
@ -263,6 +271,44 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e
f() f()
} }
case *webapi.ItemConfig:
PlatformMgrSingleton.GetConfig(config.Platform).ItemConfig = config
srvdata.GameItemMgr.SetConfig(config)
if !isInit {
var items []*serverproto.DB_GameItem
for _, v := range config.GetItems() {
items = append(items, &serverproto.DB_GameItem{
Id: v.GetId(),
Name: v.GetName(),
ShowLocation: v.GetShowLocation(),
Classify: v.GetClassify(),
Type: v.GetType(),
Effect0: v.GetEffect0(),
Effect: v.GetEffect(),
SaleType: v.GetSaleType(),
SaleGold: v.GetSaleGold(),
Composition: v.GetComposition(),
CompositionMax: v.GetCompositionMax(),
Time: v.GetTime(),
Location: v.GetLocation(),
Describe: v.GetDescribe(),
Num: v.GetNum(),
Value: v.GetValue(),
Entity: v.GetEntity(),
Icon: v.GetIcon(),
})
}
if len(items) > 0 {
for _, v := range PlayerMgrSington.playerOfPlatform[config.Platform] {
if v != nil && v.IsOnLine() {
v.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCItem), &playerproto.SCItem{
Items: items,
})
}
}
}
}
default: default:
logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey)
} }

View File

@ -179,7 +179,7 @@ func (this *FriendMgr) UpdateInfo(platform string, snid int32) {
info.Sex = p.Sex info.Sex = p.Sex
info.Coin = p.Coin info.Coin = p.Coin
info.Diamond = p.Diamond info.Diamond = p.Diamond
item := BagMgrSingleton.GetItem(p.SnId, VCard) item := BagMgrSingleton.GetItem(p.SnId, common.ItemIDVCard)
if item != nil { if item != nil {
info.VCard = item.ItemNum info.VCard = item.ItemNum
} }

View File

@ -68,4 +68,5 @@ func init() {
LogChannelSingleton.RegisterLogCName(mq.BackSystemPermitRank, &model.BackendPermitRank{}) LogChannelSingleton.RegisterLogCName(mq.BackSystemPermitRank, &model.BackendPermitRank{})
LogChannelSingleton.RegisterLogCName(mq.BackSystemPermitExchange, &model.BackendPermitExchange{}) LogChannelSingleton.RegisterLogCName(mq.BackSystemPermitExchange, &model.BackendPermitExchange{})
LogChannelSingleton.RegisterLogCName(mq.BackSystemPermitJoin, &model.BackendPermitJoin{}) LogChannelSingleton.RegisterLogCName(mq.BackSystemPermitJoin, &model.BackendPermitJoin{})
LogChannelSingleton.RegisterLogCName(mq.BackSystemPermitTask, &model.BackendPermitTask{})
} }

View File

@ -38,8 +38,6 @@ func (this *PetMgr) ModuleName() string {
// 人物 // 人物
func (this *PetMgr) GetRoleInfos(p *Player) []*pets.RoleInfo { func (this *PetMgr) GetRoleInfos(p *Player) []*pets.RoleInfo {
p.InitRolesAndPets()
rolesInfo := srvdata.RolePetMgrSington.Roles rolesInfo := srvdata.RolePetMgrSington.Roles
if rolesInfo != nil { if rolesInfo != nil {
var newRoles = make([]*pets.RoleInfo, 0) var newRoles = make([]*pets.RoleInfo, 0)
@ -92,8 +90,6 @@ func (this *PetMgr) GetRoleInfos(p *Player) []*pets.RoleInfo {
return nil return nil
} }
func (this *PetMgr) GetRoleInfo(p *Player, modId int32) *pets.RoleInfo { func (this *PetMgr) GetRoleInfo(p *Player, modId int32) *pets.RoleInfo {
p.InitRolesAndPets()
level := p.Roles.ModUnlock[modId] level := p.Roles.ModUnlock[modId]
roleInfo := srvdata.RolePetMgrSington.GetRoleByRoleIdAndLevel(modId, level) roleInfo := srvdata.RolePetMgrSington.GetRoleByRoleIdAndLevel(modId, level)
if roleInfo != nil { if roleInfo != nil {
@ -137,8 +133,6 @@ func (this *PetMgr) GetRoleInfo(p *Player, modId int32) *pets.RoleInfo {
// //////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////
// 宠物 // 宠物
func (this *PetMgr) GetPetInfos(p *Player) []*pets.PetInfo { func (this *PetMgr) GetPetInfos(p *Player) []*pets.PetInfo {
p.InitRolesAndPets()
petsInfo := srvdata.RolePetMgrSington.Pets petsInfo := srvdata.RolePetMgrSington.Pets
if petsInfo != nil { if petsInfo != nil {
var newPets = make([]*pets.PetInfo, 0) var newPets = make([]*pets.PetInfo, 0)
@ -202,8 +196,6 @@ func (this *PetMgr) GetPetInfos(p *Player) []*pets.PetInfo {
return nil return nil
} }
func (this *PetMgr) GetPetInfo(p *Player, modId int32) *pets.PetInfo { func (this *PetMgr) GetPetInfo(p *Player, modId int32) *pets.PetInfo {
p.InitRolesAndPets()
level := p.Pets.ModUnlock[modId] level := p.Pets.ModUnlock[modId]
petInfo := srvdata.RolePetMgrSington.GetPetByPetIdAndLevel(modId, level) petInfo := srvdata.RolePetMgrSington.GetPetByPetIdAndLevel(modId, level)
if petInfo != nil { if petInfo != nil {
@ -254,6 +246,68 @@ func (this *PetMgr) GetPetInfo(p *Player, modId int32) *pets.PetInfo {
return nil return nil
} }
// 皮肤
func (this *PetMgr) GetSkinInfos(p *Player) []*pets.SkinInfo {
var ret []*pets.SkinInfo
for _, v := range srvdata.PBDB_SkinMgr.Datas.GetArr() {
ret = append(ret, this.GetSkinInfo(p, v.GetId()))
}
return ret
}
func (this *PetMgr) GetSkinInfo(p *Player, id int32) *pets.SkinInfo {
cfg := srvdata.PBDB_SkinMgr.GetData(id)
if cfg == nil {
return nil
}
bag := BagMgrSingleton.GetBagInfo(p.SnId)
level := p.Skin.ModUnlock[id]
var unLockCost, cost, have []*pets.Item
for k, v := range cfg.GetUnlockItem() {
unLockCost = append(unLockCost, &pets.Item{
Id: int32(k),
N: v,
})
}
if level == 0 {
cost = unLockCost
} else {
for k, v := range srvdata.RolePetMgrSington.GetSkinBySkinIdAndLevel(id, level).GetUpItem() {
cost = append(cost, &pets.Item{
Id: int32(k),
N: v,
})
}
}
for _, v := range cost {
if bag != nil {
info := bag.BagItem[v.GetId()]
if info != nil {
have = append(have, &pets.Item{
Id: v.GetId(),
N: info.ItemNum,
})
}
}
}
unLock := level > 0
use := unLock && p.Skin.ModId == id
ret := &pets.SkinInfo{
Id: id,
Level: level,
MaxLevel: srvdata.RolePetMgrSington.GetSkinMaxLevel(cfg.GetId()),
Cost: cost,
Have: have,
IsUsing: use,
IsUnlock: unLock,
}
return ret
}
// 商品人物总加成 人物功能变动需要修改 // 商品人物总加成 人物功能变动需要修改
func (this *PetMgr) GetShopAward(shopInfo *model.ShopInfo, p *Player) (award, roleId int32) { func (this *PetMgr) GetShopAward(shopInfo *model.ShopInfo, p *Player) (award, roleId int32) {
if shopInfo.Ad > 0 && shopInfo.Type == ShopTypeCoin { if shopInfo.Ad > 0 && shopInfo.Type == ShopTypeCoin {

View File

@ -27,14 +27,14 @@ import (
"mongo.games.com/game/model" "mongo.games.com/game/model"
"mongo.games.com/game/proto" "mongo.games.com/game/proto"
"mongo.games.com/game/protocol/bag" "mongo.games.com/game/protocol/bag"
hall_proto "mongo.games.com/game/protocol/gamehall" hallproto "mongo.games.com/game/protocol/gamehall"
login_proto "mongo.games.com/game/protocol/login" loginproto "mongo.games.com/game/protocol/login"
msg_proto "mongo.games.com/game/protocol/message" msgproto "mongo.games.com/game/protocol/message"
player_proto "mongo.games.com/game/protocol/player" playerproto "mongo.games.com/game/protocol/player"
"mongo.games.com/game/protocol/rankmatch" "mongo.games.com/game/protocol/rankmatch"
server_proto "mongo.games.com/game/protocol/server" serverproto "mongo.games.com/game/protocol/server"
shop_proto "mongo.games.com/game/protocol/shop" shopproto "mongo.games.com/game/protocol/shop"
webapi_proto "mongo.games.com/game/protocol/webapi" webapiproto "mongo.games.com/game/protocol/webapi"
"mongo.games.com/game/srvdata" "mongo.games.com/game/srvdata"
"mongo.games.com/game/worldsrv/internal" "mongo.games.com/game/worldsrv/internal"
) )
@ -183,6 +183,10 @@ func (this *Player) init() bool {
if this.WelfData == nil { if this.WelfData == nil {
this.WelfData = model.NewWelfareData() this.WelfData = model.NewWelfareData()
} }
if this.VCardCost < 0 {
this.VCardCost = 0
}
this.InitRolesAndPets()
return true return true
} }
@ -399,14 +403,14 @@ func (this *Player) OnRehold() {
gateSid = sessionId.Get() gateSid = sessionId.Get()
} }
} }
pack := &server_proto.WGPlayerRehold{ pack := &serverproto.WGPlayerRehold{
Id: proto.Int32(this.SnId), Id: proto.Int32(this.SnId),
Sid: proto.Int64(this.sid), Sid: proto.Int64(this.sid),
SceneId: proto.Int(this.scene.sceneId), SceneId: proto.Int(this.scene.sceneId),
GateSid: proto.Int64(gateSid), GateSid: proto.Int64(gateSid),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToGame(int(server_proto.SSPacketID_PACKET_WG_PLAYERREHOLD), pack) this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERREHOLD), pack)
logger.Logger.Tracef("WG PlayerRehold: %v", pack) logger.Logger.Tracef("WG PlayerRehold: %v", pack)
//} //}
gameid = this.scene.gameId gameid = this.scene.gameId
@ -480,7 +484,7 @@ func (this *Player) RandRobotExData() {
//} //}
//if roles != nil && len(roles) > 0 { //if roles != nil && len(roles) > 0 {
// randId := common.RandInt32Slice(roles) // randId := common.RandInt32Slice(roles)
// this.Roles = new(model.RolePetInfo) // this.Roles = new(model.ModInfo)
// this.Roles.ModUnlock = make(map[int32]int32) // this.Roles.ModUnlock = make(map[int32]int32)
// this.Roles.ModUnlock[randId] = 1 // this.Roles.ModUnlock[randId] = 1
// this.Roles.ModId = randId // this.Roles.ModId = randId
@ -491,7 +495,7 @@ func (this *Player) RandRobotExData() {
if rand < 20 { if rand < 20 {
randId = 2000002 randId = 2000002
} }
this.Roles = new(model.RolePetInfo) this.Roles = new(model.ModInfo)
this.Roles.ModUnlock = make(map[int32]int32) this.Roles.ModUnlock = make(map[int32]int32)
this.Roles.ModUnlock[randId] = 1 this.Roles.ModUnlock[randId] = 1
this.Roles.ModId = randId this.Roles.ModId = randId
@ -507,7 +511,7 @@ func (this *Player) RandRobotExData() {
// } // }
// if pets != nil && len(pets) > 0 { // if pets != nil && len(pets) > 0 {
// randId := common.RandInt32Slice(pets) // randId := common.RandInt32Slice(pets)
// this.Pets = new(model.RolePetInfo) // this.Pets = new(model.ModInfo)
// this.Pets.ModUnlock = make(map[int32]int32) // this.Pets.ModUnlock = make(map[int32]int32)
// this.Pets.ModUnlock[randId] = 1 // this.Pets.ModUnlock[randId] = 1
// this.Pets.ModId = randId // this.Pets.ModId = randId
@ -517,7 +521,7 @@ func (this *Player) RandRobotExData() {
// SendGameConfig 玩家断线重连时,获取玩家所有游戏的配置信息 // SendGameConfig 玩家断线重连时,获取玩家所有游戏的配置信息
func (this *Player) SendGameConfig(gameId int32, plf, chl string) { func (this *Player) SendGameConfig(gameId int32, plf, chl string) {
pack := &hall_proto.SCGetGameConfig{ pack := &hallproto.SCGetGameConfig{
GameId: gameId, GameId: gameId,
} }
@ -526,7 +530,7 @@ func (this *Player) SendGameConfig(gameId int32, plf, chl string) {
if v.Status && PlatformMgrSingleton.GetGlobalConfig().GameStatus[v.DbGameFree.Id] { if v.Status && PlatformMgrSingleton.GetGlobalConfig().GameStatus[v.DbGameFree.Id] {
if v.DbGameFree.GetGameRule() != 0 && v.DbGameFree.GetGameId() == gameId { if v.DbGameFree.GetGameRule() != 0 && v.DbGameFree.GetGameId() == gameId {
// 场次配置 // 场次配置
lgc := &hall_proto.GameConfig1{ lgc := &hallproto.GameConfig1{
LogicId: proto.Int32(v.DbGameFree.Id), LogicId: proto.Int32(v.DbGameFree.Id),
LimitCoin: proto.Int64(v.DbGameFree.GetLimitCoin()), LimitCoin: proto.Int64(v.DbGameFree.GetLimitCoin()),
MaxCoinLimit: proto.Int64(v.DbGameFree.GetMaxCoinLimit()), MaxCoinLimit: proto.Int64(v.DbGameFree.GetMaxCoinLimit()),
@ -556,14 +560,14 @@ func (this *Player) SendGameConfig(gameId int32, plf, chl string) {
if srvdata.GameFreeMgr.IsGameDif(gameId, common.GameDifChess) { if srvdata.GameFreeMgr.IsGameDif(gameId, common.GameDifChess) {
cfg := ChessRankMgrSington.GetChessRankConfig(this.GetPlatform().Name, gameId) cfg := ChessRankMgrSington.GetChessRankConfig(this.GetPlatform().Name, gameId)
for _, v := range cfg.GetDatas() { for _, v := range cfg.GetDatas() {
pack.ChessRanks = append(pack.ChessRanks, &hall_proto.ChessRankInfo{ pack.ChessRanks = append(pack.ChessRanks, &hallproto.ChessRankInfo{
Score: v.Score, Score: v.Score,
Name: v.Name, Name: v.Name,
}) })
} }
} }
this.SendToClient(int(hall_proto.GameHallPacketID_PACKET_SC_GETGAMECONFIG), pack) this.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_GETGAMECONFIG), pack)
logger.Logger.Tracef("SendGameConfig:%v", pack) logger.Logger.Tracef("SendGameConfig:%v", pack)
} }
@ -663,7 +667,7 @@ func (this *Player) LoadMessage(lastLogoutTime int64, isFirstLogin, isSkipWeek b
} }
func (this *Player) SendMessage(showId int64) { func (this *Player) SendMessage(showId int64) {
pack := &msg_proto.SCMessageList{} pack := &msgproto.SCMessageList{}
if len(this.msgs) != 0 { if len(this.msgs) != 0 {
for _, msg := range this.msgs { for _, msg := range this.msgs {
@ -681,7 +685,7 @@ func (this *Player) SendMessage(showId int64) {
// logger.Logger.Error("player: ", this.SnId, " not find gift : ", msg.GiftId) // logger.Logger.Error("player: ", this.SnId, " not find gift : ", msg.GiftId)
// } // }
//} //}
pack.Msgs = append(pack.Msgs, &msg_proto.MessageData{ pack.Msgs = append(pack.Msgs, &msgproto.MessageData{
Id: proto.String(msg.Id.Hex()), Id: proto.String(msg.Id.Hex()),
Title: proto.String(msg.Title), Title: proto.String(msg.Title),
Content: proto.String(msg.Content), Content: proto.String(msg.Content),
@ -704,7 +708,7 @@ func (this *Player) SendMessage(showId int64) {
proto.SetDefaults(pack) proto.SetDefaults(pack)
} }
//nil的msg需要发给前端便于覆盖前一个玩家的信息 //nil的msg需要发给前端便于覆盖前一个玩家的信息
this.SendToClient(int(msg_proto.MSGPacketID_PACKET_SC_MESSAGELIST), pack) this.SendToClient(int(msgproto.MSGPacketID_PACKET_SC_MESSAGELIST), pack)
} }
func (this *Player) ReadMessage(id string) { func (this *Player) ReadMessage(id string) {
@ -718,11 +722,11 @@ func (this *Player) ReadMessage(id string) {
}), }),
task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
if data == nil { if data == nil {
pack := &msg_proto.SCMessageRead{ pack := &msgproto.SCMessageRead{
Id: proto.String(id), Id: proto.String(id),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(msg_proto.MSGPacketID_PACKET_SC_MESSAGEREAD), pack) this.SendToClient(int(msgproto.MSGPacketID_PACKET_SC_MESSAGEREAD), pack)
} }
}), "ReadMessage").StartByFixExecutor("logic_message") }), "ReadMessage").StartByFixExecutor("logic_message")
} }
@ -732,12 +736,12 @@ func (this *Player) ReadMessage(id string) {
func (this *Player) WebDelMessage(id string) { func (this *Player) WebDelMessage(id string) {
if msg, exist := this.msgs[id]; exist { if msg, exist := this.msgs[id]; exist {
if msg.State != model.MSGSTATE_REMOVEED { // 未删除状态通知客户端 if msg.State != model.MSGSTATE_REMOVEED { // 未删除状态通知客户端
pack := &msg_proto.SCMessageDel{ pack := &msgproto.SCMessageDel{
Id: id, Id: id,
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(msg_proto.MSGPacketID_PACKET_SC_MESSAGEDEL), pack) this.SendToClient(int(msgproto.MSGPacketID_PACKET_SC_MESSAGEDEL), pack)
} }
//删除此邮件 //删除此邮件
delete(this.msgs, id) delete(this.msgs, id)
@ -759,12 +763,12 @@ func (this *Player) DelMessage(id string, del int32) bool {
}), }),
task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) { task.CompleteNotifyWrapper(func(data interface{}, tt task.Task) {
if data == nil { if data == nil {
pack := &msg_proto.SCMessageDel{ pack := &msgproto.SCMessageDel{
Id: id, Id: id,
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(msg_proto.MSGPacketID_PACKET_SC_MESSAGEDEL), pack) this.SendToClient(int(msgproto.MSGPacketID_PACKET_SC_MESSAGEDEL), pack)
msg.State = model.MSGSTATE_REMOVEED msg.State = model.MSGSTATE_REMOVEED
//删除此邮件 //删除此邮件
@ -793,7 +797,7 @@ func (this *Player) MessageShowRed() {
} }
} }
for showId := range msgMap { for showId := range msgMap {
this.SendShowRed(hall_proto.ShowRedCode_Mail, int32(showId), 1) this.SendShowRed(hallproto.ShowRedCode_Mail, int32(showId), 1)
} }
} }
@ -911,7 +915,7 @@ func (this *Player) AddMessage(msg *model.Message) {
msgMap[msg.ShowId] = 1 msgMap[msg.ShowId] = 1
} }
for showId := range msgMap { for showId := range msgMap {
this.SendShowRed(hall_proto.ShowRedCode_Mail, int32(showId), 1) this.SendShowRed(hallproto.ShowRedCode_Mail, int32(showId), 1)
} }
} }
} }
@ -1153,11 +1157,11 @@ func (this *Player) GetMessageAttach(id string) {
} }
if _, code, _ := BagMgrSingleton.AddItems(this, items, 0, gainWay, "mail", remark, 0, 0, false); code != bag.OpResultCode_OPRC_Sucess { // 领取失败 if _, code, _ := BagMgrSingleton.AddItems(this, items, 0, gainWay, "mail", remark, 0, 0, false); code != bag.OpResultCode_OPRC_Sucess { // 领取失败
logger.Logger.Errorf("CSPlayerSettingHandler AddItems err", code) logger.Logger.Errorf("CSPlayerSettingHandler AddItems err", code)
pack := &msg_proto.SCGetMessageAttach{ pack := &msgproto.SCGetMessageAttach{
Id: proto.String(""), Id: proto.String(""),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(msg_proto.MSGPacketID_PACKET_SC_GETMESSAGEATTACH), pack) this.SendToClient(int(msgproto.MSGPacketID_PACKET_SC_GETMESSAGEATTACH), pack)
} }
this.dirty = true this.dirty = true
} }
@ -1270,11 +1274,11 @@ func (this *Player) GetMessageAttach(id string) {
} }
} }
} }
pack := &msg_proto.SCGetMessageAttach{ pack := &msgproto.SCGetMessageAttach{
Id: proto.String(id), Id: proto.String(id),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(msg_proto.MSGPacketID_PACKET_SC_GETMESSAGEATTACH), pack) this.SendToClient(int(msgproto.MSGPacketID_PACKET_SC_GETMESSAGEATTACH), pack)
} }
}), "GetMessageAttach").StartByFixExecutor("logic_message") }), "GetMessageAttach").StartByFixExecutor("logic_message")
} }
@ -1317,7 +1321,7 @@ func (this *Player) GetMessageAttachs(ids []string) {
} }
} }
pack := &msg_proto.SCGetMessageAttach{ pack := &msgproto.SCGetMessageAttach{
// Id: proto.String(id), // Id: proto.String(id),
} }
@ -1451,7 +1455,7 @@ func (this *Player) GetMessageAttachs(ids []string) {
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(msg_proto.MSGPacketID_PACKET_SC_GETMESSAGEATTACH), pack) this.SendToClient(int(msgproto.MSGPacketID_PACKET_SC_GETMESSAGEATTACH), pack)
} }
}), "GetMessageAttach").StartByFixExecutor("logic_message") }), "GetMessageAttach").StartByFixExecutor("logic_message")
@ -1470,12 +1474,12 @@ func (this *Player) GetMessageByGiftId(id string) *model.Message {
func (this *Player) Kickout(reason int32) { func (this *Player) Kickout(reason int32) {
if this.IsOnLine() { if this.IsOnLine() {
logger.Logger.Trace("(this *Player) Kickout()", this.SnId) logger.Logger.Trace("(this *Player) Kickout()", this.SnId)
scDisconnect := &login_proto.SSDisconnect{ scDisconnect := &loginproto.SSDisconnect{
SessionId: proto.Int64(this.sid), SessionId: proto.Int64(this.sid),
Type: proto.Int32(reason), Type: proto.Int32(reason),
} }
proto.SetDefaults(scDisconnect) proto.SetDefaults(scDisconnect)
this.SendToClient(int(login_proto.GatePacketID_PACKET_SS_DICONNECT), scDisconnect) this.SendToClient(int(loginproto.GatePacketID_PACKET_SS_DICONNECT), scDisconnect)
LoginStateMgrSington.LogoutBySid(this.sid) LoginStateMgrSington.LogoutBySid(this.sid)
this.DropLine() this.DropLine()
@ -1517,12 +1521,12 @@ func (this *Player) DropLine() {
this.PlayerData.LastLogoutTime = time.Now().Local() this.PlayerData.LastLogoutTime = time.Now().Local()
FriendMgrSington.UpdateLogoutTime(this.Platform, this.SnId) FriendMgrSington.UpdateLogoutTime(this.Platform, this.SnId)
if this.scene != nil && this.scene.gameSess != nil { if this.scene != nil && this.scene.gameSess != nil {
pack := &server_proto.WGPlayerDropLine{ pack := &serverproto.WGPlayerDropLine{
Id: proto.Int32(this.SnId), Id: proto.Int32(this.SnId),
SceneId: proto.Int(this.scene.sceneId), SceneId: proto.Int(this.scene.sceneId),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToGame(int(server_proto.SSPacketID_PACKET_WG_PLAYERDROPLINE), pack) this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERDROPLINE), pack)
} }
PlayerMgrSington.DroplinePlayer(this) PlayerMgrSington.DroplinePlayer(this)
this.sid = 0 this.sid = 0
@ -1544,11 +1548,11 @@ func (this *Player) Logout() {
// 在线奖励:累计在线时长 // 在线奖励:累计在线时长
//this.OnlineRewardAddUpOnlineDuration() //this.OnlineRewardAddUpOnlineDuration()
scLogout := &login_proto.SCLogout{ scLogout := &loginproto.SCLogout{
OpRetCode: login_proto.OpResultCode_OPRC_Sucess, OpRetCode: loginproto.OpResultCode_OPRC_Sucess,
} }
proto.SetDefaults(scLogout) proto.SetDefaults(scLogout)
this.SendToClient(int(login_proto.LoginPacketID_PACKET_SC_LOGOUT), scLogout) this.SendToClient(int(loginproto.LoginPacketID_PACKET_SC_LOGOUT), scLogout)
this.SetOffline() this.SetOffline()
this.LastLogoutTime = time.Now().Local() this.LastLogoutTime = time.Now().Local()
FriendMgrSington.UpdateLogoutTime(this.Platform, this.SnId) FriendMgrSington.UpdateLogoutTime(this.Platform, this.SnId)
@ -1727,10 +1731,10 @@ func (this *Player) UnmarshalData(data []byte, scene *Scene) {
this.dirty = true this.dirty = true
} }
func (this *Player) MarshalIParam() []*server_proto.PlayerIParam { func (this *Player) MarshalIParam() []*serverproto.PlayerIParam {
var params []*server_proto.PlayerIParam var params []*serverproto.PlayerIParam
for i, v := range this.Iparams { for i, v := range this.Iparams {
params = append(params, &server_proto.PlayerIParam{ params = append(params, &serverproto.PlayerIParam{
ParamId: proto.Int(i), ParamId: proto.Int(i),
IntVal: proto.Int64(v), IntVal: proto.Int64(v),
}) })
@ -1738,16 +1742,16 @@ func (this *Player) MarshalIParam() []*server_proto.PlayerIParam {
return params return params
} }
func (this *Player) UnmarshalIParam(params []*server_proto.PlayerIParam) { func (this *Player) UnmarshalIParam(params []*serverproto.PlayerIParam) {
for _, p := range params { for _, p := range params {
this.Iparams[int(p.GetParamId())] = p.GetIntVal() this.Iparams[int(p.GetParamId())] = p.GetIntVal()
} }
} }
func (this *Player) MarshalSParam() []*server_proto.PlayerSParam { func (this *Player) MarshalSParam() []*serverproto.PlayerSParam {
var params []*server_proto.PlayerSParam var params []*serverproto.PlayerSParam
for i, v := range this.sparams { for i, v := range this.sparams {
params = append(params, &server_proto.PlayerSParam{ params = append(params, &serverproto.PlayerSParam{
ParamId: proto.Int(i), ParamId: proto.Int(i),
StrVal: proto.String(v), StrVal: proto.String(v),
}) })
@ -1755,16 +1759,16 @@ func (this *Player) MarshalSParam() []*server_proto.PlayerSParam {
return params return params
} }
func (this *Player) UnmarshalSParam(params []*server_proto.PlayerSParam) { func (this *Player) UnmarshalSParam(params []*serverproto.PlayerSParam) {
for _, p := range params { for _, p := range params {
this.sparams[int(p.GetParamId())] = p.GetStrVal() this.sparams[int(p.GetParamId())] = p.GetStrVal()
} }
} }
func (this *Player) MarshalCParam() []*server_proto.PlayerCParam { func (this *Player) MarshalCParam() []*serverproto.PlayerCParam {
var params []*server_proto.PlayerCParam var params []*serverproto.PlayerCParam
for k, v := range this.cparams { for k, v := range this.cparams {
params = append(params, &server_proto.PlayerCParam{ params = append(params, &serverproto.PlayerCParam{
StrKey: proto.String(k), StrKey: proto.String(k),
StrVal: proto.String(v), StrVal: proto.String(v),
}) })
@ -2255,7 +2259,7 @@ func (this *Player) OnDayTimer(login, continuous bool, t int) {
for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypeEveryDay) { for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypeEveryDay) {
this.WelfData.Task[v.GetId()] = &model.TaskData{} this.WelfData.Task[v.GetId()] = &model.TaskData{}
} }
for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypePermit) { for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypePermitEveryDay) {
this.WelfData.Task[v.GetId()] = &model.TaskData{} this.WelfData.Task[v.GetId()] = &model.TaskData{}
} }
} }
@ -2296,6 +2300,12 @@ func (this *Player) ResetPermit() {
} }
this.WelfData.PermitAward = make(map[int32]int64) this.WelfData.PermitAward = make(map[int32]int64)
this.WelfData.PermitExchange = make(map[int32][]int64) this.WelfData.PermitExchange = make(map[int32][]int64)
if this.WelfData.Task != nil {
for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypePermit) {
this.WelfData.Task[v.GetId()] = &model.TaskData{}
}
}
this.dirty = true this.dirty = true
// 清理数据 // 清理数据
bag := BagMgrSingleton.GetBagInfo(this.SnId) bag := BagMgrSingleton.GetBagInfo(this.SnId)
@ -2396,36 +2406,36 @@ func (this *Player) GetIP() string {
return this.Ip return this.Ip
} }
func (this *Player) CreateScene(sceneId, gameId, gameMode, sceneMode int, numOfGames int32, params []int64, dbGameFree *server_proto.DB_GameFree) (*Scene, hall_proto.OpResultCode_Game) { 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) gs := GameSessMgrSington.GetMinLoadSess(gameId)
if gs == nil { if gs == nil {
logger.Logger.Warnf("(this *Player) EnterScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId) logger.Logger.Warnf("(this *Player) EnterScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId)
return nil, hall_proto.OpResultCode_Game_OPRC_SceneServerMaintain_Game 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()) s := SceneMgrSingleton.CreateScene(0, this.SnId, sceneId, gameId, gameMode, sceneMode, 1, numOfGames, params, gs, this.GetPlatform(), 0, dbGameFree, dbGameFree.GetId())
if s == nil { if s == nil {
logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId) logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId)
return nil, hall_proto.OpResultCode_Game_OPRC_Error_Game return nil, hallproto.OpResultCode_Game_OPRC_Error_Game
} }
return s, hall_proto.OpResultCode_Game_OPRC_Sucess_Game return s, hallproto.OpResultCode_Game_OPRC_Sucess_Game
} }
func (this *Player) CreateLocalGameScene(sceneId, gameId, gameSite, sceneMode, playerNum int, params []int64, func (this *Player) CreateLocalGameScene(sceneId, gameId, gameSite, sceneMode, playerNum int, params []int64,
dbGameFree *server_proto.DB_GameFree, baseScore, groupId int32) (*Scene, hall_proto.OpResultCode_Game) { dbGameFree *serverproto.DB_GameFree, baseScore, groupId int32) (*Scene, hallproto.OpResultCode_Game) {
gs := GameSessMgrSington.GetMinLoadSess(gameId) gs := GameSessMgrSington.GetMinLoadSess(gameId)
if gs == nil { if gs == nil {
logger.Logger.Warnf("(this *Player) CreateLocalGameScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId) logger.Logger.Warnf("(this *Player) CreateLocalGameScene %v, %v GameSessMgrSington.GetMinLoadSess() = nil ", this.SnId, gameId)
return nil, hall_proto.OpResultCode_Game_OPRC_SceneServerMaintain_Game return nil, hallproto.OpResultCode_Game_OPRC_SceneServerMaintain_Game
} }
s := SceneMgrSingleton.CreateLocalGameScene(this.SnId, sceneId, gameId, gameSite, sceneMode, 1, params, gs, s := SceneMgrSingleton.CreateLocalGameScene(this.SnId, sceneId, gameId, gameSite, sceneMode, 1, params, gs,
this.GetPlatform(), playerNum, dbGameFree, baseScore, groupId, dbGameFree.GetId()) this.GetPlatform(), playerNum, dbGameFree, baseScore, groupId, dbGameFree.GetId())
if s == nil { if s == nil {
logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId) logger.Logger.Tracef("(this *Player) EnterScene %v, SceneMgrSingleton.CreateScene() = nil ", this.SnId)
return nil, hall_proto.OpResultCode_Game_OPRC_Error_Game return nil, hallproto.OpResultCode_Game_OPRC_Error_Game
} }
return s, hall_proto.OpResultCode_Game_OPRC_Sucess_Game return s, hallproto.OpResultCode_Game_OPRC_Sucess_Game
} }
func (this *Player) ReturnScene(isLoaded bool) *Scene { func (this *Player) ReturnScene(isLoaded bool) *Scene {
@ -2439,7 +2449,7 @@ func (this *Player) ReturnScene(isLoaded bool) *Scene {
return nil return nil
} }
pack := &server_proto.WGPlayerReturn{ pack := &serverproto.WGPlayerReturn{
PlayerId: proto.Int32(this.SnId), PlayerId: proto.Int32(this.SnId),
IsLoaded: proto.Bool(isLoaded), IsLoaded: proto.Bool(isLoaded),
RoomId: proto.Int(this.scene.sceneId), RoomId: proto.Int(this.scene.sceneId),
@ -2449,7 +2459,7 @@ func (this *Player) ReturnScene(isLoaded bool) *Scene {
pack.EnterTs = proto.Int64(ctx.enterTs) pack.EnterTs = proto.Int64(ctx.enterTs)
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
if this.SendToGame(int(server_proto.SSPacketID_PACKET_WG_PLAYERRETURN), pack) { if this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_PLAYERRETURN), pack) {
//比赛场返场检查 //比赛场返场检查
//MatchMgrSington.OnPlayerReturnScene(this.scene, this) //MatchMgrSington.OnPlayerReturnScene(this.scene, this)
return this.scene return this.scene
@ -2483,7 +2493,7 @@ func (this *Player) AddMoneyPayTotal(amount int64) {
func (this *Player) SendDiffData() { func (this *Player) SendDiffData() {
this.UpdateVip() this.UpdateVip()
var dirty bool var dirty bool
pack := &player_proto.SCPlayerDataUpdate{} pack := &playerproto.SCPlayerDataUpdate{}
pack.UpdateField = 0 pack.UpdateField = 0
//金币 //金币
if this.diffData.Coin != this.Coin { if this.diffData.Coin != this.Coin {
@ -2585,7 +2595,7 @@ func (this *Player) SendDiffData() {
if dirty { if dirty {
FriendMgrSington.UpdateInfo(this.Platform, this.SnId) FriendMgrSington.UpdateInfo(this.Platform, this.SnId)
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATAUPDATE), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PLAYERDATAUPDATE), pack)
logger.Logger.Trace("(this *Player) SendDiffData() ", pack) logger.Logger.Trace("(this *Player) SendDiffData() ", pack)
} }
} }
@ -2968,9 +2978,9 @@ func (this *Player) GetPromoterKey() (string, error) {
func (this *Player) SendPlayerInfo() { func (this *Player) SendPlayerInfo() {
this.UpdateVip() this.UpdateVip()
scPlayerData := &player_proto.SCPlayerData{ scPlayerData := &playerproto.SCPlayerData{
OpRetCode: player_proto.OpResultCode_OPRC_Sucess, OpRetCode: playerproto.OpResultCode_OPRC_Sucess,
Data: &player_proto.PlayerData{ Data: &playerproto.PlayerData{
AccId: proto.String(this.AccountId), //账号ID AccId: proto.String(this.AccountId), //账号ID
Platform: proto.String(this.Platform), //平台 Platform: proto.String(this.Platform), //平台
Channel: proto.String(this.Channel), //渠道 Channel: proto.String(this.Channel), //渠道
@ -3017,10 +3027,13 @@ func (this *Player) SendPlayerInfo() {
if this.Pets != nil { if this.Pets != nil {
scPlayerData.Data.UsePetId = this.Pets.ModId scPlayerData.Data.UsePetId = this.Pets.ModId
} }
if this.Skin != nil {
scPlayerData.Data.UseSkinId = this.Skin.ModId
}
if this.WelfData != nil { if this.WelfData != nil {
scPlayerData.Data.ReliefFundTimes = this.WelfData.ReliefFundTimes scPlayerData.Data.ReliefFundTimes = this.WelfData.ReliefFundTimes
} }
if item := BagMgrSingleton.GetItem(this.SnId, VCard); item != nil { if item := BagMgrSingleton.GetItem(this.SnId, common.ItemIDVCard); item != nil {
scPlayerData.Data.VCoin = item.ItemNum //V卡 scPlayerData.Data.VCoin = item.ItemNum //V卡
} }
// 排位积分 // 排位积分
@ -3054,14 +3067,14 @@ func (this *Player) SendPlayerInfo() {
if endTime == 0 { if endTime == 0 {
continue continue
} }
weekInfo := player_proto.WeekInfo{ weekInfo := playerproto.WeekInfo{
Id: id, Id: id,
WeekCardTime: endTime, WeekCardTime: endTime,
WeekCardAward: this.WeekCardAward[id], WeekCardAward: this.WeekCardAward[id],
} }
scPlayerData.Data.WeekCard = append(scPlayerData.Data.WeekCard, &weekInfo) scPlayerData.Data.WeekCard = append(scPlayerData.Data.WeekCard, &weekInfo)
} }
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData)
logger.Logger.Tracef("Send SCPlayerData %v", scPlayerData) logger.Logger.Tracef("Send SCPlayerData %v", scPlayerData)
if !this.IsRob { if !this.IsRob {
@ -3072,6 +3085,7 @@ func (this *Player) SendPlayerInfo() {
if this.scene != nil && this.thrscene == 0 { if this.scene != nil && this.thrscene == 0 {
this.SendGameConfig(int32(this.scene.gameId), this.Platform, this.Channel) this.SendGameConfig(int32(this.scene.gameId), this.Platform, this.Channel)
} }
this.SCItems()
//this.SendJackpotInfo() //this.SendJackpotInfo()
} }
@ -3276,13 +3290,13 @@ func ReportSystemGiveEvent(pd *model.PlayerData, amount, tag int32, notifyClient
player := PlayerMgrSington.GetPlayerBySnId(pd.SnId) player := PlayerMgrSington.GetPlayerBySnId(pd.SnId)
if player != nil { if player != nil {
//通知客户端 //通知客户端
sendPack := &shop_proto.SCNotifyGiveCoinInfo{ sendPack := &shopproto.SCNotifyGiveCoinInfo{
GiveCoin: proto.Int64(int64(amount)), GiveCoin: proto.Int64(int64(amount)),
GiveTag: proto.Int32(tag), GiveTag: proto.Int32(tag),
} }
proto.SetDefaults(sendPack) proto.SetDefaults(sendPack)
player.SendToClient(int(shop_proto.SPacketID_SHOP_SC_GIVECOIN_INFO), sendPack) player.SendToClient(int(shopproto.SPacketID_SHOP_SC_GIVECOIN_INFO), sendPack)
} }
} }
} }
@ -3307,7 +3321,7 @@ func (this *Player) ReportBankRuptcy(gameid, gamemode, gamefreeid int32) {
//} //}
} }
func (this *Player) CheckType(gameid, gamefreeId int32) *server_proto.DB_PlayerType { func (this *Player) CheckType(gameid, gamefreeId int32) *serverproto.DB_PlayerType {
types := srvdata.PlayerTypeMgrSington.GetPlayerType(gamefreeId) types := srvdata.PlayerTypeMgrSington.GetPlayerType(gamefreeId)
cnt := len(types) cnt := len(types)
if cnt > 0 { if cnt > 0 {
@ -3404,14 +3418,14 @@ func (this *Player) AddPayCoinLog(coin int64, coinType int32, oper string) {
// 充值回调 // 充值回调
func (this *Player) SendPlayerRechargeAnswer(coin int64) { func (this *Player) SendPlayerRechargeAnswer(coin int64) {
if this.Tel == "" { if this.Tel == "" {
pack := &player_proto.SCPlayerRechargeAnswer{ pack := &playerproto.SCPlayerRechargeAnswer{
OpParam: proto.Int64(1), OpParam: proto.Int64(1),
AddCoin: proto.Int64(coin), AddCoin: proto.Int64(coin),
Coin: proto.Int64(this.Coin), Coin: proto.Int64(this.Coin),
SafeBoxCoin: proto.Int64(this.SafeBoxCoin), SafeBoxCoin: proto.Int64(this.SafeBoxCoin),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PLAYERRECHARGEANSWER), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PLAYERRECHARGEANSWER), pack)
} }
} }
@ -3463,12 +3477,12 @@ func (this *Player) SendPlayerRechargeAnswer(coin int64) {
//} //}
func (this *Player) SyncSafeBoxCoinToGame() { func (this *Player) SyncSafeBoxCoinToGame() {
pack := &server_proto.WGSyncPlayerSafeBoxCoin{ pack := &serverproto.WGSyncPlayerSafeBoxCoin{
SnId: proto.Int32(this.SnId), SnId: proto.Int32(this.SnId),
SafeBoxCoin: proto.Int64(this.SafeBoxCoin), SafeBoxCoin: proto.Int64(this.SafeBoxCoin),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToGame(int(server_proto.SSPacketID_PACKET_WG_SyncPlayerSafeBoxCoin), pack) this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_SyncPlayerSafeBoxCoin), pack)
} }
//func (this *Player) GetDgHboPlayerName(plt *Platform) (string, string) { //func (this *Player) GetDgHboPlayerName(plt *Platform) (string, string) {
@ -3522,12 +3536,12 @@ func OnPlayerPay(pd *model.PlayerData, coin int64) {
buf, err := pd.GetPlayerDataEncoder() buf, err := pd.GetPlayerDataEncoder()
if err == nil { if err == nil {
pack := &server_proto.WTPlayerPay{ pack := &serverproto.WTPlayerPay{
AddCoin: proto.Int64(coin), AddCoin: proto.Int64(coin),
PlayerData: buf.Bytes(), PlayerData: buf.Bytes(),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
common.SendToActThrSrv(int(server_proto.SSPacketID_PACKET_WT_PLAYERPAY), pack) common.SendToActThrSrv(int(serverproto.SSPacketID_PACKET_WT_PLAYERPAY), pack)
} }
//ActFPayMgrSington.OnPlayerPay(pd.SnId, pd.Platform, coin) //ActFPayMgrSington.OnPlayerPay(pd.SnId, pd.Platform, coin)
@ -3545,12 +3559,12 @@ func (this *Player) SendPlatformCanUsePromoterBind() {
} }
} }
pack := &player_proto.SCBindPromoterState{ pack := &playerproto.SCBindPromoterState{
BindState: proto.Int32(state), BindState: proto.Int32(state),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_BINDPROMOTERSTATE), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_BINDPROMOTERSTATE), pack)
} }
func (this *Player) RedirectByGame(packetid int, rawpack interface{}) bool { func (this *Player) RedirectByGame(packetid int, rawpack interface{}) bool {
@ -3565,13 +3579,13 @@ func (this *Player) RedirectByGame(packetid int, rawpack interface{}) bool {
data, err := netlib.MarshalPacket(packetid, rawpack) data, err := netlib.MarshalPacket(packetid, rawpack)
if err == nil { if err == nil {
pack := &server_proto.SSRedirectToPlayer{ pack := &serverproto.SSRedirectToPlayer{
SnId: proto.Int32(this.SnId), SnId: proto.Int32(this.SnId),
PacketId: proto.Int(packetid), PacketId: proto.Int(packetid),
Data: data, Data: data,
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
return this.SendToGame(int(server_proto.SSPacketID_PACKET_SS_REDIRECTTOPLAYER), pack) return this.SendToGame(int(serverproto.SSPacketID_PACKET_SS_REDIRECTTOPLAYER), pack)
} }
return false return false
} }
@ -3584,12 +3598,12 @@ func (this *Player) SyncPlayerDataToGateSrv(pd *model.PlayerData) {
if err != nil { if err != nil {
logger.Logger.Info("(this *Player) UpdateToGateSrv gob.Marshal error", err) logger.Logger.Info("(this *Player) UpdateToGateSrv gob.Marshal error", err)
} else { } else {
pack := &server_proto.WRPlayerData{ pack := &serverproto.WRPlayerData{
Sid: this.sid, Sid: this.sid,
PlayerData: buf.Bytes(), PlayerData: buf.Bytes(),
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.gateSess.Send(int(server_proto.SSPacketID_PACKET_WR_PlayerData), pack) this.gateSess.Send(int(serverproto.SSPacketID_PACKET_WR_PlayerData), pack)
} }
} }
@ -3597,26 +3611,26 @@ func (this *Player) BindGroupTag(tags []string) {
if this.gateSess == nil { if this.gateSess == nil {
return return
} }
pack := &server_proto.SGBindGroupTag{ pack := &serverproto.SGBindGroupTag{
Sid: proto.Int64(this.sid), Sid: proto.Int64(this.sid),
Code: server_proto.SGBindGroupTag_OpCode_Add, Code: serverproto.SGBindGroupTag_OpCode_Add,
Tags: tags, Tags: tags,
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.gateSess.Send(int(server_proto.SSPacketID_PACKET_SG_BINDGROUPTAG), pack) this.gateSess.Send(int(serverproto.SSPacketID_PACKET_SG_BINDGROUPTAG), pack)
} }
func (this *Player) UnBindGroupTag(tags []string) { func (this *Player) UnBindGroupTag(tags []string) {
if this.gateSess == nil { if this.gateSess == nil {
return return
} }
pack := &server_proto.SGBindGroupTag{ pack := &serverproto.SGBindGroupTag{
Sid: proto.Int64(this.sid), Sid: proto.Int64(this.sid),
Code: server_proto.SGBindGroupTag_OpCode_Del, Code: serverproto.SGBindGroupTag_OpCode_Del,
Tags: tags, Tags: tags,
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
this.gateSess.Send(int(server_proto.SSPacketID_PACKET_SG_BINDGROUPTAG), pack) this.gateSess.Send(int(serverproto.SSPacketID_PACKET_SG_BINDGROUPTAG), pack)
} }
func (this *Player) TryRetrieveLostGameCoin(sceneid int) { func (this *Player) TryRetrieveLostGameCoin(sceneid int) {
@ -3662,9 +3676,9 @@ func (this *Player) SyncGameCoin(sceneid int, enterts int64) {
this.SendDiffData() this.SendDiffData()
}), "GetCoinWALBySnidAndInGameAndGreaterTs").Start() }), "GetCoinWALBySnidAndInGameAndGreaterTs").Start()
} }
func (this *Player) SendShowRed(showType hall_proto.ShowRedCode, showChild, isShow int32) { func (this *Player) SendShowRed(showType hallproto.ShowRedCode, showChild, isShow int32) {
pack := &hall_proto.SCShowRed{ pack := &hallproto.SCShowRed{
ShowRed: &hall_proto.ShowRed{ ShowRed: &hallproto.ShowRed{
ShowType: showType, ShowType: showType,
ShowChild: proto.Int32(showChild), ShowChild: proto.Int32(showChild),
IsShow: proto.Int32(isShow), IsShow: proto.Int32(isShow),
@ -3672,19 +3686,19 @@ func (this *Player) SendShowRed(showType hall_proto.ShowRedCode, showChild, isSh
} }
proto.SetDefaults(pack) proto.SetDefaults(pack)
logger.Logger.Trace("SCShowRed:", pack) logger.Logger.Trace("SCShowRed:", pack)
this.SendToClient(int(hall_proto.HallPacketID_PACKET_SC_SHOWRED), pack) this.SendToClient(int(hallproto.HallPacketID_PACKET_SC_SHOWRED), pack)
} }
func (this *Player) SCVIPBuy(buy int64) { func (this *Player) SCVIPBuy(buy int64) {
//buy *= 10000 //buy *= 10000
//this.AddMoneyPayTotal(buy) //this.AddMoneyPayTotal(buy)
//this.GetVIPLevel(0) // 更新下vip等级 //this.GetVIPLevel(0) // 更新下vip等级
pack := &player_proto.SCVIPBuy{ pack := &playerproto.SCVIPBuy{
OpRetCode: player_proto.OpResultCode_OPRC_Sucess, OpRetCode: playerproto.OpResultCode_OPRC_Sucess,
} }
pack.TolVipExp, pack.Money = this.GetCurrentVIPExp() // 获取经验会更新vip等级 pack.TolVipExp, pack.Money = this.GetCurrentVIPExp() // 获取经验会更新vip等级
pack.Vip = this.VIP pack.Vip = this.VIP
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_VIPBUY), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_VIPBUY), pack)
} }
func (this *Player) SCVIPInfo() { func (this *Player) SCVIPInfo() {
@ -3692,15 +3706,15 @@ func (this *Player) SCVIPInfo() {
return return
} }
pack := &player_proto.SCVIPInfo{ pack := &playerproto.SCVIPInfo{
OpRetCode: player_proto.OpResultCode_OPRC_Error, OpRetCode: playerproto.OpResultCode_OPRC_Error,
} }
vips := VipMgrSington.GetVIPcfg(this.Platform) vips := VipMgrSington.GetVIPcfg(this.Platform)
if vips != nil { if vips != nil {
pack.MoneyRatio = int32(vips.MoneyRatio) pack.MoneyRatio = int32(vips.MoneyRatio)
for _, cfg := range vips.List { for _, cfg := range vips.List {
data := &player_proto.VIPcfg{ data := &playerproto.VIPcfg{
VipId: cfg.VipId, VipId: cfg.VipId,
VipEx: cfg.VipEx, VipEx: cfg.VipEx,
Price: cfg.Price, Price: cfg.Price,
@ -3718,13 +3732,13 @@ func (this *Player) SCVIPInfo() {
MatchFreeTimes: cfg.MatchFreeTimes, MatchFreeTimes: cfg.MatchFreeTimes,
} }
for itemId, itemNum := range cfg.Award { for itemId, itemNum := range cfg.Award {
data.Item = append(data.Item, &player_proto.ItemInfo{ data.Item = append(data.Item, &playerproto.ItemInfo{
ItemId: int32(itemId), ItemId: int32(itemId),
ItemNum: itemNum, ItemNum: itemNum,
}) })
} }
for itemId, itemNum := range cfg.Privilege7 { for itemId, itemNum := range cfg.Privilege7 {
data.Privilege7 = append(data.Privilege7, &player_proto.ItemInfo{ data.Privilege7 = append(data.Privilege7, &playerproto.ItemInfo{
ItemId: int32(itemId), ItemId: int32(itemId),
ItemNum: itemNum, ItemNum: itemNum,
}) })
@ -3745,11 +3759,11 @@ func (this *Player) SCVIPInfo() {
pack.TolVipExp, pack.Money = this.GetCurrentVIPExp(vips) pack.TolVipExp, pack.Money = this.GetCurrentVIPExp(vips)
pack.Vip = this.VIP pack.Vip = this.VIP
pack.OpRetCode = player_proto.OpResultCode_OPRC_Sucess pack.OpRetCode = playerproto.OpResultCode_OPRC_Sucess
//WelfareMgrSington.MonitorWelfData(this) //WelfareMgrSington.MonitorWelfData(this)
//pack.VipId = append(pack.VipId, this.WelfData.VIPGift...) //pack.VipId = append(pack.VipId, this.WelfData.VIPGift...)
} }
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_VIPINFO), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_VIPINFO), pack)
} }
func (this *Player) GetVIPExpByPay(payTotal int32) int32 { func (this *Player) GetVIPExpByPay(payTotal int32) int32 {
vips := VipMgrSington.GetVIPcfg(this.Platform) vips := VipMgrSington.GetVIPcfg(this.Platform)
@ -3757,12 +3771,12 @@ func (this *Player) GetVIPExpByPay(payTotal int32) int32 {
} }
func (this *Player) VIPDraw(id int32) { func (this *Player) VIPDraw(id int32) {
//WelfareMgrSington.MonitorWelfData(this) //WelfareMgrSington.MonitorWelfData(this)
pack := &player_proto.SCVIPDraw{ pack := &playerproto.SCVIPDraw{
Id: id, Id: id,
OpRetCode: player_proto.OpResultCode_OPRC_Error, OpRetCode: playerproto.OpResultCode_OPRC_Error,
} }
if id != 0 { if id != 0 {
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack)
return return
} }
if this.WelfData.VIPBag == nil { if this.WelfData.VIPBag == nil {
@ -3771,7 +3785,7 @@ func (this *Player) VIPDraw(id int32) {
if innerMap, ok := this.WelfData.VIPBag[this.VIP]; ok { if innerMap, ok := this.WelfData.VIPBag[this.VIP]; ok {
if _, ok := innerMap[0]; ok { if _, ok := innerMap[0]; ok {
logger.Logger.Trace("VIPDraw VIP is repeat id%v ", id) logger.Logger.Trace("VIPDraw VIP is repeat id%v ", id)
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack)
return return
} }
} else { } else {
@ -3782,7 +3796,7 @@ func (this *Player) VIPDraw(id int32) {
if vips != nil { if vips != nil {
for _, data := range vips.List { for _, data := range vips.List {
if data.VipId == this.VIP { if data.VipId == this.VIP {
pack.OpRetCode = player_proto.OpResultCode_OPRC_Sucess pack.OpRetCode = playerproto.OpResultCode_OPRC_Sucess
this.WelfData.VIPBag[this.VIP][0] = 1 this.WelfData.VIPBag[this.VIP][0] = 1
//金币数量 //金币数量
money := data.Privilege1[0] money := data.Privilege1[0]
@ -3808,12 +3822,12 @@ func (this *Player) VIPDraw(id int32) {
} }
} }
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack)
} }
func (this *Player) GetCurrentVIPExp(vipcfg ...*webapi_proto.VIPcfgDataList) (exp int64, money int64) { func (this *Player) GetCurrentVIPExp(vipcfg ...*webapiproto.VIPcfgDataList) (exp int64, money int64) {
var vips *webapi_proto.VIPcfgDataList var vips *webapiproto.VIPcfgDataList
if len(vipcfg) == 0 { if len(vipcfg) == 0 {
vips = VipMgrSington.GetVIPcfg(this.Platform) vips = VipMgrSington.GetVIPcfg(this.Platform)
} else { } else {
@ -3917,17 +3931,18 @@ func (this *Player) GetPayGoodsInfo() {
case ShopPageBackend: case ShopPageBackend:
logger.Logger.Tracef("GetPayGoodsInfo ShopPageBackend %+v", *info) logger.Logger.Tracef("GetPayGoodsInfo ShopPageBackend %+v", *info)
default: default:
var itemInfo []*player_proto.PayItem var itemInfo []*playerproto.PayItem
var items []*Item var items []*Item
if len(info.Amount) > 0 { if len(info.Amount) > 0 {
this.AddCoin(int64(info.Amount[0]), 0, info.GainWay, "Callback_login", info.Remark) this.AddCoin(int64(info.Amount[0]), 0, info.GainWay, "Callback_login", info.Remark)
this.AddDiamond(int64(info.Amount[1]), 0, info.GainWay, "Callback_login", info.Remark) this.AddDiamond(int64(info.Amount[1]), 0, info.GainWay, "Callback_login", info.Remark)
} }
this.AddMoneyPayTotal(int64(info.ConsumeNum)) this.AddMoneyPayTotal(int64(info.ConsumeNum))
this.MoneyTotal += int64(info.ConsumeTypeNum)
if info.ItemInfo != nil { if info.ItemInfo != nil {
for _, v := range info.ItemInfo { for _, v := range info.ItemInfo {
items = append(items, &Item{ItemId: v.ItemId, ItemNum: v.ItemNum}) items = append(items, &Item{ItemId: v.ItemId, ItemNum: v.ItemNum})
itemInfo = append(itemInfo, &player_proto.PayItem{ itemInfo = append(itemInfo, &playerproto.PayItem{
ItemId: v.ItemId, ItemId: v.ItemId,
ItemNum: v.ItemNum, ItemNum: v.ItemNum,
}) })
@ -3943,6 +3958,11 @@ func (this *Player) GetPayGoodsInfo() {
Platform: this.Platform, Platform: this.Platform,
StartTs: PlatformMgrSingleton.GetConfig(this.Platform).PermitStartTs, StartTs: PlatformMgrSingleton.GetConfig(this.Platform).PermitStartTs,
SnId: this.SnId, SnId: this.SnId,
Ts: time.Now().Unix(),
})
TaskSubjectSingleton.Touch(common.TaskTypeBuyPermit, &TaskData{
SnId: this.SnId,
Num: 1,
}) })
} }
switch info.Remark { switch info.Remark {
@ -3979,12 +3999,12 @@ func (this *Player) GetPayGoodsInfo() {
BagMgrSingleton.AddItems(this, items, 0, info.GainWay, info.Operator, info.Remark, 0, 0, false) BagMgrSingleton.AddItems(this, items, 0, info.GainWay, info.Operator, info.Remark, 0, 0, false)
PayGoodsInfo := &player_proto.SCPayGoodsInfo{ PayGoodsInfo := &playerproto.SCPayGoodsInfo{
Gold: info.Amount, Gold: info.Amount,
Item: itemInfo, Item: itemInfo,
} }
proto.SetDefaults(PayGoodsInfo) proto.SetDefaults(PayGoodsInfo)
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PAYGOODSINFO), PayGoodsInfo) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PAYGOODSINFO), PayGoodsInfo)
} }
if info.ConsumeNum > 0 { if info.ConsumeNum > 0 {
TaskSubjectSingleton.Touch(common.TaskTypePay, &TaskData{ TaskSubjectSingleton.Touch(common.TaskTypePay, &TaskData{
@ -3999,7 +4019,7 @@ func (this *Player) GetPayGoodsInfo() {
} }
func (this *Player) SendJackPotInit() { func (this *Player) SendJackPotInit() {
var pack = &hall_proto.SCHundredSceneGetGameJackpot{} var pack = &hallproto.SCHundredSceneGetGameJackpot{}
gameFreeIds := []int32{ gameFreeIds := []int32{
3010001, 3010002, 3010003, 3010004, 3010001, 3010002, 3010003, 3010004,
3020001, 3020002, 3020003, 3020004, 3020001, 3020002, 3020003, 3020004,
@ -4009,7 +4029,7 @@ func (this *Player) SendJackPotInit() {
for _, id := range gameFreeIds { for _, id := range gameFreeIds {
data := srvdata.PBDB_GameFreeMgr.GetData(id) data := srvdata.PBDB_GameFreeMgr.GetData(id)
if data != nil && len(data.Jackpot) > 0 { if data != nil && len(data.Jackpot) > 0 {
jpfi := &hall_proto.GameJackpotFundInfo{ jpfi := &hallproto.GameJackpotFundInfo{
GameFreeId: proto.Int32(data.Id), GameFreeId: proto.Int32(data.Id),
JackPotFund: proto.Int64(int64(data.BaseScore * data.Jackpot[0])), JackPotFund: proto.Int64(int64(data.BaseScore * data.Jackpot[0])),
} }
@ -4017,7 +4037,7 @@ func (this *Player) SendJackPotInit() {
} }
} }
if len(pack.GameJackpotFund) > 0 { if len(pack.GameJackpotFund) > 0 {
this.SendToClient(int(hall_proto.HundredScenePacketID_PACKET_SC_GAMEJACKPOT), pack) this.SendToClient(int(hallproto.HundredScenePacketID_PACKET_SC_GAMEJACKPOT), pack)
} }
} }
@ -4154,11 +4174,11 @@ func (this *Player) SendPlayerCoin() {
func (this *Player) UnPlayerPowerEx(power int64) { func (this *Player) UnPlayerPowerEx(power int64) {
logger.Logger.Tracef("解锁炮倍 当前最大解锁炮倍:%v,要解锁的炮倍:%v", this.UnMaxPower, power) logger.Logger.Tracef("解锁炮倍 当前最大解锁炮倍:%v,要解锁的炮倍:%v", this.UnMaxPower, power)
if this.UnPlayerPower(power) { if this.UnPlayerPower(power) {
pack := &player_proto.SCPlayerUnPower{ pack := &playerproto.SCPlayerUnPower{
UnMaxpower: power, UnMaxpower: power,
} }
this.UnMaxPower = power this.UnMaxPower = power
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PlayerUnPower), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PlayerUnPower), pack)
logger.Logger.Tracef("通知客户端解锁最大炮倍,snid = %v,power = %v", this.SnId, power) logger.Logger.Tracef("通知客户端解锁最大炮倍,snid = %v,power = %v", this.SnId, power)
} }
} }
@ -4182,10 +4202,10 @@ func (this *Player) ItemUnPlayerPowerListEx(itemId int32) {
if this.UnPlayerPowerList(powerId) { if this.UnPlayerPowerList(powerId) {
//通知客户端解锁炮台 //通知客户端解锁炮台
pack := &player_proto.SCPlayerUnPowerList{ pack := &playerproto.SCPlayerUnPowerList{
UnPowerList: powerId, UnPowerList: powerId,
} }
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PlayerUnPowerList), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PlayerUnPowerList), pack)
logger.Logger.Trace("通知客户端解锁炮台 snid = %v,解锁的炮台:%v,当前已有的炮台 = %v", this.SnId, powerId, this.PowerList) logger.Logger.Trace("通知客户端解锁炮台 snid = %v,解锁的炮台:%v,当前已有的炮台 = %v", this.SnId, powerId, this.PowerList)
} }
} }
@ -4198,10 +4218,10 @@ func (this *Player) UnPlayerPowerListEx(powerId int32) {
} }
if this.UnPlayerPowerList(powerId) { if this.UnPlayerPowerList(powerId) {
//通知客户端解锁炮台 //通知客户端解锁炮台
pack := &player_proto.SCPlayerUnPowerList{ pack := &playerproto.SCPlayerUnPowerList{
UnPowerList: powerId, UnPowerList: powerId,
} }
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PlayerUnPowerList), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PlayerUnPowerList), pack)
logger.Logger.Trace("通知客户端解锁炮台 snid = %v,解锁的炮台:%v,当前已有的炮台 = %v", this.SnId, powerId, this.PowerList) logger.Logger.Trace("通知客户端解锁炮台 snid = %v,解锁的炮台:%v,当前已有的炮台 = %v", this.SnId, powerId, this.PowerList)
} }
} }
@ -4218,12 +4238,12 @@ func (this *Player) UpdatePlayerVipBag(shopId int32) {
} }
this.WelfData.VIPBag[shopInfo.VipLevel][shopInfo.Id] = shopInfo.Type this.WelfData.VIPBag[shopInfo.VipLevel][shopInfo.Id] = shopInfo.Type
logger.Logger.Tracef("玩家购买VIP商品成功,更新购买状态snid = %v shopId = %v,VIP = %v", this.SnId, shopInfo.Id, shopInfo.VipLevel) logger.Logger.Tracef("玩家购买VIP商品成功,更新购买状态snid = %v shopId = %v,VIP = %v", this.SnId, shopInfo.Id, shopInfo.VipLevel)
pack := &player_proto.SCVIPDraw{ pack := &playerproto.SCVIPDraw{
Id: shopInfo.Type, Id: shopInfo.Type,
Vip: shopInfo.VipLevel, Vip: shopInfo.VipLevel,
OpRetCode: player_proto.OpResultCode_OPRC_Sucess, OpRetCode: playerproto.OpResultCode_OPRC_Sucess,
} }
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_DRAWVIPGIFT), pack)
//VIP金币礼包&VIP固定礼包统计数据 //VIP金币礼包&VIP固定礼包统计数据
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
var item []model.ItemInfo var item []model.ItemInfo
@ -4367,10 +4387,10 @@ func (this *Player) addLotteryCount(count int32) {
this.LotteryCount = math.MaxInt32 this.LotteryCount = math.MaxInt32
} }
//通知客户端 //通知客户端
pack := &player_proto.SCPhoneLotteryCount{ pack := &playerproto.SCPhoneLotteryCount{
Count: this.LotteryCount, Count: this.LotteryCount,
} }
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PhoneLotteryCount), pack) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SC_PhoneLotteryCount), pack)
} }
@ -4614,7 +4634,7 @@ func (this *Player) GetWeekCardAwary(id int32) {
logger.Logger.Trace("周卡已过期,不能领取!") logger.Logger.Trace("周卡已过期,不能领取!")
return return
} }
ret := &player_proto.SCGetWeekCardAwary{} ret := &playerproto.SCGetWeekCardAwary{}
if !this.WeekCardAward[id] { if !this.WeekCardAward[id] {
//获取周卡奖励 //获取周卡奖励
items := data.GetDayRewards() items := data.GetDayRewards()
@ -4622,7 +4642,7 @@ func (this *Player) GetWeekCardAwary(id int32) {
for itemId, itemNum := range items { for itemId, itemNum := range items {
item := &Item{ItemId: int32(itemId), ItemNum: itemNum, ObtainTime: time.Now().Unix()} item := &Item{ItemId: int32(itemId), ItemNum: itemNum, ObtainTime: time.Now().Unix()}
addItem = append(addItem, item) addItem = append(addItem, item)
itemInfo := &player_proto.PayItem{} itemInfo := &playerproto.PayItem{}
itemInfo.ItemId = int32(itemId) itemInfo.ItemId = int32(itemId)
itemInfo.ItemNum = itemNum itemInfo.ItemNum = itemNum
ret.Items = append(ret.Items, itemInfo) ret.Items = append(ret.Items, itemInfo)
@ -4632,13 +4652,13 @@ func (this *Player) GetWeekCardAwary(id int32) {
this.WeekCardAward[id] = true this.WeekCardAward[id] = true
ret.WeekCardAward = this.WeekCardAward[id] ret.WeekCardAward = this.WeekCardAward[id]
} }
info := &player_proto.WeekInfo{ info := &playerproto.WeekInfo{
Id: id, Id: id,
WeekCardTime: this.WeekCardTime[id], WeekCardTime: this.WeekCardTime[id],
WeekCardAward: this.WeekCardAward[id], WeekCardAward: this.WeekCardAward[id],
} }
ret.WeekCard = info ret.WeekCard = info
this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SCGetWeekCardAwary), ret) this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCGetWeekCardAwary), ret)
return return
} }
@ -4672,7 +4692,7 @@ func (this *Player) AddItemRecExpireTime(itemId int32, num, add int64, gainWay i
if num != 0 /*&& !async*/ { if num != 0 /*&& !async*/ {
this.dirty = true this.dirty = true
if num > 0 { if num > 0 {
itemData := srvdata.PBDB_GameItemMgr.GetData(itemId) itemData := srvdata.GameItemMgr.Get(this.Platform, itemId)
if itemData == nil { if itemData == nil {
return return
} }
@ -4688,14 +4708,14 @@ func (this *Player) AddItemRecExpireTime(itemId int32, num, add int64, gainWay i
} }
if this.scene != nil && this.scene.gameSess != nil { if this.scene != nil && this.scene.gameSess != nil {
msg := &server_proto.WGBuyRecTimeItem{ msg := &serverproto.WGBuyRecTimeItem{
SnId: this.SnId, SnId: this.SnId,
ExpireTime: this.ItemRecExpireTime, ExpireTime: this.ItemRecExpireTime,
Diamond: this.Diamond, Diamond: this.Diamond,
} }
proto.SetDefaults(msg) proto.SetDefaults(msg)
this.SendToGame(int(server_proto.SSPacketID_PACKET_WG_BUYRECTIMEITEM), msg) this.SendToGame(int(serverproto.SSPacketID_PACKET_WG_BUYRECTIMEITEM), msg)
} }
} }
@ -4715,3 +4735,48 @@ func (this *Player) GetIsPermit() bool {
} }
return false return false
} }
func (this *Player) SCItems() {
cfg := PlatformMgrSingleton.GetConfig(this.Platform).ItemConfig
if cfg == nil {
return
}
var items []*serverproto.DB_GameItem
for _, v := range cfg.GetItems() {
items = append(items, &serverproto.DB_GameItem{
Id: v.GetId(),
Name: v.GetName(),
ShowLocation: v.GetShowLocation(),
Classify: v.GetClassify(),
Type: v.GetType(),
Effect0: v.GetEffect0(),
Effect: v.GetEffect(),
SaleType: v.GetSaleType(),
SaleGold: v.GetSaleGold(),
Composition: v.GetComposition(),
CompositionMax: v.GetCompositionMax(),
Time: v.GetTime(),
Location: v.GetLocation(),
Describe: v.GetDescribe(),
Num: v.GetNum(),
Value: v.GetValue(),
Entity: v.GetEntity(),
Icon: v.GetIcon(),
})
}
pack := &playerproto.SCItem{
Items: items,
}
this.SendToClient(int(playerproto.PlayerPacketID_PACKET_SCItem), pack)
logger.Logger.Tracef("SCItem: %v", pack)
}
// AutoSkinUnlock 自动解锁皮肤
func (this *Player) AutoSkinUnlock() {
for _, v := range srvdata.PBDB_SkinMgr.Datas.GetArr() {
if v.GetUnlockType() != common.SkinGetAuto {
continue
}
SkinUnLock(this, v.GetId())
}
}

View File

@ -515,7 +515,7 @@ func (this *Scene) PlayerEnter(p *Player, pos int, ischangeroom bool) bool {
} }
// 道具 // 道具
dbItemArr := srvdata.PBDB_GameItemMgr.Datas.Arr dbItemArr := srvdata.GameItemMgr.GetArr(p.Platform)
if dbItemArr != nil { if dbItemArr != nil {
msg.Items = make(map[int32]int64) msg.Items = make(map[int32]int64)
for _, dbItem := range dbItemArr { for _, dbItem := range dbItemArr {

View File

@ -33,11 +33,12 @@ const (
// 消费类型 // 消费类型
const ( const (
ShopConsumeCoin = 1 // 金币 ShopConsumeCoin = 1 // 金币
ShopConsumeDiamond = 2 // 钻石 ShopConsumeDiamond = 2 // 钻石
ShopConsumeMoney = 3 // 现金 ShopConsumeMoney = 3 // 现金
ExchangeConsumeCash = 4 // 兑换消耗现金 ExchangeConsumeCash = 4 // 兑换消耗现金
ShopConsumePhoneScore = 11 // 手机积分 ShopConsumePhoneScore = 11 // 手机积分
ShopConsumeDiamondScore = 12 // 手机钻石
) )
// page类型 // page类型
@ -72,11 +73,6 @@ const (
Shop_Status_Revoke // 4为撤单 Shop_Status_Revoke // 4为撤单
) )
const (
VCard int32 = 30001
JCard int32 = 30002 //金券
)
/* /*
1.兑换成功兑换成功请等待审核 1.兑换成功兑换成功请等待审核
2.今日兑换已达上限请明日再来 2.今日兑换已达上限请明日再来
@ -98,17 +94,19 @@ type ShopMgr struct {
} }
type ExchangeShopInfo struct { type ExchangeShopInfo struct {
Id int32 //商品ID Id int32 //商品ID
Picture string // 图片 Picture string // 图片
Type int32 // 类型 1话费2实物 Type int32 // 类型 1话费2实物
Name string // 名称 Name string // 名称
Rule string //规则说明 Rule string //规则说明
ExType []*shop.ExchangeType // 获得道具 ExType []*shop.ExchangeType // 获得道具
OrderId string //兑换的订单Id OrderId string //兑换的订单Id
ExchangeTypeId int32 //兑换类型的id ExchangeTypeId int32 //兑换类型的id
ExchangeNum int32 //兑换数量 ExchangeNum int32 //兑换数量
ItemId int32 //转换道具id ItemId int32 //转换道具id
TelCharge int32 //话费 TelCharge int32 //话费
ShopType int32 //商品类型
TelData []*shop.TelChargeData //运营商配置
} }
func (this *ShopMgr) ModuleName() string { func (this *ShopMgr) ModuleName() string {
@ -576,6 +574,18 @@ func (this *ShopMgr) createPhoneScore(p *Player, shopInfo *model.ShopInfo, costN
if err == nil { if err == nil {
LogChannelSingleton.WriteMQData(model.GeneratePhoneLottery(p.SnId, p.Platform, string(jsonData), 2, 0, 0, int(costNum))) LogChannelSingleton.WriteMQData(model.GeneratePhoneLottery(p.SnId, p.Platform, string(jsonData), 2, 0, 0, int(costNum)))
} }
for _, v := range items {
tp1 := int32(-1)
if v.ItemId == common.ItemIDCoin {
tp1 = model.SystemFreeGive_CoinType_Coin
} else if v.ItemId == common.ItemIDDiamond {
tp1 = model.SystemFreeGive_CoinType_Diamond
}
if !p.IsRob && tp1 >= 0 {
LogChannelSingleton.WriteMQData(
model.GenerateSystemFreeGive(p.SnId, p.Name, p.Platform, p.Channel, model.SystemFreeGive_PhoneLotterySwap, tp1, v.ItemNum))
}
}
} }
} }
@ -669,6 +679,13 @@ 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)
case ShopConsumeDiamondScore:
var items []*Item
items = append(items, &Item{
ItemId: common.ItemDiamondScore, // 物品id
ItemNum: int64(-costNum), // 数量
})
BagMgrSingleton.AddItems(p, items, 0, common.GainWayBuyItem, "system", "商城购买消耗钻石积分", 0, 0, false)
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
@ -751,6 +768,14 @@ func (this *ShopMgr) GetExchangeData(platform string, id int32) *ExchangeShopInf
Id: info.Id, Id: info.Id,
}) })
} }
var telData []*shop.TelChargeData
for _, info := range data.TelData {
telData = append(telData, &shop.TelChargeData{
Id: info.Id,
Name: info.Name,
Url: info.Url,
})
}
return &ExchangeShopInfo{ return &ExchangeShopInfo{
Id: data.Id, Id: data.Id,
Picture: data.Picture, Picture: data.Picture,
@ -760,6 +785,8 @@ func (this *ShopMgr) GetExchangeData(platform string, id int32) *ExchangeShopInf
ExType: exType, ExType: exType,
ItemId: data.ItemId, ItemId: data.ItemId,
TelCharge: data.TelCharge, TelCharge: data.TelCharge,
ShopType: data.ShopType,
TelData: telData,
} }
} }
} }
@ -769,7 +796,7 @@ func (this *ShopMgr) GetExchangeData(platform string, id int32) *ExchangeShopInf
// 兑换操作 // 兑换操作
// Exchange 生成兑换订单v卡 id 兑换方式 0~2 // Exchange 生成兑换订单v卡 id 兑换方式 0~2
func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, comment string, id int32, num, giveType int32) (ret bool) { func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, comment string, id int32, num, giveType int32, telId int32) (ret bool) {
ret = true ret = true
cdata := this.GetExchangeData(p.Platform, goodsId) cdata := this.GetExchangeData(p.Platform, goodsId)
pack := &shop.SCShopExchange{ pack := &shop.SCShopExchange{
@ -788,7 +815,15 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen
break break
} }
} }
for _, weight := range this.GetConfig(p.Platform).ExchangeShopList.Weight {
if weight.ShopType == cdata.ShopType {
if weight.IsShow == 2 {
pack.RetCode = shop.OpResultCode_OPRC_Error
p.SendToClient(int(shop.SPacketID_PACKET_SC_SHOP_EXCHANGE), pack)
return false
}
}
}
if info == nil || (info.Price == 0 && info.JPrice == 0 && info.Cash == 0) { if info == nil || (info.Price == 0 && info.JPrice == 0 && info.Cash == 0) {
return false return false
} }
@ -799,7 +834,7 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen
//扣除V卡 //扣除V卡
if info.Price > 0 { if info.Price > 0 {
item := model.ItemInfo{ item := model.ItemInfo{
ItemId: VCard, ItemId: common.ItemIDVCard,
ItemNum: int64(info.Price * num), ItemNum: int64(info.Price * num),
} }
_, code, _ := BagMgrSingleton.AddItem(p, int64(item.ItemId), -item.ItemNum, 0, common.GainWay_Exchange, _, code, _ := BagMgrSingleton.AddItem(p, int64(item.ItemId), -item.ItemNum, 0, common.GainWay_Exchange,
@ -813,7 +848,7 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen
//扣除金券 //扣除金券
if info.JPrice > 0 { if info.JPrice > 0 {
item := model.ItemInfo{ item := model.ItemInfo{
ItemId: JCard, ItemId: common.ItemIDJCard,
ItemNum: int64(info.JPrice * num), ItemNum: int64(info.JPrice * num),
} }
_, _, isF := BagMgrSingleton.AddItem(p, int64(item.ItemId), -item.ItemNum, 0, common.GainWay_Exchange, _, _, isF := BagMgrSingleton.AddItem(p, int64(item.ItemId), -item.ItemNum, 0, common.GainWay_Exchange,
@ -843,6 +878,7 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen
GiveType: giveType, GiveType: giveType,
TelCharge: cdata.TelCharge, TelCharge: cdata.TelCharge,
VipLevel: p.VIP, VipLevel: p.VIP,
TelId: telId,
} }
buff, err := webapi.API_CreateExchange(common.GetAppId(), pack) buff, err := webapi.API_CreateExchange(common.GetAppId(), pack)
if err != nil { if err != nil {
@ -940,6 +976,14 @@ func (this *ShopMgr) ExchangeList(p *Player) (ret bool) {
if data != nil { if data != nil {
if as := data.(*webapi_proto.SAGetExchangeShop); as != nil { if as := data.(*webapi_proto.SAGetExchangeShop); as != nil {
for _, info := range as.Weight {
pack.Weight = append(pack.Weight, &shop.ShopWeight{
ShopType: info.ShopType,
Weight: info.Weight,
Name: info.Name,
IsShow: info.IsShow,
})
}
for _, v := range as.List { for _, v := range as.List {
var exChangeType []*shop.ExchangeType var exChangeType []*shop.ExchangeType
for _, info := range v.ExType { for _, info := range v.ExType {
@ -950,6 +994,14 @@ func (this *ShopMgr) ExchangeList(p *Player) (ret bool) {
Cash: info.Cash, Cash: info.Cash,
}) })
} }
var telData []*shop.TelChargeData
for _, info := range v.TelData {
telData = append(telData, &shop.TelChargeData{
Id: info.Id,
Name: info.Name,
Url: info.Url,
})
}
pack.Infos = append(pack.Infos, &shop.ShopExchangeInfo{ pack.Infos = append(pack.Infos, &shop.ShopExchangeInfo{
Type: v.Type, Type: v.Type,
Picture: v.Picture, Picture: v.Picture,
@ -964,6 +1016,8 @@ func (this *ShopMgr) ExchangeList(p *Player) (ret bool) {
NotVipDayMaxLimit: v.NotVipDayMaxLimit, NotVipDayMaxLimit: v.NotVipDayMaxLimit,
VipShopLimit: v.VipShopLimit, VipShopLimit: v.VipShopLimit,
NotVipShopLimit: v.NotVipShopLimit, NotVipShopLimit: v.NotVipShopLimit,
ShopType: v.ShopType,
TelData: telData,
}) })
} }
} }
@ -1020,11 +1074,11 @@ func (this *ShopMgr) GetExchangeRecord(p *Player, pageNo int32) {
ExchangeNum: v.ExchangeNum, ExchangeNum: v.ExchangeNum,
EXchangeType: v.EXchangeType, EXchangeType: v.EXchangeType,
GoodsId: v.GoodsId, GoodsId: v.GoodsId,
TelId: v.TelId,
} }
// remark // remark
pack.Infos = append(pack.Infos, record) pack.Infos = append(pack.Infos, record)
} }
} }
} }
p.SendToClient(int(shop.SPacketID_PACKET_SC_SHOP_EXCHANGERECORD), pack) p.SendToClient(int(shop.SPacketID_PACKET_SC_SHOP_EXCHANGERECORD), pack)

View File

@ -260,4 +260,5 @@ func init() {
TaskSubjectSingleton.Attach(common.TaskTypeTienlenLoseCoin, taskHandle) TaskSubjectSingleton.Attach(common.TaskTypeTienlenLoseCoin, taskHandle)
TaskSubjectSingleton.Attach(common.TaskTypeTienlenWinCoin, taskHandle) TaskSubjectSingleton.Attach(common.TaskTypeTienlenWinCoin, taskHandle)
TaskSubjectSingleton.Attach(common.TaskTypeRankMatchWinTimes, taskHandle) TaskSubjectSingleton.Attach(common.TaskTypeRankMatchWinTimes, taskHandle)
TaskSubjectSingleton.Attach(common.TaskTypeBuyPermit, taskHandle)
} }

View File

@ -1219,7 +1219,7 @@ func (this *Tournament) sendPromotionInfo(mc *PlayerMatchContext, sortId int64,
wg := new(sync.WaitGroup) wg := new(sync.WaitGroup)
if pack.GetRankAward() != nil { if pack.GetRankAward() != nil {
for _, v := range pack.GetRankAward().GetItemInfo() { for _, v := range pack.GetRankAward().GetItemInfo() {
data := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) data := srvdata.GameItemMgr.Get(mc.p.Platform, v.ItemId)
if data != nil && data.GetType() == common.ItemTypePhoneCode { if data != nil && data.GetType() == common.ItemTypePhoneCode {
has = true has = true
item := v // 并发需要复制 item := v // 并发需要复制

View File

@ -174,613 +174,6 @@ func (this *WebAPIHandlerMgr) GetWebAPIHandler(name string) WebAPIHandler {
} }
func init() { func init() {
//API用户登录
//WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Member/APIMemberRegisterOrLogin", WebAPIHandlerWrapper(
// func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
// logger.Logger.Trace("WebAPIHandler:/api/Member/APIMemberRegisterOrLogin", params)
// pack := &webapi.SALogin{}
// msg := &webapi.ASLogin{}
// err1 := proto.Unmarshal(params, msg)
// if err1 != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "数据序列化失败" + err1.Error()
// return common.ResponseTag_ParamError, pack
// }
//
// platformID, channel, _, _, tagkey := PlatformMgrSingleton.GetPlatformByPackageTag(msg.GetPlatformTag())
// platform := PlatformMgrSingleton.GetPlatform(strconv.Itoa(int(platformID)))
// if platform == nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "没有对应的包标识"
// return common.ResponseTag_ParamError, pack
// }
// merchantkey := platform.MerchantKey
//
// sign := msg.GetSign()
//
// raw := fmt.Sprintf("%v%v%v%v%v", msg.GetTelegramId(), msg.GetPlatformTag(), msg.GetUsername(), merchantkey, msg.GetTs())
// h := md5.New()
// io.WriteString(h, raw)
// newsign := hex.EncodeToString(h.Sum(nil))
//
// if newsign != sign {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "商户验签失败"
// return common.ResponseTag_ParamError, pack
// }
//
// var acc *model.Account
// var errcode int
//
// rawpwd := fmt.Sprintf("%v%v%v", msg.GetSign(), common.GetAppId(), time.Now().Unix())
// hpwd := md5.New()
// io.WriteString(hpwd, rawpwd)
// pwd := hex.EncodeToString(h.Sum(nil))
//
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// acc, errcode = model.AccountIsExist(msg.GetTelegramId(), msg.GetTelegramId(), "", platform.IdStr, time.Now().Unix(), 5, tagkey, false)
// if errcode == 2 {
// var err int
// acc, err = model.InsertAccount(msg.GetTelegramId(), pwd, platform.IdStr, strconv.Itoa(int(channel)), "", "",
// "telegramapi", 0, 0, msg.GetPlatformTag(), "", "", "", tagkey)
// if acc != nil { //需要预先创建玩家数据
// _, _ = model.GetPlayerData(acc.PackegeTag,acc.AccountId.Hex())
// }
// if err == 5 {
// return 1
// } else {
// //t.flag = login_proto.OpResultCode_OPRC_Login_CreateAccError
// }
// }
// return errcode
// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) {
// switch data.(int) {
// case 1:
// {
// if err := model.UpdatePlayerTokenPassword(acc.Platform, acc.AccountId.Hex(), pwd); err != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = err.Error()
// } else {
// tokenuserdata := &common.TokenUserData{
// TelegramId: msg.GetTelegramId(),
// Password: pwd,
// Packagetag: msg.GetPlatformTag(),
// Expired: time.Now().Add(time.Minute * 15).Unix(),
// }
//
// token, err := common.CreateTokenAes(tokenuserdata)
// if err != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = err.Error()
// } else {
// pack.Tag = webapi.TagCode_SUCCESS
// pack.Msg = ""
// pack.Snid = proto.Int32(acc.SnId)
// pack.Token = fmt.Sprintf("%v?token=%v&snid=%v", model.GameParamData.CSURL, token, acc.SnId)
// }
// }
// }
// case 2:
// {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "创建帐号失败"
// }
// case 3:
// {
// //t.flag = login_proto.OpResultCode_OPRC_LoginPassError
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "账号密码错误"
// }
// case 4:
// {
// //t.flag = login_proto.OpResultCode_OPRC_AccountBeFreeze
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "帐号冻结"
// }
// }
// tNode.TransRep.RetFiels = pack
// tNode.Resume()
// }), "APIMemberRegisterOrLogin").Start()
// return common.ResponseTag_TransactYield, pack
// }))
//API用户加减币
//WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Game/APIAddSubCoinById", WebAPIHandlerWrapper(
// func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
// pack := &webapi.SAAddCoinById{}
// msg := &webapi.ASAddCoinById{}
// err1 := proto.Unmarshal(params, msg)
// if err1 != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "数据序列化失败" + err1.Error()
// return common.ResponseTag_ParamError, pack
// }
//
// member_snid := msg.GetID()
// coin := msg.GetGold()
// coinEx := msg.GetGoldEx()
// oper := msg.GetOper()
// gold_desc := msg.GetDesc()
// billNo := int(msg.GetBillNo())
// platform := msg.GetPlatform()
// //logType := msg.GetLogType()
// isAccTodayRecharge := msg.GetIsAccTodayRecharge()
// needFlowRate := msg.GetNeedFlowRate()
// needGiveFlowRate := msg.GetNeedGiveFlowRate()
//
// if CacheDataMgr.CacheBillCheck(billNo, platform) {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "Bill number repeated!"
// return common.ResponseTag_ParamError, pack
// }
// CacheDataMgr.CacheBillNumber(billNo, platform) //防止手抖点两下
//
// var err error
// var pd *model.PlayerData
// oldGold := int64(0)
// oldSafeBoxGold := int64(0)
// var timeStamp = time.Now().UnixNano()
// player := PlayerMgrSington.GetPlayerBySnId(int32(member_snid))
// if player != nil { //在线玩家处理
// if player.scene != nil {
// CacheDataMgr.ClearCacheBill(billNo, platform)
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "Unsupported!!! because player in scene!"
// return common.ResponseTag_ParamError, pack
// }
// pd = player.PlayerData
// if len(platform) > 0 && player.Platform != platform {
// CacheDataMgr.ClearCacheBill(billNo, platform)
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "player platform forbit!"
// return common.ResponseTag_ParamError, pack
// }
//
// opcode := int32(common.GainWay_Api_In)
//
// if coin < 0 {
// opcode = int32(common.GainWay_Api_Out)
// if player.Coin+coin < 0 {
// CacheDataMgr.ClearCacheBill(billNo, platform)
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "coin not enough!"
// return common.ResponseTag_ParamError, pack
// }
// }
//
// //if logType != 0 {
// // opcode = logType
// //}
//
// oldGold = player.Coin
// oldSafeBoxGold = player.SafeBoxCoin
// coinLog := model.NewPayCoinLog(int64(billNo), int32(member_snid), coin, opcode,
// gold_desc, model.PayCoinLogType_Coin, coinEx)
// timeStamp = coinLog.TimeStamp
// //增加帐变记录
// coinlogex := model.NewCoinLogEx(int32(member_snid), coin+coinEx, oldGold+coin+coinEx,
// oldSafeBoxGold, 0, opcode, 0, oper, gold_desc, pd.Platform, pd.Channel,
// pd.BeUnderAgentCode, 0, pd.PackageID, 0)
//
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// err = model.InsertPayCoinLogs(platform, coinLog)
// if err != nil {
// logger.Logger.Errorf("model.InsertPayCoinLogs err:%v log:%v", err, coinLog)
// return err
// }
// err = model.InsertCoinLog(coinlogex)
// if err != nil {
// //回滚到对账日志
// model.RemovePayCoinLog(platform, coinLog.LogId)
// logger.Logger.Errorf("model.InsertCoinLogs err:%v log:%v", err, coinlogex)
// return err
// }
// return err
// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) {
// CacheDataMgr.ClearCacheBill(billNo, platform)
// if data != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = data.(error).Error()
// } else {
// //player.Coin += coin + coinEx
// player.AddCoinAsync(coin+coinEx, common.GainWay_Api_In, oper, gold_desc, true, 0, false)
// //增加相应的泥码量
// player.AddDirtyCoin(coin, coinEx)
// player.SetPayTs(timeStamp)
//
// if player.TodayGameData == nil {
// player.TodayGameData = model.NewPlayerGameCtrlData()
// }
// //actRandCoinMgr.OnPlayerRecharge(player, coin)
// if isAccTodayRecharge {
//
// player.AddCoinPayTotal(coin)
// player.TodayGameData.RechargeCoin += coin //累加当天充值金额
// if coin >= 0 && coinEx >= 0 {
// plt := PlatformMgrSingleton.GetPlatform(pd.Platform)
// curVer := int32(0)
// if plt != nil {
// curVer = plt.ExchangeVer
// }
// log := model.NewCoinGiveLogEx(pd.SnId, pd.Name, coin, coinEx, 0, opcode, pd.PromoterTree,
// model.COINGIVETYPE_PAY, curVer, pd.Platform, pd.Channel, pd.BeUnderAgentCode,
// "", "system", pd.PackageID, int32(needFlowRate), int32(needGiveFlowRate))
// if log != nil {
// err := model.InsertGiveCoinLog(log)
// if err == nil {
// if pd.LastExchangeOrder != "" && pd.TotalConvertibleFlow > 0 {
// err = model.UpdateGiveCoinLastFlow(platform, pd.LastExchangeOrder, pd.TotalConvertibleFlow)
// }
// }
// //清空流水更新id
// pd.TotalConvertibleFlow = 0
// pd.LastExchangeOrder = log.LogId.Hex()
// if player == nil {
// //需要回写数据库
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// model.UpdatePlayerExchageFlowAndOrder(platform, member_snid, 0, pd.LastExchangeOrder)
// return nil
// }), nil, "UpdateGiveCoinLogs").StartByExecutor(pd.AccountId)
// }
// }
// }
// }
//
// player.dirty = true
// player.Time2Save()
// if player.scene == nil { //如果在大厅,那么同步下金币
// player.SendDiffData()
// }
// player.SendPlayerRechargeAnswer(coin)
// pack.Tag = webapi.TagCode_SUCCESS
// pack.Msg = ""
// }
// tNode.TransRep.RetFiels = pack
// tNode.Resume()
// if err != nil {
// logger.Logger.Error("AddSubCoinById task marshal data error:", err)
// }
// }), "APIAddCoinById").Start()
// return common.ResponseTag_TransactYield, pack
// } else {
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// pd, _ = model.GetPlayerDataBySnId(platform, int32(member_snid), false, true)
// if pd == nil {
// return errors.New("Player not find.")
// }
// if len(platform) > 0 && pd.Platform != platform {
// return errors.New("player platform forbit.")
// }
// oldGold = pd.Coin
// oldSafeBoxGold = pd.SafeBoxCoin
//
// opcode := int32(common.GainWay_Api_In)
// if coin < 0 {
// opcode = int32(common.GainWay_Api_Out)
// if pd.Coin+coin < 0 {
// return errors.New("coin not enough!")
// }
// }
//
// //if logType != 0 {
// // opcode = logType
// //}
// coinLog := model.NewPayCoinLog(int64(billNo), int32(member_snid), coin, opcode,
// gold_desc, model.PayCoinLogType_Coin, coinEx)
// timeStamp = coinLog.TimeStamp
// err = model.InsertPayCoinLogs(platform, coinLog)
// if err != nil {
// logger.Logger.Errorf("model.InsertPayCoinLogs err:%v log:%v", err, coinLog)
// return err
// }
// //增加帐变记录
// coinlogex := model.NewCoinLogEx(int32(member_snid), coin+coinEx, oldGold+coin+coinEx,
// oldSafeBoxGold, 0, opcode, 0, oper, gold_desc, pd.Platform,
// pd.Channel, pd.BeUnderAgentCode, 0, pd.PackageID, 0)
// err = model.InsertCoinLog(coinlogex)
// if err != nil {
// //回滚到对账日志
// model.RemovePayCoinLog(platform, coinLog.LogId)
// logger.Logger.Errorf("model.InsertCoinLogs err:%v log:%v", err, coinlogex)
// return err
// }
// return err
// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) {
// CacheDataMgr.ClearCacheBill(billNo, platform)
// if data != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = data.(error).Error()
// } else {
// pack.Tag = webapi.TagCode_SUCCESS
// pack.Msg = ""
// if isAccTodayRecharge && coin >= 0 {
// OnPlayerPay(pd, coin)
// }
// if isAccTodayRecharge && coin >= 0 && coinEx >= 0 {
//
// plt := PlatformMgrSingleton.GetPlatform(pd.Platform)
// curVer := int32(0)
// if plt != nil {
// curVer = plt.ExchangeVer
// }
// log := model.NewCoinGiveLogEx(pd.SnId, pd.Name, coin, coinEx, 0, common.GainWay_Api_In, pd.PromoterTree,
// model.COINGIVETYPE_PAY, curVer, pd.Platform, pd.Channel, pd.BeUnderAgentCode,
// "", "system", pd.PackageID, int32(needFlowRate), int32(needGiveFlowRate))
// if log != nil {
// err := model.InsertGiveCoinLog(log)
// if err == nil {
// if pd.LastExchangeOrder != "" && pd.TotalConvertibleFlow > 0 {
// err = model.UpdateGiveCoinLastFlow(platform, pd.LastExchangeOrder, pd.TotalConvertibleFlow)
// }
// }
// //清空流水更新id
// pd.TotalConvertibleFlow = 0
// pd.LastExchangeOrder = log.LogId.Hex()
// if player == nil {
// //需要回写数据库
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// model.UpdatePlayerExchageFlowAndOrder(platform, int32(member_snid), 0, pd.LastExchangeOrder)
// return nil
// }), nil, "UpdateGiveCoinLogs").StartByExecutor(pd.AccountId)
// }
// }
//
// }
// }
//
// tNode.TransRep.RetFiels = pack
// tNode.Resume()
// if err != nil {
// logger.Logger.Error("AddSubCoinById task marshal data error:", err)
// }
// }), "APIAddSubCoinById").Start()
// return common.ResponseTag_TransactYield, pack
// }
// }))
//获取用户金币数量
//WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Member/GetMemberGoldById", WebAPIHandlerWrapper(
// func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
// pack := &webapi.SAMemberGold{}
// msg := &webapi.ASMemberGold{}
//
// err1 := proto.Unmarshal(params, msg)
// if err1 != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "数据序列化失败" + err1.Error()
// return common.ResponseTag_ParamError, pack
// }
//
// platform := PlatformMgrSingleton.GetPlatform(msg.GetPlatform())
// if platform == nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "没有对应的包标识"
// return common.ResponseTag_ParamError, pack
// }
// platform_param := msg.GetPlatform()
// member_snid := msg.GetSnid()
// var err error
// gold := int64(0)
// bank := int64(0)
// p := PlayerMgrSington.GetPlayerBySnId(member_snid)
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// if p != nil {
// if len(platform_param) > 0 && p.Platform != platform_param {
// return errors.New("Platform error.")
// }
// bank = p.SafeBoxCoin
// gold = p.GetCoin()
// return nil
// } else {
// pbi, _ := model.GetPlayerDataBySnId(platform_param, member_snid, true, true)
// if pbi == nil {
// return errors.New("snid error")
// }
// if len(platform_param) > 0 && pbi.Platform != platform_param {
// return errors.New("Platform error.")
// }
// bank = pbi.SafeBoxCoin
// gold = pbi.Coin
// return nil
// }
// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) {
// if data != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = data.(error).Error()
// } else {
//
// pd := &webapi.PlayerCoinData{
// Id: member_snid,
// Gold: gold,
// Bank: bank,
// }
// pack.Tag = webapi.TagCode_SUCCESS
// //pack.Msg = data.(error).Error()
// pack.Data = pd
// }
// tNode.TransRep.RetFiels = pack
// tNode.Resume()
// if err != nil {
// logger.Logger.Error("AddSubCoinById task marshal data error:", err)
// }
// }), "GetMemberGoldById").Start()
//
// return common.ResponseTag_TransactYield, pack
// }))
//获取用户注单记录游戏记录
//WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Member/GetGameHistory", WebAPIHandlerWrapper(
// func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
// pack := &webapi.SAPlayerHistory{}
// msg := &webapi.ASPlayerHistory{}
//
// err1 := proto.Unmarshal(params, msg)
// if err1 != nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "数据序列化失败" + err1.Error()
// return common.ResponseTag_ParamError, pack
// }
//
// platform := PlatformMgrSingleton.GetPlatform(msg.GetPlatform())
// if platform == nil {
// pack.Tag = webapi.TagCode_FAILED
// pack.Msg = "没有对应的包标识"
// return common.ResponseTag_ParamError, pack
// }
// platform_param := msg.GetPlatform()
// member_snid := msg.GetSnid()
//
// gameid := int(msg.GetGameId())
// historyModel := msg.GetGameHistoryModel()
// p := PlayerMgrSington.GetPlayerBySnId(member_snid)
// if p == nil{
// pi,_:=model.GetPlayerDataBySnId(platform_param, member_snid, true, true)
// p = &Player{PlayerData:pi}
// }
//
// if p != nil {
// switch historyModel {
// case PLAYER_HISTORY_MODEL: // 历史记录
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// var genPlayerHistoryInfo = func(spinID string, isFree bool, createdTime, totalBetValue, totalPriceValue, totalBonusValue, multiple int64, player *gamehall.PlayerHistoryInfo) {
// player.SpinID = proto.String(spinID)
// player.CreatedTime = proto.Int64(createdTime)
// player.TotalBetValue = proto.Int64(totalBetValue)
// player.TotalPriceValue = proto.Int64(totalPriceValue)
// player.IsFree = proto.Bool(isFree)
// player.TotalBonusValue = proto.Int64(totalBonusValue)
// player.Multiple = proto.Int64(multiple)
// }
//
// var genPlayerHistoryInfoMsg = func(spinid string, v *model.NeedGameRecord, gdl *model.GameDetailedLog, player *gamehall.PlayerHistoryInfo) {
// switch gameid {
// case common.GameId_Crash:
// data, err := model.UnMarshalGameNoteByHUNDRED(gdl.GameDetailedNote)
// if err != nil {
// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err)
// }
// jsonString, _ := json.Marshal(data)
//
// // convert json to struct
// gnd := model.CrashType{}
// json.Unmarshal(jsonString, &gnd)
//
// //gnd := data.(*model.CrashType)
// for _, curplayer := range gnd.PlayerData {
// if curplayer.UserId == p.SnId {
// genPlayerHistoryInfo(spinid, false, int64(v.Ts), int64(curplayer.UserBetTotal), curplayer.ChangeCoin, 0, int64(curplayer.UserMultiple), player)
// break
// }
// }
// case common.GameId_Avengers:
// data, err := model.UnMarshalAvengersGameNote(gdl.GameDetailedNote)
// if err != nil {
// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err)
// }
// gnd := data.(*model.GameResultLog)
// genPlayerHistoryInfo(spinid, gnd.BaseResult.IsFree, int64(v.Ts), int64(gnd.BaseResult.TotalBet), gnd.BaseResult.WinTotal, gnd.BaseResult.WinSmallGame, 0, player)
// //case common.GameId_EasterIsland:
// // data, err := model.UnMarshalEasterIslandGameNote(gdl.GameDetailedNote)
// // if err != nil {
// // logger.Logger.Errorf("World UnMarshalEasterIslandGameNote error:%v", err)
// // }
// // gnd := data.(*model.EasterIslandType)
// // genPlayerHistoryInfo(spinid, gnd.IsFree, int64(v.Ts), int64(gnd.Score), gnd.TotalPriceValue, gnd.TotalBonusValue, player)
// default:
// logger.Logger.Errorf("World CSHundredSceneGetGameHistoryInfoHandler receive gameid(%v) error", gameid)
// }
// }
//
// gameclass := int32(2)
// spinid := strconv.FormatInt(int64(p.SnId), 10)
// dbGameFrees := srvdata.PBDB_GameFreeMgr.Datas.Arr //.GetData(data.DbGameFree.Id)
// roomtype := int32(0)
// for _, v := range dbGameFrees {
// if int32(gameid) == v.GetGameId() {
// gameclass = v.GetGameClass()
// roomtype = v.GetSceneType()
// break
// }
// }
//
// gpl := model.GetPlayerListByHallEx(p.SnId, p.Platform, 0, 50, 0, 0, roomtype, gameclass, gameid)
// pack := &gamehall.SCPlayerHistory{}
// for _, v := range gpl.Data {
// if v.GameDetailedLogId == "" {
// logger.Logger.Error("World PlayerHistory GameDetailedLogId is nil")
// break
// }
// gdl := model.GetPlayerHistory(p.Platform, v.GameDetailedLogId)
// player := &gamehall.PlayerHistoryInfo{}
// genPlayerHistoryInfoMsg(spinid, v, gdl, player)
// pack.PlayerHistory = append(pack.PlayerHistory, player)
// }
// proto.SetDefaults(pack)
// logger.Logger.Infof("World gameid:%v PlayerHistory:%v ", gameid, pack)
// return pack
// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) {
// if data == nil {
// tNode.TransRep.RetFiels = data
// tNode.Resume()
// }
// }), "CSGetPlayerHistoryHandlerWorld").Start()
// case BIGWIN_HISTORY_MODEL: // 爆奖记录
// jackpotList := JackpotListMgrSington.GetJackpotList(gameid)
// //if len(jackpotList) < 1 {
// // JackpotListMgrSington.GenJackpot(gameid) // 初始化爆奖记录
// // JackpotListMgrSington.after(gameid) // 开启定时器
// // jackpotList = JackpotListMgrSington.GetJackpotList(gameid)
// //}
// pack := JackpotListMgrSington.GetStoCMsg(jackpotList)
// pack.GameId = msg.GetGameId()
// logger.Logger.Infof("World BigWinHistory: %v %v", gameid, pack)
// p.SendToClient(int(gamehall.HundredScenePacketID_PACKET_SC_GAMEBIGWINHISTORY), pack)
// case GAME_HISTORY_MODEL:
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// var genGameHistoryInfo = func(gameNumber string, createdTime, multiple int64, hash string, gamehistory *gamehall.GameHistoryInfo) {
// gamehistory.GameNumber = proto.String(gameNumber)
// gamehistory.CreatedTime = proto.Int64(createdTime)
// gamehistory.Hash = proto.String(hash)
// gamehistory.Multiple = proto.Int64(multiple)
// }
//
// gls := model.GetAllGameDetailedLogsByGameIdAndTs(p.Platform, gameid, 20)
//
// pack := &gamehall.SCPlayerHistory{}
// for _, v := range gls {
//
// gamehistory := &gamehall.GameHistoryInfo{}
//
// data, err := model.UnMarshalGameNoteByHUNDRED(v.GameDetailedNote)
// if err != nil {
// logger.Logger.Errorf("World UnMarshalAvengersGameNote error:%v", err)
// }
// jsonString, _ := json.Marshal(data)
//
// // convert json to struct
// gnd := model.CrashType{}
// json.Unmarshal(jsonString, &gnd)
//
// genGameHistoryInfo(v.LogId, int64(v.Ts), int64(gnd.Rate), gnd.Hash, gamehistory)
// pack.GameHistory = append(pack.GameHistory, gamehistory)
// }
// proto.SetDefaults(pack)
// logger.Logger.Infof("World gameid:%v History:%v ", gameid, pack)
// return pack
// }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) {
// if data == nil {
// tNode.TransRep.RetFiels = data
// tNode.Resume()
// }
// }), "CSGetGameHistoryHandlerWorld").Start()
// default:
// logger.Logger.Errorf("World CSHundredSceneGetGameHistoryInfoHandler receive historyModel(%v) error", historyModel)
// }
// }
//
// return common.ResponseTag_TransactYield, pack
// }))
//API用户加减币 //API用户加减币
WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Game/QPAPIAddSubCoinById", WebAPIHandlerWrapper( WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Game/QPAPIAddSubCoinById", WebAPIHandlerWrapper(
func(tNode *transact.TransNode, params []byte) (int, proto.Message) { func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
@ -2123,42 +1516,6 @@ func init() {
return common.ResponseTag_Ok, pack return common.ResponseTag_Ok, pack
})) }))
// 水池开关
//WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Game/GamePoolSwitch", WebAPIHandlerWrapper(
// func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
// pack := &webapi_proto.SAGamePoolSwitch{}
// msg := &webapi_proto.ASGamePoolSwitch{}
// err := proto.Unmarshal(params, msg)
// if err != nil {
// pack.Tag = webapi_proto.TagCode_FAILED
// pack.Msg = "数据序列化失败" + err.Error()
// return common.ResponseTag_ParamError, pack
// }
// if msg.GameFreeId == 0 {
// pack.Tag = webapi_proto.TagCode_FAILED
// pack.Msg = "GameFreeId id zero"
// return common.ResponseTag_ParamError, pack
// }
// gs := GameSessMgrSington.GetGameSess(int(msg.ServerId))
// if gs != nil {
// msg := &server.WGGamePoolSwitch{
// Platform: msg.GetPlatform(),
// GameFreeId: msg.GetGameFreeId(),
// ServerId: msg.GetServerId(),
// GroupId: msg.GetGroupId(),
// Switch: msg.GetSwitch(),
// }
// gs.Send(int(server.SSPacketID_PACKET_WG_GAMEPOOLSWITCH), msg)
// } else {
// pack.Tag = webapi_proto.TagCode_FAILED
// pack.Msg = "no find srvId"
// return common.ResponseTag_ParamError, pack
// }
// pack.Tag = webapi_proto.TagCode_SUCCESS
// pack.Msg = "switch game pool success"
// return common.ResponseTag_Ok, pack
// }))
//更新水池 //更新水池
// 修改本地缓存修改数据库同步到gamesrv // 修改本地缓存修改数据库同步到gamesrv
WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Game/UpdateGamePool", WebAPIHandlerWrapper( WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Game/UpdateGamePool", WebAPIHandlerWrapper(
@ -2253,23 +1610,6 @@ func init() {
return common.ResponseTag_TransactYield, nil return common.ResponseTag_TransactYield, nil
})) }))
//查询水池
//WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Game/QueryAllGamePool", WebAPIHandlerWrapper(
// func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
// pack := &webapi_proto.SAQueryAllGamePool{}
// msg := &webapi_proto.ASQueryAllGamePool{}
// err := proto.Unmarshal(params, msg)
// if err != nil {
// pack.Tag = webapi_proto.TagCode_FAILED
// pack.Msg = "数据序列化失败" + err.Error()
// return common.ResponseTag_ParamError, pack
// }
// pageNo := msg.GetPageNo()
// pageSize := msg.GetPageSize()
// StartQueryCoinPoolStatesTransact(tNode, int32(pageNo), int32(pageSize))
// return common.ResponseTag_TransactYield, nil
// }))
//////////////////////////房间//////////////////////////
WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Cache/GetRoom", WebAPIHandlerWrapper( WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Cache/GetRoom", WebAPIHandlerWrapper(
func(tNode *transact.TransNode, params []byte) (int, proto.Message) { func(tNode *transact.TransNode, params []byte) (int, proto.Message) {
pack := &webapiproto.SAGetRoom{} pack := &webapiproto.SAGetRoom{}
@ -3927,7 +3267,7 @@ func init() {
award.Diamond = msg.GetAward().Diamond award.Diamond = msg.GetAward().Diamond
if msg.GetAward().GetItemId() != nil { if msg.GetAward().GetItemId() != nil {
for _, item := range msg.GetAward().ItemId { for _, item := range msg.GetAward().ItemId {
if v := srvdata.PBDB_GameItemMgr.GetData(item.ItemId); item != nil { if v := srvdata.GameItemMgr.Get(msg.Platform, item.ItemId); item != nil {
if item.ItemNum == 0 { if item.ItemNum == 0 {
pack.Tag = webapiproto.TagCode_JYB_DATA_ERROR pack.Tag = webapiproto.TagCode_JYB_DATA_ERROR
pack.Msg = "ItemNum failed" pack.Msg = "ItemNum failed"
@ -4026,7 +3366,7 @@ func init() {
return common.ResponseTag_ParamError, pack return common.ResponseTag_ParamError, pack
} }
//cdata := ShopMgrSington.GetExchangeData(msg.GoodsId) //cdata := ShopMgrSington.GetExchangeData(msg.GoodsId)
item := srvdata.PBDB_GameItemMgr.GetData(VCard) item := srvdata.GameItemMgr.Get(platform, common.ItemIDVCard)
if item == nil { if item == nil {
pack.Tag = webapiproto.TagCode_FAILED pack.Tag = webapiproto.TagCode_FAILED
pack.Msg = "item is nil" pack.Msg = "item is nil"
@ -4037,11 +3377,11 @@ func init() {
var items []*Item var items []*Item
//V卡 //V卡
if addvcoin > 0 { if addvcoin > 0 {
items = append(items, &Item{ItemId: VCard, ItemNum: int64(addvcoin)}) items = append(items, &Item{ItemId: common.ItemIDVCard, ItemNum: int64(addvcoin)})
} }
//金券 //金券
if jPrice > 0 { if jPrice > 0 {
items = append(items, &Item{ItemId: JCard, ItemNum: int64(jPrice)}) items = append(items, &Item{ItemId: common.ItemIDJCard, ItemNum: int64(jPrice)})
} }
remark := fmt.Sprintf("兑换撤单 %v-%v", msg.GoodsId, msg.Name) remark := fmt.Sprintf("兑换撤单 %v-%v", msg.GoodsId, msg.Name)
if player != nil { if player != nil {
@ -4104,6 +3444,7 @@ func init() {
player.AddDiamond(int64(info.Amount[1]), 0, info.GainWay, "Callback", info.Remark) player.AddDiamond(int64(info.Amount[1]), 0, info.GainWay, "Callback", info.Remark)
} }
player.AddMoneyPayTotal(int64(info.ConsumeNum)) player.AddMoneyPayTotal(int64(info.ConsumeNum))
player.MoneyTotal += int64(info.ConsumeTypeNum)
player.dirty = true player.dirty = true
player.SendDiffData() player.SendDiffData()
info.Amount[2] = player.GetVIPExpByPay(info.ConsumeNum) info.Amount[2] = player.GetVIPExpByPay(info.ConsumeNum)
@ -4130,6 +3471,11 @@ func init() {
Platform: player.Platform, Platform: player.Platform,
StartTs: PlatformMgrSingleton.GetConfig(player.Platform).PermitStartTs, StartTs: PlatformMgrSingleton.GetConfig(player.Platform).PermitStartTs,
SnId: player.SnId, SnId: player.SnId,
Ts: time.Now().Unix(),
})
TaskSubjectSingleton.Touch(common.TaskTypeBuyPermit, &TaskData{
SnId: player.SnId,
Num: 1,
}) })
} }
switch info.Remark { switch info.Remark {
@ -4423,7 +3769,6 @@ func init() {
} }
tNode.TransRep.RetFiels = pack tNode.TransRep.RetFiels = pack
tNode.Resume() tNode.Resume()
}) })
return common.ResponseTag_TransactYield, pack return common.ResponseTag_TransactYield, pack
} }
@ -4458,7 +3803,7 @@ func getPlayerDataParam(param *playerDataParam) *model.WebPlayerDataParam {
if param.Items == nil { if param.Items == nil {
b := BagMgrSingleton.GetBagInfo(param.P.SnId) b := BagMgrSingleton.GetBagInfo(param.P.SnId)
for _, v := range b.BagItem { for _, v := range b.BagItem {
e := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) e := srvdata.GameItemMgr.Get(param.P.Platform, v.ItemId)
if e == nil || v.ItemNum <= 0 { if e == nil || v.ItemNum <= 0 {
continue continue
} }
@ -4476,7 +3821,7 @@ func getPlayerDataParam(param *playerDataParam) *model.WebPlayerDataParam {
} }
} else { } else {
for _, v := range param.Items.BagItem { for _, v := range param.Items.BagItem {
e := srvdata.PBDB_GameItemMgr.GetData(v.ItemId) e := srvdata.GameItemMgr.Get(param.P.Platform, v.ItemId)
if e == nil || v.ItemNum <= 0 { if e == nil || v.ItemNum <= 0 {
continue continue
} }

View File

@ -215,6 +215,12 @@ func (this *WelfareMgr) UpdatePhoneLotteryStatus(cfg *webapi_proto.WelfarePhoneL
} }
} }
// 更新钻石抽奖配置
func (this *WelfareMgr) UpdateDiamondLotteryConfig(cfg *webapi_proto.DiamondLotteryConfig) {
info := this.GetConfig(cfg.Platform)
info.DiamondLotteryConfig = cfg
}
func (this *WelfareMgr) GetPhoneLotteryStatus(platform string) int32 { func (this *WelfareMgr) GetPhoneLotteryStatus(platform string) int32 {
info := this.GetConfig(platform) info := this.GetConfig(platform)
if info.WelfarePhoneLotteryStatus != nil { if info.WelfarePhoneLotteryStatus != nil {
@ -840,6 +846,7 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) {
} }
typeId := addUpDate2Type[0].Id typeId := addUpDate2Type[0].Id
addUpDate2Num := addUpDate2Type[0].Num addUpDate2Num := addUpDate2Type[0].Num
var cost []*model.ItemInfo
if typeId == 1 { if typeId == 1 {
Num += 1 Num += 1
//看广告任务 //看广告任务
@ -855,6 +862,10 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) {
p.AddDiamond(int64(-addUpDate2Num), 0, common.GainWaySign7Con, "system", "累计签到进阶奖励钻石消耗") p.AddDiamond(int64(-addUpDate2Num), 0, common.GainWaySign7Con, "system", "累计签到进阶奖励钻石消耗")
logger.Logger.Trace("累计签到进阶奖励扣除钻石uid = ", p.SnId) logger.Logger.Trace("累计签到进阶奖励扣除钻石uid = ", p.SnId)
EndTime = -1 EndTime = -1
cost = append(cost, &model.ItemInfo{
ItemId: common.ItemIDDiamond,
ItemNum: int64(addUpDate2Num),
})
} }
p.WelfData.Sign7.Addup2Data[day] = make(map[int32]int64) p.WelfData.Sign7.Addup2Data[day] = make(map[int32]int64)
p.WelfData.Sign7.Addup2Data[day][Num+1] = EndTime p.WelfData.Sign7.Addup2Data[day][Num+1] = EndTime
@ -873,7 +884,18 @@ func (this *WelfareMgr) GetAddUp2Award(p *Player, day int32) {
items = append(items, item) items = append(items, item)
} }
} }
BagMgrSingleton.AddItems(p, items, 0, common.GainWaySign7Add, "system", "累计签到进阶奖励获得", 0, 0, false) BagMgrSingleton.AddItemsV2(&ItemParam{
P: p,
Change: items,
Cost: cost,
Add: 0,
GainWay: common.GainWaySign7Add,
Operator: "system",
Remark: "累计签到进阶奖励获得",
gameId: 0,
gameFreeId: 0,
noLog: false,
})
} }
//通知客户端 //通知客户端
this.UpdateAddUp2Date(p, Num, day, EndTime) this.UpdateAddUp2Date(p, Num, day, EndTime)
@ -1009,7 +1031,7 @@ func (this *WelfareMgr) Welfareturnplate(p *Player, op int32) bool { // 0 红点
addUpDate = append(addUpDate, d.AddUpDay) addUpDate = append(addUpDate, d.AddUpDay)
} }
} }
signIndex := p.WelfData.Sign7.SignIndex signIndex = p.WelfData.Sign7.SignIndex % int32(len(turnplate.RateList))
for _, addupday := range addUpDate { for _, addupday := range addUpDate {
if addupday <= signIndex { if addupday <= signIndex {
falg := false falg := false

Binary file not shown.

Binary file not shown.

BIN
xlsx/DB_Skin.xlsx Normal file

Binary file not shown.

BIN
xlsx/DB_SkinLevel.xlsx Normal file

Binary file not shown.

Binary file not shown.