Posted 09 January 2013 - 08:00 AM
Sorry to be here again but i just cant get it working.
I have a Variable and i want to edit it from a API, but get the Info:
"turtleAPI:117: attempt to perform arithmetic __add on nil and number"
The operation im diong is PosZ = PosZ + 1 (Line 117 in API)
If i do print(tostring(PosZ)) i get the correct number shown.
Here are the Code parts:
And in the API:
Full Code Turtle (Warning bad written and not sorted by now)
PosX, PosY, PosZ = 0, 0, 0
–Blickrichtung = nil
– Turtle Testing
– API laden
os.loadAPI("turtleAPI")
– Rednet Modem einschalten
rednet.open("right")
– Debuging ID anzeigen, kleine Tests
shell.run("id")
–turtleAPI.Test()
– Variablen erstellen / Beschreiben
EigendeID = turtleAPI.getID()
print("Habe Eigende ID "..EigendeID.." vermerkt")
– Kurze Pause um rednet Flutung zu vermeiden
print("Gehe schlafen")
print("Habe "..tostring(turtleAPI.waitRandom()).." Sekunden geschlafen")
print("Frage Server ID an")
ServerID = turtleAPI.getServerID()
print("Habe ServerID: "..ServerID)
print("Frage Position an")
PosX, PosY, PosZ = turtleAPI.getPosition()
–PosX, PosY, PosZ = gps.locate(2, true)
print("Habe Position X: "..tostring(PosX)..", Y: "..tostring(PosY)..", Z: "..tostring(PosZ).." vermerkt")
Himmelsrichtung = turtleAPI.getRichtung(PosX, PosY)
print("Schaue in Richtung "..tostring(Himmelsrichtung))
– Erste Bewegungen
print(tonumber(PosZ))
turtleAPI.up()
sleep(5)
turtleAPI.down()
– Benötigte Daten gesammelt. Anmeldung an Server
–[[ Startverzögung Random
print("Bin kurz schlafen")
Num = math.random(1,10)
sleep(Num / 10)
print("Habe geschlafen "..(Num / 10).." Sekunden")
]]–
Full Code API (Not as bad as the Turtle but still bad)
– Test API (drehen des Turtle)
function Test()
i = 0
for i=1, 10 do
turtle.turnRight()
end
return "true"
end
function waitRandom()
local Random = (math.random(1, 10) / 10)
sleep(Random)
return Random
end
function getID()
return os.getComputerID()
end
function getServerID()
– Sollte bereits jemand den Server angefragt habe an Request ranhängen
Server, Nachricht = rednet.receive(1)
– Wenn noch niemand Server angefragt selber anfragen
local i = 0
while Nachricht ~= "Ich bin Server!" do
if i == 0 then
rednet.broadcast("Wer ist hier Server?")
i = 25
end
i = i - 1
Server, Nachricht = rednet.receive(0.2)
end
return Server
end
function getPosition()
local tPosX, tPosY, tPosZ = gps.locate(2, true)
return tPosX, tPosY, tPosZ
end
function getRichtung(altPosX, altPosY)
if tostring(altPosY) == "nil" then
altPosX, altPosY = gps.locate(2, true)
print("Habe Position angefragt")
end
– Sich um einen Block in belibige Richtung bewegen
local altPosZ = 0
local neuPosZ = 0
local Richtung = 0
local BenHilfe = 0
i = 0
while turtle.detect() and BenHilfe == 0 do
if i == 4 then
if Richtung == 0 then
if turtle.up() then
i = 0
neuPosZ = neuPosZ +1
else
while neuPosZ ~= altPosZ do
turtle.down()
neuPosZ = neuPosZ - 1
end
if turtle.down() ~= true then
BenHilfe = 1
end
end
else
if turtle.down() then
i = 0
neuPosZ = neuPosZ +1
else
BenHilfe = 1
end
end
end
turtle.turnRight()
i = i +1
end
if BenHilfe == 0 then
print("Habe Bewegungsmöglichkeit gefunden")
turtle.forward()
neuPosX, neuPosY = gps.locate(2, true)
if neuPosX == altPosX then
if neuPosY < altPosY then
dreturn = 1
else
dreturn = 3
end
else
if neuPosX < altPosX then
dreturn = 0
else
dreturn = 2
end
end
turtle.back()
while neuPosZ ~= 0 do
if Richtung == 0 then
turtle.down()
neuPosZ = neuPosZ -1
else
turtle.up()
neuPosZ = neuPosZ -1
end
end
else
rednet.broadcast("Hilfe, bin eingegraben")
end
return dreturn
end
function up()
if turtle.up() then
PosZ = PosZ + 1
return true
else
return false
end
end
function down()
if turtle.down() then
PosZ = PosZ - 1
return true
else
return false
end
end
Need more Info: Please ask, i will try to help you helping me :)/>
I have a Variable and i want to edit it from a API, but get the Info:
"turtleAPI:117: attempt to perform arithmetic __add on nil and number"
The operation im diong is PosZ = PosZ + 1 (Line 117 in API)
If i do print(tostring(PosZ)) i get the correct number shown.
Here are the Code parts:
....
Ausstattung = "Axt"
PosX, PosY, PosZ = 0, 0, 0
--Blickrichtung = nil
.....
.....
-- Erste Bewegungen
print(tonumber(PosZ))
turtleAPI.up()
sleep(5)
........
And in the API:
......
function up()
if turtle.up() then
PosZ = PosZ + 1
return true
else
return false
end
end
.......
Full Code Turtle (Warning bad written and not sorted by now)
Spoiler
Ausstattung = "Axt"PosX, PosY, PosZ = 0, 0, 0
–Blickrichtung = nil
– Turtle Testing
– API laden
os.loadAPI("turtleAPI")
– Rednet Modem einschalten
rednet.open("right")
– Debuging ID anzeigen, kleine Tests
shell.run("id")
–turtleAPI.Test()
– Variablen erstellen / Beschreiben
EigendeID = turtleAPI.getID()
print("Habe Eigende ID "..EigendeID.." vermerkt")
– Kurze Pause um rednet Flutung zu vermeiden
print("Gehe schlafen")
print("Habe "..tostring(turtleAPI.waitRandom()).." Sekunden geschlafen")
print("Frage Server ID an")
ServerID = turtleAPI.getServerID()
print("Habe ServerID: "..ServerID)
print("Frage Position an")
PosX, PosY, PosZ = turtleAPI.getPosition()
–PosX, PosY, PosZ = gps.locate(2, true)
print("Habe Position X: "..tostring(PosX)..", Y: "..tostring(PosY)..", Z: "..tostring(PosZ).." vermerkt")
Himmelsrichtung = turtleAPI.getRichtung(PosX, PosY)
print("Schaue in Richtung "..tostring(Himmelsrichtung))
– Erste Bewegungen
print(tonumber(PosZ))
turtleAPI.up()
sleep(5)
turtleAPI.down()
– Benötigte Daten gesammelt. Anmeldung an Server
–[[ Startverzögung Random
print("Bin kurz schlafen")
Num = math.random(1,10)
sleep(Num / 10)
print("Habe geschlafen "..(Num / 10).." Sekunden")
]]–
Full Code API (Not as bad as the Turtle but still bad)
Spoiler
– API für die Turtles– Test API (drehen des Turtle)
function Test()
i = 0
for i=1, 10 do
turtle.turnRight()
end
return "true"
end
function waitRandom()
local Random = (math.random(1, 10) / 10)
sleep(Random)
return Random
end
function getID()
return os.getComputerID()
end
function getServerID()
– Sollte bereits jemand den Server angefragt habe an Request ranhängen
Server, Nachricht = rednet.receive(1)
– Wenn noch niemand Server angefragt selber anfragen
local i = 0
while Nachricht ~= "Ich bin Server!" do
if i == 0 then
rednet.broadcast("Wer ist hier Server?")
i = 25
end
i = i - 1
Server, Nachricht = rednet.receive(0.2)
end
return Server
end
function getPosition()
local tPosX, tPosY, tPosZ = gps.locate(2, true)
return tPosX, tPosY, tPosZ
end
function getRichtung(altPosX, altPosY)
if tostring(altPosY) == "nil" then
altPosX, altPosY = gps.locate(2, true)
print("Habe Position angefragt")
end
– Sich um einen Block in belibige Richtung bewegen
local altPosZ = 0
local neuPosZ = 0
local Richtung = 0
local BenHilfe = 0
i = 0
while turtle.detect() and BenHilfe == 0 do
if i == 4 then
if Richtung == 0 then
if turtle.up() then
i = 0
neuPosZ = neuPosZ +1
else
while neuPosZ ~= altPosZ do
turtle.down()
neuPosZ = neuPosZ - 1
end
if turtle.down() ~= true then
BenHilfe = 1
end
end
else
if turtle.down() then
i = 0
neuPosZ = neuPosZ +1
else
BenHilfe = 1
end
end
end
turtle.turnRight()
i = i +1
end
if BenHilfe == 0 then
print("Habe Bewegungsmöglichkeit gefunden")
turtle.forward()
neuPosX, neuPosY = gps.locate(2, true)
if neuPosX == altPosX then
if neuPosY < altPosY then
dreturn = 1
else
dreturn = 3
end
else
if neuPosX < altPosX then
dreturn = 0
else
dreturn = 2
end
end
turtle.back()
while neuPosZ ~= 0 do
if Richtung == 0 then
turtle.down()
neuPosZ = neuPosZ -1
else
turtle.up()
neuPosZ = neuPosZ -1
end
end
else
rednet.broadcast("Hilfe, bin eingegraben")
end
return dreturn
end
function up()
if turtle.up() then
PosZ = PosZ + 1
return true
else
return false
end
end
function down()
if turtle.down() then
PosZ = PosZ - 1
return true
else
return false
end
end
Need more Info: Please ask, i will try to help you helping me :)/>