Vai al contenuto
Il server del mese è
Visita la nostra nuova lista server!

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

  • 0
xGalaxy97x

Computercraft Melee Turtle... Aiuto!

Domanda

Ciao a tutti ragazzi, oggi volevo programmare la mia tartaruga con la spada di Diamante, che allo startup, faceva questo ciclo
[CODE]
while true do
turtle.attack()
end

[/CODE]
ma c'è un problema: questa turtle l'ho messa sotto uno Spawn di Scheletri... e dato che ogni tanto si riempie il suo inventario, lascia cadere le cose a terra e questo non mi piace... Allora volevo inserire nello startup che ogni 300 secondi (5 minuti), si girasse di 180°, mettesse tutto quello che ha nell'inventario in una cesta dietro di essa, e poi si rigirasse nuovamente di 180° per tornare alla posizione di partenza e continuare a killare... Ma non so come impostare questo "ciclo"... Io vorrei che ogni 5 minuti, la mia tartaruga facesse
[CODE]
turtle.turnLeft()
turtle.turnLeft()
[/CODE]
depositasse tutto, e poi ancora

[CODE]
turtle.turnLeft()
turtle.turnLeft()
[/CODE]
... Chi mi può scrivere il codice per fare ciò? Non riesco a scriverlo... Grazie mille in anticipo a tutti!!!

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Recommended Posts

Non ho provato il codice quindi potrebbe non funzionare. In pratica questo lo svuota non ogni 5 min ma appena la Turtle è piena:

EDIT: Ho riscritto una parte sbagliata, riprova a mettere il codice nuovo:

[CODE]
local count = 0
while true do
turtle.attack()
-- Se la Turtle non riesce a prendere un oggetto
if not turtle.suck() then
-- Controlla se l'inventario è pieno o non c'è nulla da raccogliere
for i=1, 16 do
turtle.select(i)
if turtle.detect() then
-- Aumenta di 1 la variabile che conta gli slot pieni
count = count+1
end
end
if count == 16 then
svuotaInventario()
end
end
end
-- Funzione che viene eseguita quando la Turtle è piena
function svuotaInventario()
turtle.turnLeft()
turtle.turnLeft()
for i=1, 16 do
turtle.select(i)
turtle.place(64)
end
turtle.turnLeft()
turtle.turnLeft()
-- RIavvia il tutto in modo da poter ricominciare
shell.run("NOMEPROGRAMMA")
end
[/CODE]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='Chris54721' timestamp='1359731626' post='648486']
Non ho provato il codice quindi potrebbe non funzionare. In pratica questo lo svuota non ogni 5 min ma appena la Turtle è piena:

EDIT: Ho riscritto una parte sbagliata, riprova a mettere il codice nuovo:

[CODE]
local count = 0
while true do
turtle.attack()
-- Se la Turtle non riesce a prendere un oggetto
if not turtle.suck() then
-- Controlla se l'inventario è pieno o non c'è nulla da raccogliere
for i=1, 16 do
turtle.select(i)
if turtle.detect() then
-- Aumenta di 1 la variabile che conta gli slot pieni
count = count+1
end
end
if count == 16 then
svuotaInventario()
end
end
end
-- Funzione che viene eseguita quando la Turtle è piena
function svuotaInventario()
turtle.turnLeft()
turtle.turnLeft()
for i=1, 16 do
turtle.select(i)
turtle.place(64)
end
turtle.turnLeft()
turtle.turnLeft()
-- RIavvia il tutto in modo da poter ricominciare
shell.run("NOMEPROGRAMMA")
end
[/CODE]
[/quote]

Scusami, ma l'ultima riga non la capisco... che senso ha questo???
[CODE]

[color=#000000]shell[/color][color=#666600].[/color][color=#000000]run[/color][color=#666600]([/color][color=#008800]"NOMEPROGRAMMA"[/color][color=#666600])[/color]
[/CODE]
Io non ho nessun programma, vorrei eseguire il tutto allo startup...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='xGalaxy97x' timestamp='1359731991' post='648504']
Scusami, ma l'ultima riga non la capisco... che senso ha questo???
[CODE]

[color=#000000]shell[/color][color=#666600].[/color][color=#000000]run[/color][color=#666600]([/color][color=#008800]"NOMEPROGRAMMA"[/color][color=#666600])[/color]
[/CODE]
Io non ho nessun programma, vorrei eseguire il tutto allo startup...
[/quote]

Ah, allora basta che la sostituisci con:
[code]
os.reboot()
[/code]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='Chris54721' timestamp='1359732163' post='648507']
Ah, allora basta che la sostituisci con:
[code]
os.reboot()
[/code]
[/quote]

