package stonehenge import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "strconv" "strings" ) //参数校验 func (this *apiComp) StoryCheck(session comm.IUserSession, req *pb.StonehengeStoryReq) (errdata *pb.ErrorData) { if req.Cid == 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.String(), } } return } func (this *apiComp) Story(session comm.IUserSession, req *pb.StonehengeStoryReq) (errdata *pb.ErrorData) { var ( stone *pb.DBStonehenge err error update map[string]interface{} newEvent int32 conf *cfg.GameStoneStoryData event []string ) if errdata = this.StoryCheck(session, req); errdata != nil { return } update = make(map[string]interface{}) if stone, err = this.module.modelStonehenge.GetStonehengeData(session.GetUserId()); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.String(), Message: err.Error(), } return } if v, ok := stone.Rooms.Eventid[req.Eventid]; !ok || v == true { // 不存在该事件 errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), Message: fmt.Sprintf("req.Eventid err :%d", req.Eventid), } return } if req.Cid == -1 { stone.Rooms.Story = 0 stone.Rooms.Eventid[req.Eventid] = true } else { if conf, err = this.module.configure.GetStoneStoryConf(req.Cid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } this.module.Debugf("%v", conf) if req.Pos == 0 { event = conf.OptionEventIdGroup1 } else if req.Pos == 1 { event = conf.OptionEventIdGroup2 } else if req.Pos == 2 { event = conf.OptionEventIdGroup3 } else { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } var szW []int32 if len(event) == 1 { arr := strings.Split(event[0], ",") if len(arr) != 3 { return } if n, err := strconv.Atoi(arr[2]); err == nil { stone.Rooms.Story = int32(n) } } else { for _, s := range event { arr := strings.Split(s, ",") if len(arr) != 3 { return } if n, err := strconv.Atoi(arr[1]); err == nil { szW = append(szW, int32(n)) } } arr := strings.Split(event[comm.GetRandW(szW)], ",") if n, err := strconv.Atoi(arr[2]); err == nil { stone.Rooms.Story = int32(n) } if n, err := strconv.Atoi(arr[0]); err == nil { newEvent = int32(n) stone.Rooms.Eventid[newEvent] = false } } } update["rooms"] = stone.Rooms this.module.modelStonehenge.ChangeStonehengeData(session.GetUserId(), update) session.SendMsg(string(this.module.GetType()), "story", &pb.StonehengeStoryResp{ Story: stone.Rooms.Story, NewEvent: newEvent, }) return }