Computercraft Minecraft?

Hallo,

Kennt sich jemand mit Computercraft aus?

Weil ich weis nicht was ich falsch machen bei diesem Code kommt bei mir too Long withour yielding

Code:

shell.run("clear")

print("On which side is the modem connected?")

print()

print("Top")

print("Back")

print("Right")

print("Left")

print("Bottom")

while true do

event,side,x,y = os.pullEventRaw()

if event == "mouse_click" and x >= 1 and x<= 3 and y == 3 then

rednet.open("top")

break

elseif event == "mouse_click" and x >= 1 and x <= 4 and y == 4 then

rednet.open("back")

break

elseif event == "mouse_click" and x >= 1 and x <= 5 and y == 5 then

rednet.open("right")

print("GI")

break

elseif event == "mouse_click" and x >= 1 and x <= 4 and y == 6 then

rednet.open("Left")

break

elseif event == "mouse_click" and x >= 1 and x <= 6 and y == 7 then

rednet.open("bottom")

break

end

end

shell.run("clear")

a=0

b=0

c=0

d=0

e=0

f=0

g=0

h=0

while true do

term.setCursorPos(1,1)

term.setBackgroundColor(colors.black)

print("Wireless Redstone OUTPUT")

print()

-- SYSTEM 1 --

io.write("System 1: ")

term.setTextColor(colors.white)

term.setBackgroundColor(colors.red)

io.write("OFFLINE")

term.setBackgroundColor(colors.black)

io.write("   ")

term.setBackgroundColor(colors.green)

io.write("ONLINE")

term.setBackgroundColor(colors.black)

io.write("   ")

term.setBackgroundColor(colors.black)

if a == 1 then

io.write("Status: ")

term.setBackgroundColor(colors.green)

io.write("ONLINE ")

term.setBackgroundColor(colors.black)

else

io.write("Status: ")

term.setBackgroundColor(colors.red)

io.write("OFFLINE")

term.setBackgroundColor(colors.black)

end

-- SYTEM 2 --

io.write("System 2: ")

term.setTextColor(colors.white)

term.setBackgroundColor(colors.red)

io.write("OFFLINE")

term.setBackgroundColor(colors.black)

io.write("   ")

term.setBackgroundColor(colors.green)

io.write("ONLINE")

term.setBackgroundColor(colors.black)

io.write("   ")

term.setBackgroundColor(colors.black)

if b == 1 then

io.write("Status: ")

term.setBackgroundColor(colors.green)

io.write("ONLINE ")

term.setBackgroundColor(colors.black)

else

io.write("Status: ")

term.setBackgroundColor(colors.red)

io.write("OFFLINE")

term.setBackgroundColor(colors.black)

event1,side1,x1,y1 = os.pullEventRaw()

-- ERSTES --

if event1 == "mouse_click" and x1 >=11 and x1 <=17 and y1 == 3 then

-- REDNET AUSCHALTEN --

rednet.broadcast("0")

a = 0

elseif event1 == "mouse_click" and x1 >=22 and x1 <=27 and y1 == 3 then

-- REDNET ANSCHALTEN --

a = 1

rednet.broadcast("1")

elseif event1 == "mouse_click" and x1 >=11 and x1 <=17 and y1 == 4 then

-- REDNET AUSCHALTEN --

rednet.broadcast("3")

b = 0

elseif event1 == "mouse_click" and x1 >=22 and x1 <=27 and y1 == 4 then

-- REDNET ANSCHALTEN --

b = 1

rednet.broadcast("2")

end

end

--ZWEITES--

term.clear()

end

...zum Beitrag

Der "Fehler2 liegt wohl in der While schleife, da passiert zu lange nix. eine einfache Lösung ist ein sleep(0.5) einzubauen, damit in der Schleife wieder was passiert.

...zur Antwort

..nebenbei du kannst eine boolsche Variable mit variable= not variable flippen. Aus true wird false und aus false wird true. in dem PRG sieht das dann so aus:

if input == password then

print("Richtig!")

rs.setOutput(side, not inverted)

sleep(opentime)

os.reboot()

...

...zur Antwort

Bei mir kam kein Fehler... CC1.8

