예제 #1
0
        /// <summary>
        /// If the player isn't being held by entities asks him where would he like to go.
        /// </summary>
        /// <param name="chatId">The player's id</param>
        /// <returns></returns>
        public static async void AskForAction(long chatId, bool sendField = true)
        {
            Player curPlayer = GameCore.GetActivePlayer(chatId);

            if (curPlayer != null)
            {
                List <KeyboardButton[]> buttons;
                if (sendField)
                {
                    await SendCurrentFieldPicture(curPlayer);
                }
                if (GameCore.GetPlayerInDialogue(chatId) == null) // if the player didn't start a conversation
                {
                    buttons = new List <KeyboardButton[]>()
                    {
                        new KeyboardButton[] { MarkerUpLeft, MarkerUp, MarkerUpRight },
                        new KeyboardButton[] { MarkerLeft, MarkerChangeMode + curPlayer.Mode.ToString(),
                                               MarkerRight },
                        new KeyboardButton[] { MarkerDownLeft, MarkerDown, MarkerDownRight }
                    };
                }
                else
                {
                    buttons = new List <KeyboardButton[]>()
                    {
                        new KeyboardButton[] { MarkerAskDirection, MarkerAskAround },
                        new KeyboardButton[] { MarkerTrade, MarkerBack }
                    };
                }
                ReplyKeyboardMarkup replyKeyboard = new ReplyKeyboardMarkup(buttons);
                await CheckAndSendAsync(chatId, "Choose the next action: ",
                                        replyKeyboard);
            }
        }
예제 #2
0
        private static async Task HandleInGameCommands(string cmd, Player curPlayer)
        {
            var chatId = curPlayer.Id;

            //a separate part for performing dialogues
            if (GameCore.GetPlayerInDialogue(chatId) != null)
            {
                switch (cmd)
                {
                default:
                    break;

                case MarkerAskDirection:
                    CharacterAnswer(curPlayer, AnswerModes.DirectionAnswer);
                    break;

                case MarkerAskAround:
                    break;

                case MarkerTrade:
                    break;

                case MarkerBack:
                    GameCore.RemovePlayerInDialogue(chatId);
                    curPlayer.AskedDirection     = false;
                    curPlayer.AskedNeighbourhood = false;
                    AskForAction(chatId);
                    break;
                }
            }
            else
            {
                switch (cmd)
                {
                default:
                    break;

                case MarkerLoadGame:     //if the user wants to load his last saved game
                    GameCore.UpdatePlayerTimestamp(curPlayer);
                    AskForAction(chatId);
                    break;

                case MarkerUp:
                    curPlayer.DirectAction(0, -1);
                    break;

                case MarkerUpRight:
                    curPlayer.DirectAction(1, -1);
                    break;

                case MarkerRight:
                    curPlayer.DirectAction(1, 0);
                    break;

                case MarkerDownRight:
                    curPlayer.DirectAction(1, 1);
                    break;

                case MarkerDown:
                    curPlayer.DirectAction(0, 1);
                    break;

                case MarkerDownLeft:
                    curPlayer.DirectAction(-1, 1);
                    break;

                case MarkerLeft:
                    curPlayer.DirectAction(-1, 0);
                    break;

                case MarkerUpLeft:
                    curPlayer.DirectAction(-1, -1);
                    break;
                }
                if (cmd == MarkerChangeMode + curPlayer.Mode.ToString())
                {
                    curPlayer.Mode = (PlayerModes)Math.Abs((int)curPlayer.Mode - 1); //since there are only 2 modes
                                                                                     //available, we can change them
                                                                                     //with this magic
                    await CheckAndSendAsync(curPlayer.Id, $"I will {curPlayer.Mode} now");

                    AskForAction(curPlayer.Id, false);
                }
            }
        }