Lua - attempt to call global 'contains' (a nil value)

北城以北 提交于 2021-02-08 12:05:41

问题


I'm interesting, if who know what is the problem of this code bellow. I always get this error:

''attempt to call global 'contains' (a nil value)''

Here is the code:

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])

If you've the solution please help me.

Thanks,

Michael


回答1:


Your have

if( contains(...) ) then

in your code segments. The function contains need to be defined for it to be called. The function definition is missing.

You can use something like this(if you want to find w inside the table):

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


来源:https://stackoverflow.com/questions/15850658/lua-attempt-to-call-global-contains-a-nil-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!