<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@artankor</title><author><name>@artankor</name></author><id>https://teletype.in/atom/artankor</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/artankor?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@artankor?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=artankor"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/artankor?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-20T12:57:17.007Z</updated><entry><id>artankor:gn_EFUAVLfa</id><link rel="alternate" type="text/html" href="https://teletype.in/@artankor/gn_EFUAVLfa?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=artankor"></link><title>Robjtgjjg</title><published>2026-06-20T09:45:23.117Z</published><updated>2026-06-20T09:45:23.117Z</updated><summary type="html">&lt;img src=&quot;https://devforum.roblox.com/secure-uploads/uploads/original/5X/7/4/7/1/74711e8833623dd7b77ff0feacf4c0fa430647d0.jpeg&quot;&gt;image</summary><content type="html">
  &lt;figure id=&quot;UFmI&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://devforum.roblox.com/secure-uploads/uploads/original/5X/7/4/7/1/74711e8833623dd7b77ff0feacf4c0fa430647d0.jpeg&quot; width=&quot;690&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Q4n9&quot;&gt;image&lt;/p&gt;
  &lt;p id=&quot;HHdU&quot;&gt;Уязвимости PromptProductFinished можно исправить, используя &lt;a href=&quot;https://create.roblox.com/docs/production/monetization/developer-products#handling-purchases&quot; target=&quot;_blank&quot;&gt;ProcessReceipt&lt;/a&gt;. Мой пример обработки UGC-игр, которые позволяют покупать бесплатные UGC за Robux с помощью dev-продукта:&lt;br /&gt;(Пожалуйста, используйте только processreceipt, я тогда был не очень хорошим программистом, ха-ха)&lt;/p&gt;
  &lt;pre id=&quot;RumU&quot;&gt;local DEV_PRODUCT_ID =tonumber(game:GetService(&amp;quot;ReplicatedStorage&amp;quot;):WaitForChild(&amp;quot;DEVPRODUCTID&amp;quot;).Value)
local productIdUGC = game:GetService(&amp;quot;ReplicatedStorage&amp;quot;):WaitForChild(&amp;quot;UGCID&amp;quot;).Value

local MarketplaceService = game:GetService(&amp;quot;MarketplaceService&amp;quot;)
local Players = game:GetService(&amp;quot;Players&amp;quot;)
local bought = {}

local function processReceipt(receiptInfo)
    local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
    print(player.Name .. &amp;quot; - dev product id&amp;quot;, receiptInfo.ProductId)

    local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
    if not player then
        return Enum.ProductPurchaseDecision.NotProcessedYet
    end

    if receiptInfo.ProductId == DEV_PRODUCT_ID then
        bought[receiptInfo.PlayerId] = DEV_PRODUCT_ID
        return Enum.ProductPurchaseDecision.PurchaseGranted
    end

    return Enum.ProductPurchaseDecision.NotProcessedYet
end

MarketplaceService.ProcessReceipt = processReceipt
local success, result = pcall(function()
    MarketplaceService.ProcessReceipt = processReceipt
end)

if not success then
    warn(&amp;quot;processreceipt:&amp;quot;, result)
end


MarketplaceService.PromptProductPurchaseFinished:Connect(function(player, productId, wasPurchased)
    if tonumber(productId) == DEV_PRODUCT_ID and wasPurchased == true and bought[player] == DEV_PRODUCT_ID then
      pcall(function()  MarketplaceService:PromptPurchase(game.Players:GetPlayerByUserId(player), productIdUGC)
end)
        bought[player] = nil
    end
end)&lt;/pre&gt;

</content></entry><entry><id>artankor:FXlAWVHrTTM</id><link rel="alternate" type="text/html" href="https://teletype.in/@artankor/FXlAWVHrTTM?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=artankor"></link><title>Robloxghghhgyy</title><published>2026-06-20T09:41:55.344Z</published><updated>2026-06-20T09:41:55.344Z</updated><summary type="html">&lt;img src=&quot;https://devforum.roblox.com/secure-uploads/uploads/original/5X/7/4/7/1/74711e8833623dd7b77ff0feacf4c0fa430647d0.jpeg&quot;&gt;image</summary><content type="html">
  &lt;figure id=&quot;eIFq&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://devforum.roblox.com/secure-uploads/uploads/original/5X/7/4/7/1/74711e8833623dd7b77ff0feacf4c0fa430647d0.jpeg&quot; width=&quot;690&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XnXR&quot;&gt;image&lt;/p&gt;
  &lt;p id=&quot;wXHA&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;mf7s&quot;&gt;local DEV_PRODUCT_ID =tonumber(game:GetService(&amp;quot;ReplicatedStorage&amp;quot;):WaitForChild(&amp;quot;DEVPRODUCTID&amp;quot;).Value)
local productIdUGC = game:GetService(&amp;quot;ReplicatedStorage&amp;quot;):WaitForChild(&amp;quot;UGCID&amp;quot;).Value

