package parkour import ( "go_dreamfactory/comm" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "time" ) //参数校验 func (this *apiComp) InviteCheck(session comm.IUserSession, req *pb.ParkourInviteReq) (errdata *pb.ErrorData) { if req.Uid == session.GetUserId() { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } ///邀请组队 func (this *apiComp) Invite(session comm.IUserSession, req *pb.ParkourInviteReq) (errdata *pb.ErrorData) { var ( info *pb.DBParkour tinfo *pb.DBParkour tuser *pb.DBUser mount *cfg.GameBuzkashiMountData member *pb.DBRaceMember users []string ok bool err error ) if errdata = this.InviteCheck(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.Captainid != "" && info.Captainid != session.GetUserId() { //自己不是队长 无权邀请他人 errdata = &pb.ErrorData{ Code: pb.ErrorCode_ParkourInviteNoPermissions, Title: pb.ErrorCode_ParkourInviteNoPermissions.ToString(), Message: err.Error(), } return } if len(info.Member) > 3 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } return } if tuser = this.module.ModuleUser.GetUser(session.GetUserId()); tuser == nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), } return } 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 } ok = false for _, v := range info.Member { if v.Uid == session.GetUserId() { ok = true } } if !ok { info.Member = append(info.Member, &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Mount: info.Dfmount, Maxhp: mount.Hp}) } if tinfo, 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 } if tuser = this.module.ModuleUser.GetUser(req.Uid); tuser == nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), } return } if mount, err = this.module.configure.getGameBuzkashiMount(tinfo.Dfmount); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } //目标是否在线 if !this.module.ModuleUser.IsOnline(req.Uid) { member = &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Mount: tinfo.Dfmount, Maxhp: mount.Hp, Isai: true} info.Captainid = session.GetUserId() info.Member = append(info.Member, member) users = make([]string, len(info.Member)) for i, v := range info.Member { users[i] = v.Uid } this.module.SendMsgToUsers(string(this.module.GetType()), "teamjoinnotice", &pb.ParkourTeamJoinNoticePush{Member: member}, users...) this.module.SendMsgToUsers(string(this.module.GetType()), "teamchanage", &pb.ParkourTeamChanagePush{Team: info}, users...) } else { if tinfo.Captainid != "" { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ParkourTargetTeamed, Title: pb.ErrorCode_ParkourTargetTeamed.ToString(), } return } ok = false for _, v := range info.Invite { if v.Uid == req.Uid { v.Expired = configure.Now().Add(time.Second * 10).Unix() ok = true } } if !ok { info.Invite = append(info.Invite, &pb.DBRaceInvite{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Expired: configure.Now().Add(time.Second * 10).Unix()}) } this.module.SendMsgToUser(string(this.module.GetType()), "invitenotice", &pb.ParkourInviteNoticePush{Team: info, State: 1}, req.Uid) } if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{ "captainid": info.Captainid, "invite": info.Invite, "member": info.Member, }); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } session.SendMsg(string(this.module.GetType()), "invite", &pb.ParkourInviteResp{Issucc: true, Team: info}) return }