package mainline import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" ) // 参数校验 func (this *apiComp) ShopBuyCheck(session comm.IUserSession, req *pb.MainlineShopBuyReq) (errdata *pb.ErrorData) { if req.Shopid == 0 || req.Itemid == 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } return } return } // 商店购买 func (this *apiComp) ShopBuy(session comm.IUserSession, req *pb.MainlineShopBuyReq) (errdata *pb.ErrorData) { var ( info *pb.DBMainlineShop err error shopConf *cfg.GameMainShopItemData bUnlock bool atno []*pb.UserAtno ) bUnlock = true errdata = this.ShopBuyCheck(session, req) if errdata != nil { return // 参数校验失败直接返回 } info, err = this.module.modelShop.getMainlineShopData(session.GetUserId()) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } if shopConf, err = this.module.configure.GetMainShopConf(req.Shopid, req.Itemid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } // 检查是否需要解锁 if shopConf.Unlock != 0 { bUnlock = false if unlock, ok := info.Unlock[req.Shopid]; ok { for _, v := range unlock.Item { if v == req.Itemid { bUnlock = true } } } } if !bUnlock { errdata = &pb.ErrorData{ Code: pb.ErrorCode_MainlineShopUnlock, Title: pb.ErrorCode_MainlineShopUnlock.ToString(), } return } if v, ok := info.Buytime[req.Shopid]; !ok { item := make(map[int32]int32, 0) item[req.Itemid] = 1 info.Buytime[req.Shopid] = &pb.MlineShopData{ Item: item, } } else { // 校验是否达到限购 if v1, ok := v.Item[req.Itemid]; !ok { v.Item[req.Itemid] += 1 } else { if shopConf.Bugtime >= v1 { // 限购了 买不了 errdata = &pb.ErrorData{ Code: pb.ErrorCode_MainlineBuyMaxCount, Title: pb.ErrorCode_MainlineBuyMaxCount.ToString(), } return } } } if errdata = this.module.ConsumeRes(session, shopConf.Need, true); errdata != nil { return } if errdata, atno = this.module.DispenseAtno(session, shopConf.Itemsell, true); errdata != nil { this.module.DispenseRes(session, shopConf.Need, true) return } this.module.modelShop.updateMainlineShopData(session.GetUserId(), info) session.SendMsg(string(this.module.GetType()), "shopbuy", &pb.MainlineShopBuyResp{ Info: info, Item: atno, }) return }