我试图在游戏中执行此功能,但我遇到了问题
基本上所有这些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;
答案 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 = 2
和z = 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