Перший крок – відкрити гру Roblox Studio, після чого вам потрібно перейти до налаштувань, натиснувши кнопку «Додому».
Тепер натисніть налаштування гри
Далі натисніть вкладку безпеки
Нарешті, увімкніть служби API, це дозволить нам зберігати наші дані
Добре, тепер нам потрібно додати скрипт до служби скриптів сервера, натисніть великий плюс, а потім натисніть скрипт.
Давайте запустимо сервіс сховища даних та створимо сховище даних.
Щоб отримати службу сховища даних (допомагає нам зберігати дані) та отримати сховище даних, ми вводимо наступний код:
local datastoreservice = game:GetService("DataStoreService")
local mydatastore = datastoreservice:GetDataStore("mydatastore")
У першому рядку ми отримали змінну, яка отримує сервіс сховища даних, у другому рядку ми отримуємо сховище даних за допомогою функції :GetDataStore. Ви можете змінити назву сховища даних, змінивши рядок усередині цієї функції, проте майте на увазі, що нове сховище даних означатиме нові дані.
Добре, тепер ми можемо додати подію playeradded, яка спрацьовуватиме, коли гравець приєднається до гри, ми також можемо додати папку leaderstats із цілочисельним значенням для збереження, це цілочисельне значення міститиме нашу валюту.
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder",player)
leaderstats.Name = "leaderstats"
local coins = Instance.new("IntValue",leaderstats)
coins.Name = "Coins"
coins.Value = 0
end)
Добре, тепер нам потрібно отримати дані, які збережуть та встановлять значення гравця для його даних. Для цього нам потрібно отримати UserId гравця та отримати доступ до цих даних.
local playerid = "Player_" .. player.UserId
local data = mystore:GetAsync(playerid)
Ми використовуємо ідентифікатор користувача (UserId), тому що ваш ідентифікатор користувача не можна змінити. Ваш обліковий запис користувача Roblox можна змінити, тому, якщо ми використовуватимемо ім'я гравця, то якщо хтось змінить своє ім'я користувача, ваші старі дані перейдуть до нього.
Тепер ми перевіримо, чи є у нас дані. Якщо є, ми встановимо значення збережених даних, проте, якщо їх немає, ми встановимо наше значення на 0, що означає, що це новий гравець. Ми також будемо зберігати таблицю, тому значення має табличну форму. Скрипт перейде до даних і знайде значення під назвою «Монети».
if data then
coins.Value = data['Coins']
else
coins.Value = 0
end
Добре, тепер нам потрібно зберегти наші дані, ми щойно отримали дані, тепер нам потрібно їх зберегти, для цього нам потрібно додати подію видалення гравця,
game.Players.PlayerRemoving:Connect(function(player)
end)
Тепер ми додамо нашу таблицю, я назву дані таблиці, які потрібно зберегти, всередині функції add
local datatobesaved = {
Coins = player.leaderstats.Coins.Value
}
Нам також потрібно знову отримати UserId гравця, ми можемо використовувати ту саму змінну, помістивши її під таблицю.
локальний ідентифікатор_гравця = “Player_” … player.UserId
Тепер ми додамо функцію pcall, яка може перевірити, чи збереглися наші дані, якщо ні, ми збережемо наші дані, а потім зможемо перевірити, чи збереглися вони, чи ні. Щоб скористатися pcall, ми використовуємо функцію нижче:
local success, err = pcall(function()
mystore:SetAsync(playerid,datatobesaved)
end)
Перший параметр — це UserId гравця, другий — це річ(и), яку ми зберігаємо. Ми помістили наше значення в таблицю, тому ми зберігаємо всю таблицю.
Нарешті, тепер ми можемо перевірити, чи збережені дані чи ні, для цього ми використовуємо оператор if,
if success then
print("data saved!")
else
print("data failed to save!")
end
Ми використовуємо частину success у збереженні даних. Якщо ми вводимо if success (що означає збереження), то ми виводимо «дані збережено!». Однак, якщо збереження не вдається, ми використовуємо оператор else і виводимо «дані не вдалося зберегти!».
Тепер, нарешті, після всього зробленого, у нас має бути цей код:
local datastoreservice = game:GetService("DataStoreService")
local mystore = datastoreservice:GetDataStore("mydatastore")
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder",player)
leaderstats.Name = "leaderstats"
local coins = Instance.new("IntValue",leaderstats)
coins.Name = "Coins"
coins.Value = 0
local gems = Instance.new("IntValue",leaderstats)
gems.Name
= "Gems"
gems.Value = 0
local playerid = "Player_" .. player.UserId
local data = mystore:GetAsync(playerid)
if data then
coins.Value = data['Coins']
gems.Value = data['Gems']
else
coins.Value = 0
gems.Value = 0
end
end)
game.Players.PlayerRemoving:Connect(function(player)
local datatobesaved = {
Coins = player.leaderstats.Coins.Value;
Gems = player.leaderstats.Gems.Value;
}
local playerid = "Player_" .. player.UserId
local success, err = pcall(function()
mystore:SetAsync(playerid,datatobesaved)
end)
if success then
print("data saved!")
else
print("data faield to save!")
end
end)
Так, це все, ось посилання на урок https://www.youtube.com/c/ExtremelyRareNoob
Скрипт для проекту Grows Garden:
local mystore = datastoreservice:GetDataStore("mydatastore")
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder",player)
leaderstats.Name = "leaderstats"
local collected = Instance.new("IntValue",leaderstats)
collected.Name = "Collected"
collected.Value = 0
local items = Instance.new("IntValue",leaderstats)
items.Name = "Items"
items.Value = 0
local spaces = Instance.new("IntValue",leaderstats)
spaces.Name = "Spaces"
spaces.Value = 2
local gold = Instance.new("IntValue",leaderstats)
gold.Name = "Gold"
local playerid = "Player_" .. player.UserId
local data = mystore:GetAsync(playerid)
if data then
gold.Value = data['Gold']
else
gold.Value = 0
end
end)
game.Players.PlayerRemoving:Connect(function(player)
local datatobesaved = {
Gold = player.leaderstats.Gold.Value;
}
local playerid = "Player_" .. player.UserId
local success, err = pcall(function()
mystore:SetAsync(playerid,datatobesaved)
end)
if success then
print("data saved!")
else
print("data faield to save!")
end
end)
Для відображення поля Gold із таблиці лідерів створіть в StarterGui -> ScreenGui -> TextLabel -> LocalScript:
local leaderstats = player:WaitForChild("leaderstats")
local label = script.Parent
local money = leaderstats:WaitForChild("Gold")
label.Text = "$"..money.Value
local function updateMoney()
label.Text = "$"..money.Value
end
money:GetPropertyChangedSignal("Value"):Connect(updateMoney)