end of file expected, taucht meistens auf wenn Blöcke, die mit 'end' geschlossen werden, nicht richtig verschachtelt sind oder einfach ein 'end' zuviel da steht.

...zur Antwort

Im ersten Moment würde ich vermuten, dass Du versuchst auf ein Listenelement zuzugreifen welches nicht exisitiert. Hat eine Liste 6 Einträge, und ich schreib sowas wie a=liste[7] dann gibt's Mecker von LUA... Die Zahl in der Fehlermeldung gibt oft, aber nicht immer, die Zeile an, in der ein Fehler entdeckt wurde.

a nil value, eigentlich sacht Lua damit, dass es diesen Wert nicht gibt oder aus igrendwelchen Gründen unbekannt ist. Kann auch bei einem Funktionsaufruf vorkommen, wenn man sich verschrieben hat, turtle.turnReight() zum Beispiel oder retstone.setOutput("side")

...zur Antwort

Da ist wohl schon alles gesagt

...zur Antwort

Ich frag mich immer noch, wie ein LKW zwei fast 90Grad Kurven mit 70Kmh durch ein wenige Meter grosse Öffnung hinbekommen hat ohne umzufallen...

...zur Antwort

Ist dann ein Computer der Server und alle anderen Clients zeigen das nur an, oder kann ich an jeden Computer gehen und da die Anzeige ändern, sprich alle Ausgaben von allen Rechnern sollen immer synchronisiert werden ?

im ersten Fall sendet der Server immer wenn eine neue Adresse eingegeben und angezeigt wird, diese Adresse übers Modem an die zuhörenden Clients. Diese ändern dann wenn eine Nachricht, sprich Adresse empfangen wird die Anzeige von webdisplays. Die Clients brauchen also ein Programm welches beständig auf dem Nachrichtenkanal nach neuen zu anzeigenden Webseiten 'lauscht'.

Der zweite Fall ist ein wenig komplexer. Jeder Rechner muss immer auf eine neue Eingabe warten und gleichzeitig lauschen ob was neues kommt. Da read() immer wartet bis die Eingabe beendet ist, muss man wahrscheinlich einen neuen Thread aufmachen, um Eingabe & Lauschen parallel laufen zu lassen. Das sollte mit dem Coroutinen Mechanismus gehen....  

...zur Antwort

Ich würde den Kollegen, der sowas macht einfach mal freundlich darauf hinweisen, dass ich solches Verhalten nicht mag und er das bitte in meiner Gegenwart unterlassen soll. Hilft ungemein und ist wenn es in diesem Fall auch mal andere mithören ein klares Signal "Ich mach das nicht mit" Ob der, der lästert bekloppt oder irgendwas ist, spielt keine Rolle. Man muss nicht den Anderen in seiner Gänze verstehen um zu wissen, das man ein bestimmtes Verhalten nicht mag. Einfach Stellung beziehen, standhaft bleiben und sich nicht auf Nebendiskussionen einlassen. Hab mal im sozialen Bereich gearbeitet, da wird soviel gequtascht, man kommt ohne Abgrenzung gar nicht unbeschadet da durch...

...zur Antwort

Alles zu machen um anderen zu gefallen, das kann nur schiefgehn, weil es nicht von Dir kommt. Es entspringt nicht Deinem Wesen. Halt erstmal inne, leg eine Verschnaufpause ein, Du bist 'heissgelaufen". So wird das nix.

Such Dir ein Betätigungsfeld aus, wo Dich noch keiner kennt. Geh einfach auf Menschen zu. Freundlich aber bestimmt nicht aufdringlich sondern aus ehrlichem interesse. Da kommt dann sowieso schonmal nicht jede/r in Frage. Das muss man üben, das kann nicht jeder von Geburt an in gleichem Masse.

...zur Antwort

Ist nie verkehrt sich über andere Gedanken zu machen, doch sich selbst darf man dabei nicht verlieren. Sich den Kopf über andere zu zerbrechen bringt oft nix. Ist das überhaupt real was Ich denke was andere denken ? Einfach mal freundlich fragen du wirst überrascht sein, was da teilweise herauskommt und lernst nebenbei dich selbst (und andere natürlich) besser kennen. Aus der Selbsterkenntnis wächst dann die Selbstsicherheit. 

