Subir

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 20 de 26

Tema: [GUIA] EasyUO por Yerator

  1. #1

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15

    [GUIA] EasyUO por Yerator

    Por Yeraitor

    Tras ver el interes existente , aqui os pongo una guia rapida del EasyUO para que no siempre se beneficien los mismos de esas maravillosas macros y cada cual pueda hacer la suya propia , personalizada a su gusto (como las pizzas xDD)

    ************************************************************************************************** ********************************

    AYUDA PARA EASYUO


    Este archivo proporciona información sobre cómo usar EasyUO. La versión de EasyUO es la 1.22, la versión para el cliente 2.00.0 . Esto es así porque es la única que funciona en servidores gratuitos.


    +¿Qué es EASYUO?
    +Instalación y configuración
    +Nociones básicas para poder usar scripts
    +Nociones básicas para programar tus propias scripts
    -COMANDOS/OPERACIONES
    -INTRODUCCION A LAS FUNCIONES Y SUBRUTINAS:

    -BUSCANDO Y USANDO OBJETOS:
    -EVENTOS:
    -VARIABLES DE SISTEMA

    ¿Qué es EASYUO?


    EASYUO (también llamado EUO) es un programa externo al juego Ultima Online que permite automatizar tareas repetitivas de modo que las ejecute sin la necesidad de intervención humana.
    Es muy común en el juego tener que repetir la misma sucesión de acciones más de cien veces:
    - Usando el pico para encontrar mineral
    - Forjar
    - Talar
    - Entrenar una determinada habilidad: Magery, Animal Taming, etc...

    EASYUO es básicamente un sistema de scripts capaz de comunicarse con el Ultima Online, siendo él el que simule los clicks de ratón, las pulsaciones de tecla, etc. consiguiendo así unos resultados similares a los de una persona realizando las mismas acciones (en ciertos casos puede que mejores).


    El sistema de scripts es muy parecido a los lenguajes de programación auténticos (léase C, BASIC), por lo que la capacidad de este programa es muy grande. Esto permite que los scripts (a partir de ahora emplearemos scripts o macros indistintamente) puedan ser capaces de reaccionar según lo que ocurra durante el juego.

    Instalación y configuración


    AVISO: Este archivo de ayuda está dirigido a usuarios de servidores gratuitos. Si juegas en los servidores oficiales, este apartado no deberías usarlo. Además se han omitido en esta ayuda las funcionalidades que no aparecen en el EASYUO para servidores gratuitos.

    Antes de nada, el primer paso es conseguir todos los archivos necesarios para que todo funcione correctamente. Para ello necesitamos:

    - EASYUO versión 2.00 para servidores gratuitos (freeshards).

    - Cliente de Ultima Online versión 2.00.0

    El EUO se descarga desde http://www.easyuo.de/ , en la sección downloads. El cliente puede bajarse desde http://www.paigelore.com/ o http://www.angelfire.com/super/clients2/
    Instalando:
    Descomprimimos el cliente 2.00.0 en la carpeta Ultima.
    Creamos una carpeta llamada EASYUO dentro del directorio Ultima y allí descomprimimos el EASYUO.


    Configuración:
    Ejecuta el cliente, y a continuación el EUO. Si al hacer esto te aparece el siguiente mensaje:
    'This EUO version only works properly with client 2.0.0. (2D)'
    significa que el cliente que bajaste no es el correcto.




    Errores frecuentes en este apartado:
    - Bajarse el EASYUO incorrecto. El EUO debe ser el 2.00 para Freeshards.
    - Usar un cliente incorrecto. El cliente debe ser versión 2.00.0 (¡no es lo mismo que 2.00.0a , 2.00.0c, etc.!)

    Nociones básicas para poder usar scripts


    Aquí se dará la información mínima para ser capaz de usar macros que tengamos (no el programarlas, sólo el ser capaz de ejecutarlas).
    Botones básicos:
    Botón de Play: Sirve para ejecutar la macro una vez la hayamos cargado dentro del EUO
    Botón de Pause: Para pausar la macro, si pulsamos de nuevo Play continuará desde donde se quedó.
    Botón de Stop: Aborta la ejecución de la macro.

    Existen una serie de opciones básicas que debe saberse. En la pestaña Options tenemos varias opciones:

    - Pause Key: Es una tecla tal que si la pulsas mientras el juego UO está en primer plano, pausará la macro.
    Hay varias teclas posibles, siendo la más adecuada la de Scroll Lock
    - Allow execute: Cuando está activada, esta opción permite que la macro pueda ejecutar programas externos.
    No se recomienda activar esta opción, a no ser que te fíes mucho del creador de la macro.
    - Don't move cursor: Una opción muy útil. Si está activa, hará que si se usa el ratón en la macro, en realidad el ratón no se mueva. De este modo se puede navegar por Internet mientras se deja el juego con la macro funcionando.


    Por último en la sección Tools aparece la opción StopCD, que detiene la música de CD.

    Para ejecutar una macro, primero debes tenerla en el EUO. Para ello, carga el script (File->Open). Aquí se ha de tener en cuenta que una macro puede estar dividida en varios archivos (.TXT), por lo que el que programó la macro debería haber indicado cuál es el archivo a cargar o nombrar los archivos de tal modo que no hubiera confusión.
    En el EasyUO sólo necesitas abrir el archivo principal, el resto de archivos los usará el programa sin abrirlos.


    Ahora, debes ir leyendo el script. Toda línea a la que se le anteponga un ; (punto y coma) es entendido como un comentario y la macro lo ignora. Normalmente va dirigida a las personas, bien para dar información al que va a usar la macro o para aclarar para qué vale esa parte de código (en este caso va dirigido al programador desmemoriado).

  2. #2

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15
    Hay ciertas ocasiones que las macros necesitan cierta configuración. Veamos un ejemplo:
    ; ************************************ CONFIGURACION **************************************

    ; Teclas de macros del UO.
    ; Es necesario que sean teclas de función
    set %lastobject f4

    Como las tres primeras líneas tienen punto y coma delante, significa que son comentarios. Estos comentarios te ayudan a saber qué es lo que debes configurar. La siguiente línea es:
    set %lastobject f4
    El comando set indica que una variable se carga con un determinado valor. La variable que estamos cargando es %lastobject (las variables empiezan por %, * o #), y el valor que le estamos poniendo es f4. Entonces, si nosotros quisiéramos configurar esta línea, lo que cambiaríamos es el valor que cargamos. Esto es, sustituimos f4 por el valor adecuado.

    Si en algún momento de la configuración se te pide que realices ciertas acciones y mires el valor de una variable que comience por # (por ejemplo, #LOBJECTID), todas estas variables se encuentran en el marco derecho del EasyUO.





    Errores frecuentes en este apartado:

    La macro no parece comenzar:

    Comprueba que las versiones de EUO y el cliente sean correctas.

    Que has configurado la macro correctamente y las macros de Ultima Online.

    Si llevas todos los objetos que piden en la macro (y de la forma que te indican).

    Si has sacado el cartel de status (suele necesitarse)

    La macro empieza pero no hace nada, es muy lenta o se queda repitiendo algo de forma incorrecta:

    Lee el diario por si la macro dejó un mensaje que no leíste.

    Si has estado usando el juego en segundo plano, comprueba si en primer plano tiene el mismo problema.

    Comprueba que no se hayan acabado los ingredientes necesarios (reagentes, materias primas, etc…).

    Comprueba que no tengas texto escrito para hablar pero aun no hayas pulsado Enter.

    Prueba a activar el Don’t move cursor y dejar el cursor en una esquina.

    Si conoces a alguien que haya usado esa misma macro, pregúntale por sus resultados.




    Nociones básicas para programar tus propias scripts


    Comenzaremos por explicar brevemente cómo es el tipo de lenguaje de programación. Por ello, cualquiera que tenga experiencia en programar en otros lenguajes “serios” (C,Java,Pascal, Basic,…) les bastaría con comprender los comandos y las variables del EUO.
    Cabe destacar que el lenguaje de EUO es CASE INSENSITIVE, no diferencia las mayúsculas de las minúsculas (cosa de agradecer a mi parecer). Y tampoco detecta errores de sintaxis (si cometes un error tipográfico, ¡simplemente se salta la línea y sigue!)


    La programación en EUO es una programación en principio estructurada (si no se abusa de los GOTO), las líneas de nuestro programa se ejecutan una detrás de otra. Cuando se llega al final de la macro, lo que hace es volver al principio y repetirla.



    DEFINICIÓN DE VARIABLES


    Las variables son el centro de nuestro programa. Una variable es una posición en la memoria que guarda datos del programa. Estos datos pueden ser o un valor numérico o una cadena de caracteres (nota a los que sepan programar: aquí no hay declaración de tipos).

    Hay varios tipos de variables:

    Variables del sistema:
    Estas variables son las que comienzan por #. Son variables que siempre existen (aunque nunca las utilices están ahí), y proporcionan una gran cantidad de información útil sobre el estado del juego Ultima Online.

    Una característica importante de este tipo es que las variables cambian de valor aunque tú no modifiques su valor. Veamos un ejemplo:
    Existe una variable llamada #MANA. En ella EUO va almacenando el nivel de maná que nos queda en el juego, sin que nosotros tengamos que hacer nada (sólo hay que tener el cartel de status fuera).
    Y aunque el programa modifique los valores automáticamente, nosotros también podemos modificar algunos valores (por ejemplo, para poner un hechizo que queramos como el Last Spell).

    Vea también: VARIABLES DE SISTEMA

    Variables del usuario:
    Éstas son las que te defines tú. El nombre es arbitrario, eliges el que quieres. Además no hay límite en cuanto al número de variables a poder definir. Estas variables empiezan por %. No se modifican automáticamente, las debes modificar siempre tú.

    Variables globales:
    Son básicamente unas variables que son compartidas entre distintas ventanas de EasyUO (ya que de EUO pueden ejecutarse más de un script simultáneamente con sólo abrir otra ventana más, cargar una macro distinta y ejecutarla). Comienzan por *. Su uso se reduce a comunicar scripts entre sí. A estas variables no puedes ponerles el nombre que quieras, sólo existen las variables de 1 a 99 (? Exactamente no se hasta adónde llegan, pero no son necesarias tantas):

    *1 *2 *3 ….. *99



    Una vez definidas someramente las variables, pasaremos a realizar ciertas operaciones con ellas, tales como asignarles un valor, compararlas, etc…

    COMANDOS/OPERACIONES


    Mediante el uso de los comandos, lo que conseguiremos es o bien operar con las variables para conseguir un resultado o realizar una acción para que el juego UO realice una acción específica. He aquí los comandos del EUO (v2.00.0). No los presentaremos por orden alfabético, sino por lo que en mi opinión es orden de dificultad:

    +SET:
    +MSG:
    +KEY:
    +WAIT:
    +CLICK:
    +MOVE:
    +PAUSE:
    +HALT:
    +SHUTDOWN:

    +PLAYCD:
    +STOPCD:
    +CONTPOS:
    +NEXTCPOS:
    +TARGET:
    +IF:
    +CHOOSESKILL:
    +GOTO:
    +FOR:
    +SAVEPIX:
    +CMPPIX:
    +SUB Y CALL--INTRODUCCION A LAS FUNCIONES Y SUBRUTINAS:
    -Subrutinas:
    -Funciones:
    -El Paso de Parámetros:
    -Ejemplo de script de minero
    +ONHOTKEY:
    +EXECUTE:
    +SCANJOURNAL:
    +GETSHOPINFO Y SETSHOPITEM:

    +FINDITEM--BUSCANDO Y USANDO OBJETOS:
    -Identificadores y tipos de objeto:
    -FINDITEM:
    -IGNOREITEM:
    +EVENTOS:
    -Event SysMessage:
    -Event Drag:
    -Event Macro:

























    Set:

    Syntaxis: SET variable valor [operador valor]
    Es uno de los comandos más importantes. Con él lo que hacemos es realizar operaciones básicas con las variables. Las operaciones básicas son + , - , *, / y % (Modulo)

    Ejemplos:
    set %MiVariable 24 Esta línea haría que la variable %MiVariable pasara a valer 24
    set %MiVariable 24 * 10 Ahora %MiVariable valdría 240
    set %MiVariable JUANITO Poniendo una cadena de caracteres, guarda esa cadena

    Además, podemos hacer operaciones entre funciones:
    set %a 4
    set %b 2
    set %resultado %a * %b La variable %resultado pasaría a valer 4*2=8
    set %resultado %a + %b La variable %resultado pasaría a valer 4+2=2
    Otra característica importante es que como operandos se puede utilizar la misma variable en la que luego almacenemos el valor. Así podemos crear contadores:
    set %a 1
    set %a %a + 1 Ahora la variable %a valdría 2

    set %a %a + 1 Ahora la variable %a valdría 3 …
    Con la orden set %a %a + 1 lo que le estamos diciendo al EUO es “al valor de la variable %a, súmale 1”.
    Hasta ahora siempre hemos usado variables de usuario, pero bien podríamos haber usado de sistema o globales:
    set #lspell 40 Ponemos como último hechizo usado el spell número 40
    set #lspell #lskill Ponemos como último hechizo el valor que tenga la variable #lskill (hay que tener en cuenta que esto es un ejemplo, esta orden no creo que fuera muy útil)


    En cuanto a recomendaciones, es preferible usar nombres de variables distintivos, que se puedan diferencial fácilmente. También es recomendable que si la variable está formada por varias palabras, se pongan sólo en mayúsculas la primera letra de cada palabra:
    Set %estoessolounejemplo Sería más entendible Set %EstoEsSoloUnEjemplo





    Errores frecuentes en este apartado:
    Estas líneas son incorrectas:
    Set %a 1+1
    Set %a 1 +1
    Set %a %a+1
    Aunque en un principio no parezca que tienen error, para el EUO si lo tienen. El problema está en que entre los valores y las operaciones debe haber un espacio. Por tanto para que fueran correctas deberían estar así:
    Set %a 1 + 1
    Set %a 1 + 1
    Set %a %a + 1
    Ten en cuenta que el EUO no te avisa de los errores, por lo que es muy fácil cometerlos.

    Otro error frecuente es éste
    Set %a %b + %c + %d
    EasyUO no admite más de dos operandos. Deberíamos hacer esto:
    Set %a %b + %c
    Set %a %a + %d

    Msg:

    Este comando escribe mensajes de texto en el UO. Ejemplos:

    Msg hola mundo!$
    Ejecutando ese script veríamos que nuestro personaje comenzaría a decir Hola mundo! sin parar (acabaría la macro y empezaría otra vez). El carácter $ equivale a la tecla Enter. También es posible mostrar el valor de variables por pantalla:
    MSG Me quedan #HITS puntos de vida!$
    Teniendo 77 puntos de vida, lo que mostraría por pantalla sería: Me quedan 77 puntos de vida!

  3. #3

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15
    Mi recomendación personal es que cuando utilicéis el comando msg uséis $ también antes del mensaje:

    MSG $Me quedan #HITS puntos de vida!$
    Así, si en ese momento tú también estabas escribiendo, se cortaría tu mensaje pero no se mezclan ambos.

    El msg tiene dos usos frecuentes:
    Para informar al usuario de la macro de algo:
    Msg $/ Se me acabaron los regs!!$ Poniendo / delante del mensaje lo que hacemos es ponerlo como un mensaje de: Note to self. Ésos sólo los lees tú.
    Msg $; Se me acabaron los regs!!$ En vez del Note to self lo que hacemos aquí es susurrar el mensaje. Alguien cercano a ti puede escucharlo.

    Para indicar lo que movemos con el drag:
    Msg 14$ Si en la pantalla esta el cartel del drag (ése en el que le pones la cantidad), lo que haces es coger 14.
    Msg $ Lo que dices es que coges todo el montón.




    Errores frecuentes en este apartado:
    Olvidar el carácter $ al final de la línea, con lo que el mensaje queda en la línea de comando, pero no se dice en pantalla.
    Msg /%x %y$
    La línea anterior mostraría por pantalla un mensaje incorrecto. El problema reside en que las variables deben estar separadas por un espacio en blanco tanto por delante como por detrás para que EUO entienda que es una variable:
    Msg / %x %y $

    Key:

    Sintaxis: KEY tecla [alt] [ctrl] [shift]
    Mediante este comando simulamos la pulsación de una tecla. Como es de imaginar, la utilidad de este comando es el de utilizar macros del UO. Suponiendo que tenemos una macro en la tecla f1, si pusiéramos:
    Key f1
    En el juego se activaría la macro. También es posible usar combinaciones de teclas con Alt, ctrl. Y mayúsculas, pero en mi opinión no es aconsejable. Las mejores teclas para ejecutar macros son lógicamente las teclas de función (F1 a F12).

    Si estás programando tu macro, aconsejaría que en vez de poner ‘ key f1 ’ para usar una macro, se eligiera esta opción:
    En el principio de tu script , haz una nueva variable que contenga esa tecla. Intenta usar un nombre claro y distintivo para la variable. Imaginemos que tenemos una macro de LastObject en la tecla F11:

    Set %LastObject f11 Esto iría en el apartado de configuración del script.
    …..
    Y para usar la macro:
    Key %LastObject En vez de Key f11


    Como se puede observar las ventajas son varias. Por un lado tu macro ahora es configurable de forma muy rápida y cómoda. No es lo mismo cambiar un valor en el principio de un script que ir buscando todos y cada uno de los key f11 para sustituirlo por otra tecla.
    Además con esta estrategia el script resulta más sencillo de comprender. Puede que ahora tengas las ideas claras de cómo va todo, pero dentro de un tiempo puede que ni siquiera tú sepas cómo funcionaba tu macro. Probad a comprender estos dos códigos:

    CODIGO 1: CODIGO 2:
    Key f11 Key %LastObject
    Key f10 Key %LastTarget

    Claramente el código 2 es más intuitivo y sencillo de comprender. Ahora imaginaos un código de varios cientos de líneas….
    Se supone que hay otras teclas especiales que se pueden usar (la tecla de borrar, suprimir, etc.) pero creo que para EUO 2.00 no están presentes.


    Wait:

    Sintaxis: Wait Tiempo Fijo [Tiempo Aleatorio]
    Este comando es muy sencillo. Simplemente sirve para esperar un determinado tiempo. El tiempo mínimo de espera son 50 ms. Veamos un ejemplo:
    Wait 1 Con esto esperamos 50 milisegundos.
    Wait 10 Con esto esperamos 500 milisegundos.
    Si queremos indicar esperas en segundos, tan sólo debemos añadir s al número:
    Wait 1s Esperamos 1 segundo
    Este comando también permite esperas con un cierto tiempo aleatorio, con más que añadir un segundo parámetro que será el tiempo aleatorio:

    Wait 1s 2s -> Esperaremos siempre 1 segundo, y además un tiempo aleatorio entre 0 y 2 segundos
    Esto de esperar un tiempo aleatorio no se suele usar en freeshards, está dirigido a los jugadores de OSI, que tienen prohibido el macreo desasistido.
    Como parámetros también podemos emplear variables:
    Set %espera 1s
    Wait %espera

    Click:


    Sintaxis: CLICK x y [r|d|g|p|n]

    Gracias a este comando podemos simular pulsaciones de ratón. Según qué tipo de pulsaciones queramos simular usaremos un parámetro extra. Suponiendo que queremos hacer clic en la posición del ratón 120 200:

    CLICK 120 200 Esto simula un click normal en esa posición
    CLICK 120 200 d Esto simula un doble click en esa posición
    CLICK 120 200 r Es un right click (el botón derecho)
    CLICK 120 200 n Lo único que hace es mover el ratón a esa posición (no hace click)

    CLICK 120 200 g Este es un modo especial, lo que hace esta orden es simular un drag, es decir agarrar algo.
    CLICK 120 200 p Una vez que tenemos algo agarrado, con esto lo soltamos (drop).

    Como parámetros también podemos emplear variables:
    Click %posx %posy

    Para saber en qué posición está el ratón, pulsa Alt+TAB para cambiar a la pantalla del EasyUO sin mover el ratón. Una vez allí, en la esquina inferior izquierda aparecen varias parejas de números. La tercera pareja es la que indica la posición del cursor en pantalla.





    Errores frecuentes en este apartado:
    + No hace click donde le indiqué:
    Intenta hacer una pequeña espera (digamos un wait 5) después de cada click de ratón.
    + Puedo coger cosas pero luego no las sueltas bien:
    Intuitivamente se usa este código:
    Click %x %y g Agarramos algo
    Msg $ Cogemos todos los objetos.
    Click %x %y p Lo soltamos
    El problema reside en que el UO suele tardar un cierto tiempo en mostrar el menú de drag, en el que indicamos cuántos objetos vamos a mover de la pila. Deberíamos hacer algo así:

    Click %x %y g Agarramos algo
    {Esperar a que el menú de drag aparezca}
    Msg $ Cogemos todos los objetos
    Click %x %y p Lo soltamos
    Wait 5
    Como vemos, antes de intentar soltar el objeto primero debemos asegurarnos de que efectivamente el programa ha acabado de agarrarlo. Por último introducimos una pequeña espera para que el ratón esté en la posición correcta hasta que hayan pasado unos instantes después de haber soltado el objeto. Para esperar el menú se puede hacer simplemente un wait (puede fallar con mucho lag o puede perder demasiado tiempo), o complicar la espera para que espere hasta que aparezca el menú.


    Move:


    Sintaxis: Move x y [a] [tiempo máximo]
    Permite movernos por el juego. Para saber en la posición en que nos encontramos podemos usar las dos variables de sistema #charposx y #charposy. También aparecen en la esquina inferior izquierda (el primer par de números).
    Si ponemos un parámetro adicional que sea a, esto indica que el movimiento será exacto. Si no lo usamos el personaje estará muy cerca de la posición indicada pero no será exacta.
    Move 1020 1400 Se acercará mucho a esa posición

    Move 1020 1400 a En la medida de lo posible se colocará exactamente en esa posición
    El parámetro a se suele usar para movimientos precisos (acercarte a una forja, andar un solo paso, etc.). Cuando necesitamos movernos una gran distancia de una sola vez, lo que se suele hacer es separar el viaje en varios comandos move:
    Move 1000 1020
    Move 1011 1040
    Move 1025 1060
    Move 1037 1067
    Move 1040 1070 a
    Todos los moves excepto el último sería aconsejables ponerlos sin a, porque son puntos intermedios en el camino (para ir esquivando obstáculos y demás). Una vez cerca del objetivo es cuando hacemos un move exacto al punto final.

    También tenemos la opción de limitar el tiempo máximo para finalizar el movimiento. Si se supera simplemente para de moverse.
    Move 1037 1067 10s Intentará llegar a esa posición en 10 segundos

    Si lo que estamos buscando son movimientos relativos en función de donde estemos, necesitamos utilizar las dos variables anteriores. Supongamos que queremos movernos un paso al este. Para hacer eso lo que buscamos es aumentar en uno nuestra posición x:
    Set %MovernosX #CHARPOSX + 1 Guardamos en una variable propia la posición x más uno

    Set %MovernosY #CHARPOSY La variable ‘y’ no la tocamos
    Move %MovernosX %MovernosY a 3s Intentaremos alcanzar esa nueva posición de manera exacta y antes de tres segundos.

    Para saber que variable x o y debemos aumentar o disminuir, fíjate como varía tu posición al moverte, así sabrás que variables debes tocar para moverte hacia alguna dirección.

    PAUSE:

    Simplemente pausa el script (es equivalente a pulsar la tecla que habíamos definido como pause key). Si pulsamos Play de nuevo, el script continuará desde donde se quedó.

    HALT:

    Abortamos la macro. Funciona de manera equivalente al botón de Stop.

    SHUTDOWN:

    Este comando apaga el ordenador. Se suele añadir el parámetro FORCE para forzar a las aplicaciones que no responden a cerrarse.
    Shutdown Force
    Nota: A mi no me funciona.

  4. #4

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15
    PLAYCD:

    Activa la música de CD. Lógicamente debe haber un CD de música en la unidad
    Aunque pueda parecer una utilidad chorra, es bastante útil si no te quedas vigilando el macreo.
    If #hits < 10
    {
    ;Si nuestra vida baja de 10, ponemos en marcha la música de CD Audio y pausamos la macro.
    playcd
    pause
    }

    STOPCD:

    Detiene la música de CD.

    CONTPOS:

    Sintaxis: CONTPOS x y

    Mueve el último contenedor abierto a la posición x-y. Hay que tener en cuenta que en el juego UO todo lo que flota por la pantalla son contenedores excepto el cursor, claro.

    msg bank $
    wait 20
    contpos 10 10
    halt

    NEXTCPOS:

    Sintaxis: NEXTCPOS x y

    Colocará en la posición x-y el próximo container que se abra.

    nextcpos 10 10
    wait 10
    msg bank $
    TARGET:

    Sintaxis: TARGET tiempomaximo

    Este comando funciona de manera similar a la acción WaitForTarget de las macros de EasyUO. Esperamos hasta que aparezca el apuntador de elegir objetivo. Tiempomaximo indica lo máximo que vamos a esperar:
    Key %lastobject
    Target 4s
    Key %lasttarget

    IF:

    Sintaxis: IF condición_cierta
    {
    ….. líneas a ejecutar cuando la condición es cierta
    }
    Esta es una estructura muy importante en cualquier lenguaje de programación. Permite ejecutar una serie de líneas sólo si se cumple una condición. Si el número de líneas a ejecutar es sólo de una, se pueden omitir las llaves { }, y simplemente poner la línea debajo.

    La condición tiene esta estructura

    Sentencia1 operador Sentencia2
    Operadores: =, >, <, <>, >=, <=, IN, NOTIN
    Veamos una serie de ejemplos (como sólo ejecutaremos una línea si la condición es cierta, no necesitamos encerrar con llaves la línea en cuestión):
    Set %a 1
    Set %b 2
    IF %a = %b
    Msg $; %a es igual a %b $
    IF %a > %b
    Msg $; %a es mayor que %b $
    IF %a < %b

    Msg $; %a es menor que %b $
    IF %a <> %b
    Msg $; %a es distinto que %b $
    IF %a >= %b
    Msg $; %a es mayor o igual que %b $
    IF %a <= %b
    Msg $; %a es menor o igual que %b $
    Halt

    Prueba este script en el EUO y verás que ocurre. Prueba también a cambiar los valores de %a y %b.

    Un caso especial de operadores son IN y NOTIN. Con ello lo que indicamos si la primera sentencia está dentro de la segunda:


    set %sentencia1 algo
    set %sentencia2 Dame_algo_plis

    if %sentencia1 IN %sentencia2
    {
    msg $; Estas dos líneas de mensaje aparecen cuando la condición es cierta $
    msg $; %sentencia1 se encuentra dentro de %sentencia2 $
    }

    msg $; A partir de esta línea se ejecuta normalmente $
    halt

    También se pueden construir sentencias anidadas:
    Set %a 3
    IF %a > 0
    {
    If %a < 4
    {
    MSG $ La variable a tiene un valor entre 0 y 4$

    }
    }
    Msg $Ya estamos fuera del IF$
    halt
    Aviso a los programadores: EasyUO sólo deja comparar dos sentencias simples. Si se necesita hacer una condición tipo: condición1 AND condición2 , o condición1 OR condición2
    Debemos hacer IF anidados en el caso de AND y realizar varios IF’s en el caso del OR.

    Como es la primera vez que aparecen el uso de llaves, es un buen momento para hablar un poco del estilo de programación. El script anterior se podría escribir así

    Set %a 3
    IF %a > 0
    {
    If %a < 4
    {
    MSG $ La variable a tiene un valor entre 0 y 4$
    }
    }
    Msg $Ya estamos fuera del IF$
    halt
    Como vemos, es mucho más complicado saber a primera vista qué líneas pertenece a cada IF. Sin embargo, en la macro anterior aparecía de una manera mucho más limpia y clara. Es una buena costumbre el hacer que cada vez que aparece un bloque de llaves (en el caso de un If o de otros comandos) introduzcamos unos espacios en todas las líneas de ese bloque. Si son bloques anidados pues añadimos unos espacios extra al bloque interior (y así sucesivamente).

    Y es que programar no es sólo saber escribir un programa.




    Errores frecuentes en este apartado:
    +Este trozo de código no me funciona:
    IF %a=%b
    Msg $; %a es igual a %b $
    Como ya advertimos anteriormente, las variables del EasyUO deben tener un espacio en blanco a ambos lados:
    IF %a = %b
    Msg $; %a es igual a %b $

    +Este trozo de código no me funciona:
    if %sentencia1 IN %sentencia2
    { msg $; Estas dos lineas de mensaje aparecen cuando la condicion es cierta $

    msg $; %sentencia1 se encuentra dentro de %sentencia2 $ }
    Es un error de EasyUO, pero que debes encargarte tú de arreglarlo. EasyUO necesita que las llaves se encuentren en una línea aparte(para cualquier caso, no solo en los IF):
    if %sentencia1 IN %sentencia2
    {
    msg $; Estas dos lineas de mensaje aparecen cuando la condicion es cierta $
    msg $; %sentencia1 se encuentra dentro de %sentencia2 $
    }

    CHOOSESKILL:

    Sintaxis: Chooseskill Habilidad [real]
    Mediante este comando podemos conocer el valor de una skill. El valor se almacena en #SKILL, y se expresa sin decimales (50.0 correspondería a 500).
    Si ponemos real después de la habilidad, nos da el valor real de la skill.

    Todas las habilidades se escriben tal y como aparecen en el UO, excepto AnimalLore y Stealth, que pasan a llamarse "anil" y "stlt" respectivamente. Realmente sólo importan las cuatro primeras letras de cada nombre:

    Chooseskill magery real
    Chooseskill anil real

    GOTO:

    El terror de la programación estructurada. Aunque aquí es el único método para realizar ciertas estructuras, no conviene abusar de este comando. El comando Goto permite saltar a otra línea del script, exactamente a una etiqueta. Las etiquetas se definen por un nombre con dos puntos ( al final.

    Etiqueta1:
    Msg hola pepe$
    Wait 2s

    Goto Etiqueta1
    Msg esto no se ejecuta nunca$

    Lo que haría el Goto etiqueta1 seria ponernos sobre la Etiqueta1:, de modo que la siguiente linea seria msg hola pepe$

    La ultima linea del ejemplo no se ejecutaria nunca.


    FOR:

    Sintaxis: for %variable ValorInicial ValorFinal
    {
    ….lineas a ejecutar varias veces
    }
    Este comando funciona para repetir un bloque de líneas varias veces. Cuando solo se va a repetir una unica linea, se pueden omitir las llaves.
    La %variable puede ser cualquiera que quieras. No necesitas tenerla creada (con un Set) de antes, se pone el valor automáticamente a ValorInicial. Esa variable se incrementa en cada vuelta en 1 hasta llegar al ValorFinal. Ademas la puedes usar como otra variable normalmente (aunque no se recomienda tocarla).


    For %i 1 10
    {
    msg Ahora i vale %i $
    wait 2s
    }
    En la primera vuelta, %i valdrá 1, en la segunda 2,…. Así hasta llegar a 10, que es el valor final. Si por alguna razón queremos forzar una salida o variar el flujo normal de ejecución, podemos utilizar el comando goto para salir.

    For %i 1 10
    {
    msg Ahora i vale %i $
    wait 2s
    IF #mana < 40
    Goto salida
    }
    Salida:

    Este ejemplo es similar al anterior, con la salvedad de que le hemos añadido una condicion para salir del bucle en un momento determinado (lo que en otros lenguajes de programación es un break). Aquí si nuestro nivel de mana esta por debajo de 40, lo que hacemos es salir del bucle, independientemente de cuantas vueltas faltaban por dar.


    Esta estructura también es valida:
    set %Inicial 2
    set %Final 4

    for %i %inicial %final
    {
    msg hola$
    wait 1s
    }
    halt

    Es decir, que los instantes inicial y final también pueden ser variables, y por tanto depender de cómo se encuentre el programa. El programa diría tres veces hola (cuando %i vale 2,3 y 4).

    Tampoco existe limitación en cuanto a hacer bucles FOR anidados, esto es, uno dentro de otro:

    For %i 1 5
    {
    For %j 1 10
    {
    msg la variable i vale %i ,y la j vale %j $

    wait 10
    }
    msg Esto se ejecutaria solo 5 veces, no esta dentro del bloque j$
    }

    Tened en cuenta que al ser anidados, el número de veces que se ejecuta el bloque interno es el número de veces que se ejecuta el bucle i multiplicado por el del bucle j. En este caso se ejecuta 5x10=50 veces.
    Se ejecutaría así:
    Nos metemos en el bucle de la variable i, que se pone con el valor 1
    Entramos al bucle j.
    Entonces la variable %j iría tomando los valores desde 1 hasta 10 en cada vuelta del bucle interno (la i sigue valiendo 1).

  5. #5

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15
    Cuando acaba el bucle j, aun seguimos dentro del bucle i.
    Ejecutaría la línea de “msg Esto se…..” que va tras el bucle j, y entonces acabaría la primera vuelta del bucle i.
    Repetiría todo esto 5 veces (hasta que %i valiera 5)

    De nuevo recomiendo que utilicéis espaciados mayores para indicar un bloque de líneas que se encuentran entre llaves (facilita mucho la lectura del código).




    SAVEPIX:

    Sintaxis: SAVEPIX x y Posición

    Guarda el color del pixel de la posición x-y en una posición que puede ir de 1 a 1000:
    Savepix 20 30 1 Graba el color del pixel en la posición 1
    Savepix 120 230 2 Graba el color del pixel en la posición 2

    El color del último pixel leído se queda grabado en #pixcol. Existe un problema y es que para que la grabación de píxel funcione, el juego UO debe estar en primer plano (si no, falla)

    CMPPIX:

    Sintaxis: CMPPIX Posición [f]
    {
    .... Acciones a realizar. Si sólo es una acción
    se pueden omitir las llaves
    }

    Compara el valor actual del pixel con el valor que habíamos grabado. Si son iguales entonces se ejecuta el bloque de comandos.
    En el caso de que se ponga el parámetro opcional f, entonces se ejecutará cuando no sean iguales. Como con savepix, sólo se puede usar estando UO en primer plano.


    Wait 5s
    ;Ahora se debe estar en la pantalla del UO para que esté en primer plano
    Savepix 20 20 1
    Bucle:
    cmppix 1 f
    {
    msg El color ha cambiado$
    wait 2s
    }
    wait 1
    goto bucle

    SUB y CALL-INTRODUCCION A LAS FUNCIONES Y SUBRUTINAS: (ya explicado en otro apartado)

    ONHOTKEY:

    Sintaxis: ONHOTKEY Tecla [ctrl] [alt]
    {
    .... Acciones a realizar si las teclas están pulsadas. Si sólo es una acción
    se pueden omitir las llaves
    }

    Si la macro detecta la pulsación de esas teclas, realiza las acciones de dentro de las llaves. Es básicamente una manera de realizar macros de EUO como si fuera una del propio juego:

    onhotkey y ctrl
    goto HealMe
    onhotkey x ctrl

    goto EmergencyRecall
    exit
    HealMe:
    ...blabla
    exit
    EmergencyRecall:
    ...blabla
    exit

    o también mediante funciones:

    onhotkey y ctrl
    call heal.txt
    onhotkey x ctrl
    call recall.txt

    EXECUTE:

    Sintaxis: EXECUTE linea de comando

    Ejecuta programas externos. Lo mejor es usar esto con cuidado, y sobre todo cuando uses macros que no sean tuyas y usen esto. Debe esta activa la opción de Allow execute.

    execute easyuo.exe anotherscript.txt
    execute http://www.easyuo.com
    execute mailto:[email protected]

    SCANJOURNAL:

    Sintaxis: SCANJOURNAL linea

    Mediante esta orden leemos una línea determinada del diario y la colocamos en la variable de sistema #journal , y el color del texto en #jcolor.
    scanjournal 1 Leemos la última línea del diario
    scanjournal 2 Leemos la penúltima línea del diario

    El texto no se almacena tal y como lo leemos nosotros, sino que se graba todo en mayúsculas y los espacios se sustituyen por _ :

    Ishan: Hola pepe que tal? Pasaría a ser en #journal ISHAN:_HOLA_PEPE_QUE_TAL?


    La forma más típica de usar este comando es leyendo una línea y ver si un texto se encuentra o no en el #journal (con IN y NOTIN)

    Example:
    scanjournal 1

    IF is_attacking_you IN #journal
    {
    msg Guards ! $
    call recallme
    }
    goto Example



    Errores frecuentes en este apartado:
    +A veces con este código se le saltan líneas:
    scanjournal 1
    IF NO_QUEDA IN #journal
    {
    .......
    }
    .....

    El problema puede ser que tardas mucho entre scanjournal, por lo que al aparecer nuevas líneas en el diario, algunas pasan sin haber sido leídas. Una opción es acelerar de alguna manera la macro para que el tiempo entre scanjournals sea muy corto (y a veces tampoco lo soluciona). Otra solución más compleja es leer más de una línea del diario.

    Pero esto lleva a otro problema (causado porque en esta versión de EUO no existe el deletejournal), y es que se da el caso de leer más de una vez la misma línea, produciendo un comportamiento erróneo. La solución que adopté fue la de introducir una línea de separación cada vez que leamos algo relevante del diario (con un MSG). Entonces, si en algún momento de la lectura del diario encontramos esa línea, ya no seguimos leyendo más.

    For %i 1 10
    {
    scanjournal %i
    IF %LineaDeSeparacion IN #journal

    Goto findelectura
    IF NO_QUEDA IN #journal
    {
    .......
    }
    }
    findelectura:
    ......

    GETSHOPINFO y SETSHOPITEM:

    No lo uso, así que no se cómo va. Debe ser algo para comprar/vender en las tiendas
    Si alguien lo usa, que me diga como funciona.

    FINDITEM--BUSCANDO Y USANDO OBJETOS: (ya explicado en otro apartado)

    EVENTOS: (ya explicado en otro apartado)



    SUB y CALL--INTRODUCCION A LAS FUNCIONES Y SUBRUTINAS:


    Una función es un trozo de código tal que según una serie de parámetros de entrada que le damos, nos devuelve unos parámetros de salida y/o realiza las acciones de manera distinta. Es una idea parecida a las funciones matemáticas.

    -Subrutinas:
    -Funciones:
    -El Paso de Parámetros:
    -Ejemplo de estructura de un script de minero

    Subrutinas:


    Llamaremos subrutinas a aquellas funciones que solo se pueden usar dentro del archivo donde se encuentre. Serán funciones locales, no pudiéndose llamar desde un script externo. Nuevamente hay que tener en cuenta que EasyUO NO avisa sobre estos errores, que sin una estructuración clara pueden ocurrir.
    Sintaxis:
    sub NombreDeLaSubrutina
    ....codigo de la subrutina
    return

    Como vemos, la sintaxis es simple. Simplemente le ponemos un nombre con sub delante, y al final un return para que vuelva desde donde la llamamos. Realmente el comando return se puede usar en cualquier momento y todas las veces que se necesite (si por ejemplo para la subrutina necesitamos un objeto y este no se encuentra, usaríamos return sin esperar a llegar al final).


    El uso de las subrutinas también resulta sencillo. Para ello ponemos:
    Gosub NombreDeLaSubrutina
    Y nada más.
    Funciones:


    Con funciones denominaremos a aquellas funciones que pueden ser ejecutadas por otros archivos. Son funciones globales. La particularidad que presentan es que cada una de estas funciones debe almacenarse en un archivo por separado. Cada archivo solo contendría una función.
    Sintaxis: [Cada función va en un archivo]
    .....código de la función
    EXIT

    Mediante el comando exit acabamos la función y volvemos al programa principal. La verdad es que el comando EXIT no se necesita al final del archivo de la función (EasyUO lo hace automáticamente), EXIT vale para poder salir antes de llegar al final del archivo:

    [archivo funcion.txt]
    if #hits >= #STR
    EXIT
    Msg $Ay, me han hecho pupita$
    [fin del archivo]

    El comando para ejecutar una función es mediante CALL seguido del nombre de la función a ejecutar: CALL funcion
    Si el archivo tiene extensión .TXT (lo típico), se puede omitir el .TXT en el CALL.

  6. #6

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15
    En mi opinión, el uso de funciones en scripts (o en cualquier programa en general) es una costumbre muy buena. De esta manera se puede separar un problema grande y aparentemente complicado de resolver, en unos cuantos problemas pequeños y más fáciles de resolver.


    El Paso de Parámetros:

    La mayoria de las veces buscamos que nuestra función devuelva resultados distintos, dependiendo de ciertos parámetros.
    El paso de parámetros se realiza del modo siguiente:
    Gosub MiSubrutina Parametro1 Parametro2 ..... Parametro N
    o
    Call MiFuncion Parametro1 Parametro2 ..... Parametro N

    En los parámetros se pueden utilizar tanto variables como valores constantes.

    En cuanto a cómo recibimos estos parámetros en las subrutinas/funciones, lo que hace el EasyUO es meter estos parámetros en las variables %1 %2 ... %N. Es decir:

    Parámetro1 %1
    Parámetro2 %2
    .....
    ParámetroN %N
    Básicamente hace un set %N ParámetroN

    Vemos un ejemplo:
    Call EscribeMensaje hola
    Call EscribeMensaje adios

    [archivo EscribeMensaje.txt]
    msg %1 $
    [fin del archivo]


    ¡OJO! Puede que alguien se haya dado cuenta (yo no lo hice hasta que me ocurrió). Existe un problema cuando desde una función llamamos a otra función, ya que si en ambas se usan parámetros, la segunda machaca los valores de %1,%2.... de la primera. Para solucionar esto, simplemente copia los parámetros de la primera función desde %1,%2... a nuevas variables. Así evitamos que se machaquen los valores, las nuevas variables tienen los parámetros de la primera función, y las variables %1,%2.. los de la segunda.


    Existe otra manera de “pasar los parámetros”, y consiste simplemente en que la función use una variable cuyo valor lo pone el programa principal:
    Set %Mensaje hola
    Call EscribeMensaje

    Set %Mensaje adios
    Call EscribeMensaje

    [archivo EscribeMensaje.txt]
    msg %Mensaje $
    [fin del archivo]

    Pero es un poco más engorroso así.
    Ejemplo de estructura de un script de minero


    Supongamos que queremos realizar una macro para un minero. Si intentamos resolverlo todo de golpe es casi seguro de que no lo consigamos. Y si logras conseguirlo, ten por seguro de que será más lioso de entender, y los errores serán más difíciles de localizar.
    Lo primero que haríamos sería montar el esqueleto del programa. No hará nada, pero la estructura la tendremos montada de un principio. Haríamos el archivo principal:

    [archivo minero.txt]
    ; Lo primero seria configurar todo. Poner las teclas de macro del UO, los mensajes del diario

    ; adaptados, los minerales que queremos, etc...
    call configuracion
    ; Inicializamos el sistema. Aquí va todo lo que se necesita en la macro y que no necesita ser
    ; configurado, porque no cambia. Por ejemplo, buscar el pico, preparar las mochilas....
    call inicializacion

    ;Este es el bucle principal, que se repite indefinidamente. Los dos calls anteriores solo se ejecutan
    ; una sola vez.
    BuclePrincipal:

    ;Lo primero seria picar en la posición en la que nos encontramos

    call picar
    ; Cuando se acabara el mineral, nos moveriamos
    call mover
    ;Y cuando nos hubieramos cargado, iriamos a la forja, luego al banco, y luego regresariamos
    if %maxpeso <= #weight
    {
    ;Primero, guardaríamos la posición donde estoy para regresar luego
    call RecordarDondeEstoy
    ;Lo demas, por el nombre es obvio lo que hace
    call ALaForja
    call Fundir
    call AlBanco
    call Banco
    call ALaFaena
    }

    Goto BuclePrincipal
    [fin del archivo]


    Si nos fijamos, aunque realmente no hemos hecho apenas nada, ya tenemos mucho. Ahora lo que se haria es meterse con cada una de las funciones.

    Lo mejor es empezar por lo fácil, más que nada para darte moral.
    Por ejemplo yo empezaria de este modo:
    + Crearia todos los archivos de las funciones (configuracion.txt,inicializacion.txt,picar.txt) y los dejaria en blanco.
    + Lo más fácil aquí parece ser el script de mover.txt, ya que solo tenemos que hacer moves y alguna comprobacion para saber si nos movemos, etc....

    + Ejecutariamos la macro para ver que tal se mueve
    + Iríamos depurando la función hasta que se adapte a lo que buscamos
    + Pasamos a otra parte del programa y repetimos el proceso.

    Hay que tener en cuenta que nada impide que cada bloque los separemos a su vez en otros sub-bloques.
    Por ejemplo, en la macro de picar lo más lógico es que llamáramos varias veces a una función que pique en una posición que nosotros le decimos. Asi podríamos tener:

    set %iniciox #charposx - 1

    set %finx #charposx + 1
    set %inicioy #charposy - 1
    set %finy #charposy + 1

    For %picarx %iniciox %finx
    {
    For %picary %inicioy %finy
    {
    call picando %picarx %picary
    }
    }
    ;Con esto picaríamos en todas las posiciones alrededor nuestro (y también debajo nuestra).

    FINDITEM--BUSCANDO Y USANDO OBJETOS:


    Este es uno de los apartados más importantes dentro de EasyUO. La mayor parte de las macros necesitarán en mayor o menor medida el buscar y usar algún objeto.
    Para poder buscar algo dentro de un contenedor, ya sea el banco o una mochila, es necesario que esté abierto.


    -Identificadores y tipos de objeto:
    -FINDITEM:
    -IGNOREITEM:

    Identificadores y tipos de objeto:


    Estas dos características de los objetos suelen ser necesarias para buscar algo. Un tipo es lo que comúnmente entendemos, la clase de objeto que es.
    Por ejemplo, todas las palas tienen el mismo tipo, todas los varones tienen el mismo tipo, todas las mochilas tienen el mismo tipo, etc…
    De forma intuitiva, todo lo que tenga el mismo gráfico en el juego son del mismo tipo aunque tengan distintos colores.
    Por eso un battle axe NO tiene el mismo tipo que un large battle axe (tienen gráficos distintos).


    Y los identificadores (o ID) son lo que diferencian los objetos unos con otros. Cada objeto tiene un ID, y los ID’s son únicos. Es como el DNI.

    Para conocer tanto el tipo como el ID de un objeto, lo que se suele hacer es hacer un doble click sobre ellos. Esto hace que se ponga como el Last Object, el último objeto utilizado. Ahora, si en el EUO observamos la variable #LOBJECTID, esta nos da el ID de ese objeto.
    Si miramos #LOBJECTTYPE, nos aparece el tipo del objeto.

    El tipo de objeto suele ser una combinación de tres letras. Por ejemplo, una mochila tiene como tipo ZJF.
    El ID de objeto suele consistir en unas siete letras (si son objetos, y no personas).

    FINDITEM:

    Sintaxis: FindItem tipo1_tipo2_..._ID1_ID2

    ; IS = Hombre, HS = Mujer
    finditem HS_IS

    Las búsquedas se realizan mediante el comando FINDITEM. Es un comando bastante versátil, permite buscar tanto tipos de objetos como objetos específicos (mediante la ID). Si queremos buscar un objeto pero puede ser de varios tipos (por ejemplo, buscamos un hombre o una mujer), pondríamos los tipos separados por un _. También es posible mezclar tipos e ID’s en la búsqueda: FINDITEM ABC_DEF_HGIJKLM . Lo primero serían dos tipos, y el tercero parece ser un ID.


    Una vez ejecutado el comando, se actualizarán todas las variables de sistema relativas a find item:

    #FINDKIND: Da más información sobre dónde está el objeto. Si vale:
    0 El objeto encontrado está dentro de alguna mochila
    1 El objeto encontrado está en el suelo
    -1 No se encontró ningún objeto de ese tipo

  7. #7

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15
    El #findkind se usa para acabar de buscar objetos. Si #findkind = -1 entonces es que ya no hay más objetos de ese tipo.

    #FindX : Posición X del objeto. Pero se necesita calcular #Findmod para poder mover los objetos

    #FindY : Posición Y del objeto. Pero se necesita calcular #Findmod para poder mover los objetos
    #FindZ : Posición Z del objeto.

    #Findmod: Un pequeño quebradero de cabeza. Es un ajuste para el #findx y #findy para mover los objetos. Ambas variables dan un valor x e y, pero lo normal es que se dé el caso de siguiente:




    Esto es el gráfico de un montón de dinero. Si nos fijamos arriba, tenemos un cuadro azul. Eso se supone que es la posición que nos da #Findx y #FindY cuando #findmod vale 0. Resulta obvio que si usáramos ese punto para intentar mover el montón de dinero, no lo movería.
    Para solucionar esto, lo que hacemos es poner un valor de #findmod tal que haga que findx y findy caigan sobre el objeto. Findmod se define así
    Set #Findmod offsetX_offsetY





    Creo que con los dibujillos queda suficientemente claro.
    Para calcular el Findmod podéis usar este pequeño script. Tan sólo debéis arrancarlo llevando una daga en la mochila, y luego hacer click sobre el objeto que queráis:
    [Buscar Fmod.txt]
    set %LastObject F4
    FINDITEM TSF
    ;Buscamos la daga
    If #Findkind = -1
    halt
    set #LTARGETID YC
    key %LastObject
    target 3s
    msg $Apunta sobre el objeto...$

    bucle:
    if #LTARGETID <> YC
    {
    FINDITEM #LTARGETID

    set %Offsetx #CursorX - #FINDX
    set %Offsety #CursorY - #FINDY
    msg $/ el Findmod del tipo #FINDTYPE es %offsetx
    msg _
    msg %offsety $
    halt
    }
    wait 1
    goto bucle
    [fin del archivo]

    #FindType: Indica el tipo del objeto encontrado. Esto es útil cuando hemos buscado objetos de varios tipos.

    #FindDist: Distancia a la que se encuentran de ti. Pero es distancia en línea recta, no dice nada sobre los obstáculos en medio.


    #FindStack: Indica el tamaño de la pila de ese objeto. Por ejemplo, si tenemos un objeto que son 20 logs y lo buscamos, esta variable valdría 20. Para objetos no apilables valdrá uno.

    #FindBagID: El ID de la bolsa en donde lo hemos encontrado. Así podríamos diferenciar si está en el banco, en nuestra mochila, etc…

    #FindCol: Color del objeto. Si no está coloreado, suele ser cero. Por ejemplo, los ores de iron tienen #findcol 0, y los demás minerales tienen un color distinto a cero(cada uno tiene uno).


    #FindRep: A mí esta variable no me funcionaba bien. Indica la reputación del objetivo:

    1 : Inocente
    2 : Amigo
    3 : Gris
    4 : Criminal
    5 : Enemigo
    6 : Asesino


    #FindID: Es el ID del objeto que se ha encontrado. Si no se ha encontrado ninguno se pondría X. Y con esta variable ya podemos usar los objetos:
    Si quisiéramos usar este objeto, lo que se haría sería:

    ; Ponemos el ID del objeto encontrado
    Set #LOBJECTID #FINDID
    ;Ahora ejecutamos la macro de UO de Last Object. Suponemos que está en la tecla F4

    key F4

    De esta manera se puede usar los objetos. De manera parecida se hace para ponerlos como Last Target.

    IGNOREITEM:


    Sintaxis: IGNOREITEM ObjetoID,Tipo o Reset
    Puede darse el caso de que queramos buscar otro objeto. Mediante este comando se ignora un objeto determinado, y ya no aparecerá en la búsqueda.
    Del mismo modo podemos hacer con los tipos de objeto.
    Sin embargo, si ponemos IGNOREITEM Reset, lo que hacemos es limpiar el FINDITEM de los ignores, con lo que volveremos a encontrar todos los objetos otra vez.

    ;Tecla del LastObject en UO
    set %LastObject F4

    ;Buscamos una daga

    busca:
    FINDITEM TSF
    If #FINDKIND = -1
    Exit
    If #Findkind = 0
    {
    ; Si el objeto está en el suelo, no es la daga de nuestra mochila. Lo ignoramos
    IGNOREITEM #FindID
    ; Y seguimos buscando
    goto busca:
    }
    ;Si llegamos hasta aquí es que hemos encontrado una daga en una mochila
    ; Ponemos la daga como el último objeto usado
    set #LOBJECTID #FINDID
    ;Y usamos la macro de LastObject de UO
    key %LastObject




    EVENTOS:

    ¿Qué son?:

    Los eventos son una serie de comandos añadidos que mejoran en muchos aspectos varios problemas que teníamos antes.

    Antes de usar ningún event, debemos emplear la orden INITEVENTS (sólo una vez al principio).

    Event SysMessage:
    Event Drag:
    Event Macro:


    Event SysMessage:

    Sintaxis: event SysMessage Tumensaje

    Con este comando se puede mandar un mensaje de sistema a tu cliente. De este modo se pueden enviar mensajes de un modo más sencillo que con el truco del mensaje por party.
    Aquí no necesitas poner $ al final del texto

    Event Drag:

    Sintaxis: event Drag IDObjeto

    Este comando permite agarrar un objeto. De este modo evitamos el tener que usar el Findmod ni importa que otro objeto lo tape. Para soltarlo seguimos teniendo que hacer un click x y p.

    Event Macro:

    Sintaxis: event Macro param1 param2 param3

    Permite ejecutar macros de UO sin necesidad de asignarles una tecla. Así la configuración es más fácil.

    Ejemplo: event Macro 14 0 sería equivalente a una macro con LastSkill


    Param1: Param2: Param3:

    1 say 0 - string
    2 emote 0 - string
    3 whisper 0 - string
    4 yell 0 - string
    5 walk 0 NW
    5 walk 1 N
    5 walk 2 NE
    5 walk 3 E
    5 walk 4 SE
    5 walk 5 S
    5 walk 6 SW
    5 walk 7 W
    6 war/peace 0 -
    7 paste 0 -

    8 open 0 configuration
    8 open 1 paperdoll
    8 open 2 status
    8 open 3 journal
    8 open 4 skills
    8 open 5 spellbook
    8 open 6 chat
    8 open 7 backpack
    8 open 8 overview
    8 open 9 mail
    8 open 10 partymanifest
    8 open 11 partychat
    9 close 0 configuration
    9 close 1 paperdoll
    9 close 2 status

    9 close 3 journal
    9 close 4 skills
    9 close 5 spellbook
    9 close 6 chat
    9 close 7 backpack
    9 close 8 overview
    9 close 9 mail
    9 close 10 partymanifest
    9 close 11 partychat
    10 minimize 0 configuration
    10 minimize 1 paperdoll
    10 minimize 2 status
    10 minimize 3 journal
    10 minimize 4 skills
    10 minimize 5 spellbook

  8. #8

    Fecha de ingreso
    December-2006
    Mensajes
    1.055
    Reputacion: 10
    Poder de reputación
    15
    10 minimize 6 chat
    10 minimize 7 backpack
    10 minimize 8 overview
    10 minimize 9 mail
    10 minimize 10 partymanifest
    10 minimize 11 partychat
    11 maximize 0 configuration
    11 maximize 1 paperdoll
    11 maximize 2 status
    11 maximize 3 journal
    11 maximize 4 skills
    11 maximize 5 spellbook
    11 maximize 6 chat
    11 maximize 7 backpack
    11 maximize 8 overview
    11 maximize 9 mail

    11 maximize 10 partymanifest
    11 maximize 11 partychat
    12 opendoor 0 -
    13 useskill 1 anatomy
    13 useskill 2 animal lore
    13 useskill 4 arms lore
    13 useskill 6 begging
    13 useskill 12 cartography
    13 useskill 14 detecting hidden
    13 useskill 15 enticement
    13 useskill 16 evaluating intelligence
    13 useskill 19 forensic evaluation
    13 useskill 21 hiding
    13 useskill 23 inscription

    13 useskill 3 item identification
    13 useskill 46 meditation
    13 useskill 9 peacemaking
    13 useskill 30 poisoning
    13 useskill 22 provocation
    13 useskill 48 remove trap
    13 useskill 32 spirit speak
    13 useskill 33 stealing
    13 useskill 47 stealth
    13 useskill 36 taste identification
    13 useskill 38 tracking
    14 lastskill 0 -
    15 castspell 0 clumsy
    15 castspell 1 create food

    15 castspell 2 feeblemind
    15 castspell 3 heal
    15 castspell 4 magic arrow
    15 castspell 5 night sight
    15 castspell 6 reactive armor
    15 castspell 7 weaken
    15 castspell 8 agility
    15 castspell 9 cunning
    15 castspell 10 cure
    15 castspell 11 harm
    15 castspell 12 magic trap
    15 castspell 13 magic untrap
    15 castspell 14 protection
    15 castspell 15 strength
    15 castspell 16 bless

    15 castspell 17 fireball
    15 castspell 18 magic lock
    15 castspell 19 poison
    15 castspell 20 telekinesis
    15 castspell 21 teleport
    15 castspell 22 unlock
    15 castspell 23 wall of stone
    15 castspell 24 arch cure
    15 castspell 25 arch protection
    15 castspell 26 curse
    15 castspell 27 fire field
    15 castspell 28 greater heal
    15 castspell 29 lightning
    15 castspell 30 mana drain
    15 castspell 31 recall

    15 castspell 32 blade spirits
    15 castspell 33 dispel field
    15 castspell 34 incognito
    15 castspell 35 magic reflection
    15 castspell 36 mind blast
    15 castspell 37 paralyze
    15 castspell 38 poison field
    15 castspell 39 summon creature
    15 castspell 40 dispel field
    15 castspell 41 energy bolt
    15 castspell 42 explosion
    15 castspell 43 invisibility
    15 castspell 44 mark
    15 castspell 45 mass curse

    15 castspell 46 paralyze field
    15 castspell 47 reveal
    15 castspell 48 chain lightning
    15 castspell 49 energy field
    15 castspell 50 flame strike
    15 castspell 51 gate travel
    15 castspell 52 mana vampire
    15 castspell 53 mass dispel
    15 castspell 54 meteor swarm
    15 castspell 55 polymorph
    15 castspell 56 earthquake
    15 castspell 57 energy vortex
    15 castspell 58 resurrection
    15 castspell 59 air elemental

    15 castspell 60 summon daemon
    15 castspell 61 earth elemental
    15 castspell 62 fire elemental
    15 castspell 63 water elemental
    16 lastspell 0 -
    17 lastobject 0 -
    18 bow 0 -
    19 salute 0 -
    20 quitgame 0 -
    21 allnames 0 -
    22 lasttarget 0 -
    23 targetself 0 -
    24 arm/disarm 1 left
    24 arm/disarm 2 right
    25 waitfortarg 0 -
    26 targetnext 0 -
    27 attacklast 0 -

    28 delay 0 - number
    29 circletrans 0 -
    31 closegumps 0 -
    32 alwaysrun 0 -
    33 savedesktop 0 -
    34 killgumpopen 0 -
    35 wresdisarm 0 -

    36 wresstun 0 -






    VARIABLES DE SISTEMA



    Las variables de sistema se han dividido en varios apartados

    Apartado Character Info:
    Apartado Status Bar:
    Apartado Container Info:
    Apartado LastAction:
    Apartado Find Item:
    Apartado Shop Info:
    Apartado Extended Info:
    Apartado Arm/Disarm:
    Apartado Other Stuff:

    Apartado Character Info:


    #CHARPOSX #CHARPOSY:

    Es la posición x/y de nuestro personaje en el juego. Es la misma que el .where

    #CHARDIR:
    Indica la dirección a donde está mirando el artista:
    #CharDir
    north = 0
    northeast = 1
    ...
    northwest = 7


    #CHARSTATUS:
    Supuestamente da información de si estamos envenenados y/o ocultos. A mi no me valía:

    C = Envenenado
    H = Oculto
    CH = Envenenado y Oculto

    #CHARNAME:

    Variable indocumentada (no aparece en la ayuda, pero existe).
    Te da el nombre de tu personaje

    Apartado Status Bar:


    #INT #DEX #STR:
    Son los valores de inteligencia, destreza y fuerza de nuestro personaje. Debe estar el status fuera para que funcione.

    #MANA #STAMINA #HITS:
    El mana / resistencia / vida que tengo.

    #GOLD:
    El oro que tengo

    #WEIGHT:
    La carga que llevo. Para saber la carga máxima del personaje se puede usar la fórmula dada en Stratics:
    ;Max weight is determined by multiplying Strength by 3.5 and adding 40.


    #AR:
    Variable indocumentada. Indica tu armor.

    #SEX:
    Variable indocumentada. Indica tu sexo (0 hombre/ 1 mujer)
    Apartado Container Info:


    #CONTID:
    Identificador del último contenedor abierto.
    Los menús (como los de alchemy, blacksmithing, tinkering….) no tienen identificador.

    #CONTTYPE:
    Tipo del último contenedor abierto. Son los mismos tipos que podemos encontrar en
    #LOBJECTTYPE, #FINDTYPE,etc….
    Los menús (como los de alchemy, blacksmithing, tinkering….) no tienen tipo

    #CONTPOSX #CONTPOSY:
    Posición x e y del último contenedor abierto en la pantalla. Se puede modificar a mano, además de con los comandos contpos X Y y con nextcpos X Y.


    #CONTKIND:
    Es la forma que tiene el contenedor en la pantalla.
    Por ejemplo, todos los menús de tinker, black, etc… tienen el valor WNF, ya que tienen la misma forma cuando aparecen en pantalla.
    NO tiene nada que ver con los tipos.


    Apartado LastAction:


    #LOBJECTID:
    Identificador del último objeto usado. Se puede modificar a mano

    #LOBJECTTYPE:
    Tipo del último objeto usado. Se puede modificar a mano

    #LTARGETID:
    Identificador del último objetivo apuntado. Se puede modificar a mano

    #LTARGETX #LTARGETY #LTARGETZ:
    Posición x,y,z del objetivo en el mapa. OJO! Es sobre el mapa, y no respecto a la pantalla como el cursor. Se puede modificar a mano.

    #LTARGETKIND:
    Indica el tipo de objetivo que es.

    Valores:
    1 : El último objetivo era un objeto.
    3 : Si el último objetivo era un recurso, como un árbol
    Se puede modificar a mano

    #LLIFTEDID:
    Nos da el identificador del último objeto que ha sido movido (es decir, drag & drop).



    #LSKILL:
    LastSkill, la última skill utilizada. Presenta un valor numérico que corresponde a una habilidad. Para conocer un número de una habilidad, primero usa esa skill en cuestión a mano y mira el valor de esta misma variable. Se puede modificar a mano para poner la skill que tú quieras.

    #LSPELL:
    Se emplea de manera análoga al #LSKILL, pero en este caso con los spells. Se puede modificar a mano para poner el spell que tú quieras.


    Apartado Find Item:

    Ver apartado: FINDITEM--BUSCANDO Y USANDO OBJETOS:

    Apartado Shop Info:

    Lo siento, pero aún no se cómo funciona esto (yo no lo uso )
    Apartado Extended Info:


    #SKILL:
    Después de usar CHOOSESKILL Habilidad, aquí se guarda el valor que tiene esa skill.

    #JOURNAL:
    Guarda la línea del diario que hemos leído con el Scanjournal

    #SYSMSG:
    Esta variable almacena el último mensaje del sistema (esos que salen en la parte derecha). Pero a mi no me va muy bien, sólo salen las letras impares.

    #JCOLOR:
    Aquí se guarda el color de la línea grabada en #Journal.

    #TARGCURS:
    Cuando esta variable vale 1, indica que el juego espera un objetivo (el cursor es la mano con la diana).
    Apartado Arm/Disarm:


    #LHANDID #RHANDID:
    Si empleamos la acción arm/disarm de UO, aquí aparecerán los IDs de los objetos de ambas manos. No tiene mucha utilidad, la verdad, porque no te dice lo que llevas en las manos, que sí sería más útil.
    Apartado Other Stuff:


    #SHARD:
    Guarda el nombre del servidor. Esto para servidores gratuitos no tiene mucha utilidad, está pensado para OSI, para saber si estás en tu servidor o no.

    #TIME:
    La hora actual en horas y minutos en formato HHMM.

    #SCNT:
    Es un temporizador de 1 segundo. Útil para contar tiempos largos.

    #PIXCOL:
    Color del último píxel leído con savepix.

    #CURSORX #CURSORY:
    Es la posición x/y del cursor en la pantalla del juego.


    #RANDOM:
    Una variable aleatoria, con valores entre 0 y 1000.



    ************************************************************************************************** *************************

    Espero os sirva de gran ayuda. Un Saludo, Yeraytor

  9. #9
    Avatar de o0{BoXeR}0o
    Fecha de ingreso
    February-2007
    Ubicación
    Oviedo - Asturias
    Facción
    Neutral
    Nacimiento
    Minoc
    Edad
    40
    Mensajes
    3.063
    Reputacion: 91
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    Guia extremadamente buena amigo, te felicito buf, como creador de macros, ya de mano me has solucionado una duda que era l ode los comandos de event macro , lo de la sintaxis
    Raid: jfromano
    Canal de YouTube: Javier Fdez Romano
    https://www.youtube.com/watch?v=mrulPkU5loI

  10. #10

    Fecha de ingreso
    May-2007
    Mensajes
    3
    Reputacion: 10
    Poder de reputación
    0

    Re: [Guia] Ayuda para EasyUo

    mu buena guia pero ninguno de los link funciona

  11. #11
    Avatar de Frederik
    Fecha de ingreso
    March-2007
    Mensajes
    504
    Reputacion: 10
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    no se por que no andan los event macro.... hice una para uqe camine oculto le puse

    event macro 13 21
    move 2162 500 a
    event macro 13 21
    move 2162 491 a
    event macro 13 21

    y no anda el 13 useskill 21 hiding... a ver que pasa...
    Frederik

  12. #12

    Fecha de ingreso
    March-2008
    Mensajes
    2
    Reputacion: 10
    Poder de reputación
    0

    Re: [Guia] Ayuda para EasyUo

    Bua! esta ayuda la escribí yo hace mil!

  13. #13

    Fecha de ingreso
    May-2007
    Mensajes
    169
    Reputacion: 10
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    Realmente no funciona ninguno de los enlaces.

    Alguien podria poner de donde bajar las 2 cosas?

    Gracias de antemano y saludos.


    Bailio.

  14. #14
    Avatar de Minette
    Fecha de ingreso
    January-2008
    Mensajes
    972
    Reputacion: 10
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    Cita Iniciado por Bailio Ver mensaje
    Realmente no funciona ninguno de los enlaces.

    Alguien podria poner de donde bajar las 2 cosas?

    Gracias de antemano y saludos.


    Bailio.
    Si te refieres al del easyUO, en este post tienes el client, el easy y algunas macros: http://ultima-alianza.com/foro/showthread.php?t=42

  15. #15

    Fecha de ingreso
    May-2007
    Mensajes
    169
    Reputacion: 10
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    Gracias-

    Saludos.


    Bailio

  16. #16
    Avatar de Charls Mouller
    Fecha de ingreso
    April-2007
    Facción
    Alianza
    Edad
    34
    Mensajes
    908
    Reputacion: 10
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    Gracias me a servido de mucho

  17. #17
    Avatar de karmelot
    Fecha de ingreso
    April-2008
    Edad
    38
    Mensajes
    1.303
    Reputacion: 10
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    Es muy buena la guia, estoy poniendome manos a la obra! muchisimas gracias! os la habeis currado un montón!!

  18. #18
    Avatar de AerO
    Fecha de ingreso
    March-2008
    Mensajes
    47
    Reputacion: 10
    Poder de reputación
    15

    Re: [Guia] Ayuda para EasyUo

    Una guia excelente, me ha servido de mucho, bueno, para todo en realidad.
    Juan Manuel Mata, pederasta y alcoholico.



  19. #19
    Avatar de unk
    Fecha de ingreso
    June-2008
    Edad
    34
    Mensajes
    74
    Reputacion: 10
    Poder de reputación
    15

    Respuesta: [Guia] Ayuda para EasyUo

    No andan los links para bajar el easy uo y el client, agradeceria mucho que alguien los suba.
    La crisis de la humanidad se reduce a la crisis de su dirección revolucionaria

  20. #20
    Avatar de Punki-to
    Fecha de ingreso
    October-2008
    Edad
    36
    Mensajes
    483
    Reputacion: 10
    Poder de reputación
    15

    Respuesta: [Guia] Ayuda para EasyUo

    y yo que me lo e leido todo,i me kedao igual,xk yo pa esto como k no xD

Temas similares

  1. [GUIA] Configurar EasyUO para las Macros
    Por o0{BoXeR}0o en el foro Macros
    Respuestas: 1
    Último mensaje: 05-Apr-2015, 22:06
  2. [GUIA] Plantillas
    Por Elfrod19 en el foro F.A.Q.
    Respuestas: 20
    Último mensaje: 23-Nov-2014, 04:07
  3. Guia
    Por zipe en el foro Dudas y Preguntas
    Respuestas: 4
    Último mensaje: 12-Jan-2012, 21:31
  4. Guia Sphere
    Por Smoke-Free en el foro Scripts
    Respuestas: 9
    Último mensaje: 02-May-2008, 10:48
  5. guia?
    Por OzDoll en el foro Dudas y Preguntas
    Respuestas: 27
    Último mensaje: 21-Oct-2007, 08:48

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
YoutubeFbChat IRCTwit