Anuncios Google

cam-maker, Explorador de archivos tutorial[Ya pueden comentar x'D]

Bueno amigos de scenebeta me he decido ha  escribir este tuto, debido a que veo muchos post sobre preguntas de cómo hacer un explorador, todo esto bajo LuaDEV, espero resolver sus dudas con esto, ya que un explorador es muy importante a la hora de elaborar un homebrew… bueno eso también depende de su uso xD pero ustedes saben xD manos a la obra :D

Primero declaramos las variables que utilizaremos.

posicion 	= 1
limiteInf 	= 1
Chocolate 	= color.new(210,105,30)
negro 		= color.new(0,0,0)
blanco 		= color.new(255,255,255)
rojo 		= color.new(255,0,0)
workDir 	= files.list("ms0:/")

 “posicion” será nuestra variable que nos indicara en que lugar nos encontramos. Ejemplo, si nos encontramos adentro de una carpeta con 10 archivos con “posicion” sabremos en que archivo estamos posicionados indicado por un numero entero:

posicion 	= 1

 “limiteInf” esta variable nos ayudara hacer el famoso scroll, para que quede un poco mas claro la variable se llama “Limite Inferior” obvio verdad xD esto marcara el inicio de donde se comenzara a imprimir los elementos de nuestra tabla esta variable no es “x”, ya veras su uso mas adelante ;)

limiteInf 	= 1

Declaramos nuestros colores, siempre tomando en cuenta el post de xerpi aquí recuerda que esto es a tu gusto:

Chocolate 	= color.new(210,105,30)
negro 		= color.new(0,0,0)
blanco 		= color.new(255,255,255)
rojo 		= color.new(255,0,0)

Y por ultimo nuestro directorio de trabajo “workDir” si observas hemos utilizado una función de LuaDEV files.list() siempre revisa la documentación =_= files.list() es una función que nos lista los elementos de una carpeta, en otras palabras guarda en una tabla o array la dirección de los archivos que se encuentran en ella. En este caso files.list("ms0:/") guardara en una tabla todos los archivos que hay en la raíz de la memoria:

workDir 	= files.list("ms0:/")

Ahora haremos la función que recorrerá nuestra tabla donde están guardadas las direcciones de los archivos.

function opciones()
	x 		= 10
	y 		= 13
	lugar 	= workDir[posicion].name
	for i= limiteInf, #workDir do
		if posicion == i  then
			screen.print(x,y,files.nopath(workDir[i].name),0.6,negro,blanco)
		else 
			screen.print(x,y,files.nopath(workDir[i].name),0.6,blanco,0x0)
		end
		y 	= y + 13
	end
end

Declaramos nuestras variables de ubicación “x” & “y” con ellas se ubicara el texto donde tu lo asignes, te recomiendo estos valores; específicamente el de “y” debidos a las condiciones del scroll, pero tu fácilmente lo puedes modificar:

x = 10
y = 13

lugar” se me acabo la imaginación xD asi que lo llame “lugar” esta variable almacena el lugar o archivo donde nos encontramos, no la posición, si no el nombre de la carpeta o archivo donde estamos posicionados:

lugar = workDir[posicion].name

Haremos el bucle que recorrerá nuestra tabla he imprimirá los nombres de los archivos:

for i= limiteInf, #workDir do

Esta es la estructura básica de un for: “for inicio, final do” esto sin contar el “end” que cierra el bucle. Esto quiere decir que nuestro for iniciara en 1(limiteInf = 1) y llegara hasta el tamaño de nuestra tabla; en Lua si antepones un # a una tabla, obtienes el valor de índices que hay en ella. 

Ahora haremos la condición que imprimirá nuestras opciones:

if posicion == i  then
	screen.print(x,y,files.nopath(workDir[i].name),0.6,negro,blanco)
else 
	screen.print(x,y,files.nopath(workDir[i].name),0.6,blanco,0x0)
end
y 	= y + 13

He decidido no explicar esta sección para que lean la documentación xD aunque yo en un tutorial anterior explique como funciona esto, pero no seria malo que repasaras la docu ;)

Vamos con la función para navegar por las opciones:

function navegador()   
	if controls.press("down") and posicion ~= #workDir then
		posicion = posicion + 1
		if posicion > 19 then limiteInf = limiteInf + 1 end
	end
	if controls.press("up") and posicion > 1 then  
		posicion = posicion - 1
		if posicion > 18 then limiteInf = limiteInf - 1 end
	end
end

Ocuparemos una condición la cual, si presionas abajo o arriba ejecutara una acción. Si has leído tutoriales de programación o traes algunas bases de otros lenguajes, sabrás sobre el operador booleano “and” que en Lua se escribe de la misma manera. El operador “and” es una conectiva que puede definirse como verdadera, sólo cuando ambas proposiciones sean verdaderas. Para que entiendas mejor veamos nuestra condición:

if controls.press("down") and posicion ~= #workDir then

si presionas abajo y(and) la variable posición es diferente que #workdir entonces…

Solo si se cumplen las dos condiciones se hará lo que deseamos. 

Ahora que ya entendemos por que ocupamos el operador “and” explicare por que “la variable posición tiene que ser diferente que #workdir” por que si “posicion” aumentara mas que el numero de índices de la tabla, nos daría error; por que buscaría variables en una tabla con índices que no existen.

Si eso se cumple ejecutamos lo siguiente.

Ya que cambiamos de archivo necesitamos cambiar también la posición en la que nos encontramos.

posicion = posicion + 1

Ahora aquí viene nuestro famoso scroll :D

if posicion > 19 then limiteInf = limiteInf + 1 end

