From 756f52dd63bf3671f2446a8ec892f70c7d40dd5f Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 3 Jan 2025 09:31:34 +0800 Subject: [PATCH 1/5] =?UTF-8?q?modify=20=E7=BA=A2=E5=8C=85=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 40 ++++++++++++++++++++-------------------- worldsrv/welfmgr.go | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index a9bcd29..4f7b904 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -133,19 +133,19 @@ func init() { RedList: []*webapi.RedInfo{ { Num: 1, - Rate: 50, + Rate: 5000, }, { Num: 10, - Rate: 10, + Rate: 1000, }, { Num: 20, - Rate: 10, + Rate: 1000, }, { Num: 30, - Rate: 10, + Rate: 1000, }, }, }, @@ -162,19 +162,19 @@ func init() { RedList: []*webapi.RedInfo{ { Num: 1, - Rate: 50, + Rate: 5000, }, { Num: 10, - Rate: 10, + Rate: 1000, }, { Num: 20, - Rate: 10, + Rate: 1000, }, { Num: 30, - Rate: 10, + Rate: 1000, }, }, }, @@ -191,19 +191,19 @@ func init() { RedList: []*webapi.RedInfo{ { Num: 1, - Rate: 50, + Rate: 5000, }, { Num: 10, - Rate: 10, + Rate: 1000, }, { Num: 20, - Rate: 10, + Rate: 1000, }, { Num: 30, - Rate: 10, + Rate: 1000, }, }, }, @@ -220,19 +220,19 @@ func init() { RedList: []*webapi.RedInfo{ { Num: 1, - Rate: 50, + Rate: 5000, }, { Num: 10, - Rate: 10, + Rate: 1000, }, { Num: 20, - Rate: 10, + Rate: 1000, }, { Num: 30, - Rate: 10, + Rate: 1000, }, }, }, @@ -249,19 +249,19 @@ func init() { RedList: []*webapi.RedInfo{ { Num: 1, - Rate: 50, + Rate: 5000, }, { Num: 10, - Rate: 10, + Rate: 1000, }, { Num: 20, - Rate: 10, + Rate: 1000, }, { Num: 30, - Rate: 10, + Rate: 1000, }, }, }, diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index 198d2c3..eb48281 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -2384,7 +2384,7 @@ func (this *WelfareMgr) GetRedPacket(p *Player, id int64) *welfare.SCRedPacketDr f := func() { // 概率抽奖 rate := 0 - n := rand.Int63n(100) + n := rand.Int63n(10000) for _, v := range cfg.GetRedList() { rate += int(v.GetRate()) if n < int64(rate) { From ff09361a1cd03aaac1a763944de827e849865a5c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 7 Jan 2025 13:30:27 +0800 Subject: [PATCH 2/5] add tools/benchmark --- tools/benchmark/action_login.go | 95 ++++++++++++++++++++++++++ tools/benchmark/config.go | 35 ++++++++++ tools/benchmark/config.yaml | 65 ++++++++++++++++++ tools/benchmark/connect.go | 69 +++++++++++++++++++ tools/benchmark/constants.go | 31 +++++++++ tools/benchmark/gatesessionhandler.go | 97 +++++++++++++++++++++++++++ tools/benchmark/logger.xml | 22 ++++++ tools/benchmark/main.go | 25 +++++++ 8 files changed, 439 insertions(+) create mode 100644 tools/benchmark/action_login.go create mode 100644 tools/benchmark/config.go create mode 100644 tools/benchmark/config.yaml create mode 100644 tools/benchmark/connect.go create mode 100644 tools/benchmark/constants.go create mode 100644 tools/benchmark/gatesessionhandler.go create mode 100644 tools/benchmark/logger.xml create mode 100644 tools/benchmark/main.go diff --git a/tools/benchmark/action_login.go b/tools/benchmark/action_login.go new file mode 100644 index 0000000..56cb89c --- /dev/null +++ b/tools/benchmark/action_login.go @@ -0,0 +1,95 @@ +package main + +import ( + "encoding/json" + "fmt" + "math/rand" + "mongo.games.com/goserver/core/timer" + "time" + + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + + "mongo.games.com/game/model" + "mongo.games.com/game/proto" + loginproto "mongo.games.com/game/protocol/login" + playerproto "mongo.games.com/game/protocol/player" +) + +func init() { + // 心跳 + netlib.Register(int(loginproto.GatePacketID_PACKET_SC_PONG), loginproto.SCPong{}, SCPong) + // 登录 + netlib.Register(int(loginproto.LoginPacketID_PACKET_SC_LOGIN), loginproto.SCLogin{}, SCLogin) + // 玩家信息 + netlib.Register(int(playerproto.PlayerPacketID_PACKET_SC_PLAYERDATA), playerproto.SCPlayerData{}, SCPlayerData) +} + +func SCPong(s *netlib.Session, packetid int, data interface{}) error { + accountID := s.GetAttribute(SessionAttributeClientAccountId) + logger.Logger.Tracef("SCPong username:%v %v", accountID, data) + return nil +} + +func SCLogin(s *netlib.Session, packetid int, data interface{}) error { + logger.Logger.Trace("SCLogin ", data) + + msg, ok := data.(*loginproto.SCLogin) + if !ok { + return nil + } + + if msg.GetOpRetCode() != loginproto.OpResultCode_OPRC_Sucess { + accountID := s.GetAttribute(SessionAttributeClientAccountId) + logger.Logger.Error("登录失败 ", accountID) + s.Close() + return nil + } + + csPlayerData := &playerproto.CSPlayerData{ + AccId: msg.GetAccId(), + } + pp := &model.PlayerParams{ + Platform: 1, + Ip: fmt.Sprintf("%v.%v.%v.%v", 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255), 1+rand.Int31n(255)), + City: "北京", + Logininmodel: "app", + } + d, err := json.Marshal(pp) + if err == nil { + csPlayerData.Params = proto.String(string(d)) + } + + s.Send(int(playerproto.PlayerPacketID_PACKET_CS_PLAYERDATA), csPlayerData) + logger.Logger.Info("登录成功 ", msg.GetAccId()) + return nil +} + +func SCPlayerData(s *netlib.Session, packetid int, data interface{}) error { + logger.Logger.Trace("SCPlayerData ", data) + msg, ok := data.(*playerproto.SCPlayerData) + if !ok { + return nil + } + + if msg.GetOpRetCode() != playerproto.OpResultCode_OPRC_Sucess { + accountID := s.GetAttribute(SessionAttributeClientAccountId) + logger.Logger.Errorf("获取玩家信息失败 %v", accountID) + s.Close() + return nil + } + + s.SetAttribute(SessionAttributeUser, msg) + + StartSessionPingTimer(s, timer.TimerActionWrapper(func(h timer.TimerHandle, ud interface{}) bool { + if !s.IsConned() { + StopSessionPingTimer(s) + return false + } + pack := &loginproto.CSPing{} + s.Send(int(loginproto.GatePacketID_PACKET_CS_PING), pack) + return true + }), nil, time.Second*time.Duration(60+rand.Int31n(100)), -1) + + return nil +} diff --git a/tools/benchmark/config.go b/tools/benchmark/config.go new file mode 100644 index 0000000..a90ad75 --- /dev/null +++ b/tools/benchmark/config.go @@ -0,0 +1,35 @@ +package main + +import ( + "mongo.games.com/goserver/core" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" +) + +var Config = &Configuration{} + +type Configuration struct { + Count int // 机器人总数 + AppId string // appID + Connects netlib.SessionConfig // 网络连接配置 +} + +func (this *Configuration) Name() string { + return "benchmark" +} + +func (this *Configuration) Init() error { + logger.Logger.Tracef("%+v", *this) + if this.Count == 0 { + this.Count = 20 + } + return nil +} + +func (this *Configuration) Close() error { + return nil +} + +func init() { + core.RegistePackage(Config) +} diff --git a/tools/benchmark/config.yaml b/tools/benchmark/config.yaml new file mode 100644 index 0000000..b8d3d9c --- /dev/null +++ b/tools/benchmark/config.yaml @@ -0,0 +1,65 @@ +netlib: + SrvInfo: + Name: BenchmarkServer + Type: 9 + Id: 902 + AreaID: 1 + Banner: + - ================= + - benchmark server + - ================= + IoServices: [] +module: + Options: + QueueBacklog: 1024 + MaxDone: 1024 + Interval: 100 +executor: + Options: + QueueBacklog: 1024 + MaxDone: 1024 + Interval: 0 + Worker: + WorkerCnt: 8 + Options: + QueueBacklog: 1024 + MaxDone: 1024 + Interval: 0 +timer: + Options: + QueueBacklog: 1024 + MaxDone: 1024 + Interval: 100 +signal: + SupportSignal: true +benchmark: + Count: 100 + AppId: 5c56d1644966f078bfb90c71 + Connects: + Id: 402 + Type: 4 + AreaId: 1 + Name: ClientService + Ip: 127.0.0.1 + Port: 11001 + Protocol: tcp + Path: / + MaxDone: 200 + MaxPend: 200 + MaxPacket: 65535 + MaxConn: 2000 + RcvBuff: 4096 + SndBuff: 4096 + WriteTimeout: 3600 + ReadTimeout: 3600 + SoLinger: 10 + IsInnerLink: true + NoDelay: true + SupportFragment: true + AuthKey: www.jxjy.games.cn + IsClient: true + AllowMultiConn: true + FilterChain: + - session-filter-auth + HandlerChain: + - handler-gate-session diff --git a/tools/benchmark/connect.go b/tools/benchmark/connect.go new file mode 100644 index 0000000..a580173 --- /dev/null +++ b/tools/benchmark/connect.go @@ -0,0 +1,69 @@ +package main + +import ( + "time" + + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/module" + "mongo.games.com/goserver/core/netlib" +) + +const ( + // RobotSessionStartId 机器人session开始id + RobotSessionStartId = 100000000 +) + +var ( + BenchMarkModule = &BenchMark{} + WaitConnectSessions []*netlib.SessionConfig +) + +// NewSession 新建session +// id 连接id, 默认自动分配 +func NewSession(id ...int) { + cfg := Config.Connects + if len(id) > 0 && id[0] > 0 { + cfg.Id = id[0] + } else { + BenchMarkModule.idx++ + cfg.Id = BenchMarkModule.idx + } + cfg.Init() + logger.Logger.Info("waite connect session id=", cfg.Id) + WaitConnectSessions = append(WaitConnectSessions, &cfg) +} + +type BenchMark struct { + idx int +} + +func (m *BenchMark) ModuleName() string { + return "benchmark-module" +} + +func (m *BenchMark) Init() { + m.idx = RobotSessionStartId + for i := 0; i < Config.Count; i++ { + NewSession() + } +} + +// Update 机器开始连接游戏服务器 +func (m *BenchMark) Update() { + n := len(WaitConnectSessions) + if n > 0 { + config := WaitConnectSessions[n-1] + WaitConnectSessions = WaitConnectSessions[:n-1] + if err := netlib.Connect(config); err != nil { + logger.Logger.Error("netlib.Connect error", err) + } + } +} + +func (m *BenchMark) Shutdown() { + module.UnregisteModule(m) +} + +func init() { + module.RegisteModule(BenchMarkModule, time.Millisecond, 1) +} diff --git a/tools/benchmark/constants.go b/tools/benchmark/constants.go new file mode 100644 index 0000000..8a87971 --- /dev/null +++ b/tools/benchmark/constants.go @@ -0,0 +1,31 @@ +package main + +import ( + "mongo.games.com/goserver/core/netlib" + "mongo.games.com/goserver/core/timer" + "time" +) + +const ( + SessionAttributeClientAccountId int = iota // 账号 + SessionAttributeUser + SessionAttributePingTimer +) + +func StartSessionPingTimer(s *netlib.Session, act timer.TimerAction, ud interface{}, interval time.Duration, times int) bool { + StopSessionPingTimer(s) + if hTimer, ok := timer.StartTimer(act, ud, interval, times); ok { + s.SetAttribute(SessionAttributePingTimer, hTimer) + return true + } + return false +} + +func StopSessionPingTimer(s *netlib.Session) { + if h, ok := s.GetAttribute(SessionAttributePingTimer).(timer.TimerHandle); ok { + if h != timer.TimerHandle(0) { + timer.StopTimer(h) + s.RemoveAttribute(SessionAttributePingTimer) + } + } +} diff --git a/tools/benchmark/gatesessionhandler.go b/tools/benchmark/gatesessionhandler.go new file mode 100644 index 0000000..e6b06d7 --- /dev/null +++ b/tools/benchmark/gatesessionhandler.go @@ -0,0 +1,97 @@ +package main + +import ( + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "math/rand" + "mongo.games.com/game/common" + "mongo.games.com/game/model" + loginproto "mongo.games.com/game/protocol/login" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/goserver/core/netlib" + "strconv" + "sync/atomic" + "time" +) + +/* + 添加到客户端管理器,管理器负责登录 + 当连接断开时,从管理器中移除,判断是否需要重连 +*/ + +const ( + GateSessionHandlerName = "handler-gate-session" +) + +type GateSessionHandler struct { + netlib.BasicSessionHandler +} + +func (g *GateSessionHandler) GetName() string { + return GateSessionHandlerName +} + +func (g *GateSessionHandler) GetInterestOps() uint { + return 1< + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/benchmark/main.go b/tools/benchmark/main.go new file mode 100644 index 0000000..b1fe17b --- /dev/null +++ b/tools/benchmark/main.go @@ -0,0 +1,25 @@ +package main + +import ( + _ "mongo.games.com/game" + + "mongo.games.com/goserver/core" + "mongo.games.com/goserver/core/module" +) + +func main() { + defer core.ClosePackages() + core.LoadPackages("config.yaml") + // core hook + core.RegisteHook(core.HOOK_BEFORE_START, func() error { + + return nil + }) + core.RegisteHook(core.HOOK_AFTER_STOP, func() error { + + return nil + }) + // module模块 + waiter := module.Start() + waiter.Wait("main()") +} From 97c826b5f8f2a370aced6d1f3da25e5851b08177 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 7 Jan 2025 14:27:06 +0800 Subject: [PATCH 3/5] =?UTF-8?q?add=20=E6=8E=A8=E5=B8=81=E6=9C=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 1 + data/DB_GameFree.dat | Bin 26128 -> 26313 bytes data/DB_GameFree.json | 45 +++++++++++++++++++++++++--------- data/DB_GameRule.dat | Bin 1472 -> 1497 bytes data/DB_GameRule.json | 6 +++++ data/DB_NewYearRankReward.dat | 36 +++++++++++++-------------- data/DB_PigBank_Diamond.dat | 2 +- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 6587 -> 6587 bytes data/gameconfig/pushcoin.json | 9 +++++++ xlsx/DB_GameFree.xlsx | Bin 66855 -> 67214 bytes xlsx/DB_GameRule.xlsx | Bin 13519 -> 13622 bytes 12 files changed, 68 insertions(+), 31 deletions(-) create mode 100644 data/gameconfig/pushcoin.json diff --git a/common/constant.go b/common/constant.go index 6f68feb..96b3e89 100644 --- a/common/constant.go +++ b/common/constant.go @@ -99,6 +99,7 @@ const ( GameId_AngerUncle = 606 // 愤怒大叔 GameId_SmallRoket = 607 // 小火箭 GameId_Clawdoll = 608 // 娃娃机 + GameId_PushCoin = 609 // 推币机 __GameId_ThrGame_Min__ = 700 //################三方类################ GameId_Thr_Dg = 701 //DG Game GameId_Thr_XHJ = 901 ///DG Game diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 752e96ad0e9db10049c6a4668827cae16eae72db..aa44140c4cad8e60165d49525a3f892510f090fd 100644 GIT binary patch delta 410 zcmbPmhVkTC#tr>WjJqdKaFXEXd^T;vv(E0Pb9O0QX0&)S`69dMhgm#51j20J`PTt@&737RVlNsGnoN>+_YeAhkmWEV$1$iZ%!5$b1h=`H zv%Qx}MRJ96OuY4(Nr>}V--@R@8lM3J?jeiCliSP=tR9RR%pHtC<_-|?ijl2DeS+VN m(hW?EhnSen3@lGDFWjGHG(nBga+<-*oZ;*X1m`89BB=_-2#4+!h1P z*K-GIHk=&bKAU9+Bgdi1hVDSkMw9tGKqjyE0GoW#18njUkR%7AiNX~|iwjF9|96=O eGXE$ delta 7 Ocmcb~eSmwz0agGFxdSBt diff --git a/data/DB_GameRule.json b/data/DB_GameRule.json index 4860e87..eacbcca 100644 --- a/data/DB_GameRule.json +++ b/data/DB_GameRule.json @@ -267,6 +267,12 @@ "Name": "娃娃机", "GameId": 608, "GameDif": "608" + }, + { + "Id": 60900, + "Name": "推币机", + "GameId": 609, + "GameDif": "609" } ] } \ No newline at end of file diff --git a/data/DB_NewYearRankReward.dat b/data/DB_NewYearRankReward.dat index 2b3cb98..c92b5e9 100644 --- a/data/DB_NewYearRankReward.dat +++ b/data/DB_NewYearRankReward.dat @@ -1,6 +1,6 @@ -"""d -"d"" +""d" +""d" ""d" ""d ""c @@ -12,7 +12,7 @@  ""^   ""] -  ""\ +  "\"   ""[ ""Z ""Y @@ -20,30 +20,30 @@ ""W ""V ""U -"T" +""T ""S ""R ""Q ""P ""O ""N -"M" +""M ""L ""K ""J ""I   ""H -!!"G" +!!""G """"F ##""E $$""D %%""C &&"B" ''""A -((""@ -)"""d +(("@" +)""d" *""d" -+"""d ++"d"" ,""d -""c .""b @@ -55,25 +55,25 @@ 3 ""] 4 ""\ 5 ""[ -6"Z" +6""Z 7""Y -8""X +8"X" 9"W" :""V ;""U <""T =""S ->""R -?"Q" +>"R" +?""Q @""P A""O B""N -C"M" +C""M D""L -E"K" -F""J +E""K +F"J" G""I -H "H" +H ""H I!""G J"""F K#""E @@ -81,4 +81,4 @@ M%""C N&""B O'""A -P("@" \ No newline at end of file +P(""@ \ No newline at end of file diff --git a/data/DB_PigBank_Diamond.dat b/data/DB_PigBank_Diamond.dat index 3a06af9..735a0e1 100644 --- a/data/DB_PigBank_Diamond.dat +++ b/data/DB_PigBank_Diamond.dat @@ -1,4 +1,4 @@  (8@;PdX`c -< ((22Ÿ8@;JƸJPdX` +< ((2Ÿ28@;JƸJPdX` ?/ 2(2Ÿ28@;JƸJPdX` \ No newline at end of file diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index cc7f1961579ffb3a487a7ae7441980a203308cf4..92f7bc5071a0ff00ec26bae5bbd626a8aebaa965 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUwevm;IUweP%|WscWx~fEfU@0PHZJ17Hq;IRIwC T9k9dMITisu`h}T`fwm9;VzN9n diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 0bbbaa0ab05e8dafb8ad3e2199d1ec359f12da08..bcc88b2da37afd585132ee135f7824a785b2771b 100644 GIT binary patch delta 223 zcmdmOyxVvKC!-)6$C6$)0WL2Nj)g$_LL2jBDaKZ)s0fni2F6OLs1a1Op|fhU6%#9q z5GPpcg3~h?z1TP|wlNEcYz}05$|wji^1*T;pztD~;mniWIn05EfY_{1Llzv8+uYC5 z%{V!YS7fpt*Kepa6IA-ZES||$+(whHaf)qj;$~u;{ESOv^9-J+jFTsG3U2P>(`ABc PfO+6Ri|yt!0`EBh8p1#s delta 237 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 delta 50986 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 delta 4664 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 BgdhL_ From ab6427c18c4190322d268014ea010022ec0f16fb Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 7 Jan 2025 16:00:01 +0800 Subject: [PATCH 4/5] =?UTF-8?q?add=20=E6=8E=A8=E5=B8=81=E6=9C=BA=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/doc.md | 4 + protocol/pushcoin/pushcoin.pb.go | 1156 ++++++++++++++++++++++++++++++ protocol/pushcoin/pushcoin.proto | 103 +++ 3 files changed, 1263 insertions(+) create mode 100644 protocol/pushcoin/pushcoin.pb.go create mode 100644 protocol/pushcoin/pushcoin.proto diff --git a/protocol/doc.md b/protocol/doc.md index e8d8f01..7d605b1 100644 --- a/protocol/doc.md +++ b/protocol/doc.md @@ -193,5 +193,9 @@ - 5660~5669 +### pushcoin.proto + +- 5670~5679 + ### game.proto(玩家离开) - 8000~8099 \ No newline at end of file diff --git a/protocol/pushcoin/pushcoin.pb.go b/protocol/pushcoin/pushcoin.pb.go new file mode 100644 index 0000000..c6219d5 --- /dev/null +++ b/protocol/pushcoin/pushcoin.pb.go @@ -0,0 +1,1156 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1-devel +// protoc v3.19.4 +// source: protocol/pushcoin/pushcoin.proto + +package pushcoin + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// 5670~5679 +type PushCoinPacketID int32 + +const ( + PushCoinPacketID_PACKET_PushCoin_ZERO PushCoinPacketID = 0 // 弃用消息号 + PushCoinPacketID_PACKET_SCPushCoinRoomInfo PushCoinPacketID = 5670 // 房间信息 + PushCoinPacketID_PACKET_SCPushCoinRoomState PushCoinPacketID = 5671 // 房间状态 + PushCoinPacketID_PACKET_CSPushCoinPlayerOp PushCoinPacketID = 5672 // 玩家操作 + PushCoinPacketID_PACKET_SCPushCoinPlayerOp PushCoinPacketID = 5673 // 玩家操作返回 +) + +// Enum value maps for PushCoinPacketID. +var ( + PushCoinPacketID_name = map[int32]string{ + 0: "PACKET_PushCoin_ZERO", + 5670: "PACKET_SCPushCoinRoomInfo", + 5671: "PACKET_SCPushCoinRoomState", + 5672: "PACKET_CSPushCoinPlayerOp", + 5673: "PACKET_SCPushCoinPlayerOp", + } + PushCoinPacketID_value = map[string]int32{ + "PACKET_PushCoin_ZERO": 0, + "PACKET_SCPushCoinRoomInfo": 5670, + "PACKET_SCPushCoinRoomState": 5671, + "PACKET_CSPushCoinPlayerOp": 5672, + "PACKET_SCPushCoinPlayerOp": 5673, + } +) + +func (x PushCoinPacketID) Enum() *PushCoinPacketID { + p := new(PushCoinPacketID) + *p = x + return p +} + +func (x PushCoinPacketID) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PushCoinPacketID) Descriptor() protoreflect.EnumDescriptor { + return file_protocol_pushcoin_pushcoin_proto_enumTypes[0].Descriptor() +} + +func (PushCoinPacketID) Type() protoreflect.EnumType { + return &file_protocol_pushcoin_pushcoin_proto_enumTypes[0] +} + +func (x PushCoinPacketID) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PushCoinPacketID.Descriptor instead. +func (PushCoinPacketID) EnumDescriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{0} +} + +type OpCodes int32 + +const ( + OpCodes_OP_Zero OpCodes = 0 + OpCodes_OP_Bet OpCodes = 1 // 下注 [下注金额] + OpCodes_OP_Gain OpCodes = 2 // 得分 [得分金额] + OpCodes_OP_Shake OpCodes = 3 // 震动 [消耗次数] + OpCodes_OP_Refresh OpCodes = 4 // 刷新 [桌面金额] + OpCodes_OP_Exchange OpCodes = 5 // 兑换 [兑换id] + OpCodes_OP_Draw OpCodes = 6 // 抽奖 [抽奖id] +) + +// Enum value maps for OpCodes. +var ( + OpCodes_name = map[int32]string{ + 0: "OP_Zero", + 1: "OP_Bet", + 2: "OP_Gain", + 3: "OP_Shake", + 4: "OP_Refresh", + 5: "OP_Exchange", + 6: "OP_Draw", + } + OpCodes_value = map[string]int32{ + "OP_Zero": 0, + "OP_Bet": 1, + "OP_Gain": 2, + "OP_Shake": 3, + "OP_Refresh": 4, + "OP_Exchange": 5, + "OP_Draw": 6, + } +) + +func (x OpCodes) Enum() *OpCodes { + p := new(OpCodes) + *p = x + return p +} + +func (x OpCodes) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OpCodes) Descriptor() protoreflect.EnumDescriptor { + return file_protocol_pushcoin_pushcoin_proto_enumTypes[1].Descriptor() +} + +func (OpCodes) Type() protoreflect.EnumType { + return &file_protocol_pushcoin_pushcoin_proto_enumTypes[1] +} + +func (x OpCodes) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OpCodes.Descriptor instead. +func (OpCodes) EnumDescriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{1} +} + +type OpResultCode int32 + +const ( + OpResultCode_OPRC_Success OpResultCode = 0 //成功 + OpResultCode_OPRC_Error OpResultCode = 1 //失败 +) + +// Enum value maps for OpResultCode. +var ( + OpResultCode_name = map[int32]string{ + 0: "OPRC_Success", + 1: "OPRC_Error", + } + OpResultCode_value = map[string]int32{ + "OPRC_Success": 0, + "OPRC_Error": 1, + } +) + +func (x OpResultCode) Enum() *OpResultCode { + p := new(OpResultCode) + *p = x + return p +} + +func (x OpResultCode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OpResultCode) Descriptor() protoreflect.EnumDescriptor { + return file_protocol_pushcoin_pushcoin_proto_enumTypes[2].Descriptor() +} + +func (OpResultCode) Type() protoreflect.EnumType { + return &file_protocol_pushcoin_pushcoin_proto_enumTypes[2] +} + +func (x OpResultCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OpResultCode.Descriptor instead. +func (OpResultCode) EnumDescriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{2} +} + +//房间信息 +//PACKET_SCPushCoinRoomInfo +type SCPushCoinRoomInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RoomId int32 `protobuf:"varint,1,opt,name=RoomId,proto3" json:"RoomId,omitempty"` //房间id + GameId int32 `protobuf:"varint,2,opt,name=GameId,proto3" json:"GameId,omitempty"` //游戏id + RoomMode int32 `protobuf:"varint,3,opt,name=RoomMode,proto3" json:"RoomMode,omitempty"` //游戏模式 + Params []int32 `protobuf:"varint,4,rep,packed,name=Params,proto3" json:"Params,omitempty"` //规则参数 + State int32 `protobuf:"varint,5,opt,name=State,proto3" json:"State,omitempty"` //房间当前状态 + TimeOut int32 `protobuf:"varint,6,opt,name=TimeOut,proto3" json:"TimeOut,omitempty"` //等待剩余时间 单位:秒 + Players []*PushCoinPlayerData `protobuf:"bytes,7,rep,name=Players,proto3" json:"Players,omitempty"` //房间内的玩家信息 + ExchangeList []*ExchangeInfo `protobuf:"bytes,8,rep,name=ExchangeList,proto3" json:"ExchangeList,omitempty"` //兑换信息 + DrawList []*DrawInfo `protobuf:"bytes,9,rep,name=DrawList,proto3" json:"DrawList,omitempty"` //抽奖信息 +} + +func (x *SCPushCoinRoomInfo) Reset() { + *x = SCPushCoinRoomInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCPushCoinRoomInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCPushCoinRoomInfo) ProtoMessage() {} + +func (x *SCPushCoinRoomInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SCPushCoinRoomInfo.ProtoReflect.Descriptor instead. +func (*SCPushCoinRoomInfo) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{0} +} + +func (x *SCPushCoinRoomInfo) GetRoomId() int32 { + if x != nil { + return x.RoomId + } + return 0 +} + +func (x *SCPushCoinRoomInfo) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +func (x *SCPushCoinRoomInfo) GetRoomMode() int32 { + if x != nil { + return x.RoomMode + } + return 0 +} + +func (x *SCPushCoinRoomInfo) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +func (x *SCPushCoinRoomInfo) GetState() int32 { + if x != nil { + return x.State + } + return 0 +} + +func (x *SCPushCoinRoomInfo) GetTimeOut() int32 { + if x != nil { + return x.TimeOut + } + return 0 +} + +func (x *SCPushCoinRoomInfo) GetPlayers() []*PushCoinPlayerData { + if x != nil { + return x.Players + } + return nil +} + +func (x *SCPushCoinRoomInfo) GetExchangeList() []*ExchangeInfo { + if x != nil { + return x.ExchangeList + } + return nil +} + +func (x *SCPushCoinRoomInfo) GetDrawList() []*DrawInfo { + if x != nil { + return x.DrawList + } + return nil +} + +type ItemInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ItemId int32 `protobuf:"varint,1,opt,name=ItemId,proto3" json:"ItemId,omitempty"` //道具id + ItemNum int32 `protobuf:"varint,2,opt,name=ItemNum,proto3" json:"ItemNum,omitempty"` //道具数量 +} + +func (x *ItemInfo) Reset() { + *x = ItemInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ItemInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItemInfo) ProtoMessage() {} + +func (x *ItemInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ItemInfo.ProtoReflect.Descriptor instead. +func (*ItemInfo) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{1} +} + +func (x *ItemInfo) GetItemId() int32 { + if x != nil { + return x.ItemId + } + return 0 +} + +func (x *ItemInfo) GetItemNum() int32 { + if x != nil { + return x.ItemNum + } + return 0 +} + +type ExchangeInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //兑换id + Cost []*ItemInfo `protobuf:"bytes,2,rep,name=Cost,proto3" json:"Cost,omitempty"` //消耗道具 + Gain []*ItemInfo `protobuf:"bytes,3,rep,name=Gain,proto3" json:"Gain,omitempty"` //获得道具 + ShakeTimes int32 `protobuf:"varint,4,opt,name=ShakeTimes,proto3" json:"ShakeTimes,omitempty"` //获得震动次数 +} + +func (x *ExchangeInfo) Reset() { + *x = ExchangeInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExchangeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExchangeInfo) ProtoMessage() {} + +func (x *ExchangeInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExchangeInfo.ProtoReflect.Descriptor instead. +func (*ExchangeInfo) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{2} +} + +func (x *ExchangeInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ExchangeInfo) GetCost() []*ItemInfo { + if x != nil { + return x.Cost + } + return nil +} + +func (x *ExchangeInfo) GetGain() []*ItemInfo { + if x != nil { + return x.Gain + } + return nil +} + +func (x *ExchangeInfo) GetShakeTimes() int32 { + if x != nil { + return x.ShakeTimes + } + return 0 +} + +type DrawInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` //抽奖id + ItemId int32 `protobuf:"varint,2,opt,name=ItemId,proto3" json:"ItemId,omitempty"` //道具id + ItemNum int32 `protobuf:"varint,3,opt,name=ItemNum,proto3" json:"ItemNum,omitempty"` //道具数量 + Coin int64 `protobuf:"varint,4,opt,name=Coin,proto3" json:"Coin,omitempty"` //价值 +} + +func (x *DrawInfo) Reset() { + *x = DrawInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DrawInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DrawInfo) ProtoMessage() {} + +func (x *DrawInfo) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DrawInfo.ProtoReflect.Descriptor instead. +func (*DrawInfo) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{3} +} + +func (x *DrawInfo) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *DrawInfo) GetItemId() int32 { + if x != nil { + return x.ItemId + } + return 0 +} + +func (x *DrawInfo) GetItemNum() int32 { + if x != nil { + return x.ItemNum + } + return 0 +} + +func (x *DrawInfo) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +type PushCoinPlayerData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` //名字 + SnId int32 `protobuf:"varint,2,opt,name=SnId,proto3" json:"SnId,omitempty"` //账号 + Head int32 `protobuf:"varint,3,opt,name=Head,proto3" json:"Head,omitempty"` //头像 + Sex int32 `protobuf:"varint,4,opt,name=Sex,proto3" json:"Sex,omitempty"` //性别 + Coin int64 `protobuf:"varint,5,opt,name=Coin,proto3" json:"Coin,omitempty"` //金币 + Flag int32 `protobuf:"varint,6,opt,name=Flag,proto3" json:"Flag,omitempty"` //二进制标记 第一位:是否掉线(0:在线 1:掉线) 第二位:是否准备(0:未准备 1:已准备) + Params []string `protobuf:"bytes,7,rep,name=Params,proto3" json:"Params,omitempty"` //其他数据 如:ip 等 + VIP int32 `protobuf:"varint,8,opt,name=VIP,proto3" json:"VIP,omitempty"` + RoleId int32 `protobuf:"varint,9,opt,name=RoleId,proto3" json:"RoleId,omitempty"` //使用中的角色id + Level int64 `protobuf:"varint,10,opt,name=Level,proto3" json:"Level,omitempty"` //玩家等级 + Exp int64 `protobuf:"varint,11,opt,name=Exp,proto3" json:"Exp,omitempty"` //玩家经验 + SkinId int32 `protobuf:"varint,12,opt,name=SkinId,proto3" json:"SkinId,omitempty"` //皮肤id + ShakeTimes int32 `protobuf:"varint,13,opt,name=ShakeTimes,proto3" json:"ShakeTimes,omitempty"` //可震动次数 + BaseCoin int64 `protobuf:"varint,14,opt,name=BaseCoin,proto3" json:"BaseCoin,omitempty"` //当前底分(单次投币金额) + PowerLine int64 `protobuf:"varint,15,opt,name=PowerLine,proto3" json:"PowerLine,omitempty"` // 当前能量值 + PowerLineMax int64 `protobuf:"varint,16,opt,name=PowerLineMax,proto3" json:"PowerLineMax,omitempty"` // 能量值上限 + RefreshTimes int64 `protobuf:"varint,17,opt,name=RefreshTimes,proto3" json:"RefreshTimes,omitempty"` // 刷新次数 +} + +func (x *PushCoinPlayerData) Reset() { + *x = PushCoinPlayerData{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PushCoinPlayerData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushCoinPlayerData) ProtoMessage() {} + +func (x *PushCoinPlayerData) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[4] + 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 PushCoinPlayerData.ProtoReflect.Descriptor instead. +func (*PushCoinPlayerData) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{4} +} + +func (x *PushCoinPlayerData) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PushCoinPlayerData) GetSnId() int32 { + if x != nil { + return x.SnId + } + return 0 +} + +func (x *PushCoinPlayerData) GetHead() int32 { + if x != nil { + return x.Head + } + return 0 +} + +func (x *PushCoinPlayerData) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *PushCoinPlayerData) GetCoin() int64 { + if x != nil { + return x.Coin + } + return 0 +} + +func (x *PushCoinPlayerData) GetFlag() int32 { + if x != nil { + return x.Flag + } + return 0 +} + +func (x *PushCoinPlayerData) GetParams() []string { + if x != nil { + return x.Params + } + return nil +} + +func (x *PushCoinPlayerData) GetVIP() int32 { + if x != nil { + return x.VIP + } + return 0 +} + +func (x *PushCoinPlayerData) GetRoleId() int32 { + if x != nil { + return x.RoleId + } + return 0 +} + +func (x *PushCoinPlayerData) GetLevel() int64 { + if x != nil { + return x.Level + } + return 0 +} + +func (x *PushCoinPlayerData) GetExp() int64 { + if x != nil { + return x.Exp + } + return 0 +} + +func (x *PushCoinPlayerData) GetSkinId() int32 { + if x != nil { + return x.SkinId + } + return 0 +} + +func (x *PushCoinPlayerData) GetShakeTimes() int32 { + if x != nil { + return x.ShakeTimes + } + return 0 +} + +func (x *PushCoinPlayerData) GetBaseCoin() int64 { + if x != nil { + return x.BaseCoin + } + return 0 +} + +func (x *PushCoinPlayerData) GetPowerLine() int64 { + if x != nil { + return x.PowerLine + } + return 0 +} + +func (x *PushCoinPlayerData) GetPowerLineMax() int64 { + if x != nil { + return x.PowerLineMax + } + return 0 +} + +func (x *PushCoinPlayerData) GetRefreshTimes() int64 { + if x != nil { + return x.RefreshTimes + } + return 0 +} + +//房间状态 +//PACKET_SCPushCoinRoomState +type SCPushCoinRoomState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + State int32 `protobuf:"varint,1,opt,name=State,proto3" json:"State,omitempty"` //房间当前状态 + SubState int32 `protobuf:"varint,2,opt,name=SubState,proto3" json:"SubState,omitempty"` //房间当前子状态 + Params []int32 `protobuf:"varint,3,rep,packed,name=Params,proto3" json:"Params,omitempty"` //状态参数 +} + +func (x *SCPushCoinRoomState) Reset() { + *x = SCPushCoinRoomState{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCPushCoinRoomState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCPushCoinRoomState) ProtoMessage() {} + +func (x *SCPushCoinRoomState) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[5] + 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 SCPushCoinRoomState.ProtoReflect.Descriptor instead. +func (*SCPushCoinRoomState) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{5} +} + +func (x *SCPushCoinRoomState) GetState() int32 { + if x != nil { + return x.State + } + return 0 +} + +func (x *SCPushCoinRoomState) GetSubState() int32 { + if x != nil { + return x.SubState + } + return 0 +} + +func (x *SCPushCoinRoomState) GetParams() []int32 { + if x != nil { + return x.Params + } + return nil +} + +//玩家操作 +//PACKET_CSPushCoinPlayerOp +type CSPushCoinPlayerOp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpCode OpCodes `protobuf:"varint,1,opt,name=OpCode,proto3,enum=pushcoin.OpCodes" json:"OpCode,omitempty"` + OpParam []int64 `protobuf:"varint,2,rep,packed,name=OpParam,proto3" json:"OpParam,omitempty"` +} + +func (x *CSPushCoinPlayerOp) Reset() { + *x = CSPushCoinPlayerOp{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSPushCoinPlayerOp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSPushCoinPlayerOp) ProtoMessage() {} + +func (x *CSPushCoinPlayerOp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[6] + 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 CSPushCoinPlayerOp.ProtoReflect.Descriptor instead. +func (*CSPushCoinPlayerOp) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{6} +} + +func (x *CSPushCoinPlayerOp) GetOpCode() OpCodes { + if x != nil { + return x.OpCode + } + return OpCodes_OP_Zero +} + +func (x *CSPushCoinPlayerOp) GetOpParam() []int64 { + if x != nil { + return x.OpParam + } + return nil +} + +//PACKET_SCPushCoinPlayerOp +type SCPushCoinPlayerOp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpRetCode OpResultCode `protobuf:"varint,1,opt,name=OpRetCode,proto3,enum=pushcoin.OpResultCode" json:"OpRetCode,omitempty"` + OpCode OpCodes `protobuf:"varint,2,opt,name=OpCode,proto3,enum=pushcoin.OpCodes" json:"OpCode,omitempty"` + Exchange *ExchangeInfo `protobuf:"bytes,3,opt,name=Exchange,proto3" json:"Exchange,omitempty"` // 兑换信息,加到背包 + Draw *DrawInfo `protobuf:"bytes,4,opt,name=Draw,proto3" json:"Draw,omitempty"` // 抽奖信息,掉落到桌面 +} + +func (x *SCPushCoinPlayerOp) Reset() { + *x = SCPushCoinPlayerOp{} + if protoimpl.UnsafeEnabled { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SCPushCoinPlayerOp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SCPushCoinPlayerOp) ProtoMessage() {} + +func (x *SCPushCoinPlayerOp) ProtoReflect() protoreflect.Message { + mi := &file_protocol_pushcoin_pushcoin_proto_msgTypes[7] + 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 SCPushCoinPlayerOp.ProtoReflect.Descriptor instead. +func (*SCPushCoinPlayerOp) Descriptor() ([]byte, []int) { + return file_protocol_pushcoin_pushcoin_proto_rawDescGZIP(), []int{7} +} + +func (x *SCPushCoinPlayerOp) GetOpRetCode() OpResultCode { + if x != nil { + return x.OpRetCode + } + return OpResultCode_OPRC_Success +} + +func (x *SCPushCoinPlayerOp) GetOpCode() OpCodes { + if x != nil { + return x.OpCode + } + return OpCodes_OP_Zero +} + +func (x *SCPushCoinPlayerOp) GetExchange() *ExchangeInfo { + if x != nil { + return x.Exchange + } + return nil +} + +func (x *SCPushCoinPlayerOp) GetDraw() *DrawInfo { + if x != nil { + return x.Draw + } + return nil +} + +var File_protocol_pushcoin_pushcoin_proto protoreflect.FileDescriptor + +var file_protocol_pushcoin_pushcoin_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x63, + 0x6f, 0x69, 0x6e, 0x2f, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x08, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x22, 0xcc, 0x02, 0x0a, + 0x12, 0x53, 0x43, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x47, + 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x47, 0x61, 0x6d, + 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x75, 0x74, 0x12, 0x36, 0x0a, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, + 0x6f, 0x69, 0x6e, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, + 0x3a, 0x0a, 0x0c, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x44, + 0x72, 0x61, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x44, 0x72, 0x61, 0x77, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x08, 0x44, 0x72, 0x61, 0x77, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x0a, 0x08, 0x49, + 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x22, 0x8e, 0x01, 0x0a, 0x0c, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x04, 0x43, 0x6f, + 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, + 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x43, 0x6f, + 0x73, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x47, 0x61, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x68, + 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x53, 0x68, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x22, 0x60, 0x0a, 0x08, 0x44, 0x72, + 0x61, 0x77, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x49, 0x74, 0x65, 0x6d, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x22, 0xae, 0x03, 0x0a, + 0x12, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, + 0x65, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x53, 0x65, + 0x78, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x56, 0x49, 0x50, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x56, 0x49, 0x50, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x78, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x45, 0x78, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x6b, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x53, + 0x68, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x53, 0x68, 0x61, 0x6b, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x42, + 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x42, + 0x61, 0x73, 0x65, 0x43, 0x6f, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x6f, 0x77, 0x65, 0x72, + 0x4c, 0x69, 0x6e, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x50, 0x6f, 0x77, 0x65, + 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x4c, 0x69, + 0x6e, 0x65, 0x4d, 0x61, 0x78, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x50, 0x6f, 0x77, + 0x65, 0x72, 0x4c, 0x69, 0x6e, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x22, 0x0a, 0x0c, 0x52, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x22, 0x5f, 0x0a, + 0x13, 0x53, 0x43, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x75, + 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x53, 0x75, + 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x59, + 0x0a, 0x12, 0x43, 0x53, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x4f, 0x70, 0x12, 0x29, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x2e, + 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x07, 0x4f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x22, 0xd1, 0x01, 0x0a, 0x12, 0x53, 0x43, + 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, + 0x12, 0x34, 0x0a, 0x09, 0x4f, 0x70, 0x52, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x4f, + 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x4f, 0x70, 0x52, + 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, + 0x6e, 0x2e, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x06, 0x4f, 0x70, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x32, 0x0a, 0x08, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x44, 0x72, 0x61, 0x77, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x2e, 0x44, + 0x72, 0x61, 0x77, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x44, 0x72, 0x61, 0x77, 0x2a, 0xad, 0x01, + 0x0a, 0x10, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x50, 0x75, 0x73, + 0x68, 0x43, 0x6f, 0x69, 0x6e, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x19, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, + 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0xa6, 0x2c, 0x12, 0x1f, 0x0a, 0x1a, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x69, + 0x6e, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x10, 0xa7, 0x2c, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xa8, 0x2c, 0x12, 0x1e, 0x0a, + 0x19, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, + 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x10, 0xa9, 0x2c, 0x2a, 0x6b, 0x0a, + 0x07, 0x4f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x50, 0x5f, 0x5a, + 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x50, 0x5f, 0x42, 0x65, 0x74, 0x10, + 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x50, 0x5f, 0x47, 0x61, 0x69, 0x6e, 0x10, 0x02, 0x12, 0x0c, + 0x0a, 0x08, 0x4f, 0x50, 0x5f, 0x53, 0x68, 0x61, 0x6b, 0x65, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, + 0x4f, 0x50, 0x5f, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, + 0x4f, 0x50, 0x5f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x10, 0x05, 0x12, 0x0b, 0x0a, + 0x07, 0x4f, 0x50, 0x5f, 0x44, 0x72, 0x61, 0x77, 0x10, 0x06, 0x2a, 0x30, 0x0a, 0x0c, 0x4f, 0x70, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, + 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, + 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x42, 0x28, 0x5a, 0x26, + 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x70, 0x75, + 0x73, 0x68, 0x63, 0x6f, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_protocol_pushcoin_pushcoin_proto_rawDescOnce sync.Once + file_protocol_pushcoin_pushcoin_proto_rawDescData = file_protocol_pushcoin_pushcoin_proto_rawDesc +) + +func file_protocol_pushcoin_pushcoin_proto_rawDescGZIP() []byte { + file_protocol_pushcoin_pushcoin_proto_rawDescOnce.Do(func() { + file_protocol_pushcoin_pushcoin_proto_rawDescData = protoimpl.X.CompressGZIP(file_protocol_pushcoin_pushcoin_proto_rawDescData) + }) + return file_protocol_pushcoin_pushcoin_proto_rawDescData +} + +var file_protocol_pushcoin_pushcoin_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_protocol_pushcoin_pushcoin_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_protocol_pushcoin_pushcoin_proto_goTypes = []interface{}{ + (PushCoinPacketID)(0), // 0: pushcoin.PushCoinPacketID + (OpCodes)(0), // 1: pushcoin.OpCodes + (OpResultCode)(0), // 2: pushcoin.OpResultCode + (*SCPushCoinRoomInfo)(nil), // 3: pushcoin.SCPushCoinRoomInfo + (*ItemInfo)(nil), // 4: pushcoin.ItemInfo + (*ExchangeInfo)(nil), // 5: pushcoin.ExchangeInfo + (*DrawInfo)(nil), // 6: pushcoin.DrawInfo + (*PushCoinPlayerData)(nil), // 7: pushcoin.PushCoinPlayerData + (*SCPushCoinRoomState)(nil), // 8: pushcoin.SCPushCoinRoomState + (*CSPushCoinPlayerOp)(nil), // 9: pushcoin.CSPushCoinPlayerOp + (*SCPushCoinPlayerOp)(nil), // 10: pushcoin.SCPushCoinPlayerOp +} +var file_protocol_pushcoin_pushcoin_proto_depIdxs = []int32{ + 7, // 0: pushcoin.SCPushCoinRoomInfo.Players:type_name -> pushcoin.PushCoinPlayerData + 5, // 1: pushcoin.SCPushCoinRoomInfo.ExchangeList:type_name -> pushcoin.ExchangeInfo + 6, // 2: pushcoin.SCPushCoinRoomInfo.DrawList:type_name -> pushcoin.DrawInfo + 4, // 3: pushcoin.ExchangeInfo.Cost:type_name -> pushcoin.ItemInfo + 4, // 4: pushcoin.ExchangeInfo.Gain:type_name -> pushcoin.ItemInfo + 1, // 5: pushcoin.CSPushCoinPlayerOp.OpCode:type_name -> pushcoin.OpCodes + 2, // 6: pushcoin.SCPushCoinPlayerOp.OpRetCode:type_name -> pushcoin.OpResultCode + 1, // 7: pushcoin.SCPushCoinPlayerOp.OpCode:type_name -> pushcoin.OpCodes + 5, // 8: pushcoin.SCPushCoinPlayerOp.Exchange:type_name -> pushcoin.ExchangeInfo + 6, // 9: pushcoin.SCPushCoinPlayerOp.Draw:type_name -> pushcoin.DrawInfo + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name +} + +func init() { file_protocol_pushcoin_pushcoin_proto_init() } +func file_protocol_pushcoin_pushcoin_proto_init() { + if File_protocol_pushcoin_pushcoin_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_protocol_pushcoin_pushcoin_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCPushCoinRoomInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protocol_pushcoin_pushcoin_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ItemInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protocol_pushcoin_pushcoin_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protocol_pushcoin_pushcoin_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DrawInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protocol_pushcoin_pushcoin_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PushCoinPlayerData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protocol_pushcoin_pushcoin_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCPushCoinRoomState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protocol_pushcoin_pushcoin_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSPushCoinPlayerOp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protocol_pushcoin_pushcoin_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SCPushCoinPlayerOp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_protocol_pushcoin_pushcoin_proto_rawDesc, + NumEnums: 3, + NumMessages: 8, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_protocol_pushcoin_pushcoin_proto_goTypes, + DependencyIndexes: file_protocol_pushcoin_pushcoin_proto_depIdxs, + EnumInfos: file_protocol_pushcoin_pushcoin_proto_enumTypes, + MessageInfos: file_protocol_pushcoin_pushcoin_proto_msgTypes, + }.Build() + File_protocol_pushcoin_pushcoin_proto = out.File + file_protocol_pushcoin_pushcoin_proto_rawDesc = nil + file_protocol_pushcoin_pushcoin_proto_goTypes = nil + file_protocol_pushcoin_pushcoin_proto_depIdxs = nil +} diff --git a/protocol/pushcoin/pushcoin.proto b/protocol/pushcoin/pushcoin.proto new file mode 100644 index 0000000..0bb87bf --- /dev/null +++ b/protocol/pushcoin/pushcoin.proto @@ -0,0 +1,103 @@ +syntax = "proto3"; +package pushcoin; +option go_package = "mongo.games.com/game/protocol/pushcoin"; + +// 5670~5679 +enum PushCoinPacketID { + PACKET_PushCoin_ZERO = 0;// 弃用消息号 + PACKET_SCPushCoinRoomInfo = 5670; // 房间信息 + PACKET_SCPushCoinRoomState = 5671; // 房间状态 + PACKET_CSPushCoinPlayerOp = 5672; // 玩家操作 + PACKET_SCPushCoinPlayerOp = 5673; // 玩家操作返回 +} + +//房间信息 +//PACKET_SCPushCoinRoomInfo +message SCPushCoinRoomInfo { + int32 RoomId = 1; //房间id + int32 GameId = 2; //游戏id + int32 RoomMode = 3; //游戏模式 + repeated int32 Params = 4; //规则参数 + int32 State = 5; //房间当前状态 + int32 TimeOut = 6; //等待剩余时间 单位:秒 + repeated PushCoinPlayerData Players = 7; //房间内的玩家信息 + repeated ExchangeInfo ExchangeList = 8; //兑换信息 + repeated DrawInfo DrawList = 9; //抽奖信息 +} + +message ItemInfo{ + int32 ItemId = 1; //道具id + int32 ItemNum = 2; //道具数量 +} + +message ExchangeInfo{ + int32 Id = 1; //兑换id + repeated ItemInfo Cost = 2; //消耗道具 + repeated ItemInfo Gain = 3; //获得道具 + int32 ShakeTimes = 4; //获得震动次数 +} + +message DrawInfo{ + int32 Id = 1; //抽奖id + int32 ItemId = 2; //道具id + int32 ItemNum = 3; //道具数量 + int64 Coin = 4; //价值 +} + +message PushCoinPlayerData { + string Name = 1; //名字 + int32 SnId = 2; //账号 + int32 Head = 3; //头像 + int32 Sex = 4; //性别 + int64 Coin = 5; //金币 + int32 Flag = 6; //二进制标记 第一位:是否掉线(0:在线 1:掉线) 第二位:是否准备(0:未准备 1:已准备) + repeated string Params = 7; //其他数据 如:ip 等 + int32 VIP = 8; + int32 RoleId = 9; //使用中的角色id + int64 Level = 10; //玩家等级 + int64 Exp = 11; //玩家经验 + int32 SkinId = 12; //皮肤id + int32 ShakeTimes = 13; //可震动次数 + int64 BaseCoin = 14; //当前底分(单次投币金额) + int64 PowerLine = 15; // 当前能量值 + int64 PowerLineMax = 16; // 能量值上限 + int64 RefreshTimes = 17; // 刷新次数 +} + +//房间状态 +//PACKET_SCPushCoinRoomState +message SCPushCoinRoomState { + int32 State = 1; //房间当前状态 + int32 SubState = 2; //房间当前子状态 + repeated int32 Params = 3; //状态参数 +} + +//玩家操作 +//PACKET_CSPushCoinPlayerOp +message CSPushCoinPlayerOp { + OpCodes OpCode = 1; + repeated int64 OpParam = 2; +} + +enum OpCodes { + OP_Zero = 0; + OP_Bet = 1; // 下注 [下注金额] + OP_Gain = 2; // 得分 [得分金额] + OP_Shake = 3; // 震动 [消耗次数] + OP_Refresh = 4; // 刷新 [桌面金额] + OP_Exchange = 5; // 兑换 [兑换id] + OP_Draw = 6; // 抽奖 [抽奖id] +} + +enum OpResultCode { + OPRC_Success = 0; //成功 + OPRC_Error = 1; //失败 +} + +//PACKET_SCPushCoinPlayerOp +message SCPushCoinPlayerOp { + OpResultCode OpRetCode = 1; + OpCodes OpCode = 2; + ExchangeInfo Exchange = 3; // 兑换信息,加到背包 + DrawInfo Draw = 4; // 抽奖信息,掉落到桌面 +} \ No newline at end of file From ac0daa39a4cb13d66979bf62a47c55b5a7616c3e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 8 Jan 2025 11:24:09 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix=20=E7=BA=A2=E5=8C=85=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/welfmgr.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index c9eea81..ce183c9 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -5,6 +5,7 @@ import ( "math" "math/rand" "slices" + "sort" "time" "mongo.games.com/goserver/core/logger" @@ -2313,6 +2314,10 @@ func (this *WelfareMgr) SendRedPacketInfo(p *Player) *welfare.SCRedPacketInfo { } } + sort.Slice(pack.Info, func(i, j int) bool { + return pack.Info[i].StartTs < pack.Info[j].StartTs + }) + p.SendToClient(int(welfare.SPacketID_PACKET_SCRedPacketInfo), pack) return pack }