diff --git a/modules/items/api_useItem.go b/modules/items/api_useItem.go index 60c1f5160..a93a0fe2d 100644 --- a/modules/items/api_useItem.go +++ b/modules/items/api_useItem.go @@ -4,13 +4,15 @@ import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" + "math/rand" + "time" "google.golang.org/protobuf/proto" ) //参数校验 func (this *apiComp) UseitemCheck(session comm.IUserSession, req *pb.ItemsUseItemReq) (code pb.ErrorCode) { - if req.GridId == "" || req.Amount <= 0 { + if req.GridId == "" || req.Amount <= 0 || req.Select < 0 { code = pb.ErrorCode_ReqParameterError } return @@ -36,7 +38,54 @@ func (this *apiComp) Useitem(session comm.IUserSession, req *pb.ItemsUseItemReq) return } switch itemcf.Usetype { - case 6: + 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 + } + if code = this.module.ModuleHero.GetSpecifiedHero(session, prop.Prize[0].T, prop.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 + } + if int(req.Select) >= len(prop.Prize) { + code = pb.ErrorCode_ReqParameterError + return + } + sale := prop.Prize[req.Select] + 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 + } + r := rand.New(rand.NewSource(time.Now().Unix())) + index := r.Perm(len(prop.Prize))[0] + sale := prop.Prize[index] + sale.N = sale.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, []*cfg.Game_atn{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 @@ -46,6 +95,9 @@ func (this *apiComp) Useitem(session comm.IUserSession, req *pb.ItemsUseItemReq) sale[i] = v sale[i].N = v.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 } @@ -54,9 +106,6 @@ func (this *apiComp) Useitem(session comm.IUserSession, req *pb.ItemsUseItemReq) code = pb.ErrorCode_ItemsUseNotSupported return } - if code = this.module.AddItemforGrid(&comm.ModuleCallSource{}, session, req.GridId, -1*int32(req.Amount), true); code != pb.ErrorCode_Success { - return - } session.SendMsg(string(this.module.GetType()), "useitem", &pb.ItemsUseItemResp{GridId: req.GridId, Amount: req.Amount, Issucc: true}) return }