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 maxLv int32 // 羁绊最大等级 upLv int32 attenuation map[int32]int32 likeStates int32 // 0 普通食物 1 喜欢 2 不喜欢 addExp int32 // 获得的经验 sCount 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(_heroObj.Heroid) if len(_exp) == 0 { code = pb.ErrorCode_ConfigNoFound return } maxLv = int32(len(_exp)) // 获取当前星级羁绊最大等级 // 达到最大等级不让继续升级 if _heroObj.Favorlv >= maxLv { code = pb.ErrorCode_LibraryMaxLv return } sCount = _heroObj.Givecount // 获取当天最大的次数 c := this.module.ModuleTools.GetGlobalConf().FavorabilityAttenuation maxCoun := c[len(c)-1].K + 1 if sCount+req.Counts > maxCoun { // 当天赠送次数 code = pb.ErrorCode_LibraryGiveMaxCount 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++ { _heroObj.Givecount += 1 addExp += attenuation[i] } // 校验是否是自己喜欢的食物 _c := this.module.configure.GetFavorability(_heroObj.Heroid, _heroObj.Favorlv) if _c == nil { code = pb.ErrorCode_ConfigNoFound 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 } } } if likeStates == 0 { addExp *= 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 } itemConf, err1 := this.module.configure.GetItemConfigureData(req.Items) // 获取食物的 if err1 != nil { this.module.Errorf("赠送菜品配置没找到:%s", req.Items) code = pb.ErrorCode_ConfigNoFound return } addExp *= itemConf.SpecialType _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 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 mapData["givecount"] = _heroObj.Givecount 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 := this.module.configure.GetHeroConfig(_heroObj.Heroid); heroCfg != nil { rst.Race[heroCfg.Race] += upLv this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), map[string]interface{}{ "race": rst.Race, }) } } // 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 }