package robot import ( "errors" "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "google.golang.org/protobuf/proto" ) //用户模块 机器人 type ModuleRobot_Shop struct { goods map[int32][]*pb.ShopItem } func (this *ModuleRobot_Shop) Init() (err error) { this.goods = make(map[int32][]*pb.ShopItem) return } //接收到消息 func (this *ModuleRobot_Shop) Receive(robot IRobot, stype string, message proto.Message) (err error) { switch stype { case "getlist": resp := message.(*pb.ShopGetListResp) this.goods[resp.SType] = resp.Goods break } return } func (this *ModuleRobot_Shop) OncePipeline(robot IRobot) (err error) { var ( errdata *pb.ErrorData ) if _, errdata = robot.SendMessage("shop", "getlist", &pb.ShopGetListReq{ SType: 1, }); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } return } //机器人执行流 func (this *ModuleRobot_Shop) DoPipeline(robot IRobot) (err error) { var ( errdata *pb.ErrorData usermodule *ModuleRobot_User ) usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User) for _, v := range this.goods[1] { if v.LeftBuyNum > 0 && usermodule.user.Gold >= int64(v.Consume[0].N) { if _, errdata = robot.SendMessage("shop", "buy", &pb.ShopBuyReq{ ShopType: 1, Gid: v.Gid, BuyNum: 1, }); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } v.LeftBuyNum-- break } } for _, v := range this.goods[2] { if v.LeftBuyNum > 0 && usermodule.user.Diamond >= int64(v.Consume[0].N) { if _, errdata = robot.SendMessage("shop", "buy", &pb.ShopBuyReq{ ShopType: 2, Gid: v.Gid, BuyNum: 1, }); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } break } } return } //做任务 func (this *ModuleRobot_Shop) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) { var ( errdata *pb.ErrorData ) switch comm.TaskType(condconf.Type) { case comm.Rtype104: var ( usermodule *ModuleRobot_User ) usermodule = robot.GetModule(comm.ModuleUser).(*ModuleRobot_User) if _, errdata = robot.SendMessage("shop", "getlist", &pb.ShopGetListReq{ SType: 2, }); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } for _, v := range this.goods[2] { if v.LeftBuyNum > 0 && usermodule.user.Diamond >= int64(v.Consume[0].N) { if _, errdata = robot.SendMessage("shop", "buy", &pb.ShopBuyReq{ ShopType: 2, Gid: v.Gid, BuyNum: 1, }); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } break } } } return }