...zur Antwort

Du könntest durchprüfen lassen, ob sich das Kabel ansprechen lässt, wenn nicht, dann muss es an anderer Position angeschlossen sein. Dazu musst du aber den Error abfangen.   Hab's nur kurz bei Gockel gesucht,Stichwort  'Error Handling Computercraft'

Das ganze in einer Funktion, die alle Anschlüsse durchprüft und als Rückgabewert den Anschlussplatz wiedergibt oder so ähnlich. Hab gerade die 1.8.9 drauf, da läuft bundledCable nicht, sonst würd ichs mal durchtesten.

So stehts in der CC wiki:

http://www.computercraft.info/forums2/index.php?/topic/2649-error-handling/

local ok, val = pcall(someFunction)if ok then  print(val)else  print("Error")end
...zur Antwort

00 monitor = peripheral.wrap("top")
01 monitor.clear()
02 monitor.setCursorPos(1,1)
03 -- -----------------------------------------
04 aa = 1
05 bb = 1
06 -- -----------------------------------------
07 function check()
08 if
09 aa == 1
10 then
11 monitor.setBackgroundColour((colours.lime))
12 monitor.setCursorPos(1,1)
13 monitor.write(" ")
14 end
15 if
16 bb == 1
17 then
18 monitor.setBackgroundColour((colours.lime))
19 monitor.setCursorPos(1,1)
20 monitor.write(" ")
21 end
22 end

Aufbau: Computer mit einem Farbmonitor obendrauf

Also bei mir läuft das Programm durch, es passiert zwar nix, is aber auch kein Wunder denn die Funktion check() wird zwar definiert, aber nicht aufgerufen.

Zum Testen also noch einen Funktionsaufruf anhängen, zeile 23 heisst dann: check() 

Die If abfragen machen so wenig Sinn weil die letzte If abfrage letztlich die Farben setzt, alle vorherigen if's werden dadurch 'überschrieben'.

wenn du eine Auswahl if-abfrage möchtest im Sinne von 'Wenn aa=1 mache dies, wenn aa=2 dann mache jenes, wenn aa=3 mache was anderes usw.

dann benutze eine If -then-elseif abfrage z.b.

if aa== 1 then

.....

elseif aa==2 then

...

elseif aa==3 then

...

[optional] 

else -- hier kann der code drunter wenn aa weder 1,2 oder 3 war

...

end 

zu Beachten ist, das elseif zusammengeschrieben wird, nur dann ist es eine selektive Auswahl und nicht nur eine Aneinanderreihung von Abfragen.

Wenn ein Vergleich true war, also z.B. aa==2, wird der entsprechend Code ausgeführt und der if-Block beendet. Das Programm läuft nach dem if_end weiter.

...zur Antwort

Hier gab's mal ein ähnliches Problem, bei dem unten genannten Prg, gibt der Conputer nach RECHTS ein Signal aus, wenn ein Signal von LINKS länger als [signalverzoegerung in sekunden] eingeht. Das Signal wird solange ausgegeben, bis der Eingang wieder abfällt.

Müsste nur noch um die anderen Eingänge erweitert werden und der Ausgang auf das BundledCable gelenkt werden. 

Hoffe Du kannst was damit anfangen.

Gruss, Hotte

while true do
signalverzoegerung= 2
ausloeser= false

-- warten bis ein Signal kommt
while rs.getInput("left")== false do
   sleep(0.2)
end 

-- Signallänge messen
while rs.getInput("left") == true and ausloeser == false do
    sleep(0.2)
    signalverzoegerung= signalverzoegerung - 0.2 
    if signalverzoegerung < 0 then
    ausloeser= true
    end
end

-- wenn der Ausloeser gesetzt wurde
if ausloeser== true then
    -- Ausgangssignal setzen
    rs.setOutput("right", true)
    --warten bis der Eingang wieder abfällt
    while rs.getInput("left") == true do
       sleep(0.2)
    end
    -- Ausgang zurücksetzen
   rs.setOutput("right", false)
end

end

...zur Antwort

Hy,

