


Программирование roblox studio Lua
Помогите написать скрипт на то, чтобы в игре у каждого игрока, который будет заходить, будет сохраняться время, которое он наиграл. Время должно быть в минутах. Например, игрок наиграл в игре 10 минут, он вышел, зашёл, и этот таймер сохраняется и продолжает расти. Пожалуйста, помогите!
Дополнен
Lua-скрипт для сохранения игрового времени в Roblox Studio
1. Хранение данных:
• Будем использовать Players:GetPlayerFromCharacter(), чтобы получить экземпляр игрока.
• Для хранения времени используем Instance:SetAttribute(). Атрибут будет называться "PlayTime" и будет хранить время в минутах.
• Мы будем хранить данные в ReplicatedStorage, чтобы они были доступны всем игрокам.
2. Скрипт:
Lua
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local function updatePlayTime(player)
local character = player.Character
if not character then return end
local playTime = character:GetAttribute("PlayTime") or 0
playTime = playTime + 1 -- Добавляем 1 минуту
character:SetAttribute("PlayTime", playTime)
-- Обновляем текстовую панель (если она есть)
if player.PlayTimeLabel then
player.PlayTimeLabel.Text = "Время игры: " .. playTime .. " минут"
end
end
Players.PlayerAdded:Connect(function(player)
-- Создаем текстовую панель для отображения времени игры (по желанию)
local playTimeLabel = Instance.new ("TextLabel")
playTimeLabel.Name = "PlayTimeLabel"
playTimeLabel.Text = "Время игры: 0 минут"
playTimeLabel.Parent = player.PlayerGui
playTimeLabel.Position = UDim2.new (0.5, 0, 0.5, 0) -- Позиция в PlayerGui
player.PlayTimeLabel = playTimeLabel
-- Обновляем время игры каждую секунду
while true do
updatePlayTime(player)
wait(1)
end
end)
Players.PlayerRemoved:Connect(function(player)
-- Сохраняем время игры в ReplicatedStorage
local character = player.Character
if character then
local playTime = character:GetAttribute("PlayTime") or 0
local dataStore = ReplicatedStorage:FindFirstChild("PlayTimeData")
if not dataStore then
dataStore = ReplicatedStorage: Instance.new ("Folder")
dataStore.Name = "PlayTimeData"
end
local playerData = dataStore:FindFirstChild(player.UserId)
if not playerData then
playerData = dataStore: Instance.new ("IntValue")
playerData.Name = player.UserId
end
playerData.Value = playTime
end
end)
3. Объяснение:
• updatePlayTime() функция:
o Получает персонажа игрока.
o Получает текущее игровое время (в минутах) из атрибута "PlayTime".
o Увеличивает время на 1 минуту.
o Сохраняет обновленное время в атрибут "PlayTime".
o Обновляет текстовую панель (если она есть).
• Событие PlayerAdded:
o Создает текстовую панель для отображения времени игры.
o Запускает цикл, который обновляет время игры каждую секунду с помощью updatePlayTime().
• Событие PlayerRemoved:
o Сохраняет время игры игрока в ReplicatedStorage.
local DataStoreService = game:GetService("DataStoreService")
local datastore = DataStoreService:GetDataStore("PlayerTime")
-- Присоединение игрока
game.Players.PlayerAdded:Connect(function(player)
local data = datastore:GetAsync(player.UserId)
if data then
player.TimePlayed = data.Time
else
player.TimePlayed = 0
end
-- Начало цикла обновления времени
player:GetPropertyChangedSignal("LastActivity"):Connect(function()
if player.TimePlayed < math.huge then
player.TimePlayed = player.TimePlayed + 1
datastore:UpdateAsync(player.UserId, {Time = player.TimePlayed})
end
end)
end)
-- Выход игрока
game.Players.PlayerRemoving:Connect(function(player)
datastore:UpdateAsync(player.UserId, {Time = player.TimePlayed})
end)
local service = game:GetService("DataStoreService")
local timestorage = service:GetDataStore("time")
game.Players.PlayerAdded:Connect(function(player)
local leader = Instance.new("Folder",player)
leader.Name= "leaderstats"
local timeval = Instance.new("IntValue",leader)
timeval.Name = "Time"
local sucess,currentlytime = pcall(function()
return timestorage:GetAsync(player.UserId)
end)
if sucess then
timeval.Value = currentlytime
end
end)
game.Players.PlayerRemoving:Connect(function(player)
local leader = player:FindFirstChild("leaderstats")
if leader then
local timeval = leader:FindFirstChild("Time")
local sucess , err = pcall(function()
timestorage:UpdateAsync(player.UserId)
end)
if not sucess then
print(err)
end
end
end)
while wait(1) do
for i,v in pairs(game.Players:GetPlayers()) do
local leader = v:FindFirstChild("leaderstats")
if leader then
local timeval = leader:FindFirstChild("Time")
if timeval then
timeval.Value += 1
end
end
end
end
писал я сам, не ии! поэтому могу ответить/помочь еще с чем то