local MarketplaceService = game:GetService(&amp;quot;MarketplaceService&amp;quot;)
local Players = game:GetService(&amp;quot;Players&amp;quot;)
local bought = {}

local function processReceipt(receiptInfo)
    local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
    print(player.Name .. &amp;quot; - dev product id&amp;quot;, receiptInfo.ProductId)

    local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
    if not player then
        return Enum.ProductPurchaseDecision.NotProcessedYet
    end

    if receiptInfo.ProductId == DEV_PRODUCT_ID then
        bought[receiptInfo.PlayerId] = DEV_PRODUCT_ID
        return Enum.ProductPurchaseDecision.PurchaseGranted
    end

    return Enum.ProductPurchaseDecision.NotProcessedYet
end

MarketplaceService.ProcessReceipt = processReceipt
local success, result = pcall(function()
    MarketplaceService.ProcessReceipt = processReceipt
end)

if not success then
    warn(&amp;quot;processreceipt:&amp;quot;, result)
end


MarketplaceService.PromptProductPurchaseFinished:Connect(function(player, productId, wasPurchased)
    if tonumber(productId) == DEV_PRODUCT_ID and wasPurchased == true and bought[player] == DEV_PRODUCT_ID then
      pcall(function()  MarketplaceService:PromptPurchase(game.Players:GetPlayerByUserId(player), productIdUGC)
end)
        bought[player] = nil
    end
end)&lt;/pre&gt;

</content></entry><entry><id>artankor:en7XDerl3yz</id><link rel="alternate" type="text/html" href="https://teletype.in/@artankor/en7XDerl3yz?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=artankor"></link><title>image  Уязвимости PromptProductFinished можно исправить, используя ProcessReceipt. Мой пример обработки UGC-игр, которые позволяют покупать бесплатные UGC за Robux с помощью dev-продукта: (Пожалуйста, используйте только processreceipt, я тогда был не очен</title><published>2026-06-20T09:08:24.573Z</published><updated>2026-06-20T09:08:24.573Z</updated><summary type="html">&lt;img src=&quot;https://devforum.roblox.com/secure-uploads/uploads/original/5X/7/4/7/1/74711e8833623dd7b77ff0feacf4c0fa430647d0.jpeg&quot;&gt;image</summary><content type="html">
  &lt;figure id=&quot;qx94&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://devforum.roblox.com/secure-uploads/uploads/original/5X/7/4/7/1/74711e8833623dd7b77ff0feacf4c0fa430647d0.jpeg&quot; width=&quot;690&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HVBk&quot;&gt;image&lt;/p&gt;
  &lt;p id=&quot;XuBV&quot;&gt;Уязвимости PromptProductFinished можно исправить, используя &lt;a href=&quot;https://create.roblox.com/docs/production/monetization/developer-products#handling-purchases&quot; target=&quot;_blank&quot;&gt;ProcessReceipt&lt;/a&gt;. Мой пример обработки UGC-игр, которые позволяют покупать бесплатные UGC за Robux с помощью dev-продукта:&lt;br /&gt;(Пожалуйста, используйте только processreceipt, я тогда был не очень хорошим программистом, ха-ха)&lt;/p&gt;
  &lt;pre id=&quot;3RjB&quot;&gt;local DEV_PRODUCT_ID =tonumber(game:GetService(&amp;quot;ReplicatedStorage&amp;quot;):WaitForChild(&amp;quot;DEVPRODUCTID&amp;quot;).Value)
local productIdUGC = game:GetService(&amp;quot;ReplicatedStorage&amp;quot;):WaitForChild(&amp;quot;UGCID&amp;quot;).Value

local MarketplaceService = game:GetService(&amp;quot;MarketplaceService&amp;quot;)
local Players = game:GetService(&amp;quot;Players&amp;quot;)
local bought = {}

local function processReceipt(receiptInfo)
    local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
    print(player.Name .. &amp;quot; - dev product id&amp;quot;, receiptInfo.ProductId)

    local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
    if not player then
        return Enum.ProductPurchaseDecision.NotProcessedYet
    end

    if receiptInfo.ProductId == DEV_PRODUCT_ID then
        bought[receiptInfo.PlayerId] = DEV_PRODUCT_ID
        return Enum.ProductPurchaseDecision.PurchaseGranted
    end

    return Enum.ProductPurchaseDecision.NotProcessedYet
end

MarketplaceService.ProcessReceipt = processReceipt
local success, result = pcall(function()
    MarketplaceService.ProcessReceipt = processReceipt
end)

if not success then
    warn(&amp;quot;processreceipt:&amp;quot;, result)
end


MarketplaceService.PromptProductPurchaseFinished:Connect(function(player, productId, wasPurchased)
    if tonumber(productId) == DEV_PRODUCT_ID and wasPurchased == true and bought[player] == DEV_PRODUCT_ID then
      pcall(function()  MarketplaceService:PromptPurchase(game.Players:GetPlayerByUserId(player), productIdUGC)
end)
        bought[player] = nil
    end
end)&lt;/pre&gt;

</content></entry></feed>