From 5c6dce2f4db7631de8ab309d2b60e53f658d8190 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 10:54:28 +0800 Subject: [PATCH 01/41] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E5=9C=BA=E4=B8=AD?= =?UTF-8?q?=E9=80=94=E4=B8=8D=E8=83=BD=E7=A6=BB=E5=BC=80=E6=88=BF=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/tienlen/scenepolicy_tienlen.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index a64bbd5..46bf98c 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -2765,7 +2765,10 @@ func (this *SceneBilledStateTienLen) OnLeave(s *base.Scene) { continue } player_data.Clear() - if sceneEx.IsMatchScene() { + if sceneEx.IsCustom() { + player_data.UnmarkFlag(base.PlayerState_WaitNext) + } + if sceneEx.IsMatchScene() || sceneEx.IsCustom() { continue } if !player_data.IsOnLine() { From 034abb64e2c373d6ccfd23edc514600f09d196f9 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 11:20:49 +0800 Subject: [PATCH 02/41] =?UTF-8?q?=E7=89=8C=E5=B1=80=E5=9B=9E=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index fd3f0f7..592b308 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -117,6 +117,8 @@ func NewScene(args *CreateSceneParam) *Scene { KeyGameDif: args.GetDBGameFree().GetGameDif(), } s.CycleID, _ = model.AutoIncGameLogId() + s.rrVer = ReplayRecorderVer[gameId] + s.RecordReplayStart() s.init() return s } From df04ede6710870af568d430e48098368b7f7fed2 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 15:53:09 +0800 Subject: [PATCH 03/41] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 682e8f3..d789cca 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 682e8f3ccf7d1056210c3ee68c9d1db271d9069d +Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 From d16c1a188703e501e5e666d9686c8eef81870ac4 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 17:15:05 +0800 Subject: [PATCH 04/41] =?UTF-8?q?=E4=BF=AE=E6=94=B9log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/srvsessmgr.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gamesrv/base/srvsessmgr.go b/gamesrv/base/srvsessmgr.go index c401c26..3e95b69 100644 --- a/gamesrv/base/srvsessmgr.go +++ b/gamesrv/base/srvsessmgr.go @@ -1,7 +1,6 @@ package base import ( - "fmt" "mongo.games.com/game/common" "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" @@ -32,7 +31,7 @@ func (this *SrvSessMgr) OnRegiste(s *netlib.Session) { } else if srvInfo.GetType() == 10 { logger.Logger.Warn("(this *SrvSessMgr) OnRegiste (Machine):", s) s.Send(int(machine.DollMachinePacketID_PACKET_SMGameLinkSucceed), &machine.SMGameLinkSucceed{}) - fmt.Printf("与娃娃机服务器连接成功\n") + logger.Logger.Info("与娃娃机服务器连接成功\n") } } } From 92bf5fe16ec0d28c272a37444c02e8ecad8b7c10 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 18:09:09 +0800 Subject: [PATCH 05/41] review --- gamesrv/action/action_server.go | 91 +++++++++++++++++---------------- gamesrv/base/scene.go | 4 +- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 8826281..664ab9b 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -73,7 +73,7 @@ func HandleWGBuyRecTimeItem(session *netlib.Session, packetId int, data interfac // return nil //} -func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) error { +func CreateScene(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("receive CreateScene %v", data) msg, ok := data.(*server.WGCreateScene) if !ok { @@ -86,52 +86,53 @@ func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) return nil } +func DestroyScene(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Trace("receive WGDestroyScene:", data) + msg, ok := data.(*server.WGDestroyScene) + if !ok { + return nil + } + + if !msg.IsGrace { + // 立刻删除,不管游戏是否结束 + for _, v := range msg.Ids { + s := base.SceneMgrSington.GetScene(int(v)) + if s == nil { + continue + } + if gameScene, ok := s.ExtraData.(base.GameScene); ok { + gameScene.SceneDestroy(true) + } + } + return nil + } + + // 游戏结束后删除房间 + for _, v := range msg.Ids { + s := base.SceneMgrSington.GetScene(int(v)) + if s == nil { + continue + } + if s.IsHundredScene() || s.Gaming { + s.SetGraceDestroy() + } else { + if s.IsMatchScene() { + s.SetGraceDestroy() + } + if gameScene, ok := s.ExtraData.(base.GameScene); ok { + gameScene.SceneDestroy(true) + } + } + } + + return nil +} + func init() { // 创建房间 - netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateSceneHandler) - - //删除场景 - // 立刻删除,不管游戏是否结束 - netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), netlib.PacketFactoryWrapper(func() interface{} { - return &server.WGDestroyScene{} - })) - netlib.RegisterHandler(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { - logger.Logger.Trace("receive WGDestroyScene:", pack) - msg, ok := pack.(*server.WGDestroyScene) - if !ok { - return nil - } - if !msg.IsGrace { - // 立刻删除,不管游戏是否结束 - for _, v := range msg.Ids { - s := base.SceneMgrSington.GetScene(int(v)) - if s != nil { - if gameScene, ok := s.ExtraData.(base.GameScene); ok { - gameScene.SceneDestroy(true) - } - } - } - } else { - // 游戏结束后删除房间 - for _, v := range msg.Ids { - s := base.SceneMgrSington.GetScene(int(v)) - if s != nil { - if s.IsHundredScene() || s.Gaming { - s.SetGraceDestroy(true) - } else { - if s.IsMatchScene() { - s.SetGraceDestroy(true) - } - if gameScene, ok := s.ExtraData.(base.GameScene); ok { - gameScene.SceneDestroy(true) - } - } - } - } - } - - return nil - })) + netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateScene) + // 删除房间 + netlib.Register(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), &server.WGDestroyScene{}, DestroyScene) //玩家进入 netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_PLAYERENTER), netlib.PacketFactoryWrapper(func() interface{} { diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 5f5b0e3..66b37f2 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -297,8 +297,8 @@ func (this *Scene) SetScenePolicy(sp ScenePolicy) { func (this *Scene) GetGraceDestroy() bool { return this.graceDestroy } -func (this *Scene) SetGraceDestroy(graceDestroy bool) { - this.graceDestroy = graceDestroy +func (this *Scene) SetGraceDestroy() { + this.graceDestroy = true } func (this *Scene) GetCpControlled() bool { From 7c00ec5067ae6e8868df7d581c77bddff91c6e9c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 18:42:49 +0800 Subject: [PATCH 06/41] =?UTF-8?q?=E9=81=93=E5=85=B7=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/u_bag.go | 14 ++++++++++++-- worldsrv/trascate_webapi.go | 10 ++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/dbproxy/svc/u_bag.go b/dbproxy/svc/u_bag.go index 48afcfd..cc07df2 100644 --- a/dbproxy/svc/u_bag.go +++ b/dbproxy/svc/u_bag.go @@ -101,7 +101,8 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { for id, v := range args.BagItem { if item, exist := bag.BagItem[id]; !exist { if v.ItemNum <= 0 { - continue + err = errors.New("item num not enough") + break } bag.BagItem[id] = &model.Item{ ItemId: v.ItemId, @@ -110,7 +111,8 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { } } else { if v.ItemNum < 0 && -v.ItemNum > item.ItemNum { - v.ItemNum = -item.ItemNum + err = errors.New("item num not enough") + break } item.ItemNum += v.ItemNum } @@ -119,10 +121,18 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { vCard = v.ItemNum } } + + if err != nil { + *ret = false + logger.Logger.Errorf("AddBagItem error: %v", err) + return err + } + _, err = cbag.Upsert(bson.M{"_id": bag.BagId}, bag) if err != nil { *ret = false logger.Logger.Info("AddBagItem error ", err) + return err } // v卡返还 diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 454fedd..bb2e4e6 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -3761,15 +3761,21 @@ func init() { p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p != nil { //获取道具Id - BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + _, _, ok := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, GainWay: msg.GetTypeId(), Operator: "system", Remark: msg.GetRemark(), }) + if !ok { + logger.Logger.Errorf("player delete %v err: %v", msg, err) + pack.Tag = webapiproto.TagCode_FAILED + pack.Msg = "修改道具失败" + return common.ResponseTag_Ok, pack + } pack.Tag = webapiproto.TagCode_SUCCESS - pack.Msg = "AddItem success" + pack.Msg = "修改道具成功" return common.ResponseTag_Ok, pack } else { BagMgrSingleton.AddItemsOffline(msg.Platform, msg.Snid, items, msg.GetTypeId(), From e23f33c5696bd8e429c247d71bb9f8fbe6454500 Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:01:15 +0800 Subject: [PATCH 07/41] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index d789cca..fd8bef9 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit fd8bef907ea15489504529da70f72038444b54e0 From c4a0a31df87209c880c42d733746c83c4b0d90c0 Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:01:50 +0800 Subject: [PATCH 08/41] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A8=83=E5=A8=83?= =?UTF-8?q?=E6=9C=BAID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index fd8bef9..cbad299 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit fd8bef907ea15489504529da70f72038444b54e0 +Subproject commit cbad2992a1ce71327def46ea01ebbcc8800bee89 From d8f01f39ea50eb5fc309f56bb5416b107bdaf44b Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:52:45 +0800 Subject: [PATCH 09/41] =?UTF-8?q?=E5=A8=83=E5=A8=83=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 --- data/DB_GameFree.dat | Bin 24124 -> 24124 bytes data/DB_GameFree.json | 8 ++++---- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_GameFree.xlsx | Bin 65652 -> 65611 bytes 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 10d42c96c3bcf614300371a1a122b24f45367bd7..93a0b0dac5767b64a722fe8e0c39d8872bfd7cab 100644 GIT binary patch delta 41 pcmdn9hjGsy#tj={CZCDsp1eCI8%irp4vzJlydg$+@<}kQ1puW<6FmR` delta 41 pcmdn9hjGsy#tj={CeMl0oqRXO6HEukdNMLi-Wa1Z`6QI32>_085nliR diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 564a1f9..b08696a 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -6674,7 +6674,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6707,7 +6707,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6740,7 +6740,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 @@ -6773,7 +6773,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 12cce5f4165edd740dfa268af25289251ffeba4c..f749192cb45516ddd8d43f5177f689fab68c6c6b 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Iq;j0RX>uu!1e?AVEdFf!R}~S`-p`rmV*WC5SRj(LAX2wb{Np0J5YzhJP7j$ T*aJ%J9E*S+{ld(}KwAg^W8yqD literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IZ(|9n+LQPrXQvc<_>iGVdg{3EhutQ)5;Pn8Kg(wCB#qU5J U4t9VNJI5lRN53$0G0+wQ0AwmWH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index f5a92be4c65bea8e256c4b0c15ec32c4d5e978b2..aa58b67c7d1ea52a98e78c86dc459b7bd13fbbd8 100644 GIT binary patch delta 149 zcmdn2xmk09p&%Q_l3q3eRxb{Yg+O}2A-RoC0*p{mIhbfK+va3O0j9|%93q?BnGIMc zi?EAKKFy&&c>S%8si^9!CDMhJ6qDc=T3HjYI=vzef# i9hk+#WzF&U3bTOFWJZ3m$szpRlT-KvH-F$i%mM&TX)6){ delta 218 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#nK1Q=nWy=+iXxy{Lp0!)Hz9E*TT7`>pH zdf7I&FdMT%g_)qj2WIh1KEYuG6=jBsK3FcanVYko87j;QGvkoltnP*Egk6w>%bMfy6=ngU$&CDBlSBBsCvRmIVC35Tf&VZI0GSv&9RL6T diff --git a/xlsx/DB_GameFree.xlsx b/xlsx/DB_GameFree.xlsx index f1116a6e4687dddf5b27d2f87645226c5d2e981c..ac8e3acd5896bd420cd510af7f056132f9b8d1cb 100644 GIT binary patch delta 19291 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 delta 19333 zcmb6AWmp_r*ENjd8Z2mV4K4{9+}$CN;Dit?jk^^DcXta8A-Hr1?gV$~#wEDBf1T`o z-_QGe?>X0X&JTK3Eml=^&o$!Y`qYh7j#nM%vBU@6rBw zZ^p6}ib!^wq$=cCrwAeacb&z+lb4?-QQN(`1 zk$?E~4VzjZ7=xb4!hyW!T5hjh{?0;5_XV^0&L!l?xk~60<`OaL#Yl2Ml~sC)f)Lpf z5Sf$WhO_w1v=pN6ATIM#U=t;^Oa+h8Dp=0Jt10|F_}s!Mg}UOZXLd_LE*K~lDdb+v z7e`t`IZ&ZuRofXpu=WoRq*svV==xYgi!Yd_DQN^LWqc?v7p1|eePT2U{76*vQKrK3 zu83|8Pu;mytxfU-tCkTF9R>To=wSb44IEs65E2{-TtdtfY3)07LIim71Y1l+zi;uW;$ zZ|q{GoXp(Z4)*5=R8l3AfFJMlZ7P2k6@I&yqHBKmjfr3xYV&3OirGZ z4yn3>T~3`|oWY^dW+|ASz1ct2@wsC3hlr^NZ0 zd#0zc%e=g&DM!n1@(xzjd~NeaPyLV?ZP=2J(7QaebQSbQ9|C^JM_0lzv|#Ru}>ff3hW^Gyl@5n`vG+@L-lXC3dd- z^#hvVaJERSA}%XHh_~r@l%tQJQfQc>Xvg(Jmo4DsWQ9@@=lfuh;lfj#VWj@w-f&*& z3Y%1r$B3e;;xz5Y+`%7b!slJrjBnyHP+8D$5X+JNqA4X6%& zSJB&S>JLf25#5cLxuFTImD#%|xfv4_L-qlU3yOgSBqcItiOSEE2tsCVcu#X(jHJ&O z@`8+{krwlki~9_=1VCTE%t*h zg$*gFJ?YK4Vd}s`Z9gpd!m!}ChI(6Oane!gZI%6*68tk22Ai@g!zacZ&YT3-dsdp{Yy)cYrbQ{`~ zLDqbU=f!`M?u2*Z=9Dno`idlca#+Ra4hZc!rNuEq=cFaFvpt2#2`8sSG3l7SCJ4yL zXugaZ+~~2Ps`mJE#Yx(S69~U-KCy8K2d%1|E$l=`%AxVsY+gjK&FNab-Ox);y*u-K zzNr+)CxThu(uGUH<(J0s97)h^8Jjk3+q(oCr-&KfQoTr{x=W=^KKB#zof^P_Y%WKN5uEBN zQP2$;kG9VXFF6IBl3^!3Hp@SvJleW!Di?x>9CS<7TNNqTT&z9t3zoi>S6+=TPO~>P z=`C))a&4^qSzir+t2+?DJSj#dc86oxhaswUg{Z%$1f_mcA}D|GMxs9W^~!IOjqBXY zS^OAD9K#2L8f%vgag_TQL0mCH39fXs>{;_jI~kmtYj9R;Irb^;eTdloPDtMYz&UVS z{8Klcm?u_fOJpIwEu^(%Gr;Din9A1tvNlUtaJKD%nt>FESwk0u%u|qO>&m$Mqt!iB z5+?RRI-Ej!5Yi{uh_eJVpsBB%o7n};2Ux+AXR)gIqjG{LME%5+dUVPjiya*4{2@@e zDBj(R8!$7cE%*rAo|RAjO7GNueq%ZQcfoWzXZXg~?EVQQe)R*w&3 zpbUPu{_{Koj{ESGW@m;TrMni?)6V+tKn2v+0+fQP`RjcyiWll>A4^&AgrLr9 z0)fW63kug=MwD4c%f7Kr>1w--+svAeZ}E(%5jJORkhc=4(kFO`2MHGWr||Z$HaqhY zWYwx=7{l%4bulqNKEo;3kSzpfGv%Mo(tJx{c^dgHc;vik*K`wOHRwJ`6y+?np?s?( z`RyFMP4*OPysz>krOK(f#1Z?${~9{8qN||KTB<jaRbdA_rl9WG|e{o1C#@@}dDe zr0h(QBKayBoU*kxDItz+QRQcAIOUBN1&sNl^#{$@{LQQnlIZg)gED81ip!^igBD8Y zcGey%DhG3y33nu9fXH+FBKpv_sS{(`$7zc0oamgw#veoE-C~Yw7LBOC2_nS)CxT&O zf-4dZ2-L%m1mdJq?@_WXR*?OswisYPZ&8daR7*Am?yP${S0QXNj z5JmmcvCI47D63)9xmZsAIPL`xx~KuW1fX^Axb?EYh~>%d)8>;(%2Pv*)9r#gf8fY@ z+eX1IfZ28u1J=^C*JIP%<%n(ae}q0?H-(-rt3&ZWg1$b@&|}P{?P>YHcJL?oP0#G-*^UO1cpowJ8LicmqXNJfJgY-bK`;BdfQuFx0}uP z=#BLnCDIvfJj6L^N5{{WVlrK~0dYaD;+Yq{0!XP78))LBYyX={Anmu>fhaD?{#&@o zdPZ>aADfY4^^D9{Tu_$aNOl01*yVDS+cs9zYG+Zv(0A(|)uAb5$?`c)#b!=X-R)V( zvgqT<-fd${$l?(t-ym6^m`cvZ4?>Ads_uMDLNOvge_%hcPw&UmXc=v@IFe%QEJo{m zCW&+|F{b5!Ww8zoQvR#rcVC4{mBR$%$jw4#W#cp!Jn|DazC^rQA}^WLs??)+cGu|M zc9+#my6CD+wCn2D;5~P+*%jV|y656UYnWp>d;0yX;iJoh7bmCAl94=ECnngl3S|?y zt|(LQd>!cEdy9kYB^;s9-0tL$cp1=P$LO_+-ofmEDfOw20!2k37>YTTdFyli(xap|J>En?3!K!=4&3 zs?5PD$r$czqUzuQ&sF#f&o42j4^DOyS&*7r?e%e;zk^5IpKU2}f~QU)hSMDUm*w+M z^8`cRDR1^V00@Q7=zc^dvnrSTR;@ydv8R+w*Nm#H{>mf&332-Ubqf zil<%bbu@l}5qjo7JTe*i+H9P;zyh+y^|^mb=rkl`2CcwcQpC9TLmmwNX0J3{?F9Wm zSC7?%pGNW=IB@FUV%uWY=W;UHtFk5Lza8+fwP+A!C#eDag$o~yobw=Gj2rxFC2=Sm z+f_B%M)!jZHklVC0h~xay$0?qZZwZy4}2d+!X4I)yBfEOoef6)qGhD%vb8Q`@-w*E ziFq;5e0V)dKmUt=P|H8zTwa>OHif0Zt_ldhrSu?^zy9E~s6p-n3p4Zz?U1hDE~8a? zyG#g8q_B6w!246pScvMm?T-JOq>~6rx=n0&pom@&p=#9UXSv%m6Z-RQzlUr%`C2iM z3ETM#cWhHDL0DvSQvN5pbh(w-Ea!GvV|_8!M+N~JJGnyXJpndviq9Q#Vk$O=oRGH# zCT^2xjHr>!p)h9drc9rxBhFF|LWn%n*H^1wZT#YqcImu(9qdeI=TE){jF5$Cdu7bw z%Ml;hZ0#n6x7e(VH~_wOyGmUGj#; z#V{-i9~Zf5dT9YryMIW8?f(Ob6iFWqg5S5U^dU_9=qFqn9xt>T7<@XdEV!a8UTyS$ z^R}fpeHGV4F^>+8Su6&A0TTP(#IsEf6-f=QV5}HUbFTK8@Mt?G-1{T=0@2FX$AXA< zaFOS&g8cytKgBj3*f^#s0C!w>oD+0!zvPSK-np2SSBv#BA&j9^EmT!3otV;JvwX`} z7WUxB5?_Mf6r5a6H-|iusI<)Ry!MvPt?)GV`Pa?!I;35Q>&w@MTj*w#Dh2*Ae>}*lv?e z`b@)EvLX~m#UZv$i50-9b8|F${=sRgqab^zn!o6JrezmVv{r*&${c;HrSnQ^w2E*2 ze3WI+ynRF#mv;ykC)r8ZosQ%%D{t`DQkdd1G4RaUhjMJgbYj_T+XT*lX?lj#tKE8F=TDXU5@I@D9*WK6ZHfzMK8#;7E@X zs&bUupOSz7mV4Y`-p61h8nP(b&je;!sC2y%^@!okUnF7>_!M2mYkv4DFV|Jd`J2YB z(3=LLI*ekHtclxygSUJ2Tx0i&MW#~g9A#X+Y0s1Q0NXgY%|;^~C+djuj=HW@^Xg&t z{k>cyl_6j&X3CiB-X)z!%}EmIxL2QByNeYjGf8lvy83|awR?P#bnj7F%0XO_PD$aK zVJEmid1MP;z9E&@AS{YuJTrT>S#;oN+a!H*X$xKHo&1H)unVeXmx`VuBe(35Zoz7p zrsa^?1w|&nh{i2+04V8L zs&80ML_Agq7tr$v9<;}=P2Iw?SxH+#PX0{e7tb~H;{FAq)J4VoE0Oc)9LD8(>fxYZ zw-`g*TR#w;ijQ;(vxviNc2$J>Pg5d^Na9Edp(n^#qXlFx^*7T1)-yBrU_Q1?RFQD2 zxb^V$O?SCw{-`?X_xYn~AGZ#}z)ahGO9U~CC926d{>2fF!S)3UW7&MliBJ=L_VqZU z;<1~0Y8D6OJ_azv-%)>d+@o;21Z{J#?UWM(;UAX^lD`FKX}~Os>!M z9V^mZG3iynwqGE@npy>Mz_%&kC-r-T_@M+s8XDl(H$=pN32Vd7^BsW*WFxzA-dn46 zT(NHTgaXXOG|(Y(26^!l`D#dtpE3bf2LlaUphFmwbO$J?5Uz3C08l;0G+*W743mHn z(Vq-yw80e0nxr1)+C|`DuSSw>dZV>-F``D{Rj@eSu~TOW zT$$h>*z%1XTA!sCzh48TlP(pZeg|7&z_!^Bw#~bspVLc4cd+3{(&iKZ^-t7A0xGN~S{dTu{ai7puOhLVj{4&FlAy)Ou5&D4LI@CD9X}PoB~l z<32rs9mz+64deiI+ZH}&ofaAw%k;b@=H_KnxvCQ>-o@eb?J6iNaC!7=$JdE(m@*Ul!;;`0Mr)Ote3 zd;3i+4flGxyZ$fSwhkd&6sV4)n{M~;k9PcuBH!7j#|+LJu3h?W^Dc3N-(j04*{~Z}f3pSuX0h@fZ>~?}O6DgZPjjRfbAayVlKWzDy#&qY7_S!({eCeZ+EPyR zrRF1K@Z2ihQsDKH=c@5?M2;<+iK6hTN#{?Kw|}z3>H;!0FSpZ9tcS&nsp%e^&~4CI z0%m&Y937f{em;nOGnhHUvr;CkSXuS?N5pf3seI_QSuOMO20pLdh7j-1wi>{urmZ$7 zJno~x8RivFKg28S;pnJlJL599Y53M(=pmZ&cdRhA{A_4+bcwS6Wumxd5y|H!xe(cN z%VpBsRLisvRm=Q`>8iLRs_#2Ib199E<5K|73yZsos7osf)IDf@5pjN)6z6c01!@zngg zIU%o+dzBxIO!X!I5_*+#sZWeKpvbPg@$NHK_WGCOiXK~J1+O~suBJYC+}jl?aT!g) z<6z}D7RyG z72Ttn7v5JD!A}<4mmCkAA};ox=6~KKn;U3U`>hqDqqP62UixNZv8`TGt^QtJ_t8SE zurD(918vqTJYklXUquQ72=Gy$Mh31>XOd`u7nMSwC?Bkb=t`H3KTHIkL+={c(81j})bQBEX|l-%03 zk+O&g`wU-@D!=+b?#jl!DY&mf9&yDqSePm=q!VqGq#l#E5~ZZyT3TC|S`{@_OxA3e zV9Bfks9AJ;=^r?DBJv1{_KdHTF&%3+%=%35`@h5!()wTGsXhdGrg~*it}Yd2 zzzR#ilI!wsR=y#&62_w0?A8^;_F<}Bbk6|KKh+ugLVCMit{VHNZd$jy4T6JW_Mar< z`Nr6fXy=zhtw<*(lPC+gCg*K2d-^lY;{Q*I$zDjG$?t`^Mx?842`#%e^ZWZue%~ET zJ0O#Dy69GJi*c;J4W>dU-d~sLbXoG3%6h8O&X{xEG3}kF@`?pRK+Wd%PQRV2sfe@OeCn1nmQtE zVEBj1mBMGPmb80xJbGoCCaIT#f*mRWQQlu@KI&6)?W&aHg+{h{g9$&UL_2BWU*aQs zbWkV4S7Q0l0TVg{rs=&O{G(nN{XTx?6Z$bCfU<|@mqYJ~liRhSoE<6F@*Lf0#Nw8U z2dONLJ(*ZtL6$$1GKQHkiAi9?w_s&Ooa`lrZB_Y zce$@Rs>0Y-NZILi$oMs#VX3He734YO`5(@qELbY)D+ceh!emepcn2FcWXy5Z9v6u} ze4Dz(FnW;a*!g|u2n>3|bR-6)2Uc7DcJ%Y`o%)H;UtC(o)FaSE?;$%ZyW$ z<66>IA7LdjJC8UN8w1;{$hWeJJ$IJbGr+QBrTmDc;_Z1!j8GJU=!SEp>T2A{SEj)B zO+cFJ&Cn*WeOka#pP=4tDyk7n{7f=r9hR&z!cf-65w%s|0b3|Lsx5lk_N7uZU&YS# zUg#3f1Qs1`|KatzaukB?I&q357+hx+k*Q0&R`n?^GyoBl8v3IHroe}jLx1pg=Ih8T zn1CT2=06%`%6y=5L>;|lv9D>@a5IZRiQmfQl6e0HvDs>LN=VBgm&fr7d&;Uy|Hw<) zrO(uB!1V7Pwc2hd4{x)Inx5Sx!7-l-yxnB&6!aYFf=`6MMTLJ7>Wtc=0#^B)`kra+ zB0*~}!u{L<&^HTN~uevCDR&iR(KNr zXSFi>aHb2Ne^dR!D~##FD=F_!^Z?izP|LTU4f^>^S#G3-w`13bgjl2Ds4@xHG24@e zQ|lzzQ^l9h2l$8RBTv6*Y#Vrkw!iyIS&zRC^(}^}G>V>HV+Ln_t%5FFCzU?fA=vL7 z<~lao*)@uvEIjxmL#difgcbiml{iR%aEHIH7z_V_Z%#*PK5-k&+o=WUTtH#b^Y_ir zuY-VnKH_~YBS#p>{Y$bN$ePS{zFmMVVyaGmCfbKVr}rpJCOGAG@Zfprd3-G~2C z-8BEBx+6U^D6?Ts1_rr*EzI9ichThQZ0++<@%VMw*|eE0$JjusO^S1(KLDUCQ>GoW zi+KL=60f0XN>G+($}UvZOsL}$W?Dium;VE~Tde;Dx#jYsZYdW9t;Z=w$SfXQi{u$sw%xX2(U0|=PfpH z>2WB2U5tb3>(P1yQvSr7m2R5sp%#^aU>$f6{Iz-IgRrSTE-&i`Ov7&OtnuaisJ2pV znxrAk`CU&2Ia>*p`75X=#CHN9hE2|VZ9`SJexWxMzZH;4ycJa%KO<-ncOJ7P;lA(+ z0-^u4yHW?XKDzI98uN_~c}61LE!Khd25u4IJl&R)VVS1{L55wd$*`_JB_Rz~5`eO$ z`HwO!TJB;Y6mH5f*k1U>jO$HTi|k*MO2F)q5zkB9HZGH&>r4qb=O>6y2^l{7pk1&8 za~Fyg%`k8F^K*lAOF3S4wdW?N>JL+e$~fa)G%$^SBFXwaMW*MpEL-An5qv2u@By!D zRNzv+#m2pO%5f8hk(LZBm@@wOLMk}7r#^6P3q?#vUoXy*_(TI z0&};wSt`2cLP1wfbJcwWJ5~HA`{c{cYC?R6?d&JwZ6J6<3%k-W!UycdP>sChozzgR zIA19*2-CP7%0 z^WpkMALWi4R?Ppu>9h#G35Q9?3w<;u-GNO-9}!qi-GYN%2QFY%*6|OSxBla0jm7`y zdq7`kYSuL7IsKzX_+KlFa3JFG6*~*2K7`)#+@D{*hk02&AX+~02MlO-?_OE|56~Ve ze86qU+85Zw2NlTh#H76qog8KN4T$8I>#%^;$i5Bn9~UwxIH+dbmoUYi^^ z2??w)k`Ik69g{Ac4UhnwBmu8C>vNre6g09)>(EY%yOz}4`Rlx&GOrFC7aWDLjkLi< z@W`8ri;kT#=t~Y#;L)~UrM!m~_XqwWH;72I#gmVU$V_)acUW2FEiO-R{@9uvW&_ak z`m5(cH4-LPS`R#Pz+n9---UO#!e%OkzX8xF1)!XNJKVF; zT$ID2Z-DNU)HsvB@^#qPQ#hClEs3EQAc(=kV#NtnJrmBoEO}QPKB7&@?iiYF15F!1 zl;zc?^qUAbD2)3@*q@g8fNS!!3jzTHtx|;hcV7`h*Jj=SCrub-x|BljU@OTtS z*mTr17d{~~8)apt4KR5o$OYp8eanw`j6t#(M{aWtobG8$d8yhI!72eMJLOjG%*;G2 zY|uSaaUmvTq@PhivhxEi^^a42!E4`EK{~vNm5=3j#VEI((%hm_0xV=EJxmk@pSk8P z*EB(A<^jCv@f7&>tD*aD{!K4s&t5L>GIg3+<|=2ilTFaD0AUs`hK+*w*`WhwKyNh; zank8GUy5v2yn@dppEdb-$P%%pe{brHdf81*9rKAmTmDGHKMGOJ&Tg{&l5bJhZgTjX zZ&AW-GG7-~fZy>=RpOQ#^JxQ2Wb!|f^?$EBy0VecR-U}|`D>R@{;^94om6zB$ym5P zuw`(CZw02eO-=1#)i*rYyG0yE57LP`8~--Isy>&nPAGm!)4k{j>2-_o!MzouNz8J!Hr6797b zVyr)15(6IU0U5-+I@*6*0a4`}9o+z?Z0^}9j1Gbj`HF5h$-%UXOQZT!&T|C2RZw#MzU61m;1aXViEm$WWi-Hb zCSyLCPiOF~`O{*|?F}O0%|s>*`9g#^>Oe}5ObBQa z)_2m^DUlM95GbPi2?fqiHqj$He=!ZFCKJ9wAnW52(p|BmVvs zBpI{*rY3K`nY@hhZ3Q;V`pXEMU9(jC9XDn$o>A+ zEiHNRk8js`N592;@9$4(Q}n%xsl&=G5GZG^kH*6q#0VX^qOB4s?<~#ZHkXMY&)b5y z7Jc{Az%obv%Cl9*bLtYlL`|AZSbwCWQzu8_?cp}N#=}XvDsuTxBz1?*@3x^M_jrDc z`yy;?Cef4l&$3rx(ZoN40WwIY!C&)T0Zih+LdgRQr7%8o4)L2bq5Kh-a&zgLd$68}tlzd&6dV&Qva&d3elQiF%OhOE zflFbHL_#=x17JX(|I@YNl{{!FeHt1iKGe%>B&8t(d|Wg|^%*Kv*Y4a7u|m>(sj7`z zin__@)Odca_ze8xs=5DAC&Nc2>bH^@M_b1dAu5H~O~X!cMq$Y;Gzaf)3QooJ8K#(a zlXcJ=lFq*QPRJ(p*_eOn8GOVQ7gfo(WdJO+U$(y%*3J>%>n;Vzu-c+u-kt~)ef3OMRu>Y^|W8gD>*UX5coro`OMfkrAHTwTD)PsSL zt8;MBS_4KSDpr|ySy~Q6d9hWzV4_x9car^yJmf-5e?EQ-54%%MG!RYMe zQ7A>O0T~Qcg$OhVY-=dTlbe&D^ycWE7sVAYd7Rr_)usCt=RVT}*S#zW$`FlhuTN%t z)<7{?Wkc^VSC!R#&SV1YIP|D7oZdV)4axr?ky-dLcCGz#(siu{TGR!)FGUixSC-QS z^Cn0*m>9|lF|)qQ;SQYTcEq6x3M&(qX0Vxz&}d2eHtc^EV)>{0vv6;Wt{L)3>`x>+ zWLw)Tqzeyxm9+F#r_s*P)fs;NPkHM7Z+XJ8{#%|z694+c^SKMY#XlWa(;)RWse0ca z^@pYpn48<`dbYYbZwbH1oTjOOQL**DFHupF{=&HLh_w;8UN8O7 z-w!lpun@9+@zV7aHz`|zAr?E@@>h!(xSBCZ94jWN-6X*axz{)Q(>au12NgTseYP9JPylC75;gCMi{+PMrT!UdNEkMh8(%1uHN1Kes~_+9CW zYKsMNpc-0{xxicZPjD8j$4)&^IIDYNB%HjELAmnE65fv4H{Mdmm%#<_93$n8fwKs1 zC?TKQMpsb-x>jP4&LK1dT=coc`G+}B2s zn_<0+VvD!=4S4}Puc(pFRQ*czEWJ?0J7mV;JSUp$C5+dhHJc|w6xR3hv!`fkte#x2Kc+a9W4ejF zOmWKB;3k<7lqPDeFdWN60BvQ*o&vc!CKOd2nub^4m zdqvYM7ziIeRVqbp3VbC5U3Z=g7&g7(cvEJE`zFVot9#I+> zK{$;T0%A=m_w*clQWHHx8vgbvz0jSKj zeq7K`sx;ub0|^N1XZ_NgD(C(IJ=exB4fAy_U!;HX*AfFr_D$D;%(}JL4`=Qfzv+J3 zX1?;>XXxN6CW8!dv8wR)C|S86`_chILmR^NA>=$gJOLZKbqkDVjPh~(HhlTE!B+`v z+Wcp%4(_aiFV=R-O{C%)czm~{qNp(RNhO@wd!n#*2n_)&30>!a>QFu2&bR5CLhslI zJFGFE8;wurWC0z7hId&%Me`Hv{ABZHT0A*mak)!>y>v)CNV*2iaCXF$8V{&Z`0>r% zotL5RZS$vqb6kV*xKV0QDE?~T*#8SRFvvhcCrQz(wG7VLdt_E{ac0!z%K_0;bbh{2sMwxj$P8o3T06N&#WngvJ$wI94_~vvxD}Gy z!S5d%-=ig%+(==t$#Yxm(3VBwtRj{8R52Gx&HV$fV70rA)*Vuo(J3CWYR?=$OEzL@ zR`i-{oontSno>R#^A-jPa zSXx-f_RvNhE@n2xku>2$I``5*q{9U&hD-=LoagY6jDZ z>y;cv^S=hN>FGj=5mIqq*tA=J#PiK40}?|)aH~W_h1?6IE}G|)pG~zb`%ufZ8>^Ix z2eheaiLz=h`JR7jxA!ARs{O=GYvC?7CK<=w_B^C`wvmg~!Rn6ibL?{by0D~=k{7Or zk^`NTr>U;gSkR&g8$>5+vyy4sHA&9Je>$Gr8zj+*Ddce=eJJAVUpI|H4RU6n0Rp&- zv(e+~f^75a(x91j{)h~TRrQ@gT@sz>4!IuoKhfPff=C$HP*Rhnt~0U4uQS&=E&fDB z5K&l>43-k_vN~u%FTAB-86mkvL?cWr1F6BLcjJEdBNLg}3Q-`DFO*7Ie6E=`RGthe zmx0Kt?6|qkd^n=6@JAJ;{QxjR3nE0t!?(ixE=v^OFeC9JNCxt37XRBq9eI>&kcX8` z)LLy$X}i{iK~-F6oy3?rq&)!5U`g^-GnHj-U7E4|L?T#S(;NB4K#xA8b&{shS&1$b zcJnxzqz2M21t2ci6J=vrmE5ZI;sd6M=o1@mwaz$W8z686QL0)m-e$hJP!26%cg}D7 zNi)O)eq)7*D)>IIoG?3u&yq6Jw$sp_MixB+zGxH1mWa4kN)D^sfyFoIS@1VH2AWg!*}-V@0klDp4ZX<+Eib&9~v zj_CaT9r4%VGa?R)4jBj>b|KapDn2e>B^vDniiBmD41`6P6ZHO!7R1c)9W@i@Q(QxM zKqy794jra~{vP#0CoL#Aw*a#sn|NKURuyJnxpv+wvLix z737P%)!pTl7;t}mv(mMNBX++!i}Q4IvesqybTi4>23(}X0JrxKvt-NiIc*Q;Ilv46 zJf81;Ov3Dcx<0=F&Wdv`p6<^2aA0@Pzj@k-Tgegix&8hW^HC?v>+0mp7glX2 z=E>z48q)T3J_z_;K;6V1V3z|zH|yunY`dq&9q`keVWicNC!AXSru&yjMjXOd3Hoak zz_=}hi@+zR4yd}vRzP0Zu2ijzGVlt{WW0@8_S%`Yvm;uJ`^-<;Z zvYkEM1jTQ~YMP=nxVVtMv{##{xD*!Ofv-O~m0p@KCVl&gqFGP#Q#QTF#DQ%KbqnMdb;mZOc=H0L8d;R>7w`JIu29- z`htcDmT)nDKHGy5ZWqW?XwQX3Qnyu2bQXQ{XR75rSr7l3! zi~BN^r}zc0KC+sFpw)CQFX_QJU1~#nYa?LDWfbhfd^h<-*BVe6TN}M$xfti}1AfOY z=xDc9))!L3>d}DK`QGjEb7Q8D!LS&41@+TsCjYdqGZE!%a^I(O9Cal`Bmw{q4h{`2 zM0HKPHgGC+Y?fXLkM>c2}EK#g{&`X2xprMi(Y<-#g1R6X8OAACmt#-?@UhBkAgs3Oz(EX zU0r(@)+X*Us-z1Q;as{HdVen8__oG3t-|x$?#{Qv?4|5Q8^)P;jUWN7$!uqqUDxtF zk_3Md9>$QY0XMsg20cRa-Al%<$GL2htN{u$y~c*C>B@c8MIp2G-*KitFhWz6g_7uI zMOyU|ls4HY$|Xo?be27=T$_2T%GX4|3d4 zpHG8#GL_de5sHPRC7q7-=8Z=APd=ApUjEbHy@Tp2ymx$JF{FK71Xj8tK)uQ^gM5KP`sMxygKK;*85>^B(yB<3=SMT zlH4XJR#45EK{X7viNsNFe-+rhSRy=|GzK0w;9GV}j+ArxJ+Sr!Zz3-lo)ia>K51QK zW5*SJ-|!?72tmzK#Ce=vp^}LA{|RxWqx&@&4S0H9ZUmf(EdxSN8(4V`)b>EqS>0YL z=L>o!WMuwi**!h(2(Ip!S7G**DJ;(u(SJ#+sLvq;l{*(GmZ}pJUA)NDoQHR{h&V-e zyY*yI`(`E75>}r}u%0oyAD5%e!uf&n;4AqH{?C+K$}B?sp#C)9)}<=YtMA{hc121A zaG~AJo^e$)liol!ZqUWPd(F41tIubi0|V7BFcqpHpGhOajD2Uyc@yP#evx#UWLDVn zeSS3nF)TqMJ3y`;a3!7B{~Z#6@>BLvg8LFajV=a;| z8S4%LGLt)B$wlX(K|6Ui0tuAO8uzo{L-MXzZv<}ryh=qt&-1{nLe%-zO*@LH!x^jS za*jN{w8NA*2Hm9SApIjz<6EfCMT5>H6jWYVug!AX-Zq!{ED9g7C`rg!Qe8&2069|; zs9l_>4=&mR*^R`5A9c#-{hlDhpYm1v)aDWWN{fj7Abi98^EN{YQL_D+xxA}P=|f1| zGn-pH?|uR3A7t(%C}-l{sEf|5YO4>H-gU9OT^Y~h>AWRWa=#HE(kVlrt1XIBo62+~ zW>ZEE-b~acRW_U9%e$XA_@tbut_y}11w@m-j+hC^@!t1rknlYnpI&Sn-&^XJ)2*BZ z{Vv|?^%b(AyxpNIW(x`y9d>P6)O6D;*U_&myV(Qm{2pCfrkBRyWQ}@o=8aJ=hGp}o z)uHJXpRy3{xhxjxqU^%9ySI{F1zC?wQ*A6KLXNz%DlKayw9z^kEq zB&_>L5SrozlA%|nFHhO1wB#PRi>j3gRR!$vw}R(dztqu4vrh!!^2)!Eoce&zSL3y2 z1%l1Yhmsc5;nlyJ?adVl7>=c(dXT5}|00|^_i1{h`z3-BKD3~oH@7YH;vDd-+6=YT z_+ipUa7j?n#t0oUq_n6oUjO(g&BH58MhB6Jny2%RBzQ-xj@4 zap#(R^seUbED*`}^NGo!yeI(2VzL3^*-WsaTYNGC%d`FX0EQ5)ou%KJ0&k0SEFGT_=h)RaHeUks$^5-6@`6?#JMI~l zH14XeKbukH7bXWcgd=35pgT(@`K+AC{!1PWG2Vfk?yUwS{wUol21Jk&3m29kv+I&3yzVWxu^8+{7nH9+$Y^~|uQuQ%4`hU@8 z(&*lUQ=SMlOEmbEJdnb)=Hg+4Bl$jDS~~?S{z31HKEr`9(~66@0Yc*DN?|kd^RpTP zTc!TGNl_4*vDnyFOfXGSXUf>{^$?u`zTmLab~`PK0hOIc@xU- zLLGtYw|Rf)@g1H@D+>@tu&d^6uRY>?fpVm^dIrw=ZY!I_kyu1ts7cVTf>U{ z0`8bra9&g1{hqv&*F`()s{CkjlxQ>?g0Nv|Ie|5gwZNsP+)QJ@9=hp6AhP5hezUbJdqbz>H! zanZ0+Z_Ci(Fx2H)08!71dqOk+3>fi3IkvH{p?0+sy9pg@wWLaI zqou{f(vq6dh+P|sKSpOn7)r0@SVFB8f~M3~v~Dpaf}+++k%;8R%zZKUJ};j0dGYx@ z&-?E=zwbMJPZ$j20kJa7RL(t>OBe0i*NV8ifZK+N*yTt?JCnkUmYfH*p>{h*CdwN9 zbh>@vlFo3B;xb9OonStCJN9LV^2m1Ng}7&>I=ZW|mcI}9L&M@CraW&Q7rfCc`1(vY z^YVpU!4K#M!!8}|SK{TNwre|U0X(5o{C5+bN%QHy;!9LPSj{mlCRQNM0OIDJwSUQ* zU+=ZL@+CzmZ860{;HDWBnUZdsJpmdw8kQY99ri)D@Kx8x?H=BlKN(&ZOY6gvLY zq80osUFw%s1Mq8&i$e@ha#@i52Xa}SyWeAqLxs>*A=`?|t0_7V?Zxx2@YjfFp1SCSVot$IDWXcv0!u_)$F zVX=%+JABMGbz=2->qx`55kcvO0!KIIN~P1~^>XNIH~Nt&gIpbvW7}aQggkygHfmo! zUcjN}FBdIzT7>kGF}gszN=w#)+~tra1bng}R3uphTN|@Rl^wh1nk_4rQatx=p(}yU zm$ZKg%8M#=<6aU93|<}ydD)g0{ct*=rJM%GJ;C^k20~&Fv*uLa1U2Ke|A1ozJ0iN1;$09k=uR#LH1jDtRv&xo?jA!6Z}TvTg?<}Y zO8nMc{#~flOuf7N9lxLA5AjY1WE%l#TfCjn{i~^ZESgxMwl!Z-o~4_hpTi7i4m6yTx1!F6Yfko@-6xvtjIQ(Fg~o9z@ia z_k`8M(5Uo{D&ao@K6D-*El%tb(GnV}xZjMEhrIHsi|l!3&a4EwgNQm&u(NDYKi^iV z{;nZB@iU9wjTXE)nSNu&ah*kQ+68qC{pr+Wl87j7i{hg2hJ@NGxF_8NZ9{1^I#TjLp&N;#(509gy}8itEIe@ zUq#GK@v@sx{i%-JQIhN~V#mpq@(ZIBS>=@(CI#3_w2tUIFy_`=Q@~}+9z;&2MVb*$ z4ki?c3MQ1!^7EbgY&4BZK=*=W@kI6-y&H)?-E@HaF~UVxc$D;7=Vl9a)O-Xd#8IKC zeb=pg1t;)bc{Y~AAt?8L2Vw4T?zOa2FKRZ#=~RH*F;Pv-0q@^m>L(eiJ*DL;IALj~ z9heL~!yfzLYTat8CW18RfJY^dihMQv%lO!phbH6)1cw}Bd7RoBsp8O#Fx^rw-HR$q zKa}`>frU}HVlc_hjrs;0OhaNy{=zs)em~eC-~as3;@stl8m=eCPbR`P#Y4d~^NU z=^x4K!Zl7Al$+FApSrfX?b`RI>MI&ZZ=!|VfOjrZzFwFGJ*mHDhlCxgE_f$zpW>yj z;tIm57FB;ZWC`a<69#Fm5KuSpkYNj&2D%uApd(<10sNzv>hXyur!Z;$#1?cPkY(zF z6%GM+rZE_P2$&zr0u@Y6P!TZ7v;qwQ{HNxiUBL0w8I%I#oT|(Gf8@YP9k@VTikv$W zm^ifn;Q)S?31|?oV?kxk0xLSF2g{C|i%a-S Date: Wed, 4 Sep 2024 11:54:59 +0800 Subject: [PATCH 10/41] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scenemgr.go | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 42c33e6..702bc49 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -192,25 +192,26 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode } si := &webapiproto.RoomInfo{ - Platform: platformName, - SceneId: int32(s.sceneId), - GameId: int32(s.gameId), - GameMode: int32(s.gameMode), - SceneMode: int32(s.sceneMode), - GroupId: s.groupId, - Creator: s.creator, - ReplayCode: s.replayCode, - Params: common.CopySliceInt64ToInt32(s.params), - PlayerCnt: int32(len(s.players) - s.robotNum), - RobotCnt: int32(s.robotNum), - CreateTime: s.createTime.Unix(), - BaseScore: s.dbGameFree.BaseScore, - GameFreeId: s.dbGameFree.GetId(), - MaxRound: s.totalRound, - Password: s.GetPassword(), - CostType: s.GetCostType(), - Voice: s.GetVoice(), - CurrRound: s.currRound, + Platform: platformName, + SceneId: int32(s.sceneId), + GameId: int32(s.gameId), + GameMode: int32(s.gameMode), + SceneMode: int32(s.sceneMode), + GroupId: s.groupId, + GameFreeId: s.dbGameFree.GetId(), + Creator: s.creator, + ReplayCode: s.replayCode, + Params: common.CopySliceInt64ToInt32(s.params), + PlayerCnt: int32(len(s.players) - s.robotNum), + RobotCnt: int32(s.robotNum), + CreateTime: s.createTime.Unix(), + BaseScore: s.dbGameFree.BaseScore, + RoomConfigId: s.GetRoomConfigId(), + CurrRound: s.currRound, + MaxRound: s.totalRound, + Password: s.GetPassword(), + CostType: s.GetCostType(), + Voice: s.GetVoice(), } if s.starting { si.Start = 1 From 12623d7b94a152e5e7225061dad5956705b3107c Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 4 Sep 2024 13:46:10 +0800 Subject: [PATCH 11/41] =?UTF-8?q?=E5=A2=9E=E5=8A=A0log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 1 + 1 file changed, 1 insertion(+) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 82b11a7..7f32058 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -2556,6 +2556,7 @@ func (this *Scene) TryRelease() { } func (this *Scene) GetMachineServerInfo(MachineId int32, platform string) *webapi.MachineInfo { config := ConfigMgrInst.GetConfig(platform).MachineConfig + logger.Logger.Tracef("========GetMachineServerInfo=========== platform=%s, MachineId=%d ,config = %v", platform, MachineId, config) if config == nil { return nil } From fb8bfbde87e45c106fc8421ff4aaf78a0176dffe Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 4 Sep 2024 14:03:37 +0800 Subject: [PATCH 12/41] =?UTF-8?q?=E5=88=AA=E9=99=A4log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f2c46e0..68f055c 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -701,7 +701,7 @@ func (this *PlayGame) OnTick(s *base.Scene) { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollScenePlayTimeout { if sceneEx.TimeOutPlayGrab() { - logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) + //logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } s.ChangeSceneState(rule.ClawDollSceneStateBilled) From ac86a5e294359a7b0e3bfa880982a2f637422844 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 14:21:21 +0800 Subject: [PATCH 13/41] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=AB=9E=E6=8A=80?= =?UTF-8?q?=E9=A6=86=E6=B5=8B=E8=AF=95=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 74 ------------------------------------------------ 1 file changed, 74 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index d78a051..cca9e12 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -93,80 +93,6 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) - - PlatformMgrSingleton.GetConfig("1").RoomType = map[int32]*webapi.RoomType{ - 1: { - Platform: "1", - Id: 1, - Name: "{\"zh\":\"话费赛\",\"kh\":\"话费赛\",\"vi\":\"话费赛\",\"en\":\"话费赛\"}", - On: 1, - SortId: 1, - }, - 2: { - Platform: "1", - Id: 2, - Name: "{\"zh\":\"物品赛\",\"kh\":\"物品赛\",\"vi\":\"物品赛\",\"en\":\"物品赛\"}", - On: 1, - SortId: 2, - }, - } - - PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ - Platform: "1", - Id: 1, - Name: "{\"zh\":\"1元话费赛\",\"kh\":\"1元话费赛\",\"vi\":\"1元话费赛\",\"en\":\"1元话费赛\"}", - RoomType: 1, - On: 1, - SortId: 1, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", - }) - PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ - Platform: "1", - Id: 2, - Name: "{\"zh\":\"2元话费赛\",\"kh\":\"2元话费赛\",\"vi\":\"2元话费赛\",\"en\":\"2元话费赛\"}", - RoomType: 1, - On: 1, - SortId: 2, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", - }) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { From 9c1fed84e9fad798cddf646d627a74b81f28a786 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 14:53:29 +0800 Subject: [PATCH 14/41] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=90=8E=E5=8F=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 4 ++++ worldsrv/scene.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index cca9e12..b60851a 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -93,6 +93,10 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) + // 竞技馆房间配置 + etcd.Register(etcd.ETCDKEY_RoomConfig, webapi.RoomConfig{}, handlerEvent) + // 竞技馆房间类型配置 + etcd.Register(etcd.ETCDKEY_RoomType, webapi.RoomType{}, handlerEvent) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 333f90e..093a35e 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -514,8 +514,6 @@ func (this *Scene) lastScene(p *Player) { } func (this *Scene) DelPlayer(p *Player) bool { - FirePlayerLeaveScene(p, this) - this.sp.OnPlayerLeave(this, p) if p.scene != this { roomId := 0 if p.scene != nil { @@ -556,6 +554,8 @@ func (this *Scene) DelPlayer(p *Player) bool { if !p.IsRob { this.lastTime = time.Now() } + FirePlayerLeaveScene(p, this) + this.sp.OnPlayerLeave(this, p) return true } From 4a32df4ecfdc37657119f44bc8b4ca4ec56522f5 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 15:31:35 +0800 Subject: [PATCH 15/41] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index b60851a..606899b 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -485,7 +485,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c config := data.(*webapi.RoomType) PlatformMgrSingleton.UpdateRoomType(config) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) } case clientv3.EventTypeDelete: if plt == "" || len(param) == 0 { @@ -493,7 +493,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } PlatformMgrSingleton.DelRoomType(plt, int32(param[0])) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) } } From 88bbca47f1606bfe4eec07eeeec0410d831127ed Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 17:24:29 +0800 Subject: [PATCH 16/41] =?UTF-8?q?=E6=8E=A8=E5=B9=BF=E6=B8=A0=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/u_player.go | 2 +- model/player.go | 3 ++- worldsrv/action_player.go | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dbproxy/svc/u_player.go b/dbproxy/svc/u_player.go index bf6b7c1..62cb522 100644 --- a/dbproxy/svc/u_player.go +++ b/dbproxy/svc/u_player.go @@ -227,7 +227,7 @@ func (svc *PlayerDataSvc) CreatePlayerDataByThird(args *model.CreatePlayer, ret var dataParams model.PlayerParams json.Unmarshal([]byte(a.Params), &dataParams) pd = model.NewPlayerDataThird(acc, name, args.HeadUrl, id, a.Channel, a.Platform, a.Params, - a.Tel, a.PackegeTag, dataParams.Ip, a.TagKey, a.AccountType, a.DeviceOs) + a.Tel, a.PackegeTag, dataParams.Ip, a.TagKey, a.AccountType, a.DeviceOs, a.ChannelId) if pd != nil { err = cplayerdata.Insert(pd) if err != nil { diff --git a/model/player.go b/model/player.go index ca719c8..c26829f 100644 --- a/model/player.go +++ b/model/player.go @@ -981,7 +981,7 @@ func NewPlayerData(acc string, name string, id int32, channel, platform string, } func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, platform string, params, tel string, - packTag, ip string, tagkey, accountType int32, deviceOS string) *PlayerData { + packTag, ip string, tagkey, accountType int32, deviceOS, channelId string) *PlayerData { if len(name) == 0 { logger.Logger.Trace("New player name is empty.") return nil @@ -992,6 +992,7 @@ func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, pla AccountId: acc, Name: name, Channel: channel, + ChannelId: channelId, Platform: platform, SnId: id, Head: rand.Int31n(common.HeadRange), diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index d800fbe..66abe75 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -1938,6 +1938,9 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64) if (p.Channel == "" || p.Channel == "0") && p.Channel != msg.AppChannel { p.Channel = msg.AppChannel } + if ls.als.acc.ChannelId != "" && p.ChannelId == "" { + p.ChannelId = ls.als.acc.ChannelId + } if ls.clog != nil { PlayerSubjectSign.UpdateHeadUrl(p.SnId, ls.clog.HeadUrl) From 68a8e010cfeb5e3399c85ac78bcbc7b54f7f8145 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 5 Sep 2024 10:28:43 +0800 Subject: [PATCH 17/41] =?UTF-8?q?scene=E5=8F=AA=E8=83=BD=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E5=A8=83=E5=A8=83=E6=9C=BA=E7=BC=96?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_machine.go | 14 +++++--------- gamesrv/clawdoll/scenepolicy_clawdoll.go | 3 ++- machine/action/action_server.go | 8 ++++---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/gamesrv/action/action_machine.go b/gamesrv/action/action_machine.go index c577f4e..fb287f2 100644 --- a/gamesrv/action/action_machine.go +++ b/gamesrv/action/action_machine.go @@ -35,15 +35,11 @@ func MSDollMachineListHandler(session *netlib.Session, packetId int, data interf } // 获取空闲娃娃机标识 -func GetFreeDollMachineId() int { - // 获取互斥锁 - MachineMapLock.Lock() - defer MachineMapLock.Unlock() - for i, v := range MachineMap { - if v.Status == false { - v.Status = true - return i - } +func GetFreeDollMachineId(id int32) int { + if MachineMap[int(id)] != nil && MachineMap[int(id)].MachineStatus == 1 { + return int(id) + } else { + return 0 } return 0 } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 68f055c..3d31f96 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -67,7 +67,8 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) { sceneEx, ok := s.ExtraData.(*SceneEx) if ok { if sceneEx.machineId == 0 { - sceneEx.machineId = action.GetFreeDollMachineId() + machineId := s.DBGameFree.GetId() % 6080000 + sceneEx.machineId = action.GetFreeDollMachineId(machineId) } if sceneEx.machineId != 0 { machineStatus := action.GetDollMachineStatus(sceneEx.machineId) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 48252c6..afa8cd6 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -169,7 +169,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid num := int64(1) for { // 读取数据 - logger.Logger.Trace("监听抓取结果返回!") + //logger.Logger.Trace("监听抓取结果返回!") buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { @@ -178,7 +178,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid } // 将读取到的数据按照 221 进行分割 parts := bytes.Split(buf[:n], []byte{221}) - fmt.Println("获取到的返回值:", parts) + //fmt.Println("获取到的返回值:", parts) instruction := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x00} instruction1 := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x01} // 遍历分割结果,打印出每个部分 @@ -187,11 +187,11 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid part = part[:len(part)-1] // 去除最后一个字节,该字节为分隔符 //fmt.Println("比较返回结果 part = ", part) if bytes.Contains(part, instruction) && num != 1 { - fmt.Printf("Part %d: %s\n", i+1, part) + //fmt.Printf("Part %d: %s\n", i+1, part) //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) if err != nil { - fmt.Println("Failed to read response from server:", err) + //fmt.Println("Failed to read response from server:", err) return } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ From f056014c50a2133d50715f79e41f6e4ee0d5a9f7 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 11:24:46 +0800 Subject: [PATCH 18/41] =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/player.go | 4 ++-- model/player.go | 2 +- model/playergamedata.go | 2 +- worldsrv/playerinfo.go | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gamesrv/base/player.go b/gamesrv/base/player.go index 9b29b76..7a8c0cb 100644 --- a/gamesrv/base/player.go +++ b/gamesrv/base/player.go @@ -149,7 +149,7 @@ func NewPlayer(sid int64, data []byte, ws, gs *netlib.Session) *Player { ShopLastLookTime: make(map[int32]int64), IsFoolPlayer: make(map[string]bool), }, - GameData: make(map[int32]*model.PlayerGameData), + GameData: make(map[string]*model.PlayerGameData), } if p.init(data) { @@ -383,7 +383,7 @@ func (this *Player) MarshalData(gameid int) (d []byte, e error) { if v.Platform == "" { v.Platform = this.Platform } - if v.Id == 0 { + if v.Id == "" { v.Id = k } } diff --git a/model/player.go b/model/player.go index c26829f..27cf053 100644 --- a/model/player.go +++ b/model/player.go @@ -348,7 +348,7 @@ type MatchFreeSignupRec struct { // 大厅玩家信息发送给游戏服 type WGPlayerInfo struct { *PlayerData - GameData map[int32]*PlayerGameData // 游戏数据,只允许存储玩家对应某个游戏需要持久化的数据 + GameData map[string]*PlayerGameData // 游戏数据,只允许存储玩家对应某个游戏需要持久化的数据 } type PlayerData struct { diff --git a/model/playergamedata.go b/model/playergamedata.go index 0fd4a07..be6677c 100644 --- a/model/playergamedata.go +++ b/model/playergamedata.go @@ -9,7 +9,7 @@ import ( type PlayerGameData struct { Platform string `bson:"-"` SnId int32 - Id int32 // 游戏id或场次id + Id string // 游戏id或场次id Data interface{} // 数据 } diff --git a/worldsrv/playerinfo.go b/worldsrv/playerinfo.go index 850c073..70b2f3c 100644 --- a/worldsrv/playerinfo.go +++ b/worldsrv/playerinfo.go @@ -30,7 +30,7 @@ type AllPlayerInfo struct { // PlayerInfo 玩家信息 type PlayerInfo struct { - GameData map[int32]*model.PlayerGameData // 游戏数据 + GameData map[string]*model.PlayerGameData // 游戏数据 } type PlayerInfoMgr struct { @@ -69,7 +69,7 @@ func (p *PlayerInfoMgr) Callback(player any, ret *internal.PlayerLoadReplay) { return } info := &PlayerInfo{ - GameData: make(map[int32]*model.PlayerGameData), + GameData: make(map[string]*model.PlayerGameData), } // 游戏数据 From bcac7f06d3ec65644ce2e427f2b383ca3b81f05e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 11:26:52 +0800 Subject: [PATCH 19/41] update public --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes public | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 3094b57366ddb3f45bda1c2b49ca90dda8ad3167..90627e23e7ffb7a0a0572e799000ac27ec367e02 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+Qtl~uR-bSQ2H{Iz5=3^I5-yevI!h$vE|a^U;?YZ36;MErEf#& z8))joIUweP%>mknZVy;JP#oPnnEf#Kfz4Oq1iPbQ?IRYhSPmAjLtqBO6v7;I2kIc0 Z!7vBH494mZC3cQQK#zW5=3<~N1OR1nJT(9S literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ1(m-IrEfs# zn`r98IUwf4?17mJRtK~nrXOq%kdN*Tn7Ls4lsLieXjuD*g)5eW1?&)*Mwr844!Z+& d5X@qj!7vBF3`TK?5sYFG>d1mD!V`9lJ+1%xIu@{3Il;r9XQ+PsmUi4_39 C3SNT% delta 368 zcmdn2xmj~UxgZC}!d^Ck1-)!uY#d8~ERl&FjZnc0ZOl+XuFX=6lNl$Ma0pJ`$Fvnl zi%f23-X+M!aj}hAfXNGD#)O6ZlY>|cprR~L(FKR(CQoLu#G>{tixteGr9ME5KxT1G z)?hsgRJ#c15}3IMT5Kn?v4KngiLye?ZRo6;9Kd#D@@H<5%^K`JjFXF*MJ9J}=z|0% zpXS&BRn7%f4l-m4r|IP7e1em2aTbGBC35`(^9#6}CvWEv+04!(%_NIz3()mZOpJ_N z4jfm3u9KbYz$-pEj4yDqF)$={@a0YxVHf1!vgUYvg;_voG9$m(*u0US Gi4_1>oN4v| diff --git a/public b/public index cbad299..06da9b3 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit cbad2992a1ce71327def46ea01ebbcc8800bee89 +Subproject commit 06da9b31abec96f3936877d7d73069e9852781ff From e33fe64bca043249041dd646bb3e5f2b9c11dcf6 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 14:20:36 +0800 Subject: [PATCH 20/41] =?UTF-8?q?=E6=88=BF=E9=97=B4=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scenemgr.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 702bc49..185f3f5 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -183,9 +183,9 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode ((s.gameId == gameId && s.gameMode == gameMode) || gameId == 0) && (s.sceneId == sceneId || sceneId == 0) && (s.groupId == int32(groupId) || groupId == 0) && (s.dbGameFree.GetId() == gameFreeId || gameFreeId == 0) && - (s.sceneMode == sceneMode || sceneMode == -1)) || isNeedFindAll && + (s.sceneMode == sceneMode || sceneMode == -1) && ((s.IsCustom() && isCustom) || !isCustom) && - (s.GetRoomConfigId() == roomConfigId || roomConfigId == 0) { + (s.GetRoomConfigId() == roomConfigId || roomConfigId == 0)) || isNeedFindAll { var platformName string if s.limitPlatform != nil { platformName = s.limitPlatform.IdStr From a126fb81aeafa0c2abeccd70920102626bb6bbb4 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 14:31:12 +0800 Subject: [PATCH 21/41] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=92=E4=BD=8D?= =?UTF-8?q?=E8=B5=9B=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_RankReward.dat | 15 ++++++++------- data/DB_RankReward.json | 14 +++++++------- data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_RankReward.xlsx | Bin 10986 -> 11053 bytes 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 90627e23e7ffb7a0a0572e799000ac27ec367e02..eab78e7297231cf3a52b2e8368d3632ac62bb02e 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUweP%^|`*{N{3k-O;f25eru=2MgFCFbBgl-hny2i-EQf0Au1jH2?qr literal 384 zcmd-w<6snElw#w!+Qtl~uR-bSQ2H{Iz5=3^I5-yevI!h$vE|a^U;?YZ36;MErEf#& z8))joIUweP%>mknZVy;JP#oPnnEf#Kfz4Oq1iPbQ?IRYhSPmAjLtqBO6v7;I2kIc0 Z!7vBH494mZC3cQQK#zW5=3<~N1OR1nJT(9S diff --git a/data/DB_RankReward.dat b/data/DB_RankReward.dat index 403ebd4..db7321a 100644 --- a/data/DB_RankReward.dat +++ b/data/DB_RankReward.dat @@ -1,8 +1,9 @@ -$08@H -08@H -08@H -08@H0 -08@H - 08d@H -082@H \ No newline at end of file +$08@H +08d@H +08<@H +08(@H0 +08@H + 08@H +08 +@H \ No newline at end of file diff --git a/data/DB_RankReward.json b/data/DB_RankReward.json index 3e27f5f..6de6430 100644 --- a/data/DB_RankReward.json +++ b/data/DB_RankReward.json @@ -5,7 +5,7 @@ "RankType": 1, "Level": 36, "Award2Id": 2, - "Award2Num": 1000, + "Award2Num": 200, "Award3Id": 1, "Award3Num": 30000000 }, @@ -14,7 +14,7 @@ "RankType": 1, "Level": 31, "Award2Id": 2, - "Award2Num": 500, + "Award2Num": 100, "Award3Id": 1, "Award3Num": 20000000 }, @@ -23,7 +23,7 @@ "RankType": 1, "Level": 26, "Award2Id": 2, - "Award2Num": 300, + "Award2Num": 60, "Award3Id": 1, "Award3Num": 10000000 }, @@ -32,7 +32,7 @@ "RankType": 1, "Level": 21, "Award2Id": 2, - "Award2Num": 200, + "Award2Num": 40, "Award3Id": 1, "Award3Num": 800000 }, @@ -41,7 +41,7 @@ "RankType": 1, "Level": 16, "Award2Id": 2, - "Award2Num": 150, + "Award2Num": 30, "Award3Id": 1, "Award3Num": 500000 }, @@ -50,7 +50,7 @@ "RankType": 1, "Level": 11, "Award2Id": 2, - "Award2Num": 100, + "Award2Num": 20, "Award3Id": 1, "Award3Num": 300000 }, @@ -59,7 +59,7 @@ "RankType": 1, "Level": 6, "Award2Id": 2, - "Award2Num": 50, + "Award2Num": 10, "Award3Id": 1, "Award3Num": 200000 } diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 37be7cc6d639fd24f92901313d11b2a8366d1255..ec74cdafd8493c72f3f5010721a7e2cc12d529f8 100644 GIT binary patch delta 253 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 VI8h`(2ni!F$xm@BisyIze*m9+>%ss4 delta 3729 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 From 3b15a84df3ca5643facf1746e4e1ff016dcfae5e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 14:46:43 +0800 Subject: [PATCH 22/41] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/transact/trascate_gamesrv.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamesrv/transact/trascate_gamesrv.go b/gamesrv/transact/trascate_gamesrv.go index 1149976..1cdca9d 100644 --- a/gamesrv/transact/trascate_gamesrv.go +++ b/gamesrv/transact/trascate_gamesrv.go @@ -118,7 +118,7 @@ func init() { } switch d := scene.ExtraData.(type) { - case tienlen.TienLenSceneData: + case *tienlen.TienLenSceneData: for k := range d.BilledList { pack.SnId = append(pack.SnId, k) } From 33380d1bf8ae20930cf78300b7828fccc8e6eb3a Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 16:02:50 +0800 Subject: [PATCH 23/41] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/transact/trascate_gamesrv.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gamesrv/transact/trascate_gamesrv.go b/gamesrv/transact/trascate_gamesrv.go index 1cdca9d..a56fc1a 100644 --- a/gamesrv/transact/trascate_gamesrv.go +++ b/gamesrv/transact/trascate_gamesrv.go @@ -106,7 +106,7 @@ func init() { if err != nil { pack.Tag = webapiproto.TagCode_FAILED pack.Msg = "数据序列化失败" - return common.ResponseTag_ParamError, pack + return common.ResponseTag_Ok, pack } pack.Tag = webapiproto.TagCode_SUCCESS @@ -114,7 +114,7 @@ func init() { if scene == nil || scene.ExtraData == nil { pack.Tag = webapiproto.TagCode_NotFound pack.Msg = "房间没找到" - return common.ResponseTag_NoFindRoom, pack + return common.ResponseTag_Ok, pack } switch d := scene.ExtraData.(type) { From c4bea18f9f6cbd3d75142a9770e2cdcb258cc89a Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 18:31:04 +0800 Subject: [PATCH 24/41] =?UTF-8?q?=E9=81=93=E5=85=B7=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E5=B8=82=E5=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 1 + 1 file changed, 1 insertion(+) diff --git a/common/constant.go b/common/constant.go index c43faf4..ba96eb7 100644 --- a/common/constant.go +++ b/common/constant.go @@ -316,6 +316,7 @@ const ( GainWayVipGift9 = 105 //vip等级礼包 GainWayRoomCost = 106 //房费消耗 GainWayRoomGain = 107 //房卡场获得 + GainWayItemShop = 108 // 交易市场道具交易 ) // 后台选择 金币变化类型 的充值 类型id号起始 From fccb385f79e0a289ec7cde9701302ecf4e700168 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Thu, 5 Sep 2024 18:47:21 +0800 Subject: [PATCH 25/41] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E9=85=8D=E7=BD=AE=E5=8C=85=E7=B1=BB=E5=9E=8B=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/config.go | 9 +++++++-- worldsrv/action_game.go | 6 +++++- worldsrv/playernotify.go | 35 ++++++++++++++++++++++++++++++++--- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/model/config.go b/model/config.go index e569e0c..622469d 100644 --- a/model/config.go +++ b/model/config.go @@ -1,12 +1,13 @@ package model import ( - "mongo.games.com/game/protocol/gamehall" + "slices" "strconv" "mongo.games.com/goserver/core/logger" "mongo.games.com/game/common" + "mongo.games.com/game/protocol/gamehall" "mongo.games.com/game/protocol/shop" "mongo.games.com/game/protocol/webapi" ) @@ -425,7 +426,7 @@ func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { delete(cm.GetConfig(plt).RoomConfig, id) } -func (cm *ConfigMgr) GetRoomConfig(plt string) *gamehall.SCRoomConfig { +func (cm *ConfigMgr) GetRoomConfig(plt string, lastChannel string) *gamehall.SCRoomConfig { pack := &gamehall.SCRoomConfig{} for _, v := range cm.GetConfig(plt).RoomType { if v.GetOn() != common.On { @@ -436,6 +437,10 @@ func (cm *ConfigMgr) GetRoomConfig(plt string) *gamehall.SCRoomConfig { if vv.GetOn() != common.On { continue } + if lastChannel != "" && !slices.Contains(vv.GetOnChannelName(), lastChannel) { + continue + } + var cost, reward []*gamehall.ItemInfo for _, item := range vv.GetCost() { cost = append(cost, &gamehall.ItemInfo{ diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 7785ce8..61e09b8 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1168,7 +1168,7 @@ func CSRoomConfigHandler(s *netlib.Session, packetId int, data interface{}, sid return nil } - pack := PlatformMgrSingleton.GetRoomConfig(p.Platform) + pack := PlatformMgrSingleton.GetRoomConfig(p.Platform, p.LastChannel) p.SendToClient(int(gamehall.GameHallPacketID_PACKET_SCRoomConfig), pack) logger.Logger.Tracef("SCRoomConfig: %v", pack) return nil @@ -1202,6 +1202,10 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ send() return nil } + if !slices.Contains(cfg.GetOnChannelName(), p.LastChannel) { + send() + return nil + } // 场次 if !slices.Contains(cfg.GetGameFreeId(), msg.GetGameFreeId()) { send() diff --git a/worldsrv/playernotify.go b/worldsrv/playernotify.go index e944769..29f2829 100644 --- a/worldsrv/playernotify.go +++ b/worldsrv/playernotify.go @@ -1,11 +1,13 @@ package main import ( + "slices" "time" "mongo.games.com/goserver/core/logger" "mongo.games.com/game/common" + "mongo.games.com/game/protocol/gamehall" ) func init() { @@ -76,7 +78,34 @@ func (p *PlayerNotify) GetPlayers(tp common.NotifyType) []int32 { // SendToClient 发送消息给客户端 // tp 消息类型 func (p *PlayerNotify) SendToClient(tp common.NotifyType, packetId int, pack interface{}) { - ids := p.GetPlayers(tp) - PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) - logger.Logger.Tracef("PlayerNotify SendToClient tp:%v ids:%v", tp, ids) + switch tp { + case common.NotifyPrivateRoomList: + d := pack.(*gamehall.SCGetPrivateRoomList) + if len(d.GetDatas()) == 0 { + return + } + scene := SceneMgrSingleton.GetScene(int(d.GetDatas()[0].GetRoomId())) + if scene == nil { + return + } + roomConfigId := d.GetDatas()[0].GetRoomConfigId() + cfg := PlatformMgrSingleton.GetConfig(scene.limitPlatform.IdStr).RoomConfig[roomConfigId] + if cfg == nil { + return + } + + var ids []int32 + for _, v := range p.GetPlayers(tp) { + player := PlayerMgrSington.GetPlayerBySnId(v) + if player == nil { + continue + } + if slices.Contains(cfg.GetOnChannelName(), player.LastChannel) { + ids = append(ids, v) + } + } + + PlayerMgrSington.BroadcastMessageToTarget(ids, packetId, pack) + logger.Logger.Tracef("PlayerNotify SendToClient tp:%v ids:%v", tp, ids) + } } From 9963ef130ae66f4707afa64c2156ca8c9497f599 Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 09:43:14 +0800 Subject: [PATCH 26/41] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 06da9b3..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 06da9b31abec96f3936877d7d73069e9852781ff +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From 40966b52cbb2048918c3c1e6c812a8554f1c1220 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 09:50:19 +0800 Subject: [PATCH 27/41] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/action_game.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index 61e09b8..de81b77 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1206,18 +1206,32 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ send() return nil } + + f := func(param []int32) []int32 { + if len(param) == 0 { + return nil + } + if param[0] == 0 { + return param[1:] + } + if param[0] > 0 && int(param[0]) < len(param) { + return []int32{param[param[0]]} + } + return nil + } + // 场次 - if !slices.Contains(cfg.GetGameFreeId(), msg.GetGameFreeId()) { + if !slices.Contains(f(cfg.GetGameFreeId()), msg.GetGameFreeId()) { send() return nil } // 局数 - if !slices.Contains(cfg.GetRound(), msg.GetRound()) { + if !slices.Contains(f(cfg.GetRound()), msg.GetRound()) { send() return nil } // 玩家数量 - if !slices.Contains(cfg.GetPlayerNum(), msg.GetPlayerNum()) { + if !slices.Contains(f(cfg.GetPlayerNum()), msg.GetPlayerNum()) { send() return nil } From 979645567ef02272136d678fc1e30c0a75c8bae9 Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 10:08:29 +0800 Subject: [PATCH 28/41] =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f00ad1f..b9ad90d 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -67,7 +67,8 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) { sceneEx, ok := s.ExtraData.(*SceneEx) if ok { if sceneEx.machineId == 0 { - sceneEx.machineId = action.GetFreeDollMachineId() + machineId := s.DBGameFree.GetId() % 6080000 + sceneEx.machineId = action.GetFreeDollMachineId(machineId) } if sceneEx.machineId != 0 { machineStatus := action.GetDollMachineStatus(sceneEx.machineId) From 32e8b2f22e021e6b4ba7335c4b9553942abeb6a6 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 10:01:10 +0800 Subject: [PATCH 29/41] =?UTF-8?q?=E6=88=BF=E5=8D=A1=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=8A=A0=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/config.go | 2 +- worldsrv/shopmgr.go | 57 ++++++++++++++------------------------------- 2 files changed, 19 insertions(+), 40 deletions(-) diff --git a/model/config.go b/model/config.go index 622469d..568775e 100644 --- a/model/config.go +++ b/model/config.go @@ -77,7 +77,7 @@ func (this *ShopInfo) GetItems() []ItemInfo { if this.ItemId > 0 { ret = append(ret, ItemInfo{ ItemId: this.ItemId, - ItemNum: this.Amount, + ItemNum: this.AmountFinal, }) } for _, v := range this.AddItemInfo { diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index a296bee..1fdf0d2 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -44,14 +44,15 @@ const ( // page类型 const ( - ShopPageCoin = 1 //金币页面 - ShopPageDiamond = 2 //钻石页面 - ShopPageItem = 3 //道具页面 - ShopPageVip = 4 //VIP页面 - ShopPagePrivilege = 5 //VIP特权礼包 - ShopPageGift = 7 //礼包页面 - ShopPageDiamondBank = 8 //钻石存储罐 - ShopPagePermit = 9 //赛季通行证 + ShopPageCoin = 1 //金币页面 + ShopPageDiamond = 2 //钻石页面 + ShopPageItem = 3 //道具页面 + ShopPageVip = 4 //VIP页面 + ShopPagePrivilege = 5 //VIP特权礼包 + ShopPageGift = 7 //礼包页面 + ShopPageDiamondBank = 8 //钻石存储罐 + ShopPagePermit = 9 //赛季通行证 + ShopPageFangKa = 10 //房卡页面 ShopPagePhoneScore = 61 //手机积分商城 ShopPagePhoneScoreGoogle = 62 @@ -646,6 +647,7 @@ func (this *ShopMgr) GetAmountFinal(p *Player, shopId, vipShopId int32) int64 { } } default: + addTotal += addNormal } return addTotal } @@ -1197,37 +1199,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, var amount [ShopTypeItem]int32 var dbShop *model.DbShop if shopInfo, ok := data.(*model.ShopInfo); ok { - // 目前现金只能买钻石 - var addTotal = int64(shopInfo.Amount) - added := rand.Int31n(shopInfo.AddArea[1]-shopInfo.AddArea[0]+1) + shopInfo.AddArea[0] costNum := rand.Int31n(shopInfo.CostArea[1]-shopInfo.CostArea[0]+1) + shopInfo.CostArea[0] - /* if shopInfo.Page == ShopPageVip { - //暂时这样修改 VIP礼包没有现金支付 - shopData := p.GetVipShopData(shopInfo.Id, 0) - if shopData != nil { - added = shopData.AddArea - costNum = shopData.CostArea - } - }*/ - vipAdded := int32(0) - if shopInfo.Page == ShopPageDiamond { - //vip加成 - vipAdded = VipMgrSington.GetVipDiamondExtra(p.Platform, p.VIP) - logger.Logger.Tracef("商城钻石购买,vip加成 vipAdded = %v", vipAdded) - } - - if added > 0 || vipAdded > 0 { - addTotal = shopInfo.Amount + int64((float64(shopInfo.Amount)*float64(added+vipAdded))/100.0) - } - - // 首充翻倍 - if shopInfo.FirstSwitch { - if !slices.Contains(p.ShopID, int(shopInfo.Id)) { - addTotal *= 2 - } - } - - amount[ShopTypeDiamond-1] = int32(addTotal) var itemInfo []model.ItemInfo var webItemInfo []*webapi_proto.ItemInfo for _, info := range shopInfo.GetItems() { @@ -1241,6 +1213,13 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, }) } + switch shopInfo.Type { + case ShopTypeDiamond: + amount[ShopTypeDiamond-1] = int32(shopInfo.AmountFinal) + default: + + } + dbShop = this.NewDbShop(p, shopInfo.Page, amount[:], ShopConsumeMoney, costNum, common.GainWay_ShopBuy, itemInfo, shopInfo.Id, shopInfo.Name, 0, remark, []int32{}) err := model.InsertDbShopLog(dbShop) @@ -1249,7 +1228,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, shopInfo.Id, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, shopInfo.Name, [ShopTypeItem]int32{0, int32(addTotal), 0}, costNum, webItemInfo, "", p.Channel, p.ChannelId) + p.DeviceId, shopInfo.Name, [ShopTypeItem]int32{0, int32(shopInfo.AmountFinal), 0}, costNum, webItemInfo, "", p.Channel, p.ChannelId) } else if cdata, ok := data.(*ExchangeShopInfo); ok { var info *shop.ExchangeType From 82aee49eda530476a5b91535af3aa0a2ae22031e Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 11:24:35 +0800 Subject: [PATCH 30/41] =?UTF-8?q?=E7=94=9F=E6=88=90token=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index afa8cd6..da5749b 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -10,6 +10,7 @@ import ( "mongo.games.com/goserver/core/logger" "mongo.games.com/goserver/core/netlib" "mongo.games.com/goserver/core/timer" + "strconv" "sync" "time" ) @@ -290,7 +291,7 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) var payload string = "" //生成token - token, err := token04.GenerateToken04(appId, string(userId), serverSecret, effectiveTimeInSeconds, payload) + token, err := token04.GenerateToken04(appId, strconv.Itoa(int(userId)), serverSecret, effectiveTimeInSeconds, payload) if err != nil { logger.Logger.Error(err) return err From fc2db94c86a881d40a0b6707f9e4001a977b4c21 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 14:00:34 +0800 Subject: [PATCH 31/41] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes model/config.go | 25 ++++++++++++++++++------- public | 2 +- worldsrv/scene.go | 1 - worldsrv/scenemgr.go | 1 + 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index eab78e7297231cf3a52b2e8368d3632ac62bb02e..79f8787d87dd629e44daad01b4faae3b91f55cf3 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUweP#ew#rtH){|P#w&C6!$4{g5A-u_7MwLEC&nNAuxx+42D?*(+INw>=7h` ZVGh0nbvQTxl-M~I0X_PKnTvt85CCSnJT(9S literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IUweP%^|`*{N{3k-O;f25eru=2MgFCFbBgl-hny2i-EQf0Au1jH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index ec74cdafd8493c72f3f5010721a7e2cc12d529f8..7f781343a7cc7a11712f89c0ca1f3edb0dfa161a 100644 GIT binary patch delta 226 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#nK)-nmQaV!F|8NHygy={DEH|X!9bVgG8V< NH*{8QHV|lL0RXb^Hf{g_ diff --git a/model/config.go b/model/config.go index 568775e..4ba254c 100644 --- a/model/config.go +++ b/model/config.go @@ -406,7 +406,19 @@ func (cm *ConfigMgr) UpdateRoomConfig(data *webapi.RoomConfig) { if d == nil { d = make([]*webapi.RoomConfig, 0) } - d = append(d, data) + + has := false + for k, v := range d { + if v.GetId() == data.GetId() { + d[k] = data + has = true + break + } + } + if !has { + d = append(d, data) + } + cm.GetConfig(data.GetPlatform()).RoomTypeMap[data.GetRoomType()] = d } @@ -414,12 +426,11 @@ func (cm *ConfigMgr) DelRoomConfig(plt string, id int32) { d := cm.GetConfig(plt).RoomConfig[id] if d != nil { b := cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] - if b != nil { - for i, v := range b { - if v.GetId() == id { - b = append(b[:i], b[i+1:]...) - cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] = b - } + for i, v := range b { + if v.GetId() == id { + b = append(b[:i], b[i+1:]...) + cm.GetConfig(plt).RoomTypeMap[d.GetRoomType()] = b + break } } } diff --git a/public b/public index 00b9fce..9d35521 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 +Subproject commit 9d355215710228e4481fc6334f6e14b902a03e95 diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 093a35e..a8fcd80 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -141,7 +141,6 @@ func NewScene(args *CreateSceneParam) *Scene { if s.CustomParam == nil { s.CustomParam = new(serverproto.CustomParam) } - s.sp.OnStart(s) return s } diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 185f3f5..439a945 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -413,6 +413,7 @@ func (m *SceneMgr) CreateScene(args *CreateSceneParam) *Scene { return nil } m.scenes[args.RoomId] = s + s.sp.OnStart(s) // 添加到游戏服记录中 args.GS.AddScene(&AddSceneParam{ S: s, From 63387ba9b4a611bef315c1e67113739deb798e2e Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 14:46:30 +0800 Subject: [PATCH 32/41] =?UTF-8?q?=E5=95=86=E5=9F=8E=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E6=88=BF=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scene.go | 2 +- worldsrv/shopmgr.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/worldsrv/scene.go b/worldsrv/scene.go index a8fcd80..2ff2a09 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -682,9 +682,9 @@ func (this *Scene) OnClose() { } this.Broadcast(int(hallproto.GameHallPacketID_PACKET_SC_DESTROYROOM), scDestroyRoom, 0) + this.sp.OnStop(this) this.deleting = true this.closed = true - this.sp.OnStop(this) for _, p := range this.players { this.DelPlayer(p) diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 1fdf0d2..40bd5de 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -1228,7 +1228,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, shopInfo.Id, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, shopInfo.Name, [ShopTypeItem]int32{0, int32(shopInfo.AmountFinal), 0}, costNum, webItemInfo, "", p.Channel, p.ChannelId) + p.DeviceId, shopInfo.Name, amount, costNum, webItemInfo, "", p.Channel, p.ChannelId) } else if cdata, ok := data.(*ExchangeShopInfo); ok { var info *shop.ExchangeType From 4bd2cee327429669f9752a90bd8873c7b7592bbd Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 14:49:51 +0800 Subject: [PATCH 33/41] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 9d35521..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 9d355215710228e4481fc6334f6e14b902a03e95 +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From 09dc4f45882d498a5aa95a4c93b683bad67a92f3 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 14:55:44 +0800 Subject: [PATCH 34/41] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index 00b9fce..d789cca 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 +Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 From 8a19cd642f49f96fc111d6ce75ddc4a163fed0eb Mon Sep 17 00:00:00 2001 From: kxdd Date: Fri, 6 Sep 2024 15:36:59 +0800 Subject: [PATCH 35/41] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E7=8A=B6=E6=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 11 ----------- public | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 36886fa..f60bbfa 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -677,12 +677,6 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) - case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -713,11 +707,6 @@ func (this *PlayGame) OnTick(s *base.Scene) { logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } - s.ChangeSceneState(rule.ClawDollSceneStateBilled) - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(s) - ClawdollSendPlayerInfo(s) return } } diff --git a/public b/public index d789cca..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From c20f0fa69cac02c61765550b040679c327a53562 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 15:39:30 +0800 Subject: [PATCH 36/41] =?UTF-8?q?=E5=95=86=E5=9F=8E=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/shopmgr.go | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 40bd5de..5f34e9b 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -63,9 +63,14 @@ const ( const ( ShopTypeCoin = iota + 1 // 金币 ShopTypeDiamond // 钻石 - ShopTypeItem // 道具 - ShopTypeFangKa // 房卡 - ShopTypeMax +) + +// 商品参数类型 +const ( + ShopParamCoin = iota // 金币 + ShopParamDiamond // 钻石 + ShopParamUnKnown // 未定义 + ShopParamMax // 参数数量 ) // 兑换商品状态 @@ -139,7 +144,7 @@ func (this *ShopMgr) GetShopInfoProto(si *model.ShopInfo, p *Player, vipShopId i } added := int32(rand.Intn(int(si.AddArea[1])-int(si.AddArea[0])+1) + int(si.AddArea[0])) consumptionAmount := int32(rand.Intn(int(si.CostArea[1])-int(si.CostArea[0])+1) + int(si.CostArea[0])) - amount := int64(si.Amount) + amount := si.Amount isBuy := false if si.Page == ShopPageVip { shopData := p.GetVipShopData(si.Id, vipShopId) @@ -705,7 +710,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po }) } - amount := [3]int32{} // 获得含义:金币,钻石,经验 + amount := [ShopParamMax]int32{} // 获得含义:金币,钻石,经验 if shopInfo.Page == ShopPageVip { if p.VipShopData[vipShopId] == nil { logger.Logger.Errorf("GainShop 没有找到vip商品 shopId:%v vipShopId:%v snid:%v", shopInfo.Id, vipShopId, p.SnId) @@ -720,7 +725,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po switch shopInfo.Type { case ShopTypeCoin: - amount[0] = int32(addTotal) + amount[ShopParamCoin] = int32(addTotal) p.AddCoin(addTotal, 0, common.GainWay_Shop_Buy, "system", shopName) if shopInfo.Ad > 0 { //观看广告 if !p.IsRob { @@ -737,7 +742,7 @@ func (this *ShopMgr) GainShop(shopInfo *model.ShopInfo, p *Player, vipShopId, po case ShopTypeDiamond: //增加钻石 - amount[1] = int32(addTotal) + amount[ShopParamDiamond] = int32(addTotal) p.AddDiamond(addTotal, 0, common.GainWay_Shop_Buy, "system", shopName) if shopInfo.Ad > 0 { //观看广告 if !p.IsRob { @@ -904,7 +909,7 @@ func (this *ShopMgr) Exchange(p *Player, goodsId int32, username, mobile, commen if err := proto.Unmarshal(buff, as); err != nil { logger.Logger.Errorf("API_CreateExchange err: %v %v", err, as.Tag) } - var amount [ShopTypeItem]int32 + var amount [ShopParamMax]int32 //保存db dbShop := this.NewDbShop(p, 0, amount[:], ExchangeConsumeCash, info.Cash*num, common.GainWay_ShopBuy, itemInfo, cdata.Id, cdata.Name, 0, "", []int32{}) @@ -1196,7 +1201,7 @@ func (this *ShopMgr) NewDbShop(p *Player, pageId int32, amount []int32, consume, func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, remark string) { //三方购买 task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { - var amount [ShopTypeItem]int32 + var amount [ShopParamMax]int32 var dbShop *model.DbShop if shopInfo, ok := data.(*model.ShopInfo); ok { costNum := rand.Int31n(shopInfo.CostArea[1]-shopInfo.CostArea[0]+1) + shopInfo.CostArea[0] @@ -1215,7 +1220,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, switch shopInfo.Type { case ShopTypeDiamond: - amount[ShopTypeDiamond-1] = int32(shopInfo.AmountFinal) + amount[ShopParamDiamond] = int32(shopInfo.AmountFinal) default: } @@ -1253,14 +1258,14 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, //兑换 充值订单 logger.Logger.Infof("客户端请求兑换 创建支付订单!AppId = %v,SnId = %v,Id = %v,dbShop.LogId.Hex() = %v,cash = %v", common.GetAppId(), p.SnId, cdata.Id, dbShop.LogId.Hex(), info.Cash*cdata.ExchangeNum) return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, cdata.Id, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, cdata.Name, [ShopTypeItem]int32{0, 0, 0}, info.Cash*cdata.ExchangeNum, nil, orderId, p.Channel, p.ChannelId) + p.DeviceId, cdata.Name, amount, info.Cash*cdata.ExchangeNum, nil, orderId, p.Channel, p.ChannelId) } else if bbd, ok := data.(*webapi_proto.BlindBoxData); ok { - if bbd.Type == 1 { + if bbd.Type == ShopTypeCoin { //金币 - amount[0] = bbd.Grade - } else if bbd.Type == 2 { + amount[ShopParamCoin] = bbd.Grade + } else if bbd.Type == ShopTypeDiamond { //钻石 - amount[1] = bbd.Grade + amount[ShopParamDiamond] = bbd.Grade } dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(bbd.Price2), common.GainWay_ActBlindBox, nil, 0, "", 0, remark, []int32{bbd.Id}) err := model.InsertDbShopLog(dbShop) @@ -1274,9 +1279,9 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, var items []model.ItemInfo for _, it := range wfs.Item { if it.Type == 1 { - amount[0] = it.Grade + amount[ShopParamCoin] = it.Grade } else if it.Type == 2 { - amount[1] = it.Grade + amount[ShopParamDiamond] = it.Grade } else if it.Type == 3 { items = append(items, model.ItemInfo{ ItemId: it.Item_Id, From b4bab0de1eea56a93536bfbd9b40984cfed1049c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 15:58:06 +0800 Subject: [PATCH 37/41] =?UTF-8?q?=E5=88=A0=E9=99=A4public=E5=AD=90?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 3 --- README.md | 21 --------------------- public | 1 - shell/update_public.bat | 10 +++++----- 4 files changed, 5 insertions(+), 30 deletions(-) delete mode 100644 .gitmodules delete mode 160000 public diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e7c37df..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "public"] - path = public - url = git@git.pogorockgames.com:mango-games/server/public.git diff --git a/README.md b/README.md index 432863b..f5b2aeb 100644 --- a/README.md +++ b/README.md @@ -2,27 +2,6 @@ 游戏业务代码 -### 子仓库 - public子仓库本项目本身并没有使用,只是用来暴露部分公共代码,供其他项目使用。 - 例如: - 1.客户端同步通信协议 - 2.客户端同步游戏配置 - -#### 初始化子仓库 -``` -git submodule update --init --recursive -``` - -#### 更新子仓库 -``` -git submodule update --remote -``` - -#### 更新并提交子仓库代码 -``` -update_public.sh -``` - ### 脚本 #### gen_data.bat xlsx文件转换为json,dat文件,生成pbdata.proto,生成srvdata包 diff --git a/public b/public deleted file mode 160000 index 00b9fce..0000000 --- a/public +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 diff --git a/shell/update_public.bat b/shell/update_public.bat index a81133b..376fa0b 100644 --- a/shell/update_public.bat +++ b/shell/update_public.bat @@ -1,11 +1,11 @@ -if exist ".\public" ( - cd .\public +if exist "..\public" ( + cd ..\public git checkout main git pull - xcopy ..\data .\data /s /e /y - xcopy ..\protocol .\protocol /s /e /y - xcopy ..\xlsx .\xlsx /s /e /y + xcopy ..\game\data .\data /s /e /y + xcopy ..\game\protocol .\protocol /s /e /y + xcopy ..\game\xlsx .\xlsx /s /e /y git add . git commit -m "update" From 5bdf3d78df250cedf6660ec3b00c9943b4d32124 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 16:23:57 +0800 Subject: [PATCH 38/41] =?UTF-8?q?=E5=95=86=E5=BA=97=E8=B4=AD=E4=B9=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/shopmgr.go | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 5f34e9b..75333b9 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -63,6 +63,7 @@ const ( const ( ShopTypeCoin = iota + 1 // 金币 ShopTypeDiamond // 钻石 + SHopTypeItem // 道具 ) // 商品参数类型 @@ -1267,26 +1268,45 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, //钻石 amount[ShopParamDiamond] = bbd.Grade } - dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(bbd.Price2), common.GainWay_ActBlindBox, nil, 0, "", 0, remark, []int32{bbd.Id}) + + var itemInfo []model.ItemInfo + var webItemInfo []*webapi_proto.ItemInfo + for _, info := range shopInfo.GetItems() { + itemInfo = append(itemInfo, model.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) + webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ + ItemId: info.ItemId, + ItemNum: info.ItemNum, + }) + } + + dbShop = this.NewDbShop(p, 0, amount[:], ShopConsumeMoney, int32(bbd.Price2), common.GainWay_ActBlindBox, itemInfo, 0, "", 0, remark, []int32{bbd.Id}) err := model.InsertDbShopLog(dbShop) if err != nil { logger.Logger.Errorf("model.InsertDbShopLog err:", err) return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, bbd.Name, amount, int32(bbd.Price2), nil, "", p.Channel, p.ChannelId) + p.DeviceId, bbd.Name, amount, int32(bbd.Price2), webItemInfo, "", p.Channel, p.ChannelId) } else if wfs, ok := data.(*webapi_proto.WelfareSpree); ok { var items []model.ItemInfo + var webItemInfo []*webapi_proto.ItemInfo for _, it := range wfs.Item { - if it.Type == 1 { + if it.Type == ShopTypeCoin { amount[ShopParamCoin] = it.Grade - } else if it.Type == 2 { + } else if it.Type == ShopTypeDiamond { amount[ShopParamDiamond] = it.Grade - } else if it.Type == 3 { + } else if it.Type == SHopTypeItem { items = append(items, model.ItemInfo{ ItemId: it.Item_Id, ItemNum: int64(it.Grade), }) + webItemInfo = append(webItemInfo, &webapi_proto.ItemInfo{ + ItemId: it.GetItem_Id(), + ItemNum: int64(it.GetGrade()), + }) } } var gainWay int32 = common.GainWay_ActFirstPay @@ -1300,7 +1320,7 @@ func (this *ShopMgr) SendAPICreateOrder(p *Player, ConfigPayId int32, data any, return nil } return webapi.API_CreateOrder(common.GetAppId(), dbShop.LogId.Hex(), ConfigPayId, p.SnId, 0, p.Platform, p.PackageID, p.DeviceOS, - p.DeviceId, "FirstRecharge", amount, int32(wfs.Price2), nil, "", p.Channel, p.ChannelId) + p.DeviceId, "FirstRecharge", amount, int32(wfs.Price2), webItemInfo, "", p.Channel, p.ChannelId) } return nil }), task.CompleteNotifyWrapper(func(retdata interface{}, t task.Task) { From 67a85f6535f6411a0fccb77e9d034d65943e135c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Fri, 6 Sep 2024 17:28:10 +0800 Subject: [PATCH 39/41] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E6=B2=A1=E4=BA=BA=E8=A7=A3=E6=95=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_game.go | 37 -------------------------- gamesrv/tienlen/scenepolicy_tienlen.go | 6 ++--- 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/gamesrv/action/action_game.go b/gamesrv/action/action_game.go index 344fa6e..8148257 100644 --- a/gamesrv/action/action_game.go +++ b/gamesrv/action/action_game.go @@ -13,43 +13,6 @@ import ( "mongo.games.com/game/srvdata" ) -type CSDestroyRoomPacketFactory struct { -} -type CSDestroyRoomHandler struct { -} - -func (this *CSDestroyRoomPacketFactory) CreatePacket() interface{} { - pack := &gamehall.CSDestroyRoom{} - return pack -} - -func (this *CSDestroyRoomHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error { - logger.Logger.Trace("CSDestroyRoomHandler Process recv ", data) - p := base.PlayerMgrSington.GetPlayer(sid) - if p == nil { - logger.Logger.Warn("CSDestroyRoomHandler p == nil") - return nil - } - scene := p.GetScene() - if scene == nil { - logger.Logger.Warn("CSDestroyRoomHandler p.GetScene() == nil") - return nil - } - if !scene.HasPlayer(p) { - return nil - } - if scene.Creator != p.SnId { - logger.Logger.Warn("CSDestroyRoomHandler s.creator != p.AccountId") - return nil - } - // 房卡场开始后不能解散 - if scene.IsCustom() && scene.NumOfGames > 0 { - return nil - } - scene.Destroy(true) - return nil -} - type CSLeaveRoomPacketFactory struct { } type CSLeaveRoomHandler struct { diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 46bf98c..6a90360 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -148,6 +148,9 @@ func (this *ScenePolicyTienLen) OnPlayerLeave(s *base.Scene, p *base.Player, rea } sceneEx.OnPlayerLeave(p, reason) s.FirePlayerEvent(p, base.PlayerEventLeave, []int64{int64(reason)}) + if s.IsCustom() && len(s.Players) == 0 { + s.Destroy(true) + } } // 玩家掉线 @@ -603,9 +606,6 @@ func (this *SceneBaseStateTienLen) OnTick(s *base.Scene) { s.RandRobotCnt() s.SetTimerRandomRobot(s.GetRobotTime()) } - if s.IsCustom() && len(s.Players) == 0 { - s.Destroy(true) - } } // 发送玩家操作情况 From 892a61aa470e1af3b2e40f1c77c29d3bcabf2bca Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 17:30:28 +0800 Subject: [PATCH 40/41] log --- machine/action/action_server.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index da5749b..759543c 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -201,7 +201,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 0, TypeId: 2, }) - logger.Logger.Trace("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) + fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) return } if bytes.Contains(part, instruction1) && num != 1 { @@ -209,7 +209,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) if err != nil { - logger.Logger.Error("Failed to read response from server:", err) + fmt.Println("Failed to read response from server:", err) return } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ @@ -218,7 +218,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 1, TypeId: 2, }) - logger.Logger.Trace("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) + fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) return } //上分成功 @@ -231,6 +231,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 1, TypeId: 1, }) + fmt.Println("上分成功!!!!!!!!!!snid = ", snid, "num = ", num) } //上分失败 coinData = []byte{0xAA, 0x04, 0x02, 0x03, 0x00} @@ -242,6 +243,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid Result: 0, TypeId: 1, }) + fmt.Println("上分失败!!!!!!!!!!snid = ", snid, "num = ", num) } } } @@ -254,7 +256,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid // 与游戏服务器连接成功,向游戏服务器推送所有娃娃机连接 func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interface{}) error { - logger.Logger.Trace("与游戏服务器连接成功") + fmt.Println("与游戏服务器连接成功") //开始向游戏服务器发送娃娃机连接信息 msg := &machine.MSDollMachineList{} for i, _ := range machinedoll.MachineMgr.ConnMap { @@ -263,7 +265,7 @@ func SMGameLinkSucceedHandler(session *netlib.Session, packetId int, data interf msg.Data = append(msg.Data, info) } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), msg) - logger.Logger.Tracef("向游戏服务器发送娃娃机连接信息:%v", msg) + fmt.Println("向游戏服务器发送娃娃机连接信息:%v", msg) return nil } @@ -304,7 +306,7 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) info.StreamId = msg.StreamId session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) - logger.Logger.Tracef("向游戏服务器发送娃娃机token:%v", info) + fmt.Println("向游戏服务器发送娃娃机token:%v", info) return nil } From 7889c982eafed6e8660a03acc687c42a596e69bb Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Fri, 6 Sep 2024 18:06:40 +0800 Subject: [PATCH 41/41] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=A9=9F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machine/action/action_server.go | 12 ++++++------ machine/machinedoll/machinemgr.go | 4 +--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 759543c..ea70d6b 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -195,13 +195,13 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid //fmt.Println("Failed to read response from server:", err) return } - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 0, TypeId: 2, }) - fmt.Println("没有抓到礼品!!!!!!!!snid = ", snid, "num = ", num) return } if bytes.Contains(part, instruction1) && num != 1 { @@ -212,20 +212,20 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid fmt.Println("Failed to read response from server:", err) return } - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 1, TypeId: 2, }) - fmt.Println("抓到礼品了!!!!!!!!snid = ", snid, "num = ", num) return } //上分成功 coinData := []byte{0xAA, 0x04, 0x02, 0x03, 0x01} if bytes.Contains(part, coinData) { //返回消息 - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 1, @@ -237,7 +237,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid coinData = []byte{0xAA, 0x04, 0x02, 0x03, 0x00} if bytes.Contains(part, coinData) { //返回消息 - session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ + machinedoll.SendToGameServer(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{ Snid: snid, Id: id, Result: 0, diff --git a/machine/machinedoll/machinemgr.go b/machine/machinedoll/machinemgr.go index 3fc997e..bbad9ff 100644 --- a/machine/machinedoll/machinemgr.go +++ b/machine/machinedoll/machinemgr.go @@ -152,9 +152,7 @@ func (this *MachineManager) UpdateToGameServer(conn *Conn, status int32) { } func SendToGameServer(pid int, msg interface{}) { - if GameConn == nil { - GameConn = srvlib.ServerSessionMgrSington.GetSession(1, 7, 701) - } + GameConn = srvlib.ServerSessionMgrSington.GetSession(1, 7, 777) if GameConn != nil { GameConn.Send(pid, msg) } else {