go_dreamfactory/modules/story/module.go
2022-07-06 19:50:05 +08:00

105 lines
2.6 KiB
Go

package story
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"sort"
)
type Story struct {
modules.ModuleBase
modelStory *ModelStory
api *apiComp
configure *configureComp
}
func NewModule() core.IModule {
return &Story{}
}
func (this *Story) GetType() core.M_Modules {
return comm.ModuleStory
}
func (this *Story) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
err = this.ModuleBase.Init(service, module, options)
return
}
func (this *Story) OnInstallComp() {
this.ModuleBase.OnInstallComp()
this.api = this.RegisterComp(new(apiComp)).(*apiComp)
this.modelStory = this.RegisterComp(new(ModelStory)).(*ModelStory)
this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
}
// 接口信息 给其他模块调用 用来修改主线关卡信息
func (this *Story) ModifyStoryData(uid string, objId string, data map[string]interface{}) (code pb.ErrorCode) {
err := this.modelStory.modifyStoryData(uid, objId, data)
if err != nil {
code = pb.ErrorCode_DBError
}
return
}
// 校验是否能挑战该关卡
func (this *Story) CheckChallengeChapter(stroyId int32, uid string, zhangjieID int32) (code pb.ErrorCode) {
var (
curChapter *pb.DBStory
)
_szData, err := this.modelStory.getStoryList(uid)
if err != nil {
code = pb.ErrorCode_DBError
return
}
sort.SliceStable(_szData, func(i, j int) bool { // 排序
return _szData[i].ChapterId > _szData[j].ChapterId
})
// 取出最后一条数据
curChapter = _szData[len(_szData)-1]
if curChapter == nil {
code = pb.ErrorCode_StoryNotFindChapter // 没有找到主线关卡信息
return
}
// 获取关卡难度用来取配置文件
switch curChapter.Intensity {
case 1:
configData := this.configure.GetStoryEasyChapter(curChapter.StoryId)
if configData != nil { // 校验章节
if configData.Zhangshu != zhangjieID {
code = pb.ErrorCode_ConfigNoFound
return
}
// 如果这一关是路线二的话
if configData.Area == 2 && curChapter.ChapterId > stroyId { // 当前的关卡ID 大于路线2的ID 即可
return
}
// 判断下一关是不是当前传入的值
if configData.Nextid != stroyId {
code = pb.ErrorCode_StoryIDFailed
return
}
}
break
case 2:
configData := this.configure.GetStoryHardChapter(curChapter.StoryId)
if configData != nil { // 校验章节
if configData.Zhangshu != zhangjieID {
code = pb.ErrorCode_ConfigNoFound
return
}
// 判断下一关是不是当前传入的值
if configData.Nextid != stroyId {
code = pb.ErrorCode_StoryIDFailed
return
}
}
break
}
return
}