This commit is contained in:
meixiongfeng 2023-05-05 10:58:14 +08:00
commit cc60845b92
9 changed files with 121 additions and 46 deletions

View File

@ -21,7 +21,8 @@ func (this *apiComp) Info(session comm.IUserSession, req *pb.ParkourInfoReq) (co
if code = this.InfoCheck(session, req); code != pb.ErrorCode_Success {
return
}
isopen = this.module.configure.isopen()
// isopen = this.module.configure.isopen()
isopen = true
if isopen {
if info, err = this.module.parkourComp.queryinfo(session.GetUserId()); err != nil {
code = pb.ErrorCode_DBError

View File

@ -59,7 +59,7 @@ func (this *apiComp) Invite(session comm.IUserSession, req *pb.ParkourInviteReq)
}
}
if !ok {
info.Member = append(info.Member, &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Mount: info.Dfmount, Hp: mount.Hp})
info.Member = append(info.Member, &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Mount: info.Dfmount, Hp: mount.Hp})
}
if tinfo, err = this.module.parkourComp.queryinfo(req.Uid); err != nil {
@ -77,7 +77,8 @@ func (this *apiComp) Invite(session comm.IUserSession, req *pb.ParkourInviteReq)
//目标是否在线
if !this.module.ModuleUser.IsOnline(req.Uid) {
member = &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Mount: tinfo.Dfmount, Hp: mount.Hp, Isai: true}
member = &pb.DBRaceMember{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Lv: tuser.Lv, Mount: tinfo.Dfmount, Hp: 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 {
@ -100,12 +101,13 @@ func (this *apiComp) Invite(session comm.IUserSession, req *pb.ParkourInviteReq)
}
}
if !ok {
info.Invite = append(info.Invite, &pb.DBRaceInvite{Uid: tuser.Uid, Name: tuser.Name, Avatar: tuser.Avatar, Expired: configure.Now().Add(time.Second * 10).Unix()})
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 {

View File

@ -64,12 +64,13 @@ func (this *apiComp) InviteHandle(session comm.IUserSession, req *pb.ParkourInvi
code = pb.ErrorCode_ConfigNoFound
return
}
member = &pb.DBRaceMember{Uid: invite.Uid, Name: invite.Name, Avatar: invite.Avatar, Mount: info.Dfmount, Hp: mount.Hp}
member = &pb.DBRaceMember{Uid: invite.Uid, Name: invite.Name, Avatar: invite.Avatar, Lv: invite.Lv, Mount: info.Dfmount, Hp: mount.Hp}
tean.Captainid = tean.Uid
tean.State = pb.RaceTeamState_teaming
tean.Member = append(tean.Member, member)
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"captainid": tean.Captainid,
"state": tean.State,
}); err != nil {
code = pb.ErrorCode_DBError
return

View File

@ -52,17 +52,29 @@ func (this *apiComp) JoinTeam(session comm.IUserSession, req *pb.ParkourJoinTeam
}
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 {
code = pb.ErrorCode_ConfigNoFound
return
}
member = &pb.DBRaceMember{Uid: session.GetUserId(), Name: user.Name, Avatar: user.Avatar, Lv: user.Lv, Mount: tean.Dfmount, Hp: 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 {
code = pb.ErrorCode_ConfigNoFound
return
}
user := this.module.ModuleUser.GetUser(session.GetUserId())
member = &pb.DBRaceMember{Uid: session.GetUserId(), Name: user.Name, Avatar: user.Avatar, Mount: info.Dfmount, Hp: mount.Hp}
tean.Captainid = tean.Uid
tean.State = pb.RaceTeamState_teaming
member = &pb.DBRaceMember{Uid: session.GetUserId(), Name: user.Name, Avatar: user.Avatar, Lv: user.Lv, Mount: info.Dfmount, Hp: 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 {
code = pb.ErrorCode_DBError

View File

@ -14,6 +14,7 @@ func (this *apiComp) QuitTeamCheck(session comm.IUserSession, req *pb.ParkourQui
func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeamReq) (code pb.ErrorCode, data *pb.ErrorData) {
var (
tean *pb.DBParkour
ntean *pb.DBParkour
member *pb.DBRaceMember
users []string
ok bool
@ -31,7 +32,7 @@ func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeam
tean.Member = append(tean.Member[0:i], tean.Member[i+1:]...)
member = v
ok = true
} else {
} else if !v.Isai {
users = append(users, v.Uid)
}
}
@ -39,8 +40,53 @@ func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeam
code = pb.ErrorCode_ReqParameterError
return
}
if req.Captainid == session.GetUserId() { //自己是队长
if len(users) > 0 {
for i, v := range users {
if i == 0 {
if ntean, err = this.module.parkourComp.queryinfo(v); err != nil {
code = pb.ErrorCode_DBError
return
} else {
ntean.Captainid = users[0]
ntean.Member = tean.Member
if err = this.module.parkourComp.Change(v, map[string]interface{}{
"captainid": v,
"member": tean.Member,
}); err != nil {
code = pb.ErrorCode_DBError
return
}
}
} else {
if err = this.module.parkourComp.Change(v, map[string]interface{}{
"captainid": users[0],
}); err != nil {
code = pb.ErrorCode_DBError
return
}
}
}
this.module.SendMsgToUsers(string(this.module.GetType()), "teamchanage",
&pb.ParkourTeamChanagePush{Team: ntean}, users...)
}
tean.Invite = make([]*pb.DBRaceInvite, 0)
tean.Member = make([]*pb.DBRaceMember, 0)
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"captainid": session.GetUserId(),
"state": pb.RaceTeamState_resting,
"captainid": "",
"invite": tean.Invite,
"member": tean.Member,
}); err != nil {
code = pb.ErrorCode_DBError
return
}
} else {
if err = this.module.parkourComp.Change(session.GetUserId(), map[string]interface{}{
"state": pb.RaceTeamState_resting,
"captainid": "",
}); err != nil {
code = pb.ErrorCode_DBError
return
@ -51,12 +97,14 @@ func (this *apiComp) QuitTeam(session comm.IUserSession, req *pb.ParkourQuitTeam
code = pb.ErrorCode_DBError
return
}
if len(users) > 0 {
this.module.SendMsgToUsers(string(this.module.GetType()), "teamquitnotice",
&pb.ParkourTeamQuitNoticePush{Member: member}, users...)
this.module.SendMsgToUsers(string(this.module.GetType()), "teamchanage",
&pb.ParkourTeamChanagePush{Team: tean}, users...)
}
}
session.SendMsg(string(this.module.GetType()), "quitteam", &pb.ParkourQuitTeamResp{})
return

View File

@ -151,7 +151,7 @@ func (this *ModelParkourComp) queryinfo(uid string) (result *pb.DBParkour, err e
result = &pb.DBParkour{
Id: primitive.NewObjectID().Hex(),
Uid: uid,
State: pb.RaceTeamState_teaming,
State: pb.RaceTeamState_resting,
Mounts: make(map[string]int32),
Invite: make([]*pb.DBRaceInvite, 0),
Member: []*pb.DBRaceMember{},
@ -187,7 +187,7 @@ func (this *ModelParkourComp) queryinfos(uids []string) (results []*pb.DBParkour
temp := &pb.DBParkour{
Id: primitive.NewObjectID().Hex(),
Uid: v,
State: pb.RaceTeamState_teaming,
State: pb.RaceTeamState_resting,
Mounts: make(map[string]int32),
Invite: make([]*pb.DBRaceInvite, 0),
Member: []*pb.DBRaceMember{},
@ -227,7 +227,7 @@ func (this *ModelParkourComp) addUserMounts(uid string, mounts map[string]int32)
result = &pb.DBParkour{
Id: primitive.NewObjectID().Hex(),
Uid: uid,
State: pb.RaceTeamState_teaming,
State: pb.RaceTeamState_resting,
Invite: make([]*pb.DBRaceInvite, 0),
Mounts: make(map[string]int32),
Member: []*pb.DBRaceMember{},

View File

@ -393,10 +393,10 @@ func (this *Parkour) overtimer(task *timewheel.Task, args ...interface{}) {
func (this *Parkour) useroffline(uid, sessionid string) {
var (
info *pb.DBParkour
team *pb.DBParkour
member *pb.DBRaceMember
users []string
keep bool
index int32
err error
)
@ -445,12 +445,14 @@ func (this *Parkour) useroffline(uid, sessionid string) {
if v.Uid == uid {
index = int32(i)
member = v
keep = true
continue
}
if v.Uid != uid && !v.Isai {
users = append(users, v.Uid)
}
}
if keep {
team.Member = append(team.Member[0:index], team.Member[index+1:]...)
if err = this.parkourComp.Change(team.Uid, map[string]interface{}{
"member": team.Member,
@ -465,7 +467,7 @@ func (this *Parkour) useroffline(uid, sessionid string) {
this.SendMsgToUsers(string(this.GetType()), "teamchanage",
&pb.ParkourTeamChanagePush{Team: team}, users...)
}
}
}
} else if info.State == pb.RaceTeamState_matching {
if info.Captainid == uid {

View File

@ -117,3 +117,7 @@ func (this *ModelRtask) checkCondi(uid string, condiId int32) (err error, ok boo
return
}
func (this *ModelRtask) userlock(uid string) (result *redis.RedisMutex, err error) {
return this.DBModel.Redis.NewRedisMutex(fmt.Sprintf("ulocktask:%s", uid))
}

View File

@ -357,6 +357,12 @@ func (this *ModuleRtask) TriggerTask(uid string, taskParams ...*comm.TaskParam)
return
}
lock, _ := this.modelRtask.userlock(uid)
err := lock.Lock()
if err != nil {
this.Error("TriggerTask userlock err!", log.Field{Key: "err", Value: err.Error()})
}
defer lock.Unlock()
for _, tp := range taskParams {
if code := this.processOneTask(session, tp.TT, tp.Params...); code != pb.ErrorCode_Success {
@ -364,7 +370,6 @@ func (this *ModuleRtask) TriggerTask(uid string, taskParams ...*comm.TaskParam)
session.Push()
comm.PuttaskParam(tp)
}
this.PutUserSession(session)
return
}