Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Variables
- local timeManager = {}
- local tempData = {}
- -- Services
- local coreModule = require(script:FindFirstAncestor("CoreModule"))
- local Players = coreModule.Services.Players
- local playerDataManager = coreModule:Get("GameModules.ServerGameManager.PlayerManager.PlayerDataManager")
- local orderedDataLibrary = coreModule:Get("Libraries.DataLibrary.OrderedDataLibrary")
- local leaderboardRemote = coreModule.SharedCore:Get("Libraries.RemoteLibrary"):GetRemote("GetLeaderboard")
- local startTimeRemote = coreModule.SharedCore:Get("Libraries.RemoteLibrary"):GetRemote("StartTime")
- local function find(tbl, value, key)
- if key then
- for k, v in pairs(tbl) do
- if v[key] == value then
- return v, k
- end
- end
- else
- return table.find(tbl, value)
- end
- end
- function format(Int)
- return string.format("%02i", Int)
- end
- function convertToHMS(Seconds)
- local Minutes = (Seconds - Seconds%60)/60
- Seconds = Seconds - Minutes*60
- local Hours = (Minutes - Minutes%60)/60
- Minutes = Minutes - Hours*60
- return format(Hours)..":"..format(Minutes)..":"..format(Seconds)
- end
- function timeManager:UpdateLeaderboard(player, datastore, value)
- orderedDataLibrary:SetAsync(datastore, player.UserId, value)
- end
- function timeManager:StartTiming(player)
- local playerData = playerDataManager:GetData(player)
- tempData[#tempData + 1] = {player = player.UserId, starttime = tick(), totaltime = nil}
- playerData.Values.TimeMode = true
- end
- function timeManager:StopTiming(player, optional)
- local playerData = playerDataManager:GetData(player)
- local index = find(tempData, player.UserId, 'player')
- if optional then
- playerData.Values.TimeMode = false
- startTimeRemote:FireClient(player)
- if index then
- table.remove(tempData, #index)
- end
- return
- end
- if index then
- index["totaltime"] = tonumber(index["starttime"]) - tick()
- print(index["totaltime"])
- playerData.Values.TimeMode = false
- startTimeRemote:FireClient(player)
- end
- end
- -- Initialize
- function timeManager:Initialize()
- coroutine.wrap(function()
- if #Players:GetPlayers() == 0 then
- Players.PlayerAdded:Wait()
- end
- wait(1)
- while true do
- pcall(function()
- for index, data in pairs (tempData) do
- local id, total = data.player, data.totaltime
- if total == nil then
- -- they never completed it
- else
- local timeToComplete = convertToHMS(total*60)
- timeManager:UpdateLeaderboard(id, "__Time", timeToComplete)
- table.remove(tempData, index)
- end
- end
- local StageData = orderedDataLibrary:GetSortedAsync("__Checkpoints", false, 18):GetCurrentPage()
- local TimeData = orderedDataLibrary:GetSortedAsync("__Time", false, 18):GetCurrentPage()
- for _, data in pairs (TimeData) do print(table.unpack(data)) end
- leaderboardRemote:FireAllClients(StageData, TimeData)
- end)
- wait(180)
- end
- end)()
- end
- --
- return timeManager
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement