【问题标题】:GetPlayers not working on server side scriptGetPlayers 不能在服务器端脚本上工作
【发布时间】:2020-04-29 00:20:23
【问题描述】:

我正在 Roblox 学习 lua 制作游戏。我有这个从他们的开发者网站获得的代码示例。

Players = game:GetService("Players")
for i, player in pairs(Players:GetPlayers()) do
    print(player.Name)
end

当我将其粘贴到本地脚本中时,此代码有效,但当我将其粘贴到服务器端脚本时无效。我没有收到错误,但没有打印任何内容。我想知道为什么会这样,以及我需要使用什么代码从服务器端脚本中获取所有玩家。谢谢

编辑 ---------------------------------------------- ----

我也尝试在服务器端脚本和本地脚本上运行此代码:

local players = game.Players:GetChildren()

print(typeof(players))

当此代码在本地脚本上运行时,它会返回:table.当我在服务器端脚本上运行它时,我什么也没得到。这正常吗?

【问题讨论】:

  • “它不起作用”是解释问题的最糟糕的方式。它会抛出异常吗?如果是,消息和堆栈跟踪是什么?它返回失败吗?如果有,是什么? GetService 是否返回有效的玩家对象? GetPlayers() 结果是空表吗? player.Name 有错误的名字吗?空名?没有名字?它是否正在运行,但您没有看到它打印到标准输出?我对 roblocks lua 编程没有任何经验(我有很多 lua 经验)。我只是想解释为什么“它不起作用”是最没有帮助的问题信息,永远不要仅仅这么说
  • 你说得对,我来编辑
  • 另一个需要检查的有价值的信息是这个脚本在哪里?根据 (developer.roblox.com/en-us/api-reference/class/Script),脚本必须是 Workspace 或 ServerScriptStorage 的后代。否则它根本不会执行脚本。
  • 我只用工作场所的子脚本和 serverservice 的子脚本尝试了这个。都不工作
  • 对于编辑中的代码示例,输出中根本没有出现任何内容是不寻常的。脚本没有被禁用是吗?

标签: lua local server-side roblox


【解决方案1】:

我相信您遇到了时间问题。 当您将其作为 LocalScript 运行时,游戏流程是:

  1. 服务器启动,玩家人数 = 0
  2. 玩家加入,玩家数量 = 1
  3. Lo​​calScript 运行 - 打印出所有 1 个玩家的列表

当您将其作为服务器脚本运行时,游戏流程是:

  1. 服务器启动,玩家人数 = 0
  2. 脚本运行 - 打印出所有 0 个玩家的列表

如果您要将示例修改为如下所示:

Players = game:GetService("Players")
print(string.format("Listing all %d player names :", #Players:GetPlayers()))
for i, player in pairs(Players:GetPlayers()) do
    print(i, "- ", player.Name)
end
print("Done listing names")

你应该会在输出中看到这个:

Listing all 0 player names :
Done listing names

【讨论】:

  • 嗨,我想你可能是对的,我让它最终工作的唯一方法是将 for 循环包装在 PlayerAdded 事件中。问题仍然存在,如何在不这样做的情况下使其工作?
  • @Paul,你需要一种方法在玩家加入后触发这个循环。你想触发什么行为?将游戏中的动作触发到服务器脚本的一种方法是使用 RemoteEvents (developer.roblox.com/en-us/api-reference/class/RemoteEvent)。所以 1) 在 Workspace 或 ReplicatedStorage 中创建一个 RemoteEvent。 2) 不要在脚本中使用 PlayerAdded 事件,而是连接到 RemoteEvent 的 OnServerEvent。 3) 使用另一个脚本或LocalScript 调用RemoteEvent 的FireServer() 函数。这可能是当您在简单的 gui 中触摸一个部件或单击一个按钮时。
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 2015-01-16
  • 2019-11-08
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2012-10-03
相关资源
最近更新 更多