【问题标题】:How do i fix the multiplayer in this roblox lua script?我如何在这个 roblox lua 脚本中修复多人游戏?
【发布时间】:2020-03-12 12:12:54
【问题描述】:

我的脚本只会传送并将工具提供给一名玩家。 即使我将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 = "Choosing Map."
    wait(0.5)
    msg.Text = "Choosing Map.."
    wait(0.5)
    msg.Text = "Choosing Map..."
    wait(0.5)
    msg.Text = "Choosing Map."
    wait(0.5)
    msg.Text = "Choosing Map.."
    wait(0.5)
    msg.Text = "Choosing Map..."
    wait(0.5)
    msg.Text = "Choosing Map."
    wait(0.5)
    msg.Text = "Choosing Map.."
    wait(0.5)
    msg.Text = "Choosing Map..."
    wait(0.5)
    msg.Text = "Map Number" ..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 = "Choosing Minigame."
    wait(0.5)
    msg.Text = "Choosing Minigame.."
    wait(0.5)
    msg.Text = "Choosing Minigame..."
    wait(0.5)
    msg.Text = "Choosing Minigame."
    wait(0.5)
    msg.Text = "Choosing Minigame.."
    wait(0.5)
    msg.Text = "Choosing Minigame..."
    wait(0.5)
    msg.Text = "Choosing Minigame."
    wait(0.5)
    msg.Text = "Choosing Minigame.."
    wait(0.5)
    msg.Text = "Choosing Minigame..."
    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 = "GAME END"
    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

【问题讨论】:

  • 所以当您的列表中有 10 个玩家并且您从 i = 5 开始时,您还有 10 个玩家吗?我很困惑“那个数量”是什么
  • 你等了整整一分半钟才让循环到达第二个玩家,我猜?
  • 是的,你仍然有 10 名玩家,数量是游戏开始所需的玩家数量,是的 aschepler
  • 请更具体地说明 a) 应该发生的事情和 b) 实际发生的事情 :)
  • 我不禁认为你只是把整个循环弄错了;你真的想一次为一个玩家从头到尾运行整个脚本吗?

标签: lua scripting roblox


【解决方案1】:

这个脚本有很多问题,但我只关注那些能立即帮助你解决问题的问题 - 如果你想清理你的代码,请前往Code Review

local player = game.Players:GetChildren()
--code here
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
--more code would go here
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 循环中的内容。其余的应该只运行一次,因此,不应该在 for 循环内 - 因此,我已经添加了 cmets 你的代码的其余部分应该是(为了空间)并且只留下应该的内容被循环。

您的问题是您正在为每个玩家单独运行所有消息和wait 命令。根据游戏中玩家的数量,您会有多个循环,但它们都不会同时运行,因此您需要为玩家 1、玩家 2 和玩家 3 遍历整个脚本。由于您的游戏似乎只有持续 60 秒的回合,这意味着玩家 1 获得一轮工具,然后玩家 2 获得一轮工具,然后玩家 3 获得一轮工具,等等。

如果您像我上面所说的那样将所有这些移出循环,只留下移动玩家并破坏他们的工具的部分(但不添加它们?似乎缺少代码),代码应该可以正常运行很好。

【讨论】:

  • 我很困惑我没有很多编码知识,我不明白你的意思请尝试让我更容易理解......对不起
  • 您目前为游戏中的每个玩家循环此脚本。但是,您运行在该循环中启动小游戏的所有脚本。因此,您的游戏当前运行一个带有i = 1 的小游戏,表示玩家 1 获得了所有工具,然后运行了一个带有 i = 2 的小游戏,表示玩家 2 获得了所有工具,依此类推。为了解决这个问题,除了工具和位置之外,把与小游戏相关的所有东西都移到循环之外,只留下循环内的重要部分。这就是我上面的脚本所做的。
  • 我很困惑抱歉!
  • 我已经在repl.it/@TehDindan/code-for-robloxdevnewbie 评论了我对您的代码所做的更改,由于我上面解释的原因,现在应该可以使其正常工作。希望这可以帮助您了解代码有什么问题,同时参考这个答案..
  • 它还会循环脚本并进行连续游戏吗?
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 2021-08-12
  • 2020-11-08
  • 2011-05-16
  • 2020-09-13
  • 2021-07-20
  • 2022-11-02
  • 2021-06-19
相关资源
最近更新 更多