martes, 26 de agosto de 2008

Sobre la ventana de Sindarin...

Sigo rescatando y reeditando viejos textos escritos sobre sindarin, esta vez sobre la ventana. Lamentablemente lo de capturar locations usando la ventana o capturar el color no funcionan correctamente en linux, pero los comandos para clickear y capturar colores si funcionan tanto en linux como en windows.

La ventana de Sindarin.

Vamos a explicar un poco como usar la ventana del Sindarin:


Las opciones de la pestaña "Control", rodeada por un recuadro verde, sirven para unir a Sindarin con una ejecución de Uo, los elementos de esta pestaña son:
  • La casilla "Modo nativo": esta casilla sirve para activar o desactivar el modo nativo, si desactivas esta opción, el Sindarin funcionara como el Autopilot, es decir que no te dejara usar el ordenador mientras macrea, aunque no lo parezca esto puede ser muy útil para ciertas scripts complicadas, porque hay algunos comandos que no funcionan muy bien en modo nativo. Por otra parte si el modo nativo esta funcionando, al capturar las localizaciones con el Sindarin, solo te cogeran puntos que estén dentro de la ventana de Uo y además el punto [0, 0] sera la esquina superior izquierda de la ventana de Ultima. Como dije antes si desactivas esta opción Sindarin tomara el control del ratón y el teclado, pero además al capturar una localización de pantalla sera con respecto a toda la ventana de windows y no solo a la de Ultima, de echo podrías hacer una script que hiciese cosas en windows en lugar de en Ultima y el punto [0, 0] seria la esquina superior izquierda de la pantalla de windows.
  • La lista desplegable: Suponiendo que Sindarin este funcionando en modo nativo y hubiese detectado la ventana de ultima, aquí sale el nombre de la ventana de ultima sobre la que Sindarin esta funcionando, en teoría detecta todas las que haya y en esa lista puedes elegir cual de todos los Ultimas quieres usar, en la practica yo nunca e usado mas de un Ultima, además el Cliente no te permite abrir mas de una, pero... hay esta la opción.
  • Botón "Buscar Uo": Si Sindarin no detecta la ventana de Ultima es probable que sea por que has abierto el Sindarin antes que la ventana de Ultima, bueno eso se arregla simplemente pulsando este botón, Sindarin intentara buscar la/s ventana/s de Ultima que estén activas y supondrá que la que quieres usar es la primera que encuentre.
Rodeado de un recuadro azul, están los botones típicos de Guardar, Cargar y también hay dos botones de Run(para que ponga a funcionar la macro) y un botón de Stop(para que pare la macro), que estará desactivado hasta que pulses Run. En principio un script(una macro) se puede parar por 4 motivos:
  • Pulsar el botón "Stop"
  • Mantener pulsada la tecla "Pause/Break" del teclado durante un pequeño tiempo, lamentablemente esto solo esta disponible en windows.
  • Por que se llega al final del script(esta diferencia es importante) , ya que al contrario que otros programas del mismo estilo al llegar al final del script
  • Encuentra el comando "exit", que termina la ejecución.
El cuadro de texto central es donde se introducen el código(algo evidente), justo debajo hay una etiqueta que en la imagen pone 3, ese es el numero de linea donde tienes el cursor del teclado. La parte gris de abajo donde pone "Print: Aquí salen los mensajes..." esa es lo que e llamado la consola de mensajes, esta parte es importante por que si nos equivocamos al escribir algún comando, el mensaje de aviso nos saldrá aquí. También saldrán los mensajes que pongas en el comando "print".

Y ahora una parte importantísima de la ventana que son las pestañas rodeadas de rojo, estas sirven para ayudarte a definir y inicializar variables, es decir que sirven para que pongas locations, macros, colores, etc... pero de una forma correcta y ayudan a averiguar por ejemplo que coordenadas tiene tal o tal punto, son las siguientes:

Pestaña "Location":