He declarado 19 por el tamaño de letra que he asignado y el espacio entre cada impresión, si hay más de 19 archivos no podremos verlos todos. Recuerda nuestro for de impresión (for i= limiteInf, #workDir do) nuestra variable “limiteInf” empezaba en 1 y con esto se sumara tantas veces sea necesario, es decir que ya no imprimirá mis archivos desde el primero, si no desde lo indique “limiteInf” eso hará nuestro famoso scroll :D fácil verdad.


La segunda condición es lo mismo pero esta se cumplirá si presionas arriba y si “posicion” es mayor que 1, por que, si esta variable llega a cero, nos dará un error. Y el Scroll de este es igual solo que inverso, en ves de sumarle a “limiteInf” se resta1.


Vamos a nuestra función para entrar a las carpetas :D

function adelante()
	if workDir[posicion].directory then
		posicion 	= 1
		limiteInf 	= 1
		workDir 	= files.list(lugar)
	end
end

En esta función, realizamos una condición que verificara, si donde nos encontramos (posición) es una carpeta o un archivo, esto lo sabemos colocando “.directory” a la tabla que almacena nuestros archivos listados.

Luego colocamos las variables “posicion” y “limiteInf” en 1 para que no haya errores de índices no encontrados en la tabla que listamos con:

workDir 	= files.list(lugar)

Si se recuerdan “lugar” mantenía el nombre de donde estamos ubicados, esto al pasárselo al file.list() listara lo que hay en la carpeta. Fácil no? x’D 

Vamos con la funcion atras:

function atras()
   posicion 	= 1
   limiteInf 	= 1
   workDir 		= files.list(files.nofile(files.nofile(lugar)))
end

con esto nosotros podes regresar, de alguna carpeta en la que nos hayamos metido y siempre colocamos las variables “posicion” y “limiteInf” en 1 para que no haya errores de índices que no existen en la tabla que listamos con

workDir 	= files.list(files.nofile(files.nofile(lugar)))

la funcion files.nofile() sirve para quitar el archivo a una ruta, pero no solo eso, puede seguir quitando hasta directorios… como asi? Veamos con un ejemplo:

Nos encontramos en la carpeta “demo” posicionados en el archivo “script.lua”

“ms0:/PSP/GAME/demo/script.lua”

Si nosotros aplicamos la función files.nofile() ha esa cadena nos quedaría:

“ms0:/PSP/GAME/demo/

 Pero eso no es suficiente, por que si listamos eso, nos quedaremos en el mismo lugar, ya que estamos en esa misma carpeta. Entonces volvemos aplicar la misma función files.nofile() y nos quedaría asi

“ms0:/PSP/GAME/

Al listar eso, estaremos un directorio arriba de donde nos econtramos. Yo se LuaDEV es lo máximo x’D

Bueno espero poder ayudarles con este tutorial, respondiendo algunas o todas sus dudas sobre este tema, le he puesto algunos efectos (solo son colores x'D) para que no se vea tan cutre, esto es el gusto del programador :3 se que el código se podría simplificar mas, pero como dije es gusto del programador :3

Cualquier duda o comentario es bienvenido : D

Les pongo el codigo completo para que lo examinen, lo demas no lo explico por que seria de sobra:

posicion 	= 1
limiteInf 	= 1
Chocolate 	= color.new(210,105,30)
negro 		= color.new(0,0,0)
blanco 		= color.new(255,255,255)
rojo 		= color.new(255,0,0)
workDir 	= files.list("ms0:/")
function opciones()
	x 		= 10
	y 		= 13
	lugar 	= workDir[posicion].name
	for i= limiteInf, #workDir do
		if posicion == i  then
			screen.print(x,y,files.nopath(workDir[i].name),0.6,negro,blanco)
		else 
			screen.print(x,y,files.nopath(workDir[i].name),0.6,blanco,0x0)
		end
		y 	= y + 13
	end
end
function navegador()   
	if controls.press("down") and posicion ~= #workDir then
		posicion = posicion + 1
		if posicion > 19 then limiteInf = limiteInf + 1 end
	end
	if controls.press("up") and posicion > 1 then  
		posicion = posicion - 1
		if posicion > 18 then limiteInf = limiteInf - 1 end
	end
end
function adelante()
	if workDir[posicion].directory then
		posicion 	= 1
		limiteInf 	= 1
		workDir 	= files.list(lugar)
	end
end
function atras()
   posicion 	= 1
   limiteInf 	= 1
   workDir 		= files.list(files.nofile(files.nofile(lugar)))
end
while true do
	controls.read()
	navegador()
	draw.gradrect(0,0,480,272,Chocolate,Chocolate,negro,negro)
	opciones()
	screen.flip()
	if controls.press("cross") then
		adelante()
	end
	if controls.press("circle") then
		atras()
	end
end

 


"Las cosas brillantes siempre salen de repente, como la geometría de una flor"



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.

Tengo un preguntita...

Le pones limite arriba, pero... ¿se le puede poner para que haga un print de un numero determinado de archivos, en vez de todos los que haya?


 

 

Imagen de AitorDB

By Aitor

Dices que se vean menos archivos en pantalla ¿no?

Haz esto por ejmplo (es ujn poco chapucero por asi decirlo pero bueno, también es más sencillo, cómodo y comprensible.

 

if y >= 230 then y = 277 end


Sígueme en Twitter: @Aitor_db

Imagen de NEKERAFA

Mmm...

Mmmm...

Es algo chapucero... pero es justo lo que buscaba, la verdad!

xDD

Muchas gracias.

Imagen de AitorDB

By Aitor

De nada, si necesitas algo avisa Guiño

Imagen de NEKERAFA

Mmm...

Pues si... Supongamos que solo salen en pantalla X archivos. Solo tienes que sumarle el límite inferior al superior y despues comprobar que no sea mayor que el númerpo de archivos totales. Utiliza math.max()  en este caso para facilitar las cosas


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).

Y...

Que valor tomaría el limite superior??

Imagen de NEKERAFA

Mmm...

Depende del tamaño de las letras y de la zona donde lo quieras poner. Imaginate que es en toda la pantalla, por lo quehe probado y caben 18 elementos, por lo que utilizando la función del tutorial sería así:

function opciones()
	lugar 	= workDir[posicion].name
	for i= limiteInf, math.min(limiteInf+18, #workDir) do
		if posicion == i  then
			screen.print(10, 15*y, files.nopath(workDir[i].name), 0.6, negro, blanco)
		else 
			screen.print(10, 15*y, files.nopath(workDir[i].name), 0.6, blanco, 0x0)
		end
	end
end

No lo he probado, pero en teoría solo muestra lo que hay que mostrar, encima de reducir código inecesario.

 

P.D: Se me ocurrió mientras estaba en la ducha XD


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).

LOOOOL

Ok. Lo probaré.

Imagen de User170294

[duda] como reproducir un archivo de música

hola, pues como veis no consigo reproducir un archivo de sonido que engamos seleccionado en el menu explorador pulsando X,,,

lo he intentado con el siguiente código:

if controls.press("cross") and files.ext(workDir[posicion].name) == "mp3" or files.ext(workDir[posicion].name) == "wav" then
	sound.play(workDir[posicion].name);
end

pero no me funciona...

alguien puede aportar algo de luz en el asunto?? gracias :D

salu2


Imagen de barney77

Pues, esque no cargas el

Pues, esque no cargas el sonido, es así(copio y pego tu code y le añado):

if controls.press("cross") and files.ext(workDir[posicion].name) == "mp3" or files.ext(workDir[posicion].name) == "wav" then
	sonido=sound.load(workDir[posicion].name);
	sonido:play();
end

Saludos.

Imagen de Dioni0396

el or,

hara que si hay un WAV se reproduzca automaticamente (Experiencia propia)

Imagen de User170294

OK

Entonces el code debería ser este:

--con este code no se reproduce un WAV si lo hay automaticamente
if controls.press("cross") and files.ext(workDir[posicion].name) == "mp3" or controls.press("cross") and files.ext(workDir[posicion].name) == "wav" then
	sonido=sound.load(workDir[posicion].name);
	sonido:play();
end

salu2


Imagen de cam-maker

perdon

perdon si no habia comentado antes x'D pero creo que seria mejor asi

if controls.press("cross") and (files.ext(workDir[posicion].name) == "mp3" or files.ext(workDir[posicion].name) == "wav") then
	sonido = sound.load(workDir[posicion].name);
	sonido:play();
end


"Las cosas brillantes siempre salen de repente, como la geometría de una flor"


Imagen de Dioni0396

Efectivamente

Asi estaria correctamente.

Imagen de User170294

pues un poco mas arriba me

pues un poco mas arriba me comentabas que con el or, si habia un WAV lo reproduciria automaticamente ¬¬

salu2

Imagen de Dioni0396

si, pero pones

de nuevo si pulsa X con lo cual ya no es lo mismo, aunque tambien sirve el ejemplo de cam.

Imagen de User170294

Esta info me será de mucha

Esta info me será de mucha ayuda ^^

 

EDITO: Deberías poner comentarios en las funciones para que sea más facil entenderlo. Yo nunca había lido el código de un explorador de archivos y me da dolor de cabeza leerme esto. ;)


Imagen de Dioni0396

hombre yo te lo explico en un pis pas

posicion 	= 1
limiteInf 	= 1
Chocolate 	= color.new(210,105,30)
negro 		= color.new(0,0,0)
blanco 		= color.new(255,255,255)
rojo 		= color.new(255,0,0)
workDir 	= files.list("ms0:/")
--Todo lo de arriba lo entiendes perfectamente
function opciones()
	x 		= 10 --marcamos x
	y 		= 13 --marcamos y
	lugar 	= workDir[posicion].name --Creamos una tabla con el nombre de los archivos de workdir
	for i= limiteInf, #workDir do --Un bucle for, desde limiteinf hasta el limite de workdir
		if posicion == i  then --Si posicion == i, i puede ser igual a 2,3,4,5,6....
			screen.print(x,y,files.nopath(workDir[i].name),0.6,negro,blanco) --printeamos
		else 
			screen.print(x,y,files.nopath(workDir[i].name),0.6,blanco,0x0)
		end
		y 	= y + 13
	end
end
function navegador()   
	if controls.press("down") and posicion ~= #workDir then --Si pulsamos abajo, posicion = posicion + 1, que afecta al bucle for
		posicion = posicion + 1
		if posicion > 19 then limiteInf = limiteInf + 1 end
	end
	if controls.press("up") and posicion > 1 then  --lo mismo pero pulsamos arriba
		posicion = posicion - 1
		if posicion > 18 then limiteInf = limiteInf - 1 end
	end
end
function adelante()
	if workDir[posicion].directory then --Si la entrada es un directorio entonces
		posicion 	= 1
		limiteInf 	= 1
		workDir 	= files.list(lugar) --workdir es ahora el files.list(lugar)
	end
end
function atras()
   posicion 	= 1
   limiteInf 	= 1
   workDir 		= files.list(files.nofile(files.nofile(lugar))) --Nunca entendi esto.
end
while true do
	controls.read()
	navegador()
	draw.gradrect(0,0,480,272,Chocolate,Chocolate,negro,negro)
	opciones()
	screen.flip()
	if controls.press("cross") then
		adelante()
	end
	if controls.press("circle") then
		atras()
	end
end

Imagen de barney77

Files.nofile sirve para

Files.nofile sirve para volver al directorio anterior.

Imagen de NEKERAFA

No

Files.nofile() nos devuelve un string sin el último archivo o carpeta. Lo puedes utilizar para poner la ruta actual sin el archivo o para volver al directorio anterior


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 User170294

Gracias, me has arreglao el

Gracias, me has arreglao el dolor de cabeza xD

Imagen de NauTiluS1

Que le agregaste que antes no

Que le agregaste que antes no tenia?

Imagen de cam-maker

mmm

define "antes" 

no se a que te refieres o.o

Imagen de NauTiluS1

Dijiste que no estaba

Dijiste que no estaba terminado y ahora si xD

Imagen de cam-maker

iba explicar una parte

iba explicar una parte, pero me dio weba... na bromas, es para que investigaran un poco xD 

puse negritas y otras cosas, por eso ;)


