package parkour import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" ) //参数校验 func (this *apiComp) JoinTeamCheck(session comm.IUserSession, req *pb.ParkourJoinTeamReq) (errdata *pb.ErrorData) { if session.GetUserId() == req.Uid { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } ///请求进入队伍 func (this *apiComp) JoinTeam(session comm.IUserSession, req *pb.ParkourJoinTeamReq) (errdata *pb.ErrorData) { var ( info *pb.DBParkour tean *pb.DBParkour mount *cfg.GameBuzkashiMountData member *pb.DBRaceMember users []string err error ) if errdata = this.JoinTeamCheck(session, req); errdata != nil { return } if info, err = this.module.parkourComp.queryinfo(session.GetUserId()); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } // 状态校验 if info.State != pb.RaceTeamState_resting { // 不是休息中不能参加 errdata = &pb.ErrorData{ Code: pb.ErrorCode_StateInvalid, Title: pb.ErrorCode_StateInvalid.ToString(), Message: err.Error(), } return } if len(info.Member) > 3 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ParkourMemberFull, Title: pb.ErrorCode_ParkourMemberFull.ToString(), Message: err.Error(), } return } if tean, err = this.module.parkourComp.queryinfo(req.Uid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } users = make([]string, len(tean.Member)) for i, v := range tean.Member { if v.Uid == session.GetUserId() { // 自己已经在队伍中 errdata = &pb.ErrorData{ Code: pb.ErrorCode_ParkourTargetTeamed, Title: pb.ErrorCode_ParkourTargetTeamed.ToString(), Message: err.Error(), } return } users[i] = v.Uid } if tean.Captainid == "" { user := this.module.ModuleUser.GetUser(tean.Uid) if mount, err = this.module.configure.getGameBuzkashiMount(tean.Dfmount); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } member = &pb.DBRaceMember{Uid: user.Uid, Name: user.Name, Avatar: user.Avatar, Lv: user.Lv, Mount: tean.Dfmount, Maxhp: mount.Hp} tean.Captainid = tean.Uid tean.State = pb.RaceTeamState_teaming tean.Member = append(tean.Member, member) users = append(users, tean.Uid) } users = append(users, session.GetUserId()) if mount, err = this.module.configure.getGameBuzkashiMount(info.Dfmount); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } user := this.module.ModuleUser.GetUser(session.GetUserId()) member = &pb.DBRaceMember{Uid: user.Uid, Name: user.Name, Avatar: user.Avatar, Lv: user.Lv, Mount: info.Dfmount, Maxhp: mount.Hp} tean.Member = append(tean.Member, member) if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{ "state": tean.State, "captainid": tean.Captainid, }); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } if err = this.module.parkourComp.Change(tean.Captainid, map[string]interface{}{ "state": tean.State, "captainid": tean.Captainid, "member": tean.Member, }); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } this.module.SendMsgToUsers(string(this.module.GetType()), "teamjoinnotice", &pb.ParkourTeamJoinNoticePush{Member: member}, users...) this.module.SendMsgToUsers(string(this.module.GetType()), "teamchanage", &pb.ParkourTeamChanagePush{Team: tean}, users...) session.SendMsg(string(this.module.GetType()), "jointeam", &pb.ParkourJoinTeamResp{ Team: tean, }) return }