แพคเกจคุณสมบัติ บันเดิล เสนอฟังก์ชันนอกกล่องเพื่อขายคอลเลกชันของไอเทมให้กับผู้เล่นในราคาส่วนลดคุณสามารถเลือกว่าจะอนุญาตให้ผู้เล่นซื้อแพ็คเกจโดยใช้สกุลเงินในประสบการณ์ที่กําหนดเองหรือ Robux แพ็คเกจประเภทใดที่คุณต้องการใช้ รายการชิ้นใดที่คุณต้องการขาย และวิธีที่คุณต้องการเรียกร้องผู้เล่นในระหว่างการเล่นเกม
โดยใช้ตัวเลือกการปรับแต่งแพคเกจคุณสามารถปรับแต่งชุดของคุณให้สอดคล้องกับเป้าหมายการออกแบบและการระดมทุนของประสบการณ์ของคุณ เช่น:
- เพิ่ม ความลึกในการใช้จ่าย โดยผูกรวมรายการในราคาต่างๆ เพื่อดึงดูผู้เล่นหลายราย
- การสร้างรายได้จากการดำเนินการสด (LiveOps) กิจกรรม โดยเสนอบันเดิลเวลาจํากัดของไอเทมสุดพิเศษ

รับแพคเกจ
ร้านค้าผู้สร้าง คือแท็บของกล่องเครื่องมือที่คุณสามารถใช้เพื่อค้นหาทรัพยากรทั้งหมดที่สร้างโดย Roblox และชุมชน Roblox เพื่อใช้ภายในโครงการของคุณ รวมถึงโมเดล ภาพ เมช เสียง ปลั๊กอิน วิดีโอ และแบบอักษร คุณสามารถใช้ร้านค้าผู้สร้างเพื่อเพิ่มสินทรัพย์หนึ่งหรือมากกว่าโดยตรงในประสบการณ์ที่เปิดกว้างรวมถึงแพคเกจคุณสมบัติ!
แต่ละแพคเกจคุณสมบัติต้องใช้แพคเกจคุณสมบัติหลัก Core เพื่อให้ทำงานได้อย่างถูกต้องเมื่อแพคเกจคุณสมบัติ แกนกลาง และ บันเดิล อยู่ภายในสินค้าคงคลังของคุณแล้ว คุณสามารถนำมาใช้ใหม่ในโครงการใดๆ คลังไอเท็ม
เพื่อรับแพคเกจจากคลังสินค้าของคุณเข้าสู่ประสบการณ์ของคุณ:
เพิ่มแพคเกจคุณสมบัติ แกนกลาง และ บันเดิล ในสินค้าคงคลังของคุณภายใน Studio โดยคลิกที่ลิงก์ เพิ่มในสินค้าคงคลัง ในชุดส่วนประกอบต่อไปนี้
ในแถบเครื่องมือ เลือกแท็บ ดู
คลิก กล่องเครื่องมือ . หน้าต่าง กล่องเครื่องมือ จะปรากฏ
ในหน้าต่าง กล่องเครื่องมือ คลิกที่แท็บ สินค้าคงคลัง แสดงรายการ โมเดลของฉัน
คลิกที่ แพคเกจคุณสมบัติหลัก แล้วที่ แพคเกจคุณสมบัติบันเดิล ตามลำดับทั้งสองโฟลเดอร์แพคเกจจะแสดงในหน้าต่าง สํารวจ
ลากไฟล์โฟลเดอร์แพคเกจเข้าไปใน ReplicatedStorage
อนุญาตให้เรียกการเก็บข้อมูลเพื่อติดตามการซื้อผู้เล่นด้วยแพคเกจ
- ในแท็บ บ้าน ของแถบเครื่องมือ เลือก การตั้งค่าเกม 2. ไปที่แท็บ ความปลอดภัย จากนั้นเปิดใช้งาน เปิดใช้งานการเข้าถึงสตูดิโอไปยังบริการ API
กำหนดสกุลเงิน
หากประสบการณ์ของคุณมีระบบเงินของตัวเองคุณสามารถลงทะเบียนได้โดยใช้แพคเกจคุณสมบัติ หลัก โดยการกำหนดพวกเขาใน ReplicatedStorage.FeaturePackagesCore.Configs.Currenciesมีตัวอย่างที่แสดงความคิดเห็นของสกุลเงินอัญมณีที่อยู่ในไฟล์นี้แล้ว; เป็นเจ้าของ
สกุลเงิน
Gems = {displayName = "Gems",symbol = "💎",icon = nil,},
สคริปต์ Currencies บอกแพคเกจคุณสมบัติ หลัก เกี่ยวกับเมทาดาต้าเกี่ยวกับสกุลเงินของคุณ:
- (จำเป็น) displayName - ชื่อสกุลเงินของคุณ หากคุณไม่ระบุสัญลักษณ์หรือไอคอน ชื่อนี้จะถูกใช้ในปุ่มซื้อ (เช่น "100 อัญมณี")
- (ตัวเลือก) symbol - หากคุณมีตัวละครข้อความที่จะใช้เป็นไอคอนสำหรับสกุลเงินของคุณ จะใช้แทน displayName ในปุ่มซื้อ (เช่น "💎100")
- (ตัวเลือก) icon - หากคุณมีไอคอนรูปภาพสำหรับสกุลเงินของคุณ AssetId จะถูกใช้แทน displayName ในปุ่มซื้อ (เช่นภาพจะถูกวางไว้ทางด้านซ้ายของราคา "🖼️100")
ชุดรวมคุณจะต้องระบุราคาแพคเกจ เงินตรา และไอคอนด้วยตนเองสําหรับการแสดงข้อมูลล่วงหน้าแทนที่จะดึงข้อมูลจากผลิตภัณฑ์นักพัฒนาที่เกี่ยวข้อง
บันเดิล
-- หากต้องการใช้ผลิตภัณฑ์สำหรับนักพัฒนา คุณต้องให้ devProductId ชุดรวมซึ่งใช้โดยบันเดิลเดียวเท่านั้น-- เราจะดึงราคาแพคเกจและไอคอนจากผลิตภัณฑ์ของผู้พัฒนาpricing = {priceType = CurrencyTypes.PriceType.Marketplace,devProductId = 1795621566,},-- มิฉะนั้นหากคุณต้องการใช้เงินในประสบการณ์แทนผลิตภัณฑ์ของผู้พัฒนา คุณสามารถใช้สิ่งต่อไปนี้แทนได้:-- ราคาที่นี่อยู่ในสกุลเงินในประสบการณ์ไม่ใช่ Robuxpricing = {priceType = CurrencyTypes.PriceType.InExperience,price = 79,currencyId = "Gems",icon = 18712203759,},
คุณยังต้องอ้างถึงสคริปต์ BundlesExample เพื่อโทร setInExperiencePurchaseHandler
ตัวอย่างบันเดิล
local function awardInExperiencePurchase(
_player: Player,
_bundleId: Types.BundleId,
_currencyId: CurrencyTypes.CurrencyId,
_price: number
)
-- ชุดรวม
-- อัปเดตข้อมูลผู้เล่น, ให้ไอเทมเป็นต้น
-- หักเงินตราจากผู้เล่น
task.wait(2)
return true
end
local function initializePurchaseHandlers()
local bundles = Bundles.getBundles()
for bundleId, bundle in bundles do
-- พิมพ์
if not bundle or bundle.pricing.priceType ~= "Marketplace" then
continue
end
Bundles.setPurchaseHandler(bundleId, awardMarketplacePurchase)
receiptHandlers[bundle.pricing.devProductId] = receiptHandler
end
-- หากคุณมีสกุลเงินในประสบการณ์ที่คุณใช้สำหรับบันเดิลให้ตั้งตัวจัดการไว้ที่นี่
for currencyId, _ in Currencies do
Bundles.setInExperiencePurchaseHandler(currencyId, awardInExperiencePurchase)
end
end
โดยเฉพาะคุณต้องกรอก awardInExperiencePurchase ซึ่งเรียกโดยลูปผ่าน Currencies ภายในตัวอย่าง initializePurchaseHandlers (คือแต่ละ currencyId เชื่อมต่อกับตัวจัดการผ่าน Bundles.setInExperiencePurchaseHandler(currencyId, awardInExperiencePurchase) ).
กำหนดชุดรวม
ทุกแพคเกจที่สามารถนำเสนอในประสบการณ์ของคุณสามารถกำหนดได้ภายใน ReplicatedStorage.Bundles.Configs.Bundles , ด้วยประเภทที่ส่งออกจากสคริปต์ Types ในไดเรกทอรีเดียวกัน
หากคุณใช้ devProductId ชุดรวมdevProductId เพื่อให้ตรงกับที่อยู่ในประสบการณ์ของคุณนี่คือสิ่งที่จะถูกร้องขอผ่าน MarketplaceService เพื่อซื้อแพ็กเกจเอง ขอแนะนำให้ใช้ผลิตภัณฑ์นักพัฒนาใหม่สำหรับแพคเกจเพื่อให้ง่ายต่อการติดตามยอดขายแยกต่างหาก หากคุณต้องการแพคเกจที่มีหลายรายการและหากรายการเหล่านี้ถูกแทนที่โดยผลิตภัณฑ์ของผู้พัฒนาในประสบการณ์ของคุณแล้ว คุณไม่จำเป็นต้องกำหนดราคารายการ/assetId/ชื่อโดยเฉพาะ ซึ่งจะถูกดึงผ่านข้อมูลผลิตภัณฑ์:
อ่าน README
{itemType = ItemTypes.ItemType.DevProduct,devProductId = <DEV_PRODUCT_ID>,metadata = {caption = {text = "x1",color = Color3.fromRGB(236, 201, 74),} -- คําอธิบายเป็นตัวเลือก! คุณยังสามารถข้ามฟิลด์นี้ได้}},
มิฉะนั้นคุณสามารถกำหนดค่ารายละเอียดของรายการดังกล่าวได้ด้วยตนเอง:
อ่าน README
{itemType = ItemTypes.ItemType.Robux,priceInRobux = 49,icon = <IMAGE_ASSET_ID>,metadata = {caption = {text = "x1",color = Color3.fromRGB(236, 201, 74),} -- คําอธิบายเป็นตัวเลือก! คุณยังสามารถปล่อยให้สนามนี้ว่างเปล่าได้}},
ตัวอย่างเช่น แพคเกจทั้งหมดของคุณอาจมีลักษณะดังนี้:
อ่าน README
local starterBundle: Types.RelativeTimeBundle = {bundleType = Types.BundleType.RelativeTime,-- หากต้องการใช้ผลิตภัณฑ์สำหรับนักพัฒนา คุณต้องให้ devProductId ชุดรวมซึ่งใช้โดยบันเดิลเดียวเท่านั้น-- เราจะดึงราคาแพคเกจและไอคอนจากผลิตภัณฑ์ของผู้พัฒนาpricing = {priceType = CurrencyTypes.PriceType.Marketplace,devProductId = <DEV_PRODUCT_ID>,},-- มิฉะนั้นหากคุณต้องการใช้เงินในประสบการณ์แทนผลิตภัณฑ์ของผู้พัฒนา คุณสามารถใช้สิ่งต่อไปนี้แทนได้:-- ราคาที่นี่อยู่ในสกุลเงินในประสบการณ์ไม่ใช่ Robux-- ราคา = {-- ราคาประเภท = ประเภทราคา CurrencyTypes.PriceType.InExperience,-- ราคา = 79,-- เงินตรา = <CURRENCY_ID>,-- ไอคอน = <IMAGE_ASSET_ID>,-- },includedItems = {[1] = {-- ไอเทมเองไม่ได้ขายผ่านผลิตภัณฑ์นักพัฒนาดังนั้นจึงบ่งบอกถึงมูลค่าเท่าใดใน Robux และให้ไอคอน-- ราคาใน Robux ช่วยให้บันเดิลแสดงมูลค่าเชิงเปรียบเทียบของราคาบันเดิลกับผลบวกของเนื้อหาitemType = ItemTypes.ItemType.Robux,priceInRobux = 49,icon = <IMAGE_ASSET_ID>,-- อีกทางหนึ่งหากสิ่งนี้มีผลิตภัณฑ์สำหรับนักพัฒนาทิ้งราคาและไอคอนด้านบนและเพียงตั้ง devProductId-- ราคาและไอคอนจะได้รับจากผลิตภัณฑ์ของผู้พัฒนา-- ดีเวลอปโปรดักต์ID = <ITEM_DEV_PRODUCT_ID>-- มีฟิลด์เมทาดาตาทางเลือกเพิ่มเติมที่เป็น UI เฉพาะถ้าจำเป็นmetadata = {caption = {text = "x1",color = Color3.fromRGB(236, 201, 74),},},},[2] = {itemType = ItemTypes.ItemType.Robux,priceInRobux = 99,icon = <IMAGE_ASSET_ID>,metadata = {caption = {text = "x1",color = Color3.fromRGB(236, 201, 74),},},},[3] = {itemType = ItemTypes.ItemType.Robux,priceInRobux = 149,icon = <IMAGE_ASSET_ID>,metadata = {caption = {text = "x1",color = Color3.fromRGB(236, 201, 74),},},},},singleUse = true, -- เมื่อซื้อแล้วหรือหมดอายุแล้วจะไม่ถูกต้องอีกต่อไปแม้ว่าประสบการณ์ของคุณจะพยายามที่จะระบุ (onPlayerAdded) คุณสามารถทำให้เป็นเท็จในระหว่างการทดสอบในสตูดิโอdurationInSeconds = 900, -- 15 นาทีincludesOfflineTime = false, -- นับเวลาที่ผ่านไปในประสบการณ์เท่านั้นmetadata = {displayName = "STARTER BUNDLE",description = "Save 75% and get a head start!",},}
บูรณาการโลจิสติกของเซิร์ฟเวอร์
ดูที่ ReplicatedStorage.Bundles.Server.Examples.BundlesExample ซึ่งแสดงวิธีที่เซิร์ฟเวอร์ของคุณจะโต้ตอบกับแพคเกจคุณสมบัติ บันเดิล และวิธีการด้านบนบน ModuleScriptส่วนตัดตอนด้านล่างมาจากสคริปต์นั้น
คุณต้องเชื่อมโยงสิ่งสี่อย่างหลักเมื่อลากแพคเกจคุณสมบัติ บันเดิล เข้าสู่ประสบการณ์:
เชื่อมต่อตัวจัดการการซื้อผ่าน Bundles.setPurchaseHandler เพื่อระบุฟังก์ชันที่จะโทรเพื่อรับรางวัลไอเทมเมื่อการซื้อกําลังดําเนินการ
ตัวอย่างบันเดิลlocal function awardMarketplacePurchase(_player: Player, _bundleId: Types.BundleId, _receiptInfo: { [string]: any })-- อัปเดตข้อมูลผู้เล่น, ให้ไอเทมเป็นต้น-- ... ชุดรวมrecordInfo.PurchaseId เพื่อให้เราสามารถตรวจสอบได้ว่าผู้ใช้มีแพคเกจนี้แล้วหรือยังtask.wait(2)return Enum.ProductPurchaseDecision.PurchaseGrantedendlocal function awardInExperiencePurchase(_player: Player,_bundleId: Types.BundleId,_currencyId: CurrencyTypes.CurrencyId,_price: number)-- ชุดรวม-- อัปเดตข้อมูลผู้เล่น, ให้ไอเทมเป็นต้น-- หักเงินตราจากผู้เล่นtask.wait(2)return trueendlocal function initializePurchaseHandlers()local bundles = Bundles.getBundles()for bundleId, bundle in bundles do-- พิมพ์if not bundle or bundle.pricing.priceType ~= "Marketplace" thencontinueendBundles.setPurchaseHandler(bundleId, awardMarketplacePurchase)receiptHandlers[bundle.pricing.devProductId] = receiptHandlerend-- หากคุณมีสกุลเงินในประสบการณ์ที่คุณใช้สำหรับบันเดิลให้ตั้งตัวจัดการไว้ที่นี่for currencyId, _ in Currencies doBundles.setInExperiencePurchaseHandler(currencyId, awardInExperiencePurchase)endendเชื่อมโยงโลจิกของคุณสำหรับ MarketplaceService.ProcessReceipt แต่อาจทำได้ที่อื่นหากประสบการณ์ของคุณมีผลิตภัณฑ์นักพัฒนาสำหรับขายแล้วโดยพื้นฐานแล้วเมื่อใบรับรองผลิตภัณฑ์ของนักพัฒนาถูกประมวลผลแล้วพวกเขาจะโทร Bundles.getBundleByDevProduct ชุดรวมสคริปต์จะเรียก Bundles.processReceipt
ตัวอย่างบันเดิล-- ประมวลผลใบเสร็จจากตลาดเพื่อตรวจสอบว่าผู้เล่นต้องการเรียกเก็บเงินหรือไม่local function processReceipt(receiptInfo): Enum.ProductPurchaseDecisionlocal userId, productId = receiptInfo.PlayerId, receiptInfo.ProductIdlocal player = Players:GetPlayerByUserId(userId)if not player thenreturn Enum.ProductPurchaseDecision.NotProcessedYetendlocal handler = receiptHandlers[productId] -- รับตัวจัดการสำหรับผลิตภัณฑ์local success, result = pcall(handler, receiptInfo, player) -- โทรหาตัวจัดการเพื่อตรวจสอบว่าโลจิสติกการซื้อประสบความสำเร็จหรือไม่if not success or not result thenwarn("Failed to process receipt:", receiptInfo, result)return Enum.ProductPurchaseDecision.NotProcessedYetendreturn Enum.ProductPurchaseDecision.PurchaseGrantedendlocal function receiptHandler(receiptInfo: { [string]: any }, player: Player)local bundleId, _bundle = Bundles.getBundleByProductId(receiptInfo.ProductId)if bundleId then-- ชุดรวมlocal purchaseDecision = Bundles.processReceiptAsync(player, bundleId, receiptInfo)return purchaseDecision == Enum.ProductPurchaseDecision.PurchaseGrantedend-- ชุดรวม-- ... จัดการโลจิสติกทั้งหมดที่มีอยู่ของคุณที่นี่หากคุณมีใดๆreturn falseendเชื่อมต่อ Players.PlayerAdded:Connect(Bundles.OnPlayerAdded) เพื่อให้แพคเกจคุณลักษณะบันเดิล **** รีเรียกบันเดิลที่ใช้งานอยู่ที่ยังไม่หมดอายุสําหรับผู้เล่น
อ่าน READMElocal function onPlayerAdded(player: Player)-- บอกแพคเกจเมื่อผู้เล่นเข้าร่วมเพื่อให้สามารถรีโหลดข้อมูลของพวกเขาได้Bundles.onPlayerAdded(player)-- หากคุณมีแพคเกจเริ่มต้นที่คุณต้องการเสนอให้กับผู้ใช้ใหม่ทั้งหมด คุณสามารถระบุได้ที่นี่-- ... บันเดิลจะจัดการหากผู้เล่นซื้อมันแล้วหรือหากหมดอายุแล้วเนื่องจากไม่สามารถทำซ้ำได้-- Bundles.promptIfValidAsync(ผู้เล่น, "StarterBundle")-- เรียกนี้ที่นี่เพียงเป็นตัวอย่าง คุณสามารถเรียกนี้ได้ทุกเมื่อหรือทุกที่ที่คุณต้องการonPromptBundleXYZEvent(player)endชุดคำแนะนำ ขณะที่สิ่งนี้ขึ้นอยู่กับการเล่นเกมแต่ตัวอย่างจะแจ้งผู้เล่นด้วยชุดคำแนะนำเริ่มต้น onPlayerAdded
ล็อกิกของแพคเกจคุณสมบัติ บันเดิล มั่นใจว่าแต่ละผู้เล่นจะไม่ได้รับข้อเสนอซ้ำหากพวกเขาซื้อบันเดิลแล้ว หรือหากพวกเขาปล่อยให้ข้อเสนอหมดอายุแล้ว (ขึ้นอยู่กับการกำหนดค่าบันเดิล)
ทุกครั้งที่คุณต้องการส่งบันทึกไปยังผู้เล่น โทร Bundles.promptIfValidAsync(player, bundleId)
อ่าน READMElocal function onPromptBundleXYZEvent(player: Player)-- เชื่อมต่อประสบการณ์ใดๆ ชุดรวม-- ... ชุดรวม-- ... ตัวอย่างเช่น หากคุณต้องการส่งคำเตือนเกี่ยวกับแพคเกจเมื่อผู้เล่นเข้าร่วมหรือเมื่อผู้เล่นเลเวลอัพtask.spawn(Bundles.promptIfValidAsync, player, <Some_Bundle_Id>)-- ... หากสร้างหลายชุดโดยใช้การเรียกฟังก์ชันข้างต้นโดยใช้ task.spawn() จะลดความแตกต่างระหว่างการนับถอยหลังend
พิจารณาคำแนะนำแนวทางที่ดีที่สุดต่อไปนี้เกี่ยวกับการบันทึกซ้ำของ ReceiptIds:
ในขณะที่แพคเกจคุณสมบัติ บันทึกใบเสร็จ จะบันทึกรหัสใบเสร็จเพื่อหลีกเลี่ยงการประมวลผลใบเสร็จเดียวกันสองครั้ง คุณควรบันทึกรหัสใบเสร็จภายในตารางของคุณด้วยเพื่อให้หากการไหลของการซื้อล้มเหลวหลังจากที่ผู้จัดการการซื้อของพวกเขาเสร็จสิ้นแล้ว คุณจะรู้ในการลองอีกครั้งว่าจะไม่มอบรางวัลไอเทมอีกครั้ง
แพคเกจคุณสมบัติ บันทึก จะไม่บันทึก ReceiptId หากการซื้อล้มเหลวในขั้นตอนใดก็ตาม ดังนั้นคุณควรตรวจสอบให้แน่ใจว่าคุณกำลังบันทึก ReceiptId ในตารางของคุณก่อนที่จะประมวลผลใบเสร็จเป็นส่วนหนึ่งของผู้จัดการการซื้อของคุณ
ความซ้ำซ้อนนี้ช่วยให้แน่ใจว่าการซื้อโลจิกทั้งหมดได้รับการจัดการอย่างเหมาะสมและที่เก็บข้อมูลของคุณและแพคเกจคุณลักษณะ บันเดิล จะได้รับความสอดคล้องในที่สุดด้วยที่เก็บข้อมูลของคุณเป็นแหล่งความจริง
กำหนดคงที่
คงที่สำหรับแพคเกจคุณสมบัติ แกนกลาง อยู่ในสองจุด:
คงที่ร่วมอยู่ใน ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants
คงที่เฉพาะแพคเกจในกรณีนี้คือแพคเกจคุณสมบัติ บันเดิล อาศัยอยู่ใน ReplicatedStorage.Bundles.Configs.Constants
สิ่งสำคัญที่คุณอาจต้องปรับเพื่อให้เป็นไปตามข้อกำหนดด้านการออกแบบของประสบการณ์ของคุณ:
- ID สื่อเสียง
- ระยะเวลาเอฟเฟกต์การซื้อและสีของอนุภาค
- แสดงความพังทลายของหัวข้อได้
นอกจากนี้คุณสามารถค้นหาสตริงสําหรับการแปลที่แยกออกเป็นสถานที่เดียว: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings
ปรับแต่งส่วนประกอบ UI
โดยการแก้ไขวัตถุแพคเกจ เช่น สี ฟอนต์ และความโปร่งใส คุณสามารถปรับการนำเสนอภาพการ์ดของคุณได้อย่างไรก็ตาม โปรดจำไว้ว่าหากคุณย้ายวัตถุใดๆ ไปรอบๆ ตามลําดับชั้น รหัสจะไม่สามารถหาพวกเขาได้ และคุณจะต้องทำการปรับเปลี่ยนรหัสของคุณ
คำเตือนประกอบด้วยสองส่วนสูงระดับ:
- PromptItem – ส่วนประกอบแต่ละส่วนที่ทำซ้ำสำหรับแต่ละรายการภายในบันทึก (รูปภาพรายการคําอธิบายชื่อราคา)
- Prompt – หน้าต่างแจ้งเตือนเอง
หน้าจอแสดงข้อมูลล่วงหน้าประกอบด้วยสองส่วน:
- HudItem – ส่วนประกอบแต่ละอย่างที่แทนที่ตัวเลือกเมนูในการแสดงผลบนหน้าจอด้านบน
- Hud – จะถูกเติมด้วยโปรแกรมอย่างมีประสิทธิภาพด้วย HudItems
หากคุณต้องการมีการควบคุมมากขึ้นเหนือการแสดงผลบนหัว แทนที่จะใช้ HUD UI ที่มีอยู่ภายใน ReplicatedStorage.Bundles.Objects.BundlesGui คุณสามารถย้ายสิ่งต่างๆ ไปตามความต้องการในการออกแบบของคุณเองเพียงตรวจสอบให้แน่ใจว่าจะอัปเดตพฤติกรรมของสคริปต์ไคลเอนต์ในสคริปต์ ReplicatedStorage.Bundles.Client.UIController
การอ้างอิง API
ประเภท
เวลาที่เกี่ยวข้อง
เมื่อแพ็คเกจ RelativeTime ถูกเสนอให้กับผู้เล่นแล้ว มันจะยังคงมีอยู่จนกว่าระยะเวลาจะหมดลงประเภทนี้จะแสดงบนหน้าจอแสดงข้อมูลของผู้เล่นและจะแจ้งเตือนอัตโนมัติในเซสชั่นต่อไปจนกว่าบันทึกจะหมดอายุหรือผู้เล่นจะซื้อมัน
ตัวอย่างทั่วไปของประเภทบันเดิลนี้คือข้อเสนอแพ็คเริ่มต้นใช้ครั้งเดียวที่แสดงให้กับผู้เล่นใหม่ทั้งหมดเป็นเวลา 24 ชั่วโมงสำหรับการปฏิบัติที่ดีที่สุดในอุตสาหกรรมเกี่ยวกับวิธีการใช้แพ็คเริ่มต้นบนบันทึกแพ็ค ดู การออกแบบแพ็คเริ่มต้น
ชื่อ | ประเภท | คําอธิบาย |
---|---|---|
includeOfflineTime | bool | (เลือกได้) หากไม่ได้ตั้งค่า เวลาที่ใช้ในประสบการณ์เท่านั้นจะนับเป็นระยะเวลาข้อเสนอที่เหลือ |
singleUse | bool | (เลือกได้) หากไม่ได้ตั้งค่า การซื้อสามารถถูกเปิดใช้งานใหม่ได้หลังจากซื้อหรือหมดอายุ หากตั้งค่าแล้ว เมื่อซื้อหรือหมดอายุครั้งแรก จะไม่ถูกร้องขออีกครั้ง แม้ว่าคุณจะโทร Bundles.promptIfValidAsync ด้วย bundleId |
เวลาที่แก้ไขแล้ว
เมื่อแพ็คเกจ FixedTime ถูกเสนอให้กับผู้เล่นแล้ว มันจะยังคงมีอยู่จนถึงสิ้นเวลาที่ประสานกันทั่วถึง (UTC)ประเภทนี้จะแสดงบนหน้าจอแสดงข้อมูลของผู้เล่นและจะแจ้งเตือนอัตโนมัติในเซสชั่นต่อไปจนกว่าบันทึกจะหมดอายุหรือผู้เล่นจะซื้อมัน
ตัวอย่างทั่วไปของประเภทบันเดิลนี้คือข้อเสนอในวันหยุดที่มีให้เฉพาะในเดือนที่กำหนดเท่านั้น
ครั้งเดียว
แพคเกจ OneTime มีให้เฉพาะในช่วงเวลาที่มันถูกเสนอให้กับผู้เล่นมันจะไม่แสดงบนหน้าจอแสดงข้อมูลของผู้เล่นและเมื่อผู้เล่นปิดการแจ้งเตือน มันจะไม่สามารถเปิดใหม่ได้จนกว่าจะถูกระบุโดยเซิร์ฟเวอร์อีกครั้ง
ตัวอย่างทั่วไปของประเภทบันเดิลนี้คือข้อเสนอในการซื้อเพิ่มในสกุลเงินในประสบการณ์เมื่อผู้เล่นหมด