go_dreamfactory/modules/combat/api_ask.go
2024-01-02 15:53:39 +08:00

160 lines
4.1 KiB
Go

package combat
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
)
//参数校验
func (this *apiComp) AskCheck(session comm.IUserSession, req *pb.CombatAskReq) (errdata *pb.ErrorData) {
return
}
///获取自己的排行榜信息
func (this *apiComp) Ask(session comm.IUserSession, req *pb.CombatAskReq) (errdata *pb.ErrorData) {
var (
info *pb.DBCombatUser
level *pb.DBCombatLevel
lvconf *cfg.GameCombatLevelData
pitem *pb.LevelProgressItem
condis []*pb.ConIProgress
ok bool
err error
reward []*pb.UserAssets
)
if errdata = this.AskCheck(session, req); errdata != nil {
return
}
if info, err = this.module.modelCombat.queryInfo(session.GetUserId()); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
Message: err.Error(),
}
return
}
if lvconf, err = this.module.configure.getCombatLevel(req.Level); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_ConfigNoFound.ToString(),
Message: err.Error(),
}
return
}
if level, ok = info.Level[req.Level]; !ok {
err = fmt.Errorf("没有初始化指定关卡数据:%d", req.Level)
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
this.module.Errorln(err)
return
}
pitem = &pb.LevelProgressItem{
Level: level.Id,
Progress: level.Progress,
Pass: level.Pass,
Passpertask: level.Passpertask,
Passmaintask: level.Passmaintask,
}
if level.Pass != 2 {
level.Progress = 0
if condis, err = this.module.ModuleBuried.CheckCondition(session, lvconf.Maintask...); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ExternalModule,
Title: pb.ErrorCode_ExternalModule.ToString(),
Message: comm.NewExternalModuleErr("Buried", "CheckCondition", lvconf.Maintask).Error(),
}
return
}
level.Passmaintask = condis
pitem.Passmaintask = condis
ok = true
for _, v := range condis {
if v.State != pb.BuriedItemFinishState_buried_finish {
ok = false
}
if v.Conid == lvconf.Debrisitemid {
level.Progress = v.Value
}
}
if level.Pass == 0 && ok {
level.Pass = 1
pitem.Pass = 1
this.module.DispenseRes(session, lvconf.Award, true)
atns := make([]*pb.UserAssets, len(lvconf.Award))
for i, v := range lvconf.Award {
atns[i] = &pb.UserAssets{
A: v.A,
T: v.T,
N: v.N,
}
}
reward = append(reward, atns...)
pitem.Mainaward = atns
}
if condis, err = this.module.ModuleBuried.CheckCondition(session, lvconf.Subtask...); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ExternalModule,
Title: pb.ErrorCode_ExternalModule.ToString(),
Message: comm.NewExternalModuleErr("Buried", "CheckCondition", lvconf.Subtask).Error(),
}
return
}
level.Passpertask = condis
pitem.Passpertask = condis
ok = true
for _, v := range condis {
if v.Conid == lvconf.Debrisitemid {
level.Progress = v.Value
}
if v.State != pb.BuriedItemFinishState_buried_finish {
ok = false
}
}
if level.Pass == 1 && ok { //
level.Pass = 2
pitem.Pass = 2
this.module.DispenseRes(session, lvconf.Profectaward, true)
atns := make([]*pb.UserAssets, len(lvconf.Profectaward))
for i, v := range lvconf.Profectaward {
atns[i] = &pb.UserAssets{
A: v.A,
T: v.T,
N: v.N,
}
}
reward = append(reward, atns...)
pitem.Peraward = atns
}
info.Level[req.Level] = level
if err = this.module.modelCombat.updateInfo(info); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
Message: err.Error(),
}
return
}
pitem.Progress = level.Progress
}
session.SendMsg(string(this.module.GetType()), "ask", &pb.CombatAskResp{Level: pitem})
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
this.module.WriteUserLog(session.GetUserId(), req, comm.GMResAddType, "CombatAskReq", reward)
})
return
}