go_dreamfactory/modules/library/api_usegift.go

200 lines
6.0 KiB
Go

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
}