PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attempt to index global 'self'



DasNeo
04.08.2013, 02:18
Hailo.

Ich versuche mich gerade an einem Printer, und möchte dort einen Countdown einbauen.

function updateTime()
local newTime = self:GetNWInt("PrTime") - 1
if(newTime < 0) then
self:SetNWInt("PrTime", 12)
else
self:SetNWInt("PrTime", newTime)
end
if(!timer.Exists("timerPrTime")) then
timer.Create("timerPrTime", 1, 0, updateTime)
end
print(self:GetNWInt("PrTime"))
end

Ich bekomme in der zweiten Zeile allerdings folgenden Error:
Attempt to index global 'self' (a nil value).

Woran liegt das? In den anderen Callbacks kann ich das self ja auch ohne Probleme benutzen?

Grüße,
DasNeo. :)

gamerpaddy
04.08.2013, 06:10
Gibt es self? Ist der Code in dem Entity code vom printer?
probier mal self.Entity, fals das nicht geht. mach mal ein print(self) rein und posten den Output hier.

DasNeo
04.08.2013, 07:17
Hallo gamerpaddy,

erstmal danke für deine Antwort. :)
Self sollte es ja eigentlich geben, da ich es davor schon genutzt habe. Wenn ich self printe, dann kommt "nil".
Habe nun einfach mal self weiter gegeben (updateTime(self)) und nun zeigt es mir bei dem Print das Entity an. Die Befehle führt er trotzdem nicht aus (weil er meint, dass es immer noch nil ist).

Der Code sieht gerade so aus:


function updateTime(self)
print(self)
newTime = self:GetNWInt("PrTime") - 1
if(newTime < 0) then
self:SetNWInt("PrTime", 12)
else
self:SetNWInt("PrTime", newTime)
end
if(!timer.Exists("timerPrTime")) then
timer.Create("timerPrTime", 1, 0, updateTime, self)
print(self)
end
end


Output:
Entity [106]...
Entity [106]...
nil

Fehler:
attempt to index local 'self' (a nil value)
(Zeile 3)

Woher das nil kommt weiß ich selbst nicht. :/

Gruß,
DasNeo. :)

gamerpaddy
04.08.2013, 08:07
Der findet 2 mal das Entity, beim 3ten mal nichtmehr
mach unter function updateTime(self)


if not self:IsValid() then return end

DasNeo
04.08.2013, 08:13
Hallo,

Jetzt geht der Fehler mit dem Nil von dieser Funktion aus. :/

gamerpaddy
04.08.2013, 11:13
dann änder sie in

if not self then return end
Da self an sich nicht exisitert.. Oben hatte ich den Fehler es auf Richtigkeit zu prüfen.. nicht auf existenz

DasNeo
04.08.2013, 11:26
Habe das Problem nun auf folgende weise gelöst:

function updateTime(self)
if not self then return end
if !(self:IsValid()) then return end
newTime = self:GetNWInt("PrTime") - 1
self:SetNWInt("PrTime", newTime)
print(newTime)
timer.Simple( 1, function() updateTime(self) end )
end
Danke dir trotzdem! :)

#Closerequest.

ALL YOU CAN EAT
13.08.2013, 10:48
Hallo,

„self“ ist deshalb ein nil Wert, weil sich "self" auf das Objekt bezieht.
Ich gehe davon aus das dein "Printer" ein Entity ist, dann müsste deine Funktion so aussehen:


function ENT:updateTime()

// Beispiel: self:GetPos()

end