public ExecutionResult HandleMessage(string message, Player player) { var gameSave = player.ActiveGameSave; var gameBeingPlayed = FindGame(player, gameSave); if (message == Messages.Restart) { var execResult = GameService.LaunchGameForPlayer(gameBeingPlayed, player.ActiveGameSave, player, _gameProcessor); execResult.OptionsToShow.Add("-Menu-"); return(execResult); } if (message == Messages.MainMenu) { return(MessageHandlerHelpers.ReturnToMainMenu(player)); } var messageResult = _gameProcessor.ProcessMessage(message, gameSave, gameBeingPlayed, player); if (messageResult.OptionsToShow.Count == 0) { messageResult.OptionsToShow.Add(Messages.Restart); messageResult.OptionsToShow.Add(Messages.MainMenu); } else { messageResult.OptionsToShow.Add("-Menu-"); } return(messageResult); }
public ExecutionResult HandleMessage(string message, Player player) { if (message == Messages.Return) { return(MessageHandlerHelpers.ReturnToMainMenu(player)); } var games = _gameStore.ListGames(); List <string> optionsToSend = new List <string>(); optionsToSend.Add(Messages.Return); var gameAchievementList = games.Select(a => (AchievementService.HasPlayerDoneAchievements(a, player), a.GameName)).ToList(); gameAchievementList.ForEach(a => { optionsToSend.Add($"{a.GameName} ({a.Item1.Count(b => b.hasAchieved)}/{a.Item1.Count()})"); }); var selectedGame = games.FirstOrDefault(a => message.StartsWith(a.GameName)); if (selectedGame != null) { var achievmentListString = AchievementService.HasPlayerDoneAchievements(selectedGame, player).OrderBy(a => a.hasAchieved).Select(a => $"{(a.hasAchieved ? "UNLOCKED! " : "")}{a.achievement.Name} - {a.achievement.Description}").ToList(); var responseMessage = string.Join("\n\n", achievmentListString); var result = ExecutionResultHelper.SingleMessage(responseMessage, optionsToSend); result.MessagesToShow.Insert(0, new MessageResult { Message = "Achievements for game: " + selectedGame.GameName }); return(result); } else { player.PlayerFlag = PlayerFlag.ACHIEVEMENTS.ToString(); var messageToSend = $"You have completed a total of: {gameAchievementList.Sum(a => a.Item1.Count(b => b.hasAchieved))} out of {gameAchievementList.Sum(a => a.Item1.Count())}"; return(new ExecutionResult { MessagesToShow = new List <MessageResult> { new MessageResult { Message = messageToSend } }, OptionsToShow = optionsToSend }); } }
private ExecutionResult SetMainMenu(Player player, params string[] messages) { ExecutionResult executionResult = new ExecutionResult(); List <MessageResult> resultMessages = new List <MessageResult>(); resultMessages.AddRange(messages.Select(a => new MessageResult { Message = a })); player.PlayerFlag = PlayerFlag.GAME_MENU.ToString(); var result = MessageHandlerHelpers.ReturnToGameMenu(player, ""); resultMessages.AddRange(result.MessagesToShow); executionResult.MessagesToShow = resultMessages; executionResult.OptionsToShow = result.OptionsToShow; return(executionResult); }
public ExecutionResult HandleMessage(string message, Player player) { if (player.PlayerFlag == PlayerFlag.MAIN_MENU.ToString()) { player.PlayerFlag = PlayerFlag.SEND_US_MESSAGE.ToString(); return(ExecutionResultHelper.SingleMessage("You can send us a message here! Just type in your message and send it as you" + " would any other message, and it'll find its way to us :) \n\nYou can use this to send" + " us anything you like, including bug reports and ideas! \n\n If you're on Discord, use 'ft.YourMessageHere'. \n\n" + " If you would like us to contact you back, please remember to send contact details, such as your Telegram or Discord!", new List <string> { "Return to menu" }, true)); } else if (message == "Return to menu") { return(MessageHandlerHelpers.ReturnToMainMenu(player)); } else { _reporter.UserReportMessage(message); return(ExecutionResultHelper.SingleMessage("Message recieved! Thank you!", GetOptions(player), true)); } }
public ExecutionResult HandleMessage(string message, Player player) { ExecutionResult executionResult = new ExecutionResult(); List <MessageResult> messages = new List <MessageResult>(); var activeGame = _gameStore.ListGames().FirstOrDefault(a => a.GameName == player.ActiveGameSave.GameName); var achievementList = new List <(bool hasAchieved, DrawAchievement achievement)>(); if (activeGame != null) { try { achievementList = AchievementService.HasPlayerDoneAchievements(activeGame, player); } catch (Exception) { _reporter.ReportError($"Error when finding achievements for player: {player?.Name}. Game was: {activeGame?.GameName}, player achievs: {player?.PermanentData?.Count}"); } } if (message == Messages.ShowData) { var execResult = new ExecutionResult(); execResult.MessagesToShow = new List <MessageResult> { new MessageResult { Message = "- Showing current game data -" }, new MessageResult { Message = string.Join("\n", player.ActiveGameSave.GameSaveData.Select(a => $"{a.Name}: [{a.Value}]")) } }; execResult.OptionsToShow = GetOptions(player); return(execResult); } else if (message == Messages.RefreshGames) { messages.Add(new MessageResult { Message = "Starting to look for new games at: " + DateTime.UtcNow.ToLongTimeString() }); _gameStore.ListGames(TimeSpan.FromSeconds(0)); messages.Add(new MessageResult { Message = "Finished refreshing at: " + DateTime.UtcNow.ToLongTimeString() }); } if (message == "Main Menu") { player.PlayerFlag = PlayerFlag.MAIN_MENU.ToString(); return(_mainMenuMessageHandler.HandleMessage(message, player)); } if (message == "Return to Game") { return(MessageHandlerHelpers.ReturnToGame(player, _gameStore, _textParsing, _gameProcessor)); } if (message.StartsWith(Messages.Achievements)) { var achievmentListString = achievementList.OrderBy(a => a.hasAchieved).Select(a => $"{(a.hasAchieved ? "UNLOCKED! " : "")}{a.achievement.Name} - {a.achievement.Description}").ToList(); var responseMessage = string.Join("\n\n", achievmentListString); messages.Add(new MessageResult { Message = "Achievements for game: " + activeGame.GameName }); messages.Add(new MessageResult { Message = responseMessage }); } messages.Add(new MessageResult { Message = "Returning to the main menu will reset your progress!" }); messages.Add(new MessageResult { Message = "*** MENU ***" }); executionResult.OptionsToShow = GetOptions(player); executionResult.MessagesToShow = messages; player.PlayerFlag = PlayerFlag.GAME_MENU.ToString(); return(executionResult); }
public ExecutionResult HandleMessage(string message, Player player) { if (player.PlayerFlag != PlayerFlag.LOAD_GAME.ToString()) { player.PlayerMenuContext = player.PlayerFlag.ToString(); player.PlayerFlag = PlayerFlag.LOAD_GAME.ToString(); return(ExecutionResultHelper.SingleMessage("Select a game save to load", GetOptions(player))); } else if (message == Messages.Return) { player.PlayerMenuContext2 = "0"; if (player.PlayerMenuContext == PlayerFlag.GAME_MENU.ToString()) { return(MessageHandlerHelpers.ReturnToGameMenu(player, "")); } return(MessageHandlerHelpers.ReturnToMainMenu(player)); } else if (message.StartsWith("<")) { if (int.TryParse(player.PlayerMenuContext2, out int pageNumber)) { if (pageNumber <= 0) { pageNumber = 1; } player.PlayerMenuContext2 = "" + (pageNumber - 1); } else { player.PlayerMenuContext2 = "0"; } return(ExecutionResultHelper.SingleMessage("Select a game save to load", GetOptions(player))); } else if (message.StartsWith(">")) { if (int.TryParse(player.PlayerMenuContext2, out int pageNumber)) { if (pageNumber < 0) { pageNumber = 0; } player.PlayerMenuContext2 = "" + (pageNumber + 1); } else { player.PlayerMenuContext2 = "" + player.GameSaves.Count / PageSize; } return(ExecutionResultHelper.SingleMessage("Select a game save to load", GetOptions(player))); } else { var saveIdString = message.Split(' ')[0]; if (!int.TryParse(saveIdString, out var saveId)) { return(ExecutionResultHelper.SingleMessage("Invalid save specified", GetOptions(player))); } var gameSave = _gameSaveService.GetGameSaveById(saveId, player.PlayerId)?.PlayerGameSave; if (gameSave == null) { return(ExecutionResultHelper.SingleMessage($"Save with ID {saveId} is invalid. Either it doesn't exist, or it doesn't belong to you!", GetOptions(player))); } player.PlayerMenuContext2 = "0"; player.ActiveGameSave.GameName = gameSave.GameName; player.ActiveGameSave.GameSaveData = gameSave.GameSaveData.Select(a => new PlayerGameSaveData { Name = a.Name, Value = a.Value }).ToList(); player.ActiveGameSave.StateId = gameSave.StateId; player.ActiveGameSave.FrameStack = gameSave.FrameStack.Select(a => new PlayerFrameStack { CreatedDate = a.CreatedDate, FunctionName = a.FunctionName, ReturnStateId = a.ReturnStateId, Save = player.ActiveGameSave, SaveId = player.ActiveGameSave.SaveId }).ToList(); player.PlayerFlag = PlayerFlag.IN_GAME.ToString(); var games = _gameStore.ListGames(); var playerState = player.ActiveGameSave; var gameFound = games.Where(a => a.GameName == playerState.GameName).FirstOrDefault(); var state = gameFound.FindStateById(playerState.StateId); var execResult = new ExecutionResult { MessagesToShow = new List <MessageResult> { new MessageResult { Message = _textParsing.ParseText(playerState, state.StateText) } }, OptionsToShow = _gameProcessor.GetCurrentOptions(playerState, gameFound, state) }; execResult.OptionsToShow.Add("-Menu-"); return(execResult); } }