예제 #1
0
        /// <summary>
        /// Created a popup informing the player about the status of the previously
        /// requested purchase. If the parameter is null, the purchase has failed.
        /// </summary>
        public void PurchaseConfirmationAsyncCallback(AvatarMetadata avatarMetadata)
        {
            PopupAlertMessageBuilder.BuildPopupAlertMessage(
                avatarMetadata != null ?
                PopupAlertMessageType.AvatarPurchaseSuccessful :
                PopupAlertMessageType.AvatarPurchaseFailure, avatarMetadata);

            attributeMenu.RefreshCurrencyValues();

            EnableInterfaceElements();

            // If the player is still selecting the purchased avatar
            if (avatarMetadata != null && selectedAvatarMetadata.ID == avatarMetadata.ID)
            {
                buyButton.Disable(true);
                tryButton.Disable(true);
            }

            if (avatarMetadata == null)
            {
                return;
            }

            player.OwnedAvatar[avatarMetadata.AvatarCategory].Add(avatarMetadata.ID);
            UpdateFilter(searchFilter.AvatarCategory, searchFilter.CurrentPage);
        }
예제 #2
0
        public static PopupAlertMessage AvatarPurchaseSuccessFeedback(AvatarMetadata avatarMetadata)
        {
            List <List <SpriteText> > stMatrix;
            List <SpriteText>         titleSTList, messageSTList1, messageSTList2;

            titleSTList = new List <SpriteText>();
            titleSTList.Add(new SpriteText(FontTextType.FontAwesome11, "" + (char)Language.PopupAlertMessageAvatarPurchaseSuccessTitleIcon, Color.White, Alignment.Left, layerDepth: DepthParameter.SceneTransitioningEffectBase));
            titleSTList.Add(new SpriteText(FontTextType.Consolas11, Language.PopupAlertMessageAvatarPurchaseSuccessTitle, Color.White, Alignment.Left, layerDepth: DepthParameter.SceneTransitioningEffectBase));
            titleSTList.Add(new SpriteText(FontTextType.FontAwesome11, "" + (char)Language.PopupAlertMessageAvatarPurchaseSuccessTitleIcon, Color.White, Alignment.Left, layerDepth: DepthParameter.SceneTransitioningEffectBase));

            messageSTList1 = new List <SpriteText>();
            messageSTList1.Add(new SpriteText(FontTextType.Consolas10, Language.PopupAlertMessageAvatarPurchaseSuccessMessage11, Color.White, Alignment.Left, layerDepth: DepthParameter.SceneTransitioningEffectBase));
            messageSTList1.Add(new SpriteText(FontTextType.Consolas10, avatarMetadata.Gender + " - " + avatarMetadata.AvatarCategory + " - " + avatarMetadata.Name, Color.LightSalmon, Alignment.Left, layerDepth: DepthParameter.SceneTransitioningEffectBase));
            messageSTList1.Add(new SpriteText(FontTextType.Consolas10, Language.PopupAlertMessageAvatarPurchaseSuccessMessage12, Color.White, Alignment.Left, layerDepth: DepthParameter.SceneTransitioningEffectBase));

            messageSTList2 = new List <SpriteText>();
            messageSTList2.Add(new SpriteText(FontTextType.Consolas10, Language.PopupAlertMessageAvatarPurchaseSuccessMessage21, Color.White, Alignment.Left, layerDepth: DepthParameter.SceneTransitioningEffectBase));

            stMatrix = new List <List <SpriteText> >();
            stMatrix.Add(messageSTList1);
            stMatrix.Add(messageSTList2);

            CompositeSpriteText title, message;

            title   = CompositeSpriteText.CreateCompositeSpriteText(titleSTList, Orientation.Horizontal, Alignment.Left, default);
            message = CompositeSpriteText.CreateCompositeSpriteText(stMatrix, Alignment.Left, Vector2.Zero + new Vector2(0, 20), new Vector2(0, 0));

            PopupAlertMessage popup = new PopupAlertMessage(title, message, AlertMessageType.Accept);

            popup.OnConfirm = (x) => PopupHandler.Remove(popup);
            return(popup);
        }