ich hab selber 10 Jahre in einem T-Shirt Laden gearbeitet. Damit ist gemeint, dass du im Grafikprogramm deiner Wahl ein Dokument in 300 dpi erstellst und zwar in Originalgrösse (Ausnahme Vektordaten, da ists egal)

Danach machste einen Screenshot von deinem Motiv, der gibt nicht mehr als 96dpi oder so her, importierst das in deine 300 dpi vorlage vergösserst das importierte auf die gewünschte Ausgabegrösse. Das wird natürlich schwammig/unscharf. kann man nicht verhindern, hängt aber ein bischen vom gfx programm ab. 

300 dpi dots per inch, also Punkte pro Inch, Ein Inch sind 2,54 cm. Das sind also 300 punkte pro 2,54 cm, das ist eine gängige Auflösung beim Drucken.

Ein Bildschirm hat üblicherweise 72 dpi, also 72 Bildpunkte pro 2,54cm.

Also einmal hab ich einen Inch da sind 72 punkte drin, ein anderes mal sind da 300 Punkte drin. Wenn ich jetzt die 72'er Punkte in ein 300'er Lineal reinpacke sind diese 72er Punkte natürlich viel kleiner, weil sie in einem 300 Lineal viel weniger Platz wegnehmen, ungefähr nur ein Drittel. Das Verteilung von Elementen pro Längeneinheit nennt man Auflösung.

Ziehe ich jetzt die 72 Punkte, die man sich wie Tennisbälle,auf einem Gummi befestigt vorstellen kann, auseinander, muss sich der Rechner die fehlenden 'tennisbälle' dazwischen ausdenken, (interpolieren) deswegen wird das Bild beim 'Hochziehn' unscharf.   

...zur Antwort

Diese Problem kommt immer wieder vor, letztendlich muss da eine Funktion her, die den Slot in dem sich ein bestimmtes Item befindet, zurückliefert oder eben nix(nil) wenn es nicht vorhanden ist.

Das könnte dann vom Aufruf der Funktion so aussehen:

slot= getItemSlot("planks")

If slot then

turtle.select(slot)

turtle.place()

else 

-- item im invetory nicht vorhanden

end

Das muss man dann bei jedem turtle.place() Befehl machen, aber ich muss mich nicht mehr darum kümmern, wo ein bestimmtes Item im Inventory liegt. Ja ich weiss, das ganze wird langsamer, aber bei aufwändigeren 'Bauarbeiten' bei denen auch noch zwischendurch gesammelt wird ist diese Funktion sehr hilfreich.

Die Funktion selber ist von mir geschrieben und sieht so aus:

-- -------------------------------------------------

-- getItemSlot(string itemName)

-- description:
-- Tries to find itemName
-- in turtles inventory.

-- returns slot if itemName was found,
-- otherwise nil

-- itemName can be a part of item's name.
-- not case sensitive

-- example:
-- local slot= getItemSlot("planks")
function getItemSlot(itemName)

local upperItemName= string.upper(itemName)
local found= false
local actualSlot= turtle.getSelectedSlot()
local counter= -1
local nextSlot= 0
local data={}
repeat
counter= counter +1
nextSlot= ((actualSlot-1+counter)%16)+1
data= turtle.getItemDetail(nextSlot)
if data then
local upperName=string.upper(data.name)
local i,j= string.find(upperName, upperItemName)
if i then found= true end
end
until found or counter == 15
if found then return nextSlot else return nil end
end
...zur Antwort

Ja nun, das ist DAS Manko von CC, der Programmstatus beim Verlassen wird nicht gespeichert. d.h. die Computer oder Turtles bleiben einfach stehn. Was die Kisten wohl machen ist ein automatisches Ausführen des startups beim Wiedereintritt in die Welt.

Also musste jede Veränderung der Schalterzustände in einer Datei speichern, d.h. im oben gezeigten Programm eine Funktion reinbasteln, die nach jedem Tastendruck aufgerufen wird und den aktuellen Schalterzustand in einer Datei speichert. Beim Wiedereintritt in die Welt muss mittels startup die Datei geladen, ausgewertet und die Schalter in die entsprechenden Zustände gebracht werden. So die Theorie....

...zur Antwort