public void SelectCharacterHandler(GameSession session, CharacterSelectReqMessage message) { var plr = session.Player; if (plr == null) { return; } // Prevents player from changing characters while playing if (plr.Room?.Id > 0 && plr.Room?.GameState != GameState.Waiting && plr.Room?.SubGameState != GameTimeState.HalfTime && plr.RoomInfo.State != PlayerState.Lobby) { session.SendAsync(new ServerResultAckMessage(ServerResult.SelectCharacterFailed)); return; } Logger.ForAccount(session) .Information("Selecting character {slot}", message.Slot); try { plr.CharacterManager?.Select(message.Slot); } catch (CharacterException ex) { Logger.ForAccount(session) .Error(ex.Message); session.SendAsync(new ServerResultAckMessage(ServerResult.SelectCharacterFailed)); } }
public void SelectCharacterHandler(GameSession session, CharacterSelectReqMessage message) { var plr = session.Player; // Prevents player from changing characters while playing if (plr.Room != null && plr.RoomInfo.State != PlayerState.Lobby && !plr.Room.GameRuleManager.GameRule.StateMachine.IsInState(GameRuleState.HalfTime)) { session.SendAsync(new ServerResultAckMessage(ServerResult.SelectCharacterFailed)); return; } Logger.ForAccount(session) .Information("Selecting character {slot}", message.Slot); try { plr.CharacterManager.Select(message.Slot); } catch (Exception ex) { Logger.ForAccount(session) .Error(ex.Message); session.SendAsync(new ServerResultAckMessage(ServerResult.SelectCharacterFailed)); } }