예제 #3
0
 public void GoldPurchaseConfirmationAsyncCallback(object param)
 {
     lock (asyncPadlock)
     {
         AvatarMetadata avatarMetadata = (AvatarMetadata)param;
         player.Gold -= selectedAvatarMetadata.GoldPrice;
         PurchaseConfirmationAsyncCallback(avatarMetadata);
     }
 }
예제 #4
0
        public PopupBuyAvatar(AvatarMetadata avatarMetadata, Action <object> onClose, Action <object> onBuyCash, Action <object> onBuyGold) : base(false)
        {
            Background = new Sprite("Interface/Popup/Blue/Avatar/Buy", layerDepth: DepthParameter.InterfacePopupBackground);

            avatarButton = new AvatarButton(new Vector2(0, -70), avatarMetadata, (o) => { avatarButton.Disable(); avatarButton.Enable(); }, DepthParameter.InterfacePopupButtons);

            onClose += (o) => { Destroy(); };
            buttonList.Add(new Button(ButtonType.Cancel, DepthParameter.InterfacePopupMessageButtons, onClose, PositionOffset + new Vector2(95, 125)));

            spriteTextList.Add(
                new SpriteText(
                    FontTextType.Consolas10, Language.PopupTextConfirmPuchase,
                    Color.White, Alignment.Center, DepthParameter.InterfacePopupText,
예제 #5
0
        /// <summary>
        /// This action is meant for avatar inventory and shop buttons.
        /// </summary>
        private void AvatarButtonAction(object sender)
        {
            AvatarButton avatarButton = (AvatarButton)sender;

            selectedAvatarMetadata = avatarButton.AvatarMetadata;

            // If it is a inventory button
            if (searchFilter.IsRenderingInventory)
            {
                // Equip
                player.EquipAvatar(selectedAvatarMetadata.AvatarCategory, selectedAvatarMetadata.ID);

                // Update Equipped
                avatarButtonList.ForEach((x) => x.HideEquippedIndicator());
                avatarButton.ShowEquippedIndicator();

                inventoryRiderPreview.ReplaceAvatar(selectedAvatarMetadata);
                inventoryInGamePreview.ReplaceAvatar(selectedAvatarMetadata);

                tryButton.Disable(true);
                buyButton.Disable(true);

                return;
            }

            // If it isn't an inventory button
            avatarButtonList.ForEach((x) => { x.Disable(); x.Enable(); });
            avatarButton.ChangeButtonState(ButtonAnimationState.Activated, true);

            if (shopRiderPreview.GetEquippedAvatarID(selectedAvatarMetadata.AvatarCategory) != selectedAvatarMetadata.ID)
            {
                tryButton.Enable();
            }
            else
            {
                tryButton.Disable(true);
            }

            if (player.Gold >= selectedAvatarMetadata.GoldPrice ||
                player.Cash >= selectedAvatarMetadata.CashPrice)
            {
                if (!player.OwnedAvatar[selectedAvatarMetadata.AvatarCategory].Contains(selectedAvatarMetadata.ID))
                {
                    buyButton.Enable();
                }
                else
                {
                    buyButton.Disable(true);
                }
            }
        }
예제 #6
0
        public bool PurchaseAvatar(Player player, AvatarMetadata avatarMetadata, PaymentMethod paymentMethod)
        {
            try
            {
                using (OpenBoundDatabaseContext odc = new OpenBoundDatabaseContext())
                {
                    AvatarMetadata databaseAvatar = odc.AvatarMetadata
                                                    .FirstOrDefault((x) => x.ID == avatarMetadata.ID && x.AvatarCategory == avatarMetadata.AvatarCategory);//.Include();

                    if ((paymentMethod == PaymentMethod.Gold && player.Gold >= databaseAvatar.GoldPrice && databaseAvatar.GoldPrice > 0) ||
                        (paymentMethod == PaymentMethod.Cash && player.Cash >= databaseAvatar.CashPrice && databaseAvatar.CashPrice > 0) ||
                        (paymentMethod == PaymentMethod.Cash && player.Cash >= databaseAvatar.CashPrice && databaseAvatar.CashPrice > 0))
                    {
                        using (var dbContextTransaction = odc.Database.BeginTransaction())
                        {
                            Player p = odc.Players
                                       .First((x) => x.ID == player.ID);

                            odc.PlayerAvatarMetadata.Add(new PlayerAvatarMetadata(p, databaseAvatar, paymentMethod));

                            if (paymentMethod == PaymentMethod.Gold)
                            {
                                p.Gold -= databaseAvatar.GoldPrice;
                            }
                            else if (paymentMethod == PaymentMethod.Cash)
                            {
                                p.Cash -= databaseAvatar.CashPrice;
                            }
                            else if (paymentMethod == PaymentMethod.Token)
                            {
                                p.Token -= databaseAvatar.TokenPrice;
                            }

                            odc.SaveChanges();

                            dbContextTransaction.Commit();
                        }

                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Message: {ex.Message}");
            }

            return(false);
        }
예제 #7
0
 public void ReplaceAvatar(AvatarMetadata avatarMetadata)
 {
     mobile.Rider.ReplaceAvatar(avatarMetadata);
 }
예제 #8
0
 public static void AvatarShopBuyAvatarCash(AvatarMetadata avatarMetadata)
 {
     ServerInformationBroker.Instance.GameServerServiceProvider.RequestQueue.Enqueue(
         NetworkObjectParameters.GameServerAvatarShopBuyAvatarCash,
         avatarMetadata);
 }
예제 #9
0
        public AvatarButton(Vector2 position, AvatarMetadata avatarMetadata, Action <object> onClick, float layerDepth)
            : base(ButtonType.AvatarButton, layerDepth, onClick, position)
        {
            AvatarMetadata = avatarMetadata;

            spriteList     = new List <Sprite>();
            spriteTextList = new List <SpriteText>();

            thumb = new Sprite($"Graphics/Avatar/{avatarMetadata.Gender}/Portrait/{avatarMetadata.AvatarCategory}/{avatarMetadata.Name}",
                               position + new Vector2(1, 6f), layerDepth + 0.001f);
            Vector2 scaleFactor = new Vector2(87, 48) / new Vector2(thumb.SpriteWidth, thumb.SpriteHeight);
            float   newScale    = Math.Min(scaleFactor.X, scaleFactor.Y);

            thumb.Scale = new Vector2(newScale, newScale);

            spriteList.Add(thumb);

            //New Marker
            if (DateTime.Now.AddDays(Parameter.InterfaceAvatarShopAvatarButtonNewStampDay) > avatarMetadata.Date)
            {
                newMarker = new Sprite("Interface/StaticButtons/AvatarShop/AvatarButton/NewItem",
                                       position + new Vector2(40, -30), layerDepth + 0.003f);
                newMarker.Scale /= 2;

                spriteList.Add(newMarker);
            }

            //Equipped Indicator
            equippedIndicator = new Sprite("Interface/StaticButtons/AvatarShop/AvatarButton/EquipedIndicator",
                                           position + new Vector2(-47, 0), layerDepth + 0.002f);

            spriteList.Add(equippedIndicator);

            if (GameInformation.Instance.PlayerInformation.GetEquippedAvatar(avatarMetadata.AvatarCategory) != avatarMetadata.ID)
            {
                HideEquippedIndicator();
            }

            //Owned check
            if (GameInformation.Instance.PlayerInformation.OwnedAvatar[avatarMetadata.AvatarCategory].Contains(avatarMetadata.ID))
            {
                ownedCheck = new Sprite("Interface/StaticButtons/AvatarShop/AvatarButton/OwnedCheck",
                                        position + new Vector2(38, -14), layerDepth + 0.002f);
                ownedCheck.Scale /= 2;

                spriteList.Add(ownedCheck);
            }

            //Selecting button icon
            int index = GetCorrespondingIconIndex(avatarMetadata.AvatarCategory, GameInformation.Instance.PlayerInformation.Gender);

            typeIcon = new Sprite("Interface/StaticButtons/AvatarShop/AvatarButton/ButtonIcons",
                                  position + new Vector2(-32, -12), layerDepth + 0.002f,
                                  new Rectangle((index % 6) * 26, (index / 6) * 17, 26, 17));
            typeIcon.Pivot = new Vector2(13, 8.5f);

            spriteList.Add(typeIcon);

            //Texts
            string name = avatarMetadata.Name;

            if (name.Length > 13)
            {
                name = name.Substring(0, 12) + ".";
            }

            itemNameSpriteText = new SpriteText(FontTextType.Consolas10, name, Color.White, Alignment.Left, layerDepth + 0.002f, position, Color.Black);
            itemNameSpriteText.PositionOffset = position + new Vector2(-44, -36);
            spriteTextList.Add(itemNameSpriteText);

            int pricePos = 0;

            if (avatarMetadata.GoldPrice != 0)
            {
                goldSpriteText = new SpriteText(FontTextType.Consolas10, string.Format("{0:N0}", avatarMetadata.GoldPrice), Parameter.InterfaceAvatarShopButtonGoldColor, Alignment.Right, layerDepth + 0.003f, position, Parameter.InterfaceAvatarShopButtonGoldOutlineColor);
                goldSpriteText.PositionOffset = position + new Vector2(30, 20 - 10 * pricePos);
                goldIcon = new Sprite("Interface/StaticButtons/AvatarShop/AvatarButton/GoldIcon",
                                      position + new Vector2(38, 26 - 10 * pricePos++), layerDepth + 0.002f, new Rectangle(0, 0, 26, 21));
                goldIcon.Pivot  = new Vector2(13, 10.5f);
                goldIcon.Scale /= 2;

                spriteTextList.Add(goldSpriteText);
                spriteList.Add(goldIcon);
            }

            if (avatarMetadata.CashPrice != 0)
            {
                cashSpriteText = new SpriteText(FontTextType.Consolas10, string.Format("{0:N0}", avatarMetadata.CashPrice), Parameter.InterfaceAvatarShopButtonCashColor, Alignment.Right, layerDepth + 0.003f, position, Parameter.InterfaceAvatarShopButtonCashOutlineColor);
                cashSpriteText.PositionOffset = position + new Vector2(30, 20 - 10 * pricePos);
                cashIcon = new Sprite("Interface/StaticButtons/AvatarShop/AvatarButton/CashIcon",
                                      position + new Vector2(38, 26 - 10 * pricePos++), layerDepth + 0.002f, new Rectangle(0, 0, 26, 21));
                cashIcon.Pivot  = new Vector2(13, 10.5f);
                cashIcon.Scale /= 2;

                spriteTextList.Add(cashSpriteText);
                spriteList.Add(cashIcon);
            }
        }
예제 #10
0
        public void ReplaceAvatar(AvatarMetadata avatarMetadata)
        {
            Avatar avatar = new Avatar(avatarMetadata,
                                       avatarMetadata.AvatarCategory != AvatarCategory.Hat &&
                                       avatarMetadata.AvatarCategory != AvatarCategory.Body);

            Avatar previousAvatar = null;

            switch (avatarMetadata.AvatarCategory)
            {
            case AvatarCategory.Hat:
                previousAvatar = Head;
                Head           = avatar;
                break;

            case AvatarCategory.Body:
                previousAvatar = Body;
                Body           = avatar;
                break;

            case AvatarCategory.Goggles:
                previousAvatar = Goggles;
                Goggles        = avatar;
                break;

            case AvatarCategory.Flag:
                previousAvatar = Flag;
                Flag           = avatar;
                break;

            case AvatarCategory.Pet:
                previousAvatar = Pet;
                Pet            = avatar;
                break;

            case AvatarCategory.Extra:
                if (Extra == null)
                {
                    return;
                }
                previousAvatar = Extra;
                Extra          = avatar;
                break;

            case AvatarCategory.Misc:
                if (Misc == null)
                {
                    return;
                }
                previousAvatar = Misc;
                Misc           = avatar;
                break;
            }

            avatar.Position = previousAvatar.Position;

            if (avatar.Flipbook.Effect != previousAvatar.Flipbook.Effect)
            {
                avatar.Flip();
            }

            ResetCurrentAnimation();
        }