Aquí podemos ver varios componentes, los dos primeros son iguales para todos los tipos de variables, que son:
  • Botón con la flecha hacia abajo: Esto significa que la variable esta lista y quieres que se pegue en el código, al pulsarlo la variable "bajara" y se pegara al principio del código del script, si tiene algún valor este se pegara como valor inicial de la variable. No hay limite en el numero de variables que uses, puedes usar 0, 100 o 1000, lo único que limita el numero de variables es la cantidad de memoria que tenga tu ordenador.
  • Nombre: este sera el nombre que tendrá la variable, es decir si por ejemplo quieres poner un location que haga click sobre tu mochila pues lo normal seria que esa location se llamase "mochila" de forma que cuando mandes a sindarin a hacer un click con el botón izquierdo sobre la mochila pondrías:

    click left mochila


    Aunque el GUI te permitirá poner casi cualquier nombre, Sindarin solo acepta como nombres aquellos que tengan letras o números o subrayados "_", el resto de nombres dará error y los nombre nunca deben empezar por un numero, ejemplo de nombre correctos:
    • mochila_uno
    • _mochila
    • monton_de_regs_1
    ejemplos de nombre incorrectos:
    • 1000_nightshades
    • dirección de email
    • baúl!
    Por defecto las localizaciones se llaman "loc" seguidas de un numero, pero como ya e dicho lo normal es cambiar ese nombre por uno mas razonable.

    Por cierto existen unas variables especiales que las pone Sindarin desde un principio, ninguna otra variable puede llamarse así y tampoco pueden modificarse, de momento son estas:
    • sindarin_version
    • sindarin_revision
    • true
    • false
    Los campos "X" e "Y": aquí se ponen las coordenadas del punto al que haces referencia.

    Botón "Capturar": este botón es importante, sirve para saber que coordenadas tiene un punto de pantalla, es decir el punto de la location. Al pulsarlo se quedara esperando hasta que pinches en un punto de la pantalla con el botón izquierdo del ratón, e inmediatamente en la casilla
    "X" e "Y" aparecerán las coordenadas de ese punto, con lo que no tienes que calcular o copiarlas, simplemente inicializas el location haciendo click en un punto y listo.

    Este botón funciona de 2 formas distintas, si el Sindarin esta funcionando sobre una ventana de Ultima y el modo nativo esta activado, entonces el botón devuelve las coordenadas del punto respecto de la ventana de Ultima exclusivamente, es decir si haces click en la parte mas a la izquierda y arriba de Ultima saldría [0, 0], si hace click fuera de la ventana de Ultima las coordenadas que te salen
    son [-1, -1] que serian unas coordenadas incorrectas. El otro modo de funcionamiento es cuando Sindarin no a detectado la ventana de Ultima o cuando has desactivado la casilla de "Modo Nativo" con lo que "Capturar" te devolvería las coordenadas respecto de todo windows, esto es útil para hacer algunas scripts complejas, que por desgracia no te permitirían usar el ordenador mientras macreas, aunque te permitiría hacer scripts que hicieran cosas en windows, como intentar volver a arrancar el Ultima si se apaga solo( ^^ si tengo tiempo haré esta script, seria usando el comando "isnativemode" en un comando "if").

    Botón "Capturar loc y color": funciona igual que
    "Capturar", solo que además en la pestaña de "Color" aparecerá el color del punto en que has pinchado, es decir capturas la posición y el color de un punto de pantalla.

    Pestaña "Color":

    Sirve para inicializar colores, para por ejemplo saber si un punto de pantalla a cambiado de color o no, en la foto puedes ver:
    • Botón flecha hacia abajo: Funciona igual que en Location
    • Nombre: Igual que en Location
    • R, G, B: Es donde se ponen los valores del color que quieres inicializar, pueden ser de 0 a 255, por ejemplo si quieres el color rojo tendrías que poner: "255 0 0", aunque no es aconsejable que lo pongas a mano
    • Botón "Capturar": Funciona como el capturar de Location, pero en vez de capturar la posición de pantalla sobre la que pinches capturaras el color.
    • Botón "Captura desde loc": Sirve para capturar el color de un punto que hayas metido en Location, por ejemplo: Supón que quieres saber si el color de tu cara es o no tu color normal(para por ejemplo saber si has muerto o no) y siempre pones la hoja de personaje(paperdoll="ALT"+"P") en el mismo punto y un punto de tu cara esta en el [500, 500] pero quieres saber cual es el color de ese punto en concreto, pues pones 500 500 en las casillas "X" e "Y" de location, vas a Color y pulsas en este botón y ya tendrías el color del punto [500, 500] que por ejemplo seria el de tu cara normal o el de tu cara de muerto ( OoOoooOooooOOoOoo )

    Pestaña "Macrokey":

    Sirve para usar macros de Ultima fácilmente, es decir para que Sindarin pulse 'F1' o 'a', en la foto se puede ver:
    • Botón flecha hacia abajo: Funciona igual que en Location
    • Nombre: Igual que en Location
    • Tecla: Si pinchas aquí y pulsas una tecla aparecerá el nombre con que sindarin usa para pulsar esta tecla. En modo nativo solo funcionan las teclas de números, las de letras, las de función ('F1', 'F2', ..., 'F12') y la tecla 'Introduzca'( es el nombre que Java, y por lo tanto Sindarin, le da al Enter ), aunque si pulsas cualquier otra también saldrá su nombre, pero luego en Sindarin no funcionara, en modo normal funcionan todas, pero claro no podrás usar el teclado
    • Casillas "ALT", "CTRL" y "SHIFT": Si las marcas harás que Sindarin pulse también estas teclas junto con la que hayas escrito. Por desgracia tampoco funcionan en modo Nativo.

    Pestaña "Number":


    Sirve para declarar e inicializar variables numéricas, solo pueden usarse números enteros y positivos, podemos ver en la foto:
    • Botón flecha hacia abajo: Funciona igual que en Location
    • Nombre: Igual que en Location
    • Valor: Aquí puedes poner el numero que a de valer al principio, por ejemplo: Supon que quieres hacer una script para separar minerales, pues puedes usar un Number para controlar el numero de minerales que vas a separar:

    Location Minerales_apilados = [500, 500], minerales_no_apilados = [500, 510]
    Number cantidad_de_minerales = 100
    iodelay 100 msec # Obliga a hacer 1 pausa tras cada comando de ratón o teclado de 100 milisegundos
    repeat cantidad_de_minerales
    drag 1 objects minerales_apilados from minerales_no_apilados
    # también se puede poner "drag 1 minerales_apilados minerales_no_apilados"

    Pestaña "String":


    Sirve para escribir o hacer que el pj diga algo, podemos ver:
    • Botón flecha hacia abajo: Funciona igual que en Location
    • Nombre: Igual que en Location
    • Valor: Escribes el texto que quieres que valga la variable
    Un ejemplo de uso de esto puede ser por ejemplo para hacer que tu pj diga si esta hambriento o no:

    String comando_del_hambre = ".hungry";
    say comando_del_hambre # evidentemente también se puede usar directamente la cadena
    say ".hungry"

    una utilidad de esto puede ser la de componer cadenas, por ejemplo:

    # Vamos a hacer que el pj se despida de un vendor y luego le pida el inventario
    String nombre_vendedor = "Marlon"
    say "bye"
    say nombre_vendedor + " buy"

    Nuestro personaje dirá "bye" y luego "marlon buy", lo cual puede ser muy útil

    Esto también se puede combinar con el comando "call" y los parametros ( $1, $2, ... ) podemos obtener una bonita script para comprar regs.

    Bueno y aunque no lo e explicado, en el menú comandos, solo hay un comando, es el comando "call" que sirve para que se ejecute un script dentro de otro, pero hay que decirle que script quieres que se ejecute, para ello hay que escribir la ruta y el nombre del script que quieres que se ejecute, como eso puede ser una pesadez en este menú te ayudara a elegir el script que quieres que se ejecute. Al pulsarlo te saldrá una ventana típica de abrir fichero, donde deberás seleccionar el fichero del script que quieres llamar y al aceptar, al final del código se pegar un comando "call" seguido del nombre del fichero entre ".

    Este comando es útil para hacer scripts complejas, por ejemplo podrías hacer un script que mirase si estas bajo de vida y si lo estas que hiciese doble-click sobre una poti de Health y luego llamarla desde una script para macrear Swordmanship con Osos invocados o tactics pegándote con otro Pj. "call" también puede escribirse simplemente con una "@"

    Y eso es mas o menos todo lo que tiene la ventana de Sindarin para ayudarte a hacer una script y a ejecutarla.