"Las cosas brillantes siempre salen de repente, como la geometría de una flor"


Imagen de lostdajt

Creo que no esta relacionado con este

Tuto, pero me podrias enseñar, por ejemplo ya probe este mini explora, pero quisiera saber como le hago para reproducir un archivo mp3, poner solo una funcion y que se reproduzca cualquiera, como en tu pspclawexplorer, con la funcion de mp3.


HiderDEV 2.0: 100%  3D Images: 100%   American Run: 100%

 

 

 

Imagen de cam-maker

a ver

hay una funcion en LuaDEV que sirve para obtener la extension de un archivo segun el codigo "lugar" contiene el nombre de donde estas posicionado, si estas en un archivo puedes obtener la extension, cuando ya la tengas, solo comparalo con "mp3" y si esto se cumple, cargas el sonido y lo reproduces ;)


"Las cosas brillantes siempre salen de repente, como la geometría de una flor"


Imagen de lostdajt

Entendi

todo menos lo ultimo de cargar el sonido, tengo que poner la direccion de donde esta la musica, lo que quiero es que cargue sea el sonido que sea.

function mp3()
	if control.cross() and files.ext(workDir[lugar].name) == "mp3" then
			sound.load(lugar,1)
end


HiderDEV 2.0: 100%  3D Images: 100%   American Run: 100%

 

 

 

