如何修复这个 Roblox Lua 脚本中的多人游戏问题?

我的脚本只会把道具和传送门给一个玩家。 就算我把 i = 1 改成一个更高的数字,它也只会以那个人数开始小游戏,并且和 i = 1 时一样。我在网上查询过并向其他我认识的开发者提问,但他们都无法修复这个问题,所以我想问问大家。 请尽量帮助我...

while true do
  wait(5)
  local m = math.random(1,6)
  local g = math.random(1,4)
  local player = game.Players:GetChildren()
  for i = 1, #player do
    msg = Instance.new("Message")
    msg.Parent = nil
    --Minigame1
    msg.Parent = game.Workspace
    msg.Text = "正在选择地图."
    wait(0.5)
    msg.Text = "正在选择地图.."
    wait(0.5)
    msg.Text = "正在选择地图..."
    wait(0.5)
    msg.Text = "正在选择地图."
    wait(0.5)
    msg.Text = "正在选择地图.."
    wait(0.5)
    msg.Text = "正在选择地图..."
    wait(0.5)
    msg.Text = "正在选择地图."
    wait(0.5)
    msg.Text = "正在选择地图.."
    wait(0.5)
    msg.Text = "正在选择地图..."
    wait(0.5)
    msg.Text = "地图编号" ..m.. "!!!"
    wait(3)
    msg.Text = game.Lighting.Minigames["Minigame"..m].MapName.Value
    wait(3)
    msg.Text = game.Lighting.Minigames["Minigame"..m].Description.Value
    wait(3)
    game.Lighting.Minigames["Minigame"..m]:clone().Parent = game.Workspace
    wait(3)
    player[i].Character:MoveTo(Vector3.new(-24.19, 1, -14.69))
    msg.Text = "正在选择小游戏."
    wait(0.5)
    msg.Text = "正在选择小游戏.."
    wait(0.5)
    msg.Text = "正在选择小游戏..."
    wait(0.5)
    msg.Text = "正在选择小游戏."
    wait(0.5)
    msg.Text = "正在选择小游戏.."
    wait(0.5)
    msg.Text = "正在选择小游戏..."
    wait(0.5)
    msg.Text = "正在选择小游戏."
    wait(0.5)
    msg.Text = "正在选择小游戏.."
    wait(0.5)
    msg.Text = "正在选择小游戏..."
    wait(0.5)
    msg.Text = game.Lighting.Minigames["Minigame"..m]["Mode"..g].Value
    wait(2)
    msg.Text = game.Lighting.Minigames["Minigame"..m]["ModeDescription"..g].Value
    wait(5)
    msg:remove()
    game.Lighting.Minigames["Minigame"..m]["Tool"..g]:Clone().Parent =
    player[i].Backpack
    wait(60)
    msg.Parent = game.Workspace
    msg.Text = "游戏结束"
    wait(3)
    player[i].Character:MoveTo(Vector3.new(-168.742, 148.7, -26.169))
    msg:remove()
    game.Workspace["Minigame"..m]:Destroy()
    if player[i].Backpack:FindFirstChild("Tool1") or
        player[i].Backpack:FindFirstChild("Tool2") or
        player[i].Backpack:FindFirstChild("Tool3") or
        player[i].Backpack:FindFirstChild("Tool4") then
      player[i].Backpack.Tool1:Remove()
      player[i].Backpack.Tool2:Remove()
      player[i].Backpack.Tool3:Remove()
      player[i].Backpack.Tool4:Remove()
    end
    if player[i].Character:FindFirstChild("Tool"..g) then
      player[i].Character.Tool1:Destroy()
      player[i].Character.Tool2:Destroy()
      player[i].Character.Tool3:Destroy()
      player[i].Character.Tool4:Destroy()
    end
  end
end
点赞
用户11405174
用户11405174
这个脚本有很多问题,但我只会专注于那些能立刻帮助你解决问题的——如果你想清理你的代码,请前往 [Code Review](https://codereview.stackexchange.com/)。

local player = game.Players:GetChildren() --在这里编写代码 for i = 1, #player do player[i].Character:MoveTo(Vector3.new(-24.19, 1, -14.69)) game.Lighting.Minigames["Minigame"..m]["Tool"..g]:Clone().Parent = player[i].Backpack end --更多的代码会在这里 for i = 1, #player do player[i].Character:MoveTo(Vector3.new(-168.742, 148.7, -26.169)) if player[i].Backpack:FindFirstChild("Tool1") or player[i].Backpack:FindFirstChild("Tool2") or player[i].Backpack:FindFirstChild("Tool3") or player[i].Backpack:FindFirstChild("Tool4") then player[i].Backpack.Tool1:Remove() player[i].Backpack.Tool2:Remove() player[i].Backpack.Tool3:Remove() player[i].Backpack.Tool4:Remove() end if player[i].Character:FindFirstChild("Tool"..g) then player[i].Character.Tool1:Destroy() player[i].Character.Tool2:Destroy() player[i].Character.Tool3:Destroy() player[i].Character.Tool4:Destroy() end end

```

以下是应该在for循环中的唯一内容。其余部分应仅仅运行一次,因此不应该在循环中 - 因此,我已经在应该有其余代码的地方添加了注释(为了节省空间),只留下应该循环的内容。

你的问题是你为每个玩家单独运行所有的信息和wait命令。根据游戏中玩家的数量,你将有多个循环,但它们不会同时运行,因此你会逐个经过整个脚本,首先处理玩家1,然后是玩家2,然后是玩家3等。由于你的游戏似乎每轮只持续60秒,这意味着玩家1获得一轮工具,然后是玩家2,然后是玩家3等。

如果你将所有这些移出循环,就像我上面所做的那样,并且只留下移动玩家和销毁他们的工具的部分(但是不添加?看起来好像有代码丢失了),代码应该能够正常工作。

2019-11-19 11:08:18