目前正在尝试脚本化一个游戏,但我不明白如何调试这段代码

我正在跟着一个关于脚本编写的Youtube教程制作Roblox游戏,但在跟随的过程中,我用来标识值的变量"Status"在某一行(第39行)停止起作用了。我的输出框中显示如下:

21:16:36.197 - 自动备份文件sword game.rbxl被创建

21:16:36.715 - ServerScriptService.MainScript:39: 预期 ']' (以关闭在第37行处的 '['),但得到了 'Status'

21:16:38.617 - ScriptNavigationHandler : 当前没有可用的脚本。

我还没有学习过关于调试代码的内容,但如果有人能指出出错的地方,对我的脚本编写学习之旅将大有帮助。在这场对无形敌人的战斗中学习脚本编写。

-- 定义变量

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local ServerStorage = game:GetService("ServerStorage")

local MapsFolder = ServerStorage:WaitForChild("Maps")

local Status = ReplicatedStorage:WaitForChild("Status")

local GameLength = 60

-- 游戏循环

while true do

    Status.Value = "Waiting for enoughplayers"

    repeat wait(1) until game.Players.NumPlayers >=2

    Status.Value = "Intermission"

    wait(8)

    local plrs = {}

    for i, player in pairs(game.Players:GetPlayers()) do
        if player then
            table.insert(plrs,player)  -- Add each player into plrs table
        end
    end

    wait(2)

    local AvaliableMaps = MapsFolder:GetChildren()

    local ChosenMap = AvaliableMaps[math.random(1,#AvailableMaps)]

    Status.Value = ChosenMap.Name .. "Chosen"

    local ClonedMap = ChosenMap:Clone()
    ClonedMap.Parent = workspace

    -- 将玩家传送到地图

    local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")

    if not SpawnPoints then
        print("SpawnPoints not found!")
    end

    local AvailableSpawnPoints = SpawnPoints:GetChildren()

    for i, player in pairs(plrs) do
        if player then
            character = player.Character

            if character then
                -- 传送他们

                character:FindFirstChild("HumanoidRootPart").CFrame = AvailableSpawnPoints[1].CFrame
                table.remove(AvailableSpawnPoints,1)

                -- 给予剑

                local Sword = ServerStorage.Sword:Clone()
                Sword.Parent = player.Backpack


                local GameTag = Instance.new("BoolValue")
                GameTag.Name = "GameTag"
                GameTag.Parent = player.Character

            else
                -- 没有角色
                if not player then
                    table.remove(plrs,i)
                end
            end
        end

    end

end
点赞
用户1296374
用户1296374

在代码中,你缺少了一个闭方括号。

local ChosenMap = AvaliableMaps[math.random(1,#AvailableMaps)]
2020-05-06 02:37:32
用户2860267
用户2860267

Night94 指出了您破损代码的正确修复方法,但由于您的问题是关于学习调试,我将尝试帮助您理解错误信息。

21:16:36.715 - ServerScriptService.MainScript:39: 预期 ']'(在第37行关闭 '['),但得到了 'Status'

让我们一步一步解释一下: ServerScriptStorage.MainScript:39 这告诉我们文件在哪里,错误出现在哪一行。

那么让我们看看第39(至41)行,您会看到:

local ChosenMap = AvaliableMaps[math.random(1,#AvailableMaps)

Status.Value = ChosenMap.Name "Chosen"

接下来我们有:预期 ']'(在第37行关闭 '['),但得到了 'Status'

这意味着,某个时刻,代码需要一个方括号来关闭在第37行打开的方括号 AvaliableMaps[,但它找到了下一行代码 Status

因此,凭借这些信息,您应该了解出了什么问题:方括号被打开了,但从未关闭。它应该在下一行代码之前写到某个地方。

local ChosenMap = AvaliableMaps[math.random(1,#AvailableMaps)]
2020-05-07 00:58:34