Lua-Fehler: string erwartet, got nil
Ich brauche Hilfe mit meinen scripts.
Ich habe versucht, fast alles, aber ich kann nicht herausfinden, was das problem ist.
Ich will look.lua
um zu überprüfen, ob str = str.."\nIt's "..getPokemonAge(thing.uid).." old."
Kehrt mit der null, dann ignoriert es und geht weiter mit dem script.
Dies ist der Fehler, bekomme ich auf der Konsole:
[04/12/2012 20:43:42] [Error - CreatureScript Interface]
[04/12/2012 20:43:42] data/creaturescripts/scripts/look.lua:onLook
[04/12/2012 20:43:42] Description:
[04/12/2012 20:43:42] data/lib/011-string.lua:16: bad argument #1 to 'find' (string expected, got nil)
[04/12/2012 20:43:42] stack traceback:
[04/12/2012 20:43:42] [C]: in function 'find'
[04/12/2012 20:43:42] data/lib/011-string.lua:16: in function '(for generator)'
[04/12/2012 20:43:42] data/lib/011-string.lua:16: in function 'explode'
[04/12/2012 20:43:42] data/lib/age system.lua:2: in function 'getPokemonYears'
[04/12/2012 20:43:42] data/lib/age system.lua:42: in function 'getPokemonAge'
[04/12/2012 20:43:42] data/creaturescripts/scripts/look.lua:32: in function <data/creaturescripts/scripts/look.lua:1>
011-string.lua
local i, pos, tmp, t = 0, 1, "", {}
for s, e in function() return string.find(str, sep, pos) end do
tmp = str:sub(pos, s - 1):trim()
table.insert(t, tmp)
pos = e + 1
i = i + 1
end
Aussehen.lua
str = str.."\nIt's "..getPokemonAge(thing.uid).." old."
Alter-system.lua
function getPokemonYears(pokeball)
local data = string.explode(getItemAttribute(pokeball, "pokeballinfo"), "/")
-- data[1] = dia, data[2] = mes, data[3] = ano
local yearnow = math.floor(tonumber(os.date("%Y")))
local monthnow = math.floor(tonumber(os.date("%m")))
local daynow = math.floor(tonumber(os.date("%d")))
local ano = math.floor(tonumber(data[3]))
local mes = math.floor(tonumber(data[2]))
local dia = math.floor(tonumber(data[1]))
local years = 0
if yearnow == ano then years = monthnow-mes end
if yearnow > ano then years = (12-mes) + monthnow end
return years
end
function getPokemonMonths(pokeball)
local data = string.explode(getItemAttribute(pokeball, "pokeballinfo"), "/")
local yearnow = math.floor(tonumber(os.date("%Y")))
local monthnow = math.floor(tonumber(os.date("%m")))
local daynow = math.floor(tonumber(os.date("%d")))
local ano = math.floor(tonumber(data[3]))
local mes = math.floor(tonumber(data[2]))
local dia = math.floor(tonumber(data[1]))
if (yearnow == ano) and (monthnow==mes) and (daynow<dia+2.5) then months = 0 end
if (yearnow == ano) and (monthnow==mes) and (daynow>dia+2.5) then months = (daynow-dia)/2.5 end
if (yearnow == ano) and (monthnow>mes) then months = math.floor((30-dia)/2.5) + daynow/2.5 end
if (yearnow > ano) then
days = math.floor(monthnow*30+daynow)
months = math.floor(days/2.5)
end
if tostring(months):len() > 3 then months2 = tonumber(string.sub(tostring(months), 1, 3))
else months2 = months end
return months
end
function getPokemonAge(pokeball)
return ""..getPokemonYears(pokeball).." year, "..getPokemonMonths(pokeball).." months"
end
- Es klingt wie
getItemAttribute(pokeball, "pokeballinfo")
zurücknil
. - aber wie, wenn die Rückgabe nil einfach zu ignorieren und fortzufahren, wenn nicht retirning nil ist, dann vieuw
- aber wie, wenn die Rückgabe nil einfach zu ignorieren, und fahren Sie also, wenn nicht nil then return ""..getPokemonYears(pokeball).." Jahr, "..getPokemonMonths(pokeball).." Monaten" und bei seiner Rückkehr nil ist, dann nicht str = str.."\nIt ' s "..getPokemonAge(Sache.uid).." alt."
- Es gibt viel zu viel code, das Parsen und die nutzlos-code aus und erhalten Sie viel mehr Antworten.
- getan mahi als u bat
- wie sind Sie he ' Ing in den verschiedenen Dateien, die Sie erstellt haben?
- Können Sie einige Beispiel-Daten?
- Ihren pokeball zu haben scheint, die "pokeballinfo" - Attribut verpasst.
- Sie müssen Einrücken von code für Sie lesbar sein. Sie beschreiben, welche Dateien geladen werden, in welcher Reihenfolge. Sie zeigen an, was die Zeilennummern werden. Es ist fast unmöglich, herauszufinden, was der code überhaupt tun soll, denn Sie haben lediglich kleine, isolierte Schnipsel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass ich schließlich Ihre Frage zu verstehen, also werde ich das anders formulieren, wie ich es verstehe, und Sie können sagen, ob es das war, was Sie wollte.
Wie ich es verstehe, wissen Sie, dass Ihre Funktion
getPokemonAge
manchmal zu einem Fehler führt. Mehrere andere wies darauf hin, dass dieser Fehler vongetItemAttribute(pokeball, "pokeballinfo")
Rückkehrnil
.Nun ich denke, Sie wollen das Programm zur Rückgabe der text, wenn ein text produziert wurde, aber das ignorieren alle Fehler, die auftreten könnten, und zurück
nil
im Falle eines Fehlers.Diese kann getan werden, mit pcall (schauen Sie hier).
In meiner teilweisen umschreiben Ihrer getPokemonAge-Funktion rufe ich
getPokemonAgeInternal
(das ist Ihre ursprüngliche Funktion) mit pcall. Dann habe ich nur das Ergebnis überprüfen und zurücknil
auf Fehler.Bewerben kann man ähnlichen code, um Ihre
getPokemonYears
-Funktion stattdessen, wenn Sie möchten, schützen Sie diesen vor Fehlern.Wenn Ihr Fehler kommt immer aus
getItemAttribute(pokeball, "pokeballinfo")
wirdnil
sollten Sie nicht verwenden pcall, sondern einfach nur schauen, dass der Zustand und die Rückgabe nil, wenngetItemAttribute(pokeball, "pokeballinfo") == nil
.