package library import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/utils" "google.golang.org/protobuf/proto" ) //参数校验 func (this *apiComp) UseGiftCheck(session comm.IUserSession, req *pb.LibraryUseGiftReq) (code pb.ErrorCode) { if req.Heroid == "" || len(req.Items) == 0 { code = pb.ErrorCode_ReqParameterError } return } func (this *apiComp) UseGift(session comm.IUserSession, req *pb.LibraryUseGiftReq) (code pb.ErrorCode, data proto.Message) { var ( res []*cfg.Gameatn totalExp int32 curStar int32 // 配置表星级 maxLv int32 // 羁绊最大等级 upLv int32 ) code = this.UseGiftCheck(session, req) if code != pb.ErrorCode_Success { return // 参数校验失败直接返回 } rsp := &pb.LibraryUseGiftResp{} _heroObj := this.module.modelFetter.getOneHeroFetter(session.GetUserId(), req.Heroid) if _heroObj == nil { code = pb.ErrorCode_HeroNoExist // 没找到对应的英雄信息 return } // 查询该英雄原始的星级 curStar = this.module.configure.GetHeroConfigStar(_heroObj.Heroid) if curStar == 0 { code = pb.ErrorCode_ConfigNoFound return } favorConf := this.configure.GetLibraryFavor(curStar) maxLv = int32(len(favorConf)) // 获取当前星级羁绊最大等级 // 达到最大等级不让继续升级 if _heroObj.Favorlv >= maxLv { code = pb.ErrorCode_LibraryMaxLv return } for k, v := range req.Items { // 校验数量 res = append(res, &cfg.Gameatn{ A: "item", T: k, N: v, }) conf, err := this.module.configure.GetItemConfigureData(k) if err != nil { this.module.Errorf("err:%v", err) return } totalExp += conf.SpecialType * v } if code = this.module.CheckRes(session, res); code != pb.ErrorCode_Success { // 道具不够直接返回 return } _heroObj.Favorexp += totalExp // 折算出等级 for { if _heroObj.Favorlv >= maxLv { // 达到最大等级不让继续升级 code = pb.ErrorCode_LibraryMaxLv break } if favorConf[_heroObj.Favorlv] <= _heroObj.Favorexp { _heroObj.Favorexp -= favorConf[_heroObj.Favorlv] _heroObj.Favorlv += 1 upLv++ } else { break } } if code = this.module.ConsumeRes(session, res, true); code != pb.ErrorCode_Success { //真正消耗 return } // 修改信息 mapData := make(map[string]interface{}) mapData["favorexp"] = _heroObj.Favorexp mapData["favorlv"] = _heroObj.Favorlv this.module.modelFetter.modifyHeroFetterDataByObjId(session.GetUserId(), _heroObj.Id, mapData) rsp.Data = _heroObj session.SendMsg(string(this.module.GetType()), LibraryUseGiftResp, rsp) // 任务统计 //赠送英雄礼物并增加N点好感度 if upLv > 0 { // this.module.ModuleRtask.SendToRtask(session, comm.Rtype134, utils.ToInt32(_heroObj.Heroid), upLv) go this.module.ModuleRtask.TriggerTask(session.GetUserId(), comm.GettaskParam(comm.Rtype134, utils.ToInt32(_heroObj.Heroid), upLv)) } return }