202 lines
4.3 KiB
Go
202 lines
4.3 KiB
Go
package task
|
|
|
|
import (
|
|
"fmt"
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/core"
|
|
"go_dreamfactory/lego/sys/log"
|
|
"go_dreamfactory/modules"
|
|
cfg "go_dreamfactory/sys/configure/structs"
|
|
"sort"
|
|
)
|
|
|
|
const (
|
|
gameActiveReward = "game_taskactivereward.json"
|
|
gameTaskRound = "game_taskround.json"
|
|
)
|
|
|
|
type configureComp struct {
|
|
modules.MCompConfigure
|
|
}
|
|
|
|
func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
err = this.MCompConfigure.Init(service, module, comp, options)
|
|
this.LoadMultiConfigure(map[string]interface{}{
|
|
gameTaskRound: cfg.NewGameTaskRound,
|
|
gameActiveReward: cfg.NewGameActiveReward,
|
|
})
|
|
return
|
|
}
|
|
|
|
//获取活跃度奖励配置
|
|
func (this *configureComp) getActiveRewardCfg() (data *cfg.GameActiveReward, err error) {
|
|
var (
|
|
v interface{}
|
|
ok bool
|
|
)
|
|
if v, err = this.GetConfigure(gameActiveReward); err != nil {
|
|
return
|
|
} else {
|
|
if data, ok = v.(*cfg.GameActiveReward); !ok {
|
|
err = fmt.Errorf("%T no is *cfg.Game_ActiveReward", v)
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
//获取任务配置
|
|
func (this *configureComp) getTaskRoundCfg() (data *cfg.GameTaskRound, err error) {
|
|
var (
|
|
v interface{}
|
|
ok bool
|
|
)
|
|
if v, err = this.GetConfigure(gameTaskRound); err != nil {
|
|
return
|
|
} else {
|
|
if data, ok = v.(*cfg.GameTaskRound); !ok {
|
|
err = fmt.Errorf("%T no is *cfg.Game_taskRound", v)
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
//根据taskId获取配置
|
|
func (this *configureComp) getTaskById(taskId int32) (data *cfg.GameTaskRoundData) {
|
|
cfg, err := this.getTaskRoundCfg()
|
|
if err != nil {
|
|
log.Errorf("%v", err)
|
|
return nil
|
|
}
|
|
if cfg != nil {
|
|
data = cfg.GetDataMap()[taskId]
|
|
}
|
|
return
|
|
}
|
|
|
|
//是否第一个成就任务
|
|
func (this *configureComp) isFirstTask(taskId int32) bool {
|
|
data := this.getTaskByTag(int32(comm.TASK_ACHIEVE))
|
|
for _, v := range data {
|
|
if taskId == v.IdAfter {
|
|
return false
|
|
} else {
|
|
continue
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// 上一个任务
|
|
func (this *configureComp) getPreTask(preTaskId int32) *cfg.GameTaskRoundData {
|
|
data := this.getTaskByTag(int32(comm.TASK_ACHIEVE))
|
|
for _, v := range data {
|
|
if v.IdAfter == preTaskId {
|
|
return v
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//获取任务配置列表
|
|
func (this *configureComp) getTaskList() (data []*cfg.GameTaskRoundData, err error) {
|
|
cfg, err := this.getTaskRoundCfg()
|
|
if err != nil {
|
|
log.Errorf("%v", err)
|
|
return data, err
|
|
}
|
|
if cfg != nil {
|
|
data = cfg.GetDataList()
|
|
}
|
|
return
|
|
}
|
|
|
|
//根据任务类型获取任务列表
|
|
func (this *configureComp) getTasks(taskType int32) (data []*cfg.GameTaskRoundData, err error) {
|
|
list, err := this.getTaskList()
|
|
if err != nil {
|
|
log.Errorf("%v", err)
|
|
return data, err
|
|
}
|
|
|
|
for _, d := range list {
|
|
if d.TypeId == taskType {
|
|
data = append(data, d)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
//任务列表 正序
|
|
func (this *configureComp) getSortedTasks(taskType int32) (data []*cfg.GameTaskRoundData, err error) {
|
|
if data, err = this.getTasks(taskType); err != nil {
|
|
return nil, err
|
|
}
|
|
sort.SliceStable(data, func(i, j int) bool {
|
|
return data[i].IdList > data[j].IdList
|
|
})
|
|
return
|
|
}
|
|
|
|
//获取任务配置 条件 tasktag
|
|
func (this *configureComp) getTaskByTag(taskTag int32) (data []*cfg.GameTaskRoundData) {
|
|
list, err := this.getTaskList()
|
|
if err != nil {
|
|
log.Errorf("%v", err)
|
|
return data
|
|
}
|
|
for _, d := range list {
|
|
if d.IdTag == taskTag {
|
|
data = append(data, d)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (this *configureComp) getTaskActiveList() (data []*cfg.GameActiveRewardData) {
|
|
conf, err := this.getActiveRewardCfg()
|
|
if err != nil {
|
|
log.Errorf("get conf err:%v", err)
|
|
return
|
|
}
|
|
if conf != nil {
|
|
data = conf.GetDataList()
|
|
}
|
|
return
|
|
}
|
|
|
|
//获取活跃度奖励list
|
|
func (this *configureComp) getTaskActiveByTag(taskTag int32) (data []*cfg.GameActiveRewardData, err error) {
|
|
conf, err := this.getActiveRewardCfg()
|
|
if err != nil {
|
|
log.Errorf("get conf err:%v", err)
|
|
return
|
|
}
|
|
|
|
if conf != nil {
|
|
for _, v := range conf.GetDataList() {
|
|
if v.IdTag == taskTag {
|
|
data = append(data, v)
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// 获取活跃度配置map
|
|
func (this *configureComp) getTaskActiveById(id int32) (data *cfg.GameActiveRewardData) {
|
|
conf, err := this.getActiveRewardCfg()
|
|
if err != nil {
|
|
log.Errorf("get conf err:%v", err)
|
|
return
|
|
}
|
|
if conf != nil {
|
|
if v, ok := conf.GetDataMap()[id]; ok {
|
|
return v
|
|
}
|
|
}
|
|
return
|
|
}
|