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);
        }
Exemplo n.º 4
0
 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));
     }
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
            }
        }