go_dreamfactory/modules/hero/api_fusion.go

107 lines
2.9 KiB
Go

package hero
import (
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"go_dreamfactory/utils"
)
//参数校验
func (this *apiComp) FusionCheck(session comm.IUserSession, req *pb.HeroFusionReq) (errdata *pb.ErrorData) {
if req.HeroId == "" {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
}
return
}
func (this *apiComp) Fusion(session comm.IUserSession, req *pb.HeroFusionReq) (errdata *pb.ErrorData) {
var (
totalCount int32
mapHero map[string]int32
_costMaphero map[string]*pb.DBHero
ChangeList []*pb.DBHero // 变化的英雄数据
)
ChangeList = make([]*pb.DBHero, 0)
_costMaphero = make(map[string]*pb.DBHero, 0)
mapHero = make(map[string]int32)
if errdata = this.FusionCheck(session, req); errdata != nil {
return
}
conf, err := this.module.configure.GetHeroFucionConfig(req.HeroId)
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound, // 配置没找到
Title: pb.ErrorCode_ConfigNoFound.ToString(),
Message: err.Error(),
}
return
}
for _, v := range req.Heros {
totalCount += v
}
if totalCount != int32(len(conf.Pointhero)) { // 校验数量
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
return
}
for k, v := range req.Heros {
// 校验英雄是否存在
_obj, c := this.module.GetHeroByObjID(session.GetUserId(), k)
if c != nil || _obj.SameCount < v {
errdata = c
return
}
mapHero[_obj.HeroID] += v
_costMaphero[k] = _obj
}
for _, v := range conf.Pointhero {
if _, ok := mapHero[v]; ok {
mapHero[v] -= 1
} else {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
return
}
}
for _, v := range mapHero {
if v != 0 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
return
}
}
for k, v := range req.Heros {
//mapHero[_costMaphero[k].HeroID]
if errdata = this.module.DelCard(session.GetUserId(), _costMaphero[k], v); errdata != nil {
return
}
ChangeList = append(ChangeList, _costMaphero[k])
}
// 获得新卡
res := &cfg.Gameatn{
A: "hero",
T: conf.Hero,
N: 1,
}
if errdata = this.module.DispenseRes(session, []*cfg.Gameatn{res}, false); errdata != nil {
this.module.Errorf("err:%v,create hero:%s,uid,%ss", errdata, conf.Hero, session.GetUserId())
return
}
session.SendMsg(string(this.module.GetType()), HeroFusionResp, &pb.HeroFusionResp{Heroid: conf.Hero})
// 通过融合获得指定英雄
// this.module.ModuleRtask.SendToRtask(session, comm.Rtype139, utils.ToInt32(conf.Hero))
go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), comm.GetBuriedParam(comm.Rtype139, utils.ToInt32(conf.Hero)))
return
}