Beispiel #1
0
        public async Task Detail(int id)
        {
            var user = Context.Message.Author;

            if (!(await _userController.UserExists(user.Id)))
            {
                await RegisterUser(user);
                await ReplyAsync($"Your inventory is empty. Go catch some pokemon!");

                return;
            }

            var userData = await _userController.GetUserByDiscordId(user.Id);

            if (!userData.PokeCollection.Any(x => x.Id == id))
            {
                return;
            }

            var pokemonForReturn  = userData.PokeCollection.FirstOrDefault(x => x.Id == id);
            var pokeTypeForReturn = await _pokemonController.GetPokeType(pokemonForReturn.Type);

            var moves = await GetMovesFromIds(pokemonForReturn.MoveIds);

            var pokemon = new PokeEntity(id, pokemonForReturn, pokeTypeForReturn, moves);

            var embeddedMessage = EmbeddedMessageUtil.CreatePokemonDetailEmbed(Context.Client.CurrentUser, pokemon);
            await user.SendMessageAsync(embed : embeddedMessage);
        }
Beispiel #2
0
        public async Task SendPlayersBattleScene(PokeBattleGame game)
        {
            var playerOneScene = await EmbeddedMessageUtil.CreateBattleSceneEmbed(_discord.CurrentUser, game.PlayerOne, game.PlayerTwo, _pokemonController);

            var playerTwoScene = await EmbeddedMessageUtil.CreateBattleSceneEmbed(_discord.CurrentUser, game.PlayerTwo, game.PlayerOne, _pokemonController);

            await SendPlayerMessage(playerOneScene, game.PlayerOne.DiscordId);
            await SendPlayerMessage(playerTwoScene, game.PlayerTwo.DiscordId);
        }
Beispiel #3
0
        public async Task SendInviteToPlayer(SocketUser sender, SocketUser receiver)
        {
            if (_pendingPlayers.Contains(sender.Id))
            {
                _pendingPlayers.ToList().ForEach(x => System.Console.WriteLine(x));
                var busyMsg = @"You are currently busy right now. You can cancel your current invitation or game by typing `!cancel`. **Beware**, if you leave the middle of a game, your pokemon will lose experience.";
                await SendPlayerMessage(busyMsg, sender.Id);

                return;
            }
            else if (_pendingPlayers.Contains(receiver.Id))
            {
                var busyMsg = $"**{receiver.Username}** is currently busy at the moment. Try again later!";
                await SendPlayerMessage(busyMsg, sender.Id);

                return;
            }
            //Send the invitation:
            var message    = EmbeddedMessageUtil.CreateInvitationMessage(_discord.CurrentUser, sender, receiver);
            var invitation = await SendPlayerMessage(message, receiver.Id);

            await invitation.AddReactionAsync(new Emoji("✅"));

            await invitation.AddReactionAsync(new Emoji("❌"));

            //Create an invitation group:
            InvitationGroup invGroup = new InvitationGroup
            {
                PlayerOneId = sender.Id,
                PlayerTwoId = receiver.Id
            };

            _pendingInvitations.Add(invitation.Id, invGroup);
            _pendingPlayers.Add(sender.Id);
            _pendingPlayers.Add(receiver.Id);
        }
Beispiel #4
0
        public async Task SendLoserCard(BattlePlayer player)
        {
            var message = EmbeddedMessageUtil.CreateLosingPlayerEmbed(_discord.CurrentUser, player);

            await SendPlayerMessage(message, player.DiscordId);
        }
Beispiel #5
0
        public async Task SendPlayerAwaitingOnOther(ulong discordId)
        {
            var message = EmbeddedMessageUtil.CreateAwaitingOpponentEmbed(_discord.CurrentUser);

            await SendPlayerMessage(message, discordId);
        }
Beispiel #6
0
        public async Task SendOpponentWaitingOnPlayer(ulong discordId, PokemonForReturnDto chosenPokemon, string thumbnailUrl)
        {
            var waitingMessage = EmbeddedMessageUtil.CreateWaitingForOtherPlayerEmbed(_discord.CurrentUser, chosenPokemon, thumbnailUrl);

            await SendPlayerMessage(waitingMessage, discordId);
        }
Beispiel #7
0
        public async Task Choose(int pokemonId)
        {
            var user         = Context.Message.Author;
            var userFromRepo = await _userController.GetUserByDiscordId(user.Id);

            var battleTokenId = (await _userController.GetUserByDiscordId(user.Id)).BattleTokenId;

            if (!userFromRepo.PokeCollection.Any(x => x.Id == pokemonId))
            {
                return;
            }
            if (_gameHandler.isPlayerBusy(user.Id))
            {
                return;
            }
            if (battleTokenId == Guid.Empty)
            {
                return;
            }
            if (!_gameHandler._games.ContainsKey(battleTokenId))
            {
                return;
            }


            var game   = _gameHandler._games[battleTokenId];
            var player = game.GetPlayer(user.Id);

            var pokemon = await _pokemonController.GetPokemonFromUserInventory(pokemonId);

            var pokemonData = await _pokemonController.GetPokemonData(pokemon.PokeId);

            var pokeType = await _pokemonController.GetPokeType(pokemon.Type);

            var moves = await GetMovesFromIds(pokemon.MoveIds);

            player.InitializeCurrentPokemon(pokemon, pokeType, moves, pokemon.Id);
            System.Console.WriteLine(game.GetPlayer(user.Id).CurrentPokemon.Name + " initialized!");

            //Initialize this player's pokemon for their game
            if (game.isGameReady())
            {
                //Add these players to the "battlePlayers" set:
                _gameHandler._battlingPlayers.Add(game.PlayerOne.DiscordId);
                _gameHandler._battlingPlayers.Add(game.PlayerTwo.DiscordId);
                //Initialize the game:
                await game.InitializeAsync(battleTokenId);

                //Run the game:
                game.RunGame(-1);
                //Notify both players that the game is starting:
                var versusCard          = EmbeddedMessageUtil.CreateVersusPokemonEmbed(Context.Client.CurrentUser, game.PlayerOne, game.PlayerTwo);
                var playerOneBattleCard = await EmbeddedMessageUtil.CreateBattleSceneEmbed(Context.Client.CurrentUser, game.PlayerOne, game.PlayerTwo, _pokemonController);

                var playerTwoBattleCard = await EmbeddedMessageUtil.CreateBattleSceneEmbed(Context.Client.CurrentUser, game.PlayerTwo, game.PlayerOne, _pokemonController);

                await _gameHandler.SendPlayerMessage(versusCard, game.PlayerOne.DiscordId);

                await _gameHandler.SendPlayerMessage(versusCard, game.PlayerTwo.DiscordId);

                //Send each player battle scenes:
                await _gameHandler.SendPlayersBattleScene(game);

                //Notify the player that is going first to make a move:
                var nextPlayer = game.GetPlayerForMove();
                await _gameHandler.NotifyPlayerOfTurn(nextPlayer.DiscordId);
            }
            else
            {
                await _gameHandler.SendPlayerAwaitingOnOther(user.Id);
            }
        }