private void MainPageInit(DialogPage page)
        {
            var player              = GetPC();
            var playerId            = GetObjectUUID(player);
            var dbPlayerTripleTriad = DB.Get <PlayerTripleTriad>(playerId);
            var model        = GetDataModel <Model>();
            var deckSelected = ColorToken.Yellow("[NO DECK SELECTED]");

            if (model.SelectedDeckId > 0)
            {
                var deck = dbPlayerTripleTriad.Decks[model.SelectedDeckId];
                deckSelected = string.IsNullOrWhiteSpace(deck.Name)
                    ? $"Deck #{model.SelectedDeckId}"
                    : deck.Name;
            }

            page.Header = "You can create or join Triple Triad games here. You can customize your decks and view your cards from the rest menu (press 'R') or by clicking 'View Cards' here.\n\n" +
                          ColorToken.Green("Deck: ") + deckSelected;

            page.AddResponse(ColorToken.Green("Refresh"), () => { });
            page.AddResponse("View Cards", () => SwitchConversation(nameof(TripleTriadPlayerDialog)));

            // Player has a game reservation. Give them the option to close it.
            if (TripleTriad.DoesPlayerHavePendingGame(player))
            {
                if (model.IsConfirming)
                {
                    page.AddResponse("CONFIRM CANCEL RESERVATION", () =>
                    {
                        model.IsConfirming = false;

                        if (TripleTriad.DoesPlayerHavePendingGame(player))
                        {
                            TripleTriad.RemovePlayerPendingGame(player);
                        }

                        FloatingTextStringOnCreature("Game reservation has been cancelled.", player, false);
                    });
                }
                else
                {
                    page.AddResponse("Cancel Game Reservation", () =>
                    {
                        model.IsConfirming = true;
                    });
                }
            }
            // Otherwise let them create a new game or join someone else's game.
            else
            {
                page.AddResponse("Select Deck", () =>
                {
                    ChangePage(SelectDeckPageId);
                });

                if (model.SelectedDeckId > 0)
                {
                    var deck = dbPlayerTripleTriad.Decks[model.SelectedDeckId];
                    page.AddResponse("Create New Game", () =>
                    {
                        TripleTriad.CreatePendingGame(player, new CardPendingGame
                        {
                            Player1Deck = deck
                        });

                        EndConversation();
                        FloatingTextStringOnCreature("Game has been created. Please wait for another player to join. Leaving the area or server will remove your game reservation.", player, false);
                    });

                    foreach (var(gameOwner, pendingGame) in TripleTriad.GetAllPendingGames())
                    {
                        page.AddResponse($"Join Game: {GetName(gameOwner)}", () =>
                        {
                            if (!TripleTriad.DoesPlayerHavePendingGame(gameOwner) || // Game no longer exists
                                !GetIsObjectValid(gameOwner) ||                      // Game owner is no longer valid
                                GetTag(GetArea(gameOwner)) == "tt_arena")            // Game owner has entered a game
                            {
                                FloatingTextStringOnCreature("This game is no longer available.", player, false);
                                return;
                            }

                            EndConversation();
                            TripleTriad.StartGame(gameOwner, pendingGame.Player1Deck, player, deck); // todo: rule config
                        });
                    }
                }
            }
        }
        public static void ClearPendingGameOnExit()
        {
            var player = GetExitingObject();

            TripleTriad.RemovePlayerPendingGame(player);
        }