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.Cid <= 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 tasks []*pb.BuriedParam = make([]*pb.BuriedParam, 0) ) 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.GetMlineShopConfById(req.Cid); 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 _, ok := info.Unlock[req.Cid]; ok { bUnlock = true } } if !bUnlock { errdata = &pb.ErrorData{ Code: pb.ErrorCode_MainlineShopUnlock, Title: pb.ErrorCode_MainlineShopUnlock.ToString(), } return } info.Buytime[req.Cid] += 1 if shopConf.Bugtime > info.Buytime[req.Cid] { // 限购了 买不了 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, }) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype236, shopConf.Shopid, 1)) go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) { this.module.ModuleBuried.TriggerBuried(session, tasks...) this.module.WriteUserLog(session.GetUserId(), comm.GMResAddType, "MainlineShopBuyReq", atno) this.module.WriteUserLog(session.GetUserId(), comm.GMResDelType, "MainlineShopBuyReq", shopConf.Need) }) return }