public void SelectCharacterHandler(GameSession session, CSelectCharacterReqMessage 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.Send(new SServerResultInfoAckMessage(ServerResult.SelectCharacterFailed)); return; } Logger.Info() .Account(session) .Message($"Selecting character {message.Slot}") .Write(); try { plr.CharacterManager.Select(message.Slot); } catch (CharacterException ex) { Logger.Error() .Account(session) .Message(ex.Message) .Write(); session.Send(new SServerResultInfoAckMessage(ServerResult.SelectCharacterFailed)); } }
public async Task <bool> OnHandle(MessageContext context, CSelectCharacterReqMessage message) { var session = context.GetSession <Session>(); var plr = session.Player; // Prevents player from changing characters while playing if (plr.Room != null && plr.State != PlayerState.Lobby && plr.Room.GameRule.StateMachine.TimeState != GameTimeState.HalfTime) { session.Send(new SServerResultInfoAckMessage(ServerResult.SelectCharacterFailed)); return(true); } // Cant switch characters when ready if (plr.Room != null && plr.IsReady) { session.Send(new SServerResultInfoAckMessage(ServerResult.SelectCharacterFailed)); return(true); } // Validate equip if (plr.Room != null && plr.State != PlayerState.Lobby && plr.Room.GameRule.StateMachine.TimeState == GameTimeState.HalfTime) { var character = plr.CharacterManager[message.Slot]; if (character != null && !_equipValidator.IsValid(character)) { session.Send(new SServerResultInfoAckMessage(ServerResult.WearingUnusableItem)); return(true); } } if (!plr.CharacterManager.Select(message.Slot)) { session.Send(new SServerResultInfoAckMessage(ServerResult.SelectCharacterFailed)); } return(true); }