package library import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/utils" ) //参数校验 func (this *apiComp) UseGiftCheck(session comm.IUserSession, req *pb.LibraryUseGiftReq) (code pb.ErrorCode) { if req.Heroid == "" || req.Items == "" || req.Counts == 0 { code = pb.ErrorCode_ReqParameterError } return } // 给英雄赠送美食 func (this *apiComp) UseGift(session comm.IUserSession, req *pb.LibraryUseGiftReq) (code pb.ErrorCode, data *pb.ErrorData) { var ( res []*cfg.Gameatn totalExp int32 maxLv int32 // 羁绊最大等级 upLv int32 attenuation map[int32]int32 likeStates int32 // 0 普通食物 1 喜欢 2 不喜欢 add int32 ) attenuation = make(map[int32]int32, 0) 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 } _exp := this.module.configure.GetFavorabilityExp(req.Heroid) if len(_exp) == 0 { code = pb.ErrorCode_ConfigNoFound return } maxLv = int32(len(_exp)) // 获取当前星级羁绊最大等级 // 达到最大等级不让继续升级 if _heroObj.Favorlv >= maxLv { code = pb.ErrorCode_LibraryMaxLv return } // 获取当天最大的次数 c := this.module.ModuleTools.GetGlobalConf().FavorabilityAttenuation maxCoun := c[len(c)-1].K + 1 if _heroObj.Givecount+req.Counts > maxCoun { // 当天赠送次数 code = pb.ErrorCode_LibraryGiveMaxCount return } last := 1 for iPos, v := range c { for ; last <= iPos; last++ { attenuation[int32(last)] = v.V // 3,1000|6,500|9,250 } } for i := _heroObj.Givecount; i <= _heroObj.Givecount+req.Counts; i++ { add += attenuation[i] } // 校验是否是自己喜欢的食物 _c := this.module.configure.GetFavorability(req.Heroid, _heroObj.Favorlv) if _c != nil { code = pb.ErrorCode_ConfigNoFound return } for _, v := range _c.LikesFood { // 喜欢的食物 if v == req.Items { likeStates = 1 add += this.module.ModuleTools.GetGlobalConf().FavorabilityLikes * req.Counts } } for _, v := range _c.DislikingFood { //不喜欢 if v == req.Items { likeStates = 2 add += this.module.ModuleTools.GetGlobalConf().FavorabilityDislikes * req.Counts } } if likeStates == 0 { add += req.Counts } res = append(res, &cfg.Gameatn{ A: "item", T: req.Items, N: req.Counts, }) if code = this.module.CheckRes(session, res); code != pb.ErrorCode_Success { // 道具不够直接返回 return } // 100*1 + 100*0.25 + 100*0.5 totalExp = add _heroObj.Favorexp += totalExp // 折算出等级 for { if _heroObj.Favorlv >= maxLv { // 达到最大等级不让继续升级 code = pb.ErrorCode_LibraryMaxLv break } if _exp[_heroObj.Favorlv] <= _heroObj.Favorexp { _heroObj.Favorexp -= _exp[_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 }