Imagen de Dioni0396

te dejo un trozo que tengo de un explorador que tengo

USALO como referencia. No copy/paste.

function MP3()
if controls.press("cross") and files.ext(Directorio[Sel].name) == "mp3" or files.ext(Directorio[Sel].name) == "wav" then
Cargar = true
end
if Cargar == true then
Cancion = sound.load(Directorio[Sel].name)
Cargar = "Cargando"
end
if Cargar == "Cargando" then
sound.play(Cancion,1)
Cargar = "Reproduciendo"
end
end

Imagen de lostdajt

Dioni

Si entiendo esta funcion, la puedo poner en mi hb:

function MP3()
if controls.press("cross") and files.ext(Directorio[Sel].name) == "mp3" or files.ext(Directorio[Sel].name) == "wav" then -- Si presiono X y hay archivos con extencion mp3 o wav entonces...
Cargar = true -- Cargar es verdadero.
end
if Cargar == true then -- Si cargar es verdadero entonces...
Cancion = sound.load(Directorio[Sel].name) -- Varable cancion = carga cualquier sonido en directorio antes mencionado y el que este seleccionado
Cargar = "Cargando" -- Cargar se vuelve a cargando
end
if Cargar == "Cargando" then -- Si cargar esta cargando entonces...
sound.play(Cancion,1) -- reproduce sonido la cancion que se cargo con la variable cancion canal 1.
Cargar = "Reproduciendo" -- cargar se vuelve reproduciendo.
end
end

