package items import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "google.golang.org/protobuf/proto" ) //参数校验 func (this *apiComp) UseitemCheck(session comm.IUserSession, req *pb.ItemsUseItemReq) (code pb.ErrorCode) { if req.GridId == "" || req.Amount <= 0 || req.Select < 0 { code = pb.ErrorCode_ReqParameterError } return } //使用道具 func (this *apiComp) Useitem(session comm.IUserSession, req *pb.ItemsUseItemReq) (code pb.ErrorCode, data proto.Message) { var ( err error item *pb.DB_UserItemData itemcf *cfg.Game_itemData prop []*cfg.Game_propsgroupData ) if code = this.UseitemCheck(session, req); code != pb.ErrorCode_Success { return } if item, err = this.module.modelItems.QueryUserPackByGridId(session.GetUserId(), req.GridId); err != nil { code = pb.ErrorCode_ReqParameterError return } if itemcf, err = this.module.configure.GetItemConfigure(item.ItemId); err != nil { code = pb.ErrorCode_ConfigurationException return } switch itemcf.Usetype { case 1: //英雄碎片 if prop, err = this.module.configure.GetPropsgroupConfigure(itemcf.BoxId); err != nil { code = pb.ErrorCode_ConfigNoFound return } if itemcf.SynthetizeNum*int32(req.Amount) > int32(item.Amount) { //碎片数量不够 code = pb.ErrorCode_ItemsNoEnough return } if code = this.module.AddItemforGrid(&comm.ModuleCallSource{}, session, req.GridId, -1*itemcf.SynthetizeNum*int32(req.Amount), true); code != pb.ErrorCode_Success { return } sale := RandomProps(prop) if code = this.module.ModuleHero.GetSpecifiedHero(session, sale.Prize.T, sale.Star, 0, int32(req.Amount)); code != pb.ErrorCode_Success { return } case 4: //自选宝箱 if prop, err = this.module.configure.GetPropsgroupConfigure(itemcf.BoxId); err != nil { code = pb.ErrorCode_ConfigNoFound return } if code = this.module.AddItemforGrid(&comm.ModuleCallSource{}, session, req.GridId, -1*int32(req.Amount), true); code != pb.ErrorCode_Success { return } var sale *cfg.Game_atn for _, v := range prop { if v.Key == req.Select { sale = &cfg.Game_atn{ A: v.Prize.A, T: v.Prize.T, N: v.Prize.N, } } } if sale == nil { this.module.Errorf("no found target sale:%v", req.Select) code = pb.ErrorCode_ReqParameterError return } sale.N = sale.N * int32(req.Amount) if code = this.module.DispenseRes(session, []*cfg.Game_atn{sale}, true); code != pb.ErrorCode_Success { return } case 5: //随机宝箱 if prop, err = this.module.configure.GetPropsgroupConfigure(itemcf.BoxId); err != nil { code = pb.ErrorCode_ConfigNoFound return } sale := make([]*cfg.Game_atn, req.Amount) for i, _ := range sale { sale[i] = RandomProps(prop).Prize } if code = this.module.AddItemforGrid(&comm.ModuleCallSource{}, session, req.GridId, -1*int32(req.Amount), true); code != pb.ErrorCode_Success { return } if code = this.module.DispenseRes(session, sale, true); code != pb.ErrorCode_Success { return } case 6: //箱子 if prop, err = this.module.configure.GetPropsgroupConfigure(itemcf.BoxId); err != nil { code = pb.ErrorCode_ConfigNoFound return } sale := make([]*cfg.Game_atn, len(prop)) for i, v := range prop { sale[i] = &cfg.Game_atn{ A: v.Prize.A, T: v.Prize.T, N: v.Prize.N, } sale[i].N = v.Prize.N * int32(req.Amount) } if code = this.module.AddItemforGrid(&comm.ModuleCallSource{}, session, req.GridId, -1*int32(req.Amount), true); code != pb.ErrorCode_Success { return } if code = this.module.DispenseRes(session, sale, true); code != pb.ErrorCode_Success { return } break default: code = pb.ErrorCode_ItemsUseNotSupported return } session.SendMsg(string(this.module.GetType()), "useitem", &pb.ItemsUseItemResp{GridId: req.GridId, Amount: req.Amount, Issucc: true}) return }