在我的Roblox位置,我想得到一个表示当前时间的值,这个值在我的游戏中所有运行的服务器和位置都是一致的。
我已经知道了时间函数,但是该函数的文档似乎表明它仅在单个位置(或者可能只是一个place实例?)之间是一致的:
Returns returns the current place time in seconds.
还有滴答
返回UNIX时间中的时间,这是自1970年1月1日Unix时代以来的秒数。
但这还有另一个问题:
因为有些服务器运行在不同的时区(例如在美国和欧洲的服务器),tick()将在这些服务器上返回不同的时间。这个时间将在几个小时内不同,就像时区的差异一样。由于这一事实,它无法说明两个服务器之间的相对时间(例如,测量自播放器上次访问以来所用的时间)。
如何在游戏中的所有服务器和位置获得一致的时间值?(实际生活中的实际时间在这方面会很好。)
发布于 2014-06-14 19:56:12
最近对tick
进行了更新,增加了一些回答我问题的补充信息:
警告: tick()返回本地时间,服务器之间的时区可能会有所不同。在每个服务器上获得相同时间的一个可靠选项是调用os.time()。
在搜索os.time()
之后,我发现它实际上是LUA语言标准库的一部分。有关os
和os.time
的更多信息可以在这里找到:
发布于 2014-06-10 04:57:08
因为ROBLOX服务器可以使用不同的时区,所以您只需要使用一个知道它使用什么时区的服务器。
要从外部服务器获取数据,需要使用HttpService。
如果您有自己的服务器,您可以使用该服务器获取当前时间,如果没有,则可以查找能够给您当前时间的服务器。
下面是一个关于如何获得当前时间的示例:
local TimeServer = "http://www.timeapi.org/utc/now?%25Q"
local CurrentTime = Game:GetService("HttpService"):GetAsync(TimeServer, true)
local ServerTime = tick()
这将使"CurrentTime“变量包含自Unix以来的当前微秒。
您不希望每次需要时间时都使用HttpService,所以您希望使用以下内容:
function getTime()
return CurrentTime - (ServerTime * 1000) + tick()
end
但是,为了提高效率,将其放在名为"Time“的ModuleScript中Game.ServerScriptService中:
local TimeServer = "http://www.timeapi.org/utc/now?%25Q"
local CurrentTime = tonumber(Game:GetService("HttpService"):GetAsync(TimeServer, true))
local ServerTime = tick()
return function() return (CurrentTime / 1000) - ServerTime + tick() end
然后,您可以在以下任何脚本中使用它:
local getTime = require(Game.ServerScriptService.Time)
print(getTime())
wait(1)
print(getTime())
需要注意的是,如果您从一个勾()调用LocalScript函数,您将得到播放机的时间,而不是服务器的时间。这可能不是您通常想要的,但它可以用于查找播放机所在的时区,或者查看播放机的当前时间。
https://stackoverflow.com/questions/24131836
复制相似问题