我只想循环一次

我有一个循环的问题。我只想循环一次,但它却一直打印。如果我使用return,脚本将停止,但我不想这样做,因为每次脚本被触发我都需要重新启动服务器。你有什么解决这个问题的办法吗?

    local hit = GetPedLastDamageBone(ped)
    local chance = math.random(0,10)
    local ped = PlayerPedId()
    while true do
        Wait(0)
        if GetEntityHealth(ped) > 0 then
            if DMGByWeapon then
                if hit == 45454 or 33646 then
                    print("Foot")
                end
            end
        end
    end
点赞
用户2858170
用户2858170

我只想让它循环一次。

整个循环的目的就是执行多次代码块。

因此,如果您只想循环一次,就不需要循环。只需从代码中删除循环即可。

local hit = GetPedLastDamageBone(ped)
local chance = math.random(0,10)
local ped = PlayerPedId()
Wait(0)
if GetEntityHealth(ped) > 0 then
  if DMGByWeapon then
    if hit == 45454 or 33646 then
      print("Foot")
    end
  end
end

但它一直打印出来。

while true do end

是一个无限循环。条件始终为真,永远不会改变,因此循环将一直运行。

如果我使用 return,脚本将停止。

您的脚本文件会被编译为一个块。 被视为匿名函数的主体。return 将终止该函数,并因此终止您的脚本,除非您将其用于块中的函数定义中。

如果要提前停止循环,请使用 break

请阅读 Lua 手册并进行初学者教程。

if hit == 45454 or 33646 then
   print("Foot")
end

等同于

if hit == 45454 or true then
   print("Foot")
end

这简化为

if true then
  print("Foot")
end

或者简单地说

print("Foot")

除了 nilfalse 之外的任何值都为 true。因此,33646 在逻辑上为 true。与 true 进行 or 运算将得到 true

条件始终成立的 if 语句是无意义的。

您可以使用逻辑运算符将多个 if 语句合并到一起,而不是嵌套多个 if 语句。

因此,代替

if GetEntityHealth(ped) > 0 then
  if DMGByWeapon then
    if hit == 45454 or 33646 then
      print("Foot")
    end
  end
end

您可以编写

if GetEntityHealth(ped) > 0 and DMGByWeapon then
  print("Foot")
end

但是,如果您真的想使用该 if 语句,则需要修复条件:

if hit == 45454 or hit == 33646 then
  print("Foot")
end
2021-01-26 17:27:33