Exemple #1
0
        public VMEODGameCompDrawACardPlugin(VMEODServer server) : base(server)
        {
            // create a default deck until data is retrieved from the server
            Game = new CarducopiaDrawACardGame();

            // Initialize Mode to the unused mode of the plugin
            Mode = VMEODGameCompDrawACardModes.CopyDeck;

            // event listeners & handlers
            BinaryHandlers["DrawCard_Delete_Card"]    = DeleteCurrentCardHandler;
            BinaryHandlers["DrawCard_Edit_Frequency"] = SetCardFrequencyHandler;
            BinaryHandlers["DrawCard_Goto_Card"]      = GotoCardHandler;
            BinaryHandlers["DrawCard_Edit_Card"]      = EditCurrentCardHandler;
            BinaryHandlers["DrawCard_Add_Card"]       = PushNewCardHandler;
            BinaryHandlers["DrawCard_Edit_Game"]      = EditGameHandler;
            PlaintextHandlers["DrawCard_Close"]       = CloseHandler;

            // try to get the data from the server
            server.vm.GlobalLink.LoadPluginPersist(server.vm, server.Object.PersistID, server.PluginID, (byte[] data) =>
            {
                lock (this)
                {
                    if (data == null)
                    {
                        Data = new VMEODGameCompDrawACardData();
                        ResponseFromServer = true;
                    }
                    else
                    {
                        Data = new VMEODGameCompDrawACardData(data);
                        // make a new game based on the received data
                        Game = new CarducopiaDrawACardGame(Data);
                        // update the UI
                        ResponseFromServer = true;
                    }
                }
                if (!UIInitialized)
                {
                    switch (Mode)
                    {
                    case VMEODGameCompDrawACardModes.Manage:
                        {
                            UIInitialized = true;
                            UserClient.Send("DrawCard_Update_Deck", GetDeckListBoxData());
                            UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData());
                            UserClient.Send("DrawCard_Manage", GetGameInfoMessage());
                            break;
                        }

                    case VMEODGameCompDrawACardModes.ViewCurrent:
                        {
                            UIInitialized = true;
                            // send the card matching the last index
                            UserClient.Send("DrawCard_Drawn", GetCurrentCardData());
                            break;
                        }

                    case VMEODGameCompDrawACardModes.ViewDeck:
                        {
                            UIInitialized = true;
                            UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData());
                            UserClient.Send("DrawCard_Info", GetGameInfoMessage());
                            break;
                        }

                    case VMEODGameCompDrawACardModes.Draw:
                        {
                            UIInitialized = true;
                            // randomly draw a card
                            int index = DrawCard.Next(0, Game.UniqueCardCount);
                            Game.GotoCard(index);
                            DeckHasChanged = true;

                            // send new card text to UI
                            UserClient.Send("DrawCard_Drawn", GetCurrentCardData());
                            break;
                        }
                    }
                }
            });
        }
Exemple #2
0
        /*
         * When the client connects, the value of temp0 found in TempRegisters[0] determines which interaction is being executed on the object
         * Only the item's owner should be able to "Manage Deck"; where TempRegisters[0] == 0
         * @param:client — the VMEODClient sending the connect event
         */
        public override void OnConnection(VMEODClient client)
        {
            base.OnConnection(client);
            UserClient = client;

            // find what the user wants to do based on the value of temp0
            var args = UserClient.Invoker.Thread.TempRegisters;

            /* "Manage Deck" */
            if (args[0] == (short)VMEODGameCompDrawACardModes.Manage)
            {
                Mode = VMEODGameCompDrawACardModes.Manage;
                if (ResponseFromServer)
                {
                    UIInitialized = true;
                    UserClient.Send("DrawCard_Update_Deck", GetDeckListBoxData());
                    UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData());
                    UserClient.Send("DrawCard_Manage", GetGameInfoMessage());
                }
                else
                {
                    UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode });
                }
            }

            /* "View Current Card" */
            else if (args[0] == (short)VMEODGameCompDrawACardModes.ViewCurrent)
            {
                Mode = VMEODGameCompDrawACardModes.ViewCurrent;
                if (ResponseFromServer)
                {
                    UIInitialized = true;
                    // send the card matching the last index
                    UserClient.Send("DrawCard_Drawn", GetCurrentCardData());
                }
                else
                {
                    UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode });
                }
            }

            /* "View Deck Info" */
            else if (args[0] == (short)VMEODGameCompDrawACardModes.ViewDeck)
            {
                Mode = VMEODGameCompDrawACardModes.ViewDeck;
                if (ResponseFromServer)
                {
                    UIInitialized = true;
                    UserClient.Send("DrawCard_Update_Deck_Numbers", GetCardNumberData());
                    UserClient.Send("DrawCard_Info", GetGameInfoMessage());
                }
                else
                {
                    UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode });
                }
            }

            /* "Draw a Card" */
            else //if (args[0] == (short)VMEODGameCompDrawACardModes.Draw)
            {
                Mode = VMEODGameCompDrawACardModes.Draw;
                if (ResponseFromServer)
                {
                    UIInitialized = true;
                    // randomly draw a card
                    int index = DrawCard.Next(0, Game.UniqueCardCount);
                    Game.GotoCard(index);
                    DeckHasChanged = true;

                    // send new card text to UI
                    UserClient.Send("DrawCard_Drawn", GetCurrentCardData());
                }
                else
                {
                    UserClient.Send("DrawCard_Please_Wait", new byte[] { (byte)Mode });
                }
            }
        }