lunes, 3 de mayo de 2010

Corregido SimpleFileUpload

Debido a una serie de problemas relacionados con la diferencia en el funcionamiento de los diferentes sistemas de fichero de los sistemas operativos, esta librería no terminaba de funcionar bien, ahora se a desarrollado un sistema de actualización mas sofisticado que termina con el problema:

Fichero binario:
http://simplefileupdate.googlecode.com/files/SimpleFileUpdate.jar

lunes, 19 de abril de 2010

SimpleFileUpdate

Publicada librería "SimpleFileUpdate", la utilidad de esta librería consiste en poder ofrecer de forma muy sencilla, la manera de actualizar ficheros binarios al estilo: "Hay actualizaciones nuevas para descargar...", sin necesidad de mantener una arquitectura de cliente servidor, basta la librería funcionando en el cliente y algún sitio en la red donde estén accesibles los nuevos ficheros binarios así como un XML de configuración e información.

Aunque pensada para ser incluida en proyectos de java, también permite la construcción de un programa externo que actualice cualquier tipo de ficheros.

Los ficheros fuentes no han sido subido en forma de fichero de descarga, pero estan disponible en el repositorio a partir de esta URL:
http://simplefileupdate.googlecode.com/svn/trunk

domingo, 18 de abril de 2010

El principio.

Con este blog que inicio, pretendo publicar los diferentes proyectos de software que suelo hacer por afición y de esta forma separar mis pequeños proyectos de mi otro blog mas personal.

No pretendo hacerme rico con este software, ni ganar dinero, ni halagos, simplemente dar a conocer algunas herramientas que programo por si a alguien le pueden ser útiles en algún momento.

Lo primero que he hecho es reeditar los post publicados en mi blog personal aquí, que estuvieran relacionados con el software.

Normalmente uso la licencia GNU, así que libertad para todos.

Con suerte tendré colaboradores y todo. ;)

jueves, 22 de octubre de 2009

Sindarin returns

Debido a petición popular he puesto algunas cosas nuevas en Sindarin:

* Se ha implementado, de forma experimental, un botón para poder usar el modo nativo con cualquier ventana aunque no tenga el titulo adecuado. En la pestaña control junto al botón de "buscar uo" aparece uno que se llama "buscar otros", al pulsarlo sale una ventana con los nombres de las ventanas que Sindarin a podido descubrir,

* Implementado una monisima ventanita de "acerca de..."

* Se le han puesto ficheros de internacionalización, así que se traducirá automáticamente al ingles cuando el ordenador tenga ese idioma. También es posible editarlos para lograr que el Sindarin busque por defecto los títulos de ventanas de UO que nos plazca de forma automática.

* Se le añadió una lista de las instrucciones en el menú "Instrucciones", no estoy seguro que estén todos pero es un buen recordatorio.

* El comando "Component", que es nuevo ya funciona, sirve para poder consultar los componentes particulares de los colores y de las localizaciones un ejemplo de uso seria el siguiente:
Location barra_vida = [358, 325];
Color c = Color barra_vida;
Number verde = component 2 c

while (verde < 125) {
c = Color barra_vida
verde = component 2 c
print "No estamos muy verdes"
}
print "SuperVerdes"

Podéis bajarlo donde siempre:

Fichero binario:
http://sindarin.googlecode.com/files/Sindarin.jar
Fuentes y el proyecto(Netbeans 6.7.1):
http://sindarin.googlecode.com/files/Sindarin.tar.gz
http://sindarin.googlecode.com/files/Sindarin.zip

miércoles, 17 de septiembre de 2008

Algunas macros utiles en Sindarin

Macro para separar ores y quemarlos sobre la marcha:

Location vetas_minerales = [775, 440];
Location veta_mineral = [709, 476];
Location veta_mineral_para_quemar = veta_mineral - [0, 5] + [4,0];
number cant_minerales = 196;

repeat (cant_minerales - 3)
{
drag 1 vetas_minerales veta_mineral
}

repeat (cant_minerales - 3)
{
dclick left veta_mineral_para_quemar
wait 1
wait 400 msec
}

Y ahora con muchos comentarios que explican el funcionamiento:

# En esta localizacion tenemos los ores agrupados
Location vetas_minerales = [775, 440];

# En esta localizacion tenemos el sitio donde se pondran los minerales de 1 en 1
Location veta_mineral = [709, 476];

