Anuncios Google

Duda LuaDev

Buenas, hoy me puse a hacer el logo de cargando más chuminadas varias para mi homebrew;

El caso es que en el logo de cargando quiero ahcer una loop infinita, es decir, que gire sobre sí mismo hasta que acabe de cargar todo el homebrew, me he desesperado, no sé que más hacer...

 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de carlossg

¿Qué hay mal?;dosocketa =

¿Qué hay mal?;

do
socketa = socket.connect("www.URL.com",80)
while not socketa:isconnected() do
screen.print(200,130,"Please, wait")
screen.flip()
end
file = io.open(socketa:send("GET /ruta/cvers.txt HTTP/1.1"))
if ( file:read() == cVers ) then
elseif ( file:read() > cVers ) then
mensaje = os.message("There is a new version avaliable, Do you want to download it?",1)
	if ( mensaje == 1 ) then
		Zipa = socketa:send("GET /ruta/vers.zip HTTP/1.1")
			zip:extract(Zipa,"")
	end
end
end
 
--*Por motivos de seguridad no puedo poner la url, no sólo está/estará dedicada a esto.

No funciona.

PD:Sí, inicio el wlan antes, con wlan.init(), sin argumentos.

Imagen de carlossg

socketa =

socketa = socket.connect("www.url.com",80)
while not socketa:isconnected() do
screen.print(200,130,"Please, wait")
screen.flip()
end
socketa:send("GET / HTTP/1.1\r\n")
socketa:send("Host www.url.com\r\n\r\n")
socketa:recv("GET /aUpdate/cvers.txt HTTP/1.1")
file = io.open("cvers.txt")
if ( file:read() == cVers ) then
os.message("Congra")
elseif ( file:read() > cVers ) then
mensaje = os.message("Tere is a new version avaliable, Do you want to download it?",1)
	if ( mensaje == 1 ) then
		Zipa = socketa:recv("GET /aUpdate/vers.zip HTTP/1.1")
			zip:extract(Zipa,"")
	end
end

No va D:

Tienes varios errores, prueba

Tienes varios errores, prueba de que no conoces el trabajo con sockets:

  • Tu petición está mal... si vas a pedir el archivo "/aUpdate/cvers.txt" pues pídelo desde el primer GET, NUNCA se piden archivos desde el recv.
  • recv no necesita argumentos, aunque puedes ponerle un número y recibirá ese número de bytes (ya que estás pidiendo un txt, con recibir 1024 bytes creo sería suficiente)
  • recv NO te va crear el archivo, ese debes crearlo tu. Cuando mandas una petición el server primero te manda una cabecera de respuesta, algo como:
    HTTP/1.1 302 Found
    Server: Apache/2.2.16 (Debian)
    X-Powered-By: PHP/5.3.8-1~dotdeb.2
    Last-Modified: Mon, 02 Apr 2012 19:25:54 +0000
    Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
    ETag: "1333394754"
    Location: http://psp.scenebeta.com/node
    Vary: Accept-Encoding
    Content-Type: text/html; charset=utf-8
    Content-Length: 2345
    Date: Mon, 02 Apr 2012 19:25:55 GMT
    X-Varnish: 2092424089
    Age: 0
    Via: 1.1 varnish
    Connection: keep-alive
    X-Varnish-Cache: MISS

    La primera línea es la más importante, con ella te das cuenta si fue exitosa la petición o no (en wikipedia están las otras posibles respuestas).
    Después de la cabecera vienen dos saltos de línea, y después los datos de tu archivo (ojo, que es el contenido, no el archivo en sí mismo), datos que deberías guardar en un archivo abierto con anterioridad (lo que serviría para bajar el zip de actualización) o recibir todo en una variable si es poco lo que bajarás o no necesitas el archivo sino sólo su contenido (como en tu caso para verificar si hay actualizaciones).

Chécate este ejemplo para que te des una idea.

Imagen de carlossg

A ver

en qué metí la pata ahora:

do
socketa = socket.connect("www.URL.com",80)
while not socketa:isconnected() do
screen.print(200,130,"Please, wait")
screen.flip()
end
socketa:send("GET / HTTP/1.1\r\n")
socketa:send("Host www.URL.com\r\n\r\n")
socketa:send("GET /aUpdate/cvers.txt HTTP/1.1\r\n\r\n")
file = socketa:recv(1024)
if ( tostring(file) == tostring(cVers) ) then
os.message("Congratulations, you have the last version")
elseif ( tostring(file) > tostring(cVers) ) then
mensaje = os.message("Tere is a new version avaliable, Do you want to download it?",1)
	if ( mensaje == 1 ) then
		Obtener = socketa:send("GET /aUpdate/vers.zip HTTP/1.1\r\n\r\n")
			zips = io.open("update.zip","w")
			elzip = socketa:recv()
			zips:write(elzip)
			zips:flush()
			zips:close()			
			zip.extract("update.zip","")
	end
end
end

Se pilla Vergüenza

Cuándo se pilla? Después de

Cuándo se pilla? Después de la conexión?

PD. Tu petición sigue estando mal, debería ser así:

socketa:send("GET /aUpdate/cvers.txt HTTP/1.1\r\n")
socketa:send("Host www.URL.com\r\n")
socketa:send("\r\n") --Me da mejores resultados si mando el salto de línea aparte

También, las condiciones que usas para verificar la versión nunca van cumplirse, parece que no pillaste lo que dije en el otro coment, así que lo repito:
Cuando haces una petición, el server SIEMPRE te va mandar una cabecera por delante (para debug, digamos), así que tu variable al final sería toda esta información junta:

HTTP/1.1 302 Found
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.8-1~dotdeb.2
Last-Modified: Mon, 02 Apr 2012 19:25:54 +0000
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
ETag: "1333394754"
Location: http://psp.scenebeta.com/node
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Content-Length: 2345
Date: Mon, 02 Apr 2012 19:25:55 GMT
X-Varnish: 2092424089
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: MISS
 
v1.5

La cabecera podría ser diferente, pero se entiende la idea (espero). Para mayor facilidad te recomiendo que en ese archivo pongas la versión así: CURRENTVERSION::1.5::
O usando otro patrón, pero que no se pueda confundir con la cabecera. Para qué? Para que después de recibir los datos desde el socket puedas obtener la versión usando una función muy sencilla:

data = "..."  --esto es todo lo que mandó el server, cabecera y todo xD
version = data:match("CURRENTVERSION::(.+)::")

Con eso tendrás sólo la versión en esa variable (el número que esté entre ::  ::), lo puedes convertir con tonumber y hacer comparaciones directas... no sé xD

A si, también te recomiendo comentar el bloque de código donde descargas el zip (está mal, por cierto), por ahora ponle un print para que sepas q entró bien. Una vez que la primera parte te salga bien, la segunda saldrá casi por sí misma ;)

Imagen de carlossg

Creo que ya entendí

socketa = socket.connect("www.URL.com",80)
while not socketa:isconnected() do
screen.print(200,130,"Please, wait")
screen.flip()
end
socketa:send("GET /aUpdate/cvers.txt HTTP/1.1\r\n")
screen.print(200,130,"Enviando petición GET")
screen.flip()
socketa:send("Host www.URL.com\r\n")
screen.print(200,130,"¿Definiendo host?")
screen.flip()
socketa:send("\r\n")
screen.print(200,130,"Enviando salto de linea")
screen.flip()
file = socketa:recv(1024)
Version = file:match("Alpha:(.+)")
Version = tonumber(Version)
if ( Version == cVers ) then
os.message("Congratulations, you have the last version")
elseif ( Version > cVers ) then
mensaje = os.message("Tere is a new version avaliable, Do you want to download it?",1)
	if ( mensaje == 1 ) then
		Obtener = socketa:send("GET /aUpdate/vers.zip HTTP/1.1\r\n\r\n")
			zips = io.open("update.zip","w")
			elzip = socketa:recv()
			zips:write(elzip)
			zips:flush()
			zips:close()			
			zip.extract("update.zip","")
	end
else
screen.print(200,130,"Ups...Algo falló; "..Version.." tú mismo")
screen.flip()
end

Se quedá en "Enviando salto de linea" y parece no responder, lleva así un rato.

 

NOTA:Aún no comenté lo del zip

Imagen de NEKERAFA

Mmm...

Prueba a enviar la cabecera seguido,  a ver que pasa. Yo es lo que hago.

Al recibir x datos, a menos que el tamaño de la respuesta en bytes que recibas sea menor que x, vas a obtener una respuesta a medias, ya que no cargo todo. Deberias hacer un bucle que compruebe que haya recibido toda la respuesta.


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de carlossg

No entiendo, la cabecera se

No entiendo, la cabecera se está enviando seguido, sólo con un screen.print de por enmedio, nose si te referirás al salto de línea.

Imagen de NEKERAFA

Mmm...

Vale, he probado mi ejemplo y le pasa lo mismo. Voy a intentar hacerlo desde 0, a ver si va.

Imagen de NEKERAFA

Mmm...

1. El bucle do no hace falta.
2. Necesitas comprobar que se ha descargado el archivo HTTP antes de operar con el.
3. Necesitas enviar la cabecera antes de recibir datos.
4. Para recibir datos, la funcion es socket:recv()
5. El funciona de código en HTTP es retorno del carro y nueva línea.
6. Puedes revisar mi tutorial para ver como utilizar los sockets.


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

No puedes abrir asi un

No puedes abrir asi un archivo, tendrías que bajarlo, editarlo y volverlo a subir (o programar una app en el server que edite el archivo al enviarle una petición).

Imagen de NEKERAFA

XD

Fuiste mas rápido que yo. Odio conectarme desde el 3G del móvil jajaja.

Imagen de carlossg

No se trataría de editarlo,

No se trataría de editarlo, sólo leerlo para comparar.

¿Cómo lo descargo?

Haz una petición GET y guarda

Haz una petición GET y guarda con recv. Si es un archivo pequeño puedes guardar todo en una variable y buscar lo que vas a comparar con string.find

Imagen de carlossg

Tengo una nueva duda, ¿Cómo

Tengo una nueva duda, ¿Cómo podría crear una dimensión?

Es decir, para que todo lo que se quiera poner se maneje dentro de esa dimensión mediante el uso de coordenadas.

 

Imagen de carlossg

Estol es lo que pone en el

Estol es lo que pone en el GDP, y es lo que yo querría hacer;

-- w3 : Given a dot and dimensions, generate box.
-- w2 : Given a dot and dimensions, generate a box and rotate it. (used for collision testing)

Está en modeling.lua

¿Nada?Sigo estancado ahí.

Imagen de NEKERAFA

Pero eso es un comentario

Pon la función entera.

Imagen de carlossg

Ya sé que es sólo un coment,

Ya sé que es sólo un coment, sorry;

function w3(cx,cy,w,h) return {{cx-w,cy-h},{cx+w,cy-h},{cx+w,cy+h},{cx-w,cy+h}}; end
function w2(cx,cy,w,h,a) return math.poly.rotate(cx,cy,a,w3(cx,cy,w,h)); end

PD:Está en modeling.lua

Imagen de NEKERAFA

Mmm...

Es que estaba con el movil XD

Pues como te dice el comentario, si le pasas un punto y su anchura y altura, te da sus cuatro vertices para generar una caja. Puedes utilizarlo para colisiones.

El de abajo debe de hacer lo mismo, pero con una rotación alfa... habrá que mirar si te pide radianes o grados.


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de Jepte

si te refieres a esto ,es muy

si te refieres a esto ,es muy facil tienes que poner una condicion como por ejemplo,

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

if pantalla==1 then

screen.blit()

if controls.cross() and x>50 and x<60 and y>20 and y<30 then  ------- para las cordenadas

(lo que hace)

end

 

if controls.start()  then  ----------para cambiar de menu

pantalla=2

end

end

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

Creo que no entendí muy

Creo que no entendí muy bien... podrías explicarte un poco más?

Imagen de carlossg

Mmm... Sería como crear una

Mmm... Sería como crear una dimensión es decir, un cuerpo geométrico, en el que tu pongas una coordenada y el objeto se blitee allí sin necesidad de que lo veas.

Me parece que más no me podría explicar...

 

PD:Creo que el GDP usa un sistema parecido.

Mmm...

Creo que sí xDD

Me da la sensación de que lo que quieres es blitear imagenes/texto con dimensiones, tipo 3D, ¿no?

Imagen de Andres_Ne

Pues si te entiiendo bien

Pues si te entiiendo bien simplemente creeas el objeto y lo bliteas en las coordenadas que tu quieras ,si no quieres que se vea a cierta distancia ,si no me equivico en 3D  z equivale a profundidad o distancia de el objeto  simplemente le das a z esas coordenadas por ejemplo z=-100 esa coordenada a la hora de blitearlo ,lo hara a lo lejos (claro con x,y tmbn..xD),pues eso creo que es lo que quieres hacer y si no pues cheka esto y me dices.