6 comentarios:

Anónimo dijo...

Llord, en wod no te detecta el cliente? no ay ninguna manera de hacer que funcione como el eenas en vez de como el autopilot?

Lhrod dijo...

Hola anónimo hace mucho que ya no juego, así que no se decirte porque no esta encontrando la ventana de Wod, si te puedo decir lo que ha ocurrido alguna vez en el pasado y es que han cambiado el nombre del cliente de Wod alguna vez y Sindarin busca la ventana con el nombre "ultima online" o "uowod", si ninguna ventana tiene uno de estos títulos Sindarin no se "engancha" a ninguna, esto es lo que es mas probable que este pasando. Aunque es posible que tu copia de Sindarin sea bastante antigua y solo busque uno de los dos titulos. También es posible que estés en Windows Vista, en este caso no sabría decirte, porque no he probado Sindarin en Vista y aunque estoy seguro que el modo "autopilot" funciona bien también en Vista no tengo claro que lo haga el modo "nativo"(eenas).

El modo nativo funciona bien cuando los comandos son simples, es decir hacer click aquí o allí, o pulsar una tecla, pero si los comandos son mas complicados el funcionamiento es un poco errático.

Finalmente pedirte que me mantengas al tanto de como te va, si detectas que el problema es el tema del titulo de la ventana comentamelo y lo solucionare rápidamente.

