Ich weiss ja nicht ob das noch aktuell ist, aber um dieses Problem generell zu umgehen muss man das Verhalten der Turtle umprogrammieren, sprich eigene 'gehe-nach' Befehle definieren.

Wenn die Turtle aus einem Programm heraus nach vorne gehen soll und der Weg blockert ist, dann wird der Schritt trotzdem als erfolgreich gemeldet, und das Programm läuft weiter. Um dies zu umgehen schreibts Du dir einen eigenen nach vorne gehen Befehl. z.B. so

function goF()  

   while turtle.forward()== false do
      if turtle.detect()== false then
         turtle.attack()
      else
         turtle.dig()
         sleep(0.5)
      end
   end
end

Mit dieser Funktion wird der Schritt nach vorne allerdings erzwungen, d.h. es wird alles aus dem Weg geräumt inklusive Kies und Sand, bis der Schritt nach vorne erfolgreich war. Wenn die Kröte also durch dein Grundstück läuft, mäht Sie alles nieder was Ihr im Weg ist. Ach so, sie muss mit einer Spitzhacke ausgerüstet sein, damit kann Sie alles abbauen und auch angreifen, wenn da ein Gegner steht.

Die Logik ist folgende, wenn Du nicht nach vorne gehen kannst und auch nichts detecten kannst, dann muss da ein Mob oder Spieler stehen, dann greife an und versuche wieder nach vorne zu gehen

Wenn Du nicht nach vorne gehen kannst, weill da irgendetwas detected worden ist, grabe es weg, warte ein wenig und versuch dann wieder nach vorne zu gehen.

...zur Antwort

Die Auslösezeiten, kurz und lang müssen festgelegt werden.

Wir sagen mal 'kurz' ist bis zu einer Sekunde,

'lang' ist alles was darüber ist.

--erstmal warten bis ein Signal kommt

while rs.getInput("right") == false do

  sleep(0.1) -- wir tun was in der schleife, damit CC nicht meckert.

end

-- jetzt liegt ein Signal an, also 'messen' wir die Dauer

dauer= 0

while rs.getInput("right")== true do

   sleep(0.1)

   dauer=dauer + 0.1

   -- wenn das Signal nach einer Sekunde immer noch anliegt, schicken wir ein Signal nach links raus

   if dauer > 1 then  -- hier wird die grenze zwischen kurz / lang definiert

       rs.setOutput("left", "true")

   end

end

--  jetzt warten wir solange, bis das Signal erlischt.

     while rs.getInput("right")== true

         sleep(0.1)

     end

-- Signal  ist wieder weg, also schalten wir auch das Redstone Signal wieder aus

     rs.setOutput("left", "false")

Spätestens hier fehlt mir die info für den 'äusseren Rahmen', soll die Funktion sich selber immer wieder aufrufen, oder was passiert da sonst noch. In welchen Kontext findet das Ganze statt ?

p.s.: ich hab nix getestet, das ist einfach so runtergeschrieben

   

  

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.