Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование roblox studio Lua

Слава Король Ученик (234), на голосовании 4 месяца назад
Помогите написать скрипт на то, чтобы в игре у каждого игрока, который будет заходить, будет сохраняться время, которое он наиграл. Время должно быть в минутах. Например, игрок наиграл в игре 10 минут, он вышел, зашёл, и этот таймер сохраняется и продолжает расти. Пожалуйста, помогите!
Дополнен 5 месяцев назад
Голосование за лучший ответ
Леха Миронов Мастер (2309) 5 месяцев назад
 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)
Слава КорольУченик (234) 5 месяцев назад
В какой из пунктов его потом вставить?
Слава Король, StarterPlayer -> StarterScripts там должна быть приставка Scripts
Инспектор Жопидý Оракул (86597) 5 месяцев назад
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.
Слава КорольУченик (234) 5 месяцев назад
Можете помочь, пожалуйста, всё это написать? Я пытаюсь что-то поставить, не получается. Если есть возможность, можете показать, как оно должно выглядеть.
Zinarhack Zinarhack Xyinya Мастер (1023) 5 месяцев назад
 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
писал я сам, не ии! поэтому могу ответить/помочь еще с чем то
Похожие вопросы