package library import ( "go_dreamfactory/comm" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/utils" ) //参数校验 func (this *apiComp) UseGiftCheck(session comm.IUserSession, req *pb.LibraryUseGiftReq) (errdata *pb.ErrorData) { if req.Heroid == "" || req.Items == "" || req.Counts == 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } // 给英雄赠送美食 func (this *apiComp) UseGift(session comm.IUserSession, req *pb.LibraryUseGiftReq) (errdata *pb.ErrorData) { var ( res []*cfg.Gameatn maxLv int32 // 羁绊最大等级 upLv int32 attenuation map[int32]int32 likeStates int32 // 0 普通食物 1 喜欢 2 不喜欢 addExp int32 // 获得的经验 sCount int32 // 赠送开始次数 ) attenuation = make(map[int32]int32, 0) if errdata = this.UseGiftCheck(session, req); errdata != nil { return // 参数校验失败直接返回 } rsp := &pb.LibraryUseGiftResp{} _heroObj := this.module.modelFetter.getOneHeroFetter(session.GetUserId(), req.Heroid) if _heroObj == nil { errdata = &pb.ErrorData{ // 没找到对应的英雄信息 Code: pb.ErrorCode_HeroNoExist, Title: pb.ErrorCode_HeroNoExist.ToString(), } return } _exp, err := this.module.configure.GetFavorabilityExp(_heroObj.Heroid) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } maxLv = int32(len(_exp)) // 获取当前星级羁绊最大等级 // 达到最大等级不让继续升级 if _heroObj.Favorlv >= maxLv { errdata = &pb.ErrorData{ Code: pb.ErrorCode_LibraryMaxLv, Title: pb.ErrorCode_LibraryMaxLv.ToString(), } return } sCount = _heroObj.Givecount // 获取当天最大的次数 c := this.module.ModuleTools.GetGlobalConf().FavorabilityAttenuation maxCoun := c[len(c)-1].K + 1 if sCount+req.Counts > maxCoun { // 当天赠送次数 errdata = &pb.ErrorData{ Code: pb.ErrorCode_LibraryGiveMaxCount, Title: pb.ErrorCode_LibraryGiveMaxCount.ToString(), } return } var last int32 = 1 for _, v := range c { for ; last <= v.K; last++ { attenuation[int32(last)] = v.V // 3,1000|6,500|9,250 } } for i := sCount + 1; i <= sCount+req.Counts; i++ { addExp += attenuation[i] } _heroObj.Givecount += req.Counts // 校验是否是自己喜欢的食物 _c, err := this.module.configure.GetFavorability(_heroObj.Heroid, _heroObj.Favorlv) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } for _, v := range _c.LikesFood { // 喜欢的食物 if v == req.Items { likeStates = 1 addExp *= this.module.ModuleTools.GetGlobalConf().FavorabilityLikes * req.Counts break } } if likeStates != 1 { for _, v := range _c.DislikingFood { //不喜欢 if v == req.Items { likeStates = 2 addExp *= this.module.ModuleTools.GetGlobalConf().FavorabilityDislikes * req.Counts break } } } res = append(res, &cfg.Gameatn{ A: "item", T: req.Items, N: req.Counts, }) if errdata = this.module.CheckRes(session, res); errdata != nil { // 道具不够直接返回 return } itemConf, err1 := this.module.ModuleTools.GetGrormetLlame(req.Items) //itemConf, err1 := this.module.configure.GetItemConfigureData(req.Items) // 获取食物的 if err1 != nil { this.module.Errorf("赠送菜品配置没找到:%s", req.Items) errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err1.Error(), } return } addExp *= itemConf _heroObj.Favorexp += addExp / 1000 // 折算出等级 for { if _heroObj.Favorlv >= maxLv { // 达到最大等级不让继续升级 _heroObj.Favorexp = 0 break } if _exp[_heroObj.Favorlv-1] <= _heroObj.Favorexp { _heroObj.Favorexp -= _exp[_heroObj.Favorlv-1] _heroObj.Favorlv += 1 upLv++ } else { break } } if errdata = this.module.ConsumeRes(session, res, true); errdata != nil { //真正消耗 return } // 修改信息 mapData := make(map[string]interface{}) mapData["favorexp"] = _heroObj.Favorexp mapData["favorlv"] = _heroObj.Favorlv mapData["givecount"] = _heroObj.Givecount if _heroObj.Ctime == 0 { // 记录刷新的时间 _heroObj.Ctime = configure.Now().Unix() mapData["ctime"] = _heroObj.Ctime } this.module.modelFetter.modifyHeroFetterDataByObjId(session.GetUserId(), _heroObj.Id, mapData) rsp.Data = _heroObj session.SendMsg(string(this.module.GetType()), LibraryUseGiftResp, rsp) // 任务统计 //赠送英雄礼物并增加N点好感度 if upLv > 0 { // DBLibrary 等级 //library := this.module.modelLibrary.getLibraryList(session.GetUserId()) this.module.Errorf("英雄好感度等级提升,英雄ID:%s,增加经验:%s,提升的等级:%d", _heroObj.Heroid, addExp, upLv) if rst, err := this.module.ModuleUser.GetUserExpand(session.GetUserId()); err == nil { // 修改阵营累计好感度 if heroCfg, err := this.module.configure.GetHeroConfig(_heroObj.Heroid); err == nil { rst.Race[heroCfg.Race] += upLv this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), map[string]interface{}{ "race": rst.Race, }) } else { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } } var szTask []*pb.BuriedParam szTask = append(szTask, comm.GetBuriedParam(comm.Rtype132, 1, _heroObj.Favorlv)) szTask = append(szTask, comm.GetBuriedParam(comm.Rtype133, _heroObj.Favorlv, utils.ToInt32(_heroObj.Heroid))) szTask = append(szTask, comm.GetBuriedParam(comm.Rtype134, upLv)) szTask = append(szTask, comm.GetBuriedParam2(comm.Rtype132, _heroObj.Heroid, _heroObj.Favorlv)) go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), szTask...) } return }