The Mister Ec dijo...

hay alguna forma de hacer barridos con el puntero hasta que encuentre un color x?
Alguna sugerencia

Lhrod dijo...
Este comentario ha sido eliminado por el autor.
Lhrod dijo...

Si, aunque supongo que hay formas mas eficientes la mas evidente es usar dos bucles uno para la X y otro para Y, mientras dentro del bucle capturas el color del pixel actual y lo comparas con el que estas buscando.

Perdona por tardar tantísimo en responder :P

De todas formas moví el tema de Sindarin a mí otro blog de cosas que hago que es este:

http://laantiguafragua.blogspot.com.es/

Concretamente la sección de Sindarin es esta:

http://laantiguafragua.blogspot.com.es/search/label/Sindarin
La macro que buscas seria + o - así:

-----------------------------------
Location actualPixel = [0, 0] # Empieza en el punto 0, 0
repeat 10
{
repeat 10
{
Color actualColor = color actualPixel
if (actualColor == [255, 0, 0])
{
print "Encontre el rojo"
exit
}
actualPixel = actualPixel + [0, 1] # Bajamos una linea
}
actualPixel = actualPixel + [1, 0] # Movemos un pixel hacia la derecha
}
-----------------------------------

Este script recorrería una zona cuadrada de 10x10 pixel de pantalla buscando el color rojo puro, hasta encontrarlo o salir, si lo encuentra enseña el mensaje "Encontre el rojo" y luego termina. Y la búsqueda seria desde el pixel [0, 0] hasta el [9, 9], rastreando desde arriba hacia abajo y luego pasando a la siguiente línea vertical. -->Esto funciona pero sera bastante lento<--.

De todas formas preferiría que me preguntaras sobre Sindarin aquí:

http://laantiguafragua.blogspot.com.es/search/label/Sindarin

Y que tengas en cuenta que ahora mismo estoy dedicado a otras cosas, lamentablemente el sindarin no trajo como yo pensaba gente que quisiera desarrollarlo por su cuenta ni nada, así que finalmente hice en solitario con su desarrollo hasta que lo he tenido que dejar de lado para poder hacer otras cosas. Aun así gracias por preguntar, siempre es agradable ver que aun alguien lo usa.

Lhrod dijo...

Este post: "http://laantiguafragua.blogspot.com.es/2008/09/algunas-macros-utiles-en-sindarin.html" quizás te sea útil y comente tu pregunta y mi respuesta tmb.