# Esta localizacion apunta a los minerales sueltos para ir quemando
# se calcula en las proximidades a la veta de mineral
Location veta_mineral_para_quemar = veta_mineral - [0, 5] + [4,0];

# El numero de minerales que vamos a separar quemar
number cant_minerales = 196;

# Aqui comprobamos que las localizaciones estan bien puestas
# descomentando el exit que esta mas abajo, tambien podemos mover un mineral para asegurarnos
mousemove vetas_minerales
wait 1
mousemove veta_mineral
wait 1
mousemove veta_mineral_para_quemar
#drag 1 vetas_minerales veta_mineral
#exit

# Separar la cantidad de ores menos 3, ya q cuando hay - de 3 vetas el objeto
# cambia de forma y se puede perder la localizacion
repeat (cant_minerales - 3)
{
drag 1 vetas_minerales veta_mineral
}

# Se queman tantos minerales como se han separado
repeat (cant_minerales - 3)
{
dclick left veta_mineral_para_quemar
wait 1 # espera un segundo
wait 400 msec # y 400 milisegundos
}

Todos los comentarios son explicativos y las pruebas no son necesarias, pero si utiles.


La típica macro de repetir constantemente la tecla F1:

wait 1 # Esperamos 1 segundo por si acaso
while true # Repetimos para esto para siempre
{
pkey 'f1' # Pulsa f1
wait 8 # esperamos 8 segundos hasta volver a pulsar
}



Tipica macro de construccion de dagas (o cualquier otro objeto):

Location armas = [250, 100];
Location flecha = [267, 92];
Location lejos = [500, 500];
Location arma = [90, 87]
Location tipo = [80, 87];

wait 1

repeat (40/3)
{
pkey 'F1'
wait 1

repeat 2
{
click left flecha
wait 1
mousemove lejos
}

dclick left armas
wait 1
dclick left tipo
wait 1
dclick left arma
wait 4
}


La misma con comentarios que explican el funcionamiento:

Location armas = [250, 100];
Location flecha = [267, 92];
Location lejos = [500, 500];
Location arma = [90, 87] # dagas
Location tipo = [80, 87]; # dagas

wait 1

# Intenta construir tantas dagas como pueda con 40 lingotes, suponiendo que
# se necesitan 3 lingotes por daga
repeat (40/3)
{
pkey 'F1' # Macro en ultima de lastobject, lasttarget
wait 1

# En el menu de herreria, hay que pulsar 2 veces(esto varia segun el server) sobre
# la flecha de la derecha para llegar a las armas de swordmanship
repeat 2
{
click left flecha
wait 1
mousemove lejos # x si sale el cuadrado negro explicativo
}

dclick left armas # Doble click sobre el menu de construccion de armas
wait 1
dclick left tipo # Doble click sobre armas de sword
wait 1
dclick left arma # Doble click sobre menu de las dagas
wait 4 # Esperamos 4 segundos, que acumulados a los que esperamos
# que al sumarse con los segundos que se espera para navegar
# de menu en menu son 9 segundos entre daga y daga
}



Macro para aplicar vendas de vez en cuando, que ademas comprueba que hora es y si son mas de las 11:30 de la mañana apaga el Uo y detiene el script:

number hora,minutos,segundos;
wait 1 sec
while true
{
time (hora,minutos,segundos);
if ((a >= 11) && (b >= 30))
{
wait 4
pkey 'alt'+'f4'
wait 1
exit
}
pkey 'f5'
wait 20
}


Y ahora con extras y explicaciones añadidas:


number hora,minutos,segundos; # Para guardar la hora
wait 1 sec
while true # Repetimos para siempre(o hasta q paremos el script)
{
time (hora,minutos,segundos); # Almacenamos la hora en las variables

# Mostramos la hora en la consola de mensajes
print "Son las " + hora+":"+minutos+":"+segundos

# Si son las 11:30 o mas tarde
if ((a >= 11) && (b >= 30))
{
beep # Hacemos sonar un beep
wait 4
pkey 'alt'+'f4' # Pulsamos Alt+F4 lo que cerrara el UO a lo bestia
wait 1
exit # Terminamos de ejecutar el script
}
pkey 'f5' # F5 es una macro lastobject-targetself
# que nos abremos acordado de aplicar vendas
# antes de empezar
wait 20 # Esperamos 20 segundos antes de volver a aplicar
}