ROBLOX — Монетизация — Developer Products

Автор: | 16 января, 2020
Поделиться...

Developer Products — вторая вариация монетизации, через продукты разработчики. Главное её отличие — многоразовое использование и отсутствие логирования на серверах Roblox. Как следствие второго замечания — сохранение результатов покупки лежит полностью на программисте игры.

Т.к. в документации описание весьма не понятное, то использовалось, в качестве базы, видео:

https://www.youtube.com/watch?v=ZeWVzK79Cuk

Идём во вкладку Game, далее жмём правой мышью на Developer Products и Product settings.

Нас перекидывает на сайт, где мы и создаём свои многоразовые продажи.

Как и в случае Gamepass — удалить созданный продукт нельзя. Т.е. он будет создан навсегда. Хотя его и можно будет отредактировать.

Соответственно жмём тут «Create new» (или Edit) и заполняем.

Название, описание, цена в робуксах и конечно изображение. К изображениям предъявляются требования аналогичные Gamepass.

После создания, нашему продукту будет присвоен соответствующий Id (на предыдущем скриншоте его видно). Так же этот Id можно будет получить и в самой студии нажав правой мышью по соответствующему продукту и скопировав его.

Переходим ко второй части — скриптованию. Оно также состоит из клиентской и серверной частей.

Собственно серверный скрипт:

local MS = game:GetService("MarketplaceService") -- сокращение для вызова сервиса

-- инициализируем подключение	
-- local DataStore2 = require(game.ServerScriptService.DataStore2) -- вариант локального модуля
local DataStore2 = require(1936396537) -- вариант подключаемого модуля

local function processReceipt(ReceiptInfo)
	local player = game:GetService("Players"):GetPlayerByUserId(ReceiptInfo.PlayerId) -- получаем Id игрока
	
	if not player then -- если не игрок, то вылетаем
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end
	
	-- если игрок найден, выполняем действия
	-- print(ReceiptInfo.PlayerId .. " buy " .. ReceiptInfo.ProductId)	
	local moneyStore = DataStore2("money", player)
	moneyStore:Increment(1000) -- даём 100 монет
	
	-- возвращаем, что покупка произведена
	return Enum.ProductPurchaseDecision.PurchaseGranted
	
end

MS.ProcessReceipt= processReceipt

Выпендриваться не будем и привяжем локальный скрипт к кнопке:

И собственно сам скрипт:

local MS = game:GetService("MarketplaceService") -- сокращения для вызова сервисов
local players = game:GetService("Players")

local PId = 946482776 -- Id продукта

local button = script.Parent -- обозначение к чему привязан наш скрипт

button.MouseButton1Down:Connect(function()
	local player = players.LocalPlayer -- локальный игрок
	MS:PromptProductPurchase(player,PId) -- выполнение запроса покупки	
end)

В скрипте SaveLoadScript соответственно добавляем отображение того, что мы можем изменить money в любой момент:

	-- для leaderstats обязательны!!!
	pointsStore:OnUpdate(function(newPoints) -- функция запускается каждый раз при изменнении значения в хранилище
		points.Value = newPoints
	end)	
	moneyStore:OnUpdate(function(newMoney) -- функция запускается каждый раз при изменнении значения в хранилище
		money.Value = newMoney
	end)

Ну вот собственно и всё. Запускаем и кликаем по кнопке:

Жмём Buy now
Покупка совершена
Значение Money увеличивается

Как всегда — можно увидеть результат в игре:

https://www.roblox.com/games/4587789852/NecroWorld


Поделиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *