🤔 Para Refletir :
"Mudar não é fraqueza, pelo contrário, é um sinônimo de superação"
- Ricky O Bardo

[Programação .lua] Alguém saberia como concertar meu script?

Estado
Tópico fechado. Não é possível fazer postagens nela.

InterPlay Masculino

Cidadão
Membro
Membro
Há muito mais na realidade do que uma mente humana consegue imaginar
Juntou-se
07 de Janeiro de 2017
Postagens
227
Bravecoins
576

E awe?! Blz?

Então... Eu fiz esse script em lua:

Código:
local monitor = peripheral.wrap("monitor_2")
local tamMonitor = monitor.getSize()
local texto1 = "DESLIGADO"
local texto2 = "SPAWNANDO"
local redsLig = redstone.getInput("right")
local largTx = math.floor(string.len(texto1) - (tamMonitor / 2))

monitor.setTextScale(2)

if redsLig == true then
  monitor.clear()
  monitor.setTextColor(colors.green)
  monitor.write(texto1)
else
  monitor.clear()
  monitor.setTextColor(colors.red)
  monitor.write(texto2)
end


Mas não está funcionando...  :_ _: "Sacomé, né?"
Eu queria que, quando o Bloco do "Advanced Computer" estivesse recebendo sinal de redstone, aparecesse a mensagem "DESLIGADO!" em um monitor que está conectado à network via cabos. Queria que aparecesse em verde.
E também, quando esse mesmo bloco não estivesse recebendo sinal de redstone, o monitor mostrasse "SPAWNANDO!", em vermelho. Tudo muito bem centralizado.

O que você acha? Só olhando assim já dá pra saber o que eu poderia fazer para que funcionasse do jeito que eu gostaria?
[Isso seria muito ninja...] Caso não dê pra saber, quais informações a mais eu poderia dar para ajudar?

 
Tipo assim:

Quero que mostre a mensagem e que ela fique lá o tempo todo, desde que o bloco em questão esteja recebendo o sinal de redstone, e vice versa.
De maneira bem resumida:
Enquanto estiver com sinal -> DESLIGADO
Enquanto estiver sem sinal -> SPAWNANDO
 
InterPlay comentou:
[...] Quero que mostre a mensagem e que ela fique lá o tempo todo, desde que o bloco em questão esteja recebendo o sinal de redstone, e vice versa.

O senhor não respondeu a minha pergunta.

---

Se bem me lembro, programávamos em Java para o Minecraft. Estás a utilizar o LuaCraft?
 
É um mod chamado "ComputerCraft".
Nele usamos a linguagem ".lua" para fazer coisas.
Agora se é dentro de um loop, eu não sei.
Só quero que o script funcione...  :Observando:
Se vai ser necessário colocá-lo dentro de um loop para funcionar, ok! :Okay_fix:
Se não for necessário, ok também!  :^-^:
 
[member=1047]InterPlay[/member]
Edit, obs: ESSE SCRIPT TEM QUE ESTAR SENDO EXECUTADO NO MOMENTO, ESSE É O "lOOP" OU SEJA, ESSE SCRIPT TEM QUE SER INVOCADO NO MAPA, SCENE, COM AS FERRAMENTAS QUE VOCÊ TEM DISPONÍVEIS NESSA SUA ENGINE

Cara vou dar a minha opinião, seja ela relevante ou não, pois eu programo em outras linguagens e não em lua. Mas a lógica do seu algoritmo está... CORRETA

O seu algoritmo está certo, está funcionando, faça isso em outra linguagem e verá, faz até mesmo no RGSS.

Minha Conclusão: O contexto onde esse script está inserido é que tem que ser analisado.

Não tem essa de loop (DENTRO DESSE SCRIPT, NÃO PRECISA) nessas condições, POIS AO MENOS IRIA FUNCIONAR 1 VEZ. *quando você apertar a tecla RIGHT pela primeira vez

Acontece ou não alguma coisa no minimo?

faz um outro script e manda ler (com outra funcionalidade, exemplo: printar, e que de preferencia com condição de ler INPUT, para ver se você está escrevendo a sintaxe corretamente), para ver se ao menos o seus scripts estão sendo executados

