问题
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