Example #1
0
        public async Task LeaveRoom(CommandContext ctx)
        {
            foreach (var room in BotHandler.openRooms)
            {
                if (room.Value.players.Contains(ctx.User.Id))
                {
                    room.Value.players.Remove(ctx.User.Id);
                    BotHandler.SetUserState(ctx.User.Id, UserState.Idle);

                    await ctx.RespondAsync(new DiscordEmbedBuilder {
                        Title = "Room Left Successfully",
                        Color = DiscordColor.Green
                    }).ConfigureAwait(false);

                    return;
                }
            }

            await ctx.RespondAsync(new DiscordEmbedBuilder
            {
                Title       = "You Are Not In Any Rooms",
                Description = "You shouln't be seeing this message. This is a bug.",
                Color       = DiscordColor.Violet
            }).ConfigureAwait(false);
        }
Example #2
0
        public async Task AutomaticGame(CommandContext ctx, Room room)
        {
            //calls the Room command that starts a game / tries to start the Room
            bool successfulStart = await room.StartGame(ctx);

            if (!successfulStart)
            {
                await ctx.RespondAsync(new DiscordEmbedBuilder
                {
                    Title = "Something Went Wrong",
                    Color = DiscordColor.Red
                }).ConfigureAwait(false);

                return;
            }

            await ctx.RespondAsync(new DiscordEmbedBuilder
            {
                Title = "Game Started Successfully",
                Color = DiscordColor.Green
            }).ConfigureAwait(false);

            do
            {
                //send shops
                await room.gameHandler.SendShopsAsync(ctx).ConfigureAwait(false);

                //show pairs
                await PairsList(ctx);

                //make a msg that updates on ready
                await room.gameHandler.SendNewInteractivePlayerList(ctx);

                //wait for all players to ready
                await WaitToProceedToFights(room);

                //do end of turn
                foreach (var player in room.gameHandler.players)
                {
                    await player.Value.TriggerEndOfTurn(room.gameHandler, player.Key, room.gameHandler.pairsHandler.opponents[player.Key], ctx);
                }

                //do the fights
                await DoAllFights(ctx);

                if (room.gameHandler.AlivePlayers > 1)
                {
                    await NextRound(ctx);
                }
            } while (room.gameHandler.AlivePlayers > 1);

            ulong winner = 0;

            foreach (var player in room.gameHandler.players)
            {
                if (player.Value.lives > 0)
                {
                    winner = player.Key;
                    break;
                }
            }

            if (winner == 0)
            {
                return;
            }

            await room.gameHandler.outputChannel.SendMessageAsync(new DiscordEmbedBuilder {
                Title = $"{room.nicknames[winner]} Is The Winner!",
                Color = DiscordColor.Gold
            }).ConfigureAwait(false);

            foreach (var player in room.gameHandler.players)
            {
                BotHandler.SetUserState(player.Key, UserState.WaitingInRoom);

                if (room.hostId == player.Key)
                {
                    BotHandler.SetUserState(player.Key, UserState.HostingARoom);
                }
            }
        }