Modelo 3D de andres1408


 

 

Imagen de AdriGV

Andres

Z es altura o hacia arriba.

Saludos

Imagen de Andres_Ne

Ok,pero de todos modos con

Ok,pero de todos modos con que le de valores a z eso sera lo que lo hara ver al fondo en LuaDEV no? y creo que eso el lo que quiere.


 

 

Imagen de carlossg

Me podriaís decir en que

Me podriaís decir en que falla:

function playSound( soundPath, looped)
   sound = sound.load( tostring( soundPath ) )   
		if ( tostring( looped ) == "true") then
			sound.loop( sound )
			sound.play( sound )
		else
			sound.play( sound )
		end
end

Llamandola así:

playSound("col.wav",true)

 

Se pilla la psp.

 

PD:Al ver que el sonido que usé no funcionaba cogí uno de gdp pero sigue igual.

Imagen de Jepte

una pregunta por que usas la

una pregunta por que usas la funcion tostring().

Tienes toda la razón,

Tienes toda la razón, convirtiéndolo en string y comparando con un string solo hace que vaya más lento, ya que comprobar dos string requiere comprobar cada letra con cada letra.

No funciona porqué no puedes usar una variable llamada "sound" ya que ya existe una tabla llamada "sound" que alberga todas las funciones de sound.

Así ya bastaría:

function playSound(soundPath, looped)
	if looped then
		sound.loop(soundPath)
	else
		snd = sound.load(soundPath) --puedes hacerla local la variable si no la usas fuera de la función
		sound.play(snd) --no debes usar la variable con el nombre sound
	end
end

Imagen de carlossg

Con: playSound("col.wav",true

Con:

playSound("col.wav",true)

no se loopea el sonido usando la función que pusiste.

Imagen de Jepte

estas son las funciones para el modo loop

nil  sound.loop ()
  Detiene el sonido en modo loop

nil  sound.loop (string ruta)
  Reproduce un archivo en modo loop.

¿Cuál es el parámetro de

¿Cuál es el parámetro de sound.loop, la ruta o el sonido previamente cargado?

Imagen de carlossg

Si aml no me equivoco

Si mal no me equivoco sound.loop() no necesita cargar un archivo antes, solo necesita como argumento la ruta que es soundPath, en este caso "col.waw"

Imagen de Jepte

asi es alo mejor  por eso se

asi es alo mejor  por eso se te traba.

Imagen de carlossg

Mm... Te refieres a usar

Mm... Te refieres a usar "col.waw" , en ese caso no tendría sentido hacer la funcion...

Pues tenga o no tenga

Pues tenga o no tenga sentido, así se debe usar la función. sound.loop recibe una ruta, no un sonido previamente cargado.

Imagen de carlossg

Esta bien

Esta bien puesto:

function playSound(soundPath, looped)
	if looped then
		sound.loop(soundPath)
	else
		snd = sound.load(soundPath)
		sound.play(snd)
	end
end

sound.loop(soundPath)  en la funcion,

al llamarla con playSound("col.wav",true) ,pero no se loopea.

Cómo la llamas? Puedes poner

Cómo la llamas? Puedes poner el trozo de code?

Imagen de carlossg

Simplemente para probar estoy

Simplemente para probar estoy llamandola:

back = image.load("Files/Img/background_logo.png")
 
dofile("functions.lua")
 
snd = playSound("col.wav",true) --Ahora que pienso, como se sale al ejecutarlo ,porque se acaban las funciones, alomejor por eso no le da tiempo a loopearlo.

Si, seguro es por lo que

Si, seguro es por lo que dices en el comentario. Añade algo al final para detener el code...

snd = playSound("col.wav",true)
  controls.waitforkey()
 
--O bien...
snd = playSound("col.wav",true)
  while true do
    screen.waitvblankstart()
  end

Imagen de NEKERAFA

Mmm...

Mejor un controls.waitforkeys(), así no tienes que darle al botón home para salir XD

Imagen de carlossg

Ya funciona muchísimas

Ya funciona muchísimas gracias.

PD:Lá pagina de gcrew está todavía sin desarrollar completamente,¿No?

Así es, Deviante le mete mano

Así es, Deviante le mete mano muy seguido (a la web xD).

Imagen de carlossg

Alomejor esta mal, pero yo

Alomejor esta mal, pero yo CREO que se usa para convertir un string a texto.

 

PD:Corregidme si me equivoco.

Un string ya es un texto,

Un string ya es un texto, true y false no son texto, son booleans así que no hace falta ningún tostring allí.

Imagen de Chimecho

Creo...

¿Quieres hacer algo como en el 3DRoll o en el GDP?

Eso está hecho con loadcallback:

logo = image.load("logo.png"); -- cargas el logo giratorio
ang = 0; -- ángulo
 
function loadcallback()
    ang = ang + 2; -- sumas 2 al ángulo, puede ser otro número, prueba a como te guste
    logo:rotate(ang); -- rotas la imagen del logo
    logo:blit(x,y); -- cambia x, y por las coordenadas en pantalla en donde saldrá el logo
    screen.flip(); -- que se muestren los cambios
end
 
-- resto del code
-- image.load("bla..");
-- sound.load("etc...");
-- etc...

Igual puedes revisar el code de los dos homebrews que mencioné.

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Imagen de carlossg

Pero esa funcion después

Pero esa funcion después tengo que llamarla¿No?, porque he visto el codigo de 3dRoll y no la llama por ningún lado, sólo la define

 

PD:Si no hay que llamarla no funciona xD.

Imagen de NEKERAFA

No

LuaDEV ya lo hace internamente al cargar cualquier elemento, si es que la función a sido creada anteriormente.

Yo por ejemplo, la utilizo para hacer una animación al iniciar mi HB (Habia pensado poner una barrita de carga, pero es un ***** ponerse a contar todos los elementos a cargar. Tedré que ver la manera de que los cuente el programa).


Editado: El uso de palabras inadecuadas podría resultar ofensivo para ciertos usuarios y va en contra de las Normas de la Comunidad, antes de volver a postear por favor revíselas.| Rober Galarga


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

En realidad es sencillísimo

En realidad es sencillísimo contar los elementos a cargar...

oldload = image.load  --guardo el load original, porque más adelante lo redefiniré
elementos = 0 --Esta variable es la que usaré para contar lo que cargo
function image.load(ruta)  --Nuevo load... con cuenta automática xD
  elementos = elementos + 1
    return oldload(ruta)
end
 
--Vale, too listo. Ara, para cargar:
elementos = 0 --Siempre antes de empezar a cargar muchas cosas
img1=image.load(...)
img2=image.load(...)
.
.
.
imgn=image.load(...)
 
--Sonidos y 3D? Mismo proceso, usando la misma variable global para contar =)

