2013-04-06 199 views
-1

我很有趣,如果谁知道这段代码的问题是什么。我总是得到这个错误:Lua - 试图调用全局'contains'(一个零值)

'试图调用全球“包含”(一个零值)“”

下面是代码:

state1={10,11,20,21,22,23,24,30,31,32,33,34,35,36,37,38,39,40,45,46,47,48,49,50,51,69,72,73,74,85} 
state3={78} 
state4={1,2,3,4,5,6} 

playerskin=initArray2(32,0) 
wepskin=initArray2(32,0) 

function getPlayerData(id,d) 
if (d=="team") then 
    if (player(id,"team")==1) then 
     return "red" 
    end 
    if (player(id,"team")==2) then 
     return "blu" 
    end 
end 
if (d=="class") then 
    return string.lower(tf2.classes.name[tf2.classes.class[id]]) 
end 
end 

function changeSkin(id,w) 
if (contains(state1,w)) then 
    if (playerskin[id]~=0) then 
     freeimage(playerskin[id]) 
    end 
    playerskin[id]=image("gfx/tf2/skins/"..getPlayerData(id,"team").." /"..getPlayerData(id,"class").."/"..getPlayerData(id,"team").."_"..getPlayerData(id,"class").."_1.png",1,0,200+id) 
end 
if (contains(state3,w)) then 
    if (playerskin[id]~=0) then 
     freeimage(playerskin[id]) 
    end 
    playerskin[id]=image("gfx/tf2/skins/"..getPlayerData(id,"team").."/"..getPlayerData(id,"class").."/"..getPlayerData(id,"team").."_"..getPlayerData(id,"class").."_3.png",1,0,200+id) 
end 
if (contains(state4,w)) then 
    if (playerskin[id]~=0) then 
     freeimage(playerskin[id]) 
    end 
    playerskin[id]=image("gfx/tf2/skins/"..getPlayerData(id,"team").."/"..getPlayerData(id,"class").."/"..getPlayerData(id,"team").."_"..getPlayerData(id,"class").."_4.png",1,0,200+id) 
end 
if (hat[id]~=0 and tf2.classes.hatunlock[id][tf2.classes.class[id]]~=0) then 
    freeimage(hat[id]) 
    hat[id]=image(crafts[tf2.classes.hatunlock[id] [tf2.classes.class[id]]].image,1,0,200+id) 
end 
end 

--[[function changeWeaponSkin(id,w) 
if (wepskin[id]~=0) then 
    freeimage(wepskin[id]) 
end 
wepskin[id]=image("gfx/tf2/skins/weapons/"..getPlayerData(id,"class").." /"..string.lower(tf2.classes.weaponnames[w])..".png",1,0,200+id) 
end 
]] 

addhook("select","tf2.classes.images") 
function tf2.classes.images(id,w) 
if (player(id,"armor")~=206) then 
    changeSkin(id,player(id,"weapontype")) 
    --changeWeaponSkin(id,w) 
end 
end 

addhook("spawn","tf2.classes.spawndebug") 
function tf2.classes.spawndebug(id) 
if (player(id,"armor")~=206) then 
    changeSkin(id,player(id,"weapontype")) 
    timer(10,"parse","lua changeSkin("..id..",player("..id..",\"weapontype \"))") 
    if (tf2.classes.hatunlock[id][tf2.classes.class[id]]~=0) then 
     timer(10,"parse","lua freeimage("..hat[id]..")") 
     timer(10,"parse","lua hat["..id.."]=image(crafts[tf2.classes.hatunlock["..id.."][tf2.classes.class["..id.."]]].image,1,0,200+"..id..")") 
    else 
     timer(10,"parse","lua freeimage("..hat[id]..")") 
     timer(10,"parse","lua hat["..id.."]=0") 
    end 
end 
end 

addhook("attack2","tf2.classes.spycloak") 
function tf2.classes.spycloak(id) 
if (tf2.classes.class[id]==9 and player(id,"armor")==0) then 
    if (playerskin[id]~=0) then 
     freeimage(playerskin[id]) 
    end 
    --[[ 
    if (wepskin[id]~=0) then 
     freeimage(wepskin[id]) 

如果你已经解决,请帮助我。

感谢,

迈克尔

回答

0

你有

if(contains(...)) then 
在你的代码段

。需要定义函数contains以便调用它。函数定义丢失。

您可以使用这样的事情(如果你想找到w表内):

function contains(tPassed, iValue) 
    for _, v in pairs(tPassed) do 
     if tonumber(v) == tonumber(iValue) then 
      return true 
     end 
    end 
    return nil 
end 
+0

感谢hjpotter92!我在代码之前添加了您在第一行写的代码,现在它正在工作!再次感谢:) – user2252099 2013-04-06 12:09:25

相关问题