go_dreamfactory/modules/robot/modulerobot_practice.go
2023-09-08 15:08:34 +08:00

127 lines
3.1 KiB
Go

package robot
import (
"errors"
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"google.golang.org/protobuf/proto"
)
//用户模块 机器人
type ModuleRobot_Practice struct {
Info *pb.DBPracticeRoom
}
func (this *ModuleRobot_Practice) Init() (err error) {
return
}
//接收到消息
func (this *ModuleRobot_Practice) Receive(robot IRobot, stype string, message proto.Message) (err error) {
switch stype {
case "info":
resp := message.(*pb.PracticeInfoResp)
this.Info = resp.Info
break
}
return
}
func (this *ModuleRobot_Practice) OncePipeline(robot IRobot) (err error) {
return
}
//机器人执行流
func (this *ModuleRobot_Practice) DoPipeline(robot IRobot) (err error) {
return
}
//做任务
func (this *ModuleRobot_Practice) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
var (
errdata *pb.ErrorData
)
if _, errdata = robot.SendMessage("practice", "info", &pb.PracticeInfoReq{}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
switch comm.TaskType(condconf.Type) {
case comm.Rtype149:
for i := 1; i < 4; i++ {
if err = this.practice(taskconf.Key, condconf.Id, robot, int32(i)); err == nil {
break
}
}
case comm.Rtype152:
for i := 1; i <= int(condconf.Value); i++ {
if err = this.unlock(taskconf.Key, condconf.Id, robot, int32(i)); err != nil {
return
}
}
}
return
}
//练功
func (this *ModuleRobot_Practice) unlock(tid, cid int32, robot IRobot, index int32) (err error) {
var (
sysmodule *ModuleRobot_Sys
)
sysmodule = robot.GetModule(comm.ModuleSys).(*ModuleRobot_Sys)
switch index {
case 1:
err = sysmodule.funcactivate(tid, cid, robot, "practice_ pillar1")
break
case 2:
err = sysmodule.funcactivate(tid, cid, robot, "practice_ pillar2")
break
case 3:
err = sysmodule.funcactivate(tid, cid, robot, "practice_ pillar3")
break
default:
err = fmt.Errorf("no found pillar:%d", index)
}
return
}
//练功
func (this *ModuleRobot_Practice) practice(tid, cid int32, robot IRobot, index int32) (err error) {
var (
errdata *pb.ErrorData
sysmodule *ModuleRobot_Sys
heromodule *ModuleRobot_Hero
hero string
)
sysmodule = robot.GetModule(comm.ModuleSys).(*ModuleRobot_Sys)
switch index {
case 1:
err = sysmodule.funcactivate(tid, cid, robot, "practice_ pillar1")
break
case 2:
err = sysmodule.funcactivate(tid, cid, robot, "practice_ pillar2")
break
case 3:
err = sysmodule.funcactivate(tid, cid, robot, "practice_ pillar3")
break
default:
err = fmt.Errorf("no found pillar:%d", index)
}
if err != nil {
return
}
heromodule = robot.GetModule(comm.ModuleHero).(*ModuleRobot_Hero)
hero = heromodule.getpracticehero()
if hero == "" {
err = fmt.Errorf("no found can practice hero")
return
}
if _, errdata = robot.SendTaskMessage(tid, cid, "practice", "practice", &pb.PracticePracticeReq{Index: index, Hero: hero}); errdata != nil {
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
return
}
return
}