roblox studio plr.Name == ""

我正在制作一个能够检测人物名称的脚本,但是我似乎无法让它工作。如果我的脚本中有任何错误,请指出,这会非常有帮助。

game.Workspace:WaitForChild("Console")
print("等待中")
game.Players.PlayerAdded:Connect(function(plr)
    print("连接成功")
    if game.Workspace.Console and plr.Name == "wojciechpa2007" then
        local Console = game.Lighting.Console:Clone()
        Console.Parent = plr.Startergui
        print("复制成功")
    elseif
        not game.Workspace.Console and plr.Name == "wojciechpa2007" then
            plr.Startergui.Console:Destroy()
            print("销毁成功")
    end
end)
点赞
用户2860267
用户2860267

嗨,

这个脚本中存在竞态条件。你的第一行 game.Workspace:WaitForChild("Console") 会阻止脚本的其余部分执行,直到对象被加载或超时发生。

这意味着可能有玩家在脚本监听 game.Players.PlayerAdded 信号之前加入游戏。

此外, StarterGui 并不存在于特定的玩家身上。它存在于游戏级别,并且是一个在玩家角色加载到游戏中时将其内容倾倒到玩家 PlayerGui 中的桶。

因此,要修复你的脚本,你可以尝试像这样:

-- 立即连接到 PlayerAdded 信号
game.Players.PlayerAdded:Connect(function(plr)
    print("玩家加入了!", plr.Name, plr.UserId)

    -- 如果 wojciechpa2007 加入了,则执行某些特殊操作
    if plr.Name == "wojciechpa2007" then
        print("wojciechpa2007 加入了!正在添加控制台!")

        -- 将特殊控制台添加到玩家的 PlayerGui 中以供加载时使用
        local Console = game.Lighting.Console:Clone()
        Console.Parent = plr.PlayerGui
     end
end)

这里有一些建议和需要注意的事项:

  • 更安全的方法是检查一个玩家的 UserId,而不是检查他们的名字。Roblox 允许你更改你的名字,但你的 UserId 总是相同的。
  • 将某些内容放入 StarterGui 会导致它在下一次角色加载时出现在 PlayerGui 中。但是,如果您的角色已经加载,您将在下一次重生时才会看到它。
  • 如果你的 Console 对象是一种 GUI 元素,请确保它是父对象的 ScreenGui 对象,然后再将其插入到玩家中。否则,它将无法显示。

希望这有所帮助!

2019-03-03 00:32:04