解决冲突

This commit is contained in:
sk 2025-01-13 14:30:46 +08:00
commit 21993b08da
132 changed files with 17910 additions and 4393 deletions

View File

@ -1,7 +1,5 @@
stages:
- lock
- build
- unlock
variables:
GOPROXY: "https://goproxy.cn,direct"
@ -20,19 +18,6 @@ cache:
- ${GOPATH}/pkg/mod
- ${GOPATH}/bin
# 锁定作业,防止并发流水线执行
lock_job:
stage: lock
script:
- |
if [ -f /tmp/ci_lock_$CI_COMMIT_REF_NAME ]; then
echo "流水线($CI_COMMIT_REF_NAME)已在运行,等待..."
exit 1
else
touch /tmp/ci_lock_$CI_COMMIT_REF_NAME
echo "获得锁定,开始流水线($CI_COMMIT_REF_NAME)。"
fi
build-job:
stage: build
only:
@ -40,10 +25,12 @@ build-job:
- release
script:
# 拉取代码
- echo "拉取代码"
- git checkout $CI_COMMIT_REF_NAME
- git pull origin $CI_COMMIT_REF_NAME
# 替换 go.mod 中的 ../goserver
- echo "替换 go.mod 中的 ../goserver"
- sed -i "s|mongo.games.com/goserver => .*|mongo.games.com/goserver => $GOPATH/src/$GoServerSrcPath|" go.mod
- if [ ! -z "$(git status --porcelain go.mod go.sum)" ]; then
@ -51,7 +38,7 @@ build-job:
fi
# 编译
- echo '编译'
- echo "编译"
- if [ "$GOMODTIDY" == 1 ]; then
go mod tidy;
fi
@ -65,14 +52,14 @@ build-job:
done < ./programs.txt
# 拷贝文件
- echo '拷贝文件'
- echo "拷贝文件"
- rm -rf ./temp
- mkdir ./temp
- mkdir ./temp/data
- cp -rfp ./data/* ./temp/data
# 删除自定义配置
- echo '删除自定义配置'
- echo "删除自定义配置"
- |
while IFS= read -r line || [[ -n $line ]]
do
@ -81,15 +68,16 @@ build-job:
done < ./exclude.txt
# 拷贝可执行程序
- echo '拷贝可执行程序'
- echo "拷贝可执行程序"
- |
while IFS= read -r line || [[ -n $line ]]
do
echo "拷贝 $line"
mv ./$line/$line ./temp/$line
done < ./programs.txt
# 获取部署环境信息
- echo "获取部署环境信息"
- if [ "$CI_COMMIT_BRANCH" == "develop" ]; then
SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY_DEVELOP";
REMOTE_HOST="$REMOTE_HOST_DEVELOP";
@ -120,12 +108,5 @@ build-job:
- rsync -rvz --delete ./temp/ $REMOTE_USER@$REMOTE_HOST:$BinPath
# 触发部署
- "curl -X POST --fail -F token=$SERVER_CI_TOKEN -F ref=release -F variables[ServerName]=$ServerName https://git.pogorockgames.com/api/v4/projects/31/trigger/pipeline"
# 解锁作业,释放锁定
unlock_job:
stage: unlock
script:
- rm -f /tmp/ci_lock_$CI_COMMIT_REF_NAME
- echo "释放锁定,流水线结束(/$CI_COMMIT_REF_NAME)。"
when: always
- echo "触发部署"
- "curl -X POST --fail -F token=$SERVER_CI_TOKEN -F ref=release -F variables[ServerName]=$ServerName https://git.pogorockgames.com/api/v4/projects/31/trigger/pipeline"

105
clienttest/action_login.go Normal file
View File

@ -0,0 +1,105 @@
package main
import (
"encoding/json"
"fmt"
"math/rand"
"mongo.games.com/game/protocol/activity"
"mongo.games.com/goserver/core/timer"
"time"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/game/model"
"mongo.games.com/game/proto"
loginproto "mongo.games.com/game/protocol/login"
playerproto "mongo.games.com/game/protocol/player"
)
func init() {
// 心跳
netlib.Register(int(loginproto.GatePacketID_PACKET_SC_PONG), loginproto.SCPong{}, SCPong)
// 登录
netlib.Register(int(loginproto.LoginPacketID_PACKET_SC_LOGIN), loginproto.SCLogin{}, SCLogin)
// 玩家信息
netlib.Register(int(playerproto.PlayerPacketID_PACKET_SC_PLAYERDATA), playerproto.SCPlayerData{}, SCPlayerData)
netlib.Register(int(activity.PushCoinPacketID_PACKET_SCPushCoinInfo), activity.SCPushCoinInfo{}, SCPrint)
}
func SCPong(s *netlib.Session, packetid int, data interface{}) error {
accountID := s.GetAttribute(SessionAttributeClientAccountId)
logger.Logger.Tracef("SCPong username:%v %v", accountID, data)
return nil
}
func SCLogin(s *netlib.Session, packetid int, data interface{}) error {
logger.Logger.Trace("SCLogin ", data)
msg, ok := data.(*loginproto.SCLogin)
if !ok {
return nil
}
if msg.GetOpRetCode() != loginproto.OpResultCode_OPRC_Sucess {
accountID := s.GetAttribute(SessionAttributeClientAccountId)
logger.Logger.Error("登录失败 ", accountID)
s.Close()
return nil
}
csPlayerData := &playerproto.CSPlayerData{
AccId: msg.GetAccId(),
}
pp := &model.PlayerParams{
Platform: 1,
Ip: fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)),
City: "北京",
Logininmodel: "app",
}
d, err := json.Marshal(pp)
if err == nil {
csPlayerData.Params = proto.String(string(d))
}
s.Send(int(playerproto.PlayerPacketID_PACKET_CS_PLAYERDATA), csPlayerData)
logger.Logger.Info("登录成功 ", msg.GetAccId())
return nil
}
func SCPlayerData(s *netlib.Session, packetid int, data interface{}) error {
logger.Logger.Trace("SCPlayerData ", data)
msg, ok := data.(*playerproto.SCPlayerData)
if !ok {
return nil
}
if msg.GetOpRetCode() != playerproto.OpResultCode_OPRC_Sucess {
accountID := s.GetAttribute(SessionAttributeClientAccountId)
logger.Logger.Errorf("获取玩家信息失败 %v", accountID)
s.Close()
return nil
}
s.SetAttribute(SessionAttributeUser, msg)
StartSessionPingTimer(s, timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool {
if !s.IsConned() {
StopSessionPingTimer(s)
return false
}
pack := &loginproto.CSPing{}
s.Send(int(loginproto.GatePacketID_PACKET_CS_PING), pack)
return true
}), nil, time.Second*time.Duration(60+rand.Int31n(100)), -1)
s.Send(int(activity.PushCoinPacketID_PACKET_CSPushCoinInfo), &activity.CSPushCoinInfo{})
return nil
}
func SCPrint(s *netlib.Session, packetid int, data interface{}) error {
logger.Logger.Info("SCPrint ", data)
return nil
}

35
clienttest/config.go Normal file
View File

@ -0,0 +1,35 @@
package main
import (
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
)
var Config = &Configuration{}
type Configuration struct {
Count int // 机器人总数
AppId string // appID
Connects netlib.SessionConfig // 网络连接配置
}
func (this *Configuration) Name() string {
return "benchmark"
}
func (this *Configuration) Init() error {
logger.Logger.Tracef("%+v", *this)
if this.Count == 0 {
this.Count = 20
}
return nil
}
func (this *Configuration) Close() error {
return nil
}
func init() {
core.RegistePackage(Config)
}

67
clienttest/config.yaml Normal file
View File

@ -0,0 +1,67 @@
netlib:
SrvInfo:
Name: BenchmarkServer
Type: 9
Id: 902
AreaID: 1
Banner:
- =================
- benchmark server
- =================
IoServices: []
module:
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 100
executor:
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 0
Worker:
WorkerCnt: 8
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 0
timer:
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 100
signal:
SupportSignal: true
cmdline:
SupportCmdline: true
benchmark:
Count: 1
AppId: 5c56d1644966f078bfb90c71
Connects:
Id: 402
Type: 4
AreaId: 1
Name: ClientService
Ip: 127.0.0.1
Port: 11001
Protocol: tcp
Path: /
MaxDone: 200
MaxPend: 200
MaxPacket: 65535
MaxConn: 2000
RcvBuff: 4096
SndBuff: 4096
WriteTimeout: 3600
ReadTimeout: 3600
SoLinger: 10
IsInnerLink: true
NoDelay: true
SupportFragment: true
AuthKey: www.jxjy.games.cn
IsClient: true
AllowMultiConn: true
FilterChain:
- session-filter-auth
HandlerChain:
- handler-gate-session

69
clienttest/connect.go Normal file
View File

@ -0,0 +1,69 @@
package main
import (
"time"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
"mongo.games.com/goserver/core/netlib"
)
const (
// RobotSessionStartId 机器人session开始id
RobotSessionStartId = 100000000
)
var (
BenchMarkModule = &BenchMark{}
WaitConnectSessions []*netlib.SessionConfig
)
// NewSession 新建session
// id 连接id, 默认自动分配
func NewSession(id ...int) {
cfg := Config.Connects
if len(id) > 0 && id[0] > 0 {
cfg.Id = id[0]
} else {
BenchMarkModule.idx++
cfg.Id = BenchMarkModule.idx
}
cfg.Init()
logger.Logger.Info("waite connect session id=", cfg.Id)
WaitConnectSessions = append(WaitConnectSessions, &cfg)
}
type BenchMark struct {
idx int
}
func (m *BenchMark) ModuleName() string {
return "benchmark-module"
}
func (m *BenchMark) Init() {
m.idx = RobotSessionStartId
for i := 0; i < Config.Count; i++ {
NewSession()
}
}
// Update 机器开始连接游戏服务器
func (m *BenchMark) Update() {
n := len(WaitConnectSessions)
if n > 0 {
config := WaitConnectSessions[n-1]
WaitConnectSessions = WaitConnectSessions[:n-1]
if err := netlib.Connect(config); err != nil {
logger.Logger.Error("netlib.Connect error", err)
}
}
}
func (m *BenchMark) Shutdown() {
module.UnregisteModule(m)
}
func init() {
module.RegisteModule(BenchMarkModule, time.Millisecond, 1)
}

31
clienttest/constants.go Normal file
View File

@ -0,0 +1,31 @@
package main
import (
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/goserver/core/timer"
"time"
)
const (
SessionAttributeClientAccountId int = iota // 账号
SessionAttributeUser
SessionAttributePingTimer
)
func StartSessionPingTimer(s *netlib.Session, act timer.TimerAction, ud interface{}, interval time.Duration, times int) bool {
StopSessionPingTimer(s)
if hTimer, ok := timer.StartTimer(act, ud, interval, times); ok {
s.SetAttribute(SessionAttributePingTimer, hTimer)
return true
}
return false
}
func StopSessionPingTimer(s *netlib.Session) {
if h, ok := s.GetAttribute(SessionAttributePingTimer).(timer.TimerHandle); ok {
if h != timer.TimerHandle(0) {
timer.StopTimer(h)
s.RemoveAttribute(SessionAttributePingTimer)
}
}
}

View File

@ -0,0 +1,97 @@
package main
import (
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"math/rand"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
loginproto "mongo.games.com/game/protocol/login"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"strconv"
"sync/atomic"
"time"
)
/*
添加到客户端管理器管理器负责登录
当连接断开时从管理器中移除判断是否需要重连
*/
const (
GateSessionHandlerName = "handler-gate-session"
)
type GateSessionHandler struct {
netlib.BasicSessionHandler
}
func (g *GateSessionHandler) GetName() string {
return GateSessionHandlerName
}
func (g *GateSessionHandler) GetInterestOps() uint {
return 1<<netlib.InterestOps_Opened |
1<<netlib.InterestOps_Closed
}
func (g *GateSessionHandler) OnSessionOpened(s *netlib.Session) {
// 登录账号
StartLogin(s)
return
}
func (g *GateSessionHandler) OnSessionClosed(s *netlib.Session) {
}
func init() {
netlib.RegisteSessionHandlerCreator(GateSessionHandlerName, func() netlib.SessionHandler {
return &GateSessionHandler{}
})
}
var UserNameIndex int64
func StartLogin(s *netlib.Session) {
ts := time.Now().UnixNano()
username := fmt.Sprintf("benchmark-%v", atomic.AddInt64(&UserNameIndex, 1))
s.SetAttribute(SessionAttributeClientAccountId, username)
csLogin := &loginproto.CSLogin{
Username: username,
TimeStamp: ts,
Platform: "1",
Channel: "",
PlatformTag: "test.win88.yy_android",
}
params := &model.PlayerParams{
Ip: fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)),
City: "北京",
Platform: 1,
Logininmodel: "app",
}
data, err := json.Marshal(params)
if err == nil {
csLogin.Params = string(data[:])
}
h := md5.New()
io.WriteString(h, fmt.Sprintf("%v%v", username, Config.AppId))
pwd := hex.EncodeToString(h.Sum(nil))
h.Reset()
io.WriteString(h, fmt.Sprintf("%v%v%v", pwd, Config.AppId, ts))
pwd = hex.EncodeToString(h.Sum(nil))
csLogin.Password = pwd
csLogin.LoginType = 0
csLogin.Sign = common.MakeMd5String(csLogin.GetUsername(), csLogin.GetPassword(),
strconv.Itoa(int(csLogin.GetTimeStamp())), csLogin.GetParams(), Config.AppId)
s.Send(int(loginproto.LoginPacketID_PACKET_CS_LOGIN), csLogin)
logger.Logger.Infof("账号 [%v] 开始登录", username)
}

22
clienttest/logger.xml Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8" ?>
<seelog type="adaptive" mininterval="2000000" maxinterval="100000000" critmsgcount="500" minlevel="trace">
<exceptions>
<exception filepattern="test*" minlevel="error"/>
</exceptions>
<outputs formatid="all">
<rollingfile formatid="all" type="size" filename="./all.log" maxsize="50000000" maxrolls="5" />
<filter levels="info,trace,warn,error">
<console formatid="fmtinfo"/>
</filter>
<filter levels="error,critical" formatid="fmterror">
<console/>
<file path="errors.log"/>
</filter>
</outputs>
<formats>
<format id="fmtinfo" format="[%Date][%Time] [%Level] %Msg%n"/>
<format id="fmterror" format="[%Date][%Time] [%LEVEL] [%FuncShort @ %File.%Line] %Msg%n"/>
<format id="all" format="[%Date][%Time] [%Level] [@ %File.%Line] %Msg%n"/>
<format id="criticalemail" format="Critical error on our server!\n %Time %Date %RelFile %Func %Msg \nSent by Seelog"/>
</formats>
</seelog>

24
clienttest/main.go Normal file
View File

@ -0,0 +1,24 @@
package main
import (
_ "mongo.games.com/game"
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/module"
)
func main() {
defer core.ClosePackages()
core.LoadPackages("config.yaml")
// core hook
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
return nil
})
core.RegisteHook(core.HOOK_AFTER_STOP, func() error {
return nil
})
// module模块
waiter := module.Start()
waiter.Wait("main()")
}

View File

