diff --git a/bin/json/game_global.json b/bin/json/game_global.json index dfff0cd7b..908097e6c 100644 --- a/bin/json/game_global.json +++ b/bin/json/game_global.json @@ -824,6 +824,7 @@ "Passcheck4_WeekNum": 6, "stonehenge_KeyMaxNum": 8, "stonehenge_DayNum": 1, - "stonehenge_KeyItemId": "10000039" + "stonehenge_KeyItemId": "10000039", + "ps_buyGroup": 1003 } ] \ No newline at end of file diff --git a/modules/items/api_buyphysical.go b/modules/items/api_buyphysical.go index 40c32b0a4..7443fcb59 100644 --- a/modules/items/api_buyphysical.go +++ b/modules/items/api_buyphysical.go @@ -21,12 +21,13 @@ func (this *apiComp) BuyPhysicalCheck(session comm.IUserSession, req *pb.ItemsBu //购买 func (this *apiComp) BuyPhysical(session comm.IUserSession, req *pb.ItemsBuyPhysicalReq) (errdata *pb.ErrorData) { var ( - err error - user *pb.DBUserExpand - psitem *cfg.Gameatn - needs []*cfg.Gameatn - haveneeds []*cfg.Gameatn - sale []*cfg.Gameatn + err error + user *pb.DBUserExpand + psitem *cfg.Gameatn + needs []*cfg.Gameatn + maxbuy int32 + need []*cfg.Gameatn + pricekey int32 ) if errdata = this.BuyPhysicalCheck(session, req); errdata != nil { return @@ -59,29 +60,46 @@ func (this *apiComp) BuyPhysical(session comm.IUserSession, req *pb.ItemsBuyPhys if time.Unix(user.PhysicalbuyLasttime, 0).Day() != time.Now().Day() { //不是同一天 重置购买次数 user.Physicalbuynum = 0 } - - if req.Amount+uint32(user.Physicalbuynum) > uint32(len(needs)) { + pricekey = this.module.ModuleTools.GetGlobalConf().PsBuyGroup + if maxbuy, err = this.module.ModuleTools.GetPriceGroupLen(pricekey); err != nil { errdata = &pb.ErrorData{ - Code: pb.ErrorCode_ItemsBuyPsUpperLimit, - Title: pb.ErrorCode_ItemsBuyPsUpperLimit.ToString(), + Code: pb.ErrorCode_ConfigNoFound, + Title: pb.ErrorCode_CacheReadError.ToString(), + Message: err.Error(), } return } - - haveneeds = make([]*cfg.Gameatn, 0) - for i := uint32(0); i < req.Amount; i++ { - haveneeds = append(haveneeds, needs[int(int32(i)+user.Physicalbuynum)]) + need = make([]*cfg.Gameatn, 0) + for i := int32(0); i < int32(req.Amount); i++ { + if user.Physicalbuynum+i+1 > maxbuy { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ArenaTicketBuyUp, + Title: pb.ErrorCode_ArenaTicketBuyUp.ToString(), + } + return + } + if res, err := this.module.ModuleTools.GetPriceGroupCost(pricekey, user.Physicalbuynum+i+1); len(res) > 0 { + need = append(need, res...) + } else { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ConfigNoFound, + Title: pb.ErrorCode_ConfigNoFound.ToString(), + Message: err.Error(), + } + return + } } - if errdata = this.module.ConsumeRes(session, haveneeds, true); errdata != nil { + if errdata = this.module.ConsumeRes(session, need, true); errdata != nil { return } - sale = []*cfg.Gameatn{{A: psitem.A, T: psitem.T, N: int32(req.Amount)}} + sale := []*cfg.Gameatn{{A: psitem.A, T: psitem.T, N: psitem.N * int32(req.Amount)}} if errdata = this.module.DispenseRes(session, sale, true); errdata != nil { return } + user.Physicalbuynum += int32(req.Amount) user.PhysicalbuyLasttime = time.Now().Unix() this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), map[string]interface{}{ diff --git a/modules/user/module.go b/modules/user/module.go index d57c78d0b..687017975 100644 --- a/modules/user/module.go +++ b/modules/user/module.go @@ -405,9 +405,8 @@ func (this *User) change(session comm.IUserSession, attr string, add int32) (cha if user == nil || userEx == nil { errdata = &pb.ErrorData{ - Code: pb.ErrorCode_UserSessionNobeing, - Title: pb.ErrorCode_UserSessionNobeing.ToString(), - Message: err.Error(), + Code: pb.ErrorCode_UserSessionNobeing, + Title: pb.ErrorCode_UserSessionNobeing.ToString(), } return } diff --git a/sys/configure/structs/game.globalData.go b/sys/configure/structs/game.globalData.go index 9bb2bdcf3..06220dc32 100644 --- a/sys/configure/structs/game.globalData.go +++ b/sys/configure/structs/game.globalData.go @@ -266,6 +266,7 @@ type GameGlobalData struct { StonehengeKeyMaxNum int32 StonehengeDayNum int32 StonehengeKeyItemId string + PsBuyGroup int32 } const TypeId_GameGlobalData = 477542761 @@ -1089,6 +1090,7 @@ func (_v *GameGlobalData)Deserialize(_buf map[string]interface{}) (err error) { { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["stonehenge_KeyMaxNum"].(float64); !_ok_ { err = errors.New("stonehenge_KeyMaxNum error"); return }; _v.StonehengeKeyMaxNum = int32(_tempNum_) } { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["stonehenge_DayNum"].(float64); !_ok_ { err = errors.New("stonehenge_DayNum error"); return }; _v.StonehengeDayNum = int32(_tempNum_) } { var _ok_ bool; if _v.StonehengeKeyItemId, _ok_ = _buf["stonehenge_KeyItemId"].(string); !_ok_ { err = errors.New("stonehenge_KeyItemId error"); return } } + { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["ps_buyGroup"].(float64); !_ok_ { err = errors.New("ps_buyGroup error"); return }; _v.PsBuyGroup = int32(_tempNum_) } return }