Ok ora lo provo... ma hai qualche metodo per "copiarlo" ed "incollarlo" nella mia tartaruga? xD

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Vai nella cartella "saves" nella tua cartella di minecraft (.minecraft), seleziona il tuo mondo e poi "computer". A questo punto utilizza il comando "id" sulla turtle in modo che ti dia il suo id, a questo punto apri la cartella corrispondente all'id, crea un nuovo file di testo chiamato "startup" e copia il codice ;)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='Chris54721' timestamp='1359735150' post='648567']
Vai nella cartella "saves" nella tua cartella di minecraft (.minecraft), seleziona il tuo mondo e poi "computer". A questo punto utilizza il comando "id" sulla turtle in modo che ti dia il suo id, a questo punto apri la cartella corrispondente all'id, crea un nuovo file di testo chiamato "startup" e copia il codice ;)
[/quote]
EDIT: Sono riuscito a metterlo, ma non funziona... cioè parte, ma seleziona tutti gli slot e poi ricomincia da capo a selezionare... non scarica gli oggetti...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Bene, oltre a risolvere il bug ho anche migliorato il codice. Eccolo qua ;)
[code]

local count = 0
while true do
turtle.attack()
-- Se la Turtle non riesce a prendere un oggetto
if not turtle.suck() then
-- Controlla se l'inventario è pieno o non c'è nulla da raccogliere
for i=1, 16 do
if turtle.getItemCount(i) > 0 then
-- Aumenta di 1 la variabile che conta gli slot pieni
count = count+1
end
end
if count == 16 then
turtle.turnLeft()
turtle.turnLeft()
for i=1, 16 do
turtle.select(i)
turtle.drop(64)
end
turtle.turnLeft()
turtle.turnLeft()
-- Riavvia il tutto in modo da poter ricominciare
os.reboot()
end
end
end
[/code]

Inoltre, così la Turtle dovrebbe raccogliere in automatico i drop dei mob più lontani, anche se alla stessa distanza massima di un blocco.
Spero di esserti stato d'aiuto :) se qualcosa non dovesse funzionare, dimmelo pure.

EDIT: Ho scoperto che purtroppo la Turtle si svuota anche se non è piena, quindi se per te va bene lascio così, altrimenti cerco di fixare.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Non so perchè ma non funziona... continua a killare senza scaricare...
EDIT: Funziona alla grande... l'unica cosa è che continua a killare... non si gira e svuota... se ci sono items vicino a lei, vanno DIRETTAMENTE nella chest dietro di essa... xD a me sta bene, ma non capisco come fa... Hahhaha

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Sicuro? A me funziona bene...non è che per caso hai copiato il codice di prima?

Per evitare inconvenienti, te lo metto su Pastebin così che tu lo possa copiare facilmente. In alternativa copia il codice del mio post precedente.

[url="http://pastebin.com/3Y1zYFEY"]http://pastebin.com/3Y1zYFEY[/url]

EDIT: Effettivamente ho notato che qualche volta si bugga. Ma basta un riavvio della turtle e funziona tutto.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Questo non è lo stesso? ho aggiunto solamente qualche print iniziale....
[url="http://pastebin.com/AX51CPQg"]http://pastebin.com/AX51CPQg[/url]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='xGalaxy97x' timestamp='1359738118' post='648616']
Non so perchè ma non funziona... continua a killare senza scaricare...
EDIT: Funziona alla grande... l'unica cosa è che continua a killare... non si gira e svuota... se ci sono items vicino a lei, vanno DIRETTAMENTE nella chest dietro di essa... xD a me sta bene, ma non capisco come fa... Hahhaha
[/quote]

Ma come fa? A me si deve girare ogni volta .-. Vabbè, meglio così xD

[quote name='xGalaxy97x' timestamp='1359738838' post='648628']
Questo non è lo stesso? ho aggiunto solamente qualche print iniziale....
[url="http://pastebin.com/AX51CPQg"]http://pastebin.com/AX51CPQg[/url]
[/quote]

Sì, dovrebbe funzionare in teoria.
Non per spammare, ma sto creando un OS per la ComputerCraft. Se ti va dai un'occhiata al post, lo trovi nella sezione Mod. ;)

Comunque, se aggiungi un os.reboot() prima dell'ultimo end dovrebbe sbuggarsi completamente ;)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='xGalaxy97x' timestamp='1359739785' post='648648']
Cioè metto 2 os.reboot()???
[/quote]

