200 lines
6.0 KiB
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
|
|
}
|