Let's say, for instance, that I want to give a player a certain amount of time, for instance, 2 hours (7200 seconds). I want this to apply across servers, so I assume DataStores are in play. I could use:
--if (something) then wait(7200) --insert timer expiration notification or something
But how would I make sure that the timer keeps going even after the player leaves the game? Is there a service that I can use for this? I would appreciate any assistance, however obvious the answer might be.
The trick to saving how much time has passed is not actually a timer in the background constantly changing, but instead it's just comparing
two numbers and subtracting them. These two numbers that you're comparing is the time your event started, and the current time. Subtracting the current time by the initial start time, will give you the difference
.
The only thing you need to save is the time in which the timer begins
, and from that point forward you'll just be subtracting the starting time, from the current time.
It's also important to use the appropriate time stamp when saving this data. You really shouldn't use tick for a situation like this, as tick returns local time. Instead, you should use os.time, which returns a "global" time stamp that should be the same on all systems.
Implementing this is pretty simple. For starters, obviously we'll save the time in which we want to start our counter off. So in this example, we'll just create a data store that saves that value to a key called "ServerTime", and we'll make the comparison as soon as the server starts.
-- Get the data store service local datastore = game:GetService("DataStoreService") -- Create a new data store local data = datastore:GetDataStore("GameData") -- Check for a key called "ServerTime", and if one doesn't exist, then set one. local serverTime = data:GetAsync("ServerTime") if serverTime == nil then data:SetAsync("ServerTime", os.time()) -- Set the initial time else -- os.time() - serverTime will return how many seconds have passed local difference = os.time() - serverTime print(difference .. " seconds have passed") --If the amount of seconds is >= 60*5 seconds (or 5 minutes) then... if difference >= 60*5 then print("Time up!") end end
Hope this helped, let me know if you have any questions.