CREO era así xD

Imagen de Chimecho

Pero..

Es que para hacer una progress bar necesitas el número total de cosas a cargar antes de cargarlas, y con ese code se van contando a medida que van cargando.

Lo único que se me ocurriría es meter todo lo que tenga .load en una función y hacer algo así:

function load()
    var1 = image.load(....);
    var2 = model.load(....);
    var3 = sound.load(....);
    var4 = image.load(....);
    -- etc..
end
 
image.oldload = image.load; -- guardamos el image.load original
sound.oldload = sound.load; -- guardamos el sound.load original
model.oldload = model.load; -- guardamos el model.load original
-- creo que no hay más con load, si los hay, agregarlos siguiendo la misma idea
 
elementos = 0; -- esto servirá para contar la cantidad de elementos a cargar
function fakeload()
    elementos = elementos + 1; -- simple, que sume 1, luego este fakeload es lo que se usará cuando se "cargue" algo
end
 
image.load = fakeload; -- cada image.load aumentará en 1 la variable elementos
sound.load = fakeload; -- cada sound.load aumentará en 1 la variable elementos
model.load = fakeload; -- cada model.load aumentará en 1 la variable elementos
-- En este punto, todo lo que siga usando modulo.load no cargará absolutamente NADA, sólo aumentará en 1 la variable elementos
 
load(); -- llamamos a todos los modulo.load y contará todo lo que cargará
-- En este punto elementos tiene la cantidad total de elementos, ahora ya se puede hacer una progress bar
 
cargados = 0; -- cantidad de elementos cargados
function image.load(ruta)
    cargados = cargados + 1; -- aumentamos en 1 la cantidad de elementos cargados
    draw.pbar(......); -- no recuerdo cómo va exactamente, pero valor es la variable cargados, y el máximo es la variable elementos
    screen.flip(); -- que se vea
    return image.oldload(ruta); -- carga REAL
end
 
-- así para sound y model y el resto

No lo he probado, espero que funcione xD

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.