修改日常任务配置逻辑

This commit is contained in:
wh_zcy 2022-09-26 16:29:41 +08:00
parent 50ceaa59ec
commit babd410071
10 changed files with 332 additions and 101 deletions

View File

@ -98,6 +98,7 @@ func (ui *MainWindowImpl) createWindowContainer() {
ui.at = newAppContainer(appRegister, ui.obs)
content := container.NewBorder(ui.tb.toolbar, ui.sb.widget, nil, ui.toys.widget, ui.at)
ui.w.SetContent(content)
ui.w.SetFullScreen(true)
ui.w.SetCloseIntercept(ui.quiteHandle)
}
@ -106,7 +107,13 @@ func (ui *MainWindowImpl) SetStatusMsg(msg string) {
}
func (ui *MainWindowImpl) quiteHandle() {
ui.app.Quit()
dialog.ShowConfirm("推出系统", "确定退出吗", func(b bool) {
if !b {
return
}
ui.app.Quit()
}, ui.w)
}
// CreateWindow ....

View File

@ -363,7 +363,7 @@ func (this *appGen) LazyInit(obs observer.Observer) error {
quesWin := fyne.CurrentApp().NewWindow("使用说明")
quesWin.SetContent(widget.NewRichTextFromMarkdown(
`
1. 更新excel文件
1. SVN更新excel文件
2. 配置Luban(已做可忽略)
3. 选择**生成类型**,单击生成
4. 选择要覆盖的文件
@ -475,6 +475,12 @@ func (f *fileList) changeItem(tmpDir, projectDir string) {
return
}
defer func() {
if len(tmpFiles) == 0 || len(f.cachedList.Items) == 0 {
showTip("没有任何变更的文件,请确定SVN拉取最新文件")
}
}()
projectFiles, err := ioutil.ReadDir(projectDir)
if err != nil {
logrus.Error(err)

View File

@ -192,7 +192,7 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren
this.module.ModuleTask.SendToTask(session, comm.TaskTypeUpHeroLevel, &pb.TaskParam{Second: iLvUp})
this.module.ModuleRtask.SendToRtask(session, comm.Rtype4, utils.ToInt32(_hero.HeroID), _hero.Lv)
this.module.ModuleRtask.SendToRtask(session, comm.Rtype23, 1, _hero.Star, _hero.Lv)
this.module.ModuleRtask.SendToRtask(session, comm.Rtype24, iLvUp)
this.module.ModuleRtask.SendToRtask(session, comm.Rtype24, 1)
this.module.ModuleRtask.SendToRtask(session, comm.Rtype29, 1, _hero.Lv, utils.ToInt32(_hero.HeroID))
cfg := this.module.configure.GetHero(_hero.HeroID)
if cfg != nil {

View File

@ -1,27 +1,34 @@
// 匹配类型和参数返回任务条件ID
package rtask
import cfg "go_dreamfactory/sys/configure/structs"
import (
cfg "go_dreamfactory/sys/configure/structs"
func (this *ModelRtaskRecord) equalFirstParam(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32) {
"github.com/pkg/errors"
)
func (this *ModelRtaskRecord) equalFirstParam(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32, err error) {
//只查询参数于配置相等的情况下设置condiId否则返回0
if !soEqual(vals[0], cfg.Data1) {
if ok, err1 := soEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
condiId = cfg.Id
return
}
func (this *ModelRtaskRecord) greatEqualFirstParam(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32) {
if !soGreatEqual(vals[0], cfg.Data1) {
func (this *ModelRtaskRecord) greatEqualFirstParam(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32, err error) {
if ok, err1 := soGreatEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
condiId = cfg.Id
return
}
func (this *ModelRtaskRecord) lessEqualFirstParam(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32) {
if !soLessEqual(vals[0], cfg.Data1) {
func (this *ModelRtaskRecord) lessEqualFirstParam(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32, err error) {
if ok, err1 := soLessEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
condiId = cfg.Id
@ -29,10 +36,8 @@ func (this *ModelRtaskRecord) lessEqualFirstParam(cfg *cfg.GameRdtaskCondiData,
}
// 与每个参数比较
// Deprecated
func (this *ModelRtaskRecord) equalParams(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32) {
func (this *ModelRtaskRecord) equalParams(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32, err error) {
var (
err error
paramLen int
)
if paramLen, err = lenParam(cfg, vals...); err != nil {
@ -41,25 +46,68 @@ func (this *ModelRtaskRecord) equalParams(cfg *cfg.GameRdtaskCondiData, vals ...
switch paramLen {
case 1:
if !soEqual(vals[0], cfg.Data1) {
if ok, err1 := soEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 2:
if !(soEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2)) {
if ok, err1 := soEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 3:
if !(soEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2) && soGreatEqual(vals[2], cfg.Data3)) {
if ok, err1 := soEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 4:
if !(soEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2) &&
soGreatEqual(vals[2], cfg.Data3) && soGreatEqual(vals[3], cfg.Data4)) {
if ok, err1 := soEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[3], cfg.Data4); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 5:
if !(soEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2) &&
soGreatEqual(vals[2], cfg.Data3) && soGreatEqual(vals[3], cfg.Data4) && soGreatEqual(vals[4], cfg.Data5)) {
if ok, err1 := soEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[3], cfg.Data4); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[4], cfg.Data5); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
default:
@ -71,9 +119,8 @@ func (this *ModelRtaskRecord) equalParams(cfg *cfg.GameRdtaskCondiData, vals ...
return
}
func (this *ModelRtaskRecord) greatThanParams(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32) {
func (this *ModelRtaskRecord) greatThanParams(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32, err error) {
var (
err error
paramLen int
)
if paramLen, err = lenParam(cfg, vals...); err != nil {
@ -82,25 +129,68 @@ func (this *ModelRtaskRecord) greatThanParams(cfg *cfg.GameRdtaskCondiData, vals
switch paramLen {
case 1:
if !soGreatEqual(vals[0], cfg.Data1) {
if ok, err1 := soGreatEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 2:
if !(soGreatEqual(vals[0], cfg.Data1) && soEqual(vals[1], cfg.Data2)) {
if ok, err1 := soGreatEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 3:
if !(soGreatEqual(vals[0], cfg.Data1) && soEqual(vals[1], cfg.Data2) && soEqual(vals[2], cfg.Data3)) {
if ok, err1 := soGreatEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 4:
if !(soGreatEqual(vals[0], cfg.Data1) && soEqual(vals[1], cfg.Data2) &&
soEqual(vals[2], cfg.Data3) && soEqual(vals[3], cfg.Data4)) {
if ok, err1 := soGreatEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[3], cfg.Data4); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 5:
if !(soGreatEqual(vals[0], cfg.Data1) && soEqual(vals[1], cfg.Data2) &&
soEqual(vals[2], cfg.Data3) && soEqual(vals[3], cfg.Data4) && soEqual(vals[4], cfg.Data5)) {
if ok, err1 := soGreatEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[3], cfg.Data4); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[4], cfg.Data5); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
default:
@ -112,9 +202,8 @@ func (this *ModelRtaskRecord) greatThanParams(cfg *cfg.GameRdtaskCondiData, vals
}
// 需要累加更新的查询
func (this *ModelRtaskRecord) lessThanParams(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32) {
func (this *ModelRtaskRecord) lessThanParams(cfg *cfg.GameRdtaskCondiData, vals ...int32) (condiId int32, err error) {
var (
err error
paramLen int
)
if paramLen, err = lenParam(cfg, vals...); err != nil {
@ -123,25 +212,68 @@ func (this *ModelRtaskRecord) lessThanParams(cfg *cfg.GameRdtaskCondiData, vals
switch paramLen {
case 1:
if !soLessEqual(vals[0], cfg.Data1) {
if ok, err1 := soLessEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 2:
if !(soLessEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2)) {
if ok, err1 := soLessEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 3:
if !(soLessEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2) && soGreatEqual(vals[2], cfg.Data3)) {
if ok, err1 := soLessEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 4:
if !(soLessEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2) &&
soGreatEqual(vals[2], cfg.Data3) && soGreatEqual(vals[3], cfg.Data4)) {
if ok, err1 := soLessEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[3], cfg.Data4); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
case 5:
if !(soLessEqual(vals[0], cfg.Data1) && soGreatEqual(vals[1], cfg.Data2) &&
soGreatEqual(vals[2], cfg.Data3) && soGreatEqual(vals[3], cfg.Data4) && soGreatEqual(vals[4], cfg.Data5)) {
if ok, err1 := soLessEqual(vals[0], cfg.Data1); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[1], cfg.Data2); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[2], cfg.Data3); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[3], cfg.Data4); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
if ok, err1 := soGreatEqual(vals[4], cfg.Data5); !ok {
err = errors.WithMessagef(err1, "id: %v type:%v", cfg.Id, cfg.Type)
return
}
default:

View File

@ -154,27 +154,27 @@ func lessEqual(actual, expected int32) bool {
return actual <= expected
}
func soEqual[T Num](actual T, expected T) (ok bool) {
func soEqual[T Num](actual T, expected T) (ok bool, err error) {
if !equal(actual, expected) {
log.Debugf("实际:%v 期望:%v", actual, expected)
err = errors.New(fmt.Sprintf("soEqual actual:%v expect:%v", actual, expected))
return
}
ok = true
return
}
func soGreatEqual(actual, expected int32) (ok bool) {
func soGreatEqual(actual, expected int32) (ok bool, err error) {
if !greatEual(actual, expected) {
log.Debugf("实际:%v 期望:%v", actual, expected)
err = errors.New(fmt.Sprintf("soGreatEqual actual:%v expect:%v", actual, expected))
return
}
ok = true
return
}
func soLessEqual(actual, expected int32) (ok bool) {
func soLessEqual(actual, expected int32) (ok bool, err error) {
if !lessEqual(actual, expected) {
log.Debugf("实际:%v 期望:%v", actual, expected)
err = errors.New(fmt.Sprintf("soLessEqual actual:%v expect:%v", actual, expected))
return
}
ok = true

View File

@ -73,7 +73,7 @@ func (this *ModelRtask) checkCondi(uid string, condiId int32) (err error, ok boo
var condi *rtaskCondi
if condi, ok = this.moduleRtask.handleMap[condiId]; ok {
if condi.verify != nil {
if err, ok = condi.verify(uid, condi.cfg); !ok {
if ok, err = condi.verify(uid, condi.cfg); !ok {
err = errors.WithMessagef(err, "uid: %v do rtask %v condition not reach", uid, condiId)
return
}

View File

@ -20,8 +20,8 @@ type rtaskCondi struct {
update updateDataHandle //更新任务数据
}
type verifyHandle func(uid string, cfg *cfg.GameRdtaskCondiData) (error, bool)
type condiFindHandle func(cfg *cfg.GameRdtaskCondiData, vals ...int32) int32
type verifyHandle func(uid string, cfg *cfg.GameRdtaskCondiData) (bool, error)
type condiFindHandle func(cfg *cfg.GameRdtaskCondiData, vals ...int32) (int32, error)
type updateDataHandle func(uid string, cfg *cfg.GameRdtaskCondiData, vals ...int32) error
type ModuleRtask struct {
@ -193,10 +193,12 @@ func (this *ModuleRtask) initRtaskVerifyHandle() {
}
func (this *ModuleRtask) SendToRtask(session comm.IUserSession, rtaskType comm.TaskType, params ...int32) (code pb.ErrorCode) {
log.Debugf("Rtask params: %v", params)
this.Debugf("receive Rtask %v params: %v", rtaskType, params)
var (
err error
condiId int32
condi *rtaskCondi
// condi *rtaskCondi
condis []*rtaskCondi
)
user := this.ModuleUser.GetUser(session.GetUserId())
@ -211,29 +213,34 @@ func (this *ModuleRtask) SendToRtask(session comm.IUserSession, rtaskType comm.T
if v.find == nil {
break
}
if condiId = v.find(v.cfg, params...); condiId == 0 {
if condiId, err = v.find(v.cfg, params...); condiId == 0 {
if err != nil {
this.Error(err.Error())
}
continue
} else {
//数据记录方式是1
// if v.cfg.Datatype == 1 ||
// v.cfg.Datatype == 2 && this.ModuleSys.IsAccess("task", user.Lv) {
condi = v
condis = append(condis, v)
// }
break
}
}
}
if condiId == 0 {
log.Debugf("condi not found, typeId: %v params: %v", rtaskType, params)
if len(condis) == 0 {
this.Warnf("没有找到符合的条件任务, typeId: %v params: %v", rtaskType, params)
code = pb.ErrorCode_RtaskCondiNoFound
return
}
// update
if condi.update != nil {
if err := condi.update(session.GetUserId(), condi.cfg, params...); err != nil {
code = pb.ErrorCode_DBError
for _, v := range condis {
if v.update != nil {
if err := v.update(session.GetUserId(), v.cfg, params...); err != nil {
code = pb.ErrorCode_DBError
}
}
}

View File

@ -11,7 +11,7 @@ import (
"github.com/spf13/cast"
)
func (this *ModelRtaskRecord) verifyFromDb(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtaskRecord) verifyFromDb(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
var rd *pb.RtaskData
if rd, err = this.GetVerifyData(uid, cfg.Id); rd != nil {
if len(rd.Data) == 0 {
@ -23,23 +23,60 @@ func (this *ModelRtaskRecord) verifyFromDb(uid string, cfg *cfg.GameRdtaskCondiD
//参数比较,默认第一个参数soGreateEqual,其它soEqual
switch paramLen {
case 1:
return nil, soGreatEqual(rd.Data[0], cfg.Data1)
return soGreatEqual(rd.Data[0], cfg.Data1)
case 2:
return nil, soGreatEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2)
if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok {
return
}
if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok {
return
}
case 3:
return nil, soGreatEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2) && soEqual(rd.Data[2], cfg.Data3)
if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok {
return
}
if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok {
return
}
if ok, err = soEqual(rd.Data[2], cfg.Data3); !ok {
return
}
case 4:
return nil, soGreatEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2) && soEqual(rd.Data[2], cfg.Data3) && soEqual(rd.Data[3], cfg.Data4)
if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok {
return
}
if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok {
return
}
if ok, err = soEqual(rd.Data[2], cfg.Data3); !ok {
return
}
if ok, err = soEqual(rd.Data[3], cfg.Data4); !ok {
return
}
case 5:
return nil, soGreatEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2) && soEqual(rd.Data[2], cfg.Data3) &&
soEqual(rd.Data[3], cfg.Data4) && soEqual(rd.Data[4], cfg.Data5)
if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok {
return
}
if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok {
return
}
if ok, err = soEqual(rd.Data[2], cfg.Data3); !ok {
return
}
if ok, err = soEqual(rd.Data[3], cfg.Data4); !ok {
return
}
if ok, err = soEqual(rd.Data[4], cfg.Data5); !ok {
return
}
}
}
}
return
}
func (this *ModelRtaskRecord) verifyFirstEqualParam(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtaskRecord) verifyFirstEqualParam(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
var rd *pb.RtaskData
if rd, err = this.GetVerifyData(uid, cfg.Id); rd != nil {
if len(rd.Data) == 0 {
@ -47,12 +84,12 @@ func (this *ModelRtaskRecord) verifyFirstEqualParam(uid string, cfg *cfg.GameRdt
return
}
return nil, soEqual(rd.Data[0], cfg.Data1)
return soEqual(rd.Data[0], cfg.Data1)
}
return
}
func (this *ModelRtaskRecord) verifyFirstGreatEqualParam(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtaskRecord) verifyFirstGreatEqualParam(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
var rd *pb.RtaskData
if rd, err = this.GetVerifyData(uid, cfg.Id); rd != nil {
if len(rd.Data) == 0 {
@ -60,22 +97,22 @@ func (this *ModelRtaskRecord) verifyFirstGreatEqualParam(uid string, cfg *cfg.Ga
return
}
return nil, soGreatEqual(rd.Data[0], cfg.Data1)
return soGreatEqual(rd.Data[0], cfg.Data1)
}
return
}
// 英雄指定
func (this *ModelRtask) verfiyRtype1(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verfiyRtype1(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
heroModule, err := this.service.GetModule(comm.ModuleHero)
if err != nil {
return err, false
return false, err
}
if h, y := heroModule.(comm.IHero); y {
for _, v := range h.GetHeroList(uid) {
if soEqual(cast.ToString(cfg.Data1), v.HeroID) {
ok = true
ok, err = soEqual(cast.ToString(cfg.Data1), v.HeroID)
if ok {
return
}
}
@ -84,7 +121,7 @@ func (this *ModelRtask) verfiyRtype1(uid string, cfg *cfg.GameRdtaskCondiData) (
}
// 剧情
func (this *ModelRtask) verifyRtype2(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verifyRtype2(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
m, err := this.service.GetModule(comm.ModuleMainline)
if err != nil {
return
@ -92,13 +129,13 @@ func (this *ModelRtask) verifyRtype2(uid string, cfg *cfg.GameRdtaskCondiData) (
if ml, y := m.(comm.IMainline); y {
qjId := ml.GetUsermainLineData(uid)
return nil, soEqual(qjId, cfg.Data1)
return soEqual(qjId, cfg.Data1)
}
return
}
// 每日任务
func (this *ModelRtask) verifyRtype3(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verifyRtype3(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
m, err := this.service.GetModule(comm.ModuleTask)
if err != nil {
return
@ -116,7 +153,7 @@ func (this *ModelRtask) verifyRtype3(uid string, cfg *cfg.GameRdtaskCondiData) (
}
// 指定英雄等级
func (this *ModelRtask) verifyRtype4(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verifyRtype4(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
m, err := this.service.GetModule(comm.ModuleHero)
if err != nil {
@ -132,15 +169,19 @@ func (this *ModelRtask) verifyRtype4(uid string, cfg *cfg.GameRdtaskCondiData) (
}
}
if hero != nil {
return nil, soEqual(hero.HeroID, cast.ToString(cfg.Data1)) &&
soGreatEqual(hero.Lv, cfg.Data2)
if ok, err = soEqual(hero.HeroID, cast.ToString(cfg.Data1)); !ok {
return
}
if ok, err = soGreatEqual(hero.Lv, cfg.Data2); !ok {
return
}
}
}
return
}
// 指定英雄的指定装备数量
func (this *ModelRtask) verifyRtype5(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verifyRtype5(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
m, err := this.service.GetModule(comm.ModuleHero)
if err != nil {
@ -164,14 +205,16 @@ func (this *ModelRtask) verifyRtype5(uid string, cfg *cfg.GameRdtaskCondiData) (
}
}
}
return nil, soEqual(hero.HeroID, cast.ToString(cfg.Data1)) &&
soGreatEqual(count, cfg.Data2)
if ok, err = soEqual(hero.HeroID, cast.ToString(cfg.Data1)); !ok {
return
}
return soGreatEqual(count, cfg.Data2)
}
return
}
// 指定英雄星级
func (this *ModelRtask) verifyRtype6(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verifyRtype6(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
m, err := this.service.GetModule(comm.ModuleHero)
if err != nil {
@ -188,15 +231,17 @@ func (this *ModelRtask) verifyRtype6(uid string, cfg *cfg.GameRdtaskCondiData) (
}
if hero != nil {
return nil, soEqual(hero.HeroID, cast.ToString(cfg.Data1)) &&
soGreatEqual(hero.Star, cfg.Data2)
if ok, err = soEqual(hero.HeroID, cast.ToString(cfg.Data1)); !ok {
return
}
return soGreatEqual(hero.Star, cfg.Data2)
}
}
return
}
// 日常登录一次
func (this *ModelRtask) verfiyRtype7(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verfiyRtype7(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
userModule, err := this.service.GetModule(comm.ModuleUser)
if err != nil {
@ -205,14 +250,14 @@ func (this *ModelRtask) verfiyRtype7(uid string, cfg *cfg.GameRdtaskCondiData) (
if um, y := userModule.(comm.IUser); y {
if user := um.GetUser(uid); user != nil {
return nil, soEqual(utils.IsToday(user.Logintime), true)
return soEqual(utils.IsToday(user.Logintime), true)
}
}
return
}
// 累计登陆xx天
func (this *ModelRtask) verfiyRtype8(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verfiyRtype8(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
userModule, err := this.service.GetModule(comm.ModuleUser)
if err != nil {
@ -222,15 +267,15 @@ func (this *ModelRtask) verfiyRtype8(uid string, cfg *cfg.GameRdtaskCondiData) (
if um, y := userModule.(comm.IUser); y {
ud, err := um.GetUserExpand(uid)
if err != nil {
return err, false
return false, err
}
return nil, soGreatEqual(ud.LoginAddCount, cfg.Data1)
return soGreatEqual(ud.LoginAddCount, cfg.Data1)
}
return
}
// 连续登陆xx天
func (this *ModelRtask) verfiyRtype9(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verfiyRtype9(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
userModule, err := this.service.GetModule(comm.ModuleUser)
if err != nil {
@ -240,15 +285,15 @@ func (this *ModelRtask) verfiyRtype9(uid string, cfg *cfg.GameRdtaskCondiData) (
if um, y := userModule.(comm.IUser); y {
ud, err := um.GetUserExpand(uid)
if err != nil {
return err, false
return false, err
}
return nil, soGreatEqual(ud.LoginContinueCount, cfg.Data1)
return soGreatEqual(ud.LoginContinueCount, cfg.Data1)
}
return
}
// 拥有xx个好友
func (this *ModelRtask) verfiyRtype10(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verfiyRtype10(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
m, err := this.service.GetModule(comm.ModuleFriend)
if err != nil {
@ -257,13 +302,13 @@ func (this *ModelRtask) verfiyRtype10(uid string, cfg *cfg.GameRdtaskCondiData)
if mi, y := m.(comm.IFriend); y {
count := mi.GetFriendCount(uid)
return nil, soGreatEqual(count, cfg.Data1)
return soGreatEqual(count, cfg.Data1)
}
return
}
// 用户等级达到xx级
func (this *ModelRtask) verifyRtype20(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verifyRtype20(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
defer printCondiLog(uid, cfg)
userModule, err := this.service.GetModule(comm.ModuleUser)
if err != nil {
@ -272,14 +317,14 @@ func (this *ModelRtask) verifyRtype20(uid string, cfg *cfg.GameRdtaskCondiData)
if um, y := userModule.(comm.IUser); y {
if user := um.GetUser(uid); user != nil {
return nil, soGreatEqual(user.Lv, cfg.Data1)
return soGreatEqual(user.Lv, cfg.Data1)
}
}
return
}
// 日常任务活跃度达到xx
func (this *ModelRtask) verifyRtype63(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) {
func (this *ModelRtask) verifyRtype63(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) {
userModule, err := this.service.GetModule(comm.ModuleUser)
if err != nil {
return
@ -288,11 +333,11 @@ func (this *ModelRtask) verifyRtype63(uid string, cfg *cfg.GameRdtaskCondiData)
if um, y := userModule.(comm.IUser); y {
de, err := um.GetUserExpand(uid)
if err != nil {
return err, false
return false, err
}
if de != nil {
ok = soGreatEqual(de.Activeday, cfg.Data1)
return soGreatEqual(de.Activeday, cfg.Data1)
}
}

View File

@ -62,7 +62,7 @@ func TestVerify2(t *testing.T) {
patches3 := gomonkey.ApplyGlobalVar(&vals, []int32{25001})
defer patches3.Reset()
condiId := rtask.equalParams(conf, vals...)
condiId, _ := rtask.equalParams(conf, vals...)
So(condiId, ShouldEqual, 101)
})

View File

@ -1,6 +1,7 @@
package task
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
event_v2 "go_dreamfactory/lego/sys/event/v2"
@ -8,6 +9,7 @@ import (
"go_dreamfactory/pb"
"sort"
"github.com/pkg/errors"
"go.mongodb.org/mongo-driver/bson/primitive"
)
@ -257,18 +259,22 @@ func (this *ModelTask) inStrategy(uid string, heroCfgId int32) (taskIds []int32,
func (this *ModelTask) doTaskHandle(event interface{}, next func(event interface{})) {
tl := event.(*TaskListen)
// 获取玩家的指定事件列表
data, err := this.moduleTask.configure.getTasks(int32(tl.TaskType))
if err != nil {
this.moduleTask.Errorf("taskHandle err %v", err)
return
}
// 获取玩家的任务条件数据
dr := this.moduleTask.ModuleRtask.GetCondiData(tl.Uid)
if dr == nil {
return
}
// 遍历事件列表
for _, conf := range data {
// 从任务条件中查找
ret, ok := dr.Vals[conf.TypeId]
if !ok {
continue
@ -286,6 +292,7 @@ func (this *ModelTask) doTaskHandle(event interface{}, next func(event interface
"progress": progress,
"status": 1,
}
err = this.updateActive(tl.Uid, conf.Key)
} else {
if ret != nil && len(ret.Data) > 0 {
progress = ret.Data[0]
@ -298,11 +305,38 @@ func (this *ModelTask) doTaskHandle(event interface{}, next func(event interface
return
}
}
}
return
}
// 更新活跃度
func (this *ModelTask) updateActive(uid string, cfgId int32) error {
// 更新活跃度
de, err := this.moduleTask.ModuleUser.GetUserExpand(uid)
if err != nil {
return err
}
conf := this.moduleTask.configure.getTaskById(cfgId)
if conf == nil {
return errors.New(fmt.Sprintf("%v config nil", cfgId))
}
switch conf.IdTag {
case int32(comm.TASK_DAILY):
de.Activeday += conf.Active
case int32(comm.TASK_WEEKLY):
de.Activeweek += conf.Active
}
update := map[string]interface{}{
"activeday": de.Activeday,
"activeweek": de.Activeweek,
}
return this.moduleTask.ModuleUser.ChangeUserExpand(uid, update)
}
type TaskListen struct {
event_v2.Event
Uid string