;// bundle: page___cacf890f63916a4824878aeb929087da_m ;// files: ~/Generated/js/Roblox_TranslationResources_Purchasing_PurchaseDialogResources_en_us_standard.js, ~/Generated/js/Roblox_TranslationResources_Feature_PrivateServersResources_en_us_standard.js, ~/Generated/js/Roblox_TranslationResources_Feature_ItemResources_en_us_standard.js, Tracking/FormEvents.js, Game/Index.js, pageStyleNotifications.js, ItemPurchaseForDialog/ItemPurchaseForDialog.js, modules/Widgets/ItemImage.js, jquery/jquery.history.js, utilities/robloxTabs.js, utilities/dialog.js, Games/GameDetailReferral.js, Game/GameDetailsInteractionEvents.js, PrivateServers/LinkJoin.js, jquery/lazyLoadImage/jquery.lazyload.js, jquery/lazyLoadImage/lazyLoadImg.js, NumberFormatting.js, ~/Generated/js/Roblox_TranslationResources_Feature_VotingPanelResources_en_us_standard.js, RobloxBadges.js, Game/GameFavoriteButton.js, ~/Generated/js/Roblox_TranslationResources_Feature_FavoritesResources_en_us_standard.js, Game/GamePassLazyLoading.js, GenericModal.js, GenericConfirmation.js, common/deviceMeta.js ;// ~/Generated/js/Roblox_TranslationResources_Purchasing_PurchaseDialogResources_en_us_standard.js var Roblox=Roblox||{};Roblox.Lang=Roblox.Lang||{};Roblox.Lang['Purchasing.PurchaseDialog']={"Action.BackToShop":"Back to Shop","Action.Buy":"Buy","Action.BuyAccess":"Buy Access","Action.BuyNow":"Buy Now","Action.BuyRobux":"Buy Robux","Action.BuyRobuxAndItem":"Buy Robux and Item","Action.Cancel":"Cancel","Action.Configure":"Configure","Action.Continue":"Continue","Action.Customize":"Customize","Action.Done":"Done","Action.EquipMyAvatar":"Equip My Avatar","Action.Get":"Get","Action.GetNow":"Get Now","Action.GoToRobuxStore":"Go to Robux Store","Action.GoToSecurity":"Go To Security","Action.GoToSettings":"Go to Settings","Action.NotNow":"Not Now","Action.Ok":"OK","Action.RentNow":"Rent Now","Action.ResendCode":"Resend Code","Action.Subscribe":"Subscribe","Action.Verify":"Verify","Heading.BuyItem":"Buy Item","Heading.BuyItems":"Buy Items","Heading.ErrorOccured":"Error Occured","Heading.FloodcheckFailure":"Purchase failed, too many requests, please try again in {throttleTime} minutes","Heading.GeneralError":"Something went wrong, please refresh and try again later","Heading.GetItem":"Get Item","Heading.InsufficientFunds":"Insufficient Funds","Heading.InsufficientFundsFailure":"Purchase failed, insufficient funds","Heading.InsufficientRobux":"Insufficient Robux","Heading.ItemsOwnedFailure":"Purchase failed, item(s) already owned","Heading.NetworkErrorFailure":"Purchase failed, network error, please try again later","Heading.NoSellersFailure":"Purchase failed, no sellers","Heading.PartialSuccessFloodcheckFailure":"{itemCountSuccess} item(s) has/have been purchased, {itemCountFailure} item(s) failed due to too many requests","Heading.PartialSuccessGeneralFailure":"{itemCountSuccess} item(s) has/have been purchased, {itemCountFailure} item(s) failed","Heading.PartialSuccessInsufficientFundsFailure":"{itemCountSuccess} item(s) has/have been purchased, {itemCountFailure} item(s) failed due to insufficient funds","Heading.PartialSuccessItemsOwnedFailure":"{itemCountSuccess} item(s) has/have been purchased, {itemCountFailure} item(s) you already own","Heading.PartialSuccessNetworkErrorFailure":"{itemCountSuccess} item(s) has/have been purchased, {itemCountFailure} item(s) failed due to network error","Heading.PartialSuccessNoSellersFailure":"{itemCountSuccess} has/have been purchased,{itemCountFailure} failed due to no sellers","Heading.PartialSuccessPremiumNeededFailure":"{itemCountSuccess} has/have been purchased, {itemCountFailure} failed due to premium account needed","Heading.PremiumNeededFailure":"Purchase failed, premium account needed","Heading.PriceChanged":"Item Price Has Changed","Heading.PurchaseComplete":"Purchase Complete","Heading.PurchaseCompleted":"Purchase Completed","Heading.PurchaseFailure":"Purchase failed, please try again later","Heading.PurchaseSucceeded":"Purchase Succeeded","Heading.QuantityLimitReached":"Unable to Buy at Original Price","Heading.RentItem":"Rent Item","Heading.TwoStepVerificationRequired":"Email Verification Required","Heading.TwoStepVerificationRequiredV2":"Email Verification Required","Heading.TwoStepVerificationRequiredV3":"2-Step Verification Required","Label.AgreeAndPay":"Agree and Pay","Label.CodeInputPlaceholder":"Enter 6-digit Code","Label.EnterEmailCode":"Enter the code we just sent you via email","Label.Free":"Free","Label.NeedHelpContactRobloxSupport":"Need help? Contact Roblox Support","Label.NeedHelpContactSupport":"Need help? Contact {supportLink}","Label.PlusNumber":"+{numberCount}","Label.PurchasingTheItem":"Purchasing the item...","Label.RobloxSupport":"Roblox Support","Label.TwoStepVerification":"2-Step Verification","Label.WaitingForRobux":"Waiting for Robux to be granted...","Message.BalanceAfter":"Your balance after this transaction will be {robuxBalance}.","Message.InsufficientFunds":"You need {robux} more to purchase this item.","Message.InsufficientRobux":"{divTagStart}You need an additional {robuxNeeded}. Would you like to buy a {robuxPackageAmount} package?{divTagEnd}{lineBreak}{divTagStart}Your payment method will be charged. Roblox {aTagStart}Terms of Use{aTagEnd} apply.{divTagEnd}","Message.InsufficientRobuxExceedLargestPackage":"{divTagStart}You need an additional {robuxNeeded}. Please purchase more Robux Packages, then come back to the shop.{divTagEnd}","Message.ItemGrantDelay":"There may be a delay before you see the item in your inventory.","Message.PriceChanged":"While you were shopping, the price of this item changed from {robuxBefore} to {robuxAfter}.","Message.PromptBatchBuy":"Would you like to buy these {itemCount} items for {robux}?","Message.PromptBuy":"Would you like to buy the {assetType} \"{assetName}\" from {seller} for {robux}?","Message.PromptBuyAccess":"Would you like to buy access to the {assetType} \"{assetName}\" from {seller} for {robux}?","Message.PromptGetFree":"Would you like to get the {assetType} \"{assetName}\" from {seller} for {freeTextStart}Free{freeTextEnd}?","Message.PromptGetFreeAccess":"Would you like to get access to the {assetType} \"{assetName}\" from {seller} for {freeTextStart}Free{freeTextEnd}?","Message.PromptRent":"Would you like to rent the {assetType} \"{assetName}\" from {seller} for {robux}?","Message.PromptRentAccess":"Would you like to rent access to the {assetType} \"{assetName}\" from {seller} for {robux}?","Message.PurchaseErrorOccured":"An error occurred with your purchase. Please try again later.","Message.PurchaseSucceeded":"Now you own {assetName}!","Message.PurchaseSucceededRobuxBalance":"Your balance is now {userRobuxBalance}.","Message.PurchaseSucceededToBalance":"{robuxLeft} has been credited to your balance.","Message.PurchasingUnavailable":"Purchasing is temporarily unavailable. Please try again later.","Message.QuantityLimitReached":"Whoops! The creator has limits on how many copies a single user can purchase from them.","Message.RemainingBalance":"Your balance after this transaction will be {remainingBalance}","Message.SuccessfullyAcquired":"You have successfully acquired the {assetName} {assetType} from {seller} for {robux}.","Message.SuccessfullyAcquiredAccess":"You have successfully acquired access to the {assetName} {assetType} from {seller} for {robux}.","Message.SuccessfullyBought":"You have successfully bought the {assetName} {assetType} from {seller} for {robux}.","Message.SuccessfullyBoughtAccess":"You have successfully bought access to the {assetName} {assetType} from {seller} for {robux}.","Message.SuccessfullyRenewed":"You have successfully renewed the {assetName} {assetType} from {seller} for {robux}.","Message.SuccessfullyRenewedAccess":"You have successfully renewed access to the {assetName} {assetType} from {seller} for {robux}.","Message.SuccessfullyRented":"You have successfully rented the {assetName} {assetType} from {seller} for {robux}.","Message.SuccessfullyRentedAccess":"You have successfully rented access to the {assetName} {assetType} from {seller} for {robux}.","Message.TwoStepVerificationBatchPurchase":"You reached the daily purchase limit. Complete 2-Step Verification to continue purchase.","Message.TwoStepVerificationRequired":"2-Step Verification is required to make further transactions. Go to Settings > Security to complete 2-Step Verification.","Message.TwoStepVerificationRequiredv2":"2-Step Verification is required to make further transactions. Go to your Security page to enable and complete 2-Step Verification via email.","Message.TwoStepVerificationRequiredV3":"2-Step Verification is required to make further transactions. Go to your Security page to enable and complete 2-Step Verification via email.","Message.TwoStepVerificationRequiredV4":"2-Step Verification is required to make further transactions. Go to your Security page to enable and complete 2-Step Verification.","Response.CodeSent":"Code Sent","Response.InvalidCode":"Invalid code. Please try again.","Response.InvalidCodeTryAgain":"Invalid code. Please try again.","Response.SuccessfulVerification":"You have successfully verified!","Response.SuccessfulVerificationV2":"You have successfully verified! Please retry your previous action.","Response.VerificationError":"System error occurred during verification."};Roblox.Lang['PurchaseDialogResources']=Roblox.Lang['Purchasing.PurchaseDialog']; ;// ~/Generated/js/Roblox_TranslationResources_Feature_PrivateServersResources_en_us_standard.js var Roblox=Roblox||{};Roblox.Lang=Roblox.Lang||{};Roblox.Lang['Feature.PrivateServers']={"Action.CancelPrivateServer":"Cancel Private Server","Action.ConfirmCancel":"Yes, cancel","Action.CreatePrivateServer":"Create Private Server","Action.CreateVipServer":"Create VIP Server","Action.DoNotCancel":"Don't Cancel","Action.Refresh":"Refresh","Description.RecurringSubscriptionRenewal":"This is a subscription-based feature. It will auto-renew once a month until you cancel the subscription.","Heading.ConfigurePrivateServer":"Configure Private Server","Heading.InvalidLink":"Invalid Link","Heading.PrivateServers":"Private Servers","Heading.VipServers":"VIP Servers","Label.Cancel":"Cancel","Label.ConfirmEnableFuturePayments":"Are you sure you want to enable future payments for your private version of {placeName} by {creatorName}?","Label.CreatePrivateServerFor":"Create a private server for {target}?","Label.CreatePrivateServerForFree":"Create a private server for free?","Label.CreateVipServerFor":"Create a VIP Server for {target}?","Label.FooterText":"Your balance after this transaction will be {robuxIcon}. This is a subscription-based feature. It will auto-renew once a month until you cancel the subscription.","Label.GameJoinPrivateErrorTitle":"Unable to join","Label.GameName":"Experience Name","Label.NoPrivateServers":"No Private Server Instances Found.","Label.NoVipServers":"No VIP Server Instances Found.","Label.PerMonth":"/month","Label.PlayWithOthers":"Visit this experience with friends and other people you invite.","Label.Price":"Price: {price}","Label.PrivateServer":"Private Server","Label.PrivateServerJoinGamePrivateError":"You cannot join this private server because the experience is private.","Label.PrivateServersAbout":"Private servers let you visit this experience privately with friends or people you invite!","Label.Renew":"Renew","Label.RenewPrivateServer":"Renew Private Server","Label.RenewsMonthlyCancelAnytime":"Renews monthly. Cancel anytime.","Label.SeeAllPrivateServers":"See all your private servers in the {serversLink} tab.","Label.SeeAllServers":"See all your VIP servers in the {serversLink} tab.","Label.ServerName":"Server Name:","Label.Servers":"Servers","Label.StartRenewingPrice":"This VIP server will start renewing every month at {price} until you cancel.","Label.StartRenewingPrivateServerPrice":"This private server will start renewing every month at {price} until you cancel.","Label.VIPServerGameJoinErrorAcknowledgement":"OK","Label.VipServerJoinGamePrivateError":"You cannot join this VIP server because the game is private.","Label.VipServersAbout":"VIP servers let you play this game privately with friends, your clan, or people you invite!","Label.VipServersNotSupported":"This experience does not support {vipServersLink}.","Message.CancelServerConfirmation":"If you cancel your private server subscription now, you can still access it until {date}.","Message.InvalidLink":"This VIP Server link is no longer valid.","Message.InvalidPrivateServerLink":"This private server link is no longer valid.","Message.ServerCancellationSuccess":"Server renewal successfully canceled"};Roblox.Lang['PrivateServersResources']=Roblox.Lang['Feature.PrivateServers']; ;// ~/Generated/js/Roblox_TranslationResources_Feature_ItemResources_en_us_standard.js var Roblox=Roblox||{};Roblox.Lang=Roblox.Lang||{};Roblox.Lang['Feature.Item']={"Action.Add":"Add","Action.AddToGame":"Add To Experience","Action.AddToProfile":"Add to Profile","Action.Advertise":"Advertise","Action.Agree":"Agree","Action.Buy":"Buy","Action.Cancel":"Cancel","Action.Configure":"Configure","Action.Confirm":"Confirm","Action.Delete":"Delete from Inventory","Action.DisableBadge":"Disable Badge","Action.EditAvatar":"Edit Avatar","Action.EnableBadge":"Enable Badge","Action.Get":"Get","Action.GetPremium":"Get Premium","Action.Install":"Install","Action.Inventory":"Inventory","Action.No":"No","Action.Ok":"OK","Action.Remove":"Remove","Action.RemoveFromProfile":"Remove from Profile","Action.Rent":"Rent","Action.ReportItem":"Report Item","Action.Sell":"Sell","Action.SellNow":"Sell Now","Action.SponsorItem":"Sponsor This Item","Action.TakeOff":"Take Off","Action.TakeOffSale":"Take Off Sale","Action.TryInStudio":"Try in Studio","Action.TryOn":"Try On","Action.Upgrade":"Upgrade","Action.Wear":"Wear","Action.Yes":"Yes","Heading.IncludedItems":"Included Items","Heading.PromoteItem":"Promote Item","Label.AllowPlayersPlusEarn":"Allow visitors to use this gear inside your experience plus earn {affiliateSaleTotal} when it's purchased from your experience page.","Label.AssetGrantedModalAcceptText":"OK","Label.AssetGrantedModalMessage":"You just got this item courtesy of our sponsor.","Label.AssetGrantedModalTitle":"This item is now yours","Label.Attributes":"Attributes","Label.BestPrice":"Best Price","Label.BuildersClubExclusive":"Builders Club exclusive.","Label.By":"By {creator}","Label.CountdownTimerDayHourMinute":"Offsale in {numberOfDays} d {numberOfHours} h {numberOfMinutes} m","Label.DeleteFromInventoryConfirm":"Are you sure you want to permanently DELETE this item from your inventory?","Label.DeleteItem":"Delete Item","Label.Description":"Description","Label.DisableBadgeConfirm":"Are you sure you want to disable this Badge?","Label.DiscontinuedItem":"Discontinued item, resellable.","Label.EarnBadgeGameLink":"Earn this Badge in: {placeLink}","Label.EnableBadgeConfirm":"Are you sure you want to enable this Badge?","Label.ErrorOccurred":"Error occurred","Label.Free":"Free","Label.Genres":"Genres","Label.GetBuildersClub":"Only Builders Club members can re-sell collectible items. Get Builders Club today!","Label.GetPremiumMembership":"Only Premium members can re-sell collectible items. Get Premium today!","Label.GetPremiumSubscription":"Only Premium subscribers can re-sell collectible items. Get Premium today!","Label.In":"in {experienceName}","Label.InvalidPlace":"Invalid Place.","Label.InvalidProduct":"Invalid Product.","Label.ItemOwned":"Item Owned","Label.ItemOwnedAmount":"Item Owned ({amount})","Label.ItemRecentPrice":"{name}'s recent average price is {price}.","Label.Made.In":"Made in","Label.MadeInExperienceName":"Made In {experienceName}","Label.MarketplaceFee":"Marketplace fee (at {percent}%)","Label.None":"None","Label.NotAvailable":"N/A","Label.OffsaleCountdownHourMinuteSecond":"Offsale in {numberOfHours} h {numberOfMinutes} m {numberOfSeconds} s","Label.PremiumDiscountOpportunityPrompt":"Get Premium and buy for {premiumDiscountedPrice}","Label.PremiumDiscountSavings":"You save {discountPercentage}% with Premium (original price: {originalPrice})","Label.PremiumExclusiveEligiblePrompt":"Available because you have Premium","Label.PremiumExclusiveIneligiblePrompt":"Available for Premium users only","Label.Price":"Price","Label.PriceIsInvalid":"Price is invalid","Label.PriceMinimumOne":"Price (minimum 1)","Label.PurchaseCompleted":"Purchase Completed","Label.Rarity":"Rarity","Label.ReadMore":"Read More","Label.RentingItem":"Renting Item","Label.ReportFailure":"Your report couldn't be submitted. Please try again later.","Label.ReportSuccess":"Report submitted and will be reviewed by our team shortly.","Label.Rthro":"Rthro","Label.SellConfirm":"Are you sure you want to sell {name} for {price}?","Label.SellYourCollectibleItem":"Sell Your Collectible Item","Label.SerializedLimitedRelease":"Serialized limited release, resellable.","Label.SerialNotAvailable":"Serial N/A","Label.SerialNumber":"Serial Number","Label.SerialNumberOfTotal":"Serial #{number} of {total}","Label.ShowLess":"Show Less","Label.Tags":"Tags","Label.TakeOffSale":"Take off Sale","Label.TakeOffSaleConfirm":"Are you sure you want to take the item off sale?","Label.ThirteenPlusOnly":"13+ Only.","Label.Type":"Type","Label.Updated":"Updated","Label.UpdatedBy":"(by {link})","Label.UseGamePassLink":"Use this Pass in: {placeLink}","Label.YouGet":"You get","Response.AddedToProfile":"Added to your profile","Response.AddedToYourAvater":"Added to your Avatar","Response.AlreadyHaveMaxItems":"You already have the maximum number of items on your experience!","Response.DisabledBadge":"Successfully disabled the badge","Response.EnabledBadge":"Successfully enabled the badge","Response.FailedToAddToProfile":"Failed to add to profile","Response.FailedToDeleteFromInventory":"Failed to delete item from inventory","Response.FailedToDisableBadge":"Failed to disable badge","Response.FailedToEnableBadge":"Failed to enable badge","Response.FailedToRemoveFromProfile":"Failed to remove from profile","Response.GearAddSuccess":"Added to your experience, {placeName}.","Response.GearAlreadyAdded":"You have already added this gear to {placeName}.","Response.RemovedFromInventory":"Successfully removed from your inventory","Response.RemovedFromProfile":"Removed from your profile","Response.RemovedFromYourAvater":"Removed from your Avatar"};Roblox.Lang['ItemResources']=Roblox.Lang['Feature.Item']; ;// Tracking/FormEvents.js if(typeof(Roblox)==='undefined'){Roblox={};} if(typeof(Roblox.FormEvents)==='undefined'){Roblox.FormEvents=function(){function sendEvent(eventName,context,properties){if(!Roblox.EventStream){return;} Roblox.EventStream.SendEvent(eventName,context,properties);} function sendValidationFailed(context,field,input,msg){var properties={msg:msg,input:input,field:field,vis:true};sendEvent("formValidation",context,properties);} function sendInteractionFocus(context,field){var properties={aType:"focus",field:field};sendEvent("formInteraction",context,properties);} function sendInteractionOffFocus(context,field,input){var properties={aType:'offFocus',field:field};if(input){properties.input=input;} sendEvent("formInteraction",context,properties);} function sendInteractionClick(context,field,input,additionalParams){var properties={aType:"click",field:field} if(input){properties.input=input;} if(additionalParams){properties=$.extend(properties,additionalParams);} sendEvent("formInteraction",context,properties);} var my={SendValidationFailed:sendValidationFailed,SendInteractionFocus:sendInteractionFocus,SendInteractionOffFocus:sendInteractionOffFocus,SendInteractionClick:sendInteractionClick};return my;}();} ;// Game/Index.js $(function(){if($('.game-play-buttons').data("autoplay")==true){$('#MultiplayerVisitButton').trigger("click");} $(".VisitButtonPlay a").on('click',function(){var elm=$(this);var backup=elm.attr('backup-url');if(backup&&backup.length>0){setTimeout(function(){if(document.hasFocus&&document.hasFocus()){window.location=backup;}},250);}});}); ;// pageStyleNotifications.js $(function(){$(".pagification .pagification-showall, .pagification .pagification-collapse").click(function(){$(this).parents(".pagification-body").toggleClass("collapsed");});}); ;// ItemPurchaseForDialog/ItemPurchaseForDialog.js var Roblox=Roblox||{};Roblox.ItemPurchase=function(purchaseConfirmationCallback,purchaseCallback,shouldShowFeedbackBanner){if(!(this instanceof Roblox.ItemPurchase)){return new Roblox.ItemPurchase(purchaseConfirmationCallback,purchaseCallback,shouldShowFeedbackBanner);} purchaseCallback=(typeof purchaseCallback==='undefined')?false:purchaseCallback;var intl=new Roblox.Intl();var langKeys=Roblox.Lang.PurchaseDialogResources;var itemPurchaseAjaxData=$("#ItemPurchaseAjaxData");var authenticatedUserIsNull=itemPurchaseAjaxData.attr('data-authenticateduser-isnull');var userBalanceRobux=itemPurchaseAjaxData.attr('data-user-balance-robux');var userBC=itemPurchaseAjaxData.attr('data-user-bc');var alertImageUrl=itemPurchaseAjaxData.attr('data-alerturl');var inSufficentFundsurl=itemPurchaseAjaxData.attr('data-inSufficentFundsurl');var isBcOnlyRequirementEnabled=(itemPurchaseAjaxData.attr('data-is-bc-only-requirement-enabled'));var isPlace=false;var hasCurrencyOperationError=(itemPurchaseAjaxData.attr("data-has-currency-service-error")==="True");var currencyOperationErrorMessage=itemPurchaseAjaxData.attr("data-currency-service-error-message");var isModalFooterCenteredEnabled=(itemPurchaseAjaxData.attr("data-is-modal-footer-centered-enabled")==="True");var robloxName="Roblox";var purchaseTypes={buy:"buy",rent:"rent",get:"get"} var twoStepVerificationFlow=new Roblox.TwoStepVerificationFlow("RobuxSpend");var paymentFlowAnalyticsService=CoreRobloxUtilities.paymentFlowAnalyticsService;function addCommasToMoney(nStr){nStr+='';var x=nStr.split('.');var x1=x[0];var x2=x.length>1?'.'+x[1]:'';var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1=x1.replace(rgx,'$1'+','+'$2');} return x1+x2;} function formatMoney(money){if(money<1) return money+"";if(money<10000) return addCommasToMoney(money);if(money>=1000000) {return Math.floor(money/1000000)+"M+";} else{return Math.floor(money/1000)+"K+";}} function redirectToLogin(){window.location.href=Roblox.Endpoints.getAbsoluteUrl("/login/Default.aspx")+"?ReturnUrl="+encodeURIComponent(location.pathname+location.search);} function formatSellerName(name){if(name.toLowerCase()===robloxName.toLowerCase()){return robloxName;} return name;} function getAssetAcquiredAnalyticsVariables(itemId){if(!Roblox){return null} var userId=Roblox.CurrentUser?Roblox.CurrentUser.userId:null;var urlParametersObject=Roblox.UrlParser.getParametersAsObject();return{assetId:itemId,category:urlParametersObject["Category"],creatorId:urlParametersObject["CreatorId"],genre:urlParametersObject["GenreCsv"],page:urlParametersObject["Page"],position:urlParametersObject["Position"],searchKeyword:urlParametersObject["SearchKeyword"],sortAggregation:urlParametersObject["SortAggregation"],sortType:urlParametersObject["SortType"],userId:userId,searchId:urlParametersObject["SearchId"],}} function purchaseItem(elem,CssClass){var target=$(elem);if(target.attr('data-modal-field-validation-required')==='true'){CssClass="";} Roblox.Dialog.toggleProcessing(true);if(target.hasClass('btn-disabled-primary')) return;var productID=target.attr('data-product-id');var expPrice=parseInt(target.attr('data-expected-price'));var expCurrency=target.attr('data-expected-currency');var expPromoId=target.attr('data-placeproductpromotion-id');var expSellerId=target.attr('data-expected-seller-id');var userAssetID=target.attr('data-userasset-id');var context=Roblox.MetaDataValues&&Roblox.MetaDataValues.getPageName()||"";var isLibrary=context=="LibraryItem";var gamePassesServiceUrl=Roblox.EnvironmentUrls.apiGatewayUrl+"/game-passes/v1/game-passes/{productID}/purchase".replace('{productID}',productID);if(purchaseCallback){return purchaseCallback({productId:productID,expectedPrice:expPrice,expectedCurrency:expCurrency,expectedPromoId:expPromoId,expectedSellerId:expSellerId,userAssetId:userAssetID});} var params={"expectedCurrency":parseInt(expCurrency),"expectedPrice":parseInt(expPrice),"expectedSellerId":parseInt(expSellerId)};if(expPromoId){params.expectedPromoId=parseInt(expPromoId);} if(userAssetID){params.userAssetId=parseInt(userAssetID);} var purchaseWithUrl=function(urlString){$.ajax({type:"POST",url:urlString,data:JSON.stringify(params),cache:false,processData:false,contentType:"application/json; charset=utf-8",success:function(msg){if(msg.statusCode===500){Roblox.Dialog.toggleProcessing(false,CssClass);if(msg.showDivID===undefined){msg.showDivID=msg.showDivId;} if(msg.AssetID===undefined){msg.AssetID=msg.assetId;} openErrorView(msg);}else{Roblox.Dialog.toggleProcessing(false,CssClass);if(isLibrary&&Roblox&&Roblox.EventStream&&Roblox.UrlParser){var obj=getAssetAcquiredAnalyticsVariables(msg.assetId);Roblox.EventStream.SendEventWithTarget("LibraryAssetAcquired","Marketplace",obj,Roblox.EventStream.TargetTypes.WWW);} if(shouldShowFeedbackBanner){showSuccessBanner();}else{msg={AssetId:msg.assetId,AssetIsWearable:msg.assetIsWearable,AssetName:msg.assetName,AssetType:msg.assetType,AssetTypeDisplayName:msg.assetTypeDisplayName,Currency:msg.currency,IsMultiPrivateSale:msg.isMultiPrivateSale,Price:msg.price,ProductId:msg.productId,Purchased:msg.purchased,Reason:msg.reason,SellerName:msg.sellerName,TransactionVerb:msg.transactionVerb,} openPurchaseConfirmationView(msg);}}},error:function(msg){Roblox.Dialog.toggleProcessing(false,CssClass);$.modal.close(".ProcessingView");if(msg.responseText==="Bad Request"){Roblox.Dialog.open({titleText:langKeys["Heading.ErrorOccured"],bodyContent:langKeys["Message.PurchasingUnavailable"],imageUrl:alertImageUrl,acceptText:langKeys["Action.Ok"],acceptColor:Roblox.Dialog.white,declineColor:Roblox.Dialog.none,dismissable:true,allowHtmlContentInBody:true});}else{var errorObj=$.parseJSON(msg.responseText);openErrorView(errorObj);}}});};purchaseWithUrl(gamePassesServiceUrl);} function startPaymentFlowAndSendModalEvent(targetData){if(paymentFlowAnalyticsService&&targetData){paymentFlowAnalyticsService.startRobuxUpsellFlow(targetData.assetType,!!targetData.userassetId,false,false);paymentFlowAnalyticsService.sendUserPurchaseFlowEvent(paymentFlowAnalyticsService.ENUM_TRIGGERING_CONTEXT.WEB_CATALOG_ROBUX_UPSELL,true,paymentFlowAnalyticsService.ENUM_VIEW_NAME.ROBUX_UPSELL,paymentFlowAnalyticsService.ENUM_PURCHASE_EVENT_TYPE.VIEW_SHOWN);}} function onInsufficientFundsViewCancel(){if(paymentFlowAnalyticsService){paymentFlowAnalyticsService.sendUserPurchaseFlowEvent(paymentFlowAnalyticsService.ENUM_TRIGGERING_CONTEXT.WEB_CATALOG_ROBUX_UPSELL,true,paymentFlowAnalyticsService.ENUM_VIEW_NAME.ROBUX_UPSELL,paymentFlowAnalyticsService.ENUM_PURCHASE_EVENT_TYPE.USER_INPUT,paymentFlowAnalyticsService.ENUM_VIEW_MESSAGE.CANCEL);}} function showInsufficientFundsView(errorObj){startPaymentFlowAndSendModalEvent(errorObj.targetData);var robuxNeeded=""+Roblox.NumberFormatting.commas(errorObj.shortfallPrice)+"";Roblox.Dialog.open({titleText:langKeys["Heading.InsufficientFunds"],bodyContent:intl.f(langKeys["Message.InsufficientFunds"],{robux:robuxNeeded}),declineText:langKeys["Action.Cancel"],acceptText:langKeys["Action.BuyRobux"],acceptColor:Roblox.Dialog.green,onAccept:function(){if(paymentFlowAnalyticsService&&errorObj.targetData){paymentFlowAnalyticsService.sendUserPurchaseFlowEvent(paymentFlowAnalyticsService.ENUM_TRIGGERING_CONTEXT.WEB_CATALOG_ROBUX_UPSELL,true,paymentFlowAnalyticsService.ENUM_VIEW_NAME.ROBUX_UPSELL,paymentFlowAnalyticsService.ENUM_PURCHASE_EVENT_TYPE.USER_INPUT,paymentFlowAnalyticsService.ENUM_VIEW_MESSAGE.BUY_ROBUX);} window.location=Roblox.Endpoints.getAbsoluteUrl("/Upgrades/Robux.aspx")+"?ctx="+errorObj.source;return false;},onCancel:onInsufficientFundsViewCancel,onDecline:onInsufficientFundsViewCancel,imageUrl:inSufficentFundsurl,allowHtmlContentInBody:true,allowHtmlContentInFooter:false,fieldValidationRequired:true,dismissable:true,xToCancel:true});} function openErrorView(errorObj){if(errorObj.showDivID==="TransactionFailureView"){Roblox.Dialog.open({titleText:errorObj.title,bodyContent:errorObj.errorMsg,imageUrl:alertImageUrl,acceptText:langKeys["Action.Ok"],acceptColor:Roblox.Dialog.white,declineColor:Roblox.Dialog.none,dismissable:true,allowHtmlContentInBody:true});}else if(errorObj.showDivID==="InsufficientFundsView"){if(Roblox.ItemPurchaseUpsellService&&Roblox.ItemPurchaseUpsellService.showExceedLargestInsufficientRobuxModal){Roblox.ItemPurchaseUpsellService.showExceedLargestInsufficientRobuxModal(errorObj.shortfallPrice,errorObj.targetData,function(){showInsufficientFundsView(errorObj);});}else{showInsufficientFundsView(errorObj);}}else if(errorObj.showDivID==="PriceChangedView"){var elem;if('targetSelector'in errorObj){elem=$(errorObj.targetSelector)}else{elem=$('.PurchaseButton[data-item-id='+errorObj.AssetID+'][data-expected-currency='+ errorObj.expectedCurrency+'][data-expected-price='+errorObj.expectedPrice+']');} var acceptPurchase=function(){elem.attr('data-expected-price',errorObj.currentPrice);elem.attr('data-expected-currency',errorObj.currentCurrency);purchaseItem(elem,'PurchaseVerificationView');};var robuxBefore=""+errorObj.expectedPrice;var robuxAfter=""+errorObj.currentPrice;var robuxBalance=""+errorObj.balanceAfterSale;Roblox.Dialog.open({titleText:langKeys["Heading.PriceChanged"],bodyContent:intl.f(langKeys["Message.PriceChanged"],{robuxBefore:robuxBefore,robuxAfter:robuxAfter}),acceptText:langKeys["Action.BuyNow"],acceptColor:Roblox.Dialog.green,onAccept:acceptPurchase,declineText:langKeys["Action.Cancel"],footerText:intl.f(langKeys["Message.BalanceAfter"],{robuxBalance:robuxBalance}),allowHtmlContentInBody:true,allowHtmlContentInFooter:true,dismissable:true,checkboxAgreementText:langKeys["Label.AgreeAndPay"],checkboxAgreementRequired:true});}else if(errorObj.showDivID==="TwoStepVerificationRequiredView"){twoStepVerificationFlow.start();}} function openPurchaseVerificationView(elem,source){source=typeof source!=='undefined'?source:'item';var target=$(elem);if(target.hasClass('btn-disabled-primary')) return;if(hasCurrencyOperationError){openErrorView({showDivID:"TransactionFailureView",title:"Error",errorMsg:currencyOperationErrorMessage});return;} if(isBcOnlyRequirementEnabled==="True"){var bcRequirement=target.attr('data-bc-requirement');if(bcRequirement>userBC&&authenticatedUserIsNull==="False"){showBCOnlyModal("BCOnlyModal");return;}} var itemNameAttr=target.attr('data-item-name');var assetName=itemNameAttr?itemNameAttr.escapeHTML():"";var expPrice=parseInt(target.attr('data-expected-price'));var expCurrency=target.attr('data-expected-currency');var sellerName=formatSellerName(target.attr('data-seller-name')).escapeHTML();var assetType=target.attr('data-asset-type');var assetTypeDisplayName=target.attr('data-asset-type-display-name');if(assetType===0||assetType==='0'){assetType=target.attr('data-item-type');} var assetID=target.attr('data-item-id');var footerTextObj=$('#ItemPurchaseAjaxData').attr('data-footer-text');var overriddenFooterText=(footerTextObj==null)?"":footerTextObj;$('#ItemPurchaseAjaxData').attr('data-footer-text',null);isPlace=assetType=="Place";if(authenticatedUserIsNull==="True"){redirectToLogin();return;} var balanceAfter=parseInt(userBalanceRobux)-expPrice;var buyType="";var purchaseTitleText="";var messageText="";var acceptButtonText="";if(expPrice===0){buyType=purchaseTypes.get;purchaseTitleText=langKeys["Heading.GetItem"];acceptButtonText=langKeys["Action.GetNow"];}else{buyType=purchaseTypes.buy;purchaseTitleText=langKeys["Heading.BuyItem"];acceptButtonText=langKeys["Action.BuyNow"];} if(balanceAfter<0){var errorObj={shortfallPrice:(0-balanceAfter),currentCurrency:expCurrency,showDivID:"InsufficientFundsView",isPlace:isPlace,source:source,targetData:target.data()};if(Roblox.ItemPurchaseUpsellService){var itemDetail={expectedItemPrice:expPrice,assetName:assetName,buyButtonElementDataset:target.data()};Roblox.ItemPurchaseUpsellService.startItemUpsellProcess(errorObj,itemDetail,openErrorView);}else{openErrorView(errorObj);} return;} var itemUrl=$('#ItemPurchaseAjaxData').attr('data-imageurl');var currencyContent=""+Roblox.NumberFormatting.commas(expPrice)+"";var footerCurrencyText="";footerCurrencyText+=addCommasToMoney(balanceAfter);var acceptPurchase=function(){return purchaseItem(elem,'PurchaseVerificationView');};var titleText=target.attr('data-purchase-title-text');titleText=titleText?titleText:purchaseTitleText;var assetNameFormatted=""+assetName+"";var messagePrompt;var assetInfo={assetName:assetNameFormatted,assetType:assetTypeDisplayName,seller:sellerName};if(expPrice===0){messagePrompt=isPlace?"Message.PromptGetFreeAccess":"Message.PromptGetFree";assetInfo.freeTextStart="";assetInfo.freeTextEnd="";}else{messagePrompt=isPlace?"Message.PromptBuyAccess":"Message.PromptBuy";assetInfo.robux=currencyContent;} messageText=intl.f(langKeys[messagePrompt],assetInfo);var bodyContent=target.attr('data-purchase-body-content');var bodyContentI18N=messageText;bodyContent=bodyContent?bodyContent.format(currencyContent):bodyContentI18N;var fieldValidationRequired=(target.attr('data-modal-field-validation-required')==='true');var buyAccessText=langKeys["Action.BuyAccess"];if(overriddenFooterText.length===0){footerCurrencyText=""+footerCurrencyText;} var balanceText=intl.f(langKeys["Message.BalanceAfter"],{robuxBalance:footerCurrencyText});Roblox.Dialog.open({titleText:titleText,bodyContent:bodyContent,imageUrl:itemUrl,xToCancel:true,acceptText:isPlace?buyAccessText:acceptButtonText,acceptColor:Roblox.Dialog.green,onAccept:acceptPurchase,declineText:langKeys["Action.Cancel"],footerText:overriddenFooterText.length===0?balanceText:overriddenFooterText.format(footerCurrencyText),footerMiddleAligned:isModalFooterCenteredEnabled,allowHtmlContentInBody:true,allowHtmlContentInFooter:true,dismissable:true,fieldValidationRequired:fieldValidationRequired,cssClass:"need-padding",onOpenCallback:function(){$('.modal-confirmation .roblox-item-image').attr('data-item-id',assetID);Roblox.require('Widgets.ItemImage',function(item){item.loadV2($('.modal-confirmation .roblox-item-image'));});if(Roblox.ModalEvents&&target){var buttonType=target.attr('data-button-type');if(buttonType){Roblox.ModalEvents.SendAssetPurchaseConfirmationShown("assetPurchaseConfirmation",buttonType);}}}});} function showSuccessBanner(){var successBanner=$(".system-feedback .alert-success");if(successBanner.length>0&&Roblox.BootstrapWidgets){Roblox.BootstrapWidgets.ToggleSystemMessage(successBanner,100,1000);setTimeout(function(){window.location.reload();},1000);}} function openPurchaseConfirmationView(obj){var currencyContent;if(obj.Price==0){var freeLabel=langKeys["Label.Free"];currencyContent=""+freeLabel+"";}else{currencyContent=""+obj.Price+"";} var itemUrl=$('#ItemPurchaseAjaxData').attr('data-imageurl');var continueShopping=function(){var continueShoppingUrl=$('#ItemPurchaseAjaxData').attr('data-continueshopping-url');if(continueShoppingUrl!=undefined&&continueShoppingUrl!=""){document.location.href=continueShoppingUrl;}};var customizeAvatar=function(){var customizeAvatarUrl=Roblox.Endpoints.getAbsoluteUrl("/my/avatar");if(customizeAvatarUrl!=undefined&&customizeAvatarUrl!=""){document.location.href=customizeAvatarUrl;}};var acceptText="";var declineText=langKeys["Action.Continue"];var acceptColor=Roblox.Dialog.none;var acceptFunc;if(obj.AssetType==="Private Server"){acceptText=langKeys["Action.Configure"];declineText=langKeys["Action.NotNow"];acceptColor=Roblox.Dialog.blue;acceptFunc=continueShopping;}else if(obj.AssetIsWearable){acceptText=langKeys["Action.Customize"];acceptColor=Roblox.Dialog.white;declineText=langKeys["Action.NotNow"];acceptFunc=customizeAvatar;} var assetName=""+obj.AssetName.escapeHTML()+"";var assetTypeDisplayName=obj.AssetTypeDisplayName?obj.AssetTypeDisplayName:obj.AssetType;var assetInfo={assetName:assetName,assetType:assetTypeDisplayName,seller:obj.SellerName.escapeHTML(),robux:currencyContent};var messagePrompt;if(obj.TransactionVerb==="bought"){messagePrompt=isPlace?"Message.SuccessfullyBoughtAccess":"Message.SuccessfullyBought";}else{messagePrompt=isPlace?"Message.SuccessfullyAcquiredAccess":"Message.SuccessfullyAcquired";} var bodyContent=intl.f(langKeys[messagePrompt],assetInfo);Roblox.Dialog.open({titleText:langKeys["Heading.PurchaseComplete"],bodyContent:bodyContent,imageUrl:itemUrl,acceptText:acceptText,declineText:declineText,xToCancel:true,onAccept:acceptFunc,onDecline:function(){window.location.reload();},acceptColor:acceptColor,declineColor:Roblox.Dialog.white,allowHtmlContentInBody:true,dismissable:true,onOpenCallback:function(){$('.modal-confirmation .roblox-item-image').html('').attr('data-item-id',obj.AssetId);Roblox.require('Widgets.ItemImage',function(item){item.loadV2($('.modal-confirmation .roblox-item-image'));});}});purchaseConfirmationCallback(obj);} return{purchaseItem:purchaseItem,openPurchaseVerificationView:openPurchaseVerificationView,openPurchaseConfirmationView:openPurchaseConfirmationView,redirectToLogin:redirectToLogin,purchaseConfirmationCallback:purchaseConfirmationCallback,openErrorView:openErrorView,addCommasToMoney:addCommasToMoney,formatMoney:formatMoney};};Roblox.ItemPurchase.ModalClose=function(popup){$.modal.close('.'+popup);};Roblox.TwoStepVerificationFlow=function(actionType){var path;var eventType;if(actionType==="RobuxSpend"){path="spend-friction";eventType="2svRobuxSpend";}else{path="resale-friction";eventType="2svResale";} var langKeys=Roblox.Lang.PurchaseDialogResources;var itemPurchaseAjaxData=$("#ItemPurchaseAjaxData");var alertImageUrl=itemPurchaseAjaxData.attr('data-alerturl');var twoStepChallengeToken="";var numberOfFailedTwoStepVerificationChallengeAttempts=0;var properties={userId:Roblox.CurrentUser?Roblox.CurrentUser.userId:null,challengeToken:"",verificationToken:"",code:"",actionType:actionType,supportPageUrl:Roblox.Endpoints.getAbsoluteUrl("/info/account-safety"),supportLink:""} function renderTwoStepVerificationModal(){$.ajax({type:"POST",url:Roblox.EnvironmentUrls.economyApi+"/v2/"+path+"/two-step-verification/generate",success:function(challengeToken){twoStepChallengeToken=challengeToken;Roblox.AccountIntegrityChallengeService.TwoStepVerification.renderChallenge({containerId:'2sv-popup-container',userId:properties.userId,challengeId:challengeToken,actionType:actionType,renderInline:false,shouldShowRememberDeviceCheckbox:false,shouldDynamicallyLoadTranslationResources:false,onChallengeCompleted:redeemWebviewVerificationChallenge,onChallengeInvalidated:handleInvalidatedTwoStepVerificationChallenge,onModalChallengeAbandoned:$.noop}).catch(function(){showErrorBanner();});},error:function(){showErrorBanner();}});} function start(){var redirectToSettings=function(){window.location.href=Roblox.Endpoints.getAbsoluteUrl("/my/account#!/security");} var settingsRedirectModalProperties={titleText:langKeys["Heading.TwoStepVerificationRequiredV3"],bodyContent:langKeys["Message.TwoStepVerificationRequiredV4"],imageUrl:alertImageUrl,acceptText:langKeys["Action.GoToSecurity"],acceptColor:Roblox.Dialog.green,onAccept:redirectToSettings,declineText:langKeys["Action.Cancel"],dismissable:true,allowHtmlContentInBody:true,onOpenCallback:function(){sendClickEvents();}} $.ajax({type:"GET",url:Roblox.EnvironmentUrls.twoStepVerificationApi+"/v1/users/"+properties.userId+"/configuration",success:function(result){var isTwoStepVerificationEnabled=false;if(result&&result.methods){for(var i=0;i0&&Roblox.BootstrapWidgets){Roblox.BootstrapWidgets.ToggleSystemMessage(successBanner,100,6000,successMessage);}} function showErrorBanner(){$.modal.close();var errorBanner=$(".system-feedback .alert-warning");var errorMessage=langKeys["Response.VerificationError"];if(errorBanner.length>0&&Roblox.BootstrapWidgets){Roblox.BootstrapWidgets.ToggleSystemMessage(errorBanner,100,6000,errorMessage);}} function redeemWebviewVerificationChallenge(tokenData){var params={"challengeToken":twoStepChallengeToken,"verificationToken":tokenData.verificationToken} $.ajax({type:"POST",url:Roblox.EnvironmentUrls.economyApi+"/v2/"+path+"/two-step-verification/redeem",data:params,crossDomain:true,xhrFields:{withCredentials:true},success:function(result){if(result){showSuccessful2SVBanner();}else{showErrorBanner();}},error:function(){showErrorBanner();}});} function handleInvalidatedTwoStepVerificationChallenge(){var maxRetryAttempts=3;if(numberOfFailedTwoStepVerificationChallengeAttempts0){var chunk=elements.splice(0,10);var i,params=[];for(i=0;i').css('position','relative').css('overflow','hidden');imageContainer.html(innerDiv);imageContainer=innerDiv;if(!params[i].noClick){var a=$('').attr('href',data.url);imageContainer.append(a);imageContainer=a;} var img=$('').attr('title',data.name).attr('alt',data.name).attr('border',0).addClass('original-image modal-thumb');img.load(function(innerDiv,element,img,data){return function(){innerDiv.width(element.width);innerDiv.height(element.height);};}(innerDiv,element,img,data));imageContainer.append(img);img.attr('src',data.thumbnailUrl);if(!data.thumbnailFinal){incompletes.push(element);}} attempt=attempt||1;if(attempt<4) window.setTimeout(function(){load(incompletes,attempt+1);},attempt*2000);};}(chunk,params));}} function populate(){load($(config.selector+":empty").toArray());} var imageSizeLookup={small:110,medium:150,large:420} function loadV2(element,assetName) {if($.type(element)==='array') {if(element.length===0) {return;} element=element[0];} var assetId=element.attr('data-item-id')||0;var imageSizeNum=imageSizeLookup[element.attr('data-image-size')||'large'];var imageSizeString=imageSizeNum+'x'+imageSizeNum;var apiEndpoint=Roblox.Endpoints.getAbsoluteUrl(Roblox.EnvironmentUrls.thumbnailsApi+"/v1/assets?assetIds="+assetId+"&size="+imageSizeString+"&format=webp");$.get(apiEndpoint,function(result){if(result.data.length===0||result.data[0].state!=='Completed') {return;} var thumbnailUrl=result.data[0].imageUrl;var imageContainer=$(element);var innerDiv=$('
').css('position','relative').css('overflow','hidden');imageContainer.html(innerDiv);imageContainer=innerDiv;var img=$('').attr('title',assetName).attr('alt',assetName).attr('border',0).addClass('original-image modal-thumb');img.load(function(innerDiv,element){return function(){innerDiv.width(element.width);innerDiv.height(element.height);};}(innerDiv,element));imageContainer.append(img);img.attr('src',thumbnailUrl);});} return{config:config,load:load,loadV2:loadV2,populate:populate};}); ;// jquery/jquery.history.js if(typeof window.console==='undefined'){window.console={};} if(typeof window.console.emulated==='undefined'){if(typeof window.console.log==='function'){window.console.hasLog=true;} else{if(typeof window.console.log==='undefined'){window.console.log=function(){};} window.console.hasLog=false;} if(typeof window.console.debug==='function'){window.console.hasDebug=true;} else{if(typeof window.console.debug==='undefined'){window.console.debug=!window.console.hasLog?function(){}:function(){var arr=['console.debug:'];for(var i=0;i=8){nativeSupport=true;} else if((browser.webkit||false)&&browserVersionInt>=528){nativeSupport=true;} else if((browser.mozilla||false)){if(browserVersionPartsOne>1){nativeSupport=true;} else if(browserVersionPartsOne===1){if(browserVersionPartsTwo>9){nativeSupport=true;} else if(browserVersionPartsTwo===9){if(browserVersionPartsThree>=2){nativeSupport=true;}}}} else if((browser.opera||false)){if(browserVersionPartsOne>10){nativeSupport=true;} else if(browserVersionPartsOne===10){if(browserVersionPartsTwo>=60){nativeSupport=true;}}} return nativeSupport;},hashchangeLoader:function(){var History=$.History;var nativeSupport=History.nativeSupport();if(!nativeSupport){var checker;if($.browser.msie){History.$iframe=$('