Il secondo lo metti alla penultima riga, così viene eseguito sempre, il primo a questo punto lo puoi anche eliminare.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='Chris54721' timestamp='1359744052' post='648723']
Il secondo lo metti alla penultima riga, così viene eseguito sempre, il primo a questo punto lo puoi anche eliminare.
[/quote]

Worka, il problema è che è MOLTO difficile stoppare il programma... dato che ogni secondo lo schermo della turtle diventa nero... :S

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Non capisco a che serve il reboot.

Il ciclo while continuerà anche dopo aver scaricato.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='N1xx1' timestamp='1359752254' post='648864']
Non capisco a che serve il reboot.

Il ciclo while continuerà anche dopo aver scaricato.
[/quote]

Senza reboot continuano a girare all'infinito...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='xGalaxy97x' timestamp='1359802256' post='649033']
Senza reboot continuano a girare all'infinito...
[/quote]

Ah, giusto. Sostituisci il reboot con
[CODE]
count = 0
[/CODE]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='N1xx1' timestamp='1359811239' post='649123']
Ah, giusto. Sostituisci il reboot con
[CODE]
count = 0
[/CODE]
[/quote]

Ma dove lo devo mettere questo
[CODE]
count = 0
[/CODE]
??? Cioè prima di quale END??? Ecco il codice...

[CODE]
shell.run("id")
print("")
print("----------------------------")
print("Sono pronto a killare TUTTI!")
print("----------------------------")
print("")
local count = 0
while true do
turtle.attack()
-- Se la Turtle non riesce a prendere un oggetto
if not turtle.suck() then
-- Controlla se l'inventario è pieno o non c'è nulla da raccogliere
for i=1, 16 do
if turtle.getItemCount(i) > 0 then
-- Aumenta di 1 la variabile che conta gli slot pieni
count = count+1
end
end
if count == 16 then
turtle.turnLeft()
turtle.turnLeft()
for i=1, 16 do
turtle.select(i)
turtle.drop(64)
end
turtle.turnLeft()
turtle.turnLeft()
-- Riavvia il tutto in modo da poter ricominciare
os.reboot()
end
end
end
[/CODE]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[CODE]
shell.run("id")
print("")
print("----------------------------")
print("Sono pronto a killare TUTTI!")
print("----------------------------")
print("")
local count = 0
while true do
turtle.attack()
-- Se la Turtle non riesce a prendere un oggetto
if not turtle.suck() then
-- Controlla se l'inventario è pieno o non c'è nulla da raccogliere
for i=1, 16 do
if turtle.getItemCount(i) > 0 then
-- Aumenta di 1 la variabile che conta gli slot pieni
count = count+1
end
end
if count == 16 then
turtle.turnLeft()
turtle.turnLeft()
for i=1, 16 do
turtle.select(i)
turtle.drop(64)
end
turtle.turnLeft()
turtle.turnLeft()
count = 0
end
end
end
[/CODE]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='N1xx1' timestamp='1359888950' post='649879']
[CODE]
shell.run("id")
print("")
print("----------------------------")
print("Sono pronto a killare TUTTI!")
print("----------------------------")
print("")
local count = 0
while true do
turtle.attack()
-- Se la Turtle non riesce a prendere un oggetto
if not turtle.suck() then
-- Controlla se l'inventario è pieno o non c'è nulla da raccogliere
for i=1, 16 do
if turtle.getItemCount(i) > 0 then
-- Aumenta di 1 la variabile che conta gli slot pieni
count = count+1
end
end
if count == 16 then
turtle.turnLeft()
turtle.turnLeft()
for i=1, 16 do
turtle.select(i)
turtle.drop(64)
end
turtle.turnLeft()
turtle.turnLeft()
count = 0
end
end
end
[/CODE]
[/quote]

Non funziona... ogni volta che killa un mob, si gira a depositare tutto... xD

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='xGalaxy97x' timestamp='1359891556' post='649956']
Non funziona... ogni volta che killa un mob, si gira a depositare tutto... xD
[/quote]

Sicuro di averlo scritto correttamente?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='N1xx1' timestamp='1359921086' post='650616']
Sicuro di averlo scritto correttamente?
[/quote]

Certo, eccolo qui... [url="http://pastebin.com/rFg9Q6WY"]http://pastebin.com/rFg9Q6WY[/url]

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='xGalaxy97x' timestamp='1359891556' post='649956']


Non funziona... ogni volta che killa un mob, si gira a depositare tutto... xD
[/quote]

Quindi?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
[quote name='EnderLoco' timestamp='1359924848' post='650683']
Quindi?
[/quote]

Come quindi? o.O Ma ai capito cosa avevo chiesto io? xD

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

×
×
  • Crea Nuovo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.