Espero sea asi.


HiderDEV 2.0: 100%  3D Images: 100%   American Run: 100%

 

 

 

Imagen de Dioni0396

Bueno

por lo menos podrias cambiar las variables....

Es que asi no vas a aprender...

Imagen de barney77

Exactamente como dioni te lo

Exactamente como dioni te lo ha dado, aunque creo que podrias ahorrate los bolens e if's, con algo como esto:

if controls.press("cross") and files.ext(Directorio[current].name) == "mp3" or files.ext(Directorio[current].name) == "wav" then
sound.play(Directorio[current].name) end;

Imagen de NauTiluS1

Se pero lo que estamos

Se pero lo que estamos haciendo los booleanos tienen suma importancia para no quedar como un desastre ni nada de eso.

La varible

Estoy con Barney, la variable cargar se puede quitar sin muchos problemas, ademas el hecho de asignarle primero un valor boolean y luego un string a la misma variable no es una muy buena practica de programacion y pocos lenguajes te dejan hacerlo, asi que mejor evitarlo jaja

Imagen de barney77

un desastre?, de que tipo?,

un desastre?, de que tipo?, no creo que se rompa el psp xDD

Imagen de cam-maker

mira bien las variables

mira bien las variables

lugar = workDir[posicion].name

"lugar" contiene el nombre de donde estas posicionado, cuando lo comparas y da verdadero, ya andentro lo cargas y lo reproduces ;)


"Las cosas brillantes siempre salen de repente, como la geometría de una flor"


Imagen de Dioni0396

Eso es sencillo

if control--boton xD and files.ext(Direccion[Selector].name) == "mp3" then
--Cargamos mp3 xD

Imagen de Dioni0396

Quien!

Quien te bendicio con el Don de la programacion!?

Gracias por el tuto ;)

Imagen de cam-maker

no es para tanto

no es para tanto

solo espero que esto te ayude ^^

Saludos ;)

Imagen de NauTiluS1

Uff despues de varios meses

Uff despues de varios meses esperandolo:

Nautilus:

"Cuando haras el tuto?"

cam:

"Mañana :D"

nautilus:

"Lo espero!"

Una semana despues:

nautilus:

"Cuando haras el tuto"

cam:

"Pronto ya veras!"

Un mes despues:

nautilus:

"Que cuando haras el tuto!!!"

Se agradece nos vendrá muy bien


Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP

Igual que yo...

Igual que yo jeje...

Imagen de cam-maker

lo siento por la espera ^^'

lo siento por la espera ^^'

pero el estudio y todo eso ustedes saben x'D

Por supuesto...

Los estudios son lo primero ;-)

Imagen de barney77

Eso me aclaro muuchas cosas,

Eso me aclaro muuchas cosas, gracias.

Imagen de cam-maker

de nada

de nada ;) cualquier cosa pregunta ^^

¡¡Por fin, compañero!!

Muchas gracias por hacerlo, me vendrá de perlas.

Imagen de Vic1717

.....

como que el titulo dic:

Por favor no comentar

Saludos!

Imagen de Dioni0396

arriba pone

"Cualquier duda o comentario es bienvenido"


Editado: El uso abusivo de formatos de texto (como negritas y cursiva) dificulta la lectura e incumple las Normas de la Comunidad, antes de volver a postear por favor revíselas.| Rober Galarga

Imagen de Chimecho

amm

Sólo lees las negritas?, cito:

aun así no comenten y hagan caso omiso a esto "Cualquier duda o comentario es bienvenido"

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.