diff --git a/server/hallserver/room/room.go b/server/hallserver/room/room.go index 676a6024..b90188b7 100644 --- a/server/hallserver/room/room.go +++ b/server/hallserver/room/room.go @@ -293,7 +293,7 @@ func (this *room) fillMFCurrentRoom(hum common.Player, pb *cs.MFCurrentRoom) { q5.AppendSlice(&pb.TeamList, pbT) } sort.Slice(pb.TeamList, func(i, j int) bool { - return *pb.TeamList[i].SortIdx < *pb.TeamList[j].SortIdx + return pb.TeamList[i].GetSortIdx() < pb.TeamList[j].GetSortIdx() }) for _, t := range this.obTeamUuidHash { pbT := &cs.MFTeam{} @@ -302,7 +302,7 @@ func (this *room) fillMFCurrentRoom(hum common.Player, pb *cs.MFCurrentRoom) { q5.AppendSlice(&pb.TeamList, pbT) } sort.Slice(pb.ObserverTeamList, func(i, j int) bool { - return *pb.ObserverTeamList[i].SortIdx < *pb.ObserverTeamList[j].SortIdx + return pb.ObserverTeamList[i].GetSortIdx() < pb.ObserverTeamList[j].GetSortIdx() }) } diff --git a/server/hallserver/room/roommgr.go b/server/hallserver/room/roommgr.go index 0667eb0b..434cdc66 100644 --- a/server/hallserver/room/roommgr.go +++ b/server/hallserver/room/roommgr.go @@ -264,4 +264,52 @@ func (this *roomMgr) CMLeaveObserver(hdr *f5.MsgHdr, msg *cs.CMLeaveObserver) { } func (this *roomMgr) CMSwitchTeam(hdr *f5.MsgHdr, msg *cs.CMSwitchTeam) { + hum := hdr.Context.(common.Player) + rspMsg := cs.SMSwitchTeam{} + + roomPtr, ok := hum.GetRoom().(*room) + if !ok || roomPtr == nil { + rspMsg.Errcode = proto.Int32(1) + rspMsg.Errmsg = proto.String("room is empty") + hum.SendMsg(&rspMsg) + return + } + + if !roomPtr.isOwner(hum) { + rspMsg.Errcode = proto.Int32(1) + rspMsg.Errmsg = proto.String("is not room owner") + hum.SendMsg(&rspMsg) + return + } + + if msg.GetType() == 0 { + t := roomPtr.getObTeamById(msg.GetTeamId()) + if t == nil { + rspMsg.Errcode = proto.Int32(1) + rspMsg.Errmsg = proto.String("team_id error") + hum.SendMsg(&rspMsg) + return + } + if roomPtr.isTeamFull() { + rspMsg.Errcode = proto.Int32(3) + rspMsg.Errmsg = proto.String("room team is full") + hum.SendMsg(&rspMsg) + return + } + roomPtr.removeObTeam(t) + roomPtr.addTeam(t) + } else { + t := roomPtr.getTeamById(msg.GetTeamId()) + if t == nil { + rspMsg.Errcode = proto.Int32(1) + rspMsg.Errmsg = proto.String("team_id error") + hum.SendMsg(&rspMsg) + return + } + roomPtr.removeTeam(t) + roomPtr.addObTeam(t) + } + + hum.SendMsg(&rspMsg) + roomPtr.notifyRoomInfo(hum) }