Edit, obs: ESSE SCRIPT TEM QUE ESTAR SENDO EXECUTADO NO MOMENTO, ESSE É O "lOOP" OU SEJA, ESSE SCRIPT TEM QUE SER INVOCADO NO MAPA, SCENE, COM AS FERRAMENTAS QUE VOCÊ TEM DISPONÍVEIS NESSA SUA ENGINE
 
Eu teria que instala-lo aqui para ter certeza, mas acredito que o loop é necessário:

Código:
local monitor = peripheral.wrap("monitor_2")
local tamMonitor = monitor.getSize()
local texto1 = "DESLIGADO"
local texto2 = "SPAWNANDO"
local largTx = math.floor(string.len(texto1) - (tamMonitor / 2))
local ultimoEstado = not redstone.getInput("right")

monitor.setTextScale(2)

while true do     
	if ultimoEstado == redstone.getInput("right") then
		goto continue
	end
	
	ultimoEstado = redstone.getInput("right")
	
	monitor.clear() 
  
	if ultimoEstado then
		monitor.setTextColor(colors.green)
		monitor.write(texto1)
	else
		monitor.setTextColor(colors.red)
		monitor.write(texto2)
	end
	
	::continue::
end

Caso contrário o script roda apenas uma vez, como o Riven disse.
 
a ultima vez q programei em lua eu era de menor...kkk
Mas sem zuera agora, seu script precisa só de um loop, q vc pode fazer tanto em while(caso acima) como em For .
Estude um pouco de lógica de programção e algoritmo.Como disse os amigos acima ,ela eh o importante! 
 
Valeu amigos... Vocês são fera!

Mas é como eu estava pensando: Não adianta perguntar sobre programação - que é usada em uma área - para alguém que usa a programação em outra área.

O script do colega [member=1224]Kyo Panda[/member] provavelmente está correto, mas não está funcionando.
Quando o executo, o computador diz que, na linha 12, era esperado um "=" (sinal de igual).
Não sei o que fazer. Já procurei por toda a internet, mas não encontrei nenhum tutorial que, pelo menos, ensinasse uma coisa que possuísse algum princípio de lógica de programação para que eu pudesse adaptá-lo ao meu script.

E, se eu for parar pra aprender .lua, só pra poder fazer um monitor mostrar determinada mensagem... Aí não, né?

Se mais alguém puder ajudar, ainda será muito bem-vindo.
 
Nesse caso saber lua não é tão importante quanto conhecer a ferramenta que você está usando.

P.s: você não está centralizando o texto. Provavelmente está escrevendo no canto superior esquerdo.
 
Eu consegui consertar o script, galera!
Ele ficou assim:


Código:
monitor = peripheral.wrap("monitor_2")
textoAtual = ""
monX,monY = monitor.getSize()

function mostraMsg()
  monitor.setBackgroundColor(colors.black)
  monitor.clear()
  monitor.setCursorPos(1,1)
  monitor.setTextScale(2)
  textoCentro(textoAtual, 1, corTexto)
end

function checkRs(sinalRs)
  if sinalRs == true then
    textoAtual = "DESLIGADO!"
    corTexto = monitor.setTextColor(colors.green)
  else
    textoAtual = "SPAWNANDO!"
    corTexto = monitor.setTextColor(colors.red)
  end
end

function textoCentro(textoAtual,linhaDoTxt,corTexto)
  tamPlvr = (string.len(textoAtual))
  tamMonSemPlvr = math.floor(monX - tamPlvr)
  x = math.floor(tamMonSemPlvr / 2)
  monitor.setCursorPos((x + 1.5), linhaDoTxt)
  monitor.write(textoAtual)
end

while true do
  local event = os.pullEvent("redstone")
  checkRs(rs.getInput("right"))
  print(textoAtual)
  mostraMsg()
end

Valeu mesmo pela ajuda e pelas dicas. Valeu por se disporem a responder.
Esse é o melhor fórum que já participei!  :XP:

[greenalert]s2 Condado BraveHearts s2[/greenalert]
 
Estado
Tópico fechado. Não é possível fazer postagens nela.
Voltar
Topo Inferior