Elseifs在第一次被忽略后被忽略

时间:2014-04-13 21:58:10

标签: lua

我试图在游戏中执行此功能,但我遇到了问题

基本上所有这些Container功能都是正确的,问题是lua本身。

唯一的问题是在完成第一个if之后忽略了最后两个elseifs

function withdrawAmmo(from, to) 
    local ammoCount = Container(to):ItemCount(ammoID) + Self.Ammo().count
    print("Current Ammo : " .. ammoCount)
    local last = Container.GetLast()
    Walker.Stop()
    Self.OpenDepot()
    last:UseItem(from, true)
    print(" Ammo in this backpack : " .. last:ItemCount(ammoID))
    while last:ItemCount(ammoID) > 0 or ammoCount < maxAmmo do
        last:MoveItemToContainer(0, to, 0, 100)
        wait(800, 1200)
    end
    if ammoCount < maxAmmo then
        EnoughAmmo = false
        repeat
            print "Trying to find more ammo"
            for spot = last:ItemCount() - 1, 0, -1 do
                if Item.isContainer(last:GetItemData(spot).id) then
                    last:UseItem(spot, true)
                    wait(400, 800)
                    break
                end
            end
            last:MoveItemToContainer(0, to, 0, 100)
            wait(800, 1200)
        until ammoCount >= maxAmmo or not Container.GetLast():isFull()
    elseif ammoCount >= maxAmmo then EnoughAmmo = true 
        print("Enough ammo, continuing") 
        Walker.Start()
    elseif not EnoughAmmo then 
        print("You don't have enough ammo!, stoping script...")
        Walker.Stop()
    end
end

Walker.Start()继续剧本,在第一次完成后,脚本继续以某种方式继续但不打印&#34;你没有足够的弹药!,停止脚本...& #34;或者&#34;足够的弹药,继续&#34;

1 个答案:

答案 0 :(得分:2)

你对if-elseif构造的作用存在根本性的误解。

它只执行条件一个下的代码。它将测试后续条件当且仅当第一个为假时。一旦找到条件为真,它将在该条件下执行代码,然后转到end之后的代码。

让我用一个例子来解释。您有一个if-elseif块,如下所示:

if y = z then
    print "y and z are equal (if)"
elseif y = z then
    print "y and z are equal (elseif)"
end

如果y = 2z = 2。当您的程序进入if-elseif块时,它将测试第一个条件(if y = z)。如果是,它将执行块中的任何内容。然后它将继续end之后的任何内容。 第二个条件(elseif y = z)从未经过测试,因为第一个是真的,第二个print语句永远不会被执行。

这是另一个示例,但此程序将打印y and z are equal两次:

if y = z then
    print "y and z are equal"
end

if y = z then
    print "y and z are equal"
end

你想做什么

因为您需要测试第二个和第三个条件,所以需要将它们放入单独的if块中,如下所示:

if ammoCount < maxAmmo then
    // do stuff here
end

if ammoCount >= maxAmmo then
    EnoughAmmo = true 
    print("Enough ammo, continuing") 
    Walker.Start()
end

if not EnoughAmmo then 
    print("You don't have enough ammo!, stoping script...")
    Walker.Stop()
end