From e0f2f76322105a9c34fef43d7ab77fece24af271 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 26 Jun 2024 14:10:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E9=82=80=E8=AF=B7=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameItem.dat | Bin 8437 -> 8437 bytes data/DB_GameItem.json | 16 +++--- data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 2161 -> 2161 bytes dbproxy/svc/l_dbshoplog.go | 2 + public | 2 +- worldsrv/player.go | 111 +++++++++++++++++++----------------- worldsrv/shopmgr.go | 1 + worldsrv/trascate_webapi.go | 11 ++++ xlsx/DB_GameItem.xlsx | Bin 23215 -> 23214 bytes 11 files changed, 82 insertions(+), 61 deletions(-) diff --git a/data/DB_GameItem.dat b/data/DB_GameItem.dat index f49b1b26b397acfb24f99a92d29ec0eda4a11c6a..8f1263ef62d7f727c10daaf8f8c17d7b3a101114 100644 GIT binary patch delta 47 lcmezB_|E{0`XR Q>>P`L9{s}1#XwsK0A;c~H2?qr literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IZ(}qnG4egvma~^&^<77QOpC1gWaXX33f-r+D9y0u^cR5hrkTN>To;;-hnz8 V<^XU2D6w-a0($fdGZzDGApm6JJT(9S diff --git a/data/DB_Task.dat b/data/DB_Task.dat index 930f0e775c12df0b817d0e7e12d562e26a1aab75..7ae1e8df9bc416e978bc2a2335df9e695e0ebe6e 100644 GIT binary patch delta 64 zcmew;@KInxDC6WU>>`sh8BYsxa4hU)6IgIa&WerWVjHsn%Vt-mRu-VN;N;tE-IK2{ U3NUg_E@!u$T*@do`6&Au0MA|(r2qf` delta 90 zcmew;@KInxDC6WU>>`sh8BYtcaa?R;7GSaB;8@tpCa~a;+-6s%R+h=7jDnMIvvmWd d7XgL2pwb6gY$unq+d@SdVVZi`CLd*A0{{&o8)g6i diff --git a/dbproxy/svc/l_dbshoplog.go b/dbproxy/svc/l_dbshoplog.go index 19c6ad7..aade343 100644 --- a/dbproxy/svc/l_dbshoplog.go +++ b/dbproxy/svc/l_dbshoplog.go @@ -18,6 +18,8 @@ func DbShopLogCollection(plt string) *mongo.Collection { dbShopRec.EnsureIndex(mgo.Index{Key: []string{"pageid"}, Background: true, Sparse: true}) dbShopRec.EnsureIndex(mgo.Index{Key: []string{"state"}, Background: true, Sparse: true}) dbShopRec.EnsureIndex(mgo.Index{Key: []string{"shopid"}, Background: true, Sparse: true}) + dbShopRec.EnsureIndex(mgo.Index{Key: []string{"ts"}, Background: true, Sparse: true}) + dbShopRec.EnsureIndex(mgo.Index{Key: []string{"-ts"}, Background: true, Sparse: true}) } return dbShopRec } diff --git a/public b/public index b3c639b..5843874 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit b3c639ba6fbdb6ee41e21a8b96901a179db031af +Subproject commit 58438743032d93fc2e16d705c4ebe1df5c33f1b2 diff --git a/worldsrv/player.go b/worldsrv/player.go index ad3a894..3e51cad 100644 --- a/worldsrv/player.go +++ b/worldsrv/player.go @@ -3848,66 +3848,73 @@ func (this *Player) GetPayGoodsInfo() { if data != nil { infos := data.([]*model.DbShop) for _, info := range infos { - var itemInfo []*player_proto.PayItem - var items []*Item - if len(info.Amount) > 0 { - this.AddCoin(int64(info.Amount[0]), 0, info.GainWay, "Callback_login", info.Remark) - this.AddDiamond(int64(info.Amount[1]), 0, info.GainWay, "Callback_login", info.Remark) - } - this.AddMoneyPayTotal(int64(info.ConsumeNum)) - if info.ItemInfo != nil { - for _, v := range info.ItemInfo { - items = append(items, &Item{ItemId: v.ItemId, ItemNum: v.ItemNum}) - itemInfo = append(itemInfo, &player_proto.PayItem{ - ItemId: v.ItemId, - ItemNum: v.ItemNum, - }) + switch info.PageId { + case ShopPageBackend: + logger.Logger.Tracef("GetPayGoodsInfo ShopPageBackend %+v", *info) + default: + var itemInfo []*player_proto.PayItem + var items []*Item + if len(info.Amount) > 0 { + this.AddCoin(int64(info.Amount[0]), 0, info.GainWay, "Callback_login", info.Remark) + this.AddDiamond(int64(info.Amount[1]), 0, info.GainWay, "Callback_login", info.Remark) } - } - switch info.Remark { - case "BlindBox": - if len(info.OtherParams) > 0 { - this.WelfData.BlindBoxId = info.OtherParams[0] - } else { - logger.Logger.Errorf("GetPayGoodsInfo BlindBox OtherParams is nil") + this.AddMoneyPayTotal(int64(info.ConsumeNum)) + if info.ItemInfo != nil { + for _, v := range info.ItemInfo { + items = append(items, &Item{ItemId: v.ItemId, ItemNum: v.ItemNum}) + itemInfo = append(itemInfo, &player_proto.PayItem{ + ItemId: v.ItemId, + ItemNum: v.ItemNum, + }) + } } - case "FirstRecharge": - if len(info.OtherParams) > 0 { + switch info.Remark { + case "BlindBox": + if len(info.OtherParams) > 0 { + this.WelfData.BlindBoxId = info.OtherParams[0] + } else { + logger.Logger.Errorf("GetPayGoodsInfo BlindBox OtherParams is nil") + } + case "FirstRecharge": + if len(info.OtherParams) > 0 { - this.WelfData.FirstPayDay = info.OtherParams[0] - this.WelfData.FirstPayTickets = info.Ts - } else { - logger.Logger.Errorf("GetPayGoodsInfo FirstRecharge OtherParams is nil") + this.WelfData.FirstPayDay = info.OtherParams[0] + this.WelfData.FirstPayTickets = info.Ts + } else { + logger.Logger.Errorf("GetPayGoodsInfo FirstRecharge OtherParams is nil") + } + case "ContinuousPay": + if len(info.OtherParams) > 0 { + + this.WelfData.ContinuousPayDay = info.OtherParams[0] + this.WelfData.ContinuousPayTickets = info.Ts + } else { + logger.Logger.Errorf("GetPayGoodsInfo ContinuousPay OtherParams is nil") + } } - case "ContinuousPay": - if len(info.OtherParams) > 0 { + this.UpdatePlayerVipBag(info.ShopId) + this.UpdateShopID(info.ShopId) - this.WelfData.ContinuousPayDay = info.OtherParams[0] - this.WelfData.ContinuousPayTickets = info.Ts - } else { - logger.Logger.Errorf("GetPayGoodsInfo ContinuousPay OtherParams is nil") + this.dirty = true + this.SendDiffData() + + info.Amount[2] = this.GetVIPExpByPay(info.ConsumeNum) + + BagMgrSingleton.AddItems(this, items, 0, info.GainWay, info.Operator, info.Remark, 0, 0, false) + + PayGoodsInfo := &player_proto.SCPayGoodsInfo{ + Gold: info.Amount, + Item: itemInfo, } + proto.SetDefaults(PayGoodsInfo) + this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PAYGOODSINFO), PayGoodsInfo) } - this.UpdatePlayerVipBag(info.ShopId) - this.UpdateShopID(info.ShopId) - - this.dirty = true - this.SendDiffData() - - info.Amount[2] = this.GetVIPExpByPay(info.ConsumeNum) - - BagMgrSingleton.AddItems(this, items, 0, info.GainWay, info.Operator, info.Remark, 0, 0, false) - - PayGoodsInfo := &player_proto.SCPayGoodsInfo{ - Gold: info.Amount, - Item: itemInfo, + if info.ConsumeNum > 0 { + TaskSubjectSingleton.Touch(common.TaskTypePay, &TaskData{ + SnId: this.SnId, + Num: int64(info.ConsumeNum), + }) } - proto.SetDefaults(PayGoodsInfo) - this.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PAYGOODSINFO), PayGoodsInfo) - TaskSubjectSingleton.Touch(common.TaskTypePay, &TaskData{ - SnId: this.SnId, - Num: int64(info.ConsumeNum), - }) } } diff --git a/worldsrv/shopmgr.go b/worldsrv/shopmgr.go index 0865332..01f77d7 100644 --- a/worldsrv/shopmgr.go +++ b/worldsrv/shopmgr.go @@ -51,6 +51,7 @@ const ( ShopPagePhoneScoreGoogle = 62 ShopPageGift = 7 //礼包页面 ShopPageDiamondBank = 8 //钻石存储罐 + ShopPageBackend = 9 //并不是页面,是后台加币记录类型 ) // 商品类型 diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index cf6c826..9659207 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -1772,6 +1772,17 @@ func init() { logger.Logger.Errorf("model.UpdatePlayerCoin err:%v.", err) return nil } + + // 充值金额记录 + if money > 0 { + err = model.InsertDbShopLog(model.NewDbShop(findPlayer.Platform, ShopPageBackend, nil, "", 0, 0, int32(money), + 0, nil, 0, "", findPlayer.SnId, 3, "后台离线加币", nil)) + if err != nil { + logger.Logger.Errorf("model.InsertDbShopLog err:%v.", err) + return nil + } + } + //账变记录 err = model.InsertCoinLog(coinlogex) if err != nil { diff --git a/xlsx/DB_GameItem.xlsx b/xlsx/DB_GameItem.xlsx index 928c317196bf6f99edc2ceea2a1c6fe118300ab5..6dc82a04bc6953d423bfda7f7c46e94174014f6c 100644 GIT binary patch delta 10030 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