我正在摆弄一些我在某些论坛上发现的代码,但我只学过Java,所以我有点偏离了我的元素。这是我正在玩的片段:
/run
function FnH()
for i=0,4 do
for j=1,GetContainerNumSlots(i) do
local t={GetItemInfo(GetContainerItemLink(i,j) or 0)}
if t[7]=="Herb" and select(2,GetContainerItemInfo(i,j))>=5 then
return i.." "..j, t[1]
end
end
end
end
这是使用WoW的插件API。我知道的很少,这是一个搜索并创建一个列表函数,列出让t [7] = Herb同时拥有超过5个的项目。如果Lua类似地执行数组,则t [0]应该是Item Name。我想要排除一个名为" blahblah"的项目,但我不了解Lua的布尔操作数。
在Java中,它将是
的内容if(itemX.getItemType()=="Herb" && itemX.getAmount()>5 && itemX.getName()!="blahblah")
do stuff
else skip to next item
我看到他们使用"和"和"或",但我怎么说"而不是这个"?
答案 0 :(得分:2)
如果Lua的数组类似,t [0]应为Item Name。
请注意,Lua将索引从索引1开始索引,而不是像其他语言一样索引,因此如果您有表local t = {"John", "Laura", "Herb"}
,那么t[1] == "John"
和t[3] == "Herb"
。
正如其他人所说,等效的Lua操作是and
,or
和not
,不等式写为~=
,因此您可以编写代码为:
if itemX.getItemType() == "Herb"
and itemX.getAmount() > 5
and itemX.getName() ~= "blahblah" then
-- do stuff
else
-- skip to next item
end
您还可以将最后一个条件更改为and not (itemX.getName()=="blahblah")
,因为它们是等效的。
另外,我对WoW API不确定,但那些itemX
调用应该是itemX:getItemType()
,itemX:getAmount()
等等(请注意使用:
表示法而不是.
符号);请参阅Lua编程中的OO-programming section。
答案 1 :(得分:2)
我只是将你的java代码直接翻译成Lua,你可以看看它是否对你有意义
if itemX.getItemType() == "Herb" and itemX.getItemAmount() > 5 and itemX.getItemName ~= "blahblah" then do
--do stuff here
end
else
--skip to the next item
end