public SEnterPlayerAckMessage(ulong accountId, string nickname, byte unk1, PlayerGameMode mode, int unk3) { AccountId = accountId; Unk1 = unk1; PlayerGameMode = mode; Unk3 = unk3; Nickname = nickname; }
public void ChangeMode(Player plr, PlayerGameMode mode) { if (mode == PlayerGameMode.Ignore) { return; } if (_players.TryGetValue(plr, out var currenTeamVal)) { if (plr.RoomInfo.HasLoaded) { throw new RoomException("Player is playing"); } if (plr.RoomInfo.IsReady) { plr.Session.SendAsync(new RoomChangeTeamFailAckMessage(ChangeTeamResult.AlreadyReady)); return; } if (!_teams.TryGetValue(currenTeamVal, out var currentTeam)) { throw new RoomException($"Player is in a room, but not inside a team"); } switch (mode) { case PlayerGameMode.Normal: if (currentTeam.NoSpectatorPlayers.Count() >= currentTeam.PlayerLimit) { plr.SendAsync(new RoomChangeTeamFailAckMessage(ChangeTeamResult.Full)); return; } break; case PlayerGameMode.Spectate: if (currentTeam.Spectators.Count() >= currentTeam.SpectatorLimit) { plr.SendAsync(new RoomChangeTeamFailAckMessage(ChangeTeamResult.Full)); return; } break; default: throw new RoomException($"Invalid mode {mode}"); } plr.RoomInfo.Mode = mode; Broadcast(new RoomPlayModeChangeAckMessage(plr.Account.Id, mode)); } else { throw new RoomException("Player is not inside this room"); } }
public void ChangeMode(Player plr, PlayerGameMode mode) { //using (_sync.Lock()) { //if (plr.Room != Room) //throw new RoomException("Player is not inside this room"); if (plr.RoomInfo.State != PlayerState.Lobby) { throw new RoomException("Player is playing"); } if (plr.RoomInfo.Mode == mode) { throw new RoomException($"Already in mode {mode}"); } if (plr.RoomInfo.Team == null) { throw new RoomException("Player is not in a team"); } if (plr.RoomInfo.IsReady) { plr.Session.SendAsync(new RoomChangeTeamFailAckMessage(ChangeTeamResult.AlreadyReady)); throw new RoomException("Player is already ready"); } var team = plr.RoomInfo.Team; switch (mode) { case PlayerGameMode.Normal: if (team.Players.Count() >= team.PlayerLimit) { plr.Session.SendAsync(new RoomChangeTeamFailAckMessage(ChangeTeamResult.Full)); throw new TeamLimitReachedException(); } break; case PlayerGameMode.Spectate: if (team.Spectators.Count() >= team.SpectatorLimit) { plr.Session.SendAsync(new RoomChangeTeamFailAckMessage(ChangeTeamResult.Full)); throw new TeamLimitReachedException(); } break; default: throw new RoomException($"Invalid mode {mode}"); } plr.RoomInfo.Mode = mode; Broadcast(new RoomPlayModeChangeAckMessage(plr.Account.Id, mode)); } }
public TeamChangeModeError ChangeMode(Player plr, PlayerGameMode mode) { if (plr.Room != Room) { return(TeamChangeModeError.WrongRoom); } if (plr.State != PlayerState.Lobby) { return(TeamChangeModeError.PlayerIsPlaying); } if (plr.Mode == mode) { return(TeamChangeModeError.AlreadyInMode); } if (plr.Team == null) { return(TeamChangeModeError.NotInTeam); } if (plr.IsReady) { return(TeamChangeModeError.PlayerIsReady); } var team = plr.Team; switch (mode) { case PlayerGameMode.Normal: if (team.Players.Count(x => !x.IsInGMMode) >= team.PlayerLimit) { return(TeamChangeModeError.Full); } break; case PlayerGameMode.Spectate: if (team.Spectators.Count(x => !x.IsInGMMode) >= team.SpectatorLimit) { return(TeamChangeModeError.Full); } break; default: return(TeamChangeModeError.InvalidMode); } plr.Mode = mode; Broadcast(new SPlayerGameModeChangeAckMessage(plr.Account.Id, mode)); return(TeamChangeModeError.OK); }
public SPlayerGameModeChangeAckMessage(ulong accountId, PlayerGameMode mode) { AccountId = accountId; Mode = mode; }
public SChangeTeamAckMessage(ulong accountId, Team team, PlayerGameMode mode) { AccountId = accountId; Team = team; Mode = mode; }