@ -99,6 +99,7 @@ const (
GameId_AngerUncle = 606 // 愤怒大叔
GameId_SmallRoket = 607 // 小火箭
GameId_Clawdoll = 608 // 娃娃机
GameId_PushCoin = 609 // 推币机
__GameId_ThrGame_Min__ = 700 //################三方类################
GameId_Thr_Dg = 701 //DG Game
GameId_Thr_XHJ = 901 ///DG Game
@ -118,6 +119,7 @@ const (
GameDifFruits = "306" // 水果机
GameDifRichblessed = "307" // 多彩多福
GameDifClawdoll = "608" // 娃娃机
GameDifPushCoin = "609" // 推币机
)
// IsTienLenYuLe TienLen娱乐
@ -211,123 +213,142 @@ const (
)
const (
GainWay_NewPlayer int32 = 0 //新建角色
GainWay_Pay = 1 //后台增加(主要是充值)
GainWay_ByPMCmd = 2 //pm命令
GainWay_MatchBreakBack = 3 //退赛退还
GainWay_MatchSystemSupply = 4 //比赛奖励
GainWay_Exchange = 5 //兑换
GainWay_ServiceFee = 6 //桌费
GainWay_CoinSceneWin = 7 //金豆场赢取
GainWay_CoinSceneLost = 8 //金豆场输
GainWay_CoinSceneEnter = 9 //进入金币场预扣
GainWay_ShopBuy = 10 //商城购买或者兑换
GainWay_CoinSceneLeave = 11 //金豆场回兑
GainWay_HundredSceneWin = 12 //万人场赢取
GainWay_HundredSceneLost = 13 //万人场输
GainWay_MessageAttach = 14 //邮件
GainWay_SafeBoxSave = 15 //保险箱存入
GainWay_SafeBoxTakeOut = 16 //保险箱取出
GainWay_Fishing = 17 //捕鱼
GainWay_CoinSceneExchange = 18 //金豆场兑换
GainWay_UpgradeAccount = 19 //升级账号
GainWay_API_AddCoin = 20 //API操作钱包
GainWay_GoldCome = 21 //财神降临
GainWay_Transfer_System2Thrid = 22 //系统平台转入到第三方平台的金币
GainWay_Transfer_Thrid2System = 23 //第三方平台转入到系统平台的金币
GainWay_RebateTask = 24 //返利获取
GainWay_IOSINSTALLSTABLE = 25 //ios安装奖励
GainWay_VirtualChange = 26 //德州虚拟账变
GainWay_CreatePrivateScene = 27 //创建私有房间
GainWay_PrivateSceneReturn = 28 //解散私有房间返还
GainWay_OnlineRandCoin = 29 //红包雨
GainWay_Expire = 30 //到期清理
GainWay_PromoterBind = 31 //手动绑定推广员
GainWay_GradeShopReturn = 32 //积分商城撤单退还积分
GainWay_Api_In = 33 //转移金币
GainWay_Api_Out = 34 //转移金币
GainWay_Shop_Buy = 35 //购买记录
GainWay_MAIL_MTEM = 36 //邮件领取道具
GainWay_Item_Sale = 37 //道具出售
GainWay_ReliefFund = 38 //领取救济金
GainWay_Shop_Revoke = 39 //撤单
GainWay_ActSign = 40 //
GainWay_MatchSignup = 41 //比赛报名费用
GainWay_MatchSeason = 42 //比赛赛季奖励
GainWay_ActSignNew = 43 //新签到
GainWay_ActTurnplate = 44 //轮盘
GainWay_ActBlindBox = 45 //盲盒
GainWay_ActFirstPay = 46 //首充
GainWay_VIPGift = 47 //vip礼包
GainWay_ActContinuousPay = 48 //连续充值
GainWay_ActJybAward = 49 //礼包码兑换
GainWay_LeaveDeduct = 50 //离开扣分
GainWay_LeaveCombat = 51 //离开补偿
GainWay_RankMatch = 52 //排位赛段位奖励
GainWay_AddBag = 53 //增加背包接口调用
GainWay_SmallRocket = 54 //小火箭收入
GainWay_BindTel = 55 //绑定手机号
GainWay_ReliefFund2 = 56 //救济金看视频双倍领取
GainWay_ActTurnplate2 = 57 //轮盘看视频双倍领取
GainWay_ActSignNew2 = 58 //签到看视频双倍领取
GainWay_ItemUse = 59 //道具使用
GainWay_PhoneScore = 60 //手机积分活动
GainWay_RankReward = 61 //排位奖励
GainWay_TaskReward = 62 //任务奖励
GainWay_Interact = 63 //房间内互动效果
GainWayItemCollectExchange = 64 //集卡活动兑换
GainWay_WeekCardAward = 65 //周卡奖励
GainWay_PigrankTakeCoin = 66 //存钱罐领取耗费钻石
GainWay_PigrankGainCoin = 67 //存钱罐打开获取金币
GainWay_ItemMove = 68 //道具赠送
GainWay_RoleUpgrade = 69 //角色升级
GainWay_PetUpgrade = 70 //宠物升级
GainWay_Game = 71 //游戏掉落
GainWayItemCollectLogin = 73 //集卡活动登录
GainWay_Collect = 74 //集卡活动
GainWayItemPhoneScoreExchange = 75 //抽手机活动兑换
GainWayItemTaskInvite = 78 //邀请任务
GainWayItemTaskNewPlayer = 79 //新手任务
GainWayItemTaskAchievement = 80 //成就任务
GainWayItemTaskEveryDay = 81 //每日任务
GainWayItemWeekActive = 82 //周活跃奖励
GainWayContinueSign = 83 //累计签到
GainWayBackend = 84 // 后台操作
GainWayBuyCoin = 85 // 商城购买金币
GainWayBuyItem = 86 // 商城购买道具
GainWayBuyWeekCard = 87 // 商城购买周卡
GainWayVipBuyCoin = 88 // vip商城购买金币
GainWaySign7Con = 89 // 累计签到进阶奖励消耗
GainWay_PigrankGainDiamond = 90 //存钱罐打开获取钻石
GainWaySign7Add = 91 // 累计签到进阶奖励获得
GainWayItemChange = 92 //背包内使用道具兑换话费
GainWayPetSkillLevelUp = 93 //宠物技能升级
GainWayPermitAward = 94 // 赛季通行证等级奖励
GainWayItemPermitRank = 95 // 赛季通行证排行奖励
GainWayPermitExchangeCost = 96 // 赛季通行证兑换消耗
GainWayPermitExchangeGain = 97 // 赛季通行证兑换获得
GainWayItemTaskPermit = 98 // 赛季通行证任务
GainWayDiamondLottery = 99 //钻石抽奖
GainWaySkinUnLock = 100 // 皮肤解锁消耗
GainWaySkinUpGrade = 101 // 皮肤升级消耗
GainWayItemFen = 102 // 道具分解消耗
GainWayItemFenGain = 103 // 道具分解获得
GainWayGuide = 104 //新手引导奖励
GainWayVipGift9 = 105 //vip等级礼包
GainWayRoomCost = 106 //房费消耗
GainWayRoomGain = 107 //房卡场获得
GainWayItemShop = 108 // 交易市场道具交易
GainWayClawdollCostItem = 109 // 娃娃机上分扣道具
GainWayItemShopChangeDoll = 110 // 商城兑换娃娃
GainWayItemBagChangeDoll = 111 // 背包内兑换娃娃
GainWayClawdollCatch = 112 // 娃娃机抓取到娃娃获取卡
GainWayItemBagChangeDollRevocation = 113 //娃娃兑换后台撤销
GainWayPermitReset = 114 //赛季通行证积分重置
GainWayClientUpgrade = 115 //客户端升级奖励
GainWayLottery = 116 //开奖码抽奖
GainWayGuide2 = 117 // 竞技馆引导奖励
GainWayCompound = 118 // 道具合成消耗
GainWayCompoundGain = 119 // 道具合成获得
GainWay_NewPlayer int32 = 0 //新建角色
GainWay_Pay = 1 //后台增加(主要是充值)
GainWay_ByPMCmd = 2 //pm命令
GainWay_MatchBreakBack = 3 //退赛退还
GainWay_MatchSystemSupply = 4 //比赛奖励
GainWay_Exchange = 5 //兑换
GainWay_ServiceFee = 6 //桌费
GainWay_CoinSceneWin = 7 //金豆场赢取
GainWay_CoinSceneLost = 8 //金豆场输
GainWay_CoinSceneEnter = 9 //进入金币场预扣
GainWay_ShopBuy = 10 //商城购买或者兑换
GainWay_CoinSceneLeave = 11 //金豆场回兑
GainWay_HundredSceneWin = 12 //万人场赢取
GainWay_HundredSceneLost = 13 //万人场输
GainWay_MessageAttach = 14 //邮件
GainWay_SafeBoxSave = 15 //保险箱存入
GainWay_SafeBoxTakeOut = 16 //保险箱取出
GainWay_Fishing = 17 //捕鱼
GainWay_CoinSceneExchange = 18 //金豆场兑换
GainWay_UpgradeAccount = 19 //升级账号
GainWay_API_AddCoin = 20 //API操作钱包
GainWay_GoldCome = 21 //财神降临
GainWay_Transfer_System2Thrid = 22 //系统平台转入到第三方平台的金币
GainWay_Transfer_Thrid2System = 23 //第三方平台转入到系统平台的金币
GainWay_RebateTask = 24 //返利获取
GainWay_IOSINSTALLSTABLE = 25 //ios安装奖励
GainWay_VirtualChange = 26 //德州虚拟账变
GainWay_CreatePrivateScene = 27 //创建私有房间
GainWay_PrivateSceneReturn = 28 //解散私有房间返还
GainWay_OnlineRandCoin = 29 //红包雨
GainWay_Expire = 30 //到期清理
GainWay_PromoterBind = 31 //手动绑定推广员
GainWay_GradeShopReturn = 32 //积分商城撤单退还积分
GainWay_Api_In = 33 //转移金币
GainWay_Api_Out = 34 //转移金币
GainWay_Shop_Buy = 35 //购买记录
GainWay_MAIL_MTEM = 36 //邮件领取道具
GainWay_Item_Sale = 37 //道具出售
GainWay_ReliefFund = 38 //领取救济金
GainWay_Shop_Revoke = 39 //撤单
GainWay_ActSign = 40 //
GainWay_MatchSignup = 41 //比赛报名费用
GainWay_MatchSeason = 42 //比赛赛季奖励
GainWay_ActSignNew = 43 //新签到
GainWay_ActTurnplate = 44 //轮盘
GainWay_ActBlindBox = 45 //盲盒
GainWay_ActFirstPay = 46 //首充
GainWay_VIPGift = 47 //vip礼包
GainWay_ActContinuousPay = 48 //连续充值
GainWay_ActJybAward = 49 //礼包码兑换
GainWay_LeaveDeduct = 50 //离开扣分
GainWay_LeaveCombat = 51 //离开补偿
GainWay_RankMatch = 52 //排位赛段位奖励
GainWay_AddBag = 53 //增加背包接口调用
GainWay_SmallRocket = 54 //小火箭收入
GainWay_BindTel = 55 //绑定手机号
GainWay_ReliefFund2 = 56 //救济金看视频双倍领取
GainWay_ActTurnplate2 = 57 //轮盘看视频双倍领取
GainWay_ActSignNew2 = 58 //签到看视频双倍领取
GainWay_ItemUse = 59 //道具使用
GainWay_PhoneScore = 60 //手机积分活动
GainWay_RankReward = 61 //排位奖励
GainWay_TaskReward = 62 //任务奖励
GainWay_Interact = 63 //房间内互动效果
GainWayItemCollectExchange = 64 //集卡活动兑换
GainWay_WeekCardAward = 65 //周卡奖励
GainWay_PigrankTakeCoin = 66 //存钱罐领取耗费钻石
GainWay_PigrankGainCoin = 67 //存钱罐打开获取金币
GainWay_ItemMove = 68 //道具赠送
GainWay_RoleUpgrade = 69 //角色升级
GainWay_PetUpgrade = 70 //宠物升级
GainWay_Game = 71 //游戏掉落
GainWayItemCollectLogin = 73 //集卡活动登录
GainWay_Collect = 74 //集卡活动
GainWayItemPhoneScoreExchange = 75 //抽手机活动兑换
GainWayItemTaskInvite = 78 //邀请任务
GainWayItemTaskNewPlayer = 79 //新手任务
GainWayItemTaskAchievement = 80 //成就任务
GainWayItemTaskEveryDay = 81 //每日任务
GainWayItemWeekActive = 82 //周活跃奖励
GainWayContinueSign = 83 //累计签到
GainWayBackend = 84 // 后台操作
GainWayBuyCoin = 85 // 商城购买金币
GainWayBuyItem = 86 // 商城购买道具
GainWayBuyWeekCard = 87 // 商城购买周卡
GainWayVipBuyCoin = 88 // vip商城购买金币
GainWaySign7Con = 89 // 累计签到进阶奖励消耗
GainWay_PigrankGainDiamond = 90 //存钱罐打开获取钻石
GainWaySign7Add = 91 // 累计签到进阶奖励获得
GainWayItemChange = 92 //背包内使用道具兑换话费
GainWayPetSkillLevelUp = 93 //宠物技能升级
GainWayPermitAward = 94 // 赛季通行证等级奖励
GainWayItemPermitRank = 95 // 赛季通行证排行奖励
GainWayPermitExchangeCost = 96 // 赛季通行证兑换消耗
GainWayPermitExchangeGain = 97 // 赛季通行证兑换获得
GainWayItemTaskPermit = 98 // 赛季通行证任务
GainWayDiamondLottery = 99 //钻石抽奖
GainWaySkinUnLock = 100 // 皮肤解锁消耗
GainWaySkinUpGrade = 101 // 皮肤升级消耗
GainWayItemFen = 102 // 道具分解消耗
GainWayItemFenGain = 103 // 道具分解获得
GainWayGuide = 104 //新手引导奖励
GainWayVipGift9 = 105 //vip等级礼包
GainWayRoomCost = 106 //房费消耗
GainWayRoomGain = 107 //房卡场获得
GainWayItemShop = 108 // 交易市场道具交易
GainWayClawdollCostItem = 109 // 娃娃机上分扣道具
GainWayItemShopChangeDoll = 110 // 商城兑换娃娃
GainWayItemBagChangeDoll = 111 // 背包内兑换娃娃
GainWayClawdollCatch = 112 // 娃娃机抓取到娃娃获取卡
GainWayItemBagChangeDollRevocation = 113 //娃娃兑换后台撤销
GainWayPermitReset = 114 //赛季通行证积分重置
GainWayClientUpgrade = 115 //客户端升级奖励
GainWayLottery = 116 //开奖码抽奖
GainWayGuide2 = 117 // 竞技馆引导奖励
GainWayCompound = 118 // 道具合成消耗
GainWayCompoundGain = 119 // 道具合成获得
GainWayItem_PigBankTakeCoin = 120 // 购买金币存钱罐奖励道具
GainWayItem_PigBankTakeDiamond = 121 // 购买钻石存钱罐奖励道具
GainWayNianCost = 122 //年兽活动消耗
GainWayNianGain_Attack_LittleGuarantee = 123 //年兽活动小爆竹攻击年兽获得保底奖励
GainWayRedPacket = 124 // 红包奖励
GainWayNianGain_Sign = 125 //年兽活动签到获得
GainWayNianGain_Change = 126 //年兽活动兑换获得
GainWayNianGain_BossDie = 127 //年兽活动Boss死亡获得
GainWayNianGain_BossDieOther = 128 //年兽活动Boss死亡额外获得
GainWayNianGain_Attack_BigOther = 129 //年兽活动大爆竹攻击年兽获得额外奖励
GainWayNianGain_Attack_BigGuarantee = 130 //年兽活动大爆竹攻击年兽获得保底奖励
GainWayNianGain_Attack_Coin = 131 //攻击年兽获得金币奖励
GainWayNianGain_EveryDayTask = 132 //年兽活动每日任务
GainWayNianGain_Task = 133 //年兽活动任务
GainWayConsume = 134 //累消活动获得
GainWayPushCoinExchangeCost = 135 // 推币机兑换消耗
GainWatPushCoinExchangeGain = 136 // 推币机兑换获得
GainWayPushCoinGain = 137 // 推币机掉落获得
GainWayPushCoinCost = 138 // 推币机消耗
)
// 后台选择 金币变化类型 的充值 类型id号起始
@ -560,27 +581,35 @@ const (
// 道具ID
const (
ItemIDCoin = 100001 // 金币对应的itemId
ItemIDDiamond = 100002 // 钻石对应的itemId
ItemIDMoneyPond = 100003 // 玩家金币池对应物品Id
ItemIDVipExp = 100005 // VIP经验对应的物品Id
ItemIDPhoneScore = 100006 // 手机抽奖积分
ItemIDWeekScore = 100004 // 周活跃积分
ItemIDGiftBox = 50001 // 碎片礼盒
ItemIDCollectBox = 50002 // 集卡礼盒
ItemIDLike = 100007 // 点赞
ItemIDCoffee = 100008 // 咖啡
ItemIDBucket = 100009 // 水桶
ItemIDSlippers = 100010 // 拖鞋
ItemIDPermit = 100011 // 赛季通行证积分
ItemIDLong = 50013 // 龙币
ItemIDPetSkill = 11001 //宠物技能升级道具
ItemIDVCard = 30001 // v卡
ItemIDJCard = 30002 // 金券
ItemDiamondScore = 100012 //钻石积分
ItemIDClawdoll = 40003 // 娃娃卡
ItemDollCard = 40004 // 娃娃卡积分
ItemIDRoomCard = 40002 // 房卡
ItemIDCoin = 100001 // 金币对应的itemId
ItemIDDiamond = 100002 // 钻石对应的itemId
ItemIDMoneyPond = 100003 // 玩家金币池对应物品Id
ItemIDVipExp = 100005 // VIP经验对应的物品Id
ItemIDPhoneScore = 100006 // 手机抽奖积分
ItemIDWeekScore = 100004 // 周活跃积分
ItemIDGiftBox = 50001 // 碎片礼盒
ItemIDCollectBox = 50002 // 集卡礼盒
ItemIDLike = 100007 // 点赞
ItemIDCoffee = 100008 // 咖啡
ItemIDBucket = 100009 // 水桶
ItemIDSlippers = 100010 // 拖鞋
ItemIDPermit = 100011 // 赛季通行证积分
ItemIDLong = 50013 // 龙币
ItemIDPetSkill = 11001 //宠物技能升级道具
ItemIDVCard = 30001 // v卡
ItemIDJCard = 30002 // 金券
ItemDiamondScore = 100012 //钻石积分
ItemIDClawdoll = 40003 // 娃娃卡
ItemDollCard = 40004 // 娃娃卡积分
ItemIDRoomCard = 40002 // 房卡
ItemIDLittleGuaranteed = 50014 //小爆竹
ItemIDBigGuaranteed = 50015 //大爆竹
ItemIDPlum = 50016 //梅花(推币机)
ItemIDBigCoin = 50017 //大金币
ItemIDCoin1 = 50018 //金币1
ItemIDCoin2 = 50019 //金币2
ItemIDCoin3 = 50020 //金币3
ItemIDShake = 50021 //震动效果
)
func ToItemId(id int32) int32 {
@ -692,6 +721,10 @@ const (
TaskTypeTienlenWinCoin = 29 // Tienlen赢取金币数量
TaskTypeRankMatchWinTimes = 30 // 排位胜利次数
TaskTypeBuyPermit = 31 // 购买典藏通行证
TaskTypeBuyRedBag = 32 // 参与红包雨活动
TaskTypeNianBossKill = 33 // 击杀年兽
TaskTypeNianBossDamage = 34 // 年兽造成伤害
TaskTypeNianSign = 35 // 年兽签到
)
const (
@ -702,13 +735,16 @@ const (
)
const (
TaskActivityTypeEveryDay = 1 // 每日任务
TaskActivityTypeWeek = 2 // 每周任务
TaskActivityTypeNovice = 3 // 新手任务
TaskActivityTypeInvite = 4 // 邀请任务
TaskActivityTypeAchieve = 5 // 成就任务
TaskActivityTypePermitEveryDay = 6 // 赛季通行证每日任务
TaskActivityTypePermit = 7 // 赛季通行证任务
TaskActivityTypeEveryDay = 1 // 每日任务
TaskActivityTypeWeek = 2 // 每周任务
TaskActivityTypeNovice = 3 // 新手任务
TaskActivityTypeInvite = 4 // 邀请任务
TaskActivityTypeAchieve = 5 // 成就任务
TaskActivityTypePermitEveryDay = 6 // 赛季通行证每日任务
TaskActivityTypePermit = 7 // 赛季通行证任务
TaskActivityTypeNianEveryDay = 8 // 年兽每日任务
TaskActivityTypeNian = 9 // 活动期间年兽任务
TaskActivityTypeConsume = 10 // 累计消耗活动任务
)
const HeadRange = 3 // 机器人头像id范围
@ -772,11 +808,15 @@ const (
var PetIDs = []int32{PetIDChicken}
const (
ChannelSwitchExchange = 1 // 兑换商城开关
ChannelSwitchDropItem = 2 // v卡掉落开关
ChannelSwitchInvite = 3 // 邀请开关
ChannelSwitchPermit = 4 // 典藏通行证开关
ChannelSwitchDiamondLottery = 5 // 钻石抽奖开关
ChannelSwitchExchange = 1 // 兑换商城开关
ChannelSwitchDropItem = 2 // v卡掉落开关
ChannelSwitchInvite = 3 // 邀请开关
ChannelSwitchPermit = 4 // 典藏通行证开关
ChannelSwitchDiamondLottery = 5 // 钻石抽奖开关
ChannelSwitchItemRecExpire = 8 // 记牌器开关
ChannelSwitchPigBankCoin = 13 // 金币存钱罐开关
ChannelSwitchPigBankDiamond = 14 // 钻石存钱罐开关
)
// 特殊商品id

View File

@ -127,3 +127,11 @@ func TestInSameWeek(t *testing.T) {
}
}
}
func TestStrTimeToTime(t *testing.T) {
t1 := StrRFC3339TimeToTime("2016-05-17 15:12:15")
if t1.IsZero() {
t.Fatal("StrTimeToTime(2016-05-17 15:12:15) expect result is not zero")
}
t.Log(t1)
}

277
dao/internal/red_packet.go Normal file
View File

@ -0,0 +1,277 @@
// --------------------------------------------------------------------------------------------
// The following code is automatically generated by the mongo-dao-generator tool.
// Please do not modify this code manually to avoid being overwritten in the next generation.
// For more tool details, please click the link to view https://github.com/dobyte/mongo-dao-generator
// --------------------------------------------------------------------------------------------
package internal
import (
"context"
"errors"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
modelpkg "mongo.games.com/game/model"
)
type RedPacketFilterFunc func(cols *RedPacketColumns) interface{}
type RedPacketUpdateFunc func(cols *RedPacketColumns) interface{}
type RedPacketPipelineFunc func(cols *RedPacketColumns) interface{}
type RedPacketCountOptionsFunc func(cols *RedPacketColumns) *options.CountOptions
type RedPacketAggregateOptionsFunc func(cols *RedPacketColumns) *options.AggregateOptions
type RedPacketFindOneOptionsFunc func(cols *RedPacketColumns) *options.FindOneOptions
type RedPacketFindManyOptionsFunc func(cols *RedPacketColumns) *options.FindOptions
type RedPacketUpdateOptionsFunc func(cols *RedPacketColumns) *options.UpdateOptions
type RedPacketDeleteOptionsFunc func(cols *RedPacketColumns) *options.DeleteOptions
type RedPacketInsertOneOptionsFunc func(cols *RedPacketColumns) *options.InsertOneOptions
type RedPacketInsertManyOptionsFunc func(cols *RedPacketColumns) *options.InsertManyOptions
type RedPacket struct {
Columns *RedPacketColumns
Database *mongo.Database
Collection *mongo.Collection
}
type RedPacketColumns struct {
ID string
Cid string // 红包活动id
Use string // 已发红包 红包奖励数量:已发个数
Ts string // 更新时间戳
}
var redPacketColumns = &RedPacketColumns{
ID: "_id",
Cid: "cid", // 红包活动id
Use: "use", // 已发红包 红包奖励数量:已发个数
Ts: "ts", // 更新时间戳
}
func NewRedPacket() *RedPacket {
return &RedPacket{
Columns: redPacketColumns,
}
}
// Count returns the number of documents in the collection.
func (dao *RedPacket) Count(ctx context.Context, filterFunc RedPacketFilterFunc, optionsFunc ...RedPacketCountOptionsFunc) (int64, error) {
var (
opts *options.CountOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.CountDocuments(ctx, filter, opts)
}
// Aggregate executes an aggregate command against the collection and returns a cursor over the resulting documents.
func (dao *RedPacket) Aggregate(ctx context.Context, pipelineFunc RedPacketPipelineFunc, optionsFunc ...RedPacketAggregateOptionsFunc) (*mongo.Cursor, error) {
var (
opts *options.AggregateOptions
pipeline = pipelineFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.Aggregate(ctx, pipeline, opts)
}
// InsertOne executes an insert command to insert a single document into the collection.
func (dao *RedPacket) InsertOne(ctx context.Context, model *modelpkg.RedPacket, optionsFunc ...RedPacketInsertOneOptionsFunc) (*mongo.InsertOneResult, error) {
if model == nil {
return nil, errors.New("model is nil")
}
if err := dao.autofill(ctx, model); err != nil {
return nil, err
}
var opts *options.InsertOneOptions
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.InsertOne(ctx, model, opts)
}
// InsertMany executes an insert command to insert multiple documents into the collection.
func (dao *RedPacket) InsertMany(ctx context.Context, models []*modelpkg.RedPacket, optionsFunc ...RedPacketInsertManyOptionsFunc) (*mongo.InsertManyResult, error) {
if len(models) == 0 {
return nil, errors.New("models is empty")
}
documents := make([]interface{}, 0, len(models))
for i := range models {
model := models[i]
if err := dao.autofill(ctx, model); err != nil {
return nil, err
}
documents = append(documents, model)
}
var opts *options.InsertManyOptions
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.InsertMany(ctx, documents, opts)
}
// UpdateOne executes an update command to update at most one document in the collection.
func (dao *RedPacket) UpdateOne(ctx context.Context, filterFunc RedPacketFilterFunc, updateFunc RedPacketUpdateFunc, optionsFunc ...RedPacketUpdateOptionsFunc) (*mongo.UpdateResult, error) {
var (
opts *options.UpdateOptions
filter = filterFunc(dao.Columns)
update = updateFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.UpdateOne(ctx, filter, update, opts)
}
// UpdateOneByID executes an update command to update at most one document in the collection.
func (dao *RedPacket) UpdateOneByID(ctx context.Context, id string, updateFunc RedPacketUpdateFunc, optionsFunc ...RedPacketUpdateOptionsFunc) (*mongo.UpdateResult, error) {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return nil, err
}
return dao.UpdateOne(ctx, func(cols *RedPacketColumns) interface{} {
return bson.M{"_id": objectID}
}, updateFunc, optionsFunc...)
}
// UpdateMany executes an update command to update documents in the collection.
func (dao *RedPacket) UpdateMany(ctx context.Context, filterFunc RedPacketFilterFunc, updateFunc RedPacketUpdateFunc, optionsFunc ...RedPacketUpdateOptionsFunc) (*mongo.UpdateResult, error) {
var (
opts *options.UpdateOptions
filter = filterFunc(dao.Columns)
update = updateFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.UpdateMany(ctx, filter, update, opts)
}
// FindOne executes a find command and returns a model for one document in the collection.
func (dao *RedPacket) FindOne(ctx context.Context, filterFunc RedPacketFilterFunc, optionsFunc ...RedPacketFindOneOptionsFunc) (*modelpkg.RedPacket, error) {
var (
opts *options.FindOneOptions
model = &modelpkg.RedPacket{}
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
err := dao.Collection.FindOne(ctx, filter, opts).Decode(model)
if err != nil {
if err == mongo.ErrNoDocuments {
return nil, nil
}
return nil, err
}
return model, nil
}
// FindOneByID executes a find command and returns a model for one document in the collection.
func (dao *RedPacket) FindOneByID(ctx context.Context, id string, optionsFunc ...RedPacketFindOneOptionsFunc) (*modelpkg.RedPacket, error) {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return nil, err
}
return dao.FindOne(ctx, func(cols *RedPacketColumns) interface{} {
return bson.M{"_id": objectID}
}, optionsFunc...)
}
// FindMany executes a find command and returns many models the matching documents in the collection.
func (dao *RedPacket) FindMany(ctx context.Context, filterFunc RedPacketFilterFunc, optionsFunc ...RedPacketFindManyOptionsFunc) ([]*modelpkg.RedPacket, error) {
var (
opts *options.FindOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
cur, err := dao.Collection.Find(ctx, filter, opts)
if err != nil {
return nil, err
}
models := make([]*modelpkg.RedPacket, 0)
if err = cur.All(ctx, &models); err != nil {
return nil, err
}
return models, nil
}
// DeleteOne executes a delete command to delete at most one document from the collection.
func (dao *RedPacket) DeleteOne(ctx context.Context, filterFunc RedPacketFilterFunc, optionsFunc ...RedPacketDeleteOptionsFunc) (*mongo.DeleteResult, error) {
var (
opts *options.DeleteOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.DeleteOne(ctx, filter, opts)
}
// DeleteOneByID executes a delete command to delete at most one document from the collection.
func (dao *RedPacket) DeleteOneByID(ctx context.Context, id string, optionsFunc ...RedPacketDeleteOptionsFunc) (*mongo.DeleteResult, error) {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return nil, err
}
return dao.DeleteOne(ctx, func(cols *RedPacketColumns) interface{} {
return bson.M{"_id": objectID}
}, optionsFunc...)
}
// DeleteMany executes a delete command to delete documents from the collection.
func (dao *RedPacket) DeleteMany(ctx context.Context, filterFunc RedPacketFilterFunc, optionsFunc ...RedPacketDeleteOptionsFunc) (*mongo.DeleteResult, error) {
var (
opts *options.DeleteOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.DeleteMany(ctx, filter, opts)
}
// autofill when inserting data
func (dao *RedPacket) autofill(ctx context.Context, model *modelpkg.RedPacket) error {
if model.ID.IsZero() {
model.ID = primitive.NewObjectID()
}
return nil
}

View File

@ -0,0 +1,283 @@
// --------------------------------------------------------------------------------------------
// The following code is automatically generated by the mongo-dao-generator tool.
// Please do not modify this code manually to avoid being overwritten in the next generation.
// For more tool details, please click the link to view https://github.com/dobyte/mongo-dao-generator
// --------------------------------------------------------------------------------------------
package internal
import (
"context"
"errors"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
modelpkg "mongo.games.com/game/model"
)
type RedPacketHistoryFilterFunc func(cols *RedPacketHistoryColumns) interface{}
type RedPacketHistoryUpdateFunc func(cols *RedPacketHistoryColumns) interface{}
type RedPacketHistoryPipelineFunc func(cols *RedPacketHistoryColumns) interface{}
type RedPacketHistoryCountOptionsFunc func(cols *RedPacketHistoryColumns) *options.CountOptions
type RedPacketHistoryAggregateOptionsFunc func(cols *RedPacketHistoryColumns) *options.AggregateOptions
type RedPacketHistoryFindOneOptionsFunc func(cols *RedPacketHistoryColumns) *options.FindOneOptions
type RedPacketHistoryFindManyOptionsFunc func(cols *RedPacketHistoryColumns) *options.FindOptions
type RedPacketHistoryUpdateOptionsFunc func(cols *RedPacketHistoryColumns) *options.UpdateOptions
type RedPacketHistoryDeleteOptionsFunc func(cols *RedPacketHistoryColumns) *options.DeleteOptions
type RedPacketHistoryInsertOneOptionsFunc func(cols *RedPacketHistoryColumns) *options.InsertOneOptions
type RedPacketHistoryInsertManyOptionsFunc func(cols *RedPacketHistoryColumns) *options.InsertManyOptions
type RedPacketHistory struct {
Columns *RedPacketHistoryColumns
Database *mongo.Database
Collection *mongo.Collection
}
type RedPacketHistoryColumns struct {
Platform string // 平台
ID string
Cid string // 红包活动id
Snid string // 玩家id
Ts string // 时间戳
ItemId string // 道具id
ItemNum string // 道具数量
}
var redPacketHistoryColumns = &RedPacketHistoryColumns{
Platform: "-", // 平台
ID: "_id",
Cid: "cid", // 红包活动id
Snid: "snid", // 玩家id
Ts: "ts", // 时间戳
ItemId: "itemid", // 道具id
ItemNum: "itemnum",// 道具数量
}
func NewRedPacketHistory() *RedPacketHistory {
return &RedPacketHistory{
Columns: redPacketHistoryColumns,
}
}
// Count returns the number of documents in the collection.
func (dao *RedPacketHistory) Count(ctx context.Context, filterFunc RedPacketHistoryFilterFunc, optionsFunc ...RedPacketHistoryCountOptionsFunc) (int64, error) {
var (
opts *options.CountOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.CountDocuments(ctx, filter, opts)
}
// Aggregate executes an aggregate command against the collection and returns a cursor over the resulting documents.
func (dao *RedPacketHistory) Aggregate(ctx context.Context, pipelineFunc RedPacketHistoryPipelineFunc, optionsFunc ...RedPacketHistoryAggregateOptionsFunc) (*mongo.Cursor, error) {
var (
opts *options.AggregateOptions
pipeline = pipelineFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.Aggregate(ctx, pipeline, opts)
}
// InsertOne executes an insert command to insert a single document into the collection.
func (dao *RedPacketHistory) InsertOne(ctx context.Context, model *modelpkg.RedPacketHistory, optionsFunc ...RedPacketHistoryInsertOneOptionsFunc) (*mongo.InsertOneResult, error) {
if model == nil {
return nil, errors.New("model is nil")
}
if err := dao.autofill(ctx, model); err != nil {
return nil, err
}
var opts *options.InsertOneOptions
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.InsertOne(ctx, model, opts)
}
// InsertMany executes an insert command to insert multiple documents into the collection.
func (dao *RedPacketHistory) InsertMany(ctx context.Context, models []*modelpkg.RedPacketHistory, optionsFunc ...RedPacketHistoryInsertManyOptionsFunc) (*mongo.InsertManyResult, error) {
if len(models) == 0 {
return nil, errors.New("models is empty")
}
documents := make([]interface{}, 0, len(models))
for i := range models {
model := models[i]
if err := dao.autofill(ctx, model); err != nil {
return nil, err
}
documents = append(documents, model)
}
var opts *options.InsertManyOptions
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.InsertMany(ctx, documents, opts)
}
// UpdateOne executes an update command to update at most one document in the collection.
func (dao *RedPacketHistory) UpdateOne(ctx context.Context, filterFunc RedPacketHistoryFilterFunc, updateFunc RedPacketHistoryUpdateFunc, optionsFunc ...RedPacketHistoryUpdateOptionsFunc) (*mongo.UpdateResult, error) {
var (
opts *options.UpdateOptions
filter = filterFunc(dao.Columns)
update = updateFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.UpdateOne(ctx, filter, update, opts)
}
// UpdateOneByID executes an update command to update at most one document in the collection.
func (dao *RedPacketHistory) UpdateOneByID(ctx context.Context, id string, updateFunc RedPacketHistoryUpdateFunc, optionsFunc ...RedPacketHistoryUpdateOptionsFunc) (*mongo.UpdateResult, error) {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return nil, err
}
return dao.UpdateOne(ctx, func(cols *RedPacketHistoryColumns) interface{} {
return bson.M{"_id": objectID}
}, updateFunc, optionsFunc...)
}
// UpdateMany executes an update command to update documents in the collection.
func (dao *RedPacketHistory) UpdateMany(ctx context.Context, filterFunc RedPacketHistoryFilterFunc, updateFunc RedPacketHistoryUpdateFunc, optionsFunc ...RedPacketHistoryUpdateOptionsFunc) (*mongo.UpdateResult, error) {
var (
opts *options.UpdateOptions
filter = filterFunc(dao.Columns)
update = updateFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.UpdateMany(ctx, filter, update, opts)
}
// FindOne executes a find command and returns a model for one document in the collection.
func (dao *RedPacketHistory) FindOne(ctx context.Context, filterFunc RedPacketHistoryFilterFunc, optionsFunc ...RedPacketHistoryFindOneOptionsFunc) (*modelpkg.RedPacketHistory, error) {
var (
opts *options.FindOneOptions
model = &modelpkg.RedPacketHistory{}
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
err := dao.Collection.FindOne(ctx, filter, opts).Decode(model)
if err != nil {
if err == mongo.ErrNoDocuments {
return nil, nil
}
return nil, err
}
return model, nil
}
// FindOneByID executes a find command and returns a model for one document in the collection.
func (dao *RedPacketHistory) FindOneByID(ctx context.Context, id string, optionsFunc ...RedPacketHistoryFindOneOptionsFunc) (*modelpkg.RedPacketHistory, error) {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return nil, err
}
return dao.FindOne(ctx, func(cols *RedPacketHistoryColumns) interface{} {
return bson.M{"_id": objectID}
}, optionsFunc...)
}
// FindMany executes a find command and returns many models the matching documents in the collection.
func (dao *RedPacketHistory) FindMany(ctx context.Context, filterFunc RedPacketHistoryFilterFunc, optionsFunc ...RedPacketHistoryFindManyOptionsFunc) ([]*modelpkg.RedPacketHistory, error) {
var (
opts *options.FindOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
cur, err := dao.Collection.Find(ctx, filter, opts)
if err != nil {
return nil, err
}
models := make([]*modelpkg.RedPacketHistory, 0)
if err = cur.All(ctx, &models); err != nil {
return nil, err
}
return models, nil
}
// DeleteOne executes a delete command to delete at most one document from the collection.
func (dao *RedPacketHistory) DeleteOne(ctx context.Context, filterFunc RedPacketHistoryFilterFunc, optionsFunc ...RedPacketHistoryDeleteOptionsFunc) (*mongo.DeleteResult, error) {
var (
opts *options.DeleteOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.DeleteOne(ctx, filter, opts)
}
// DeleteOneByID executes a delete command to delete at most one document from the collection.
func (dao *RedPacketHistory) DeleteOneByID(ctx context.Context, id string, optionsFunc ...RedPacketHistoryDeleteOptionsFunc) (*mongo.DeleteResult, error) {
objectID, err := primitive.ObjectIDFromHex(id)
if err != nil {
return nil, err
}
return dao.DeleteOne(ctx, func(cols *RedPacketHistoryColumns) interface{} {
return bson.M{"_id": objectID}
}, optionsFunc...)
}
// DeleteMany executes a delete command to delete documents from the collection.
func (dao *RedPacketHistory) DeleteMany(ctx context.Context, filterFunc RedPacketHistoryFilterFunc, optionsFunc ...RedPacketHistoryDeleteOptionsFunc) (*mongo.DeleteResult, error) {
var (
opts *options.DeleteOptions
filter = filterFunc(dao.Columns)
)
if len(optionsFunc) > 0 {
opts = optionsFunc[0](dao.Columns)
}
return dao.Collection.DeleteMany(ctx, filter, opts)
}
// autofill when inserting data
func (dao *RedPacketHistory) autofill(ctx context.Context, model *modelpkg.RedPacketHistory) error {
if model.ID.IsZero() {
model.ID = primitive.NewObjectID()
}
return nil
}

88
dao/red_packet.go Normal file
View File

@ -0,0 +1,88 @@
package dao
import (
"context"
"errors"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/mongox"
"mongo.games.com/game/dao/internal"
modelpkg "mongo.games.com/game/model"
)
var (
_ = context.Background()
_ = logger.Logger
_ = bson.M{}
_ = mongo.Database{}
)
type RedPacketColumns = internal.RedPacketColumns
type RedPacket struct {
*internal.RedPacket
}
func GetRedPacket(key string) (*RedPacket, error) {
return mongox.GetDao(key, NewRedPacket)
}
func NewRedPacket(db *mongo.Database, c *mongo.Collection) (*RedPacket, any) {
if db == nil || c == nil {
return &RedPacket{}, &modelpkg.RedPacket{}
}
v := internal.NewRedPacket()
v.Database = db
v.Collection = c
// 创建索引
c.Indexes().CreateOne(context.Background(), mongo.IndexModel{
Keys: bson.D{{"cid", 1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
})
c.Indexes().CreateOne(context.Background(), mongo.IndexModel{
Keys: bson.D{{"ts", 1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
})
c.Indexes().CreateOne(context.Background(), mongo.IndexModel{
Keys: bson.D{{"ts", -1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
})
return &RedPacket{RedPacket: v}, &modelpkg.RedPacket{}
}
func (r *RedPacket) GetAll() (res []*modelpkg.RedPacket, err error) {
res, err = r.FindMany(context.Background(), func(cols *RedPacketColumns) interface{} {
return bson.M{}
})
if err != nil && !errors.Is(err, mongo.ErrNoDocuments) {
return nil, err
}
return res, nil
}
func (r *RedPacket) UpdateAll(list []*modelpkg.RedPacket) error {
var operations []mongo.WriteModel
for _, v := range list {
updateDataMap := bson.M{
"$set": v,
}
delete(updateDataMap["$set"].(bson.M), "_id") // 删除 _id 字段
operations = append(operations, mongo.NewUpdateOneModel().SetFilter(bson.M{"_id": v.ID}).SetUpdate(bson.M{"$set": v}).SetUpsert(true))
}
_, err := r.Collection.BulkWrite(context.Background(), operations) // 批量更新
if err != nil {
logger.Logger.Errorf("RedPacket.UpdateAll error: %v", err)
return err
}
return nil
}

95
dao/red_packet_history.go Normal file
View File

@ -0,0 +1,95 @@
package dao
import (
"context"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/mongox"
"mongo.games.com/game/dao/internal"
modelpkg "mongo.games.com/game/model"
)
var (
_ = context.Background()
_ = logger.Logger
_ = bson.M{}
_ = mongo.Database{}
)
type RedPacketHistoryColumns = internal.RedPacketHistoryColumns
type RedPacketHistory struct {
*internal.RedPacketHistory
}
func GetRedPacketHistory(key string) (*RedPacketHistory, error) {
return mongox.GetDao(key, NewRedPacketHistory)
}
func NewRedPacketHistory(db *mongo.Database, c *mongo.Collection) (*RedPacketHistory, any) {
if db == nil || c == nil {
return &RedPacketHistory{}, &modelpkg.RedPacketHistory{}
}
v := internal.NewRedPacketHistory()
v.Database = db
v.Collection = c
c.Indexes().CreateMany(context.Background(), []mongo.IndexModel{
{
Keys: bson.D{{"snid", 1}, {"cid", 1}, {"ts", -1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
},
{
Keys: bson.D{{"snid", 1}, {"ts", -1}},
Options: options.Index().SetBackground(true).SetSparse(true),
},
{
Keys: bson.D{{"cid", 1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
},
{
Keys: bson.D{{"ts", 1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
},
{
Keys: bson.D{{"itemid", -1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
},
{
Keys: bson.D{{"itemnum", -1}}, // 1 表示升序,-1 表示降序
Options: options.Index().SetBackground(true).SetSparse(true), // 后台创建索引,稀疏索引
},
})
return &RedPacketHistory{RedPacketHistory: v}, &modelpkg.RedPacketHistory{}
}
func (r *RedPacketHistory) GetHistory(snid int32, cid int64) ([]*modelpkg.RedPacketHistory, error) {
res, err := r.FindMany(context.Background(), func(cols *internal.RedPacketHistoryColumns) interface{} {
if cid > 0 {
return bson.M{cols.Snid: snid, cols.Cid: cid}
}
return bson.M{cols.Snid: snid}
}, func(cols *internal.RedPacketHistoryColumns) *options.FindOptions {
return options.Find().SetSort(bson.D{{cols.Ts, -1}}).SetLimit(30)
})
if err != nil {
logger.Logger.Error("RedPacketHistory.GetHistory ", err)
return nil, err
}
return res, err
}
func (r *RedPacketHistory) Save(history *modelpkg.RedPacketHistory) error {
_, err := r.InsertOne(context.Background(), history)
if err != nil {
logger.Logger.Error("RedPacketHistory.Insert ", err)
return err
}
return nil
}

11
data/DB_ACTPushCoin.dat Normal file
View File

@ -0,0 +1,11 @@
 в† ЁГ
ив†
Р†
Вв†  Ќ
Ь ±к ђN
о±к Р†
ъўЌ  Ќ
иб† Р†
а† °к
 d»к ЂВЧ/

76
data/DB_ACTPushCoin.json Normal file
View File

@ -0,0 +1,76 @@
{
"Arr": [
{
"Id": 1,
"Rate": 4000,
"Gain": {
"50018": 5
},
"Value": 25000
},
{
"Id": 2,
"Rate": 1000,
"Gain": {
"50018": 10
},
"Value": 50000
},
{
"Id": 3,
"Rate": 450,
"Gain": {
"50018": 20
},
"Value": 100000
},
{
"Id": 4,
"Rate": 1500,
"Gain": {
"30001": 1
},
"Value": 10000
},
{
"Id": 5,
"Rate": 750,
"Gain": {
"30001": 5
},
"Value": 50000
},
{
"Id": 6,
"Rate": 250,
"Gain": {
"100002": 1
},
"Value": 100000
},
{
"Id": 7,
"Rate": 1000,
"Gain": {
"50017": 1
},
"Value": 50000
},
{
"Id": 8,
"Rate": 950,
"Gain": {
"50016": 1
},
"Value": 30000
},
{
"Id": 9,
"Rate": 100,
"Gain": {
"30011": 1
},
"Value": 100000000
}
]
}

Binary file not shown.

View File

@ -4520,7 +4520,7 @@
{
"Id": 2110001,
"Name": "十三张四人",
"Title": "1",
"Title": "新手场",
"GameId": 211,
"GameRule": 21100,
"GameType": 2,
@ -4574,7 +4574,7 @@
{
"Id": 2110002,
"Name": "十三张四人",
"Title": "2",
"Title": "中级场",
"GameId": 211,
"GameRule": 21100,
"GameType": 2,
@ -4628,7 +4628,7 @@
{
"Id": 2110003,
"Name": "十三张四人",
"Title": "3",
"Title": "高级场",
"GameId": 211,
"GameRule": 21100,
"GameType": 2,
@ -4682,7 +4682,7 @@
{
"Id": 2110004,
"Name": "十三张四人",
"Title": "4",
"Title": "富豪场",
"GameId": 211,
"GameRule": 21100,
"GameType": 2,
@ -4736,7 +4736,7 @@
{
"Id": 2110005,
"Name": "十三张四人",
"Title": "5",
"Title": "至尊场",
"GameId": 211,
"GameRule": 21100,
"GameType": 2,
@ -4790,7 +4790,7 @@
{
"Id": 2110006,
"Name": "十三张四人",
"Title": "6",
"Title": "大神场",
"GameId": 211,
"GameRule": 21100,
"GameType": 2,
@ -4843,7 +4843,7 @@
{
"Id": 2120001,
"Name": "十三张八人",
"Title": "1",
"Title": "新手场",
"GameId": 212,
"GameRule": 21200,
"GameType": 2,
@ -4897,7 +4897,7 @@
{
"Id": 2120002,
"Name": "十三张八人",
"Title": "2",
"Title": "中级场",
"GameId": 212,
"GameRule": 21200,
"GameType": 2,
@ -4951,7 +4951,7 @@
{
"Id": 2120003,
"Name": "十三张八人",
"Title": "3",
"Title": "高级场",
"GameId": 212,
"GameRule": 21200,
"GameType": 2,
@ -5005,7 +5005,7 @@
{
"Id": 2120004,
"Name": "十三张八人",
"Title": "4",
"Title": "富豪场",
"GameId": 212,
"GameRule": 21200,
"GameType": 2,
@ -5059,7 +5059,7 @@
{
"Id": 2120005,
"Name": "十三张八人",
"Title": "5",
"Title": "至尊场",
"GameId": 212,
"GameRule": 21200,
"GameType": 2,
@ -5113,7 +5113,7 @@
{
"Id": 2120006,
"Name": "十三张八人",
"Title": "6",
"Title": "大神场",
"GameId": 212,
"GameRule": 21200,
"GameType": 2,
@ -7019,6 +7019,41 @@
"PlayerWaterRate": 100,
"BetWaterRate": 100,
"GameName": "娃娃机"
},
{
"Id": 6090001,
"Name": "推币机",
"Title": "推币机",
"GameId": 609,
"GameRule": 60900,
"GameType": 5,
"SceneType": 1,
"Desc": "0",
"ShowType": 3,
"ShowId": 60900,
"Turn": 60900,
"BetDec": "0",
"Ai": [
0
],
"OtherIntParams": [
5000,
10000,
15000
],
"RobotNumRng": [
0
],
"SameIpLimit": 1,
"GameDif": "609",
"GameClass": 2,
"PlatformName": "越南棋牌",
"MaxBetCoin": [
0
],
"PlayerWaterRate": 100,
"BetWaterRate": 100,
"GameName": "推币机"
}
]
}

Binary file not shown.

View File

@ -7226,6 +7226,302 @@
"CompositionMax": 1,
"Location": "0",
"Describe": "作用:用于报名特殊钻石赛事;\n产出途径存钱罐"
},
{
"Id": 50014,
"Name": "爆竹",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 28,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "可在年兽活动中击退年兽,获得奖品"
},
{
"Id": 50015,
"Name": "火箭爆竹",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 28,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "可在年兽活动中击退年兽,获得奖品"
},
{
"Id": 50016,
"Name": "梅花",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 29,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "可在推币机活动兑换道具"
},
{
"Id": 50017,
"Name": "大金币",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 29,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "推币机活动中掉落的3D道具",
"Num": 50000
},
{
"Id": 50018,
"Name": "3D金币5K",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 29,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "推币机活动中掉落的3D道具",
"Num": 5000
},
{
"Id": 50019,
"Name": "3D金币10K",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 29,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "推币机活动中掉落的3D道具",
"Num": 10000
},
{
"Id": 50020,
"Name": "3D金币15K",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 29,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"SaleType": 1,
"SaleGold": 5000,
"Composition": 1,
"CompositionMax": 9999,
"Location": "0",
"Describe": "推币机活动中掉落的3D道具",
"Num": 15000
},
{
"Id": 50021,
"Name": "震动效果",
"ShowLocation": [
0,
0,
0
],
"Classify": [
0,
0,
0
],
"Type": 29,
"Effect0": [
0,
0,
0,
0,
0,
0
],
"Effect": [
0,
0,
0,
0,
0,
0
],
"Location": "0",
"Describe": "推币机震动次数"
}
]
}

Binary file not shown.

View File

@ -267,6 +267,12 @@
"Name": "娃娃机",
"GameId": 608,
"GameDif": "608"
},
{
"Id": 60900,
"Name": "推币机",
"GameId": 609,
"GameDif": "609"
}
]
}

Binary file not shown.

View File

@ -0,0 +1,29 @@
4
SignReward50014,10;100001,100000" 签到奖励
. SignExcReward50015,1"签到额外奖励
=SignExcRewardMax2"$签到额外奖励赠送次数上限
9SignExcRewardProp30"签到额外奖励赠送概率
BossExp6800000"
BOSS血量
:
BossReward100001,1000000;100002,10"BOSS击杀奖励
/ LuckyRankNeed10000"幸运榜上榜条件
/RankNeed7000000"总伤害榜上榜条件
> LittleHurtGold
8000,12000"小爆竹造成的伤害范围
>
 BigHurtGold 400000,600000"大爆竹造成的伤害范围
4 
BigHurtExc30001"大爆竹额外掉落道具ID
= BigHurtExcNumber3,15"!大爆竹额外掉落数量范围
5 LittleGuaranteed30"小爆竹保底掉落次数
ALittleGuaranteedReward100002,5"小爆竹保底掉落物品
2 BigGuaranteed10"大爆竹保底掉落次数
>BigGuaranteedReward30001,80"大爆竹保底掉落物品
.
GiftShopID991001,991002,991003"礼包ID
@ GiftShopLimit3,0,0"&礼包每日限购次数,0为不限购
4 BossExcLimit30"年兽死亡额外掉落要求
" BuffCount1"Buff生效次数
oExchangeDiamond 30,5,1500000"L单次兑换爆竹所需要消耗的钻石,获得数量,获得金币数量

View File

@ -0,0 +1,130 @@
{
"Arr": [
{
"Id": 1,
"PorpName": "SignReward",
"PropValue": "50014,10;100001,100000",
"PropDec": "签到奖励"
},
{
"Id": 2,
"PorpName": "SignExcReward",
"PropValue": "50015,1",
"PropDec": "签到额外奖励"
},
{
"Id": 3,
"PorpName": "SignExcRewardMax",
"PropValue": "2",
"PropDec": "签到额外奖励赠送次数上限"
},
{
"Id": 4,
"PorpName": "SignExcRewardProp",
"PropValue": "30",
"PropDec": "签到额外奖励赠送概率"
},
{
"Id": 5,
"PorpName": "BossExp",
"PropValue": "6800000",
"PropDec": "BOSS血量"
},
{
"Id": 6,
"PorpName": "BossReward",
"PropValue": "100001,1000000;100002,10",
"PropDec": "BOSS击杀奖励"
},
{
"Id": 7,
"PorpName": "LuckyRankNeed",
"PropValue": "10000",
"PropDec": "幸运榜上榜条件"
},
{
"Id": 8,
"PorpName": "RankNeed",
"PropValue": "7000000",
"PropDec": "总伤害榜上榜条件"
},
{
"Id": 9,
"PorpName": "LittleHurtGold",
"PropValue": "8000,12000",
"PropDec": "小爆竹造成的伤害范围"
},
{
"Id": 10,
"PorpName": "BigHurtGold",
"PropValue": "400000,600000",
"PropDec": "大爆竹造成的伤害范围"
},
{
"Id": 11,
"PorpName": "BigHurtExc",
"PropValue": "30001",
"PropDec": "大爆竹额外掉落道具ID"
},
{
"Id": 12,
"PorpName": "BigHurtExcNumber",
"PropValue": "3,15",
"PropDec": "大爆竹额外掉落数量范围"
},
{
"Id": 13,
"PorpName": "LittleGuaranteed",
"PropValue": "30",
"PropDec": "小爆竹保底掉落次数"
},
{
"Id": 14,
"PorpName": "LittleGuaranteedReward",
"PropValue": "100002,5",
"PropDec": "小爆竹保底掉落物品"
},
{
"Id": 15,
"PorpName": "BigGuaranteed",
"PropValue": "10",
"PropDec": "大爆竹保底掉落次数"
},
{
"Id": 16,
"PorpName": "BigGuaranteedReward",
"PropValue": "30001,80",
"PropDec": "大爆竹保底掉落物品"
},
{
"Id": 17,
"PorpName": "GiftShopID",
"PropValue": "991001,991002,991003",
"PropDec": "礼包ID"
},
{
"Id": 18,
"PorpName": "GiftShopLimit",
"PropValue": "3,0,0",
"PropDec": "礼包每日限购次数,0为不限购"
},
{
"Id": 19,
"PorpName": "BossExcLimit",
"PropValue": "30",
"PropDec": "年兽死亡额外掉落要求"
},
{
"Id": 20,
"PorpName": "BuffCount",
"PropValue": "1",
"PropDec": "Buff生效次数"
},
{
"Id": 21,
"PorpName": "ExchangeDiamond",
"PropValue": "30,5,1500000",
"PropDec": "单次兑换爆竹所需要消耗的钻石,获得数量,获得金币数量"
}
]
}

View File

@ -0,0 +1,84 @@
"¹ê"¡<>"¢<>d
"¡<>"¢<>d"¸ê
"¡<>"¢<>d"¸ê
"¡<>"¢<>d
"¡<>"¢<>c
"¡<>"¢<>b
"¡<>"¢<>a
"¡<>"¢<>`
  "¡<>"¢<>_


"¡<>"¢<>^
  "¡<>"¢<>]
  "¢<>\"¡<>
  "¡<>"¢<>[
"¢<>Z"¡<>
"¡<>"¢<>Y
"¡<>"¢<>X
"¡<>"¢<>W
"¡<>"¢<>V
"¡<>"¢<>U
"¡<>"¢<>T
"¡<>"¢<>S
"¡<>"¢<>R
"¡<>"¢<>Q
"¡<>"¢<>P
"¡<>"¢<>O
"¡<>"¢<>N
"¢<>M"¡<>
"¢<>L"¡<>
"¡<>"¢<>K
"¡<>"¢<>J
"¡<>"¢<>I
  "¢<>H"¡<>
!!"¡<>"¢<>G
"""¡<>"¢<>F
##"¡<>"¢<>E
$$"¡<>"¢<>D
%%"¡<>"¢<>C
&&"¡<>"¢<>B
''"¡<>"¢<>A
(("¡<>"¢<>@
)"¡<>"¢<>d"¹ê
*"¡<>"¢<>d"¸ê
+"¡<>"¢<>d"¸ê
,"¡<>"¢<>d
-"¡<>"¢<>c
."¡<>"¢<>b
/"¢<>a"¡<>
0"¡<>"¢<>`
1 "¢<>_"¡<>
2
"¡<>"¢<>^
3 "¡<>"¢<>]
4 "¡<>"¢<>\
5 "¡<>"¢<>[
6"¢<>Z"¡<>
7"¡<>"¢<>Y
8"¢<>X"¡<>
9"¡<>"¢<>W
:"¡<>"¢<>V
;"¡<>"¢<>U
<"¡<>"¢<>T
="¡<>"¢<>S
>"¡<>"¢<>R
?"¢<>Q"¡<>
@"¡<>"¢<>P
A"¡<>"¢<>O
B"¡<>"¢<>N
C"¡<>"¢<>M
D"¡<>"¢<>L
E"¡<>"¢<>K
F"¡<>"¢<>J
G"¡<>"¢<>I
H "¡<>"¢<>H
I!"¢<>G"¡<>
J""¡<>"¢<>F
K#"¡<>"¢<>E
L$"¡<>"¢<>D
M%"¡<>"¢<>C
N&"¡<>"¢<>B
O'"¡<>"¢<>A
P("¡<>"¢<>@

View File

@ -1,4 +1,4 @@
 (Ђ­в08Ўи;@dHPc
 ((Ђ­в8ўи;@dH¬PЗ
яБЧ/ 2(Ђ­в0о8Ји;@dHоPу
 (€­β8@΅θ;PdX`c
< ((€­β2ΕΈ2συ@Άθ;JσυJΖΈPdX¬`Η
?<18>ΑΧ/ 2(€­β2ΕΈ2συ@£θ;JΖΈJσυPdXξ`σ

View File

@ -18,8 +18,16 @@
"BuyCountMax": 2,
"CostDiamond": 40,
"MaxGold": 10000000,
"GoldExc": {
"310003": 1,
"40005": 1
},
"MaxDiamond": 300,
"DiamondId": 980002,
"DiamondExc": {
"310003": 1,
"40006": 1
},
"CoinPrice": 100,
"DiamondPrice": 300,
"DiamondNowPrice": 199
@ -30,8 +38,16 @@
"BuyCountMax": 99999999,
"CostDiamond": 50,
"MaxGold": 10000000,
"GoldExc": {
"310003": 1,
"40005": 2
},
"MaxDiamond": 750,
"DiamondId": 980003,
"DiamondExc": {
"310003": 1,
"40006": 2
},
"CoinPrice": 100,
"DiamondPrice": 750,
"DiamondNowPrice": 499

Binary file not shown.

View File

@ -64,12 +64,70 @@
"100002": 500
}
},
{},
{},
{},
{},
{},
{},
{
"Id": 5,
"Group": 2,
"Cost": {
"50016": 30
},
"Gain": {
"40002": 1
},
"Times": 5
},
{
"Id": 6,
"Group": 2,
"Cost": {
"50016": 10
},
"Gain": {
"100002": 3
},
"Times": 10
},
{
"Id": 7,
"Group": 2,
"Cost": {
"50016": 5
},
"Gain": {
"30001": 15
},
"Times": 15
},
{
"Id": 8,
"Group": 2,
"Cost": {
"50016": 1
},
"Gain": {
"20003": 1
},
"Times": 20
},
{
"Id": 9,
"Group": 2,
"Cost": {
"50016": 1
},
"Gain": {
"100001": 30000
}
},
{
"Id": 10,
"Group": 2,
"Cost": {
"50016": 1
},
"Gain": {
"50021": 1
}
},
{},
{},
{},

Binary file not shown.

View File

@ -1234,6 +1234,439 @@
"Award": {
"100011": 50
}
},
{
"Id": 13001,
"Order": 1,
"Name": "年兽活动",
"Des": "领取年兽签到奖励",
"ActivityType": 8,
"TaskType": 35,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50001": 5,
"50014": 1
}
},
{
"Id": 13002,
"Order": 2,
"Name": "年兽活动",
"Des": "在线时长60分钟",
"ActivityType": 8,
"TaskType": 21,
"TargetTimes": 3600,
"FinishTimes": 1,
"Award": {
"100001": 100000,
"50014": 10
}
},
{
"Id": 13003,
"Order": 3,
"Name": "年兽活动",
"Des": "购买1次任意存钱罐",
"ActivityType": 8,
"TaskType": 22,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50001": 5,
"50014": 5
}
},
{
"Id": 13004,
"Order": 4,
"Name": "年兽活动",
"Des": "游戏Tienlen比赛场5次",
"ActivityType": 8,
"TaskType": 25,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"100002": 5,
"50014": 5
},
"GameType": 1
},
{
"Id": 13005,
"Order": 5,
"Name": "年兽活动",
"Des": "游戏十三水10次",
"ActivityType": 8,
"TaskType": 5,
"TargetTimes": 10,
"FinishTimes": 1,
"Award": {
"100001": 30000,
"50014": 5
},
"GameType": 2
},
{
"Id": 13006,
"Order": 6,
"Name": "年兽活动",
"Des": "今日累计赢取1M金币",
"ActivityType": 8,
"TaskType": 8,
"TargetTimes": 1000000,
"FinishTimes": 1,
"Award": {
"50014": 5
}
},
{
"Id": 13007,
"Order": 7,
"Name": "年兽活动",
"Des": "今日消耗100钻石",
"ActivityType": 8,
"TaskType": 27,
"TargetTimes": 100,
"FinishTimes": 1,
"Award": {
"50014": 20
}
},
{
"Id": 13008,
"Order": 8,
"Name": "年兽活动",
"Des": "今日累计赢取5M金币",
"ActivityType": 8,
"TaskType": 8,
"TargetTimes": 5000000,
"FinishTimes": 1,
"Award": {
"50014": 10
}
},
{
"Id": 13009,
"Order": 9,
"Name": "年兽活动",
"Des": "今日累计赢取10M金币",
"ActivityType": 8,
"TaskType": 8,
"TargetTimes": 10000000,
"FinishTimes": 1,
"Award": {
"50014": 15
}
},
{
"Id": 13010,
"Order": 10,
"Name": "年兽活动",
"Des": "今日累计赢取20M金币",
"ActivityType": 8,
"TaskType": 8,
"TargetTimes": 20000000,
"FinishTimes": 1,
"Award": {
"50014": 20
}
},
{
"Id": 13011,
"Order": 11,
"Name": "年兽活动",
"Des": "充值任意金额",
"ActivityType": 8,
"TaskType": 7,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 10
}
},
{
"Id": 13012,
"Order": 12,
"Name": "年兽活动",
"Des": "今日消耗500钻石",
"ActivityType": 8,
"TaskType": 27,
"TargetTimes": 500,
"FinishTimes": 1,
"Award": {
"50015": 5
}
},
{
"Id": 13013,
"Order": 13,
"Name": "年兽活动",
"Des": "今日充值1.99$",
"ActivityType": 8,
"TaskType": 7,
"TargetTimes": 199,
"FinishTimes": 1,
"Award": {
"50015": 3
}
},
{
"Id": 13014,
"Order": 14,
"Name": "年兽活动",
"Des": "参与红包雨活动1次",
"ActivityType": 8,
"TaskType": 32,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50014": 5
}
},
{
"Id": 13015,
"Order": 15,
"Name": "年兽活动",
"Des": "成功对年兽造成伤害1000000点",
"ActivityType": 8,
"TaskType": 34,
"TargetTimes": 1000000,
"FinishTimes": 1,
"Award": {
"100001": 500000
}
},
{
"Id": 13016,
"Order": 16,
"Name": "年兽活动",
"Des": "成功对年兽造成伤害10000000点",
"ActivityType": 8,
"TaskType": 34,
"TargetTimes": 10000000,
"FinishTimes": 1,
"Award": {
"100002": 5
}
},
{
"Id": 13017,
"Order": 17,
"Name": "年兽活动",
"Des": "累计充值9.99$",
"ActivityType": 9,
"TaskType": 7,
"TargetTimes": 999,
"FinishTimes": 1,
"Award": {
"100001": 1000000,
"50015": 5
}
},
{
"Id": 13018,
"Order": 18,
"Name": "年兽活动",
"Des": "累计充值19.99$",
"ActivityType": 9,
"TaskType": 7,
"TargetTimes": 1999,
"FinishTimes": 1,
"Award": {
"100001": 10000000,
"50015": 10
}
},
{
"Id": 13019,
"Order": 19,
"Name": "年兽活动",
"Des": "累计充值59.99$",
"ActivityType": 9,
"TaskType": 7,
"TargetTimes": 5999,
"FinishTimes": 1,
"Award": {
"100001": 30000000,
"50015": 20
}
},
{
"Id": 13020,
"Order": 20,
"Name": "年兽活动",
"Des": "累计充值99.99$",
"ActivityType": 9,
"TaskType": 7,
"TargetTimes": 9999,
"FinishTimes": 1,
"Award": {
"100001": 50000000,
"50015": 45
}
},
{
"Id": 13021,
"Order": 21,
"Name": "年兽活动",
"Des": "成功击杀1只年兽",
"ActivityType": 9,
"TaskType": 33,
"TargetTimes": 1,
"FinishTimes": 1,
"Award": {
"50015": 2
}
},
{
"Id": 13022,
"Order": 22,
"Name": "年兽活动",
"Des": "成功击杀3只年兽",
"ActivityType": 9,
"TaskType": 33,
"TargetTimes": 3,
"FinishTimes": 1,
"Award": {
"50015": 5
}
},
{
"Id": 13023,
"Order": 23,
"Name": "年兽活动",
"Des": "成功击杀6只年兽",
"ActivityType": 9,
"TaskType": 33,
"TargetTimes": 6,
"FinishTimes": 1,
"Award": {
"50015": 10
}
},
{
"Id": 13024,
"Order": 24,
"Name": "年兽活动",
"Des": "成功击杀9只年兽",
"ActivityType": 9,
"TaskType": 33,
"TargetTimes": 9,
"FinishTimes": 1,
"Award": {
"50015": 15
}
},
{
"Id": 13025,
"Order": 25,
"Name": "年兽活动",
"Des": "成功击杀12只年兽",
"ActivityType": 9,
"TaskType": 33,
"TargetTimes": 12,
"FinishTimes": 1,
"Award": {
"50015": 20
}
},
{
"Id": 13026,
"Order": 26,
"Name": "年兽活动",
"Des": "成功击杀20只年兽",
"ActivityType": 9,
"TaskType": 33,
"TargetTimes": 20,
"FinishTimes": 1,
"Award": {
"50015": 45
}
},
{
"Id": 14001,
"Order": 1,
"Name": "累消活动",
"Des": "今日消耗99钻石",
"ActivityType": 10,
"TaskType": 27,
"TargetTimes": 99,
"FinishTimes": 1,
"Award": {
"100001": 100000,
"50014": 2
}
},
{
"Id": 14002,
"Order": 2,
"Name": "累消活动",
"Des": "今日消耗499钻石",
"ActivityType": 10,
"TaskType": 27,
"TargetTimes": 499,
"FinishTimes": 1,
"Award": {
"100001": 200000,
"50015": 2
}
},
{
"Id": 14003,
"Order": 3,
"Name": "累消活动",
"Des": "今日消耗999钻石",
"ActivityType": 10,
"TaskType": 27,
"TargetTimes": 999,
"FinishTimes": 1,
"Award": {
"100001": 300000,
"50015": 5
}
},
{
"Id": 14004,
"Order": 4,
"Name": "累消活动",
"Des": "今日消耗1999钻石",
"ActivityType": 10,
"TaskType": 27,
"TargetTimes": 1999,
"FinishTimes": 1,
"Award": {
"100001": 500000,
"50015": 10
}
},
{
"Id": 14005,
"Order": 5,
"Name": "累消活动",
"Des": "今日消耗2999钻石",
"ActivityType": 10,
"TaskType": 27,
"TargetTimes": 2999,
"FinishTimes": 1,
"Award": {
"100001": 1000000,
"50015": 15
}
},
{
"Id": 14006,
"Order": 6,
"Name": "累消活动",
"Des": "今日消耗4999钻石",
"ActivityType": 10,
"TaskType": 27,
"TargetTimes": 4999,
"FinishTimes": 1,
"Award": {
"100001": 2000000,
"50015": 25
}
}
]
}

View File

@ -0,0 +1,9 @@
{
"GameName":"推币机",
"GameId":609,
"GameMode":[0],
"SceneType":[1],
"CanForceStart":true,
"MinPlayerCnt":1,
"DefaultPlayerCnt":1
}

View File

@ -14,5 +14,9 @@
"Upgrade": "{\"zh\":\"感谢您更新客户端,更新奖励已发放至附近,请注意查收\",\"vi\":\"Cảm ơn bạn đã cập nhật ứng dụng khách. Phần thưởng cập nhật đã được phân phối gần đó, vui lòng chú ý kiểm tra nhận\",\"en\":\"Thank you for updating the client. The update reward has been distributed to everyone. Please check it carefully.\",\"kh\":\"អរគុណសម្រាប់ការធ្វើបច្ចុប្បន្នភាពហ្គេម។ រង្វាន់នៃការធ្វើបច្ចុប្បន្នភាពត្រូវបានចែកចាយទៅគ្រប់គ្នា។ សូមពិនិត្យអោយបានច្បាស់លាស់។\"}",
"LotteryTitle": "{\"zh\":\"玩游戏抽奖品\",\"vi\":\"Chơi game rút thưởng\",\"en\":\"Play games, draw prizes\",\"kh\":\"លេងហ្គេម ចាប់រង្វាន់\"}",
"Lottery": "{\"zh\":\"恭喜您在好友房玩游戏抽奖品活动中获得了大奖,奖品随邮件发放,请注意查收\",\"vi\":\"Chúc mừng bạn đã trúng giải thưởng lớn trong hoạt động rút thưởng trò chơi tại phòng bạn bè. Giải thưởng sẽ được gửi qua email, vui lòng kiểm tra cẩn thận.\",\"en\":\"Congratulations on winning the grand prize in the lucky draw activity in the friend room. The prize will be sent via email, please check it carefully.\",\"kh\":\"សូមអបអរសាទរចំពោះការឈ្នះរង្វាន់ធំក្នុងសកម្មភាពចាប់រង្វាន់ក្នុងបន្ទប់មិត្តភ័ក្តិរបស់អ្នក រង្វាន់នឹងត្រូវបានផ្ញើតាមអ៊ីម៉ែល សូមពិនិត្យមើលវាដោយយកចិត្តទុកដាក់។\"}",
"TelCodeTitle": "{\"zh\":\"话费卡兑换码\",\"vi\":\"Mã đổi thẻ điện thoại\",\"en\":\"Phone card redemption code\",\"kh\":\"លេខកូដប្រោសលោះកាតទូរស័ព្ទ\"}"
"TelCodeTitle": "{\"zh\":\"话费卡兑换码\",\"vi\":\"Mã đổi thẻ điện thoại\",\"en\":\"Phone card redemption code\",\"kh\":\"លេខកូដប្រោសលោះកាតទូរស័ព្ទ\"}",
"NianLuckTitle": "{\"zh\":\"幸运榜排行奖励\",\"vi\":\"Vượt qua phần thưởng xếp hạng\",\"en\":\"Pass Ranking Rewards\",\"kh\":\"រង្វាន់ចំណាត់ថ្នាក់ឆ្លងកាត់\"}",
"NianLuckAward": "{\"zh\":\"恭喜您在昨日年兽活动幸运排行中名次达到%v名排行奖励已发放请查收\",\"vi\":\"Chúc mừng bạn đã đạt được %v trong bảng xếp hạng vượt qua. Phần thưởng xếp hạng đã được phân phối, vui lòng kiểm tra.\",\"en\":\"Congratulations on reaching %vth place in the pass ranking. Ranking rewards have been issued. Please check.\",\"kh\":\"សូមអបអរសាទរចំពោះការឈានដល់ចំណាត់ថ្នាក់ទី %v ក្នុងចំណាត់ថ្នាក់ឆ្លងកាត់។ រង្វាន់ចំណាត់ថ្នាក់ត្រូវបានចេញ។ សូមត្រួតពិនិត្យ។\"}",
"NianDamageTitle": "{\"zh\":\"年兽活动排行奖励\",\"vi\":\"Vượt qua phần thưởng xếp hạng\",\"en\":\"Pass Ranking Rewards\",\"kh\":\"រង្វាន់ចំណាត់ថ្នាក់ឆ្លងកាត់\"}",
"NianDamageAward": "{\"zh\":\"恭喜您在本次年兽活动总排行中名次达到%v名排行奖励已发放请查收\",\"vi\":\"Chúc mừng bạn đã đạt được %v trong bảng xếp hạng vượt qua. Phần thưởng xếp hạng đã được phân phối, vui lòng kiểm tra.\",\"en\":\"Congratulations on reaching %vth place in the pass ranking. Ranking rewards have been issued. Please check.\",\"kh\":\"សូមអបអរសាទរចំពោះការឈានដល់ចំណាត់ថ្នាក់ទី %v ក្នុងចំណាត់ថ្នាក់ឆ្លងកាត់។ រង្វាន់ចំណាត់ថ្នាក់ត្រូវបានចេញ។ សូមត្រួតពិនិត្យ។\"}"
}

View File

@ -76,4 +76,20 @@ func init() {
return
},
})
//年兽排行榜
mq.RegisterHandler(&mq.RegisterHandlerParam{
Name: model.MQRankNian,
Data: &model.NianInfo{},
Handler: func(data interface{}) (err error) {
log, ok := data.(*model.NianInfo)
if !ok {
return
}
err = svc.RankNianUpsert(log)
if err != nil {
logger.Logger.Errorf("RankNianUpsert err: %v", err)
}
return
},
})
}

View File

@ -3,6 +3,7 @@ package mq
import (
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/dao"
"mongo.games.com/game/dbproxy/svc"
"mongo.games.com/game/model"
"mongo.games.com/game/mq"
@ -27,4 +28,28 @@ func init() {
return
},
})
mq.RegisterHandler(&mq.RegisterHandlerParam{
Name: mq.DBRedPacket,
Data: &model.RedPacketHistory{},
Handler: func(data interface{}) (err error) {
log, ok := data.(*model.RedPacketHistory)
if !ok {
return
}
d, err := dao.GetRedPacketHistory(log.Platform)
if err != nil {
logger.Logger.Errorf("get RedPacketHistory failed: %v", err)
return err
}
err = d.Save(log)
if err != nil {
logger.Logger.Errorf("Save RedPacketHistory failed: %v", err)
return err
}
return nil
},
})
}

View File

@ -36,6 +36,9 @@ func (svc *FriendUnreadSvc) UpsertFriendUnread(args *model.FriendUnreadByKey, re
if cc == nil {
return FriendUnreadColError
}
if ret == nil {
ret = &model.FriendUnreadRet{}
}
err := cc.Find(bson.M{"snid": args.SnId}).One(&ret.FU)
if err != nil && err != mgo.ErrNotFound {
logger.Logger.Error("UpsertFriendUnread Find is err: ", err)
@ -76,6 +79,9 @@ func (svc *FriendUnreadSvc) UpdateFriendUnread(args *model.FriendUnreadByKey, re
if cc == nil {
return FriendUnreadColError
}
if ret == nil {
ret = &model.FriendUnreadRet{}
}
err := cc.Find(bson.M{"snid": args.SnId}).One(&ret.FU)
if err != nil && err != mgo.ErrNotFound {
logger.Logger.Error("UpdateFriendUnread Find is err: ", err)
@ -98,6 +104,9 @@ func (svc *FriendUnreadSvc) QueryFriendUnreadByKey(args *model.FriendUnreadByKey
if fc == nil {
return FriendUnreadColError
}
if ret == nil {
ret = &model.FriendUnreadRet{}
}
err := fc.Find(bson.M{"snid": args.SnId}).One(&ret.FU)
if err != nil && err != mgo.ErrNotFound {
logger.Logger.Error("QueryFriendUnreadByKey is err: ", err)

143
dbproxy/svc/l_ranknian.go Normal file
View File

@ -0,0 +1,143 @@
package svc
import (
"errors"
"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
"mongo.games.com/game/dbproxy/mongo"
"mongo.games.com/game/model"
"mongo.games.com/goserver/core/logger"
"net/rpc"
)
var (
RankNianDBName = "log"
RankNianCollName = "log_ranknian"
RankNianColError = errors.New("RankNian collection open failed")
)
func RankNianCollection(plt string) *mongo.Collection {
s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, RankNianDBName)
if s != nil {
c, first := s.DB().C(RankNianCollName)
if first {
c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true})
c.EnsureIndex(mgo.Index{Key: []string{"-luck"}, Background: true, Sparse: true})
c.EnsureIndex(mgo.Index{Key: []string{"-damage"}, Background: true, Sparse: true})
}
return c
}
return nil
}
func RankNianUpsert(args *model.NianInfo) error {
cc := RankNianCollection(args.Platform)
if cc == nil {
return RankNianColError
}
update := bson.M{
"$set": bson.M{
"platform": args.Platform,
"name": args.Name,
"damage": args.Damage,
"modid": args.ModId,
"ts": args.Ts,
},
}
if args.Luck != 0 {
update["$set"].(bson.M)["luck"] = args.Luck
}
if args.LuckTime != 0 {
update["$set"].(bson.M)["lucktime"] = args.LuckTime
}
_, err := cc.Upsert(
bson.M{"snid": args.SnId},
update,
)
if err != nil && !errors.Is(err, mgo.ErrNotFound) {
logger.Logger.Error("RankNianSvc.Upsert is err: ", err)
return err
}
return nil
}
type RankNianSvc struct {
}
func (svc *RankNianSvc) Upsert(args *model.NianInfo, ret *bool) error {
err := RankNianUpsert(args)
if err != nil {
return err
}
*ret = true
return nil
}
// 幸运榜
func (svc *RankNianSvc) LuckFind(args *model.FindNianListArgs, ret *model.FindNianListReply) error {
fc := RankNianCollection(args.Platform)
if fc == nil {
return RankNianColError
}
err := fc.Find(bson.M{"luck": bson.M{"$gt": 0}}).Sort("-luck").Limit(40).All(&ret.List)
if err != nil && !errors.Is(err, mgo.ErrNotFound) {
logger.Logger.Error("QueryMatchSeason is err: ", err)
return err
}
return nil
}
// 伤害榜
func (svc *RankNianSvc) DamageFind(args *model.FindNianListArgs, ret *model.FindNianListReply) error {
fc := RankNianCollection(args.Platform)
if fc == nil {
return RankNianColError
}
err := fc.Find(bson.M{"damage": bson.M{"$gt": 0}}).Sort("-damage").Limit(40).All(&ret.List)
if err != nil && !errors.Is(err, mgo.ErrNotFound) {
logger.Logger.Error("QueryMatchSeason is err: ", err)
return err
}
return nil
}
func (svc *RankNianSvc) UpdateAll(args *model.FindNianListArgs, ret *model.FindNianListReply) error {
fc := RankNianCollection(args.Platform)
if fc == nil {
return RankNianColError
}
// 根据 args 中的条件构建查询
query := bson.M{"platform": args.Platform}
update := bson.M{
"$set": bson.M{
"luck": 0,
"lucktime": 0,
},
}
_, err := fc.UpdateAll(query, update)
if err != nil {
logger.Logger.Error("RankNianSvc.UpdateAll is err: ", err)
return err
}
return nil
}
func (svc *RankNianSvc) DelAll(args *model.FindNianListArgs, ret *model.FindNianListReply) error {
fc := RankNianCollection(args.Platform)
if fc == nil {
return RankNianColError
}
query := bson.M{"platform": args.Platform}
_, err := fc.RemoveAll(query)
if err != nil {
logger.Logger.Error("RankNianSvc.RemoveAll is err: ", err)
return err
}
return nil
}
func init() {
rpc.Register(new(RankNianSvc))
}

View File

@ -0,0 +1,71 @@
package svc
import (
"net/rpc"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/mongox"
"mongo.games.com/game/dao"
"mongo.games.com/game/model"
)
var RedPacketSvc = new(RedPacketService)
func init() {
rpc.Register(RedPacketSvc)
}
type RedPacketService struct {
}
func (r *RedPacketService) GetAll(plt *string, res *[]*model.RedPacket) error {
d, err := dao.GetRedPacket(*plt)
if err != nil {
return err
}
list, err := d.GetAll()
if err != nil {
logger.Logger.Errorf("RedPacketService.GetAll error: %v", err)
return err
}
*res = list
return nil
}
func (r *RedPacketService) UpdateAll(req *model.UpdateRedPacketAllReq, res *bool) error {
d, err := mongox.GetDao(req.Plt, dao.NewRedPacket)
if err != nil {
return err
}
err = d.UpdateAll(req.List)
if err != nil {
logger.Logger.Errorf("RedPacketService.UpdateAll error: %v", err)
return err
}
*res = true
return nil
}
func (r *RedPacketService) GetHistory(req *model.GetRedPacketHistoryReq, res *[]*model.RedPacketHistory) error {
d, err := dao.GetRedPacketHistory(req.Plt)
if err != nil {
return err
}
list, err := d.GetHistory(req.Snid, req.Cid)
if err != nil {
logger.Logger.Errorf("RedPacketService.GetHistory error: %v", err)
return err
}
*res = list
return nil
}

View File

@ -54,6 +54,10 @@ func (svc *FriendSvc) QueryFriendByKey(args *model.FriendByKey, ret *model.Frien
if fc == nil {
return FriendColError
}
if ret == nil {
ret = &model.FriendRet{}
ret.Fri = &model.Friend{}
}
err := fc.Find(bson.M{"platform": args.Platform, "snid": args.SnId}).One(&ret.Fri)
if err != nil && !errors.Is(err, mgo.ErrNotFound) {
logger.Logger.Error("QueryFriendByKey is err: ", err)

View File

@ -9,6 +9,7 @@ import (
"reflect"
"strconv"
"strings"
"sync"
"time"
newMongo "go.mongodb.org/mongo-driver/mongo"
@ -68,6 +69,7 @@ func PlayerDelBackupDataCollection(plt string) *mongo.Collection {
}
type PlayerDataSvc struct {
mu sync.Mutex // 互斥锁
}
func (svc *PlayerDataSvc) InsertPlayerData(args *model.InsertPlayerDataParam, ret *model.PlayerDataRet) (err error) {
@ -323,6 +325,8 @@ func SavePlayerData(pd *model.PlayerData) (err error) {
* 保存玩家的全部信息
*/
func (svc *PlayerDataSvc) SavePlayerData(pd *model.PlayerData, ret *bool) (err error) {
svc.mu.Lock()
defer svc.mu.Unlock()
err = SavePlayerData(pd)
*ret = err == nil
return

View File

@ -30,23 +30,30 @@ const (
ETCDKEY_PLAYERPOOL = "/game/plt/playerpool/" // 个人水池调控配置
ETCDKEY_GAME_CONFIG = "/game/plt/gameconfig/" // 游戏管理/全局配置
ETCDKEY_ACT_PHONELOTTERY = "/game/act_phoneLottery"
ETCDKEY_ChannelSwitch = "/game/channel/switch" // 渠道开关
ETCDKEY_ACT_Invite = "/game/act_invite" // 邀请活动配置
ETCDKEY_ACT_Permit = "/game/act_permit" // 赛季通行证配置
ETCDKEY_DIAMOND_LOTTERY = "/game/diamond_lottery" // 钻石抽奖配置
ETCDKEY_Item = "/game/item/" // 道具列表
ETCDKEY_SKin = "/game/skin_config" // 皮肤配置
ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置
ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录
ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置
ETCDKEY_MACHINE = "/game/machine_config" //娃娃机配置
ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众
ETCDKEY_Spirit = "/game/spirit" // 小精灵配置
ETCDKEY_RoomType = "/game/room_type/" // 房间类型配置
ETCDKEY_RoomConfig = "/game/room_config/" // 房间配置
ETCDKEY_RoomConfigSystem = "/game/room_system" // 系统房间配置
ETCDKEY_ClientUpgrade = "/game/client_upgrade" // 客户端升级奖励配置
ETCDKEY_PopUpWindow = "/game/PopUpWindowConfig" //弹窗配置
ETCDKEY_LotteryConfig = "/game/lottery" //抽奖配置
ETCDKEY_LotteryUser = "/game/user_lottery" //抽奖用户必中配置
ETCDKEY_ChannelSwitch = "/game/channel/switch" // 渠道开关
ETCDKEY_ACT_Invite = "/game/act_invite" // 邀请活动配置
ETCDKEY_ACT_Permit = "/game/act_permit" // 赛季通行证配置
ETCDKEY_DIAMOND_LOTTERY = "/game/diamond_lottery" // 钻石抽奖配置
ETCDKEY_Item = "/game/item/" // 道具列表
ETCDKEY_SKin = "/game/skin_config" // 皮肤配置
ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置
ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录
ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置
ETCDKEY_MACHINE = "/game/machine_config" //娃娃机配置
ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众
ETCDKEY_Spirit = "/game/spirit" // 小精灵配置
ETCDKEY_RoomType = "/game/room_type/" // 房间类型配置
ETCDKEY_RoomConfig = "/game/room_config/" // 房间配置
ETCDKEY_RoomConfigSystem = "/game/room_system" // 系统房间配置
ETCDKEY_ClientUpgrade = "/game/client_upgrade" // 客户端升级奖励配置
ETCDKEY_PopUpWindow = "/game/PopUpWindowConfig" //弹窗配置
ETCDKEY_LotteryConfig = "/game/lottery" //抽奖配置
ETCDKEY_LotteryUser = "/game/user_lottery" //抽奖用户必中配置
ETCDKEY_PigBankDiamond = "/game/pigbank_diamond" //存钱罐消耗获得
ETCDKEY_PigBankProp = "/game/pigbank_prop" //存钱罐属性
ETCDKEY_NianConfig = "/game/activity_nian" //年兽活动配置
ETCDKEY_NianRankConfig = "/game/activity_nian_rank" //年兽排行榜配置
KeyRedPacket = "/game/act_redpacket" //红包配置
KeyActConsume = "/game/act_consume" //累计消耗活动配置
KeyActPushCoin = "/game/act_pushcoin" //推金币活动配置
)

View File

@ -0,0 +1,11 @@
package pushcoin
const (
GameStatePlay = iota
GameStateMax
)
const (
PowerMax = 700000
PowerInit = 400000
)

View File

@ -29,6 +29,10 @@ func init() {
etcd.Register(etcd.ETCDKEY_SKin, webapi.SkinConfig{}, platformConfigEtcd)
// 娃娃机配置
etcd.Register(etcd.ETCDKEY_MACHINE, webapi.MachineConfig{}, platformConfigEtcd)
// 存钱罐消耗获得
etcd.Register(etcd.ETCDKEY_PigBankDiamond, webapi.GamePigBankDiamondConfig{}, platformConfigEtcd)
// 存钱罐属性值
etcd.Register(etcd.ETCDKEY_PigBankProp, webapi.GamePigBankPropConfig{}, platformConfigEtcd)
}
func platformConfigEtcd(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) {
@ -51,6 +55,10 @@ func platformConfigEtcd(ctx context.Context, completeKey string, isInit bool, ev
case *webapi.ItemConfig:
ConfigMgrInst.GetConfig(d.Platform).ItemConfig = d
srvdata.GameItemMgr.SetConfig(d)
case *webapi.GamePigBankDiamondConfig:
ConfigMgrInst.GetConfig(d.Platform).GamePigBankDiamondConfig = d
case *webapi.GamePigBankPropConfig:
ConfigMgrInst.GetConfig(d.Platform).GamePigBankPropConfig = d
default:
logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey)
}

View File

@ -1243,12 +1243,18 @@ func (this *Player) UpdatePigBankCoin(gainTexCoin int64) {
return
}
// 渠道开关
if !ConfigMgrInst.IsOn(this.Platform, common.ChannelSwitchPigBankCoin, this.LastChannel) {
return
}
if this.PlayerData.WelfData == nil || this.PlayerData.WelfData.PigBank == nil {
return
}
fGetPropValue := func(propName string) int64 {
pool := srvdata.PBDB_Pigbank_PropMgr.Datas.GetArr()
//pool := srvdata.PBDB_Pigbank_PropMgr.Datas.GetArr()
pool := ConfigMgrInst.GetConfig(this.Platform).GamePigBankPropConfig.PropInfo
for _, PropItem := range pool {
if PropItem.PorpName == propName {
return int64(PropItem.PropValue)
@ -1257,7 +1263,9 @@ func (this *Player) UpdatePigBankCoin(gainTexCoin int64) {
return 0
}
BankCoinMax := int64(0)
for _, data := range srvdata.PBDB_PigBank_DiamondMgr.Datas.GetArr() {
// pool := srvdata.PBDB_PigBank_DiamondMgr.Datas.GetArr()
pool := ConfigMgrInst.GetConfig(this.Platform).GamePigBankDiamondConfig.DiamondInfo
for _, data := range pool {
if this.WelfData.PigBank.DayBuyTimes+1 >= data.BuyCountMin && this.WelfData.PigBank.DayBuyTimes+1 <= data.BuyCountMax {
BankCoinMax = int64(data.MaxGold)
break

View File

@ -62,6 +62,14 @@ func (nsa *NpcServerAgent) SyncDBGameFree(roomId int, DBGameFree *server.DB_Game
}
}
func (nsa *NpcServerAgent) DestroyScene(sceneId int) {
pack := &server.GRDestroyScene{
SceneId: proto.Int(sceneId),
}
nsa.sendPacket(int(server.SSPacketID_PACKET_GR_DESTROYSCENE), pack)
}
// Invite 邀请机器人
func (nsa *NpcServerAgent) Invite(roomId, cnt int, gameFreeId int32) bool {
//logger.Logger.Trace("(nsa *NpcServerAgent) Invite", roomId, cnt, isAgent, gameFreeId)

View File

@ -908,6 +908,9 @@ func (this *Scene) Destroy(force bool) {
}
proto.SetDefaults(pack)
this.SendToWorld(int(server.SSPacketID_PACKET_GW_DESTROYSCENE), pack)
NpcServerAgentSingleton.DestroyScene(int(this.SceneId))
logger.Logger.Trace("(this *Scene) Destroy(force bool) isCompleted", isCompleted)
}
@ -2094,11 +2097,6 @@ func (this *Scene) Statistics(param *StaticParam) {
logger.Logger.Tracef("Statistics gameId:%v wbLevel:%v gain:%v addGain:%v", this.GameId, wbLevel, param.Gain, addGain)
// 比赛场,私人房不统计
if this.IsMatchScene() || this.IsPrivateScene() {
return
}
var totalIn int64
var totalOut int64
now := time.Now()
@ -2181,6 +2179,40 @@ func (this *Scene) Statistics(param *StaticParam) {
statics = append(statics, &data.Statics)
}
f := func(list []*model.PlayerGameStatics) {
for _, data := range list {
if data != nil {
if !this.IsMatchScene() && !this.IsPrivateScene() { // 比赛场,私人房不统计
data.TotalIn += totalIn
data.TotalOut += totalOut
data.Tax += param.GainTax
}
if param.IsAddTimes {
data.GameTimes++
if param.Gain > 0 {
data.WinGameTimes++
data.WinGameTimesNum++
data.LoseGameTimesNum = 0
} else if param.Gain < 0 {
data.LoseGameTimes++
data.LoseGameTimesNum++
data.WinGameTimesNum = 0
} else {
data.DrawGameTimes++
data.WinGameTimesNum = 0
data.LoseGameTimesNum = 0
}
}
}
}
}
f(statics)
statics = statics[:0]
if this.IsMatchScene() || this.IsPrivateScene() {
return
}
// 新手输赢统计
if !model.GameParamData.CloseNovice && !common.InSliceInt(model.GameParamData.CloseNoviceGame, int(this.GameId)) && isControl && wbLevel == 0 && isNovice {
keyNoviceGameId := common.GetKeyNoviceGameId(int(this.GameId))
@ -2249,29 +2281,8 @@ func (this *Scene) Statistics(param *StaticParam) {
logger.Logger.Tracef("Statistics PlayerPool gameId:%v wbLevel:%v gain:%v addGain:%v", this.GameId, wbLevel, param.Gain, addGain)
}
for _, data := range statics {
if data != nil {
data.TotalIn += totalIn
data.TotalOut += totalOut
data.Tax += param.GainTax
if param.IsAddTimes {
data.GameTimes++
if param.Gain > 0 {
data.WinGameTimes++
data.WinGameTimesNum++
data.LoseGameTimesNum = 0
} else if param.Gain < 0 {
data.LoseGameTimes++
data.LoseGameTimesNum++
data.WinGameTimesNum = 0
} else {
data.DrawGameTimes++
data.WinGameTimesNum = 0
data.LoseGameTimesNum = 0
}
}
}
}
f(statics)
statics = statics[:0]
// 玩家身上元数据
if param.IsAddTimes {

View File

@ -46,13 +46,6 @@ type ScenePolicy interface {
CanAddCoin(s *Scene, p *Player, val int64) bool
//当前状态能否换桌
CanChangeCoinScene(s *Scene, p *Player) bool
//创建场景扩展数据
CreateSceneExData(s *Scene) interface{}
//创建玩家扩展数据
CreatePlayerExData(s *Scene, p *Player) interface{}
//
PacketGameData(s *Scene) interface{}
InterventionGame(s *Scene, data interface{}) interface{}
//通知分场状态
NotifyGameState(s *Scene)
@ -237,18 +230,14 @@ func (bsp *BaseScenePolicy) OnAudienceDropLine(s *Scene, p *Player) {
}
}
}
func (bsp *BaseScenePolicy) GetSceneState(s *Scene, stateid int) SceneState { return G_BaseSceneState }
func (bsp *BaseScenePolicy) IsCompleted(s *Scene) bool { return false }
func (bsp *BaseScenePolicy) IsCanForceStart(s *Scene) bool { return false }
func (bsp *BaseScenePolicy) ForceStart(s *Scene) {}
func (bsp *BaseScenePolicy) CanAddCoin(s *Scene, p *Player, val int64) bool { return true } /*百人牛牛,百人金华多倍结算,且当前是减币的情况下,需要判断*/
func (bsp *BaseScenePolicy) CanChangeCoinScene(s *Scene, p *Player) bool { return false }
func (bsp *BaseScenePolicy) CreateSceneExData(s *Scene) interface{} { return false }
func (bsp *BaseScenePolicy) CreatePlayerExData(s *Scene, p *Player) interface{} { return false }
func (bsp *BaseScenePolicy) PacketGameData(s *Scene) interface{} { return nil }
func (bsp *BaseScenePolicy) InterventionGame(s *Scene, data interface{}) interface{} { return nil }
func (bsp *BaseScenePolicy) NotifyGameState(s *Scene) {}
func (bsp *BaseScenePolicy) GetJackPotVal(s *Scene) int64 { return 0 }
func (bsp *BaseScenePolicy) GetSceneState(s *Scene, stateid int) SceneState { return G_BaseSceneState }
func (bsp *BaseScenePolicy) IsCompleted(s *Scene) bool { return false }
func (bsp *BaseScenePolicy) IsCanForceStart(s *Scene) bool { return false }
func (bsp *BaseScenePolicy) ForceStart(s *Scene) {}
func (bsp *BaseScenePolicy) CanAddCoin(s *Scene, p *Player, val int64) bool { return true } /*百人牛牛,百人金华多倍结算,且当前是减币的情况下,需要判断*/
func (bsp *BaseScenePolicy) CanChangeCoinScene(s *Scene, p *Player) bool { return false }
func (bsp *BaseScenePolicy) NotifyGameState(s *Scene) {}
func (bsp *BaseScenePolicy) GetJackPotVal(s *Scene) int64 { return 0 }
var G_BaseSceneState = &BaseSceneState{}

View File

@ -0,0 +1,42 @@
package thirteen
import (
"mongo.games.com/game/common"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/protocol/pushcoin"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
)
func init() {
common.Register(int(pushcoin.PushCoinPacketID_PACKET_CSPushCoinPlayerOp), &pushcoin.CSPushCoinPlayerOp{}, CSPushCoinPlayerOp)
}
func CSPushCoinPlayerOp(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerOpHandler Process recv ", data)
if msg, ok := data.(*pushcoin.CSPushCoinPlayerOp); ok {
p := base.PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerOpHandler p == nil")
return nil
}
scene := p.GetScene()
if scene == nil {
logger.Logger.Warn("CSPlayerOpHandler p.scene == nil")
return nil
}
if scene.KeyGameDif != common.GameDifPushCoin {
logger.Logger.Error("CSPlayerOpHandler gameId Error ", scene.GameId)
return nil
}
if !scene.HasPlayer(p) {
return nil
}
sp := scene.GetScenePolicy()
if sp != nil {
sp.OnPlayerOp(scene, p, int(msg.GetOpCode()), msg.GetOpParam())
}
return nil
}
return nil
}

View File

@ -0,0 +1,25 @@
package thirteen
import (
"mongo.games.com/game/gamesrv/base"
)
type GameData struct {
Shake int32 // 震动次数
Refresh int64 // 刷新次数
Power int64 // 能量值
Base int64 // 底注
}
type PlayerEx struct {
*base.Player //玩家信息
*GameData
}
func NewPushCoinPlayerData(p *base.Player, data *GameData) *PlayerEx {
playerEx := &PlayerEx{
Player: p,
GameData: data,
}
return playerEx
}

74
gamesrv/pushcoin/scene.go Normal file
View File

@ -0,0 +1,74 @@
package thirteen
import (
"mongo.games.com/game/common"
rule "mongo.games.com/game/gamerule/pushcoin"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/protocol/pushcoin"
"mongo.games.com/game/srvdata"
)
type SceneEx struct {
*base.Scene //场景
}
func NewPushCoinSceneData(s *base.Scene) *SceneEx {
sceneEx := &SceneEx{
Scene: s,
}
return sceneEx
}
func (this *SceneEx) CreateRoomInfoPacket(s *base.Scene, p *base.Player) *pushcoin.SCPushCoinRoomInfo {
playerEx, ok := p.ExtraData.(*PlayerEx)
if !ok {
return nil
}
roomInfo := &pushcoin.SCPushCoinRoomInfo{
RoomId: int32(s.GetSceneId()),
GameId: s.GameId,
RoomMode: int32(s.GetSceneMode()),
Params: common.CopySliceInt64ToInt32(s.GetParams()),
State: int32(s.GetSceneState().GetState()),
TimeOut: int32(s.GetSceneState().GetTimeout(s)),
BetList: s.GetDBGameFree().GetOtherIntParams(),
}
player := pushcoin.PushCoinPlayerData{
Name: p.Name,
SnId: p.SnId,
Head: p.Head,
Sex: p.Sex,
Coin: p.Coin,
Flag: int32(p.Flags),
VIP: p.VIP,
RoleId: p.Roles.ModId,
Level: p.Level,
Exp: p.Exp,
ShakeTimes: playerEx.Shake,
BaseCoin: playerEx.Base,
PowerLine: playerEx.Power,
PowerLineMax: rule.PowerMax,
RefreshTimes: playerEx.Refresh,
}
if p.Roles != nil {
player.RoleId = p.Roles.ModId
}
if p.Skin != nil {
player.SkinId = p.Skin.ModId
}
roomInfo.Players = append(roomInfo.Players, &player)
for _, v := range srvdata.PBDB_PropExchangeMgr.Datas.Arr {
if v.GetGroup() == 2 {
roomInfo.ExchangeList = append(roomInfo.ExchangeList, &pushcoin.ExchangeInfo{
Id: v.GetId(),
})
}
}
return roomInfo
}

View File

@ -0,0 +1,332 @@
package thirteen
import (
"encoding/json"
"time"
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/common"
rule "mongo.games.com/game/gamerule/pushcoin"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/model"
"mongo.games.com/game/protocol/pushcoin"
)
var PolicySingleton = &Policy{}
type Policy struct {
base.BaseScenePolicy
states [rule.GameStateMax]base.SceneState
}
func (this *Policy) OnStart(s *base.Scene) {
logger.Logger.Trace("(this *PushCoinPolicy) OnStart, sceneId=", s.GetSceneId())
sceneEx := NewPushCoinSceneData(s)
if sceneEx != nil {
s.ExtraData = sceneEx
s.ChangeSceneState(rule.GameStatePlay)
}
}
func (this *Policy) OnStop(s *base.Scene) {
logger.Logger.Trace("(this *Policy) OnStop , sceneId=", s.GetSceneId())
}
func (this *Policy) OnTick(s *base.Scene) {
if s == nil {
return
}
if s.SceneState != nil {
s.SceneState.OnTick(s)
}
}
func (this *Policy) OnPlayerEnter(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.SnId)
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return
}
data := p.GDatas[s.KeyGamefreeId]
if data == nil {
data = &model.PlayerGameInfo{}
p.GDatas[s.KeyGamefreeId] = data
}
gamedata := &GameData{}
if data.DataEx != nil {
err := json.Unmarshal(data.DataEx, gamedata)
if err != nil {
logger.Logger.Error("OnPlayerEnter, json.Unmarshal error, err=", err)
return
}
} else {
// 底注
baseCoins := s.GetDBGameFree().GetOtherIntParams()
if len(baseCoins) > 0 {
gamedata.Base = baseCoins[0]
} else {
gamedata.Base = 5000
}
gamedata.Power = rule.PowerInit
}
p.ExtraData = NewPushCoinPlayerData(p, gamedata)
//给自己发送房间信息
this.SendRoomInfo(s, p, sceneEx)
s.FirePlayerEvent(p, base.PlayerEventEnter, nil)
}
func (this *Policy) OnPlayerLeave(s *base.Scene, p *base.Player, reason int) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnPlayerLeave, sceneId=", s.GetSceneId(), " player=", p.SnId)
playerEx, ok := p.ExtraData.(*PlayerEx)
if !ok {
return
}
data := p.GDatas[s.KeyGamefreeId]
if data == nil {
data = &model.PlayerGameInfo{}
p.GDatas[s.KeyGamefreeId] = data
}
b, err := json.Marshal(playerEx.GameData)
if err != nil {
logger.Logger.Error("OnPlayerLeave, json.Marshal error, err=", err)
return
}
data.DataEx = b
s.FirePlayerEvent(p, base.PlayerEventLeave, nil)
}
func (this *Policy) OnPlayerDropLine(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnPlayerDropLine, sceneId=", s.GetSceneId(), " player=", p.SnId)
s.FirePlayerEvent(p, base.PlayerEventDropLine, nil)
}
func (this *Policy) OnPlayerRehold(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnPlayerRehold, sceneId=", s.GetSceneId(), " player=", p.SnId)
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return
}
this.SendRoomInfo(s, p, sceneEx)
s.FirePlayerEvent(p, base.PlayerEventRehold, nil)
}
func (this *Policy) OnPlayerReturn(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnPlayerRehold, sceneId=", s.GetSceneId(), " player=", p.SnId)
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return
}
this.SendRoomInfo(s, p, sceneEx)
s.FirePlayerEvent(p, base.PlayerEventReturn, nil)
}
func (this *Policy) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
if s == nil || p == nil {
return false
}
logger.Logger.Trace("(this *Policy) OnPlayerOp, sceneId=", s.GetSceneId(), " player=", p.SnId, " opcode=", opcode, " params=", params)
if s.SceneState != nil {
p.LastOPTimer = time.Now()
return s.SceneState.OnPlayerOp(s, p, opcode, params)
}
return true
}
func (this *Policy) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnPlayerEvent, sceneId=", s.GetSceneId(), " player=", p.SnId, " eventcode=", evtcode, " params=", params)
if s.SceneState != nil {
s.SceneState.OnPlayerEvent(s, p, evtcode, params)
}
}
func (this *Policy) OnAudienceEnter(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnAudienceEnter, sceneId=", s.GetSceneId(), " player=", p.SnId)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
//给自己发送房间信息
this.SendRoomInfo(s, p, sceneEx)
s.FirePlayerEvent(p, base.AudienceEventEnter, nil)
}
}
func (this *Policy) OnAudienceLeave(s *base.Scene, p *base.Player, reason int) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnAudienceLeave, sceneId=", s.GetSceneId(), " player=", p.SnId)
s.FirePlayerEvent(p, base.AudienceEventLeave, nil)
}
func (this *Policy) OnAudienceDropLine(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *Policy) OnAudienceDropLine, sceneId=", s.GetSceneId(), " player=", p.SnId)
s.AudienceLeave(p, common.PlayerLeaveReason_DropLine)
s.FirePlayerEvent(p, base.AudienceEventDropLine, nil)
}
func (this *Policy) OnAudienceSit(s *base.Scene, p *base.Player) {
}
func (this *Policy) IsCompleted(s *base.Scene) bool {
return true
}
func (this *Policy) IsCanForceStart(s *base.Scene) bool {
return true
}
func (this *Policy) ForceStart(s *base.Scene) {
}
func (this *Policy) CanChangeCoinScene(s *base.Scene, p *base.Player) bool {
if s == nil || p == nil {
return false
}
if s.SceneState != nil {
return s.SceneState.CanChangeCoinScene(s, p)
}
return false
}
func (this *Policy) SendRoomInfo(s *base.Scene, p *base.Player, sceneEx *SceneEx) {
pack := sceneEx.CreateRoomInfoPacket(s, p)
p.SendToClient(int(pushcoin.PushCoinPacketID_PACKET_SCPushCoinRoomInfo), pack)
}
//=====================================
// StateGaming 游戏中
//=====================================
type StateGaming struct {
}
func (this *StateGaming) CanChangeCoinScene(s *base.Scene, p *base.Player) bool {
return true
}
func (this *StateGaming) OnLeave(s *base.Scene) {
}
func (this *StateGaming) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
}
func (this *StateGaming) GetState() int {
return rule.GameStatePlay
}
func (this *StateGaming) CanChangeTo(s base.SceneState) bool {
return true
}
func (this *StateGaming) GetTimeout(s *base.Scene) int {
if sceneEx, ok := s.GetExtraData().(*SceneEx); ok {
return int(time.Now().Sub(sceneEx.StateStartTime) / time.Second)
}
return 0
}
func (this *StateGaming) OnEnter(s *base.Scene) {
}
func (this *StateGaming) OnTick(s *base.Scene) {
}
func (this *StateGaming) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
logger.Logger.Trace("(this *StateGaming) OnPlayerOp, sceneId=", s.GetSceneId(), " player=", p.SnId, " opcode=", opcode, " params=", params)
_, ok := s.ExtraData.(*SceneEx)
if !ok {
return false
}
_, ok = p.ExtraData.(*PlayerEx)
if !ok {
return false
}
pack := &pushcoin.SCPushCoinPlayerOp{
OpRetCode: pushcoin.OpResultCode_OPRC_Error,
OpCode: pushcoin.OpCodes(opcode),
}
switch pushcoin.OpCodes(opcode) {
case pushcoin.OpCodes_OP_Bet:
case pushcoin.OpCodes_OP_Gain:
case pushcoin.OpCodes_OP_Shake:
case pushcoin.OpCodes_OP_Refresh:
case pushcoin.OpCodes_OP_Exchange:
case pushcoin.OpCodes_OP_Draw:
default:
return true
}
p.SendToClient(int(pushcoin.PushCoinPacketID_PACKET_SCPushCoinPlayerOp), pack)
return true
}
func (this *Policy) RegisteSceneState(state base.SceneState) {
if state == nil {
return
}
id := state.GetState()
if id < 0 || id >= rule.GameStateMax {
return
}
this.states[id] = state
}
func (this *Policy) GetSceneState(s *base.Scene, stateid int) base.SceneState {
if stateid >= 0 && stateid < rule.GameStateMax {
return this.states[stateid]
}
return nil
}
func init() {
PolicySingleton.RegisteSceneState(&StateGaming{})
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
base.RegisteScenePolicy(common.GameId_PushCoin, 0, PolicySingleton)
return nil
})
}

View File

@ -73,6 +73,7 @@ type TienLenSceneData struct {
RoundLogId []string // 每局牌局记录id
CustomLogSave bool // 是否已经保存日志
PlayerAward map[int32]*[]*model.Item // 房卡场最终奖励
bill *tienlen.SCTienLenGameBilled
}
func NewTienLenSceneData(s *base.Scene) *TienLenSceneData {

View File

@ -427,6 +427,7 @@ func TienLenCreateRoomInfoPacket(s *base.Scene, p *base.Player, sceneEx *TienLen
NumOfGames: proto.Int(sceneEx.NumOfGames),
TotalOfGames: sceneEx.TotalOfGames,
CurOpIdx: proto.Int(-1),
IsSmallCard: sceneEx.FindWinPos() == -1,
MasterSnid: proto.Int32(sceneEx.masterSnid),
AudienceNum: proto.Int(s.GetAudiencesNum()),
BaseScore: proto.Int32(s.GetBaseScore()),
@ -1057,12 +1058,14 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) {
}
if len(sceneEx.tianHuSnids) == 0 { //没有天胡玩家
//有赢家,赢家先出;无赢家手持最小牌先
pos := int32(sceneEx.FindWinPos())
if pos == -1 {
winPos := int32(sceneEx.FindWinPos())
pos := winPos
if winPos == -1 {
pos = sceneEx.startOpPos
}
pack := &tienlen.SCTienLenFirstOpPos{
Pos: proto.Int32(pos),
Pos: pos,
IsSmallCard: winPos == -1,
}
proto.SetDefaults(pack)
sceneEx.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenFirstOpPos), pack, 0)
@ -2623,6 +2626,7 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) {
proto.SetDefaults(pack)
s.Broadcast(int(tienlen.TienLenPacketID_PACKET_SCTienLenGameBilled), pack, 0)
logger.Logger.Trace("TienLenPacketID_PACKET_SCTienLenGameBilled gameFreeId:", sceneEx.GetGameFreeId(), ";pack:", pack)
sceneEx.bill = pack
if sceneEx.IsCustom() && sceneEx.TotalOfGames > 0 {
for _, v := range tienlenType.PlayerData {
@ -2932,6 +2936,16 @@ func (this *SceneBilledStateTienLen) OnPlayerOp(s *base.Scene, p *base.Player, o
// 玩家事件
func (this *SceneBilledStateTienLen) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
this.SceneBaseStateTienLen.OnPlayerEvent(s, p, evtcode, params)
sceneEx, ok := s.GetExtraData().(*TienLenSceneData)
if !ok {
return
}
switch evtcode {
case base.PlayerEventRehold:
if sceneEx.bill != nil && sceneEx.IsRankMatch() {
p.SendToClient(int(tienlen.TienLenPacketID_PACKET_SCTienLenGameBilled), sceneEx.bill)
}
}
}
func (this *SceneBilledStateTienLen) OnTick(s *base.Scene) {

View File

@ -139,6 +139,92 @@ func WorldSrvApi(rw http.ResponseWriter, req *http.Request) {
return
}
func DebugSrvApi(rw http.ResponseWriter, req *http.Request) {
if !common.Config.IsDevMode {
return
}
defer utils.DumpStackIfPanic("api.DebugSrvApi")
logger.Logger.Info("DebugSrvApi receive:", req.URL.Path, req.URL.RawQuery)
if common.RequestCheck(req, model.GameParamData.WhiteHttpAddr) == false {
logger.Logger.Info("RemoteAddr [%v] require api.", req.RemoteAddr)
return
}
data, err := io.ReadAll(req.Body)
if err != nil {
logger.Logger.Info("Body err.", err)
webApiResponse(rw, nil /*map[string]interface{}{webapi.RESPONSE_STATE: webapi.STATE_ERR, webapi.RESPONSE_ERRMSG: "Post data is null!"}*/)
return
}
params := make(map[string]string)
json.Unmarshal(data, &params)
startTime := time.Now().UnixNano()
var stats *ApiStats
if v, exist := WebApiStats.Load(req.URL.Path); exist {
stats = v.(*ApiStats)
} else {
stats = &ApiStats{}
WebApiStats.Store(req.URL.Path, stats)
}
var rep []byte
start := time.Now()
res := make(chan []byte, 1)
suc := core.CoreObject().SendCommand(&WebApiEvent{req: req, path: req.URL.Path, h: HandlerWrapper(func(event *WebApiEvent, data []byte) bool {
logger.Logger.Trace("WorldSrvApi start transcate")
tnp := &transact.TransNodeParam{
Tt: common.TransTypeWebApi,
Ot: transact.TransOwnerType(common.GetSelfSrvType()),
Oid: common.GetSelfSrvId(),
AreaID: common.GetSelfAreaId(),
}
tNode := transact.DTCModule.StartTrans(tnp, event, transact.DefaultTransactTimeout) //超时时间30秒
if tNode != nil {
tNode.TransEnv.SetField(WEBAPI_TRANSACTE_EVENT, event)
tNode.Go(core.CoreObject())
}
return true
}), body: data, rawQuery: req.URL.RawQuery, res: res}, false)
if suc {
select {
case rep = <-res:
if rep != nil {
webApiResponse(rw, rep)
}
case <-time.After(ApiDefaultTimeout):
//rep = make(map[string]interface{})
//rep[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//rep[webapi.RESPONSE_ERRMSG] = "proccess timeout!"
webApiResponse(rw, rep)
if stats != nil {
atomic.AddInt64(&stats.TimeoutTimes, 1)
}
}
} else {
webApiResponse(rw, nil)
if stats != nil {
atomic.AddInt64(&stats.UnreachTimes, 1)
}
}
ps := int64(time.Now().Sub(start) / time.Millisecond)
if stats != nil {
atomic.AddInt64(&stats.RunTimes, 1)
atomic.AddInt64(&stats.TotalRuningTime, ps)
if atomic.LoadInt64(&stats.MaxRuningTime) < ps {
atomic.StoreInt64(&stats.MaxRuningTime, ps)
}
}
log := model.NewAPILog(req.URL.Path, req.URL.RawQuery, string(data[:]), req.RemoteAddr, string(rep[:]), startTime, ps)
mq.Write(log)
return
}
// --------------------------------------------------------------------------------------
func init() {
transact.RegisteHandler(common.TransTypeWebApi, &transact.TransHanderWrapper{
@ -262,6 +348,9 @@ func init() {
admin.MyAdminApp.Route("/api/game/exchange_create", WorldSrvApi)
// 兑换订单列表
admin.MyAdminApp.Route("/api/game/exchange_order", WorldSrvApi)
admin.MyAdminApp.Route("/api/platform/debug", DebugSrvApi)
}
func Stats() map[string]ApiStats {

View File

@ -17,14 +17,16 @@ import (
*/
const (
OpAll = 0
OpTurnplate = 1
OpBlindBox = 2
OpFirstPay = 3
OpContinuousPay = 4
OpPhoneLottery = 5
OpCollect = 6
OpDiamondLottery = 7
OpAll = 0
OpTurnplate = 1
OpBlindBox = 2
OpFirstPay = 3
OpContinuousPay = 4
OpPhoneLottery = 5
OpCollect = 6
OpNian = 7
OpConsume = 8 // 累计消耗活动
OpPushCoin = 9 // 推金币活动
)
const (
@ -163,6 +165,19 @@ type AllConfig struct {
LotteryShows map[int64]*webapi.ShowLottery
// 竞技馆抽奖必中配置
LotteryUser map[int64]*webapi.UserLottery
// 存钱罐消耗获得
*webapi.GamePigBankDiamondConfig
// 存钱罐属性
*webapi.GamePigBankPropConfig
//年兽配置
*webapi.ActivityNianConfig
*webapi.NianRankReward
// 红包配置
*webapi.RedPacketConfig
// 累计消耗活动配置
*webapi.ConsumeConfig
// 推金币活动配置
*webapi.PushCoinConfig
}
type GlobalConfig struct {
@ -536,3 +551,21 @@ func (cm *ConfigMgr) CustomIsOn(plt string, configId int32) bool {
return true
}
func (cm *ConfigMgr) GetPigBankDiamondArr(plt string) []*webapi.PigBankDiamondInfo {
cfg := cm.GetConfig(plt).GamePigBankDiamondConfig
if cfg == nil {
return nil
}
return cfg.DiamondInfo
}
func (cm *ConfigMgr) GetPigBankPropArr(plt string) []*webapi.PigBankPropInfo {
cfg := cm.GetConfig(plt).GamePigBankPropConfig
if cfg == nil {
return nil
}
return cfg.PropInfo
}

View File

@ -44,13 +44,14 @@ type BackendPermitJoin struct {
// BackendPermitTask 通行证任务完成记录
type BackendPermitTask struct {
Platform string // 平台
StartTs int64 // 活动开始时间
SnId int32 // 玩家id
TaskId int32 // 任务id
TaskName string // 任务名称
ActivityType int32 // 活动类型
TaskType int32 // 任务类型
Gain []AwardItem // 任务获得奖励
Ts int64 // 时间戳
Platform string // 平台
StartTs int64 // 活动开始时间
SnId int32 // 玩家id
TaskId int32 // 任务id
TaskName string // 任务名称
ActivityType int32 // 活动类型
TaskType int32 // 任务类型
Gain []AwardItem // 任务获得奖励
Ts int64 // 时间戳
RemainDiamond int64 // 剩余钻石
}

View File

@ -112,6 +112,8 @@ const (
SystemFreeGive_CollectBoxSwap // 卡片礼盒兑换奖励
SystemFreeGive_ClientUpgrade // 客户端升级奖励
SystemFreeGive_Guide // 新手引导奖励
SystemFreeGive_NianEveryDayTask // 年兽每日任务
SystemFreeGive_NianTask //年兽活动任务
)
const (
SystemFreeGive_CoinType_Coin int32 = iota //金币
@ -132,6 +134,7 @@ const (
ActivityLog_Shop //商城购买
ActivityLog_Exchange //商城兑换
ActivityLog_CoinPigBank //金币存钱罐
ActivityLog_NianBuff //年兽领取Buff
)
type PlayerGameCtrlData struct {
@ -534,16 +537,33 @@ type TaskData struct {
}
type PigBankData struct {
TakeTimes int32 //一共领取次数
BankCoin int64 //当前金币数量
DayBuyTimes int32 //当天领取次数
TakeTimes int32 //一共领取次数
BankCoin int64 //当前金币数量
DayBuyTimes int32 //当天领取次数
TakeRecord map[int32]int64 // 每次领取记录
}
// 钻石储存罐数据
type DiamondBankData struct {
TakeTimes int32 //一共领取次数
BankDiamond float64 //当前钻石数量
DayBuyTimes int32 //当天领取次数
TakeTimes int32 //一共领取次数
BankDiamond float64 //当前钻石数量
DayBuyTimes int32 //当天领取次数
TakeRecord map[int32]int64 // 每次领取记录
}
type RedPacketData struct {
N int64 // 领取次数
RN int64 // 非空奖次数
JN int32 // 参与次数
}
type PushCoinData struct {
Shake int32 // 震动次数
Refresh int64 // 刷新次数
Power int64 // 能量值
Exchange map[int32]int32 // 兑换次数 兑换id:兑换次数
Dram int // 抽奖次数
Items map[int32]int64 // 道具
}
type WelfareData struct {
@ -562,6 +582,9 @@ type WelfareData struct {
DiamondBank *DiamondBankData // 钻石储存罐
PermitAward map[int32]int64 // 赛季通行证奖励领取时间
PermitExchange map[int32][]int64 // 赛季通行证兑换次数, 多次的兑换时间
NianData *NianData //年兽活动数据
RedPacket map[int64]*RedPacketData // 红包活动 活动id:领取次数
PushCoin *PushCoinData // 推币机活动
}
func NewWelfareData() *WelfareData {
@ -570,10 +593,19 @@ func NewWelfareData() *WelfareData {
VIPBag: make(map[int32]map[int32]int32),
Task: make(map[int32]*TaskData),
PhoneLotteryTask: make(map[int32]*TaskData),
PigBank: &PigBankData{},
DiamondBank: &DiamondBankData{},
PermitAward: make(map[int32]int64),
PermitExchange: make(map[int32][]int64),
PigBank: &PigBankData{
TakeRecord: make(map[int32]int64, 8),
},
DiamondBank: &DiamondBankData{
TakeRecord: make(map[int32]int64, 8),
},
PermitAward: make(map[int32]int64),
PermitExchange: make(map[int32][]int64),
RedPacket: make(map[int64]*RedPacketData),
NianData: &NianData{
OtherAwardNum: make(map[int32]int32),
GiftShop: make(map[int32]int32),
},
}
}
@ -666,6 +698,24 @@ type WebPlayerDataParam struct {
Long, PermitScore int64
}
type NianData struct {
ActivityStartTime int64 //活动开始时间
ActivityEndTime int64 //活动结束时间
BossHp int64 //Boss当前血量
BuffStatus bool //Buff领取状态
BuffCount int64 //Buff剩余生效次数
SignAwardTime int64 //签到奖励领取时间
SignOtherAwardCount int32 //签到额外奖励掉落数量
SignOtherAwardProp int32 //签到额外奖励掉落概率
BossDieCount int32 //BOSS死亡次数
LittleHurt int32 //小爆竹次数
BigHurt int32 //大爆竹次数
OtherAwardNum map[int32]int32 //奖励掉落数量
AttackMaxHp int64 //单次攻击最大血量
AttackSumHp int64 //攻击总伤害
GiftShop map[int32]int32 //购买每日礼包记录
}
func ConvertPlayerDataToWebData(param *WebPlayerDataParam) *webapi.PlayerData {
if param == nil || param.PlayerData == nil {
return nil

View File

@ -12,6 +12,7 @@ const (
MQRankPlayerInvite = "log_rankplayerinvite"
MQRankPlayerLevel = "log_rankplayerlevel"
MQRankPlayerPermit = "log_rankplayerpermit" // 赛季通行证排行榜
MQRankNian = "log_ranknian" //年兽排行榜
)
// 排行榜类型
@ -330,3 +331,91 @@ func SaveRankInvite(args *RankInvite) error {
}
return nil
}
// 年兽排行榜
type NianInfo struct {
Platform string
SnId int32
Name string
Luck int64
Damage int64
ModId int32 //头像
LuckTime int64 //幸运值更新时间
Ts int64 //更新时间
}
type FindNianListArgs struct {
Platform string
}
type FindNianListReply struct {
List []*NianInfo
}
func FindLuckNianRankList(args *FindNianListArgs) (*FindNianListReply, error) {
if rpcCli == nil {
logger.Logger.Error("model.FindLuckNianList rpcCli == nil")
return nil, nil
}
ret := new(FindNianListReply)
err := rpcCli.CallWithTimeout("RankNianSvc.LuckFind", args, ret, time.Second*30)
if err != nil {
logger.Logger.Error("GetNianLuckRankList error:", err)
return ret, err
}
return ret, nil
}
func FindDamageNianRankList(args *FindNianListArgs) (*FindNianListReply, error) {
if rpcCli == nil {
logger.Logger.Error("model.FindNianList rpcCli == nil")
return nil, nil
}
ret := new(FindNianListReply)
err := rpcCli.CallWithTimeout("RankNianSvc.DamageFind", args, ret, time.Second*30)
if err != nil {
logger.Logger.Error("GetNianDamageRankList error:", err)
return ret, err
}
return ret, nil
}
func ClearNianRank(args *FindNianListArgs) error {
if rpcCli == nil {
logger.Logger.Error("model.FindNianList rpcCli == nil")
return nil
}
ret := new(FindNianListReply)
err := rpcCli.CallWithTimeout("RankNianSvc.UpdateAll", args, ret, time.Second*30)
if err != nil {
logger.Logger.Error("GetNianDamageRankList error:", err)
return err
}
return nil
}
func DelNianRank(args *FindNianListArgs) error {
if rpcCli == nil {
logger.Logger.Error("model.FindNianList rpcCli == nil")
return nil
}
ret := new(FindNianListReply)
err := rpcCli.CallWithTimeout("RankNianSvc.DelAll", args, ret, time.Second*30)
if err != nil {
logger.Logger.Error("GetNianDamageRankList error:", err)
return err
}
return nil
}
// 年兽排行榜记录
type NianPlayerRankLog struct {
TypeId int32 //1-幸运榜 2伤害榜
RankData []*NianPlayerRankData
Platform string
Ts int64
}
type NianPlayerRankData struct {
RankId int32
Snid int32
Score int64
}

124
model/redpacket.go Normal file
View File

@ -0,0 +1,124 @@
package model
import (
"errors"
"time"
"go.mongodb.org/mongo-driver/bson/primitive"
"mongo.games.com/goserver/core/logger"
)
//go:generate mongoctl -model-dir=. -model-names=RedPacket -dao-dir=../dao/
type RedPacket struct {
ID primitive.ObjectID `bson:"_id" gen:"autoFill"`
Cid int64 `bson:"cid"` // 红包活动id
Use map[int64]int64 `bson:"use"` // 已发红包 红包奖励数量:已发个数
Ts int64 `bson:"ts"` // 更新时间戳
}
func (r *RedPacket) DatabaseName() string {
return "log"
}
func (r *RedPacket) CollectionName() string {
return "log_redpacket"
}
func GetRedPacketAll(plt string) (res []*RedPacket, err error) {
if rpcCli == nil {
logger.Logger.Error("model.GetRedPacketAll rpcCli == nil")
return nil, errors.New("rpc client is nil")
}
res = make([]*RedPacket, 0)
err = rpcCli.CallWithTimeout("RedPacketService.GetAll", &plt, &res, time.Second*30)
if err != nil {
logger.Logger.Errorf("GetRedPacketAll error: %v", err)
return nil, err
}
return res, nil
}
type UpdateRedPacketAllReq struct {
Plt string
List []*RedPacket
}
func UpdateRedPacketAll(plt string, list []*RedPacket) error {
if rpcCli == nil {
logger.Logger.Error("model.UpdateRedPacketAll rpcCli == nil")
return errors.New("rpc client is nil")
}
req := &UpdateRedPacketAllReq{
Plt: plt,
List: list,
}
res := false
err := rpcCli.CallWithTimeout("RedPacketService.UpdateAll", req, &res, time.Second*30)
if err != nil {
logger.Logger.Errorf("UpdateRedPacketAll error: %v", err)
return err
}
return nil
}
// BackRedPacket 红包统计数据
type BackRedPacket struct {
Platform string // 平台
Id int32 // 红包活动id
SnId int32 // 玩家id
ItemId int32 // 道具id
ItemNum int64 // 道具数量
Ts int64 // 时间戳
}
//go:generate mongoctl -model-dir=. -model-names=RedPacketHistory -dao-dir=../dao/
type RedPacketHistory struct {
Platform string `bson:"-"` // 平台
ID primitive.ObjectID `bson:"_id" gen:"autoFill"`
Cid int64 `bson:"cid"` // 红包活动id
Snid int32 `bson:"snid"` // 玩家id
Ts int64 `bson:"ts"` // 时间戳
ItemId int32 `bson:"itemid"` // 道具id
ItemNum int64 `bson:"itemnum"` // 道具数量
}
func (r *RedPacketHistory) DatabaseName() string {
return "log"
}
func (r *RedPacketHistory) CollectionName() string {
return "log_redpackethistory"
}
type GetRedPacketHistoryReq struct {
Plt string
Snid int32
Cid int64
}
func GetRedPacketHistory(plt string, snid int32, cid int64) (res []*RedPacketHistory, err error) {
if rpcCli == nil {
logger.Logger.Error("model.GetRedPacketHistory rpcCli == nil")
return nil, errors.New("rpc client is nil")
}
req := &GetRedPacketHistoryReq{
Plt: plt,
Snid: snid,
Cid: cid,
}
res = make([]*RedPacketHistory, 0)
err = rpcCli.CallWithTimeout("RedPacketService.GetHistory", req, &res, time.Second*30)
if err != nil {
logger.Logger.Errorf("GetRedPacketHistory error: %v", err)
return nil, err
}
return res, nil
}

View File

@ -76,6 +76,7 @@ type RegisterHandlerParam struct {
}
// RegisterHandler 注册消息处理函数
// 必须在init()函数中调用
func (c *MessageMgr) RegisterHandler(param *RegisterHandlerParam) {
if param == nil {
return
@ -143,6 +144,7 @@ func WriteWithOptions(data interface{}, name string, opts ...broker.PublishOptio
}
// RegisterHandler 注册消息处理函数
// 必须在init()函数中调用
func RegisterHandler(param *RegisterHandlerParam) {
MessageMgrSingle.RegisterHandler(param)
}

View File

@ -19,6 +19,8 @@ const (
BackSystemJyb = "back_jyblog"
BackActivityLog = "back_activitylog"
BackOnlineGame = "back_onlinegame"
BackRedPacket = "back_redpacket"
NianPlayerRank = "log_nianplayerrank"
)
// go后端
@ -44,8 +46,9 @@ const (
DBInvite = "db_invite"
DBAPILog = "db_apilog"
DBGiveLog = "db_givelog"
DBLotteryCode = "db_lotterycode" // 玩家抽奖码
DBLotteryLog = "db_lotterylog" // 中奖记录
DBLotteryCode = "db_lotterycode" // 玩家抽奖码
DBLotteryLog = "db_lotterylog" // 中奖记录
DBRedPacket = "db_redpackethistory" // 红包记录
)
// ranksrv 消息

View File

@ -1,515 +0,0 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1-devel
// protoc v3.19.4
// source: protocol/activity/actsign.proto
package activity
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
//操作结果
type OpResultCode_ActSign int32
const (
OpResultCode_ActSign_OPRC_Activity_Sign_Sucess OpResultCode_ActSign = 0 //成功
OpResultCode_ActSign_OPRC_Activity_Sign_Error OpResultCode_ActSign = 1 //失败
OpResultCode_ActSign_OPRC_Activity_Sign_Close OpResultCode_ActSign = 1001 //活动未开启
OpResultCode_ActSign_OPRC_Activity_Sign_PayNum_Low OpResultCode_ActSign = 1002 //未达到最低充值金额
OpResultCode_ActSign_OPRC_Activity_Sign_Config_Vip_Error OpResultCode_ActSign = 1003 //vip不匹配
OpResultCode_ActSign_OPRC_Activity_Sign_Config_Day_Error OpResultCode_ActSign = 1004 //签到天数不匹配
OpResultCode_ActSign_OPRC_Activity_Sign_Repeat OpResultCode_ActSign = 1005 //重复签到
)
// Enum value maps for OpResultCode_ActSign.
var (
OpResultCode_ActSign_name = map[int32]string{
0: "OPRC_Activity_Sign_Sucess",
1: "OPRC_Activity_Sign_Error",
1001: "OPRC_Activity_Sign_Close",
1002: "OPRC_Activity_Sign_PayNum_Low",
1003: "OPRC_Activity_Sign_Config_Vip_Error",
1004: "OPRC_Activity_Sign_Config_Day_Error",
1005: "OPRC_Activity_Sign_Repeat",
}
OpResultCode_ActSign_value = map[string]int32{
"OPRC_Activity_Sign_Sucess": 0,
"OPRC_Activity_Sign_Error": 1,
"OPRC_Activity_Sign_Close": 1001,
"OPRC_Activity_Sign_PayNum_Low": 1002,
"OPRC_Activity_Sign_Config_Vip_Error": 1003,
"OPRC_Activity_Sign_Config_Day_Error": 1004,
"OPRC_Activity_Sign_Repeat": 1005,
}
)
func (x OpResultCode_ActSign) Enum() *OpResultCode_ActSign {
p := new(OpResultCode_ActSign)
*p = x
return p
}
func (x OpResultCode_ActSign) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (OpResultCode_ActSign) Descriptor() protoreflect.EnumDescriptor {
return file_protocol_activity_actsign_proto_enumTypes[0].Descriptor()
}
func (OpResultCode_ActSign) Type() protoreflect.EnumType {
return &file_protocol_activity_actsign_proto_enumTypes[0]
}
func (x OpResultCode_ActSign) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use OpResultCode_ActSign.Descriptor instead.
func (OpResultCode_ActSign) EnumDescriptor() ([]byte, []int) {
return file_protocol_activity_actsign_proto_rawDescGZIP(), []int{0}
}
// 签到
type ActSignPacketID int32
const (
ActSignPacketID_PACKET_SignZero ActSignPacketID = 0 // 弃用消息号
ActSignPacketID_PACKET_CSSign ActSignPacketID = 2662 // 签到
ActSignPacketID_PACKET_SCSign ActSignPacketID = 2663
ActSignPacketID_PACKET_CSSignData ActSignPacketID = 2664 // 签到数据
ActSignPacketID_PACKET_SCSignData ActSignPacketID = 2665
)
// Enum value maps for ActSignPacketID.
var (
ActSignPacketID_name = map[int32]string{
0: "PACKET_SignZero",
2662: "PACKET_CSSign",
2663: "PACKET_SCSign",
2664: "PACKET_CSSignData",
2665: "PACKET_SCSignData",
}
ActSignPacketID_value = map[string]int32{
"PACKET_SignZero": 0,
"PACKET_CSSign": 2662,
"PACKET_SCSign": 2663,
"PACKET_CSSignData": 2664,
"PACKET_SCSignData": 2665,
}
)
func (x ActSignPacketID) Enum() *ActSignPacketID {
p := new(ActSignPacketID)
*p = x
return p
}
func (x ActSignPacketID) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ActSignPacketID) Descriptor() protoreflect.EnumDescriptor {
return file_protocol_activity_actsign_proto_enumTypes[1].Descriptor()
}
func (ActSignPacketID) Type() protoreflect.EnumType {
return &file_protocol_activity_actsign_proto_enumTypes[1]
}
func (x ActSignPacketID) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ActSignPacketID.Descriptor instead.
func (ActSignPacketID) EnumDescriptor() ([]byte, []int) {
return file_protocol_activity_actsign_proto_rawDescGZIP(), []int{1}
}
//PACKET_CSSign
type CSSign struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SignIndex int32 `protobuf:"varint,1,opt,name=SignIndex,proto3" json:"SignIndex,omitempty"`
SignType int32 `protobuf:"varint,2,opt,name=SignType,proto3" json:"SignType,omitempty"` //0.普通签到 1.双倍签到
}
func (x *CSSign) Reset() {
*x = CSSign{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_activity_actsign_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSSign) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSSign) ProtoMessage() {}
func (x *CSSign) ProtoReflect() protoreflect.Message {
mi := &file_protocol_activity_actsign_proto_msgTypes[0]
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 CSSign.ProtoReflect.Descriptor instead.
func (*CSSign) Descriptor() ([]byte, []int) {
return file_protocol_activity_actsign_proto_rawDescGZIP(), []int{0}
}
func (x *CSSign) GetSignIndex() int32 {
if x != nil {
return x.SignIndex
}
return 0
}
func (x *CSSign) GetSignType() int32 {
if x != nil {
return x.SignType
}
return 0
}
//PACKET_SCSign
type SCSign struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SignIndex int32 `protobuf:"varint,1,opt,name=SignIndex,proto3" json:"SignIndex,omitempty"`
SignType int32 `protobuf:"varint,2,opt,name=SignType,proto3" json:"SignType,omitempty"` //0.普通签到 1.双倍签到
OpRetCode OpResultCode_ActSign `protobuf:"varint,3,opt,name=OpRetCode,proto3,enum=activity.OpResultCode_ActSign" json:"OpRetCode,omitempty"`
}
func (x *SCSign) Reset() {
*x = SCSign{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_activity_actsign_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCSign) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCSign) ProtoMessage() {}
func (x *SCSign) ProtoReflect() protoreflect.Message {
mi := &file_protocol_activity_actsign_proto_msgTypes[1]
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 SCSign.ProtoReflect.Descriptor instead.
func (*SCSign) Descriptor() ([]byte, []int) {
return file_protocol_activity_actsign_proto_rawDescGZIP(), []int{1}
}
func (x *SCSign) GetSignIndex() int32 {
if x != nil {
return x.SignIndex
}
return 0
}
func (x *SCSign) GetSignType() int32 {
if x != nil {
return x.SignType
}
return 0
}
func (x *SCSign) GetOpRetCode() OpResultCode_ActSign {
if x != nil {
return x.OpRetCode
}
return OpResultCode_ActSign_OPRC_Activity_Sign_Sucess
}
//PACKET_CSSignData
type CSSignData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *CSSignData) Reset() {
*x = CSSignData{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_activity_actsign_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSSignData) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSSignData) ProtoMessage() {}
func (x *CSSignData) ProtoReflect() protoreflect.Message {
mi := &file_protocol_activity_actsign_proto_msgTypes[2]
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 CSSignData.ProtoReflect.Descriptor instead.
func (*CSSignData) Descriptor() ([]byte, []int) {
return file_protocol_activity_actsign_proto_rawDescGZIP(), []int{2}
}
//PACKET_SCSignData
type SCSignData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SignCount int32 `protobuf:"varint,1,opt,name=SignCount,proto3" json:"SignCount,omitempty"`
TodaySign int32 `protobuf:"varint,2,opt,name=TodaySign,proto3" json:"TodaySign,omitempty"` //0.未签到 1.已签到
}
func (x *SCSignData) Reset() {
*x = SCSignData{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_activity_actsign_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCSignData) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCSignData) ProtoMessage() {}
func (x *SCSignData) ProtoReflect() protoreflect.Message {
mi := &file_protocol_activity_actsign_proto_msgTypes[3]
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 SCSignData.ProtoReflect.Descriptor instead.
func (*SCSignData) Descriptor() ([]byte, []int) {
return file_protocol_activity_actsign_proto_rawDescGZIP(), []int{3}
}
func (x *SCSignData) GetSignCount() int32 {
if x != nil {
return x.SignCount
}
return 0
}
func (x *SCSignData) GetTodaySign() int32 {
if x != nil {
return x.TodaySign
}
return 0
}
var File_protocol_activity_actsign_proto protoreflect.FileDescriptor
var file_protocol_activity_actsign_proto_rawDesc = []byte{
0x0a, 0x1f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76,
0x69, 0x74, 0x79, 0x2f, 0x61, 0x63, 0x74, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x12, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x22, 0x42, 0x0a, 0x06, 0x43,
0x53, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x64,
0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e,
0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22,
0x80, 0x01, 0x0a, 0x06, 0x53, 0x43, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69,
0x67, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x53,
0x69, 0x67, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e,
0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x69, 0x67, 0x6e,
0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69,
0x74, 0x79, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f,
0x41, 0x63, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f,
0x64, 0x65, 0x22, 0x0c, 0x0a, 0x0a, 0x43, 0x53, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x61,
0x22, 0x48, 0x0a, 0x0a, 0x53, 0x43, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c,
0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
0x05, 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09,
0x54, 0x6f, 0x64, 0x61, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
0x09, 0x54, 0x6f, 0x64, 0x61, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x2a, 0x8a, 0x02, 0x0a, 0x14, 0x4f,
0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x41, 0x63, 0x74, 0x53,
0x69, 0x67, 0x6e, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x63, 0x74, 0x69,
0x76, 0x69, 0x74, 0x79, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x5f, 0x53, 0x75, 0x63, 0x65, 0x73, 0x73,
0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x63, 0x74, 0x69, 0x76,
0x69, 0x74, 0x79, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01,
0x12, 0x1d, 0x0a, 0x18, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74,
0x79, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x5f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x10, 0xe9, 0x07, 0x12,
0x22, 0x0a, 0x1d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79,
0x5f, 0x53, 0x69, 0x67, 0x6e, 0x5f, 0x50, 0x61, 0x79, 0x4e, 0x75, 0x6d, 0x5f, 0x4c, 0x6f, 0x77,
0x10, 0xea, 0x07, 0x12, 0x28, 0x0a, 0x23, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x63, 0x74, 0x69,
0x76, 0x69, 0x74, 0x79, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x5f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x5f, 0x56, 0x69, 0x70, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xeb, 0x07, 0x12, 0x28, 0x0a,
0x23, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x53,
0x69, 0x67, 0x6e, 0x5f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x44, 0x61, 0x79, 0x5f, 0x45,
0x72, 0x72, 0x6f, 0x72, 0x10, 0xec, 0x07, 0x12, 0x1e, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f,
0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x5f, 0x52, 0x65,
0x70, 0x65, 0x61, 0x74, 0x10, 0xed, 0x07, 0x2a, 0x7e, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x53, 0x69,
0x67, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12,
0x12, 0x0a, 0x0d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x53, 0x69, 0x67, 0x6e,
0x10, 0xe6, 0x14, 0x12, 0x12, 0x0a, 0x0d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x53, 0x69, 0x67, 0x6e, 0x10, 0xe7, 0x14, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x43, 0x53, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x10, 0xe8, 0x14, 0x12,
0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x53, 0x69, 0x67, 0x6e,
0x44, 0x61, 0x74, 0x61, 0x10, 0xe9, 0x14, 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, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74,
0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_protocol_activity_actsign_proto_rawDescOnce sync.Once
file_protocol_activity_actsign_proto_rawDescData = file_protocol_activity_actsign_proto_rawDesc
)
func file_protocol_activity_actsign_proto_rawDescGZIP() []byte {
file_protocol_activity_actsign_proto_rawDescOnce.Do(func() {
file_protocol_activity_actsign_proto_rawDescData = protoimpl.X.CompressGZIP(file_protocol_activity_actsign_proto_rawDescData)
})
return file_protocol_activity_actsign_proto_rawDescData
}
var file_protocol_activity_actsign_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_protocol_activity_actsign_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_protocol_activity_actsign_proto_goTypes = []interface{}{
(OpResultCode_ActSign)(0), // 0: activity.OpResultCode_ActSign
(ActSignPacketID)(0), // 1: activity.ActSignPacketID
(*CSSign)(nil), // 2: activity.CSSign
(*SCSign)(nil), // 3: activity.SCSign
(*CSSignData)(nil), // 4: activity.CSSignData
(*SCSignData)(nil), // 5: activity.SCSignData
}
var file_protocol_activity_actsign_proto_depIdxs = []int32{
0, // 0: activity.SCSign.OpRetCode:type_name -> activity.OpResultCode_ActSign
1, // [1:1] is the sub-list for method output_type
1, // [1:1] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_protocol_activity_actsign_proto_init() }
func file_protocol_activity_actsign_proto_init() {
if File_protocol_activity_actsign_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_protocol_activity_actsign_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSSign); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_activity_actsign_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCSign); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_activity_actsign_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSSignData); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_activity_actsign_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCSignData); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_protocol_activity_actsign_proto_rawDesc,
NumEnums: 2,
NumMessages: 4,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_protocol_activity_actsign_proto_goTypes,
DependencyIndexes: file_protocol_activity_actsign_proto_depIdxs,
EnumInfos: file_protocol_activity_actsign_proto_enumTypes,
MessageInfos: file_protocol_activity_actsign_proto_msgTypes,
}.Build()
File_protocol_activity_actsign_proto = out.File
file_protocol_activity_actsign_proto_rawDesc = nil
file_protocol_activity_actsign_proto_goTypes = nil
file_protocol_activity_actsign_proto_depIdxs = nil
}

View File

@ -1,43 +0,0 @@
syntax = "proto3";
package activity;
option go_package = "mongo.games.com/game/protocol/activity";
//
enum OpResultCode_ActSign {
OPRC_Activity_Sign_Sucess = 0; //
OPRC_Activity_Sign_Error = 1; //
OPRC_Activity_Sign_Close = 1001; //
OPRC_Activity_Sign_PayNum_Low = 1002; //
OPRC_Activity_Sign_Config_Vip_Error = 1003; //vip不匹配
OPRC_Activity_Sign_Config_Day_Error = 1004; //
OPRC_Activity_Sign_Repeat = 1005; //
}
//
enum ActSignPacketID {
PACKET_SignZero = 0;//
PACKET_CSSign = 2662;//
PACKET_SCSign = 2663;
PACKET_CSSignData = 2664;//
PACKET_SCSignData = 2665;
}
//PACKET_CSSign
message CSSign {
int32 SignIndex = 1;
int32 SignType = 2; //0. 1.
}
//PACKET_SCSign
message SCSign {
int32 SignIndex = 1;
int32 SignType = 2; //0. 1.
OpResultCode_ActSign OpRetCode = 3;
}
//PACKET_CSSignData
message CSSignData {
}
//PACKET_SCSignData
message SCSignData {
int32 SignCount = 1;
int32 TodaySign = 2; //0. 1.
}

1579
protocol/activity/nian.pb.go Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,128 @@
syntax = "proto3";
package activity;
option go_package = "mongo.games.com/game/protocol/activity";
enum NianPacketID {
PACKET_Nian_ZERO = 0; //
PACKET_CSNianData = 2660; //
PACKET_SCNianData = 2661; //
PACKET_CSNianBuff = 2662; // BUFF
PACKET_SCNianBuff = 2663; // Buff信息
PACKET_CSNianRankData = 2664; //
PACKET_SCNianRankData = 2665; //
PACKET_CSNianAttack = 2666; //
PACKET_SCNianAttackData = 2667; //
PACKET_CSNianSignAward = 2668; //
PACKET_SCNianSignAward = 2669; //
PACKET_CSNianChange = 2670;//
PACKET_SCNianChange = 2671;//
}
//
enum OpResultCode_Nian {
OPRC_Sucess_Nian = 0; //
OPRC_Error_Nian = 1; //
}
//
//PACKET_CSNianData
message CSNianData{
}
//PACKET_SCNianData
message SCNianData{
int64 ActivityStartTime = 1; //
int64 ActivityEndTime = 2; //
int64 BossMaxHp = 3; //Boss最大血量
int64 BossHp = 4; //Boss当前血量
repeated NianRankData RankData = 5;//
int64 AwardTime = 6;//
int64 BuffCount = 7;//Buff剩余次数
bool BuffStatus = 8;//Buff领取状态
int64 SignAwardTime = 9;// 0-
int64 BuffStartTime = 10; //Buff开始领取时间
int64 BuffEndTime = 11; //Buff结束领取时间
repeated ShopData shopData = 12;//
string ChangeData = 13; //
string LuckyRankNeed = 14; //
string RankNeed = 15; //
int32 Switch = 16; // 1. 2.
int32 OtherSignAwardCount = 17;//
int32 OtherSignAwardProp = 18;//
repeated RankAwardData OtherSignAward = 19;//
int32 OtherSignMaxCount = 20;//
int64 AttackMaxHp =21; //
int64 AttackSumHp = 22; //
}
message ShopData{
int32 ShopId =1; //shopId
int32 ShopNum = 2; //
int32 MaxShopNum = 3; //
}
//
//BUFF
//PACKET_CSNianBuff
message CSNianBuff{
}
//PACKET_SCNianBuff
message SCNianBuff{
int64 BuffCount = 1; //BUFF剩余次数
OpResultCode_Nian OpRetCode = 2; //
}
message NianRankData{
int32 TypeId = 1; //1- 2-
repeated NianRankInfo Data = 2;
}
message NianRankInfo{
int32 RankId =1;
repeated RankAwardData Award = 2;
}
message RankAwardData{
int32 ItemId =1;
int64 ItemNum = 2;
}
//
//PACKET_CSNianAttack
message CSNianAttack{
int32 TypeId = 1; //1- 2-*10 3-
}
//PACKET_SCNianAttackData
message SCNianAttackData{
int32 TypeId = 1; //1- 2-*10 3-
int64 BossHp = 2; //BOSS当前血量
repeated RankAwardData Award = 3; //
int64 AttackHp = 4; //
bool IsDie = 5; //BOSS是否死亡
repeated RankAwardData DieAward = 6;//BOSS死亡奖励
int64 BuffCount = 7; //BUFF剩余次数
repeated RankAwardData ExtraDrop = 8;//
repeated RankAwardData FloorReward = 9;//
int64 AttackMaxHp = 10; //
int64 AttackSumHp = 11; //
}
//
//PACKET_CSNianSignAward
message CSNianSignAward{
}
//PACKET_SCNianSignAward
message SCNianSignAward{
int64 SignAwardTime = 1;
repeated RankAwardData SignAward = 2;//
repeated RankAwardData OtherSignAward = 3;//
int32 OtherSignAwardCount = 4;//
int32 OtherSignAwardProp = 5;//
OpResultCode_Nian OpRetCode = 6; //
}
//
//PACKET_CSNianChange
message CSNianChange{
int32 Num = 1;
}
//PACKET_SCNianChange
message SCNianChange{
int32 Num = 1;
repeated RankAwardData Award =2;
OpResultCode_Nian OpRetCode = 3; //
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
syntax = "proto3";
package activity;
option go_package = "mongo.games.com/game/protocol/activity";
enum PushCoinPacketID {
PACKET_PushCoin_ZERO = 0;//
PACKET_CSPushCoinInfo = 2680; //
PACKET_SCPushCoinInfo = 2681; //
PACKET_CSPushCoinPlayerOp = 2682; //
PACKET_SCPushCoinPlayerOp = 2683; //
PACKET_NotifyPowerLine = 2684; //
PACKET_NotifyDrawInfo = 2685; //
}
//
//PACKET_CSPushCoinInfo
message CSPushCoinInfo {
}
//PACKET_SCPushCoinInfo
message SCPushCoinInfo {
repeated ExchangeInfo ExchangeList = 1; //
repeated DrawInfo DrawList = 2; //
int32 ShakeTimes = 3; //
int64 PowerLine = 4; //
int64 PowerLineMax = 5; //
int64 RefreshTimes = 6; //
}
message ItemInfo{
int32 ItemId = 1; //id
int32 ItemNum = 2; //
}
message ExchangeInfo{
int32 Id = 1; //id
repeated ItemInfo Cost = 2; //
repeated ItemInfo Gain = 3; //
int64 Times = 4; // -1
int64 TotalTimes = 5; // -1
}
//
//PACKET_NotifyDrawInfo
message DrawInfo{
int32 Id = 1; //id
int32 ItemId = 2; //id
int32 ItemNum = 3; //
int64 Coin = 4; //
}
//
//PACKET_CSPushCoinPlayerOp
message CSPushCoinPlayerOp {
OpCodes OpCode = 1;
int64 OpParam = 2;
repeated ItemInfo OpItem = 3;
}
enum OpCodes {
OP_Zero = 0;
OP_Bet = 1; // OpParam id
OP_Gain = 2; // OpParam 1 2 OpItem
OP_Shake = 3; // OpParam
OP_Refresh = 4; // OpParam
OP_Exchange = 5; // OpParam id
}
enum OpResultPushCoinCode {
OPRC_PushCoin_Success = 0; //
OPRC_PushCoin_Error = 1; //
OPRC_PushCoin_BetNotEnough = 2; //
OPRC_PushCoin_ExchangeNotEnough = 3; //
OPRC_PushCoin_ShakeNotEnough = 4; //
OPRC_PushCoin_ItemNotEnough = 5; //
}
//PACKET_SCPushCoinPlayerOp
message SCPushCoinPlayerOp {
OpResultPushCoinCode OpRetCode = 1;
OpCodes OpCode = 2;
ExchangeInfo Exchange = 3; // ,
int32 BetId = 4; // id
}
//
//PACKET_NotifyPowerLine
message NotifyPowerLine {
int64 PowerLine = 1; //
int64 PowerLineMax = 2; //
}

View File

@ -193,5 +193,9 @@
- 5660~5669
### pushcoin.proto
- 5670~5679
### game.proto(玩家离开)
- 8000~8099

View File

@ -7986,7 +7986,7 @@ type SCEasyWelfaredInfo struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
WelfareSwitch []int32 `protobuf:"varint,1,rep,packed,name=WelfareSwitch,proto3" json:"WelfareSwitch,omitempty"` // 下标 0转盘1盲盒2首冲3连续充值4抽手机活动5集卡活动 1显示 2不显示
WelfareSwitch []int32 `protobuf:"varint,1,rep,packed,name=WelfareSwitch,proto3" json:"WelfareSwitch,omitempty"` // 下标 0转盘1盲盒2首冲3连续充值4抽手机活动5集卡活动6年兽活动 1显示 2不显示
}
func (x *SCEasyWelfaredInfo) Reset() {

View File

@ -1057,7 +1057,7 @@ message SCVIPInfo {
//
//PACKET_SC_SWELFAREINFO
message SCEasyWelfaredInfo{
repeated int32 WelfareSwitch = 1; // 012345 1 2
repeated int32 WelfareSwitch = 1; // 0123456 1 2
}
message CSVIPPrivilegeInfo {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,104 @@
syntax = "proto3";
package pushcoin;
option go_package = "mongo.games.com/game/protocol/pushcoin";
// 5670~5679
enum PushCoinPacketID {
PACKET_PushCoin_ZERO = 0;//
PACKET_SCPushCoinRoomInfo = 5670; //
PACKET_SCPushCoinRoomState = 5671; //
PACKET_CSPushCoinPlayerOp = 5672; //
PACKET_SCPushCoinPlayerOp = 5673; //
}
//
//PACKET_SCPushCoinRoomInfo
message SCPushCoinRoomInfo {
int32 RoomId = 1; //id
int32 GameId = 2; //id
int32 RoomMode = 3; //
repeated int32 Params = 4; //
int32 State = 5; //
int32 TimeOut = 6; // :
repeated PushCoinPlayerData Players = 7; //
repeated ExchangeInfo ExchangeList = 8; //
repeated DrawInfo DrawList = 9; //
repeated int64 BetList = 10; //
}
message ItemInfo{
int32 ItemId = 1; //id
int32 ItemNum = 2; //
}
message ExchangeInfo{
int32 Id = 1; //id
repeated ItemInfo Cost = 2; //
repeated ItemInfo Gain = 3; //
int32 ShakeTimes = 4; //
}
message DrawInfo{
int32 Id = 1; //id
int32 ItemId = 2; //id
int32 ItemNum = 3; //
int64 Coin = 4; //
}
message PushCoinPlayerData {
string Name = 1; //
int32 SnId = 2; //
int32 Head = 3; //
int32 Sex = 4; //
int64 Coin = 5; //
int32 Flag = 6; // :线(0:线 1:线) :(0: 1:)
repeated string Params = 7; // :ip
int32 VIP = 8;
int32 RoleId = 9; //使id
int64 Level = 10; //
int64 Exp = 11; //
int32 SkinId = 12; //id
int32 ShakeTimes = 13; //
int64 BaseCoin = 14; //()
int64 PowerLine = 15; //
int64 PowerLineMax = 16; //
int64 RefreshTimes = 17; //
}
//
//PACKET_SCPushCoinRoomState
message SCPushCoinRoomState {
int32 State = 1; //
int32 SubState = 2; //
repeated int32 Params = 3; //
}
//
//PACKET_CSPushCoinPlayerOp
message CSPushCoinPlayerOp {
OpCodes OpCode = 1;
repeated int64 OpParam = 2;
}
enum OpCodes {
OP_Zero = 0;
OP_Bet = 1; // []
OP_Gain = 2; // []
OP_Shake = 3; // []
OP_Refresh = 4; // []
OP_Exchange = 5; // [id]
OP_Draw = 6; // [id]
}
enum OpResultCode {
OPRC_Success = 0; //
OPRC_Error = 1; //
}
//PACKET_SCPushCoinPlayerOp
message SCPushCoinPlayerOp {
OpResultCode OpRetCode = 1;
OpCodes OpCode = 2;
ExchangeInfo Exchange = 3; // ,
DrawInfo Draw = 4; //
}

View File

@ -52,6 +52,12 @@ const (
// 竞技馆抽奖历史
Rank_PACKET_CSLotteryHistory Rank = 10017
Rank_PACKET_SCLotteryHistory Rank = 10018
//年兽排行榜
Rank_PACKET_RANK_CSNian Rank = 10019
Rank_PACKET_RANK_SCNian Rank = 10020
// 红包抽奖记录
Rank_PACKET_CSRedPacketHistory Rank = 10021
Rank_PACKET_SCRedPacketHistory Rank = 10022
)
// Enum value maps for Rank.
@ -77,28 +83,36 @@ var (
10016: "PACKET_SCRoomAwardOne",
10017: "PACKET_CSLotteryHistory",
10018: "PACKET_SCLotteryHistory",
10019: "PACKET_RANK_CSNian",
10020: "PACKET_RANK_SCNian",
10021: "PACKET_CSRedPacketHistory",
10022: "PACKET_SCRedPacketHistory",
}
Rank_value = map[string]int32{
"PACKET_RANK_ZERO": 0,
"PACKET_RANK_CSRankMatch": 10000,
"PACKET_RANK_SCRankMatch": 10001,
"PACKET_RANK_CSCoin": 10002,
"PACKET_RANK_SCCoin": 10003,
"PACKET_RANK_CSInvite": 10004,
"PACKET_RANK_SCInvite": 10005,
"PACKET_CSInviteLog": 10006,
"PACKET_SCInviteLog": 10007,
"PACKET_RANK_CSWinCoin": 10008,
"PACKET_RANK_SCWinCoin": 10009,
"PACKET_RANK_CSLevel": 10010,
"PACKET_RANK_SCLevel": 10011,
"PACKET_RANK_CSPermit": 10012,
"PACKET_RANK_SCPermit": 10013,
"PACKET_CSRoomAward": 10014,
"PACKET_SCRoomAward": 10015,
"PACKET_SCRoomAwardOne": 10016,
"PACKET_CSLotteryHistory": 10017,
"PACKET_SCLotteryHistory": 10018,
"PACKET_RANK_ZERO": 0,
"PACKET_RANK_CSRankMatch": 10000,
"PACKET_RANK_SCRankMatch": 10001,
"PACKET_RANK_CSCoin": 10002,
"PACKET_RANK_SCCoin": 10003,
"PACKET_RANK_CSInvite": 10004,
"PACKET_RANK_SCInvite": 10005,
"PACKET_CSInviteLog": 10006,
"PACKET_SCInviteLog": 10007,
"PACKET_RANK_CSWinCoin": 10008,
"PACKET_RANK_SCWinCoin": 10009,
"PACKET_RANK_CSLevel": 10010,
"PACKET_RANK_SCLevel": 10011,
"PACKET_RANK_CSPermit": 10012,
"PACKET_RANK_SCPermit": 10013,
"PACKET_CSRoomAward": 10014,
"PACKET_SCRoomAward": 10015,
"PACKET_SCRoomAwardOne": 10016,
"PACKET_CSLotteryHistory": 10017,
"PACKET_SCLotteryHistory": 10018,
"PACKET_RANK_CSNian": 10019,
"PACKET_RANK_SCNian": 10020,
"PACKET_CSRedPacketHistory": 10021,
"PACKET_SCRedPacketHistory": 10022,
}
)
@ -2331,6 +2345,396 @@ func (x *SCLotteryHistory) GetList() []*LotteryHistory {
return nil
}
// PACKET_RANK_CSNian
type CSNian struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Page int32 `protobuf:"varint,1,opt,name=Page,proto3" json:"Page,omitempty"` // 页数
PageSize int32 `protobuf:"varint,2,opt,name=PageSize,proto3" json:"PageSize,omitempty"` // 每页数量
TypeId int32 `protobuf:"varint,3,opt,name=TypeId,proto3" json:"TypeId,omitempty"` //1-幸运榜 2-伤害榜
}
func (x *CSNian) Reset() {
*x = CSNian{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_rank_rank_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSNian) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSNian) ProtoMessage() {}
func (x *CSNian) ProtoReflect() protoreflect.Message {
mi := &file_protocol_rank_rank_proto_msgTypes[30]
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 CSNian.ProtoReflect.Descriptor instead.
func (*CSNian) Descriptor() ([]byte, []int) {
return file_protocol_rank_rank_proto_rawDescGZIP(), []int{30}
}
func (x *CSNian) GetPage() int32 {
if x != nil {
return x.Page
}
return 0
}
func (x *CSNian) GetPageSize() int32 {
if x != nil {
return x.PageSize
}
return 0
}
func (x *CSNian) GetTypeId() int32 {
if x != nil {
return x.TypeId
}
return 0
}
type NianRankData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` // 玩家id
Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` // 昵称
Score int64 `protobuf:"varint,3,opt,name=Score,proto3" json:"Score,omitempty"`
Rank int32 `protobuf:"varint,4,opt,name=Rank,proto3" json:"Rank,omitempty"` // 排名
ModId int32 `protobuf:"varint,5,opt,name=ModId,proto3" json:"ModId,omitempty"` // 角色id
}
func (x *NianRankData) Reset() {
*x = NianRankData{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_rank_rank_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NianRankData) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NianRankData) ProtoMessage() {}
func (x *NianRankData) ProtoReflect() protoreflect.Message {
mi := &file_protocol_rank_rank_proto_msgTypes[31]
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 NianRankData.ProtoReflect.Descriptor instead.
func (*NianRankData) Descriptor() ([]byte, []int) {
return file_protocol_rank_rank_proto_rawDescGZIP(), []int{31}
}
func (x *NianRankData) GetSnid() int32 {
if x != nil {
return x.Snid
}
return 0
}
func (x *NianRankData) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *NianRankData) GetScore() int64 {
if x != nil {
return x.Score
}
return 0
}
func (x *NianRankData) GetRank() int32 {
if x != nil {
return x.Rank
}
return 0
}
func (x *NianRankData) GetModId() int32 {
if x != nil {
return x.ModId
}
return 0
}
// PACKET_RANK_SCCoin
type SCNian struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Ranks []*NianRankData `protobuf:"bytes,1,rep,name=Ranks,proto3" json:"Ranks,omitempty"` // 排行榜
Me *NianRankData `protobuf:"bytes,2,opt,name=Me,proto3" json:"Me,omitempty"` // 玩家自己的排行信息
Page int32 `protobuf:"varint,3,opt,name=Page,proto3" json:"Page,omitempty"` // 页数
PageSize int32 `protobuf:"varint,4,opt,name=PageSize,proto3" json:"PageSize,omitempty"` // 每页数量
Total int32 `protobuf:"varint,5,opt,name=Total,proto3" json:"Total,omitempty"` // 总数量
TypeId int32 `protobuf:"varint,6,opt,name=TypeId,proto3" json:"TypeId,omitempty"`
}
func (x *SCNian) Reset() {
*x = SCNian{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_rank_rank_proto_msgTypes[32]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCNian) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCNian) ProtoMessage() {}
func (x *SCNian) ProtoReflect() protoreflect.Message {
mi := &file_protocol_rank_rank_proto_msgTypes[32]
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 SCNian.ProtoReflect.Descriptor instead.
func (*SCNian) Descriptor() ([]byte, []int) {
return file_protocol_rank_rank_proto_rawDescGZIP(), []int{32}
}
func (x *SCNian) GetRanks() []*NianRankData {
if x != nil {
return x.Ranks
}
return nil
}
func (x *SCNian) GetMe() *NianRankData {
if x != nil {
return x.Me
}
return nil
}
func (x *SCNian) GetPage() int32 {
if x != nil {
return x.Page
}
return 0
}
func (x *SCNian) GetPageSize() int32 {
if x != nil {
return x.PageSize
}
return 0
}
func (x *SCNian) GetTotal() int32 {
if x != nil {
return x.Total
}
return 0
}
func (x *SCNian) GetTypeId() int32 {
if x != nil {
return x.TypeId
}
return 0
}
// 红包抽奖记录
// PACKET_CSRedPacketHistory
type CSRedPacketHistory struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 红包活动id
}
func (x *CSRedPacketHistory) Reset() {
*x = CSRedPacketHistory{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_rank_rank_proto_msgTypes[33]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CSRedPacketHistory) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CSRedPacketHistory) ProtoMessage() {}
func (x *CSRedPacketHistory) ProtoReflect() protoreflect.Message {
mi := &file_protocol_rank_rank_proto_msgTypes[33]
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 CSRedPacketHistory.ProtoReflect.Descriptor instead.
func (*CSRedPacketHistory) Descriptor() ([]byte, []int) {
return file_protocol_rank_rank_proto_rawDescGZIP(), []int{33}
}
func (x *CSRedPacketHistory) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
type RedPacketHistory struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Ts int64 `protobuf:"varint,1,opt,name=Ts,proto3" json:"Ts,omitempty"` // 时间戳
ItemId int32 `protobuf:"varint,5,opt,name=ItemId,proto3" json:"ItemId,omitempty"` // 道具id
ItemNum int64 `protobuf:"varint,6,opt,name=ItemNum,proto3" json:"ItemNum,omitempty"` // 道具数量
}
func (x *RedPacketHistory) Reset() {
*x = RedPacketHistory{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_rank_rank_proto_msgTypes[34]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RedPacketHistory) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RedPacketHistory) ProtoMessage() {}
func (x *RedPacketHistory) ProtoReflect() protoreflect.Message {
mi := &file_protocol_rank_rank_proto_msgTypes[34]
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 RedPacketHistory.ProtoReflect.Descriptor instead.
func (*RedPacketHistory) Descriptor() ([]byte, []int) {
return file_protocol_rank_rank_proto_rawDescGZIP(), []int{34}
}
func (x *RedPacketHistory) GetTs() int64 {
if x != nil {
return x.Ts
}
return 0
}
func (x *RedPacketHistory) GetItemId() int32 {
if x != nil {
return x.ItemId
}
return 0
}
func (x *RedPacketHistory) GetItemNum() int64 {
if x != nil {
return x.ItemNum
}
return 0
}
type SCRedPacketHistory struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
List []*RedPacketHistory `protobuf:"bytes,1,rep,name=List,proto3" json:"List,omitempty"`
}
func (x *SCRedPacketHistory) Reset() {
*x = SCRedPacketHistory{}
if protoimpl.UnsafeEnabled {
mi := &file_protocol_rank_rank_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SCRedPacketHistory) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SCRedPacketHistory) ProtoMessage() {}
func (x *SCRedPacketHistory) ProtoReflect() protoreflect.Message {
mi := &file_protocol_rank_rank_proto_msgTypes[35]
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 SCRedPacketHistory.ProtoReflect.Descriptor instead.
func (*SCRedPacketHistory) Descriptor() ([]byte, []int) {
return file_protocol_rank_rank_proto_rawDescGZIP(), []int{35}
}
func (x *SCRedPacketHistory) GetList() []*RedPacketHistory {
if x != nil {
return x.List
}
return nil
}
var File_protocol_rank_rank_proto protoreflect.FileDescriptor
var file_protocol_rank_rank_proto_rawDesc = []byte{
@ -2543,53 +2947,96 @@ var file_protocol_rank_rank_proto_rawDesc = []byte{
0x43, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12,
0x28, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e,
0x72, 0x61, 0x6e, 0x6b, 0x2e, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74,
0x6f, 0x72, 0x79, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x9e, 0x04, 0x0a, 0x04, 0x52, 0x61,
0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e,
0x4b, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61,
0x74, 0x63, 0x68, 0x10, 0x90, 0x4e, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x74, 0x63,
0x68, 0x10, 0x91, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52,
0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x92, 0x4e, 0x12, 0x17, 0x0a,
0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x43,
0x6f, 0x69, 0x6e, 0x10, 0x93, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x94,
0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b,
0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x95, 0x4e, 0x12, 0x17, 0x0a, 0x12,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c,
0x6f, 0x67, 0x10, 0x96, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x10, 0x97, 0x4e, 0x12, 0x1a,
0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53,
0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x98, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x57, 0x69, 0x6e, 0x43,
0x6f, 0x69, 0x6e, 0x10, 0x99, 0x4e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x9a, 0x4e,
0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f,
0x53, 0x43, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x9b, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d,
0x69, 0x74, 0x10, 0x9c, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x10, 0x9d, 0x4e,
0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f,
0x6d, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x9e, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10,
0x9f, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52,
0x6f, 0x6f, 0x6d, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x6e, 0x65, 0x10, 0xa0, 0x4e, 0x12, 0x1c,
0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x4c, 0x6f, 0x74, 0x74, 0x65,
0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x10, 0xa1, 0x4e, 0x12, 0x1c, 0x0a, 0x17,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79,
0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x10, 0xa2, 0x4e, 0x2a, 0x8d, 0x01, 0x0a, 0x0a, 0x52,
0x61, 0x6e, 0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6e, 0x76,
0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x14,
0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x6f, 0x74,
0x61, 0x6c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79,
0x70, 0x65, 0x5f, 0x57, 0x65, 0x65, 0x6b, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x6e, 0x76,
0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x10, 0x03, 0x12,
0x15, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x55, 0x70,
0x57, 0x65, 0x65, 0x6b, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65,
0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x61, 0x78, 0x10, 0x05, 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, 0x72, 0x61, 0x6e, 0x6b,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6f, 0x72, 0x79, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x06, 0x43, 0x53, 0x4e,
0x69, 0x61, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x0c, 0x4e,
0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x53,
0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12,
0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e,
0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01,
0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x61, 0x6e,
0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x52, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a,
0x05, 0x4d, 0x6f, 0x64, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x4d, 0x6f,
0x64, 0x49, 0x64, 0x22, 0xb4, 0x01, 0x0a, 0x06, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x12, 0x28,
0x0a, 0x05, 0x52, 0x61, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
0x72, 0x61, 0x6e, 0x6b, 0x2e, 0x4e, 0x69, 0x61, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74,
0x61, 0x52, 0x05, 0x52, 0x61, 0x6e, 0x6b, 0x73, 0x12, 0x22, 0x0a, 0x02, 0x4d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x72, 0x61, 0x6e, 0x6b, 0x2e, 0x4e, 0x69, 0x61, 0x6e,
0x52, 0x61, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x02, 0x4d, 0x65, 0x12, 0x12, 0x0a, 0x04,
0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x61, 0x67, 0x65,
0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01,
0x28, 0x05, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x54, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x6f, 0x74,
0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01,
0x28, 0x05, 0x52, 0x06, 0x54, 0x79, 0x70, 0x65, 0x49, 0x64, 0x22, 0x24, 0x0a, 0x12, 0x43, 0x53,
0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79,
0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x49, 0x64,
0x22, 0x54, 0x0a, 0x10, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x48, 0x69, 0x73,
0x74, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
0x52, 0x02, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x05,
0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07,
0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x49,
0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x22, 0x40, 0x0a, 0x12, 0x53, 0x43, 0x52, 0x65, 0x64, 0x50,
0x61, 0x63, 0x6b, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2a, 0x0a, 0x04,
0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x61, 0x6e,
0x6b, 0x2e, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f,
0x72, 0x79, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x90, 0x05, 0x0a, 0x04, 0x52, 0x61, 0x6e,
0x6b, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b,
0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x74,
0x63, 0x68, 0x10, 0x90, 0x4e, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x52, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x74, 0x63, 0x68,
0x10, 0x91, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41,
0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x92, 0x4e, 0x12, 0x17, 0x0a, 0x12,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x43, 0x6f,
0x69, 0x6e, 0x10, 0x93, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x94, 0x4e,
0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f,
0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x95, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x6f,
0x67, 0x10, 0x96, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x10, 0x97, 0x4e, 0x12, 0x1a, 0x0a,
0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x57,
0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x98, 0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x57, 0x69, 0x6e, 0x43, 0x6f,
0x69, 0x6e, 0x10, 0x99, 0x4e, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x9a, 0x4e, 0x12,
0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x53,
0x43, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x10, 0x9b, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x50, 0x65, 0x72, 0x6d, 0x69,
0x74, 0x10, 0x9c, 0x4e, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52,
0x41, 0x4e, 0x4b, 0x5f, 0x53, 0x43, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x10, 0x9d, 0x4e, 0x12,
0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x6f, 0x6f, 0x6d,
0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x9e, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x6f, 0x6f, 0x6d, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0x9f,
0x4e, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x6f,
0x6f, 0x6d, 0x41, 0x77, 0x61, 0x72, 0x64, 0x4f, 0x6e, 0x65, 0x10, 0xa0, 0x4e, 0x12, 0x1c, 0x0a,
0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72,
0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x10, 0xa1, 0x4e, 0x12, 0x1c, 0x0a, 0x17, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x4c, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x79, 0x48,
0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x10, 0xa2, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43,
0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x4b, 0x5f, 0x43, 0x53, 0x4e, 0x69, 0x61, 0x6e, 0x10,
0xa3, 0x4e, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x52, 0x41, 0x4e,
0x4b, 0x5f, 0x53, 0x43, 0x4e, 0x69, 0x61, 0x6e, 0x10, 0xa4, 0x4e, 0x12, 0x1e, 0x0a, 0x19, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x10, 0xa5, 0x4e, 0x12, 0x1e, 0x0a, 0x19, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x10, 0xa6, 0x4e, 0x2a, 0x8d, 0x01, 0x0a, 0x0a,
0x52, 0x61, 0x6e, 0x6b, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6e,
0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12,
0x14, 0x0a, 0x10, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x54, 0x6f,
0x74, 0x61, 0x6c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54,
0x79, 0x70, 0x65, 0x5f, 0x57, 0x65, 0x65, 0x6b, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x6e,
0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x10, 0x03,
0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x55,
0x70, 0x57, 0x65, 0x65, 0x6b, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74,
0x65, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x61, 0x78, 0x10, 0x05, 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, 0x72, 0x61, 0x6e,
0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -2605,7 +3052,7 @@ func file_protocol_rank_rank_proto_rawDescGZIP() []byte {
}
var file_protocol_rank_rank_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_protocol_rank_rank_proto_msgTypes = make([]protoimpl.MessageInfo, 30)
var file_protocol_rank_rank_proto_msgTypes = make([]protoimpl.MessageInfo, 36)
var file_protocol_rank_rank_proto_goTypes = []interface{}{
(Rank)(0), // 0: rank.Rank
(RankInvite)(0), // 1: rank.RankInvite
@ -2639,6 +3086,12 @@ var file_protocol_rank_rank_proto_goTypes = []interface{}{
(*LotteryShow)(nil), // 29: rank.LotteryShow
(*LotteryHistory)(nil), // 30: rank.LotteryHistory
(*SCLotteryHistory)(nil), // 31: rank.SCLotteryHistory
(*CSNian)(nil), // 32: rank.CSNian
(*NianRankData)(nil), // 33: rank.NianRankData
(*SCNian)(nil), // 34: rank.SCNian
(*CSRedPacketHistory)(nil), // 35: rank.CSRedPacketHistory
(*RedPacketHistory)(nil), // 36: rank.RedPacketHistory
(*SCRedPacketHistory)(nil), // 37: rank.SCRedPacketHistory
}
var file_protocol_rank_rank_proto_depIdxs = []int32{
3, // 0: rank.SCRankMatch.Ranks:type_name -> rank.SeasonRank
@ -2659,11 +3112,14 @@ var file_protocol_rank_rank_proto_depIdxs = []int32{
25, // 15: rank.LotteryHistory.Award:type_name -> rank.Item
29, // 16: rank.LotteryHistory.Show:type_name -> rank.LotteryShow
30, // 17: rank.SCLotteryHistory.List:type_name -> rank.LotteryHistory
18, // [18:18] is the sub-list for method output_type
18, // [18:18] is the sub-list for method input_type
18, // [18:18] is the sub-list for extension type_name
18, // [18:18] is the sub-list for extension extendee
0, // [0:18] is the sub-list for field type_name
33, // 18: rank.SCNian.Ranks:type_name -> rank.NianRankData
33, // 19: rank.SCNian.Me:type_name -> rank.NianRankData
36, // 20: rank.SCRedPacketHistory.List:type_name -> rank.RedPacketHistory
21, // [21:21] is the sub-list for method output_type
21, // [21:21] is the sub-list for method input_type
21, // [21:21] is the sub-list for extension type_name
21, // [21:21] is the sub-list for extension extendee
0, // [0:21] is the sub-list for field type_name
}
func init() { file_protocol_rank_rank_proto_init() }
@ -3032,6 +3488,78 @@ func file_protocol_rank_rank_proto_init() {
return nil
}
}
file_protocol_rank_rank_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSNian); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_rank_rank_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NianRankData); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_rank_rank_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCNian); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_rank_rank_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CSRedPacketHistory); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_rank_rank_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RedPacketHistory); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protocol_rank_rank_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SCRedPacketHistory); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
@ -3039,7 +3567,7 @@ func file_protocol_rank_rank_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_protocol_rank_rank_proto_rawDesc,
NumEnums: 2,
NumMessages: 30,
NumMessages: 36,
NumExtensions: 0,
NumServices: 0,
},

View File

@ -33,6 +33,12 @@ enum Rank{
//
PACKET_CSLotteryHistory = 10017;
PACKET_SCLotteryHistory = 10018;
//
PACKET_RANK_CSNian = 10019;
PACKET_RANK_SCNian = 10020;
//
PACKET_CSRedPacketHistory = 10021;
PACKET_SCRedPacketHistory = 10022;
}
//
@ -270,4 +276,43 @@ message LotteryHistory{
// PACKET_SCLotteryHistory
message SCLotteryHistory{
repeated LotteryHistory List = 1;
}
// PACKET_RANK_CSNian
message CSNian{
int32 Page = 1; //
int32 PageSize = 2; //
int32 TypeId = 3; //1- 2-
}
message NianRankData {
int32 Snid = 1; // id
string Name = 2; //
int64 Score = 3;
int32 Rank = 4; //
int32 ModId = 5; // id
}
// PACKET_RANK_SCCoin
message SCNian{
repeated NianRankData Ranks = 1; //
NianRankData Me = 2; //
int32 Page = 3; //
int32 PageSize = 4; //
int32 Total = 5; //
int32 TypeId = 6;
}
//
// PACKET_CSRedPacketHistory
message CSRedPacketHistory{
int64 Id = 1; // id
}
message RedPacketHistory{
int64 Ts = 1; //
int32 ItemId = 5; // id
int64 ItemNum = 6; //
}
message SCRedPacketHistory{
repeated RedPacketHistory List = 1;
}

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,22 @@ syntax = "proto3";
package server;
option go_package = "mongo.games.com/game/protocol/server";
message DB_ACTPushCoin {
int32 Id = 1;
int32 Rate = 2;
map<int64, int64> Gain = 3;
int64 Value = 4;
}
message DB_ACTPushCoinArray {
repeated DB_ACTPushCoin Arr = 1;
}
message DB_ActSign {
int32 Id = 1;
@ -1263,6 +1279,22 @@ message DB_NewPlayerArray {
repeated DB_NewPlayer Arr = 1;
}
message DB_NewYearActivity {
int32 Id = 1;
string PorpName = 2;
string PropValue = 3;
string PropDec = 4;
}
message DB_NewYearActivityArray {
repeated DB_NewYearActivity Arr = 1;
}
message DB_PassShow {
int32 Id = 1;
@ -1349,15 +1381,19 @@ message DB_PigBank_Diamond {
int32 MaxGold = 5;
int32 MaxDiamond = 6;
map<int64, int64> GoldExc = 6;
int32 DiamondId = 7;
int32 MaxDiamond = 7;
int32 CoinPrice = 8;
int32 DiamondId = 8;
int32 DiamondPrice = 9;
map<int64, int64> DiamondExc = 9;
int32 DiamondNowPrice = 10;
int32 CoinPrice = 10;
int32 DiamondPrice = 11;
int32 DiamondNowPrice = 12;
}
@ -1461,6 +1497,8 @@ message DB_PropExchange {
map<int64, int64> Gain = 4;
int32 Times = 5;
}
message DB_PropExchangeArray {

View File

@ -227,7 +227,7 @@ type CSTaskList struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统 6:赛季通行证任务 8:年兽每日任务 9:年兽活动任务 10:累计消耗任务
}
func (x *CSTaskList) Reset() {
@ -275,8 +275,11 @@ type SCTaskList struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统
List []*TaskData `protobuf:"bytes,2,rep,name=List,proto3" json:"List,omitempty"` // 任务列表
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型
List []*TaskData `protobuf:"bytes,2,rep,name=List,proto3" json:"List,omitempty"` // 任务列表
StartTs int64 `protobuf:"varint,3,opt,name=StartTs,proto3" json:"StartTs,omitempty"` // 开始时间
EndTs int64 `protobuf:"varint,4,opt,name=EndTs,proto3" json:"EndTs,omitempty"` // 结束时间
On bool `protobuf:"varint,5,opt,name=On,proto3" json:"On,omitempty"` // 活动开关
}
func (x *SCTaskList) Reset() {
@ -325,6 +328,27 @@ func (x *SCTaskList) GetList() []*TaskData {
return nil
}
func (x *SCTaskList) GetStartTs() int64 {
if x != nil {
return x.StartTs
}
return 0
}
func (x *SCTaskList) GetEndTs() int64 {
if x != nil {
return x.EndTs
}
return 0
}
func (x *SCTaskList) GetOn() bool {
if x != nil {
return x.On
}
return false
}
// 领取任务奖励
// PACKET_CSTaskReward
type CSTaskReward struct {
@ -332,7 +356,7 @@ type CSTaskReward struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统 6:赛季通行证任务
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型
Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id; 0 表示一键领取
}
@ -461,7 +485,7 @@ type SCTaskChange struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型
List []*TaskData `protobuf:"bytes,2,rep,name=List,proto3" json:"List,omitempty"` // 任务列表
}
@ -516,7 +540,7 @@ type CSTaskDebugInc struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型 1:日常任务 2:周活跃任务 3:新手任务 4:邀请任务 5:成就系统
Tp int32 `protobuf:"varint,1,opt,name=Tp,proto3" json:"Tp,omitempty"` // 任务类型
Id int32 `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"` // 任务id
AddNum int32 `protobuf:"varint,3,opt,name=AddNum,proto3" json:"AddNum,omitempty"` // 直接增加次数
}
@ -642,59 +666,63 @@ var file_protocol_task_task_proto_rawDesc = []byte{
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1c, 0x0a, 0x0a, 0x43, 0x53, 0x54, 0x61,
0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0x40, 0x0a, 0x0a, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b,
0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
0x52, 0x02, 0x54, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x61,
0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2e, 0x0a, 0x0c, 0x43, 0x53, 0x54, 0x61,
0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x54,
0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x4f, 0x70, 0x43,
0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x22, 0x80, 0x01, 0x0a, 0x0a, 0x53, 0x43, 0x54, 0x61, 0x73,
0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x44,
0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x74, 0x61,
0x72, 0x74, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x53, 0x74, 0x61, 0x72,
0x74, 0x54, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x6e, 0x64, 0x54, 0x73, 0x18, 0x04, 0x20, 0x01,
0x28, 0x03, 0x52, 0x05, 0x45, 0x6e, 0x64, 0x54, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x4f, 0x6e, 0x18,
0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x4f, 0x6e, 0x22, 0x2e, 0x0a, 0x0c, 0x43, 0x53, 0x54,
0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x0c, 0x53, 0x43,
0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x4f, 0x70,
0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x73,
0x6b, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06,
0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01,
0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01,
0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64,
0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x53, 0x43,
0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72,
0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x39,
0x0a, 0x0b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x42, 0x0a, 0x0c, 0x53, 0x43, 0x54,
0x61, 0x73, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73,
0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54,
0x61, 0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x48, 0x0a,
0x0e, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x12,
0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12,
0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12,
0x16, 0x0a, 0x06, 0x41, 0x64, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x41, 0x64, 0x64, 0x4e, 0x75, 0x6d, 0x22, 0x3c, 0x0a, 0x0e, 0x53, 0x43, 0x54, 0x61, 0x73,
0x6b, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x06, 0x4f, 0x70, 0x43,
0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x73, 0x6b,
0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x4f,
0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18,
0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x53, 0x43, 0x54,
0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x39, 0x0a,
0x0b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x42, 0x0a, 0x0c, 0x53, 0x43, 0x54, 0x61,
0x73, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x54, 0x70, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x22, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74,
0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x54, 0x61,
0x73, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x0e,
0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x12, 0x0e,
0x0a, 0x02, 0x54, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x54, 0x70, 0x12, 0x0e,
0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16,
0x0a, 0x06, 0x41, 0x64, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x41, 0x64, 0x64, 0x4e, 0x75, 0x6d, 0x22, 0x3c, 0x0a, 0x0e, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b,
0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x12, 0x2a, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f,
0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e,
0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x4f, 0x70,
0x43, 0x6f, 0x64, 0x65, 0x2a, 0x30, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63,
0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45,
0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x2a, 0xd2, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b, 0x50,
0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x16, 0x0a,
0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69,
0x73, 0x74, 0x10, 0xe0, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xe1, 0x12, 0x12, 0x18, 0x0a,
0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65,
0x77, 0x61, 0x72, 0x64, 0x10, 0xe2, 0x12, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x10, 0xe3,
0x12, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x61,
0x73, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xe4, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63,
0x10, 0xe5, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x10, 0xe6, 0x12, 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, 0x74, 0x61, 0x73,
0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x70, 0x43, 0x6f, 0x64, 0x65, 0x2a, 0x30, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75,
0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f,
0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x2a, 0xd2, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b,
0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x54, 0x61, 0x73, 0x6b, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x16,
0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x4c,
0x69, 0x73, 0x74, 0x10, 0xe0, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xe1, 0x12, 0x12, 0x18,
0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54, 0x61, 0x73, 0x6b, 0x52,
0x65, 0x77, 0x61, 0x72, 0x64, 0x10, 0xe2, 0x12, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b,
0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x10,
0xe3, 0x12, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54,
0x61, 0x73, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0xe4, 0x12, 0x12, 0x16, 0x0a, 0x11,
0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e,
0x63, 0x10, 0xe5, 0x12, 0x12, 0x16, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x63, 0x10, 0xe6, 0x12, 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, 0x74, 0x61,
0x73, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@ -33,18 +33,21 @@ message TaskData{
//
// PACKET_CSTaskList
message CSTaskList{
int32 Tp = 1; // 1: 2: 3: 4: 5:
int32 Tp = 1; // 1: 2: 3: 4: 5: 6: 8: 9: 10:
}
// PACKET_SCTaskList
message SCTaskList{
int32 Tp = 1; // 1: 2: 3: 4: 5:
int32 Tp = 1; //
repeated TaskData List = 2; //
int64 StartTs = 3; //
int64 EndTs = 4; //
bool On = 5; //
}
//
// PACKET_CSTaskReward
message CSTaskReward{
int32 Tp = 1; // 1: 2: 3: 4: 5: 6:
int32 Tp = 1; //
int32 Id = 2; // id; 0
}
// PACKET_SCTaskReward
@ -58,12 +61,12 @@ message SCTaskReward{
//
// PACKET_SCTaskChange
message SCTaskChange{
int32 Tp = 1; // 1: 2: 3: 4: 5:
int32 Tp = 1; //
repeated TaskData List = 2; //
}
message CSTaskDebugInc{
int32 Tp = 1; // 1: 2: 3: 4: 5:
int32 Tp = 1; //
int32 Id = 2; // id
int32 AddNum = 3; //
}

View File

@ -662,6 +662,8 @@ type SCTienLenRoomInfo struct {
CostType int32 `protobuf:"varint,37,opt,name=CostType,proto3" json:"CostType,omitempty"` //房卡支付方式 1AA 2房主
Voice int32 `protobuf:"varint,38,opt,name=Voice,proto3" json:"Voice,omitempty"` //是否开启语音 1开启
Password string `protobuf:"bytes,39,opt,name=Password,proto3" json:"Password,omitempty"` //房间密码
// 房卡场配置
IsSmallCard bool `protobuf:"varint,40,opt,name=IsSmallCard,proto3" json:"IsSmallCard,omitempty"` //必出最小牌
}
func (x *SCTienLenRoomInfo) Reset() {
@ -948,6 +950,13 @@ func (x *SCTienLenRoomInfo) GetPassword() string {
return ""
}
func (x *SCTienLenRoomInfo) GetIsSmallCard() bool {
if x != nil {
return x.IsSmallCard
}
return false
}
//房间状态更新
type SCTienLenRoomState struct {
state protoimpl.MessageState
@ -2140,7 +2149,8 @@ type SCTienLenFirstOpPos struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Pos int32 `protobuf:"varint,1,opt,name=Pos,proto3" json:"Pos,omitempty"` //座位位置
Pos int32 `protobuf:"varint,1,opt,name=Pos,proto3" json:"Pos,omitempty"` //座位位置
IsSmallCard bool `protobuf:"varint,2,opt,name=IsSmallCard,proto3" json:"IsSmallCard,omitempty"` //必出最小牌
}
func (x *SCTienLenFirstOpPos) Reset() {
@ -2182,6 +2192,13 @@ func (x *SCTienLenFirstOpPos) GetPos() int32 {
return 0
}
func (x *SCTienLenFirstOpPos) GetIsSmallCard() bool {
if x != nil {
return x.IsSmallCard
}
return false
}
//PACKET_SCTienLenThinkLongCnt
type SCTienLenPlayerThinkLongCnt struct {
state protoimpl.MessageState
@ -2608,7 +2625,7 @@ var file_protocol_tienlen_tienlen_proto_rawDesc = []byte{
0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x4c,
0x65, 0x76, 0x65, 0x6c, 0x22, 0x23, 0x0a, 0x0b, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x43,
0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03,
0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0xfd, 0x08, 0x0a, 0x11, 0x53, 0x43,
0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x22, 0x9f, 0x09, 0x0a, 0x11, 0x53, 0x43,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x72, 0x65, 0x61, 0x74,
@ -2680,262 +2697,267 @@ var file_protocol_tienlen_tienlen_proto_rawDesc = []byte{
0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65,
0x18, 0x26, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a,
0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x53, 0x43, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18,
0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x45, 0x0a,
0x11, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50,
0x61, 0x72, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70,
0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f,
0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20,
0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04,
0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64,
0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x4f, 0x70,
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65,
0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a,
0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x69,
0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x28, 0x0a,
0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74,
0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16,
0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69,
0x6c, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64,
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x18,
0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61, 0x6d, 0x65,
0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61, 0x6d, 0x65,
0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x05, 0x20,
0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x57, 0x69,
0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
0x52, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c,
0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
0x03, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08,
0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x49,
0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x69, 0x65,
0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x41, 0x64,
0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75,
0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75, 0x22, 0x4d,
0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d, 0x65, 0x42,
0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54,
0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x53,
0x6d, 0x61, 0x6c, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b,
0x49, 0x73, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x43, 0x61, 0x72, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74,
0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d,
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22,
0x45, 0x0a, 0x11, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79,
0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f,
0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x12, 0x16, 0x0a, 0x06,
0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x4f, 0x70,
0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18,
0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12,
0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e,
0x49, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e,
0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70,
0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12,
0x2e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22,
0x28, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79,
0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x22, 0x6f, 0x0a, 0x07, 0x41, 0x64, 0x64,
0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x69,
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x41, 0x64, 0x64, 0x69,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20,
0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x17, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61, 0x6d, 0x65,
0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22, 0xc4, 0x01,
0x0a, 0x18, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61, 0x6c, 0x6c,
0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x69,
0x6e, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69, 0x6e, 0x50,
0x6f, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e,
0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f,
0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18, 0x03, 0x20,
0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b,
0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
0x03, 0x52, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18,
0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52,
0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65,
0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65,
0x43, 0x6f, 0x69, 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01,
0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49,
0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a,
0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49,
0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43,
0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65,
0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x54,
0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x54,
0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x54, 0x6f,
0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75,
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x6f, 0x75,
0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20,
0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a,
0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74,
0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b,
0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f, 0x0a, 0x11,
0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70, 0x50, 0x6f,
0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61,
0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73,
0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x47, 0x61,
0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x47, 0x61,
0x6d, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18,
0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c,
0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01,
0x28, 0x03, 0x52, 0x0c, 0x57, 0x69, 0x6e, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65,
0x12, 0x1c, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20,
0x01, 0x28, 0x03, 0x52, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a,
0x0a, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03,
0x52, 0x08, 0x41, 0x64, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x41, 0x64,
0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74,
0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08,
0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x69, 0x61, 0x6e,
0x48, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x54, 0x69, 0x61, 0x6e, 0x48, 0x75,
0x22, 0x4d, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x47, 0x61, 0x6d,
0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e,
0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x47, 0x61,
0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x05, 0x44, 0x61, 0x74, 0x61, 0x73, 0x22,
0xc4, 0x01, 0x0a, 0x18, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x53, 0x6d, 0x61,
0x6c, 0x6c, 0x47, 0x61, 0x6d, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06,
0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x69,
0x6e, 0x50, 0x6f, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x43, 0x6f,
0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x57, 0x69, 0x6e, 0x50, 0x6f, 0x73,
0x43, 0x6f, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x18,
0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x12, 0x20,
0x0a, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20,
0x01, 0x28, 0x03, 0x52, 0x0b, 0x4c, 0x6f, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x43, 0x6f, 0x69, 0x6e,
0x12, 0x18, 0x0a, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28,
0x03, 0x52, 0x07, 0x57, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f,
0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4c, 0x6f,
0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73,
0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x20, 0x0a,
0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x4f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12,
0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53,
0x6e, 0x49, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x43, 0x61, 0x72, 0x64, 0x54, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x47, 0x72, 0x61,
0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x69, 0x65, 0x6e,
0x6c, 0x65, 0x6e, 0x2e, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x61, 0x72,
0x64, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x52, 0x06, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a,
0x07, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
0x54, 0x6f, 0x74, 0x61, 0x6c, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c,
0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x54, 0x6f, 0x74, 0x61, 0x6c,
0x6f, 0x75, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x18,
0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x4c, 0x6f, 0x73, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12,
0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44,
0x61, 0x74, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7f,
0x0a, 0x11, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x75, 0x72, 0x4f, 0x70,
0x50, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02,
0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43,
0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64,
0x73, 0x12, 0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01,
0x28, 0x05, 0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66,
0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22,
0x3b, 0x0a, 0x19, 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, 0x12, 0x1e, 0x0a, 0x0a,
0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
0x52, 0x0a, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a,
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, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75,
0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x0b, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a,
0x0f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61,
0x12, 0x19, 0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43,
0x61, 0x72, 0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x73, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50,
0x6c, 0x61, 0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b,
0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b,
0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b,
0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b,
0x4c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10,
0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30,
0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73,
0x4c, 0x65, 0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72,
0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52,
0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27,
0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74,
0x5f, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72,
0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63,
0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28,
0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33,
0x12, 0x28, 0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63,
0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65,
0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c,
0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30,
0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73,
0x5f, 0x31, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64,
0x43, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64,
0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e,
0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64,
0x73, 0x33, 0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e,
0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50,
0x6c, 0x61, 0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27,
0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50,
0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d,
0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a,
0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01,
0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12,
0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18,
0x14, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74,
0x30, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f,
0x31, 0x18, 0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65,
0x66, 0x74, 0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66,
0x74, 0x5f, 0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73,
0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c,
0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72,
0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f,
0x70, 0x6f, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50,
0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28,
0x08, 0x52, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53,
0x6e, 0x69, 0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53,
0x6e, 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20,
0x01, 0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x49, 0x0a, 0x13, 0x53, 0x43,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f,
0x73, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03,
0x50, 0x6f, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01,
0x28, 0x08, 0x52, 0x05, 0x49, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x43, 0x61, 0x72,
0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12,
0x18, 0x0a, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
0x52, 0x07, 0x45, 0x78, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61,
0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x3b, 0x0a,
0x19, 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, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x61,
0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x69, 0x64, 0x22, 0x3e, 0x0a, 0x1a, 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, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x75, 0x64, 0x69,
0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x41,
0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xcb, 0x07, 0x0a, 0x0f, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x41, 0x49, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19,
0x0a, 0x08, 0x42, 0x6f, 0x6d, 0x62, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05,
0x52, 0x07, 0x42, 0x6f, 0x6d, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x43, 0x61, 0x72,
0x64, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65,
0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x43, 0x61, 0x72, 0x64, 0x50, 0x6c, 0x61,
0x79, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61,
0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x30, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x30, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61,
0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x31, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61,
0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x32, 0x12, 0x1e, 0x0a, 0x0b, 0x4c, 0x61,
0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x33, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x4c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x76, 0x65, 0x33, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75,
0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x07,
0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65,
0x66, 0x74, 0x30, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73,
0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e,
0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x31, 0x12, 0x27, 0x0a, 0x10,
0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x32,
0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73,
0x4c, 0x65, 0x66, 0x74, 0x32, 0x12, 0x27, 0x0a, 0x10, 0x4e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x72,
0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52,
0x0d, 0x4e, 0x75, 0x6d, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x28,
0x0a, 0x10, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x61, 0x72,
0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x48,
0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79,
0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x30, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x30, 0x12, 0x24,
0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x31,
0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61,
0x72, 0x64, 0x73, 0x31, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x5f, 0x63,
0x61, 0x72, 0x64, 0x73, 0x5f, 0x32, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c,
0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x24, 0x0a, 0x0e, 0x50, 0x6c,
0x61, 0x79, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x33, 0x18, 0x0f, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x33,
0x12, 0x2a, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x5f,
0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x6c, 0x61,
0x79, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x43, 0x61, 0x72, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f,
0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x50, 0x6f, 0x73,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x49, 0x73,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x59, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x49,
0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08,
0x52, 0x0b, 0x49, 0x73, 0x46, 0x69, 0x72, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x0a,
0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x30, 0x18, 0x14, 0x20,
0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74, 0x30, 0x12,
0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x31, 0x18,
0x15, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65, 0x66, 0x74,
0x31, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x5f,
0x32, 0x18, 0x16, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73, 0x4c, 0x65,
0x66, 0x74, 0x32, 0x12, 0x20, 0x0a, 0x0c, 0x43, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x6c, 0x65, 0x66,
0x74, 0x5f, 0x33, 0x18, 0x17, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x61, 0x72, 0x64, 0x73,
0x4c, 0x65, 0x66, 0x74, 0x33, 0x12, 0x19, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6f,
0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x6f, 0x73,
0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52,
0x05, 0x49, 0x73, 0x45, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69,
0x64, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x57, 0x69, 0x6e, 0x53, 0x6e, 0x69,
0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28,
0x08, 0x52, 0x05, 0x49, 0x73, 0x57, 0x69, 0x6e, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x43, 0x54, 0x69,
0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4f, 0x70, 0x50, 0x6f, 0x73, 0x12,
0x10, 0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f,
0x73, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c,
0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74,
0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e,
0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x47, 0x69, 0x76, 0x65,
0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d,
0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64,
0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72,
0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x49, 0x74, 0x65,
0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e,
0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x65, 0x74, 0x53, 0x6b,
0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x50, 0x6f,
0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b,
0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x22, 0x2c,
0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75,
0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xab, 0x01, 0x0a,
0x16, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c,
0x6c, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x52,
0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52,
0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53,
0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72,
0x65, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x11, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x54, 0x6f,
0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,
0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x4b, 0x0a, 0x14, 0x53, 0x43,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c,
0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x66,
0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 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, 0x0d, 0x0a, 0x09, 0x4f, 0x50, 0x52, 0x43,
0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, 0x0f, 0x54, 0x69, 0x65, 0x6e,
0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x12, 0x50,
0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x5a, 0x45, 0x52,
0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x10,
0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10,
0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfc,
0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69,
0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xfd, 0x29,
0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65,
0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10,
0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76,
0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 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,
0x50, 0x6f, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x49, 0x73, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x43, 0x61,
0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x49, 0x73, 0x53, 0x6d, 0x61, 0x6c,
0x6c, 0x43, 0x61, 0x72, 0x64, 0x22, 0x41, 0x0a, 0x1b, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e,
0x67, 0x43, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x68, 0x69, 0x6e, 0x6b, 0x4c, 0x6f, 0x6e,
0x67, 0x43, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x54, 0x68, 0x69, 0x6e,
0x6b, 0x4c, 0x6f, 0x6e, 0x67, 0x43, 0x6e, 0x74, 0x22, 0x68, 0x0a, 0x20, 0x53, 0x43, 0x54, 0x69,
0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74,
0x47, 0x69, 0x76, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x0a, 0x06,
0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74,
0x65, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45,
0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
0x11, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x63, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69,
0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50,
0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x10,
0x0a, 0x03, 0x50, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x50, 0x6f, 0x73,
0x12, 0x20, 0x0a, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x18,
0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x50, 0x65, 0x74, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x52,
0x65, 0x73, 0x22, 0x2c, 0x0a, 0x08, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e,
0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x10,
0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d,
0x22, 0xab, 0x01, 0x0a, 0x16, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c,
0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53,
0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12,
0x1e, 0x0a, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20,
0x03, 0x28, 0x03, 0x52, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x18, 0x04,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x49,
0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e,
0x0a, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01,
0x28, 0x03, 0x52, 0x0a, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x4b,
0x0a, 0x14, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65,
0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x01,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x69, 0x65, 0x6e, 0x6c, 0x65, 0x6e, 0x2e, 0x54,
0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65,
0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x3e, 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, 0x0d, 0x0a, 0x09,
0x4f, 0x50, 0x52, 0x43, 0x5f, 0x48, 0x69, 0x6e, 0x74, 0x10, 0x02, 0x2a, 0xa2, 0x05, 0x0a, 0x0f,
0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12,
0x16, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65,
0x6e, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45,
0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49,
0x6e, 0x66, 0x6f, 0x10, 0xfa, 0x29, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74,
0x61, 0x74, 0x65, 0x10, 0xfb, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x43, 0x53, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x4f, 0x70, 0x10, 0xfc, 0x29, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f,
0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f,
0x70, 0x10, 0xfd, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53,
0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e,
0x74, 0x65, 0x72, 0x10, 0xfe, 0x29, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54,
0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xff, 0x29, 0x12, 0x19, 0x0a, 0x14, 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, 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, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41,
0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c, 0x65, 0x6e, 0x43, 0x79,
0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, 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,
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, 0x12, 0x20,
0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x54, 0x69, 0x65, 0x6e, 0x4c,
0x65, 0x6e, 0x43, 0x79, 0x63, 0x6c, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x10, 0x8c, 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 (

View File

@ -126,6 +126,7 @@ message SCTienLenRoomInfo {
int32 Voice = 38; // 1
string Password = 39; //
//
bool IsSmallCard = 40; //
}
//
@ -257,6 +258,7 @@ message SCTienLenAIData {
//PACKET_SCTienLenFirstOpPos
message SCTienLenFirstOpPos {
int32 Pos = 1;//
bool IsSmallCard = 2; //
}
//PACKET_SCTienLenThinkLongCnt

File diff suppressed because it is too large Load Diff

View File

@ -1046,4 +1046,132 @@ message UserLottery{
string Time = 4; // 2006-01-02 15:04:05
int64 Num = 5; //
int32 On = 6; // 1 2
}
message PigBankDiamondInfo {
int32 Id = 1;
int32 BuyCountMin = 2;
int32 BuyCountMax = 3;
int32 CostDiamond = 4;
int32 MaxGold = 5;
int32 MaxDiamond = 6;
int32 DiamondId = 7;
int32 CoinPrice = 8;
int32 DiamondPrice = 9;
int32 DiamondNowPrice = 10;
repeated ItemInfo GoldExc = 11;
repeated ItemInfo DiamondExc = 12;
}
// etcd /game/pigbank_diamond
message GamePigBankDiamondConfig{
string Platform = 1; //
repeated PigBankDiamondInfo DiamondInfo = 2; //
}
message PigBankPropInfo {
int32 Id = 1;
string PorpName = 2;
int32 PropValue = 3;
}
// etcd /game/pigbank_prop
message GamePigBankPropConfig{
string Platform = 1; //
repeated PigBankPropInfo PropInfo = 2; //
}
//etcd /game/activity_nian
message ActivityNianConfig {
string Platform = 1; //
repeated NianInfo List = 2;
int32 Switch = 3; // 1. 2.
}
message NianInfo{
string ActivityStart = 1; //
string ActivityEnd = 2; //
int64 BuffStartTime = 3; //Buff领取开始时间 18
int64 BuffEndTime = 4; //Buff领取结束时间 21
repeated ItemInfo SignReward = 5; //
repeated ItemInfo BossDieReward = 6; // BOSS奖励
repeated NianDropInfo BossDieOtherReward = 7; // Boss额外奖励
}
message NianDropInfo{
int32 Id = 1;
int32 ItemId = 2; // ID
int64 ItemNum = 3; //
int32 DropRate = 4;//
int32 DropUp = 5;//
}
//
//etcd /game/activity_nian_rank
message NianRankReward{
string Platform = 1; //
repeated NianRankData RankData = 2;
}
message NianRankData{
int32 TypeId = 1; //1- 2-
repeated NianRankAwardInfo RankInfo = 2;
}
message NianRankAwardInfo{
int32 RankId =1;//
repeated ItemInfo Award = 2; //
}
// etcd /game/act_redpacket
message RedPacketConfig{
string Platform = 1; //
repeated RedPacketInfo List = 2; //
int32 PlayerLimit = 3; // 0
}
message RedPacketInfo{
int64 Id = 1; // id
int32 On = 2; // 1 2
int64 StartHMS = 3; // ,*10000 + *100 +
int64 EndHMS = 4; // ,*10000 + *100 +
int64 StayTs = 5; // ,
int64 MaxCount = 6; // 0
int64 LessCount = 7; //
int32 ItemId = 8; // (id,100001 100002)
int64 TotalNum = 9; //
repeated RedInfo RedList = 10; //
}
message RedInfo{
int64 Num = 1; //
int64 Rate = 2; //
}
// etcd /game/act_consume
message ConsumeConfig{
string Platform = 1; //
int32 On = 2; // 1. 2.
string StartTime = 3; //
string EndTime = 4; //
}
// etcd /game/act_pushcoin
message PushCoinConfig{
string Platform = 1; //
int32 On = 2; // 1. 2.
string StartTime = 3; //
string EndTime = 4; //
}

File diff suppressed because it is too large Load Diff

View File

@ -84,6 +84,12 @@ enum SPacketID {
PACKET_SCLotteryInfo = 2927; //
PACKET_NotifyLotteryAward = 2928; //
PACKET_NotifyLotteryCode = 2929; //
PACKET_CSRedPacketInfo = 2930; //
PACKET_SCRedPacketInfo = 2931; //
PACKET_CSRedPacketDraw = 2932; //
PACKET_SCRedPacketDraw = 2933; //
}
//
@ -336,6 +342,17 @@ message SCBindInvite{
OpResultCode OpRetCode = 1; //
}
message PigBankCoinInfo{
int32 IndexId = 1;
int64 TakeCoin = 2; //
int64 BankMaxCoin = 3; //
int32 DayBuyMaxCnt = 4; //
int64 Price = 5; //
int64 CostDiamond = 6; //
map<int64, int64> GoldExc = 7; //
}
//
//PACKET_CSPigbankGetInfo
message CSPigbankGetInfo{
@ -347,13 +364,9 @@ message SCPigbankGetInfo{
OpResultCode OpRetCode = 1; //
int64 BankCoin = 2; //
int32 TakeTimes = 3; //
int64 CostDiamond = 4; //
int64 BankMaxCoin = 5; //
int32 DayBuyMaxCnt = 6; //
int64 Price = 7; //
repeated PigBankCoinInfo infoArr = 4;
}
//
//PACKET_CSPigbankTakeCoin
message CSPigbankTakeCoin{
@ -365,10 +378,7 @@ message SCPigbankTakeCoin{
OpResultCode OpRetCode = 1; //
int64 TakeCoinNum = 2; //
int32 TakeTimes = 3; //
int64 CostDiamond = 4; //
int64 BankMaxCoin = 5; //
int32 DayBuyMaxCnt = 6; //
int64 Price = 7; //
repeated PropInfo RewardItems = 4;
}
//
@ -376,17 +386,24 @@ message SCPigbankTakeCoin{
message CSDiamondBankGetInfo{
}
message PigBankDiamondInfo{
int32 IndexId = 1;
double TakeDiamond = 2; //
int64 BankMaxDiamond = 3; //
int32 DayBuyMaxCnt = 4; //
int64 Price = 5; //
int64 NowPrice = 6; //
int32 ShopId = 7; //ID
map<int64, int64> DiamondExc = 8;
}
//
//PACKET_SCDiamondBankGetInfo
message SCDiamondBankGetInfo{
OpResultCode OpRetCode = 1; //
double BankDiamond = 2; //
int32 TakeTimes = 3; //
int64 BankMaxCoin = 4; //
int32 DayBuyMaxCnt = 5; //
int64 Price = 6; //
int64 NowPrice = 7; //
int32 ShopId = 8; //ID
repeated PigBankDiamondInfo infoArr = 4; //
}
//
//PACKET_SCDiamondBankTakeDiamond
@ -394,11 +411,7 @@ message SCDiamondBankTakeDiamond{
OpResultCode OpRetCode = 1; //
double TakeDiamondNum = 2; //
int32 TakeTimes = 3; //
int64 BankMaxDiamond = 4; //
int32 DayBuyMaxCnt = 5; //
int64 Price = 6; //
int64 NowPrice = 7; //
int32 ShopId = 8; //ID
//repeated PropInfo RewardItems = 4;
}
//
@ -549,4 +562,34 @@ message NotifyLotteryAward{
//PACKET_NotifyLotteryCode
message NotifyLotteryCode{
repeated LotteryInfo Info = 1;
}
//
//PACKET_CSRedPacketInfo
message CSRedPacketInfo{
}
//PACKET_SCRedPacketInfo
message SCRedPacketInfo{
repeated RedPacketInfo Info = 1; //
}
message RedPacketInfo{
int64 Id = 1; // id
int64 StartTs = 2; //
int64 EndTs = 3; //
int64 StayTs = 4; // ,;0
int64 RemainCount = 5; // ;-1
bool IsJoin = 6; //
}
//
//PACKET_CSRedPacketDraw
message CSRedPacketDraw{
int64 Id = 1; // id RedPacketInfo.Id 0
}
//PACKET_SCRedPacketDraw
message SCRedPacketDraw{
OpResultCode OpRetCode = 1; //
int64 Id = 2; // id
repeated PropInfo Award = 3; //
int64 RemainCount = 4; // ;-1
}

View File

@ -32,6 +32,10 @@ func init() {
com.Register(int(rankproto.Rank_PACKET_CSRoomAward), rankproto.CSRoomAward{}, CSRoomAward)
// 竞技馆获奖记录
com.Register(int(rankproto.Rank_PACKET_CSLotteryHistory), rankproto.CSLotteryHistory{}, CSLotteryHistory)
//年兽排行榜
com.Register(int(rankproto.Rank_PACKET_RANK_CSNian), rankproto.CSNian{}, CSNian)
// 红包历史记录
com.Register(int(rankproto.Rank_PACKET_CSRedPacketHistory), rankproto.CSRedPacketHistory{}, CSRedPacketHistory)
}
func CSRankMatch(s *netlib.Session, d *rankproto.GateTransmit, packetId int, data interface{}, sid int64) error {
@ -646,3 +650,172 @@ func CSLotteryHistory(s *netlib.Session, d *rankproto.GateTransmit, packetId int
})
return nil
}
func CSNian(s *netlib.Session, d *rankproto.GateTransmit, packetId int, data interface{}, sid int64) error {
logger.Logger.Trace("CSNian data:", data)
msg, ok := data.(*rankproto.CSNian)
if !ok {
return nil
}
if msg.TypeId == 1 {
rank.NianLuckMgrInstance.Take(d.Platform, 0, func(list []*model.NianInfo, err error) {
if err != nil {
logger.Logger.Errorf("CSNian error: %v", err)
return
}
page := msg.GetPage()
if page < 0 {
page = 0
}
pageSize := msg.GetPageSize()
if pageSize < 1 {
pageSize = 10
}
start := page * pageSize
end := start + pageSize
if end >= int32(len(list)) {
end = int32(len(list))
}
var i int32
var ranks []*rankproto.NianRankData
if end > start && int(start) < len(list) {
for _, v := range list[start:end] {
r := &rankproto.NianRankData{
Snid: v.SnId,
Name: v.Name,
Score: v.Luck,
Rank: start + i,
ModId: v.ModId,
}
ranks = append(ranks, r)
i++
}
}
var me *rankproto.NianRankData
for k, v := range list {
if v.SnId == d.Snid {
me = &rankproto.NianRankData{
Snid: v.SnId,
Name: v.Name,
Score: v.Luck,
Rank: int32(k),
ModId: v.ModId,
}
break
}
}
pack := &rankproto.SCNian{
Ranks: ranks,
Me: me,
Page: page,
PageSize: pageSize,
Total: int32(len(list)),
}
pack.TypeId = msg.TypeId
common.SendToGate(sid, int(rankproto.Rank_PACKET_RANK_SCNian), pack, s)
logger.Logger.Tracef("SCNian: %v", pack)
})
} else if msg.TypeId == 2 {
rank.NianDamageMgrInstance.Take(d.Platform, 0, func(list []*model.NianInfo, err error) {
if err != nil {
logger.Logger.Errorf("CSNian error: %v", err)
return
}
page := msg.GetPage()
if page < 0 {
page = 0
}
pageSize := msg.GetPageSize()
if pageSize < 1 {
pageSize = 10
}
start := page * pageSize
end := start + pageSize
if end >= int32(len(list)) {
end = int32(len(list))
}
var i int32
var ranks []*rankproto.NianRankData
if end > start && int(start) < len(list) {
for _, v := range list[start:end] {
r := &rankproto.NianRankData{
Snid: v.SnId,
Name: v.Name,
Score: v.Damage,
Rank: start + i,
ModId: v.ModId,
}
ranks = append(ranks, r)
i++
}
}
var me *rankproto.NianRankData
for k, v := range list {
if v.SnId == d.Snid {
me = &rankproto.NianRankData{
Snid: v.SnId,
Name: v.Name,
Score: v.Damage,
Rank: int32(k),
ModId: v.ModId,
}
break
}
}
pack := &rankproto.SCNian{
Ranks: ranks,
Me: me,
Page: page,
PageSize: pageSize,
Total: int32(len(list)),
}
pack.TypeId = msg.TypeId
common.SendToGate(sid, int(rankproto.Rank_PACKET_RANK_SCNian), pack, s)
logger.Logger.Tracef("SCCoin: %v", pack)
})
}
return nil
}
func CSRedPacketHistory(s *netlib.Session, d *rankproto.GateTransmit, packetId int, data interface{}, sid int64) error {
logger.Logger.Trace("CSRedPacketHistory data:", data)
msg, ok := data.(*rankproto.CSRedPacketHistory)
if !ok {
return nil
}
pack := &rankproto.SCRedPacketHistory{}
var list []*model.RedPacketHistory
var err error
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
list, err = model.GetRedPacketHistory(d.Platform, d.Snid, msg.GetId())
if err != nil {
logger.Logger.Errorf("GetRedPacketHistory error: %v", err)
}
return nil
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
if err == nil {
for _, v := range list {
pack.List = append(pack.List, &rankproto.RedPacketHistory{
Ts: v.Ts,
ItemId: v.ItemId,
ItemNum: v.ItemNum,
})
}
}
common.SendToGate(sid, int(rankproto.Rank_PACKET_SCRedPacketHistory), pack, s)
}), "CSRedPacketHistory").Start()
return nil
}

View File

@ -0,0 +1,22 @@
package rank
import (
"mongo.games.com/game/model"
"mongo.games.com/game/ranksrv/com"
"mongo.games.com/goserver/core/logger"
)
var NianDamageMgrInstance = com.NewListMgr[*model.NianInfo](
func() int64 {
return int64(model.GameParamData.RankTimeout)
},
func(platform string, index int32) ([]*model.NianInfo, error) {
logger.Logger.Tracef("load rank nian luck platform:%s", platform)
list, err := model.FindDamageNianRankList(&model.FindNianListArgs{
Platform: platform,
})
if err != nil {
return nil, err
}
return list.List, nil
})

22
ranksrv/rank/nianluck.go Normal file
View File

@ -0,0 +1,22 @@
package rank
import (
"mongo.games.com/game/model"
"mongo.games.com/game/ranksrv/com"
"mongo.games.com/goserver/core/logger"
)
var NianLuckMgrInstance = com.NewListMgr[*model.NianInfo](
func() int64 {
return int64(model.GameParamData.RankTimeout)
},
func(platform string, index int32) ([]*model.NianInfo, error) {
logger.Logger.Tracef("load rank nian luck platform:%s", platform)
list, err := model.FindLuckNianRankList(&model.FindNianListArgs{
Platform: platform,
})
if err != nil {
return nil, err
}
return list.List, nil
})

77
srvdata/db_actpushcoin.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_ACTPushCoinMgr = &DB_ACTPushCoinMgr{
Datas: &server.DB_ACTPushCoinArray{},
pool: make(map[int32]*server.DB_ACTPushCoin),
}
type DB_ACTPushCoinMgr struct {
Datas *server.DB_ACTPushCoinArray
pool map[int32]*server.DB_ACTPushCoin
}
func (this *DB_ACTPushCoinMgr) unmarshal(data []byte) error {
err := proto.Unmarshal(data, this.Datas)
if err == nil {
this.arrangeData()
}
return err
}
func (this *DB_ACTPushCoinMgr) reunmarshal(data []byte) error {
newDatas := &server.DB_ACTPushCoinArray{}
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_ACTPushCoinMgr) 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_ACTPushCoinMgr) GetData(id int32) *server.DB_ACTPushCoin {
if data, ok := this.pool[id]; ok {
return data
}
return nil
}
func init() {
DataMgr.register("DB_ACTPushCoin.dat", &ProtobufDataLoader{dh: PBDB_ACTPushCoinMgr})
}

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_NewYearActivityMgr = &DB_NewYearActivityMgr{
Datas: &server.DB_NewYearActivityArray{},
pool: make(map[int32]*server.DB_NewYearActivity),
}
type DB_NewYearActivityMgr struct {
Datas *server.DB_NewYearActivityArray
pool map[int32]*server.DB_NewYearActivity
}
func (this *DB_NewYearActivityMgr) unmarshal(data []byte) error {
err := proto.Unmarshal(data, this.Datas)
if err == nil {
this.arrangeData()
}
return err
}
func (this *DB_NewYearActivityMgr) reunmarshal(data []byte) error {
newDatas := &server.DB_NewYearActivityArray{}
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_NewYearActivityMgr) 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_NewYearActivityMgr) GetData(id int32) *server.DB_NewYearActivity {
if data, ok := this.pool[id]; ok {
return data
}
return nil
}
func init() {
DataMgr.register("DB_NewYearActivity.dat", &ProtobufDataLoader{dh: PBDB_NewYearActivityMgr})
}

View File

@ -2,7 +2,6 @@ package main
import (
"fmt"
"golang.org/x/exp/maps"
"strings"
"github.com/mozillazg/go-pinyin"
@ -111,7 +110,7 @@ func (e *ExcelMgr) Save(id int, startTime, endTime string) error {
filename := fmt.Sprintf("%s_%s_%s.xlsx", d.DataName, startTime, endTime)
if VP.GetBool("IsDatabaseMode") {
if true {
rows, err := d.GetRows("Sheet1")
if err != nil {
return err
@ -127,21 +126,20 @@ func (e *ExcelMgr) Save(id int, startTime, endTime string) error {
index := make(map[string]string)
for _, v := range d.Head {
cl := ChineseToPinYin([]string{v})[0]
d.TableHead = append(d.TableHead, cl)
files[cl] = v
if strings.Contains(v, "*") {
index[cl] = "INDEX"
}
}
createSQL := buildCreateTableSQLWithIndices(d.TableName, d.DataName, files, index)
createSQL := buildCreateTableSQLWithIndices(d.TableName, d.DataName, d.TableHead, files, index)
if err = db.Exec(createSQL).Error; err != nil {
logger.Logger.Errorf("createTable error: %v", err)
return err
}
if err = insertData(db.DB, d.TableName, maps.Keys(files), rows); err != nil {
if err = insertData(db.DB, d.TableName, d.TableHead, rows); err != nil {
logger.Logger.Errorf("insertData error: %v", err)
return err
}
@ -195,12 +193,13 @@ func (e *ExcelMgr) Pull(id int, startTime, endTime string) (*excelize.File, stri
}
// 构建创建表的 SQL 语句,支持中文描述和索引
func buildCreateTableSQLWithIndices(tableName string, comment string, fields map[string]string, indices map[string]string) string {
func buildCreateTableSQLWithIndices(tableName string, comment string, head []string, fields map[string]string, indices map[string]string) string {
var columns []string
var indexDefs []string
// 遍历字段定义
for field, comment := range fields {
for _, field := range head {
comment := fields[field]
column := fmt.Sprintf("`%s` VARCHAR(255) COMMENT '%s'", field, comment)
columns = append(columns, column)
@ -234,7 +233,7 @@ func insertData(db *gorm.DB, tableName string, header []string, rows [][]string)
insertSQL := fmt.Sprintf("INSERT INTO `%s` (%s) VALUES (%s)", tableName, "`"+strings.Join(header, "`,`")+"`", placeholders)
for _, row := range rows {
for _, row := range rows[1:] {
// 确保每行数据长度和表头一致
if len(row) < len(header) {
for len(row) < len(header) {

View File

@ -16,8 +16,8 @@ data_type 数据类型
3新用户平均局数
4平均倍数
5活跃破产率
start_time 开始时间
end_time 结束时间
start_time 开始时间 格式2024-12-26
end_time 结束时间 格式2024-12-26
*/
// Download 下载

View File

@ -2,7 +2,6 @@ package main
import (
"fmt"
"mongo.games.com/goserver/core/utils"
"net/http"
"os"
"os/signal"
@ -13,6 +12,7 @@ import (
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/mongox"
"mongo.games.com/goserver/core/mysqlx"
"mongo.games.com/goserver/core/utils"
"mongo.games.com/goserver/core/viperx"
"mongo.games.com/game/common"
@ -39,8 +39,8 @@ var ExcelMgrSingle *ExcelMgr
func run() {
if VP.GetBool("IsDatabaseMode") {
VP.Set("StartTime", common.HMSToTime(0, 0, 0).Format(time.RFC3339))
VP.Set("EndTime", common.HMSToTime(0, 0, 0).AddDate(0, 0, 1).Format(time.RFC3339))
VP.Set("StartTime", common.HMSToTime(0, 0, 0).AddDate(0, 0, -1).Format(time.RFC3339))
VP.Set("EndTime", common.HMSToTime(0, 0, 0).Format(time.RFC3339))
}
startTime, err := time.Parse(time.RFC3339, VP.GetString("StartTime"))

View File

@ -0,0 +1,95 @@
package main
import (
"encoding/json"
"fmt"
"math/rand"
"mongo.games.com/goserver/core/timer"
"time"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/game/model"
"mongo.games.com/game/proto"
loginproto "mongo.games.com/game/protocol/login"
playerproto "mongo.games.com/game/protocol/player"
)
func init() {
// 心跳
netlib.Register(int(loginproto.GatePacketID_PACKET_SC_PONG), loginproto.SCPong{}, SCPong)
// 登录
netlib.Register(int(loginproto.LoginPacketID_PACKET_SC_LOGIN), loginproto.SCLogin{}, SCLogin)
// 玩家信息
netlib.Register(int(playerproto.PlayerPacketID_PACKET_SC_PLAYERDATA), playerproto.SCPlayerData{}, SCPlayerData)
}
func SCPong(s *netlib.Session, packetid int, data interface{}) error {
accountID := s.GetAttribute(SessionAttributeClientAccountId)
logger.Logger.Tracef("SCPong username:%v %v", accountID, data)
return nil
}
func SCLogin(s *netlib.Session, packetid int, data interface{}) error {
logger.Logger.Trace("SCLogin ", data)
msg, ok := data.(*loginproto.SCLogin)
if !ok {
return nil
}
if msg.GetOpRetCode() != loginproto.OpResultCode_OPRC_Sucess {
accountID := s.GetAttribute(SessionAttributeClientAccountId)
logger.Logger.Error("登录失败 ", accountID)
s.Close()
return nil
}
csPlayerData := &playerproto.CSPlayerData{
AccId: msg.GetAccId(),
}
pp := &model.PlayerParams{
Platform: 1,
Ip: fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)),
City: "北京",
Logininmodel: "app",
}
d, err := json.Marshal(pp)
if err == nil {
csPlayerData.Params = proto.String(string(d))
}
s.Send(int(playerproto.PlayerPacketID_PACKET_CS_PLAYERDATA), csPlayerData)
logger.Logger.Info("登录成功 ", msg.GetAccId())
return nil
}
func SCPlayerData(s *netlib.Session, packetid int, data interface{}) error {
logger.Logger.Trace("SCPlayerData ", data)
msg, ok := data.(*playerproto.SCPlayerData)
if !ok {
return nil
}
if msg.GetOpRetCode() != playerproto.OpResultCode_OPRC_Sucess {
accountID := s.GetAttribute(SessionAttributeClientAccountId)
logger.Logger.Errorf("获取玩家信息失败 %v", accountID)
s.Close()
return nil
}
s.SetAttribute(SessionAttributeUser, msg)
StartSessionPingTimer(s, timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool {
if !s.IsConned() {
StopSessionPingTimer(s)
return false
}
pack := &loginproto.CSPing{}
s.Send(int(loginproto.GatePacketID_PACKET_CS_PING), pack)
return true
}), nil, time.Second*time.Duration(60+rand.Int31n(100)), -1)
return nil
}

35
tools/benchmark/config.go Normal file
View File

@ -0,0 +1,35 @@
package main
import (
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
)
var Config = &Configuration{}
type Configuration struct {
Count int // 机器人总数
AppId string // appID
Connects netlib.SessionConfig // 网络连接配置
}
func (this *Configuration) Name() string {
return "benchmark"
}
func (this *Configuration) Init() error {
logger.Logger.Tracef("%+v", *this)
if this.Count == 0 {
this.Count = 20
}
return nil
}
func (this *Configuration) Close() error {
return nil
}
func init() {
core.RegistePackage(Config)
}

View File

@ -0,0 +1,65 @@
netlib:
SrvInfo:
Name: BenchmarkServer
Type: 9
Id: 902
AreaID: 1
Banner:
- =================
- benchmark server
- =================
IoServices: []
module:
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 100
executor:
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 0
Worker:
WorkerCnt: 8
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 0
timer:
Options:
QueueBacklog: 1024
MaxDone: 1024
Interval: 100
signal:
SupportSignal: true
benchmark:
Count: 100
AppId: 5c56d1644966f078bfb90c71
Connects:
Id: 402
Type: 4
AreaId: 1
Name: ClientService
Ip: 127.0.0.1
Port: 11001
Protocol: tcp
Path: /
MaxDone: 200
MaxPend: 200
MaxPacket: 65535
MaxConn: 2000
RcvBuff: 4096
SndBuff: 4096
WriteTimeout: 3600
ReadTimeout: 3600
SoLinger: 10
IsInnerLink: true
NoDelay: true
SupportFragment: true
AuthKey: www.jxjy.games.cn
IsClient: true
AllowMultiConn: true
FilterChain:
- session-filter-auth
HandlerChain:
- handler-gate-session

View File

@ -0,0 +1,69 @@
package main
import (
"time"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
"mongo.games.com/goserver/core/netlib"
)
const (
// RobotSessionStartId 机器人session开始id
RobotSessionStartId = 100000000
)
var (
BenchMarkModule = &BenchMark{}
WaitConnectSessions []*netlib.SessionConfig
)
// NewSession 新建session
// id 连接id, 默认自动分配
func NewSession(id ...int) {
cfg := Config.Connects
if len(id) > 0 && id[0] > 0 {
cfg.Id = id[0]
} else {
BenchMarkModule.idx++
cfg.Id = BenchMarkModule.idx
}
cfg.Init()
logger.Logger.Info("waite connect session id=", cfg.Id)
WaitConnectSessions = append(WaitConnectSessions, &cfg)
}
type BenchMark struct {
idx int
}
func (m *BenchMark) ModuleName() string {
return "benchmark-module"
}
func (m *BenchMark) Init() {
m.idx = RobotSessionStartId
for i := 0; i < Config.Count; i++ {
NewSession()
}
}
// Update 机器开始连接游戏服务器
func (m *BenchMark) Update() {
n := len(WaitConnectSessions)
if n > 0 {
config := WaitConnectSessions[n-1]
WaitConnectSessions = WaitConnectSessions[:n-1]
if err := netlib.Connect(config); err != nil {
logger.Logger.Error("netlib.Connect error", err)
}
}
}
func (m *BenchMark) Shutdown() {
module.UnregisteModule(m)
}
func init() {
module.RegisteModule(BenchMarkModule, time.Millisecond, 1)
}

View File

@ -0,0 +1,31 @@
package main
import (
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/goserver/core/timer"
"time"
)
const (
SessionAttributeClientAccountId int = iota // 账号
SessionAttributeUser
SessionAttributePingTimer
)
func StartSessionPingTimer(s *netlib.Session, act timer.TimerAction, ud interface{}, interval time.Duration, times int) bool {
StopSessionPingTimer(s)
if hTimer, ok := timer.StartTimer(act, ud, interval, times); ok {
s.SetAttribute(SessionAttributePingTimer, hTimer)
return true
}
return false
}
func StopSessionPingTimer(s *netlib.Session) {
if h, ok := s.GetAttribute(SessionAttributePingTimer).(timer.TimerHandle); ok {
if h != timer.TimerHandle(0) {
timer.StopTimer(h)
s.RemoveAttribute(SessionAttributePingTimer)
}
}
}

View File

@ -0,0 +1,97 @@
package main
import (
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"math/rand"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
loginproto "mongo.games.com/game/protocol/login"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"strconv"
"sync/atomic"
"time"
)
/*
添加到客户端管理器管理器负责登录
当连接断开时从管理器中移除判断是否需要重连
*/
const (
GateSessionHandlerName = "handler-gate-session"
)
type GateSessionHandler struct {
netlib.BasicSessionHandler
}
func (g *GateSessionHandler) GetName() string {
return GateSessionHandlerName
}
func (g *GateSessionHandler) GetInterestOps() uint {
return 1<<netlib.InterestOps_Opened |
1<<netlib.InterestOps_Closed
}
func (g *GateSessionHandler) OnSessionOpened(s *netlib.Session) {
// 登录账号
StartLogin(s)
return
}
func (g *GateSessionHandler) OnSessionClosed(s *netlib.Session) {
}
func init() {
netlib.RegisteSessionHandlerCreator(GateSessionHandlerName, func() netlib.SessionHandler {
return &GateSessionHandler{}
})
}
var UserNameIndex int64
func StartLogin(s *netlib.Session) {
ts := time.Now().UnixNano()
username := fmt.Sprintf("benchmark-%v", atomic.AddInt64(&UserNameIndex, 1))
s.SetAttribute(SessionAttributeClientAccountId, username)
csLogin := &loginproto.CSLogin{
Username: username,
TimeStamp: ts,
Platform: "1",
Channel: "",
PlatformTag: "test.win88.yy_android",
}
params := &model.PlayerParams{
Ip: fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)),
City: "北京",
Platform: 1,
Logininmodel: "app",
}
data, err := json.Marshal(params)
if err == nil {
csLogin.Params = string(data[:])
}
h := md5.New()
io.WriteString(h, fmt.Sprintf("%v%v", username, Config.AppId))
pwd := hex.EncodeToString(h.Sum(nil))
h.Reset()
io.WriteString(h, fmt.Sprintf("%v%v%v", pwd, Config.AppId, ts))
pwd = hex.EncodeToString(h.Sum(nil))
csLogin.Password = pwd
csLogin.LoginType = 0
csLogin.Sign = common.MakeMd5String(csLogin.GetUsername(), csLogin.GetPassword(),
strconv.Itoa(int(csLogin.GetTimeStamp())), csLogin.GetParams(), Config.AppId)
s.Send(int(loginproto.LoginPacketID_PACKET_CS_LOGIN), csLogin)
logger.Logger.Infof("账号 [%v] 开始登录", username)
}

Some files were not shown because too many files have changed in this diff Show More