diff --git a/common/constant.go b/common/constant.go index 21442dc..7df2584 100644 --- a/common/constant.go +++ b/common/constant.go @@ -662,15 +662,15 @@ const ( TaskTypePay = 7 // 充值金额 TaskTypeWinOrLose = 8 // 游戏输赢金币数量 TaskTypeTienlenCount = 9 // tienlen游戏场次 - TaskTypeBindInviter = 10 // 绑定邀请人数量 + TaskTypeBindInviter = 10 // 绑定邀请人数量* TaskTypeWinCoin = 11 // 赢取金币数量 TaskTypeTienlenWinTimes = 12 // tienlen游戏赢取次数 - TaskTypeInviteScore = 13 // 邀请积分 + TaskTypeInviteScore = 13 // 邀请积分* TaskTypeActivityScore = 14 // 周活跃积分数量 TaskTypeFirstLogin = 15 // 每日首次登录 - TaskTypeInviteNum = 16 // 邀请绑定数量 + TaskTypeInviteNum = 16 // 邀请绑定数量* TaskTypeTurnplate = 17 // 转盘抽奖次数 - TaskTypeInviteRecharge = 18 // 被邀请人充值金额 + TaskTypeInviteRecharge = 18 // 被邀请人充值金额* ) const ( @@ -691,17 +691,12 @@ const ( const HeadRange = 3 // 机器人头像id范围 const ( - InviteScoreTypeBind = 1 // 绑定邀请码 - InviteScoreTypeLogin = 2 // 每日登录 - InviteScoreTypePlayTimes = 3 // 每日参与任意游戏 - InviteScoreTypeRecharge = 4 // 充值 - InviteScoreTypeGameTimes = 5 // 每局游戏 + InviteScoreCheckWeek = -1 // 跨周 + InviteScoreTypeBind = 1 // 绑定邀请码 + InviteScoreTypePay = 2 // 充值 + InviteScoreTypeRecharge = 3 // 充值完成 ) -const TaskIDInvitePlayGame = 1000001 -const TaskIDInviteRecharge = 1000002 -const TaskIDInviteFirstLogin = 1000003 - func InMatchChannel(ls []string, n string) bool { if n == "" || len(ls) == 0 { return false @@ -751,10 +746,6 @@ const ( var PetIDs = []int32{PetIDChicken} -const ( - InviteScoreRecharge = 10000 // 用户每充值$1邀请人获得积分 -) - const ( ChannelSwitchExchange = 1 ChannelSwitchDropItem = 2 diff --git a/common/time.go b/common/time.go index d6156c0..64f93df 100644 --- a/common/time.go +++ b/common/time.go @@ -143,3 +143,39 @@ func InTimeRange(beginHour, beginMinute, endHour, endMinute, checkHour, checkMin checkTime := checkHour*100 + checkMinute return beginTime <= checkTime && checkTime <= endTime } + +func GetWeekTimestamp() []int64 { + now := time.Now().Local() + year, month, day := now.Date() + today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) + // 本周起始日期(周日) + st := today.AddDate(0, 0, -int(today.Weekday())).Unix() + et := today.AddDate(0, 0, 7-int(today.Weekday())).Unix() + return []int64{st, et} +} + +func GetWeekStartTs(ts int64) int64 { + now := time.Unix(ts, 0).Local() + year, month, day := now.Date() + today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) + // 本周起始日期(周日) + st := today.AddDate(0, 0, -int(today.Weekday())).Unix() + return st +} + +func GetMonthTimestamp() []int64 { + now := time.Now().Local() + year, month, _ := now.Date() + // 本月起始日期 + st := time.Date(year, month, 1, 0, 0, 0, 0, time.Local).Unix() + // 计算下个月的年和月 + if month == time.December { + year = year + 1 + month = time.January + } else { + month = month + 1 + } + // 构建下个月的第一天的时间 + et := time.Date(year, month, 1, 0, 0, 0, 0, now.Location()).Unix() + return []int64{st, et} +} diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 0a0ae96..426f51e 100644 Binary files a/data/DB_PropExchange.dat and b/data/DB_PropExchange.dat differ diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 6abcc65..96901cf 100644 Binary files a/data/DB_Task.dat and b/data/DB_Task.dat differ diff --git a/data/gameparam.json b/data/gameparam.json index b0d94cd..ac32d61 100644 --- a/data/gameparam.json +++ b/data/gameparam.json @@ -23,5 +23,5 @@ "ClosePreCreateRoom": true, "AgoraAddress": "http://47.105.78.29:8081", "InviteUrl": "http://47.105.78.29:8000/", - "RankTimeout": 5 + "RankTimeout": 2 } \ No newline at end of file diff --git a/dbproxy/mq/c_invite.go b/dbproxy/mq/c_invite.go index 053ed4b..5f077b9 100644 --- a/dbproxy/mq/c_invite.go +++ b/dbproxy/mq/c_invite.go @@ -2,65 +2,210 @@ package mq import ( "encoding/json" - "fmt" + "errors" "time" - "github.com/astaxie/beego/cache" "mongo.games.com/goserver/core/broker" "mongo.games.com/goserver/core/broker/rabbitmq" "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" "mongo.games.com/game/dbproxy/svc" "mongo.games.com/game/model" "mongo.games.com/game/mq" - rankproto "mongo.games.com/game/protocol/rank" ) -var InviteNumCache = cache.NewMemoryCache() - func init() { - mq.RegisterSubscriber(model.EvtBindInvite, func(e broker.Event) (err error) { + mq.RegisterSubscriber(model.EvtInvite, func(e broker.Event) (err error) { msg := e.Message() if msg != nil { defer func() { e.Ack() }() - var log model.BindInvite + var log model.EvtInviteMsg err = json.Unmarshal(msg.Body, &log) if err != nil { + logger.Logger.Errorf("EvtInvite json.Unmarshal error:%v msg:%v", err, string(msg.Body)) return } + logger.Logger.Tracef("EvtInvite log:%+v", log) - // 绑定 - err = svc.BindInviteSnId(log.Platform, log.SnId, log.InviteSnId, log.Ts) - if err != nil { - logger.Logger.Errorf("BindInviteSnId error:%v", err) - return err + now := time.Unix(log.Ts, 0).Local() // 数据创建时间 + + get := func(snid int32) (*model.EvtInviteAckMsg, error) { + if snid == 0 { + return nil, errors.New("not found") + } + n := new(model.EvtInviteAckMsg) + n.Platform = log.Platform + n.Snid = snid + n.Score, n.Num, n.Money, _, err = svc.GetInviteData(log.Platform, snid) + return n, err } - name := fmt.Sprintf("%v", log.InviteSnId) - b := InviteNumCache.Get(name) - n, _ := b.(int32) - if n > 0 { - n++ - } else { - n, err = svc.GetInviteNum(log.Platform, log.InviteSnId, int32(rankproto.RankInvite_InviteType_Total)) + // 增加积分 + add := func(snid int32, score, money, rate int64) error { + if snid == 0 { + return nil + } + err = svc.AddInviteScore(log.Platform, snid, score*rate/10000, money, now) if err != nil { - logger.Logger.Errorf("BindInviteSnId error:%v", err) + logger.Logger.Errorf("EvtInvite add error:%v snid:%v score:%v rate:%v", err, snid, score, rate) + return err + } + msg, err := get(snid) + if err != nil { + logger.Logger.Errorf("EvtInvite add find error:%v snid:%v score:%v rate:%v", err, snid, score, rate) + return err + } + mq.Send(model.EvtInviteAck, msg) + return nil + } + + // 重置积分 + reset := func(snid int32) error { + if snid == 0 { + return nil + } + _, _, _, ts, err := svc.GetInviteData(log.Platform, snid) // 上次更新时间 + if err != nil { + logger.Logger.Errorf("EvtInvite GetInviteData error:%v snid:%v", err, snid) + return err + } + inSameWeek := common.InSameWeek(ts, now) + if !inSameWeek { + err = svc.ClearInviteScore(log.Platform, snid, now) + if err != nil { + logger.Logger.Errorf("EvtInvite ClearInviteScore error:%v snid:%v", err, snid) + return err + } + msg, err := get(snid) + if err != nil { + logger.Logger.Errorf("EvtInvite get error:%v snid:%v", err, snid) + return err + } + msg.Score = 0 + mq.Send(model.EvtInviteAck, msg) + } + return nil + } + + // 当前玩家积分是否跨周重置 + err = reset(log.SnId) + if err != nil { + logger.Logger.Errorf("EvtInvite reset 1 error:%v snid:%v", err, log.SnId) + return err + } + // 父节点积分是否跨周重置 + // 一级 + err = reset(log.InviteSnId) + if err != nil { + logger.Logger.Errorf("EvtInvite reset 2 error:%v snid:%v", err, log.InviteSnId) + return err + } + // 二级 + ppsnid, err := svc.GetPSnId(log.Platform, log.InviteSnId) + if err != nil { + logger.Logger.Errorf("EvtInvite GetPSnId 1 error:%v snid:%v", err, log.InviteSnId) + return err + } + if ppsnid > 0 { + err = reset(ppsnid) + if err != nil { + logger.Logger.Errorf("EvtInvite reset 3 error:%v snid:%v", err, ppsnid) return err } } - InviteNumCache.Put(name, n, int64(time.Hour.Seconds())) - // 更新绑定数量 - mq.Send(model.AckBindNum, &model.BindNum{ - SnId: log.InviteSnId, - Num: n, - }) + var addRechargeScore bool + if log.Tp != common.InviteScoreCheckWeek { + addRechargeScore, err = svc.SaveInviteScore(&log.InviteScore, log.RechargeScore) + if err != nil { + logger.Logger.Errorf("EvtInvite SaveInviteScore error:%v msg:%+v %+v", err, log.InviteScore, log) + return err + } + } - return + switch log.Tp { + case common.InviteScoreTypeBind: + code, err := svc.GetCodeBySnId(log.Platform, log.InviteSnId) + if err != nil { + logger.Logger.Errorf("EvtInvite GetCodeBySnId error:%v %v", err, log.InviteSnId) + return err + } + // 绑定关系 + err = svc.BindInviteSnId(log.Platform, log.SnId, log.InviteSnId, code) + if err != nil { + logger.Logger.Errorf("EvtInvite BindInviteSnId error:%v msg:%+v", err, log.InviteScore) + return err + } + // 更新绑定数量 + // 更新邀请积分 + // 1.邀请人增加积分 + add(log.InviteSnId, log.Score, 0, 10000) + // 2.上级增加积分 + var psnid int32 + if len(log.Rate) > 0 { + psnid, err = svc.GetPSnId(log.Platform, log.InviteSnId) + if err != nil { + logger.Logger.Errorf("EvtInvite GetPSnId 2 error:%v snid:%v", err, log.InviteSnId) + return err + } + if psnid > 0 { + add(psnid, log.Score, 0, log.Rate[0]) + } + } + if len(log.Rate) > 1 && psnid > 0 { + psnid, err = svc.GetPSnId(log.Platform, psnid) + if err != nil { + logger.Logger.Errorf("EvtInvite GetPSnId 2 error:%v snid:%v", err, log.InviteSnId) + return err + } + if psnid > 0 { + add(psnid, log.Score, 0, log.Rate[1]) + } + } + + case common.InviteScoreTypePay: + // 更新充值积分,上级积分增加 + var psnid int32 + if len(log.Rate) > 0 { + add(log.InviteSnId, log.Score, log.Money, log.Rate[0]) + psnid, err = svc.GetPSnId(log.Platform, log.InviteSnId) + if err != nil { + logger.Logger.Errorf("EvtInvite GetPSnId 3 error:%v snid:%v", err, log.InviteSnId) + return err + } + } + if len(log.Rate) > 1 && psnid > 0 { + add(psnid, log.Score, 0, log.Rate[1]) + psnid, err = svc.GetPSnId(log.Platform, psnid) + if err != nil { + logger.Logger.Errorf("EvtInvite GetPSnId 4 error:%v snid:%v", err, psnid) + return err + } + } + if len(log.Rate) > 2 && psnid > 0 { + add(psnid, log.Score, 0, log.Rate[2]) + } + if addRechargeScore { + add(log.InviteSnId, log.RechargeScore, log.Money, 10000) + } + + case common.InviteScoreTypeRecharge: + // 更新自己的积分 + if addRechargeScore { + add(log.InviteSnId, log.RechargeScore, log.Money, 10000) + } + + case common.InviteScoreCheckWeek: + + default: + logger.Logger.Errorf("EvtInvite tp error, %v", log.Tp) + return err + } } return nil - }, broker.Queue(model.EvtBindInvite), broker.DisableAutoAck(), rabbitmq.DurableQueue()) + }, broker.Queue(model.EvtInvite), broker.DisableAutoAck(), rabbitmq.DurableQueue()) } diff --git a/dbproxy/svc/l_invitescore.go b/dbproxy/svc/l_invitescore.go new file mode 100644 index 0000000..9726e30 --- /dev/null +++ b/dbproxy/svc/l_invitescore.go @@ -0,0 +1,329 @@ +package svc + +import ( + "errors" + "net/rpc" + "sort" + "time" + + "github.com/globalsign/mgo" + "github.com/globalsign/mgo/bson" + "mongo.games.com/goserver/core/logger" + + "mongo.games.com/game/common" + "mongo.games.com/game/dbproxy/mongo" + "mongo.games.com/game/model" +) + +var ( + InviteScoreDBName = "log" + InviteScoreCollName = "log_invitescore" + InviteScoreColError = errors.New("InviteScore collection open failed") +) + +func InviteScoreCollection(plt string) *mongo.Collection { + s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, InviteScoreDBName) + if s != nil { + c, first := s.DB().C(InviteScoreCollName) + if first { + c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"invitesnid"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"tp"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"ts"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"-ts"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"money"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"score"}, Background: true, Sparse: true}) + } + return c + } + + return nil +} + +type BindScoreSvc struct { +} + +func SaveInviteScore(req *model.InviteScore, rechargeScore int64) (b bool, err error) { + logger.Logger.Tracef("SaveInviteScore req:%+v", *req) + if req.InviteSnId == 0 || req.SnId == 0 { + return false, nil + } + + req.Id = bson.NewObjectId() + u := PlayerDataCollection(req.Platform) + if u == nil { + return false, PlayerColError + } + + c := InviteScoreCollection(req.Platform) + if c == nil { + return false, InviteScoreColError + } + + // 不能重复绑定 + if req.Tp == common.InviteScoreTypeBind { + a := &model.InviteScore{} + err = c.Find(bson.M{"snid": req.SnId, "tp": common.InviteScoreTypeBind}).One(a) + if err != nil && !errors.Is(err, mgo.ErrNotFound) { + return false, errors.New("find error") + } + if err == nil && a.InviteSnId > 0 { + // 已经绑定 + return false, errors.New("already bind") + } + } + + // 必须已经绑定 + if req.Tp != common.InviteScoreTypeBind { + a := &model.InviteScore{} + err = c.Find(bson.M{"snid": req.SnId, "tp": common.InviteScoreTypeBind}).One(a) + if err != nil { + // 还没有绑定上级 + logger.Logger.Errorf("GetInviteScore Find BindTime error:%v", err) + return false, err + } + } + + // 充值成功记录 + if req.Tp == common.InviteScoreTypePay || req.Tp == common.InviteScoreTypeRecharge { + // 是否已经记录过 + a := &model.InviteScore{} + err = c.Find(bson.M{"snid": req.SnId, "tp": common.InviteScoreTypeRecharge}).One(a) + if err != nil && !errors.Is(err, mgo.ErrNotFound) { + return false, errors.New("find error") + } + if err == nil && a.InviteSnId > 0 { + // 已有记录 + if req.Tp == common.InviteScoreTypeRecharge { + + } else { + err = c.Insert(req) + if err != nil { + logger.Logger.Errorf("SaveInviteScore Insert 1 error:%v", err) + return false, err + } + } + } else { + // 没有充值成功记录 + err = c.Insert(req) + if err != nil { + logger.Logger.Errorf("SaveInviteScore Insert 2 error:%v", err) + return false, err + } + newReq := *req + if newReq.Tp != common.InviteScoreTypeRecharge { + newReq.Id = bson.NewObjectId() + newReq.Tp = common.InviteScoreTypeRecharge + newReq.Score = rechargeScore + err = c.Insert(newReq) + if err != nil { + logger.Logger.Errorf("SaveInviteScore InviteScoreTypeRecharge Insert error:%v", err) + return false, err + } + } + b = true + } + } else { + err = c.Insert(req) + if err != nil { + logger.Logger.Errorf("SaveInviteScore Insert 3 error:%v", err) + return false, err + } + } + + return b, nil +} + +// GetInviteRankList 获取周榜 +func (b *BindScoreSvc) GetInviteRankList(req *model.FindPlayerRankInviteListArgs, ret *model.FindPlayerRankInviteListReply) error { + c := RankInviteCollection(req.Platform) + if c == nil { + return RankInviteColError + } + + ret.RankType = req.RankType + + var st int64 + switch req.RankType { + case 1: //todo 总榜 + return nil + case 2: // 本周榜 + st = common.GetWeekStartTs(time.Now().Unix()) + case 3: //todo 月榜 + return nil + case 4: // 上周榜 + st = common.GetWeekStartTs(time.Now().Unix()) + st -= 7 * 24 * 3600 + } + var list []*model.RankInvite + err := c.Find(bson.M{"week": st}).Sort("-score").Limit(int(model.GameParamData.RankInviteMaxNum)).All(&list) + if err != nil { + logger.Logger.Errorf("GetInviteRankList error: %v", err) + return err + } + + var conds []int32 + if len(list) > 0 { + type PInfo struct { + SnId int32 + Name string // 昵称 + Roles *model.RolePetInfo + } + var retPlayerList []PInfo + cplayerdata := PlayerDataCollection(req.Platform) + if cplayerdata == nil { + return err + } + + for i := 0; i < len(list); i++ { + conds = append(conds, list[i].SnId) + } + + selecter := bson.M{"snid": bson.M{"$in": conds}} + err = cplayerdata.Find(selecter).Select(bson.M{"snid": 1, "name": 1, "roles": 1}).All(&retPlayerList) + if err != nil { + logger.Logger.Error("GetInviteRankList find player is error", err) + return err + } + + for _, inviteInfo := range list { + for _, playerData := range retPlayerList { + if inviteInfo.SnId == playerData.SnId { + var RankInvite model.PlayerRankInvite + RankInvite.Name = playerData.Name + RankInvite.Score = inviteInfo.Score + RankInvite.SnId = inviteInfo.SnId + + // 头像模型ID + roleId := common.DefaultRoleId + if playerData.Roles != nil { + roleId = int(playerData.Roles.ModId) + } + RankInvite.ModId = int32(roleId) + + RankInvite.InviteNum = int32(inviteInfo.Num) + ret.List = append(ret.List, &RankInvite) + break + } + } + } + } + + return nil +} + +// GetInviteScoreByType 获取玩家排行信息 +func (b *BindScoreSvc) GetInviteScoreByType(req *model.FindPlayerRankInviteScoreArgs, ret *model.FindPlayerRankInviteScoreReply) error { + c := RankInviteCollection(req.Platform) + if c == nil { + return RankInviteColError + } + + ret.RankType = req.RankType + + var st int64 + switch req.RankType { + case 1: //todo 总榜 + return nil + case 2: // 本周榜 + st = common.GetWeekStartTs(time.Now().Unix()) + case 3: //todo 月榜 + return nil + case 4: // 上周榜 + st = common.GetWeekStartTs(time.Now().Unix()) + st -= 7 * 24 * 3600 + } + res := new(model.RankInvite) + err := c.Find(bson.M{"week": st, "snid": req.SnId}).One(res) + if err != nil && !errors.Is(err, mgo.ErrNotFound) { + logger.Logger.Warnf("GetInviteScoreByType error: %v", err) + return err + } + + type PInfo struct { + SnId int32 + Name string // 昵称 + Roles *model.RolePetInfo + } + + var retPlayer PInfo + u := PlayerDataCollection(req.Platform) + if u == nil { + return PlayerColError + } + err = u.Find(bson.M{"snid": req.SnId}).Select(bson.M{"snid": 1, "name": 1, "roles": 1}).One(&retPlayer) + if err != nil { + logger.Logger.Error("GetInviteScoreByType find player is error", err) + return err + } + + // 头像模型ID + roleId := common.DefaultRoleId + if retPlayer.Roles != nil { + roleId = int(retPlayer.Roles.ModId) + } + ret.Data = model.PlayerRankInvite{ + SnId: req.SnId, + Score: res.Score, + InviteNum: int32(res.Num), + Name: retPlayer.Name, + ModId: int32(roleId), + } + return nil +} + +// GetInviteList 获取邀请列表 +func (b *BindScoreSvc) GetInviteList(req *model.InviteLisArgs, ret *model.InviteListRet) error { + c := PlayerDataCollection(req.Platform) + if c == nil { + return InviteScoreColError + } + + type M struct { + Name string + Roles *model.RolePetInfo + CreateTime time.Time + SnId int32 + IScore int64 + IScoreTs time.Time + } + + var res []*M + + err := c.Find(bson.M{"psnid": req.SnId}).Select(bson.M{"snid": 1, "iscore": 1, "iscorets": 1, "name": 1, "createtime": 1, "roles": 1}).All(&res) + if err != nil { + logger.Logger.Errorf("GetInviteList error:%v", err) + return err + } + + now := time.Now().Local() + for _, v := range res { + if !common.InSameWeek(now, v.IScoreTs) { + v.IScore = 0 + } + roleId := common.DefaultRoleId + if v.Roles != nil && v.Roles.ModId != 0 { + roleId = int(v.Roles.ModId) + } + ret.List = append(ret.List, &model.InviteInfo{ + Name: v.Name, + SnId: v.SnId, + CreateTs: v.CreateTime.Unix(), + Score: v.IScore, + ModId: int32(roleId), + }) + } + sort.Slice(ret.List, func(i, j int) bool { + return ret.List[i].Score > ret.List[j].Score + }) + + return nil +} + +//todo 每周清理数据,绑定关系不能删除 + +var GlobalBindScoreSvc = new(BindScoreSvc) + +func init() { + rpc.Register(GlobalBindScoreSvc) +} diff --git a/dbproxy/svc/l_rankinvite.go b/dbproxy/svc/l_rankinvite.go new file mode 100644 index 0000000..36a30b6 --- /dev/null +++ b/dbproxy/svc/l_rankinvite.go @@ -0,0 +1,55 @@ +package svc + +import ( + "errors" + + "github.com/globalsign/mgo" + "github.com/globalsign/mgo/bson" + "mongo.games.com/goserver/core/logger" + + "mongo.games.com/game/common" + "mongo.games.com/game/dbproxy/mongo" + "mongo.games.com/game/model" +) + +var ( + RankInviteDBName = "log" + RankInviteCollName = "log_rankinvite" + RankInviteColError = errors.New("RankInvite collection open failed") +) + +func RankInviteCollection(plt string) *mongo.Collection { + s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, RankInviteDBName) + if s != nil { + c, first := s.DB().C(RankInviteCollName) + if first { + c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"num"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"-score"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"score"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"ts"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"week", "-score"}, Background: true, Sparse: true}) + } + return c + } + + return nil +} + +func SaveRankInvite(data *model.RankInvite) error { + c := RankInviteCollection(data.Platform) + if c == nil { + return RankInviteColError + } + + data.Week = common.GetWeekStartTs(data.Ts) + + _, err := c.Upsert(bson.M{"snid": data.SnId, "week": data.Week}, data) + if err != nil { + logger.Logger.Tracef("SaveRankInvite error:%v", err) + return err + } + return nil +} + +//todo 每周清理数据 diff --git a/dbproxy/svc/l_rankplayercoin.go b/dbproxy/svc/l_rankplayercoin.go index 5050030..d3da869 100644 --- a/dbproxy/svc/l_rankplayercoin.go +++ b/dbproxy/svc/l_rankplayercoin.go @@ -23,7 +23,7 @@ func RankPlayerCoinCollection(plt string) *mongo.Collection { c, first := s.DB().C(RankPlayerCoinCollName) if first { c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"coin"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"-coin"}, Background: true, Sparse: true}) } return c } diff --git a/dbproxy/svc/l_rankplayerlevel.go b/dbproxy/svc/l_rankplayerlevel.go index 006746f..42699ab 100644 --- a/dbproxy/svc/l_rankplayerlevel.go +++ b/dbproxy/svc/l_rankplayerlevel.go @@ -22,7 +22,7 @@ func RankPlayerLevelCollection(plt string) *mongo.Collection { c, first := s.DB().C(RankPlayerLevelCollName) if first { c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"exp"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"-exp"}, Background: true, Sparse: true}) } return c } diff --git a/dbproxy/svc/l_rankseasion.go b/dbproxy/svc/l_rankseasion.go index 3e8364f..1cdaf16 100644 --- a/dbproxy/svc/l_rankseasion.go +++ b/dbproxy/svc/l_rankseasion.go @@ -26,7 +26,7 @@ func RankSeasonCollection(plt string, rankType int32) *mongo.Collection { c, first := s.DB().C(fmt.Sprintf("%s_%d", RankSeasonCollName, rankType)) if first { c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"isrobot", "seasonid", "score"}, Background: true, Sparse: true}) + c.EnsureIndex(mgo.Index{Key: []string{"isrobot", "seasonid", "-score"}, Background: true, Sparse: true}) } return c } diff --git a/dbproxy/svc/u_invitecode.go b/dbproxy/svc/u_invitecode.go index d2f0beb..b303c58 100644 --- a/dbproxy/svc/u_invitecode.go +++ b/dbproxy/svc/u_invitecode.go @@ -21,7 +21,7 @@ import ( var ( InviteCodeDBName = "user" - InviteCodeCollName = "user_invitecode" + InviteCodeCollName = "user_icode" InviteCodeColError = errors.New("InviteCode collection open failed") InviteCodeMutex = sync.Mutex{} ) @@ -105,6 +105,19 @@ func (i *InviteCodeSvc) GetSnIdByCode(req *model.InviteSnIdReq, ret *model.Invit return nil } +func GetCodeBySnId(platform string, snid int32) (string, error) { + c := InviteCodeCollection(platform) + if c == nil { + return "", InviteCodeColError + } + col := new(model.InviteCode) + err := c.Find(bson.M{"snid": snid}).One(col) + if err != nil && !errors.Is(err, mgo.ErrNotFound) { + return "", err + } + return col.Code, err +} + func init() { rpc.Register(new(InviteCodeSvc)) } diff --git a/dbproxy/svc/u_invitescore.go b/dbproxy/svc/u_invitescore.go deleted file mode 100644 index c8eca1f..0000000 --- a/dbproxy/svc/u_invitescore.go +++ /dev/null @@ -1,429 +0,0 @@ -package svc - -import ( - "errors" - "net/rpc" - "time" - - "github.com/globalsign/mgo" - "github.com/globalsign/mgo/bson" - "mongo.games.com/goserver/core/logger" - - "mongo.games.com/game/common" - "mongo.games.com/game/dbproxy/mongo" - "mongo.games.com/game/model" - rankproto "mongo.games.com/game/protocol/rank" -) - -var ( - InviteScoreDBName = "user" - InviteScoreCollName = "user_invitescore" - InviteScoreColError = errors.New("InviteScore collection open failed") -) - -func InviteScoreCollection(plt string) *mongo.Collection { - s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, InviteScoreDBName) - if s != nil { - c, first := s.DB().C(InviteScoreCollName) - if first { - c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"invitesnid"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"tp"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"ts"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"-ts"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"weekindex"}, Background: true, Sparse: true}) - c.EnsureIndex(mgo.Index{Key: []string{"monthindex"}, Background: true, Sparse: true}) - } - return c - } - - return nil -} - -type BindScoreSvc struct { -} - -func (b *BindScoreSvc) GetInviteScore(req *model.InviteScoreReq, ret *model.InviteScoreRet) error { - c := InviteScoreCollection(req.Platform) - if c == nil { - return InviteScoreColError - } - - type M struct { - Score int64 - Money int64 - } - - var tc []M - err := c.Pipe([]bson.M{ - {"$match": bson.M{ - "invitesnid": req.SnId, - }}, - {"$group": bson.M{ - "_id": nil, - "score": bson.M{"$sum": "$score"}, - "money": bson.M{"$sum": "$money"}, - }}, - }).AllowDiskUse().All(&tc) - if err != nil { - logger.Logger.Error("GetInviteScore AllowDiskUse is error", err) - return err - } - - if len(tc) > 0 { - ret.Score = tc[0].Score - ret.Money = tc[0].Money - c := PlayerDataCollection(req.Platform) - if c == nil { - return PlayerColError - } - err = c.Update(bson.M{"snid": req.SnId}, bson.M{"$set": bson.M{"invitescore": tc[0].Score}}) - if err != nil { - logger.Logger.Error("GetInviteScore update invitescore is error", err) - return err - } - } - - tc = tc[:0] - err = c.Pipe([]bson.M{ - {"$match": bson.M{ - "invitesnid": req.SnId, - "score": bson.M{"$gt": 0}, - }}, - {"$group": bson.M{ - "_id": nil, - "score": bson.M{"$sum": "$score"}, - }}, - }).AllowDiskUse().All(&tc) - if err != nil { - logger.Logger.Error("GetInviteScore z AllowDiskUse is error", err) - return err - } - - if len(tc) > 0 { - ret.ZScore = tc[0].Score - } - - return nil -} - -func (b *BindScoreSvc) SaveInviteScore(req *model.InviteScore, ret *bool) error { - logger.Logger.Tracef("SaveInviteScore req:%+v", *req) - if req.InviteSnId == 0 { - return nil - } - req.Id = bson.NewObjectId() - u := PlayerDataCollection(req.Platform) - if u == nil { - return PlayerColError - } - - type M struct { - InviteScore int64 - } - r := new(M) - err := u.Find(bson.M{"snid": req.InviteSnId}).Select(bson.M{"invitescore": 1}).One(r) - if err != nil && !errors.Is(err, mgo.ErrNotFound) { - logger.Logger.Errorf("GetInviteScore Find error:%v", err) - return err - } - - if req.Score < 0 { - if -req.Score > r.InviteScore { - req.Score = -r.InviteScore - } - } - - c := InviteScoreCollection(req.Platform) - if c == nil { - return InviteScoreColError - } - - ts := req.Ts - if req.Tp != common.InviteScoreTypeBind { - a := &model.InviteScore{} - err = c.Find(bson.M{"snid": req.SnId, "tp": common.InviteScoreTypeBind}).One(a) - if err != nil && !errors.Is(err, mgo.ErrNotFound) { - logger.Logger.Errorf("GetInviteScore Find BindTime error:%v", err) - return err - } - ts = a.Ts - } - - bindTime := time.Unix(0, ts).Local() - year, month, day := bindTime.Date() - today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) - // 本周起始日期(周日) - req.WeekIndex = today.AddDate(0, 0, -int(today.Weekday())).Unix() - // 本月起始日期 - req.MonthIndex = time.Date(year, month, 1, 0, 0, 0, 0, time.Local).Unix() - - err = c.Insert(req) - if err != nil { - logger.Logger.Errorf("SaveInviteScore Insert error:%v", err) - return err - } - - err = u.Update(bson.M{"snid": req.InviteSnId}, bson.M{"$inc": bson.M{"invitescore": req.Score}}) - if err != nil { - logger.Logger.Errorf("inc InviteScore error:%v", err) - return err - } - - *ret = true - return nil -} - -func (b *BindScoreSvc) GetInviteRankList(req *model.FindPlayerRankInviteListArgs, ret *model.FindPlayerRankInviteListReply) error { - c := InviteScoreCollection(req.Platform) - if c == nil { - return InviteScoreColError - } - - matchParam := bson.M{ - "score": bson.M{"$gt": 0}, - } - now := time.Now().Local() - startTime := now.AddDate(-100, 0, 0).UnixNano() - year, month, day := now.Date() - today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) - if req.RankType == int32(rankproto.RankInvite_InviteType_Week) { - // 本周起始日期(周日) - matchParam["weekindex"] = today.AddDate(0, 0, -int(today.Weekday())).Unix() - } else if req.RankType == int32(rankproto.RankInvite_InviteType_Month) { - // 本月起始日期 - matchParam["monthindex"] = time.Date(year, month, 1, 0, 0, 0, 0, time.Local).Unix() - } else { - matchParam["ts"] = bson.M{"$gte": startTime, "$lte": now.UnixNano()} - } - - type M struct { - InviteSnId int32 // 邀请人id - Score int64 // 积分 - } - - var tc []M - err := c.Pipe([]bson.M{ - {"$match": matchParam}, - {"$group": bson.M{ - "_id": bson.M{ - "invitesnid": "$invitesnid", - }, - "invitesnid": bson.M{"$first": "$invitesnid"}, - "score": bson.M{"$sum": "$score"}, - }}, - { - "$sort": bson.M{"ts": -1}, - }, - { - "$sort": bson.M{"score": -1}, - }, - { - "$limit": model.GameParamData.RankInviteMaxNum, - }, - }).AllowDiskUse().All(&tc) - if err != nil { - logger.Logger.Error("GetInviteRankList z AllowDiskUse is error", err) - return err - } - - var conds []int32 - if len(tc) > 0 { - - type PInfo struct { - SnId int32 - Name string // 昵称 - Roles *model.RolePetInfo - } - - var retPlayerList []PInfo - - cplayerdata := PlayerDataCollection(req.Platform) - if cplayerdata == nil { - return err - } - - for i := 0; i < len(tc); i++ { - conds = append(conds, tc[i].InviteSnId) - } - - selecter := bson.M{"snid": bson.M{"$in": conds}} - //err = cplayerdata.Find(selecter).Select(bson.M{"snid": 1, "name": 1, "roles": 1}).All(&retPlayerList) - err = cplayerdata.Find(selecter).Select(bson.M{"snid": 1, "name": 1, "roles": 1}).All(&retPlayerList) - if err != nil { - logger.Logger.Error("svc.FindInvitePlayerList is error", err) - return nil - } - - for _, inviteInfo := range tc { - for _, playerData := range retPlayerList { - if inviteInfo.InviteSnId == playerData.SnId { - var RankInvite model.PlayerRankInvite - RankInvite.Name = playerData.Name - RankInvite.Score = inviteInfo.Score - RankInvite.SnId = inviteInfo.InviteSnId - - // 头像模型ID - roleId := common.DefaultRoleId - if playerData.Roles != nil { - roleId = int(playerData.Roles.ModId) - } - RankInvite.ModId = int32(roleId) - - RankInvite.InviteNum, _ = GetInviteNum(req.Platform, inviteInfo.InviteSnId, req.RankType) - ret.List = append(ret.List, &RankInvite) - - break - } - } - } - ret.RankType = req.RankType - } - - return nil -} - -func (b *BindScoreSvc) GetInviteScoreByType(req *model.FindPlayerRankInviteScoreArgs, ret *model.FindPlayerRankInviteScoreReply) error { - c := InviteScoreCollection(req.Platform) - if c == nil { - return InviteScoreColError - } - - matchParam := bson.M{ - "invitesnid": req.SnId, - "score": bson.M{"$gt": 0}, - } - now := time.Now().Local() - startTime := now.AddDate(-100, 0, 0).UnixNano() - year, month, day := now.Date() - today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) - if req.RankType == int32(rankproto.RankInvite_InviteType_Week) { - // 本周起始日期(周日) - matchParam["weekindex"] = today.AddDate(0, 0, -int(today.Weekday())).Unix() - } else if req.RankType == int32(rankproto.RankInvite_InviteType_Month) { - // 本月起始日期 - matchParam["monthindex"] = time.Date(year, month, 1, 0, 0, 0, 0, time.Local).Unix() - } else { - matchParam["ts"] = bson.M{"$gte": startTime, "$lte": now.UnixNano()} - } - - type M struct { - InviteSnId int32 // 邀请人id - Score int64 // 积分 - } - - var tc []M - err := c.Pipe([]bson.M{ - {"$match": matchParam}, - {"$group": bson.M{ - "_id": nil, - "invitesnid": bson.M{"$first": "$invitesnid"}, - "score": bson.M{"$sum": "$score"}, - }}, - }).AllowDiskUse().All(&tc) - if err != nil { - logger.Logger.Error("GetInviteScoreByType z AllowDiskUse is error", err) - return err - } - - type PInfo struct { - SnId int32 - Name string // 昵称 - Roles *model.RolePetInfo - } - - var retPlayer PInfo - u := PlayerDataCollection(req.Platform) - if u == nil { - return err - } - err = u.Find(bson.M{"snid": req.SnId}).Select(bson.M{"snid": 1, "name": 1, "roles": 1}).One(&retPlayer) - if err != nil { - logger.Logger.Error("svc.GetInviteScoreByType is error", err) - return nil - } - - var rankInvite model.PlayerRankInvite - rankInvite.Name = retPlayer.Name - if len(tc) > 0 { - rankInvite.Score = tc[0].Score - } - rankInvite.SnId = req.SnId - // 头像模型ID - roleId := common.DefaultRoleId - if retPlayer.Roles != nil { - roleId = int(retPlayer.Roles.ModId) - } - rankInvite.ModId = int32(roleId) - rankInvite.InviteNum, _ = GetInviteNum(req.Platform, req.SnId, req.RankType) - ret.Data = rankInvite - - ret.RankType = req.RankType - - return nil -} - -func (b *BindScoreSvc) GetInviteList(req *model.InviteLisArgs, ret *model.InviteListRet) error { - c := InviteScoreCollection(req.Platform) - if c == nil { - return InviteScoreColError - } - - type M struct { - SnId int32 - Score int64 - } - - var tc []M - err := c.Pipe([]bson.M{ - {"$match": bson.M{ - "invitesnid": req.SnId, - }}, - {"$group": bson.M{ - "_id": bson.M{ - "snid": "$snid", - }, - "snid": bson.M{"$first": "$snid"}, - "score": bson.M{"$sum": "$score"}, - }}, - { - "$sort": bson.M{ - "score": -1, - }, - }, - }).AllowDiskUse().All(&tc) - if err != nil { - logger.Logger.Error("GetInviteList AllowDiskUse is error", err) - return err - } - - u := PlayerDataCollection(req.Platform) - if u == nil { - return PlayerColError - } - - for _, v := range tc { - d := &model.PlayerBaseInfo2{} - err = u.Find(bson.M{"snid": v.SnId}).Select(bson.M{"name": 1, "createtime": 1, "roles": 1}).One(d) - if err != nil { - logger.Logger.Warnf("GetInviteList Find player is error:%v", err) - } - roleId := common.DefaultRoleId - if d.Roles != nil && d.Roles.ModId != 0 { - roleId = int(d.Roles.ModId) - } - ret.List = append(ret.List, &model.InviteInfo{ - Name: d.Name, - SnId: v.SnId, - CreateTs: d.CreateTime.Unix(), - Score: v.Score, - ModId: int32(roleId), - }) - } - - return nil -} - -func init() { - rpc.Register(new(BindScoreSvc)) -} diff --git a/dbproxy/svc/u_player.go b/dbproxy/svc/u_player.go index 360a28c..b590a2e 100644 --- a/dbproxy/svc/u_player.go +++ b/dbproxy/svc/u_player.go @@ -21,7 +21,6 @@ import ( "mongo.games.com/game/common" "mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/model" - rankproto "mongo.games.com/game/protocol/rank" ) var ( @@ -40,12 +39,12 @@ func PlayerDataCollection(plt string) *mongo.Collection { c_playerdata.EnsureIndex(mgo.Index{Key: []string{"snid"}, Unique: true, Background: true, Sparse: true}) c_playerdata.EnsureIndex(mgo.Index{Key: []string{"channel"}, Background: true, Sparse: true}) c_playerdata.EnsureIndex(mgo.Index{Key: []string{"tel"}, Background: true, Sparse: true}) - c_playerdata.EnsureIndex(mgo.Index{Key: []string{"invitecode"}, Background: true, Sparse: true}) - c_playerdata.EnsureIndex(mgo.Index{Key: []string{"invitesnid"}, Background: true, Sparse: true}) c_playerdata.EnsureIndex(mgo.Index{Key: []string{"name"}, Background: true, Sparse: true}) c_playerdata.EnsureIndex(mgo.Index{Key: []string{"createtime"}, Background: true, Sparse: true}) c_playerdata.EnsureIndex(mgo.Index{Key: []string{"-createtime"}, Background: true, Sparse: true}) - c_playerdata.EnsureIndex(mgo.Index{Key: []string{"othercode"}, Background: true, Sparse: true}) + c_playerdata.EnsureIndex(mgo.Index{Key: []string{"icode"}, Background: true, Sparse: true}) + c_playerdata.EnsureIndex(mgo.Index{Key: []string{"psnid"}, Background: true, Sparse: true}) + c_playerdata.EnsureIndex(mgo.Index{Key: []string{"pcode"}, Background: true, Sparse: true}) } return c_playerdata } @@ -247,7 +246,7 @@ func (svc *PlayerDataSvc) CreatePlayerDataByThird(args *model.CreatePlayer, ret func (svc *PlayerDataSvc) CreatePlayerDataOnRegister(args *model.PlayerDataArg, ret *model.PlayerDataRet) (err error) { cplayerdata := PlayerDataCollection(args.Plt) if cplayerdata == nil { - return + return PlayerColError } acc := args.AccId pd := &model.PlayerData{} @@ -267,13 +266,13 @@ func (svc *PlayerDataSvc) CreatePlayerDataOnRegister(args *model.PlayerDataArg, if !bson.IsObjectIdHex(acc) { logger.Logger.Warn("NewPlayer failed: acc is illeage ", acc) - return + return errors.New("acc is illeage") } var a *model.Account a, err = _AccountSvc.getAccount(args.Plt, args.AccId) if err != nil { logger.Logger.Warnf("_AccountSvc.getAccount(%v,%v) failed:%v", args.Plt, args.AccId, err) - return + return err } id := a.SnId @@ -281,7 +280,7 @@ func (svc *PlayerDataSvc) CreatePlayerDataOnRegister(args *model.PlayerDataArg, id, err = GetOnePlayerIdFromBucket() if err != nil { logger.Logger.Warn("NewPlayer failed:", err) - return + return err } } @@ -298,21 +297,26 @@ func (svc *PlayerDataSvc) CreatePlayerDataOnRegister(args *model.PlayerDataArg, dataParams.Ip, int64(args.AddCoin), "", a.DeviceInfo, a.TagKey, a.AccountType) pd.HeadUrl = args.HeadUrl if pd != nil { + if pd.ICode == "" { + code, _ := GetInviteCode(pd.Platform, pd.SnId) + pd.ICode = code + pd.IScoreTs = time.Now() + } err = cplayerdata.Insert(pd) if err != nil { logger.Logger.Trace("CreatePlayerDataOnRegister Insert failed:", err) - return + return err } ret.Pd = pd ret.IsNew = true - return + return nil } - return + return nil } if CorrectData(pd) { } ret.Pd = pd - return + return nil } func (svc *PlayerDataSvc) GetPlayerDataBySnId(args *model.GetPlayerDataBySnIdArgs, ret *model.PlayerDataRet) (err error) { @@ -321,6 +325,30 @@ func (svc *PlayerDataSvc) GetPlayerDataBySnId(args *model.GetPlayerDataBySnIdArg return nil } + f := func(p *model.PlayerData) { + // 更新一下绑定关系 + if p.PSnId > 0 && p.PCode != "" { + return + } + c := InviteScoreCollection(args.Plt) + if c == nil { + return + } + res := new(model.InviteScore) + c.Find(bson.M{"snid": args.SnId, "tp": common.InviteScoreTypeBind}).One(res) + param := bson.M{} + if res.InviteSnId > 0 { + p.PSnId = res.InviteSnId + param["psnid"] = res.InviteSnId + code, _ := GetCodeBySnId(args.Plt, res.InviteSnId) + if code != "" { + p.PCode = code + param["pcode"] = code + } + cplayerdata.Update(bson.M{"snid": args.SnId}, bson.M{"$set": param}) + } + } + var code string err = cplayerdata.Find(bson.M{"snid": args.SnId}).One(&ret.Pd) if err != nil { @@ -346,15 +374,16 @@ func (svc *PlayerDataSvc) GetPlayerDataBySnId(args *model.GetPlayerDataBySnIdArg pd := model.NewPlayerData(a.AccountId.Hex(), name, a.SnId, a.Channel, a.Platform, a.Params, a.Tel, a.PackegeTag, dataParams.Ip, 0, dataParams.UnionId, a.DeviceInfo, a.TagKey, a.AccountType) if pd != nil { + if pd.ICode == "" { + code, _ = GetInviteCode(pd.Platform, pd.SnId) + pd.ICode = code + pd.IScoreTs = time.Now() + } err = cplayerdata.Insert(pd) if err != nil { logger.Logger.Errorf("GetPlayerDataBySnId Insert err:%v acc:%v snid:%v", err, a.AccountId.Hex(), a.SnId) return err } - if pd.InviteCode == "" { - code, err = GetInviteCode(pd.Platform, pd.SnId) - pd.InviteCode = code - } ret.IsNew = true ret.Pd = pd return nil @@ -362,10 +391,13 @@ func (svc *PlayerDataSvc) GetPlayerDataBySnId(args *model.GetPlayerDataBySnIdArg } return err } - if ret.Pd.InviteCode == "" { - code, err = GetInviteCode(ret.Pd.Platform, ret.Pd.SnId) - ret.Pd.InviteCode = code + if ret.Pd.ICode == "" { + code, _ = GetInviteCode(ret.Pd.Platform, ret.Pd.SnId) + ret.Pd.ICode = code + ret.Pd.IScoreTs = time.Now() + cplayerdata.Update(bson.M{"snid": args.SnId}, bson.M{"icode": code, "iscorets": ret.Pd.IScoreTs}) } + f(ret.Pd) if args.CorrectData && ret.Pd != nil { CorrectData(ret.Pd) } @@ -459,6 +491,12 @@ func SavePlayerData(pd *model.PlayerData) (err error) { } if pd != nil { model.RecalcuPlayerCheckSum(pd) + //todo 排除字段更新,有没有更新好的方法 + pd.IScore, pd.INum, pd.IMoney, pd.IScoreTs, err = GetInviteData(pd.Platform, pd.SnId) + if err != nil { + logger.Logger.Errorf("model.SavePlayerData GetInviteData %v err:%v", pd.SnId, err) + return + } _, err = cplayerdata.Upsert(bson.M{"_id": pd.Id}, pd) if err != nil { logger.Logger.Errorf("model.SavePlayerData %v err:%v", pd.SnId, err) @@ -1495,87 +1533,126 @@ func (svc *PlayerDataSvc) GetPlayerInviteSnid(req *model.PlayerIsExistBySnIdArgs } type t struct { - InviteSnId int32 + PSnId int32 } res := &t{} - err := c.Find(bson.M{"snid": req.SnId}).Select(bson.M{"invitesnid": 1}).One(res) + err := c.Find(bson.M{"snid": req.SnId}).Select(bson.M{"psnid": 1}).One(res) if err != nil && errors.Is(err, mgo.ErrNotFound) { return err } - *resp = res.InviteSnId + *resp = res.PSnId return nil } -func (svc *PlayerDataSvc) GetInviteNum(req *model.PlayerIsExistBySnIdArgs, resp *int32) error { - n, err := GetInviteNum(req.Plt, req.SnId, int32(rankproto.RankInvite_InviteType_Total)) - if err != nil { - return err - } - *resp = n - return nil -} - -func GetInviteNum(platform string, snId int32, rankType int32) (int32, error) { - var err error - var n int - switch rankType { - case int32(rankproto.RankInvite_InviteType_Week), int32(rankproto.RankInvite_InviteType_Month): - matchParam := bson.M{ - "invitesnid": snId, - "tp": common.InviteScoreTypeBind, - } - now := time.Now().Local() - year, month, day := now.Date() - today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) - if rankType == int32(rankproto.RankInvite_InviteType_Week) { - // 本周起始日期(周日) - matchParam["weekindex"] = today.AddDate(0, 0, -int(today.Weekday())).Unix() - } else if rankType == int32(rankproto.RankInvite_InviteType_Month) { - // 本月起始日期 - matchParam["monthindex"] = time.Date(year, month, 1, 0, 0, 0, 0, time.Local).Unix() - } - c := InviteScoreCollection(platform) - if c == nil { - return 0, InviteScoreColError - } - n, err = c.Find(matchParam).Count() - if err != nil { - return 0, err - } - - default: - c := PlayerDataCollection(platform) - if c == nil { - return 0, PlayerColError - } - n, err = c.Find(bson.M{"invitesnid": snId}).Count() - if err != nil { - return 0, err - } - } - - return int32(n), nil -} - -func BindInviteSnId(platform string, snId, inviteSnId int32, ts int64) error { +func BindInviteSnId(platform string, snId, inviteSnId int32, code string) error { c := PlayerDataCollection(platform) if c == nil { return PlayerColError } - err := c.Update(bson.M{"snid": snId}, bson.M{"$set": bson.M{"invitesnid": inviteSnId}}) + err := c.Update(bson.M{"snid": snId}, bson.M{"$set": bson.M{"psnid": inviteSnId, "pcode": code}}) if err != nil { logger.Logger.Error("BindInviteSnId error ", err) return err } + err = c.Update(bson.M{"snid": inviteSnId}, bson.M{"$inc": bson.D{{"inum", 1}}}) + if err != nil { + logger.Logger.Error("BindInviteSnId inc error ", err) + return err + } + return nil +} + +func ClearInviteScore(platform string, snId int32, now time.Time) error { + c := PlayerDataCollection(platform) + if c == nil { + return PlayerColError + } + + err := c.Update(bson.M{"snid": snId}, bson.M{"$set": bson.M{"iscore": 0, "iscorets": now}}) + if err != nil { + logger.Logger.Error("ClearInviteScore error ", err) + return err + } return nil } +func AddInviteScore(platform string, snId int32, num, money int64, now time.Time) error { + c := PlayerDataCollection(platform) + if c == nil { + return PlayerColError + } + + err := c.Update(bson.M{"snid": snId}, bson.M{"$inc": bson.M{"iscore": num, "imoney": money}, "$set": bson.M{"iscorets": now}}) + if err != nil { + logger.Logger.Error("AddInviteScore error ", err) + return err + } + + // 更新排行榜 + type m struct { + IScore int64 + INum int64 + } + res := &m{} + err = c.Find(bson.M{"snid": snId}).Select(bson.M{"iscore": 1, "inum": 1}).One(res) + if err != nil { + logger.Logger.Error("AddInviteScore find error ", err) + return err + } + + SaveRankInvite(&model.RankInvite{ + Platform: platform, + SnId: snId, + Num: res.INum, + Score: res.IScore, + Ts: now.Unix(), + }) + + return nil +} + +func GetInviteData(platform string, snId int32) (iscore, inum, imoney int64, iscorets time.Time, err error) { + c := PlayerDataCollection(platform) + if c == nil { + err = PlayerColError + return + } + type M struct { + IScore, Imoney, Inum int64 + IScoreTs time.Time + } + res := &M{} + err = c.Find(bson.M{"snid": snId}).Select(bson.M{"iscore": 1, "inum": 1, "imoney": 1, "iscorets": 1}).One(res) + if err != nil && !errors.Is(err, mgo.ErrNotFound) { + return + } + res.IScoreTs = res.IScoreTs.Local() + return res.IScore, res.Inum, res.Imoney, res.IScoreTs, nil +} + +func GetPSnId(platform string, snId int32) (psnId int32, err error) { + c := PlayerDataCollection(platform) + if c == nil { + err = PlayerColError + return + } + type M struct { + PSnId int32 + } + res := &M{} + err = c.Find(bson.M{"snid": snId}).Select(bson.M{"psnid": 1}).One(res) + if err != nil && !errors.Is(err, mgo.ErrNotFound) { + return 0, err + } + return res.PSnId, nil +} + func CorrectData(pd *model.PlayerData) bool { //var coinTotal int64 dirty := false diff --git a/etcd/keyconf.go b/etcd/keyconf.go index 51c1434..1ddc523 100644 --- a/etcd/keyconf.go +++ b/etcd/keyconf.go @@ -31,4 +31,5 @@ const ( ETCDKEY_GAME_CONFIG = "/game/plt/gameconfig/" // 游戏管理/全局配置 ETCDKEY_ACT_PHONELOTTERY = "/game/act_phoneLottery" ETCDKEY_ChannelSwitch = "/game/channel/switch" // 渠道开关 + ETCDKEY_ACT_Invite = "/game/act_invite" // 邀请活动配置 ) diff --git a/model/baginfo.go b/model/baginfo.go index 84e994b..6591384 100644 --- a/model/baginfo.go +++ b/model/baginfo.go @@ -29,9 +29,9 @@ func NewBagInfo(sid int32, plt string) *BagInfo { return &BagInfo{BagId: bson.NewObjectId(), SnId: sid, Platform: plt, BagItem: make(map[int32]*Item)} } -func GetBagInfo(sid int32, plt string) *BagInfo { +func GetBagInfo(sid int32, plt string) (*BagInfo, error) { if rpcCli == nil { - return nil + return nil, ErrRPClientNoConn } ret := &BagInfo{} args := &GetBagInfoArgs{ @@ -41,9 +41,9 @@ func GetBagInfo(sid int32, plt string) *BagInfo { err := rpcCli.CallWithTimeout("BagSvc.GetBagItem", args, ret, time.Second*30) if err != nil { logger.Logger.Error("GetBagInfo err:%v SnId:%v ", err, args.SnId) - return nil + return nil, err } - return ret + return ret, nil } func UpBagItem(args *BagInfo) error { diff --git a/model/config.go b/model/config.go index a2523ac..547b542 100644 --- a/model/config.go +++ b/model/config.go @@ -117,6 +117,8 @@ type AllConfig struct { ShopInfos map[int32]*ShopInfo // 商品id:商品信息 // 渠道开关 ChannelSwitch map[int32]*webapi.ChannelSwitchConfig + // 邀请活动 + *webapi.ActInviteConfig } type GlobalConfig struct { diff --git a/model/invitecode.go b/model/invitecode.go index 4ab55c8..b0dfde0 100644 --- a/model/invitecode.go +++ b/model/invitecode.go @@ -24,6 +24,7 @@ type InviteSnIdRet struct { SnId int32 } +// GetSnIdByCode 根据邀请码获取被邀请人id func GetSnIdByCode(platform string, code string) (int32, error) { if rpcCli == nil { logger.Logger.Warnf("rpcCli is nil") @@ -47,81 +48,30 @@ func GetSnIdByCode(platform string, code string) (int32, error) { // InviteScore 积分记录 type InviteScore struct { Id bson.ObjectId `bson:"_id"` - Platform string // 平台id + Platform string `bson:"-"` // 平台id SnId int32 // 被邀请人id InviteSnId int32 // 邀请人id - Tp int32 // 积分类型 common.InviteScoreType~ + Tp int32 // 积分类型 common.InviteScoreType ~ Score int64 // 积分 Ts int64 // 时间戳 Money int64 // 充值金额 - WeekIndex int64 // 所在周 - MonthIndex int64 // 所在月 + Rate []int64 // 返佣比例 } -type InviteScoreReq struct { +// 邀请消息 +const EvtInvite = "evt_invite" // 绑定邀请人 worldsrv -> dbproxy +type EvtInviteMsg struct { + InviteScore + RechargeScore int64 // 充值成功积分 +} + +const EvtInviteAck = "evt_invite_ack" // 绑定邀请人 dbproxy -> worldsrv +type EvtInviteAckMsg struct { Platform string - SnId int32 -} - -type InviteScoreRet struct { - Score int64 // 包含扣积分 - ZScore int64 // 只包含大于0的积分 - Money int64 // 充值金额 -} - -// GetInviteScore 查询总积分 -// 下级玩家所有积分 -// 返回 包含扣积分,只包含大于0的积分,充值金额 -func GetInviteScore(plt string, snid int32) (int64, int64, int64, error) { - if rpcCli == nil { - logger.Logger.Warnf("rpcCli is nil") - return 0, 0, 0, errors.New("rpcCli is nil") - } - - req := &InviteScoreReq{ - Platform: plt, - SnId: snid, - } - ret := &InviteScoreRet{} - err := rpcCli.CallWithTimeout("BindScoreSvc.GetInviteScore", req, ret, time.Second*30) - if err != nil { - logger.Logger.Warnf("GetInviteScore err:%v", err) - return 0, 0, 0, err - } - - return ret.Score, ret.ZScore, ret.Money, err -} - -// SaveInviteScore 保存积分变更记录 -func SaveInviteScore(b *InviteScore) error { - if rpcCli == nil { - logger.Logger.Warnf("rpcCli is nil") - return errors.New("rpcCli is nil") - } - - ret := false - err := rpcCli.CallWithTimeout("BindScoreSvc.SaveInviteScore", b, &ret, time.Second*30) - if err != nil { - logger.Logger.Warnf("SaveInviteScore err:%v", err) - return err - } - return nil -} - -const EvtBindInvite = "evt_bind_invite" -const AckBindNum = "ack_bind_num" -const EvtInviteScore = "evt_invitescore" - -type BindInvite struct { - Platform string - SnId int32 - InviteSnId int32 - Ts int64 -} - -type BindNum struct { - SnId int32 - Num int32 + Snid int32 + Score int64 + Money int64 + Num int64 } type InviteLisArgs struct { @@ -141,6 +91,7 @@ type InviteListRet struct { List []*InviteInfo } +// GetInviteList 获取邀请人列表 func GetInviteList(platform string, snid int32) ([]*InviteInfo, error) { if rpcCli == nil { logger.Logger.Error("model.GetInviteList rpcCli == nil") @@ -159,3 +110,12 @@ func GetInviteList(platform string, snid int32) ([]*InviteInfo, error) { } return ret.List, nil } + +type RankInvite struct { + Platform string `bson:"-"` + SnId int32 + Num int64 + Score int64 + Ts int64 + Week int64 +} diff --git a/model/player.go b/model/player.go index ce2a28f..e9466eb 100644 --- a/model/player.go +++ b/model/player.go @@ -449,16 +449,19 @@ type PlayerData struct { LotteryCount int32 //抽奖次数 InitLotteryStatus bool //抽奖初始化状态 Delete int // 是否删除 - InviteCode string // 邀请码 - InviteSnId int32 // 邀请人 - InviteScore int64 // 邀请积分 - OtherCode string // 绑定的邀请码 WeekCardTime map[int32]int64 // 周卡结束时间 key:类型 value:结束时间 WeekCardAward map[int32]bool // 周卡奖励领取状态false-未领取,true已领取 ItemRecExpireTime int64 // 记牌器到期时间 RequestAddFriend map[int32]int64 // 玩家申请好友记录 IsTakeExpireItem bool // 是否领取 LastChannel string // 最后包类型 + ICode string // 邀请码 + IScore int64 // 邀请积分 + PSnId int32 // 邀请人 + PCode string // 绑定的邀请码 + INum int64 // 邀请人数 + IMoney int64 // 邀请人充值金额 + IScoreTs time.Time // 邀请积分更新时间 } // 七日签到数据 @@ -666,9 +669,9 @@ func ConvertPlayerDataToWebData(param *WebPlayerDataParam) *webapi.PlayerData { pdfw.VipExp = param.VipExp pdfw.ShopId = common.IntSliceToInt32(param.ShopID) pdfw.Delete = int64(param.Delete) - pdfw.InviteCode = param.InviteCode - pdfw.InviteSnId = param.InviteSnId - pdfw.InviteScore = param.InviteScore + pdfw.InviteCode = param.ICode + pdfw.InviteSnId = param.PSnId + pdfw.InviteScore = param.IScore pdfw.Channel = param.Channel pdfw.LastChannel = param.LastChannel for _, v := range param.Items { @@ -1072,6 +1075,7 @@ func GetPlayerDataBySnId(plt string, snid int32, correctData, createIfNotExist b ret.Pd.CreateTime = ret.Pd.CreateTime.Local() ret.Pd.LastLoginTime = ret.Pd.LastLoginTime.Local() ret.Pd.LastLogoutTime = ret.Pd.LastLogoutTime.Local() + ret.Pd.IScoreTs = ret.Pd.IScoreTs.Local() return ret.Pd, ret.IsNew } @@ -2696,23 +2700,6 @@ func GetPlayerInviteSnid(plt string, snid int32) (int32, error) { return ret, nil } -func GetInviteNum(plt string, snid int32) (int32, error) { - if rpcCli == nil { - return 0, errors.New("rpcCli is nil") - } - args := &PlayerIsExistBySnIdArgs{ - Plt: plt, - SnId: snid, - } - var ret int32 - err := rpcCli.CallWithTimeout("PlayerDataSvc.GetInviteNum", args, &ret, time.Second*30) - if err != nil { - logger.Logger.Error("model.GetPlayerInviteSnid error ", err) - return 0, err - } - return ret, nil -} - // 所有游戏都要加上当天统计数据 func (this *PlayerData) GetDaliyGameData(id int) (*PlayerGameStatics, *PlayerGameStatics) { gameId := strconv.Itoa(id) diff --git a/model/rank.go b/model/rank.go index 69841e2..95213d0 100644 --- a/model/rank.go +++ b/model/rank.go @@ -131,11 +131,11 @@ type PlayerRankInvite struct { type FindPlayerRankInviteListArgs struct { Platform string - RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 + RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 上周榜 } type FindPlayerRankInviteListReply struct { - RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 + RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 上周榜 List []*PlayerRankInvite } @@ -156,12 +156,12 @@ func FindPlayerRankInviteList(args *FindPlayerRankInviteListArgs) (*FindPlayerRa type FindPlayerRankInviteScoreArgs struct { Platform string - RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 + RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 上周榜 SnId int32 } type FindPlayerRankInviteScoreReply struct { - RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 + RankType int32 // 邀请榜时间类型: 总榜 周榜 月榜 上周榜 Data PlayerRankInvite } diff --git a/mq/keyconf.go b/mq/keyconf.go index 827af8b..7183046 100644 --- a/mq/keyconf.go +++ b/mq/keyconf.go @@ -5,7 +5,6 @@ const ( BackBankrupt = "log_bankrupt" BackClientLog = "log_clientlog_mysql" BackGameRecord = "evt_gamerec" - BackInviteScore = "evt_invitescore" BackLogin = "evt_login" BackOnline = "evt_online" BackPhoneLottery = "evt_phonelottery" diff --git a/protocol/rank/rank.pb.go b/protocol/rank/rank.pb.go index db71dcd..00a0c60 100644 --- a/protocol/rank/rank.pb.go +++ b/protocol/rank/rank.pb.go @@ -108,11 +108,12 @@ func (Rank) EnumDescriptor() ([]byte, []int) { type RankInvite int32 const ( - RankInvite_InviteType_None RankInvite = 0 - RankInvite_InviteType_Total RankInvite = 1 //总榜 - RankInvite_InviteType_Week RankInvite = 2 //周榜 - RankInvite_InviteType_Month RankInvite = 3 //月榜 - RankInvite_InviteType_Max RankInvite = 4 + RankInvite_InviteType_None RankInvite = 0 + RankInvite_InviteType_Total RankInvite = 1 //总榜 + RankInvite_InviteType_Week RankInvite = 2 //周榜 + RankInvite_InviteType_Month RankInvite = 3 //月榜 + RankInvite_InviteType_UpWeek RankInvite = 4 //上周榜 + RankInvite_InviteType_Max RankInvite = 5 ) // Enum value maps for RankInvite. @@ -122,14 +123,16 @@ var ( 1: "InviteType_Total", 2: "InviteType_Week", 3: "InviteType_Month", - 4: "InviteType_Max", + 4: "InviteType_UpWeek", + 5: "InviteType_Max", } RankInvite_value = map[string]int32{ - "InviteType_None": 0, - "InviteType_Total": 1, - "InviteType_Week": 2, - "InviteType_Month": 3, - "InviteType_Max": 4, + "InviteType_None": 0, + "InviteType_Total": 1, + "InviteType_Week": 2, + "InviteType_Month": 3, + "InviteType_UpWeek": 4, + "InviteType_Max": 5, } ) @@ -1730,17 +1733,18 @@ var file_rank_proto_rawDesc = []byte{ 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, 0x2a, 0x76, 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, 0x12, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x5f, 0x4d, 0x61, 0x78, 0x10, 0x04, 0x42, 0x24, 0x5a, 0x22, 0x6d, 0x6f, 0x6e, - 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x72, 0x61, 0x6e, 0x6b, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 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 ( diff --git a/protocol/rank/rank.proto b/protocol/rank/rank.proto index eb0177a..f879d5d 100644 --- a/protocol/rank/rank.proto +++ b/protocol/rank/rank.proto @@ -110,7 +110,8 @@ enum RankInvite{ InviteType_Total = 1;//总榜 InviteType_Week = 2; //周榜 InviteType_Month = 3;//月榜 - InviteType_Max = 4; + InviteType_UpWeek = 4;//上周榜 + InviteType_Max = 5; } message GateTransmit { diff --git a/protocol/webapi/common.pb.go b/protocol/webapi/common.pb.go index 5c02575..dcf3646 100644 --- a/protocol/webapi/common.pb.go +++ b/protocol/webapi/common.pb.go @@ -6036,6 +6036,173 @@ func (x *ChannelSwitchConfig) GetOnChannelName() []string { return nil } +type RankAward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Start int64 `protobuf:"varint,1,opt,name=Start,proto3" json:"Start,omitempty"` // 开始积分 + End int64 `protobuf:"varint,2,opt,name=End,proto3" json:"End,omitempty"` // 结束积分 + Num int64 `protobuf:"varint,3,opt,name=Num,proto3" json:"Num,omitempty"` // 奖励 +} + +func (x *RankAward) Reset() { + *x = RankAward{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RankAward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RankAward) ProtoMessage() {} + +func (x *RankAward) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[59] + 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 RankAward.ProtoReflect.Descriptor instead. +func (*RankAward) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{59} +} + +func (x *RankAward) GetStart() int64 { + if x != nil { + return x.Start + } + return 0 +} + +func (x *RankAward) GetEnd() int64 { + if x != nil { + return x.End + } + return 0 +} + +func (x *RankAward) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + +// etcd /game/act_invite +type ActInviteConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform string `protobuf:"bytes,1,opt,name=Platform,proto3" json:"Platform,omitempty"` + BindScore int64 `protobuf:"varint,2,opt,name=BindScore,proto3" json:"BindScore,omitempty"` // 绑定积分 + RechargeScore int64 `protobuf:"varint,3,opt,name=RechargeScore,proto3" json:"RechargeScore,omitempty"` // 充值积分,一个玩家最多给上级贡献一次 + PayScore map[int64]int64 `protobuf:"bytes,4,rep,name=PayScore,proto3" json:"PayScore,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 充值积分;充值金额:获得积分 + Rates []int64 `protobuf:"varint,5,rep,packed,name=Rates,proto3" json:"Rates,omitempty"` // 返佣比例;多级按顺序给 + Awards1 []*RankAward `protobuf:"bytes,6,rep,name=Awards1,proto3" json:"Awards1,omitempty"` // 周榜奖励列表 + Awards2 []*RankAward `protobuf:"bytes,7,rep,name=Awards2,proto3" json:"Awards2,omitempty"` // 周榜奖励列表 + Awards3 []*RankAward `protobuf:"bytes,8,rep,name=Awards3,proto3" json:"Awards3,omitempty"` // 周榜奖励列表 +} + +func (x *ActInviteConfig) Reset() { + *x = ActInviteConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_common_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActInviteConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActInviteConfig) ProtoMessage() {} + +func (x *ActInviteConfig) ProtoReflect() protoreflect.Message { + mi := &file_common_proto_msgTypes[60] + 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 ActInviteConfig.ProtoReflect.Descriptor instead. +func (*ActInviteConfig) Descriptor() ([]byte, []int) { + return file_common_proto_rawDescGZIP(), []int{60} +} + +func (x *ActInviteConfig) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *ActInviteConfig) GetBindScore() int64 { + if x != nil { + return x.BindScore + } + return 0 +} + +func (x *ActInviteConfig) GetRechargeScore() int64 { + if x != nil { + return x.RechargeScore + } + return 0 +} + +func (x *ActInviteConfig) GetPayScore() map[int64]int64 { + if x != nil { + return x.PayScore + } + return nil +} + +func (x *ActInviteConfig) GetRates() []int64 { + if x != nil { + return x.Rates + } + return nil +} + +func (x *ActInviteConfig) GetAwards1() []*RankAward { + if x != nil { + return x.Awards1 + } + return nil +} + +func (x *ActInviteConfig) GetAwards2() []*RankAward { + if x != nil { + return x.Awards2 + } + return nil +} + +func (x *ActInviteConfig) GetAwards3() []*RankAward { + if x != nil { + return x.Awards3 + } + return nil +} + var File_common_proto protoreflect.FileDescriptor var file_common_proto_rawDesc = []byte{ @@ -7011,10 +7178,40 @@ var file_common_proto_rawDesc = []byte{ 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x26, - 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0d, 0x4f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x45, + 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0x8e, 0x03, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x52, 0x65, 0x63, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x50, 0x61, 0x79, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x77, 0x65, + 0x62, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x52, 0x61, 0x74, + 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, + 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, + 0x2b, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2b, 0x0a, 0x07, + 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, + 0x52, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x33, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, + 0x53, 0x63, 0x6f, 0x72, 0x65, 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, 0x42, 0x26, 0x5a, 0x24, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, + 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x77, 0x65, 0x62, 0x61, 0x70, 0x69, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7029,7 +7226,7 @@ func file_common_proto_rawDescGZIP() []byte { return file_common_proto_rawDescData } -var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 64) +var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 67) var file_common_proto_goTypes = []interface{}{ (*MysqlDbSetting)(nil), // 0: webapi.MysqlDbSetting (*MongoDbSetting)(nil), // 1: webapi.MongoDbSetting @@ -7090,32 +7287,35 @@ var file_common_proto_goTypes = []interface{}{ (*WelfarePhoneLotteryStatus)(nil), // 56: webapi.WelfarePhoneLotteryStatus (*WelfareCollectConfig)(nil), // 57: webapi.WelfareCollectConfig (*ChannelSwitchConfig)(nil), // 58: webapi.ChannelSwitchConfig - nil, // 59: webapi.Platform.BindTelRewardEntry - nil, // 60: webapi.PlayerData.RankScoreEntry - nil, // 61: webapi.ItemShop.AwardEntry - nil, // 62: webapi.VIPcfg.AwardEntry - nil, // 63: webapi.VIPcfg.Privilege7Entry - (*server.DB_GameFree)(nil), // 64: server.DB_GameFree + (*RankAward)(nil), // 59: webapi.RankAward + (*ActInviteConfig)(nil), // 60: webapi.ActInviteConfig + nil, // 61: webapi.Platform.BindTelRewardEntry + nil, // 62: webapi.PlayerData.RankScoreEntry + nil, // 63: webapi.ItemShop.AwardEntry + nil, // 64: webapi.VIPcfg.AwardEntry + nil, // 65: webapi.VIPcfg.Privilege7Entry + nil, // 66: webapi.ActInviteConfig.PayScoreEntry + (*server.DB_GameFree)(nil), // 67: server.DB_GameFree } var file_common_proto_depIdxs = []int32{ 2, // 0: webapi.Platform.Leaderboard:type_name -> webapi.RankSwitch 3, // 1: webapi.Platform.ClubConfig:type_name -> webapi.ClubConfig 4, // 2: webapi.Platform.ThirdGameMerchant:type_name -> webapi.ThirdGame - 59, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry + 61, // 3: webapi.Platform.BindTelReward:type_name -> webapi.Platform.BindTelRewardEntry 6, // 4: webapi.GameConfigGlobal.GameStatus:type_name -> webapi.GameStatus - 64, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree + 67, // 5: webapi.GameFree.DbGameFree:type_name -> server.DB_GameFree 8, // 6: webapi.PlatformGameConfig.DbGameFrees:type_name -> webapi.GameFree 0, // 7: webapi.PlatformDbConfig.Mysql:type_name -> webapi.MysqlDbSetting 1, // 8: webapi.PlatformDbConfig.MongoDb:type_name -> webapi.MongoDbSetting 1, // 9: webapi.PlatformDbConfig.MongoDbLog:type_name -> webapi.MongoDbSetting - 64, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree - 60, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry + 67, // 10: webapi.GameConfigGroup.DbGameFree:type_name -> server.DB_GameFree + 62, // 11: webapi.PlayerData.RankScore:type_name -> webapi.PlayerData.RankScoreEntry 29, // 12: webapi.PlayerData.Items:type_name -> webapi.ItemInfo 20, // 13: webapi.OnlineReport.GameCount:type_name -> webapi.OnlineGameCnt 22, // 14: webapi.CommonNoticeList.List:type_name -> webapi.CommonNotice 25, // 15: webapi.ExchangeShop.ExType:type_name -> webapi.ExchangeType 24, // 16: webapi.ExchangeShopList.List:type_name -> webapi.ExchangeShop - 61, // 17: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry + 63, // 17: webapi.ItemShop.Award:type_name -> webapi.ItemShop.AwardEntry 27, // 18: webapi.ItemShopList.List:type_name -> webapi.ItemShop 29, // 19: webapi.MatchInfoAward.ItemId:type_name -> webapi.ItemInfo 30, // 20: webapi.GameMatchDate.Award:type_name -> webapi.MatchInfoAward @@ -7136,16 +7336,20 @@ var file_common_proto_depIdxs = []int32{ 35, // 35: webapi.WelfareSpree.Item:type_name -> webapi.WelfareDate 45, // 36: webapi.WelfareFirstPayDataList.List:type_name -> webapi.WelfareSpree 45, // 37: webapi.WelfareContinuousPayDataList.List:type_name -> webapi.WelfareSpree - 62, // 38: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry - 63, // 39: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry + 64, // 38: webapi.VIPcfg.Award:type_name -> webapi.VIPcfg.AwardEntry + 65, // 39: webapi.VIPcfg.Privilege7:type_name -> webapi.VIPcfg.Privilege7Entry 48, // 40: webapi.VIPcfgDataList.List:type_name -> webapi.VIPcfg 35, // 41: webapi.ChessRankConfig.Item:type_name -> webapi.WelfareDate 52, // 42: webapi.ChessRankcfgData.Datas:type_name -> webapi.ChessRankConfig - 43, // [43:43] is the sub-list for method output_type - 43, // [43:43] is the sub-list for method input_type - 43, // [43:43] is the sub-list for extension type_name - 43, // [43:43] is the sub-list for extension extendee - 0, // [0:43] is the sub-list for field type_name + 66, // 43: webapi.ActInviteConfig.PayScore:type_name -> webapi.ActInviteConfig.PayScoreEntry + 59, // 44: webapi.ActInviteConfig.Awards1:type_name -> webapi.RankAward + 59, // 45: webapi.ActInviteConfig.Awards2:type_name -> webapi.RankAward + 59, // 46: webapi.ActInviteConfig.Awards3:type_name -> webapi.RankAward + 47, // [47:47] is the sub-list for method output_type + 47, // [47:47] is the sub-list for method input_type + 47, // [47:47] is the sub-list for extension type_name + 47, // [47:47] is the sub-list for extension extendee + 0, // [0:47] is the sub-list for field type_name } func init() { file_common_proto_init() } @@ -7862,6 +8066,30 @@ func file_common_proto_init() { return nil } } + file_common_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RankAward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActInviteConfig); 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{ @@ -7869,7 +8097,7 @@ func file_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_proto_rawDesc, NumEnums: 0, - NumMessages: 64, + NumMessages: 67, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/webapi/common.proto b/protocol/webapi/common.proto index 4fc8c71..bf442d3 100644 --- a/protocol/webapi/common.proto +++ b/protocol/webapi/common.proto @@ -667,4 +667,22 @@ message ChannelSwitchConfig{ int32 Tp = 1; // 开关类型 1.兑换 2.道具掉落 string Platform = 2; // 平台id repeated string OnChannelName = 3; // 开启渠道 +} + +message RankAward{ + int64 Start = 1; // 开始积分 + int64 End = 2; // 结束积分 + int64 Num = 3; // 奖励 +} + +// etcd /game/act_invite +message ActInviteConfig { + string Platform = 1; + int64 BindScore = 2; // 绑定积分 + int64 RechargeScore = 3; // 充值积分,一个玩家最多给上级贡献一次 + map PayScore = 4; // 充值积分;充值金额:获得积分 + repeated int64 Rates = 5; // 返佣比例;多级按顺序给 + repeated RankAward Awards1 = 6; // 周榜奖励列表 + repeated RankAward Awards2 = 7; // 周榜奖励列表 + repeated RankAward Awards3 = 8; // 周榜奖励列表 } \ No newline at end of file diff --git a/protocol/welfare/welfare.pb.go b/protocol/welfare/welfare.pb.go index 9e48b95..651f6f1 100644 --- a/protocol/welfare/welfare.pb.go +++ b/protocol/welfare/welfare.pb.go @@ -2242,23 +2242,93 @@ func (*CSInviteInfo) Descriptor() ([]byte, []int) { return file_welfare_proto_rawDescGZIP(), []int{32} } +type RankAward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Start int64 `protobuf:"varint,1,opt,name=Start,proto3" json:"Start,omitempty"` // 开始积分 + End int64 `protobuf:"varint,2,opt,name=End,proto3" json:"End,omitempty"` // 结束积分 + Num int64 `protobuf:"varint,3,opt,name=Num,proto3" json:"Num,omitempty"` // 奖励 +} + +func (x *RankAward) Reset() { + *x = RankAward{} + if protoimpl.UnsafeEnabled { + mi := &file_welfare_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RankAward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RankAward) ProtoMessage() {} + +func (x *RankAward) ProtoReflect() protoreflect.Message { + mi := &file_welfare_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 RankAward.ProtoReflect.Descriptor instead. +func (*RankAward) Descriptor() ([]byte, []int) { + return file_welfare_proto_rawDescGZIP(), []int{33} +} + +func (x *RankAward) GetStart() int64 { + if x != nil { + return x.Start + } + return 0 +} + +func (x *RankAward) GetEnd() int64 { + if x != nil { + return x.End + } + return 0 +} + +func (x *RankAward) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + // PACKET_SCInviteInfo type SCInviteInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Num int32 `protobuf:"varint,1,opt,name=Num,proto3" json:"Num,omitempty"` // 邀请人数 - Code string `protobuf:"bytes,2,opt,name=Code,proto3" json:"Code,omitempty"` // 邀请码 - InviteUrl string `protobuf:"bytes,3,opt,name=InviteUrl,proto3" json:"InviteUrl,omitempty"` // 邀请链接 - Score int64 `protobuf:"varint,4,opt,name=Score,proto3" json:"Score,omitempty"` // 邀请积分 - OtherCode string `protobuf:"bytes,5,opt,name=OtherCode,proto3" json:"OtherCode,omitempty"` // 已绑定的邀请码 + Num int32 `protobuf:"varint,1,opt,name=Num,proto3" json:"Num,omitempty"` // 邀请人数 + Code string `protobuf:"bytes,2,opt,name=Code,proto3" json:"Code,omitempty"` // 邀请码 + InviteUrl string `protobuf:"bytes,3,opt,name=InviteUrl,proto3" json:"InviteUrl,omitempty"` // 邀请链接 + Score int64 `protobuf:"varint,4,opt,name=Score,proto3" json:"Score,omitempty"` // 邀请积分 + OtherCode string `protobuf:"bytes,5,opt,name=OtherCode,proto3" json:"OtherCode,omitempty"` // 已绑定的邀请码 + BindScore int64 `protobuf:"varint,6,opt,name=BindScore,proto3" json:"BindScore,omitempty"` // 绑定积分 + RechargeScore int64 `protobuf:"varint,7,opt,name=RechargeScore,proto3" json:"RechargeScore,omitempty"` // 充值积分,一个玩家最多给上级贡献一次 + PayScore map[int64]int64 `protobuf:"bytes,8,rep,name=PayScore,proto3" json:"PayScore,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 充值积分;充值金额:获得积分 + Rates []int64 `protobuf:"varint,9,rep,packed,name=Rates,proto3" json:"Rates,omitempty"` // 返佣比例;多级按顺序给 + Awards1 []*RankAward `protobuf:"bytes,10,rep,name=Awards1,proto3" json:"Awards1,omitempty"` // 周榜奖励列表 + Awards2 []*RankAward `protobuf:"bytes,11,rep,name=Awards2,proto3" json:"Awards2,omitempty"` // 周榜奖励列表 + Awards3 []*RankAward `protobuf:"bytes,12,rep,name=Awards3,proto3" json:"Awards3,omitempty"` // 周榜奖励列表 } func (x *SCInviteInfo) Reset() { *x = SCInviteInfo{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[33] + mi := &file_welfare_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2271,7 +2341,7 @@ func (x *SCInviteInfo) String() string { func (*SCInviteInfo) ProtoMessage() {} func (x *SCInviteInfo) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[33] + mi := &file_welfare_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2284,7 +2354,7 @@ func (x *SCInviteInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SCInviteInfo.ProtoReflect.Descriptor instead. func (*SCInviteInfo) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{33} + return file_welfare_proto_rawDescGZIP(), []int{34} } func (x *SCInviteInfo) GetNum() int32 { @@ -2322,6 +2392,55 @@ func (x *SCInviteInfo) GetOtherCode() string { return "" } +func (x *SCInviteInfo) GetBindScore() int64 { + if x != nil { + return x.BindScore + } + return 0 +} + +func (x *SCInviteInfo) GetRechargeScore() int64 { + if x != nil { + return x.RechargeScore + } + return 0 +} + +func (x *SCInviteInfo) GetPayScore() map[int64]int64 { + if x != nil { + return x.PayScore + } + return nil +} + +func (x *SCInviteInfo) GetRates() []int64 { + if x != nil { + return x.Rates + } + return nil +} + +func (x *SCInviteInfo) GetAwards1() []*RankAward { + if x != nil { + return x.Awards1 + } + return nil +} + +func (x *SCInviteInfo) GetAwards2() []*RankAward { + if x != nil { + return x.Awards2 + } + return nil +} + +func (x *SCInviteInfo) GetAwards3() []*RankAward { + if x != nil { + return x.Awards3 + } + return nil +} + // 绑定邀请人 // PACKET_CSBindInvite type CSBindInvite struct { @@ -2335,7 +2454,7 @@ type CSBindInvite struct { func (x *CSBindInvite) Reset() { *x = CSBindInvite{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[34] + mi := &file_welfare_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2348,7 +2467,7 @@ func (x *CSBindInvite) String() string { func (*CSBindInvite) ProtoMessage() {} func (x *CSBindInvite) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[34] + mi := &file_welfare_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2361,7 +2480,7 @@ func (x *CSBindInvite) ProtoReflect() protoreflect.Message { // Deprecated: Use CSBindInvite.ProtoReflect.Descriptor instead. func (*CSBindInvite) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{34} + return file_welfare_proto_rawDescGZIP(), []int{35} } func (x *CSBindInvite) GetCode() string { @@ -2383,7 +2502,7 @@ type SCBindInvite struct { func (x *SCBindInvite) Reset() { *x = SCBindInvite{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[35] + mi := &file_welfare_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2396,7 +2515,7 @@ func (x *SCBindInvite) String() string { func (*SCBindInvite) ProtoMessage() {} func (x *SCBindInvite) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[35] + mi := &file_welfare_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2409,7 +2528,7 @@ func (x *SCBindInvite) ProtoReflect() protoreflect.Message { // Deprecated: Use SCBindInvite.ProtoReflect.Descriptor instead. func (*SCBindInvite) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{35} + return file_welfare_proto_rawDescGZIP(), []int{36} } func (x *SCBindInvite) GetOpRetCode() OpResultCode { @@ -2430,7 +2549,7 @@ type CSPigbankGetInfo struct { func (x *CSPigbankGetInfo) Reset() { *x = CSPigbankGetInfo{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[36] + mi := &file_welfare_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2443,7 +2562,7 @@ func (x *CSPigbankGetInfo) String() string { func (*CSPigbankGetInfo) ProtoMessage() {} func (x *CSPigbankGetInfo) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[36] + mi := &file_welfare_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2456,7 +2575,7 @@ func (x *CSPigbankGetInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CSPigbankGetInfo.ProtoReflect.Descriptor instead. func (*CSPigbankGetInfo) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{36} + return file_welfare_proto_rawDescGZIP(), []int{37} } // 存钱罐信息 @@ -2478,7 +2597,7 @@ type SCPigbankGetInfo struct { func (x *SCPigbankGetInfo) Reset() { *x = SCPigbankGetInfo{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[37] + mi := &file_welfare_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2491,7 +2610,7 @@ func (x *SCPigbankGetInfo) String() string { func (*SCPigbankGetInfo) ProtoMessage() {} func (x *SCPigbankGetInfo) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[37] + mi := &file_welfare_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2504,7 +2623,7 @@ func (x *SCPigbankGetInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SCPigbankGetInfo.ProtoReflect.Descriptor instead. func (*SCPigbankGetInfo) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{37} + return file_welfare_proto_rawDescGZIP(), []int{38} } func (x *SCPigbankGetInfo) GetOpRetCode() OpResultCode { @@ -2567,7 +2686,7 @@ type CSPigbankTakeCoin struct { func (x *CSPigbankTakeCoin) Reset() { *x = CSPigbankTakeCoin{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[38] + mi := &file_welfare_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2580,7 +2699,7 @@ func (x *CSPigbankTakeCoin) String() string { func (*CSPigbankTakeCoin) ProtoMessage() {} func (x *CSPigbankTakeCoin) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[38] + mi := &file_welfare_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2593,7 +2712,7 @@ func (x *CSPigbankTakeCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use CSPigbankTakeCoin.ProtoReflect.Descriptor instead. func (*CSPigbankTakeCoin) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{38} + return file_welfare_proto_rawDescGZIP(), []int{39} } // 存钱罐领取金币 @@ -2615,7 +2734,7 @@ type SCPigbankTakeCoin struct { func (x *SCPigbankTakeCoin) Reset() { *x = SCPigbankTakeCoin{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[39] + mi := &file_welfare_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2628,7 +2747,7 @@ func (x *SCPigbankTakeCoin) String() string { func (*SCPigbankTakeCoin) ProtoMessage() {} func (x *SCPigbankTakeCoin) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[39] + mi := &file_welfare_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2641,7 +2760,7 @@ func (x *SCPigbankTakeCoin) ProtoReflect() protoreflect.Message { // Deprecated: Use SCPigbankTakeCoin.ProtoReflect.Descriptor instead. func (*SCPigbankTakeCoin) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{39} + return file_welfare_proto_rawDescGZIP(), []int{40} } func (x *SCPigbankTakeCoin) GetOpRetCode() OpResultCode { @@ -2704,7 +2823,7 @@ type CSDiamondBankGetInfo struct { func (x *CSDiamondBankGetInfo) Reset() { *x = CSDiamondBankGetInfo{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[40] + mi := &file_welfare_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2717,7 +2836,7 @@ func (x *CSDiamondBankGetInfo) String() string { func (*CSDiamondBankGetInfo) ProtoMessage() {} func (x *CSDiamondBankGetInfo) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[40] + mi := &file_welfare_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2730,7 +2849,7 @@ func (x *CSDiamondBankGetInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CSDiamondBankGetInfo.ProtoReflect.Descriptor instead. func (*CSDiamondBankGetInfo) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{40} + return file_welfare_proto_rawDescGZIP(), []int{41} } // 钻石存钱罐信息 @@ -2753,7 +2872,7 @@ type SCDiamondBankGetInfo struct { func (x *SCDiamondBankGetInfo) Reset() { *x = SCDiamondBankGetInfo{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[41] + mi := &file_welfare_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2766,7 +2885,7 @@ func (x *SCDiamondBankGetInfo) String() string { func (*SCDiamondBankGetInfo) ProtoMessage() {} func (x *SCDiamondBankGetInfo) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[41] + mi := &file_welfare_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2779,7 +2898,7 @@ func (x *SCDiamondBankGetInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SCDiamondBankGetInfo.ProtoReflect.Descriptor instead. func (*SCDiamondBankGetInfo) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{41} + return file_welfare_proto_rawDescGZIP(), []int{42} } func (x *SCDiamondBankGetInfo) GetOpRetCode() OpResultCode { @@ -2858,7 +2977,7 @@ type SCDiamondBankTakeDiamond struct { func (x *SCDiamondBankTakeDiamond) Reset() { *x = SCDiamondBankTakeDiamond{} if protoimpl.UnsafeEnabled { - mi := &file_welfare_proto_msgTypes[42] + mi := &file_welfare_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2871,7 +2990,7 @@ func (x *SCDiamondBankTakeDiamond) String() string { func (*SCDiamondBankTakeDiamond) ProtoMessage() {} func (x *SCDiamondBankTakeDiamond) ProtoReflect() protoreflect.Message { - mi := &file_welfare_proto_msgTypes[42] + mi := &file_welfare_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2884,7 +3003,7 @@ func (x *SCDiamondBankTakeDiamond) ProtoReflect() protoreflect.Message { // Deprecated: Use SCDiamondBankTakeDiamond.ProtoReflect.Descriptor instead. func (*SCDiamondBankTakeDiamond) Descriptor() ([]byte, []int) { - return file_welfare_proto_rawDescGZIP(), []int{42} + return file_welfare_proto_rawDescGZIP(), []int{43} } func (x *SCDiamondBankTakeDiamond) GetOpRetCode() OpResultCode { @@ -3151,187 +3270,213 @@ var file_welfare_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x47, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, - 0x86, 0x01, 0x0a, 0x0c, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, - 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x74, - 0x68, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x22, 0x0a, 0x0c, 0x43, 0x53, 0x42, 0x69, - 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x43, 0x0a, 0x0c, - 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x09, - 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 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, 0x12, 0x0a, 0x10, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xff, 0x01, 0x0a, 0x10, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, - 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, - 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x08, 0x42, 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x54, - 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, - 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, - 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, - 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x43, 0x53, 0x50, 0x69, 0x67, - 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x86, 0x02, 0x0a, - 0x11, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, - 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, - 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, - 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x61, 0x6b, 0x65, 0x43, - 0x6f, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x61, - 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, - 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, - 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x6f, - 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, - 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, - 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, - 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x43, 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x9b, 0x02, - 0x0a, 0x14, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, - 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x42, - 0x61, 0x6e, 0x6b, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x42, - 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, - 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x22, 0xab, 0x02, 0x0a, 0x18, - 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, - 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, - 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, - 0x0e, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, - 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x44, 0x69, - 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x42, 0x61, 0x6e, - 0x6b, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x44, - 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x2a, 0x86, 0x02, 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, 0x10, 0x0a, 0x0c, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, 0x02, 0x12, 0x14, 0x0a, - 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, - 0x65, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x43, - 0x6f, 0x69, 0x6e, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x6c, - 0x72, 0x65, 0x61, 0x64, 0x79, 0x42, 0x69, 0x6e, 0x64, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x4f, - 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x10, 0x06, 0x12, 0x11, - 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4d, 0x79, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, - 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x65, 0x73, 0x73, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x50, - 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x74, 0x46, 0x75, 0x6c, - 0x6c, 0x10, 0x0a, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, - 0x61, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x10, 0x0b, 0x2a, 0xff, 0x08, 0x0a, 0x09, 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, - 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, - 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, 0x45, 0x4c, 0x49, - 0x45, 0x46, 0x46, 0x55, 0x4e, 0x44, 0x10, 0x94, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, - 0x45, 0x4c, 0x49, 0x45, 0x46, 0x46, 0x55, 0x4e, 0x44, 0x10, 0x95, 0x14, 0x12, 0x20, 0x0a, 0x1b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, - 0x45, 0x54, 0x54, 0x55, 0x52, 0x4e, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x96, 0x14, 0x12, 0x20, - 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, - 0x5f, 0x47, 0x45, 0x54, 0x54, 0x55, 0x52, 0x4e, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x97, 0x14, - 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, - 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, 0x4e, 0x10, - 0x98, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x41, 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, - 0x4e, 0x10, 0x99, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, - 0x46, 0x4f, 0x10, 0x9a, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0x9b, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9c, 0x14, 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, - 0x58, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9d, 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, - 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, 0x9e, 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, - 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, 0x9f, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, - 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa0, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, - 0x53, 0x54, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa1, 0x14, 0x12, 0x1c, 0x0a, 0x17, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, - 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, 0x10, 0xa2, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, - 0x53, 0x54, 0x50, 0x41, 0x59, 0x10, 0xa3, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, - 0x4e, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa4, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, - 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa5, 0x14, 0x12, 0x1d, - 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, - 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, 0x10, 0xa6, 0x14, 0x12, 0x1d, 0x0a, - 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, 0x10, 0xa7, 0x14, 0x12, 0x22, 0x0a, 0x1d, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, - 0x79, 0x5f, 0x41, 0x64, 0x64, 0x75, 0x70, 0x32, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xa8, 0x14, - 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x69, - 0x67, 0x6e, 0x44, 0x61, 0x79, 0x5f, 0x41, 0x64, 0x64, 0x75, 0x70, 0x32, 0x41, 0x77, 0x61, 0x72, - 0x64, 0x10, 0xa9, 0x14, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, - 0x53, 0x57, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x10, 0xd4, 0x16, 0x12, 0x18, - 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x57, 0x65, 0x6c, 0x66, 0x52, - 0x65, 0x6c, 0x69, 0x65, 0x66, 0x10, 0xd5, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x43, 0x53, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, - 0xd6, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xd7, 0x16, 0x12, 0x18, 0x0a, 0x13, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x10, 0xd8, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0xd9, 0x16, - 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x69, 0x67, - 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xde, 0x16, 0x12, 0x1c, - 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, - 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xdf, 0x16, 0x12, 0x1d, 0x0a, 0x18, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, - 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xe0, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, - 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0xe1, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, - 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, - 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe2, 0x16, 0x12, 0x20, 0x0a, 0x1b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, - 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe3, 0x16, 0x12, 0x24, - 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x45, 0x0a, 0x09, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x45, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x22, 0xe8, 0x03, 0x0a, 0x0c, 0x53, 0x43, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x24, 0x0a, + 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x52, 0x65, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, + 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x61, 0x79, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x50, 0x61, 0x79, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x05, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x07, 0x41, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x31, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x65, + 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, + 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, 0x31, 0x12, 0x2c, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x32, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x65, 0x6c, 0x66, + 0x61, 0x72, 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x32, 0x12, 0x2c, 0x0a, 0x07, 0x41, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x33, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, + 0x65, 0x2e, 0x52, 0x61, 0x6e, 0x6b, 0x41, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x41, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x33, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x53, 0x63, 0x6f, 0x72, 0x65, + 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, 0x22, 0x0a, 0x0c, 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x43, 0x0a, 0x0c, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, + 0x72, 0x65, 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, 0x12, 0x0a, 0x10, 0x43, 0x53, + 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xff, + 0x01, 0x0a, 0x10, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, + 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, + 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x61, 0x6e, 0x6b, + 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x42, 0x61, 0x6e, 0x6b, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, + 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, + 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, + 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x22, 0x13, 0x0a, 0x11, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, + 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0x86, 0x02, 0x0a, 0x11, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, + 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x4f, + 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, + 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x69, 0x61, 0x6d, 0x6f, + 0x6e, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, + 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, + 0x78, 0x43, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, + 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x22, 0x16, + 0x0a, 0x14, 0x43, 0x53, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, + 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x9b, 0x02, 0x0a, 0x14, 0x53, 0x43, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, 0x70, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x44, 0x69, 0x61, 0x6d, + 0x6f, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x44, + 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x43, + 0x6f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x42, 0x61, 0x6e, 0x6b, 0x4d, + 0x61, 0x78, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, + 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, + 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x53, 0x68, 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, + 0x6f, 0x70, 0x49, 0x64, 0x22, 0xab, 0x02, 0x0a, 0x18, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, - 0x64, 0x10, 0xe4, 0x16, 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, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x12, 0x33, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x2e, 0x4f, + 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, + 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, + 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, + 0x54, 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x1c, + 0x0a, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, + 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x42, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x44, 0x69, 0x61, + 0x6d, 0x6f, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x61, 0x79, 0x42, 0x75, 0x79, 0x4d, 0x61, + 0x78, 0x43, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x44, 0x61, 0x79, 0x42, + 0x75, 0x79, 0x4d, 0x61, 0x78, 0x43, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x4e, 0x6f, 0x77, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x68, + 0x6f, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x68, 0x6f, 0x70, + 0x49, 0x64, 0x2a, 0x86, 0x02, 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, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, + 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x6f, 0x4d, 0x6f, 0x72, 0x65, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x43, 0x6f, 0x69, 0x6e, 0x10, 0x04, 0x12, 0x14, + 0x0a, 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x41, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x42, 0x69, + 0x6e, 0x64, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x42, 0x69, 0x6e, + 0x64, 0x53, 0x65, 0x6c, 0x66, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, 0x52, 0x43, 0x5f, + 0x4d, 0x79, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x08, 0x12, 0x14, 0x0a, + 0x10, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x4c, 0x65, 0x73, + 0x73, 0x10, 0x09, 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, + 0x61, 0x6e, 0x6b, 0x4e, 0x6f, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x0a, 0x12, 0x1d, 0x0a, 0x19, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x4f, 0x76, 0x65, 0x72, + 0x54, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x10, 0x0b, 0x2a, 0xff, 0x08, 0x0a, 0x09, + 0x53, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x48, 0x4f, 0x50, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, + 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, + 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x46, 0x46, 0x55, 0x4e, 0x44, 0x10, + 0x94, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, + 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x52, 0x45, 0x4c, 0x49, 0x45, 0x46, 0x46, 0x55, + 0x4e, 0x44, 0x10, 0x95, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x55, 0x52, 0x4e, 0x50, + 0x4c, 0x41, 0x54, 0x45, 0x10, 0x96, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x55, 0x52, + 0x4e, 0x50, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x97, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x41, + 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x98, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, + 0x54, 0x41, 0x44, 0x44, 0x55, 0x50, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x99, 0x14, 0x12, 0x1f, 0x0a, + 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, + 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9a, 0x14, 0x12, 0x1f, + 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, + 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x41, 0x52, 0x45, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9b, 0x14, 0x12, + 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, + 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9c, 0x14, + 0x12, 0x1f, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, + 0x4c, 0x46, 0x5f, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x9d, + 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, + 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, 0x9e, + 0x14, 0x12, 0x1e, 0x0a, 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, + 0x45, 0x4c, 0x46, 0x5f, 0x47, 0x45, 0x54, 0x42, 0x4c, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, 0x9f, + 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, + 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, 0x4f, + 0x10, 0xa0, 0x14, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, 0x49, 0x4e, + 0x46, 0x4f, 0x10, 0xa1, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, + 0x10, 0xa2, 0x14, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, + 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x50, 0x41, 0x59, 0x10, 0xa3, + 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, + 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, 0x49, 0x4e, 0x46, + 0x4f, 0x10, 0xa4, 0x14, 0x12, 0x21, 0x0a, 0x1c, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, 0x41, 0x59, + 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xa5, 0x14, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, + 0x50, 0x41, 0x59, 0x10, 0xa6, 0x14, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x45, 0x4c, 0x46, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x50, + 0x41, 0x59, 0x10, 0xa7, 0x14, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x79, 0x5f, 0x41, 0x64, 0x64, 0x75, 0x70, + 0x32, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xa8, 0x14, 0x12, 0x22, 0x0a, 0x1d, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x79, 0x5f, 0x41, + 0x64, 0x64, 0x75, 0x70, 0x32, 0x41, 0x77, 0x61, 0x72, 0x64, 0x10, 0xa9, 0x14, 0x12, 0x18, 0x0a, + 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x57, 0x65, 0x6c, 0x66, 0x52, 0x65, + 0x6c, 0x69, 0x65, 0x66, 0x10, 0xd4, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x57, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x10, 0xd5, + 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xd6, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x10, 0xd7, 0x16, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x42, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0xd8, 0x16, 0x12, + 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x42, 0x69, 0x6e, 0x64, + 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x10, 0xd9, 0x16, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xde, 0x16, 0x12, 0x1c, 0x0a, 0x17, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x10, 0xdf, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x43, 0x53, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, + 0x6e, 0x10, 0xe0, 0x16, 0x12, 0x1d, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x50, 0x69, 0x67, 0x62, 0x61, 0x6e, 0x6b, 0x54, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x69, 0x6e, + 0x10, 0xe1, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, + 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x10, 0xe2, 0x16, 0x12, 0x20, 0x0a, 0x1b, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x47, 0x65, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xe3, 0x16, 0x12, 0x24, 0x0a, 0x1f, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x42, 0x61, 0x6e, 0x6b, 0x54, + 0x61, 0x6b, 0x65, 0x44, 0x69, 0x61, 0x6d, 0x6f, 0x6e, 0x64, 0x10, 0xe4, 0x16, 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, 0x77, + 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3347,7 +3492,7 @@ func file_welfare_proto_rawDescGZIP() []byte { } var file_welfare_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_welfare_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_welfare_proto_msgTypes = make([]protoimpl.MessageInfo, 45) var file_welfare_proto_goTypes = []interface{}{ (OpResultCode)(0), // 0: welfare.OpResultCode (SPacketID)(0), // 1: welfare.SPacketID @@ -3384,16 +3529,18 @@ var file_welfare_proto_goTypes = []interface{}{ (*CSWelfareRelief)(nil), // 32: welfare.CSWelfareRelief (*SCWelfareRelief)(nil), // 33: welfare.SCWelfareRelief (*CSInviteInfo)(nil), // 34: welfare.CSInviteInfo - (*SCInviteInfo)(nil), // 35: welfare.SCInviteInfo - (*CSBindInvite)(nil), // 36: welfare.CSBindInvite - (*SCBindInvite)(nil), // 37: welfare.SCBindInvite - (*CSPigbankGetInfo)(nil), // 38: welfare.CSPigbankGetInfo - (*SCPigbankGetInfo)(nil), // 39: welfare.SCPigbankGetInfo - (*CSPigbankTakeCoin)(nil), // 40: welfare.CSPigbankTakeCoin - (*SCPigbankTakeCoin)(nil), // 41: welfare.SCPigbankTakeCoin - (*CSDiamondBankGetInfo)(nil), // 42: welfare.CSDiamondBankGetInfo - (*SCDiamondBankGetInfo)(nil), // 43: welfare.SCDiamondBankGetInfo - (*SCDiamondBankTakeDiamond)(nil), // 44: welfare.SCDiamondBankTakeDiamond + (*RankAward)(nil), // 35: welfare.RankAward + (*SCInviteInfo)(nil), // 36: welfare.SCInviteInfo + (*CSBindInvite)(nil), // 37: welfare.CSBindInvite + (*SCBindInvite)(nil), // 38: welfare.SCBindInvite + (*CSPigbankGetInfo)(nil), // 39: welfare.CSPigbankGetInfo + (*SCPigbankGetInfo)(nil), // 40: welfare.SCPigbankGetInfo + (*CSPigbankTakeCoin)(nil), // 41: welfare.CSPigbankTakeCoin + (*SCPigbankTakeCoin)(nil), // 42: welfare.SCPigbankTakeCoin + (*CSDiamondBankGetInfo)(nil), // 43: welfare.CSDiamondBankGetInfo + (*SCDiamondBankGetInfo)(nil), // 44: welfare.SCDiamondBankGetInfo + (*SCDiamondBankTakeDiamond)(nil), // 45: welfare.SCDiamondBankTakeDiamond + nil, // 46: welfare.SCInviteInfo.PayScoreEntry } var file_welfare_proto_depIdxs = []int32{ 0, // 0: welfare.SCGetReliefFund.OpRetCode:type_name -> welfare.OpResultCode @@ -3420,16 +3567,20 @@ var file_welfare_proto_depIdxs = []int32{ 0, // 21: welfare.SCWelfareContinuousPayData.OpRetCode:type_name -> welfare.OpResultCode 23, // 22: welfare.SCWelfareContinuousPayData.List:type_name -> welfare.WelfareSpree 0, // 23: welfare.SCWelfareContinuousPay.OpRetCode:type_name -> welfare.OpResultCode - 0, // 24: welfare.SCBindInvite.OpRetCode:type_name -> welfare.OpResultCode - 0, // 25: welfare.SCPigbankGetInfo.OpRetCode:type_name -> welfare.OpResultCode - 0, // 26: welfare.SCPigbankTakeCoin.OpRetCode:type_name -> welfare.OpResultCode - 0, // 27: welfare.SCDiamondBankGetInfo.OpRetCode:type_name -> welfare.OpResultCode - 0, // 28: welfare.SCDiamondBankTakeDiamond.OpRetCode:type_name -> welfare.OpResultCode - 29, // [29:29] is the sub-list for method output_type - 29, // [29:29] is the sub-list for method input_type - 29, // [29:29] is the sub-list for extension type_name - 29, // [29:29] is the sub-list for extension extendee - 0, // [0:29] is the sub-list for field type_name + 46, // 24: welfare.SCInviteInfo.PayScore:type_name -> welfare.SCInviteInfo.PayScoreEntry + 35, // 25: welfare.SCInviteInfo.Awards1:type_name -> welfare.RankAward + 35, // 26: welfare.SCInviteInfo.Awards2:type_name -> welfare.RankAward + 35, // 27: welfare.SCInviteInfo.Awards3:type_name -> welfare.RankAward + 0, // 28: welfare.SCBindInvite.OpRetCode:type_name -> welfare.OpResultCode + 0, // 29: welfare.SCPigbankGetInfo.OpRetCode:type_name -> welfare.OpResultCode + 0, // 30: welfare.SCPigbankTakeCoin.OpRetCode:type_name -> welfare.OpResultCode + 0, // 31: welfare.SCDiamondBankGetInfo.OpRetCode:type_name -> welfare.OpResultCode + 0, // 32: welfare.SCDiamondBankTakeDiamond.OpRetCode:type_name -> welfare.OpResultCode + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_welfare_proto_init() } @@ -3835,7 +3986,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCInviteInfo); i { + switch v := v.(*RankAward); i { case 0: return &v.state case 1: @@ -3847,7 +3998,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSBindInvite); i { + switch v := v.(*SCInviteInfo); i { case 0: return &v.state case 1: @@ -3859,7 +4010,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCBindInvite); i { + switch v := v.(*CSBindInvite); i { case 0: return &v.state case 1: @@ -3871,7 +4022,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSPigbankGetInfo); i { + switch v := v.(*SCBindInvite); i { case 0: return &v.state case 1: @@ -3883,7 +4034,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCPigbankGetInfo); i { + switch v := v.(*CSPigbankGetInfo); i { case 0: return &v.state case 1: @@ -3895,7 +4046,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSPigbankTakeCoin); i { + switch v := v.(*SCPigbankGetInfo); i { case 0: return &v.state case 1: @@ -3907,7 +4058,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCPigbankTakeCoin); i { + switch v := v.(*CSPigbankTakeCoin); i { case 0: return &v.state case 1: @@ -3919,7 +4070,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CSDiamondBankGetInfo); i { + switch v := v.(*SCPigbankTakeCoin); i { case 0: return &v.state case 1: @@ -3931,7 +4082,7 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SCDiamondBankGetInfo); i { + switch v := v.(*CSDiamondBankGetInfo); i { case 0: return &v.state case 1: @@ -3943,6 +4094,18 @@ func file_welfare_proto_init() { } } file_welfare_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCDiamondBankGetInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_welfare_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SCDiamondBankTakeDiamond); i { case 0: return &v.state @@ -3961,7 +4124,7 @@ func file_welfare_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_welfare_proto_rawDesc, NumEnums: 2, - NumMessages: 43, + NumMessages: 45, NumExtensions: 0, NumServices: 0, }, diff --git a/protocol/welfare/welfare.proto b/protocol/welfare/welfare.proto index 4bf4d78..6388dac 100644 --- a/protocol/welfare/welfare.proto +++ b/protocol/welfare/welfare.proto @@ -280,6 +280,13 @@ message SCWelfareRelief{ // 邀请信息 // PACKET_CSInviteInfo message CSInviteInfo{} + +message RankAward{ + int64 Start = 1; // 开始积分 + int64 End = 2; // 结束积分 + int64 Num = 3; // 奖励 +} + // PACKET_SCInviteInfo message SCInviteInfo{ int32 Num = 1; // 邀请人数 @@ -287,6 +294,13 @@ message SCInviteInfo{ string InviteUrl = 3; // 邀请链接 int64 Score = 4; // 邀请积分 string OtherCode = 5; // 已绑定的邀请码 + int64 BindScore = 6; // 绑定积分 + int64 RechargeScore = 7; // 充值积分,一个玩家最多给上级贡献一次 + map PayScore = 8; // 充值积分;充值金额:获得积分 + repeated int64 Rates = 9; // 返佣比例;多级按顺序给 + repeated RankAward Awards1 = 10; // 周榜奖励列表 + repeated RankAward Awards2 = 11; // 周榜奖励列表 + repeated RankAward Awards3 = 12; // 周榜奖励列表 } // 绑定邀请人 diff --git a/public b/public index 363a220..1e16c8c 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 363a22034898c87b42588d088a7838134d84dcb6 +Subproject commit 1e16c8ced958d860a805f401045803a9c928d5f6 diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index a8aaf0a..1c97def 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -2094,15 +2094,16 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64) } proto.SetDefaults(scPlayerData) common.SendToGate(sid, int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData, s) + logger.Logger.Tracef("SC_PLAYERDATA %v", scPlayerData) } + sid := PlayerMgrSington.EndPlayerLoading(cspl.GetAccId()) + if pd == nil { send(player_proto.OpResultCode_OPRC_Login_CreateFailed) return } - sid := PlayerMgrSington.EndPlayerLoading(cspl.GetAccId()) - var promoterID string var promoterCfg *PromoterConfig f := func() { diff --git a/worldsrv/action_welfare.go b/worldsrv/action_welfare.go index ec3bd13..80a7c1b 100644 --- a/worldsrv/action_welfare.go +++ b/worldsrv/action_welfare.go @@ -1,7 +1,7 @@ package main import ( - "encoding/base64" + "errors" "fmt" "time" @@ -309,7 +309,7 @@ func CSInviteInfo(s *netlib.Session, packetid int, data interface{}, sid int64) } link := model.GameParamData.InviteUrl f := func() string { - return fmt.Sprintf("%s?user=%s", link, base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s|%d", p.Platform, p.SnId)))) + return fmt.Sprintf("%s?user=%s", link, p.ICode) } var res []byte @@ -332,12 +332,42 @@ func CSInviteInfo(s *netlib.Session, packetid int, data interface{}, sid int64) } ret := &welfare.SCInviteInfo{ - Num: p.InviteNum, - Code: p.InviteCode, + Num: int32(p.INum), + Code: p.ICode, InviteUrl: f(), - Score: p.InviteScore, - OtherCode: p.OtherCode, + Score: p.IScore, + OtherCode: p.PCode, } + + cfg := PlatformMgrSingleton.GetConfig(p.Platform).ActInviteConfig + if cfg != nil { + ret.BindScore = cfg.GetBindScore() + ret.RechargeScore = cfg.GetRechargeScore() + ret.PayScore = cfg.GetPayScore() + for _, v := range cfg.GetAwards1() { + ret.Awards1 = append(ret.Awards1, &welfare.RankAward{ + Start: v.GetStart(), + End: v.GetEnd(), + Num: v.GetNum(), + }) + } + for _, v := range cfg.GetAwards2() { + ret.Awards2 = append(ret.Awards2, &welfare.RankAward{ + Start: v.GetStart(), + End: v.GetEnd(), + Num: v.GetNum(), + }) + } + for _, v := range cfg.GetAwards3() { + ret.Awards3 = append(ret.Awards3, &welfare.RankAward{ + Start: v.GetStart(), + End: v.GetEnd(), + Num: v.GetNum(), + }) + } + ret.Rates = cfg.GetRates() + } + p.SendToClient(int(welfare.SPacketID_PACKET_SCInviteInfo), ret) logger.Logger.Tracef("SCInviteInfo %v", ret) })).Start() @@ -360,25 +390,20 @@ func CSBindInvite(s *netlib.Session, packetid int, data interface{}, sid int64) var inviteSnId int32 var err error + now := time.Now() + cfg := PlatformMgrSingleton.GetConfig(p.Platform).ActInviteConfig send := func() { p.SendToClient(int(welfare.SPacketID_PACKET_SCBindInvite), ret) logger.Logger.Tracef("SCBindInvite %v", ret) if ret.OpRetCode == welfare.OpResultCode_OPRC_Sucess { - // 更新绑定关系 - LogChannelSingleton.WriteLog(&model.BindInvite{ - Platform: p.Platform, - SnId: p.SnId, - InviteSnId: inviteSnId, - }) - + // 玩家自己的绑定任务 TaskSubjectSingleton.Touch(common.TaskTypeBindInviter, &TaskData{SnId: p.SnId, Num: 1}) - p.InviteTask(common.InviteScoreTypeLogin, 0, 1) } } - if p.InviteSnId != 0 { + if p.PSnId != 0 { ret.OpRetCode = welfare.OpResultCode_OPRC_AlreadyBind send() return nil @@ -395,43 +420,43 @@ func CSBindInvite(s *netlib.Session, packetid int, data interface{}, sid int64) return } - if inviteSnId == p.SnId { - ret.OpRetCode = welfare.OpResultCode_OPRC_BindSelf - send() - return - } - - pp := PlayerMgrSington.GetPlayerBySnId(inviteSnId) - if pp != nil { - if pp.InviteSnId == p.SnId { - ret.OpRetCode = welfare.OpResultCode_OPRC_MyInvite - send() - return - } - p.InviteSnId = pp.SnId - p.OtherCode = pp.InviteCode - ret.OpRetCode = welfare.OpResultCode_OPRC_Sucess - send() - return - } - - inviteSnId2 := int32(0) + // 3级父级不能是自己 var err error + tmpSnId := inviteSnId task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - inviteSnId2, err = model.GetPlayerInviteSnid(p.Platform, inviteSnId) + // todo 优化查找顶级代理 + for i := 0; i < 10000; i++ { + if tmpSnId == p.SnId { + ret.OpRetCode = welfare.OpResultCode_OPRC_BindSelf + err = errors.New("bind error") + return nil + } + tmpSnId, err = model.GetPlayerInviteSnid(p.Platform, tmpSnId) + if err != nil { + ret.OpRetCode = welfare.OpResultCode_OPRC_Error + return nil + } + if tmpSnId == 0 { + break + } + } + SaveInviteScore(&model.InviteScore{ + Platform: p.Platform, + SnId: p.SnId, + InviteSnId: inviteSnId, + Tp: common.InviteScoreTypeBind, + Score: cfg.GetBindScore(), + Ts: now.Unix(), + Money: 0, + }) return nil }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { if err != nil { send() return } - if inviteSnId2 == p.SnId { - ret.OpRetCode = welfare.OpResultCode_OPRC_MyInvite - send() - return - } - p.InviteSnId = inviteSnId - p.OtherCode = msg.GetCode() + p.PSnId = inviteSnId + p.PCode = msg.GetCode() ret.OpRetCode = welfare.OpResultCode_OPRC_Sucess send() })).Start() diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 394277a..f56e1e7 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -522,11 +522,11 @@ func (this *BagMgr) Shutdown() { //========================implement IPlayerLoad ============================== func (this *BagMgr) Load(platform string, snid int32, player any) *internal.PlayerLoadReplay { - data := model.GetBagInfo(snid, platform) + data, err := model.GetBagInfo(snid, platform) return &internal.PlayerLoadReplay{ Platform: platform, Snid: snid, - Err: nil, + Err: err, Data: data, } } diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index 53a4037..51faf23 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -66,6 +66,8 @@ func init() { etcd.Register(etcd.ETCDKEY_CHESSRANK_CFG, webapi.ChessRankcfgData{}, platformConfigEvent) // 手机积分 etcd.Register(etcd.ETCDKEY_ACT_PHONELOTTERY, webapi.WelfarePhoneLotteryStatus{}, platformConfigEvent) + // 邀请活动 + etcd.Register(etcd.ETCDKEY_ACT_Invite, webapi.ActInviteConfig{}, platformConfigEvent) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { @@ -195,7 +197,8 @@ func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, e ChessRankMgrSington.UpdateChessRankConfig(config) case *webapi.WelfarePhoneLotteryStatus: WelfareMgrSington.UpdatePhoneLotteryStatus(config) - + case *webapi.ActInviteConfig: + PlatformMgrSingleton.GetConfig(config.Platform).ActInviteConfig = config default: logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey) } diff --git a/worldsrv/invitecode.go b/worldsrv/invitecode.go index 74eb10f..971460c 100644 --- a/worldsrv/invitecode.go +++ b/worldsrv/invitecode.go @@ -1,124 +1,34 @@ package main import ( - "fmt" - - "mongo.games.com/goserver/core/basic" - "mongo.games.com/goserver/core/logger" - "mongo.games.com/goserver/core/task" + "time" "mongo.games.com/game/common" "mongo.games.com/game/model" - "mongo.games.com/game/worldsrv/internal" ) +// SaveInviteScore 保存玩家操作 +// 绑定,充值成功,充值;及产生的积分,充值金额 func SaveInviteScore(data *model.InviteScore) { if data == nil { return } - var err error - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - err = model.SaveInviteScore(data) - if err != nil { - logger.Logger.Errorf("SaveInviteScore error:%v", err) - return err - } - // 后台统计积分记录 - data.Ts /= 1000000000 // 后台需要秒 - LogChannelSingleton.WriteLog(data) - logger.Logger.Tracef("==> php InviteScore %+v", *data) - return nil - }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { - p := PlayerMgrSington.GetPlayerBySnId(data.InviteSnId) - if err == nil && p != nil { - if data.Score != 0 { - if data.Score < 0 { - if -data.Score > p.InviteScore { - data.Score = -p.InviteScore - } - } - p.InviteScore += data.Score - p.dirty = true - - // 更新邀请任务进度 - if data.Score > 0 { - TaskSubjectSingleton.Touch(common.TaskTypeInviteScore, &TaskData{ - SnId: p.SnId, - Num: data.Score, - }) - } - } - - if data.Money > 0 { - TaskSubjectSingleton.Touch(common.TaskTypeInviteRecharge, &TaskData{ - SnId: p.SnId, - Num: data.Money, - }) - } - } - })).StartByFixExecutor(fmt.Sprintf("invite_score_%v", data.InviteSnId)) + cfg := PlatformMgrSingleton.GetConfig(data.Platform).ActInviteConfig + data.Rate = cfg.GetRates() + LogChannelSingleton.WriteLog(&model.EvtInviteMsg{ + InviteScore: *data, + RechargeScore: cfg.GetRechargeScore(), + }) } -func GetInviteScore(platform string, snid int32) { - var n, z, money int64 - var err error - task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - n, z, money, err = model.GetInviteScore(platform, snid) - if err != nil { - logger.Logger.Errorf("GetInviteScore error:%v", err) - return err - } - return nil - }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { - p := PlayerMgrSington.GetPlayerBySnId(snid) - if err == nil && p != nil { - p.InviteScore = n - p.dirty = true - - // 更新邀请任务进度 - p.ResetTaskN(common.TaskTypeInviteScore) - TaskSubjectSingleton.Touch(common.TaskTypeInviteScore, &TaskData{ - SnId: p.SnId, - Num: z, - }) - - p.ResetTaskN(common.TaskTypeInviteRecharge) - TaskSubjectSingleton.Touch(common.TaskTypeInviteRecharge, &TaskData{ - SnId: p.SnId, - Num: money, - }) - } - })).StartByFixExecutor(fmt.Sprintf("invite_score_%v", snid)) -} - -type InviteCode struct { - internal.BasePlayerLoader -} - -func (i *InviteCode) LoadAfter(platform string, snid int32) *internal.PlayerLoadReplay { - n, err := model.GetInviteNum(platform, snid) - return &internal.PlayerLoadReplay{ - Platform: platform, - Snid: snid, - Err: err, - Data: n, - } -} - -func (i *InviteCode) CallbackAfter(ret *internal.PlayerLoadReplay) { - if ret == nil { - return - } - p := PlayerMgrSington.GetPlayerBySnId(ret.Snid) - if p == nil { - return - } - p.InviteNum = ret.Data.(int32) - p.ResetTaskN(common.TaskTypeInviteNum) - TaskSubjectSingleton.Touch(common.TaskTypeInviteNum, &TaskData{SnId: p.SnId, Num: int64(p.InviteNum)}) - GetInviteScore(ret.Platform, ret.Snid) -} - -func init() { - internal.RegisterPlayerLoad(new(InviteCode)) +// CheckNewWeek 每周重置积分 +func CheckNewWeek(platform string, snid int32) { + LogChannelSingleton.WriteLog(&model.EvtInviteMsg{ + InviteScore: model.InviteScore{ + Platform: platform, + SnId: snid, + Tp: common.InviteScoreCheckWeek, + Ts: time.Now().Unix(), + }, + }) } diff --git a/worldsrv/logchannel.go b/worldsrv/logchannel.go index d1853b2..ceecdef 100644 --- a/worldsrv/logchannel.go +++ b/worldsrv/logchannel.go @@ -58,7 +58,6 @@ func init() { LogChannelSingleton.RegisterLogCName(model.MQRankPlayerCoin, &model.RankPlayerCoin{}) LogChannelSingleton.RegisterLogCName(mq.BackBankrupt, &model.BankruptLog{}) LogChannelSingleton.RegisterLogCName(mq.BackReliefund, &model.ReliefFundLog{}) - LogChannelSingleton.RegisterLogCName(model.EvtBindInvite, &model.BindInvite{}) - LogChannelSingleton.RegisterLogCName(mq.BackInviteScore, &model.InviteScore{}) + LogChannelSingleton.RegisterLogCName(model.EvtInvite, &model.EvtInviteMsg{}) LogChannelSingleton.RegisterLogCName(model.MQRankPlayerLevel, &model.PlayerLevelInfo{}) } diff --git a/worldsrv/mq_coinlog.go b/worldsrv/mq_coinlog.go index e78259f..01b9ec0 100644 --- a/worldsrv/mq_coinlog.go +++ b/worldsrv/mq_coinlog.go @@ -7,6 +7,7 @@ import ( "mongo.games.com/goserver/core/basic" "mongo.games.com/goserver/core/broker" "mongo.games.com/goserver/core/broker/rabbitmq" + "mongo.games.com/goserver/core/logger" "mongo.games.com/game/common" "mongo.games.com/game/model" @@ -41,31 +42,49 @@ func init() { return nil }, broker.Queue(model.TopicProbeCoinLogAck), rabbitmq.DurableQueue()) - // 绑定数量同步 - mq.RegisterSubscriber(model.AckBindNum, func(e broker.Event) error { + // 邀请数据同步 + mq.RegisterSubscriber(model.EvtInviteAck, func(e broker.Event) error { msg := e.Message() if msg != nil { defer func() { e.Ack() }() - var log model.BindNum + var log model.EvtInviteAckMsg err := json.Unmarshal(msg.Body, &log) if err != nil { return err } + logger.Logger.Tracef("EvtInviteAckMsg: %+v", log) + //通知主线程执行后续操作 core.CoreObject().SendCommand(basic.CommandWrapper(func(o *basic.Object) error { - player := PlayerMgrSington.GetPlayerBySnId(log.SnId) + player := PlayerMgrSington.GetPlayerBySnId(log.Snid) if player != nil { - player.InviteNum = log.Num + // 邀请数量 + player.INum = log.Num player.ResetTaskN(common.TaskTypeInviteNum) - TaskSubjectSingleton.Touch(common.TaskTypeInviteNum, &TaskData{SnId: player.SnId, Num: int64(player.InviteNum)}) + TaskSubjectSingleton.Touch(common.TaskTypeInviteNum, &TaskData{SnId: player.SnId, Num: player.INum}) + + // 邀请积分 + player.IScore = log.Score + player.ResetTaskN(common.TaskTypeInviteScore) + TaskSubjectSingleton.Touch(common.TaskTypeInviteScore, &TaskData{ + SnId: player.SnId, + Num: log.Score, + }) + // 充值金额 + player.IMoney = log.Money + player.ResetTaskN(common.TaskTypeInviteRecharge) + TaskSubjectSingleton.Touch(common.TaskTypeInviteRecharge, &TaskData{ + SnId: player.SnId, + Num: log.Money, + }) } return nil }), true) } return nil - }, broker.Queue(model.AckBindNum), rabbitmq.DurableQueue()) + }, broker.Queue(model.EvtInviteAck), rabbitmq.DurableQueue()) } diff --git a/worldsrv/player.go b/worldsrv/player.go index 315069d..ad3a894 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -146,7 +146,6 @@ type Player struct { // 最后玩的游戏id LastGameId int GameID []int32 // 最近三天玩的游戏 - InviteNum int32 // 邀请人数 ApplyList []int32 //玩家申请好友记录 } @@ -2222,8 +2221,6 @@ func (this *Player) OnDayTimer(login, continuous bool, t int) { for _, v := range srvdata.TaskMgr.GetActivityType(common.TaskActivityTypeEveryDay) { this.WelfData.Task[v.GetId()] = &model.TaskData{} } - this.WelfData.Task[common.TaskIDInvitePlayGame] = &model.TaskData{} - this.WelfData.Task[common.TaskIDInviteFirstLogin] = &model.TaskData{} } } //周卡数据更新 @@ -2312,6 +2309,8 @@ func (this *Player) OnWeekTimer() { } } // 重置周任务 + // 重置邀请积分 + CheckNewWeek(this.Platform, this.SnId) } func (this *Player) GetName() string { @@ -2452,10 +2451,10 @@ func (this *Player) SendDiffData() { pack.UpdateField += UpdateField_PhoneScore } // 邀请积分 - if this.diffData.InviteScore != this.InviteScore { + if this.diffData.InviteScore != this.IScore { dirty = true - pack.InviteScore = this.InviteScore - this.diffData.InviteScore = this.InviteScore + pack.InviteScore = this.IScore + this.diffData.InviteScore = this.IScore pack.UpdateField += UpdateField_InviteScore } //总充值金额 @@ -4372,97 +4371,38 @@ func (this *Player) PhoneLotteryTask(taskId int32, num int64) { } func (this *Player) InviteTask(scoreType int32, gameId int32, n int64) { - if this.InviteSnId == 0 { + if this.PSnId == 0 { return } - if this.WelfData == nil { - this.WelfData = model.NewWelfareData() - } - if this.WelfData.Task == nil { - this.WelfData.Task = make(map[int32]*model.TaskData) - } + cfg := PlatformMgrSingleton.GetConfig(this.Platform).ActInviteConfig switch scoreType { case common.InviteScoreTypeBind: - SaveInviteScore(&model.InviteScore{ - Platform: this.Platform, - SnId: this.SnId, - InviteSnId: this.InviteSnId, - Tp: scoreType, - Score: 5000, - Ts: time.Now().UnixNano(), - }) - case common.InviteScoreTypeLogin: - if this.WelfData.Task[common.TaskIDInviteFirstLogin] == nil { - this.WelfData.Task[common.TaskIDInviteFirstLogin] = &model.TaskData{} // 初始化任务数据 - } - if this.WelfData.Task[common.TaskIDInviteFirstLogin].Ts == 0 { - this.WelfData.Task[common.TaskIDInviteFirstLogin].Ts = time.Now().Unix() + case common.InviteScoreTypePay: + score, ok := cfg.GetPayScore()[n] + if ok { SaveInviteScore(&model.InviteScore{ Platform: this.Platform, SnId: this.SnId, - InviteSnId: this.InviteSnId, + InviteSnId: this.PSnId, Tp: scoreType, - Score: 1000, - Ts: time.Now().UnixNano(), + Score: score, + Ts: time.Now().Unix(), + Money: n, }) - } - - case common.InviteScoreTypePlayTimes: - if this.WelfData.Task[common.TaskIDInvitePlayGame] == nil { - this.WelfData.Task[common.TaskIDInvitePlayGame] = &model.TaskData{} // 初始化任务数据 - } - if this.WelfData.Task[common.TaskIDInvitePlayGame].Ts == 0 { - this.WelfData.Task[common.TaskIDInvitePlayGame].Ts = time.Now().Unix() + } else { SaveInviteScore(&model.InviteScore{ Platform: this.Platform, SnId: this.SnId, - InviteSnId: this.InviteSnId, - Tp: scoreType, - Score: 5000, - Ts: time.Now().UnixNano(), + InviteSnId: this.PSnId, + Tp: common.InviteScoreTypeRecharge, + Score: cfg.GetRechargeScore(), + Ts: time.Now().Unix(), + Money: n, }) } - - case common.InviteScoreTypeRecharge: - if this.WelfData.Task[common.TaskIDInviteRecharge] == nil { - this.WelfData.Task[common.TaskIDInviteRecharge] = &model.TaskData{} // 初始化任务数据 - } - this.WelfData.Task[common.TaskIDInviteRecharge].N += n - a := this.WelfData.Task[common.TaskIDInviteRecharge].N / 100 - this.WelfData.Task[common.TaskIDInviteRecharge].N %= 100 - SaveInviteScore(&model.InviteScore{ - Platform: this.Platform, - SnId: this.SnId, - InviteSnId: this.InviteSnId, - Tp: scoreType, - Score: a * common.InviteScoreRecharge, - Ts: time.Now().UnixNano(), - Money: n, - }) - - case common.InviteScoreTypeGameTimes: - score := 0 - switch { - case srvdata.GameFreeMgr.IsGameDif(gameId, common.GameDifTienlen): - score = 500 - case srvdata.GameFreeMgr.IsGameDif(gameId, common.GameDifThirteen): - score = 300 - case srvdata.GameFreeMgr.IsGameDif(gameId, common.GameDifRocket): - score = 30 - case srvdata.GameFreeMgr.IsGameDif(gameId, common.GameDifChess): - score = 100 - } - SaveInviteScore(&model.InviteScore{ - Platform: this.Platform, - SnId: this.SnId, - InviteSnId: this.InviteSnId, - Tp: scoreType, - Score: int64(score), - Ts: time.Now().UnixNano(), - }) } } diff --git a/worldsrv/taskmgr.go b/worldsrv/taskmgr.go index cc7ad77..13cd8ca 100644 --- a/worldsrv/taskmgr.go +++ b/worldsrv/taskmgr.go @@ -96,21 +96,18 @@ func (t *TaskHandle) TaskUpdate(id int, data any) { case common.TaskTypeWinTimes: // 赢游戏次数 case common.TaskTypePlayTimes: // 玩游戏次数 - p.InviteTask(common.InviteScoreTypePlayTimes, int32(info.GameID), num) - p.InviteTask(common.InviteScoreTypeGameTimes, int32(info.GameID), num) case common.TaskTypeRankMatchTimes: // 排位赛次数 case common.TaskTypePay: // 玩家充值 p.PhoneLotteryTask(common.TaskTypePay, num) - p.InviteTask(common.InviteScoreTypeRecharge, int32(info.GameID), num) + p.InviteTask(common.InviteScoreTypePay, int32(info.GameID), num) case common.TaskTypeWinOrLose: // 游戏输赢金币数量 p.PhoneLotteryTask(common.TaskTypeWinOrLose, num) case common.TaskTypeTienlenCount: //tienlen游戏场次 p.PhoneLotteryTask(common.TaskTypeTienlenCount, 1) case common.TaskTypeBindInviter: // 绑定邀请人数量 - p.InviteTask(common.InviteScoreTypeBind, 0, num) case common.TaskTypeWinCoin: // 赢取金币数量 @@ -123,7 +120,6 @@ func (t *TaskHandle) TaskUpdate(id int, data any) { case common.TaskTypeFirstLogin: //抽奖次数增加 p.PhoneLotteryTask(common.TaskTypeFirstLogin, 0) - p.InviteTask(common.InviteScoreTypeLogin, int32(info.GameID), num) p.CollectTask(common.TaskTypeFirstLogin, num) case common.TaskTypeInviteNum: diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index aa4afbf..63b84df 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -2468,7 +2468,7 @@ func init() { if len(ret.List) > 0 { playerRankScore = ret.List[0] } - playerBagInfo = model.GetBagInfo(id, platform) + playerBagInfo, _ = model.GetBagInfo(id, platform) return data }), task.CompleteNotifyWrapper(func(data interface{}, t task.Task) { playerData, ok := data.(*model.PlayerData) @@ -2559,7 +2559,7 @@ func init() { for _, v := range ret.List { playerRankScore[v.SnId] = v //todo 优化 - items := model.GetBagInfo(v.SnId, msg.GetPlatform()) + items, _ := model.GetBagInfo(v.SnId, msg.GetPlatform()) playerItems[v.SnId] = items }