函数出现“结束”部分不起作用的问题

出于某种原因,我认为错误信息告诉我要么去掉一个括号,要么添加一个括号,我很困惑。无论我如何更改,它总是告诉我括号应该代替什么或需要一个括号。 以下是代码:

local Ammo = MaxAmmo
local Reloading = false

script.Parent.Equipped:Connect(function(Mouse)
    Mouse.Icon = "rbxassetid://1008161057"
    local function Reload()
        Reloading = true
        Mouse.Icon = "rbxassetid://1008161057"
        wait(2)
        Ammo = MaxAmmo
        Reloading = false
        Mouse.Icon = "rbxassetid://1008161057"
    end
    script.Parent.Activated:Connect(function()
        if Ammo>0 and not Reloading then
            Ammo=Ammo-1
            if Mouse.Target.Parent:FindFirstChild("Humanoid") then
                if Mouse.Target == ("Head") then
                    print('head')
                    Mouse.Target.Parent.Humanoid:TakeDamage(40)
                else do
                    Mouse.Target.Parent.Humanoid:TakeDamage(20)
                    print('body')
                end
            end
        elseif Reloading == false then
            Reload()
        end
        print(Ammo)
    end)
    --local Input = game:GetService("UserInputService")
    --Input.InputBegan:Connect(function(Key)
        --if Key.Keycode == Enum.KeyCode.r and Reloading == false and Ammo~=MaxAmmo then
            --Reload()
        --end
    --end)
end)```
点赞
用户2858170
用户2858170

如果鼠标目标为“Head”则执行以下操作:

if Mouse.Target == ("Head") then
  print('head')
  Mouse.Target.Parent.Humanoid:TakeDamage(40)

否则执行以下操作:

else
  Mouse.Target.Parent.Humanoid:TakeDamage(20)
  print('body')
end

如果在你的代码中出现这种错误,需要添加 enddo 或者删除它。

要修复此类错误,需要计算所有需要 end 的关键字和所有 end 的数量,并查看是否相同。有些文本编辑器可以帮助你完成这个过程。

2020-06-09 12:39:06
用户3498218
用户3498218

你应该使用像 ZeroBraneStudio 或 IntelliJ Community(带有 EmmyLua) 这样的 IDE。

第一个问题:

if Mouse.Target.Parent:FindFirstChild("Humanoid") then
                if Mouse.Target == ("Head") then
                    print('head')
                    Mouse.Target.Parent.Humanoid:TakeDamage(40)
                else do
                    Mouse.Target.Parent.Humanoid:TakeDamage(20)
                    print('body')
                end
            end

你应该从 else do 中移除 do

第二个问题:

您将从此处获得“unexpected )”:

            print(Ammo)
        end)

这是因为在 if Ammo > 0 and not Reloading then 中您丢失了 end

结果代码应该像这样:

local Ammo = MaxAmmo
local Reloading = false

script.Parent.Equipped:Connect(function(Mouse)
    Mouse.Icon = "rbxassetid://1008161057"
    local function Reload()
        Reloading = true
        Mouse.Icon = "rbxassetid://1008161057"
        wait(2)
        Ammo = MaxAmmo
        Reloading = false
        Mouse.Icon = "rbxassetid://1008161057"
    end
    script.Parent.Activated:Connect(function()
        if Ammo > 0 and not Reloading then
            Ammo = Ammo - 1
            if Mouse.Target.Parent:FindFirstChild("Humanoid") then
                if Mouse.Target == ("Head") then
                    print('head')
                    Mouse.Target.Parent.Humanoid:TakeDamage(40)
                else
                    Mouse.Target.Parent.Humanoid:TakeDamage(20)
                    print('body')
                end
            elseif Reloading == false then
                Reload()
            end
            print(Ammo)
        end
    end)
    --local Input = game:GetService("UserInputService")
    --Input.InputBegan:Connect(function(Key)
    --if Key.Keycode == Enum.KeyCode.r and Reloading == false and Ammo~=MaxAmmo then
    --Reload()
    --end
    --end)
end)
2020-06-09 13:42:48