Example #1
0
        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));
            }
        }