Blogia
MANGBROSS

Guia para hacer hechizos con Triggers (VII)

I.Introducción

II. Herramientas y concocimiento que se necesitan

III. Trabajando con el Object Editor

IV. Triggers: ¿Que són y como funcionan?

V. Variables

VI. Arrays

VII. Acciones Básicas (primera parte)

VII. Acciones Básicas (segunda parte)

VIII. Condiciones y Eventos Básicos

No voy a explicar todos los Eventos y Condiciones, aunque estos no sean tan numerosos como lo son las acciones. Sin embargo, algunos de ellos son de GRAN importancia en la creación de hechizos, ya que sin ellos la mejora de hechizos es imposible.

a) Eventos

Talves el evento mas simple es Map Initialization . Este activa los triggers justo cuando el mapa se inicia. Es recommendable no usar ninguna condicion con este evento, porque solo va a ocurrir una vez, al inicio del mapa, sin importer las circunstancias. Después de eso, se vuevle completamente inútil. Así que, agregandole una serie de condiciones las cuales no van a ser satisfechas al inicio del mapa, solo hará que el trigger desperdicie memoria.

El grupo de eventos Unit – Generic Unit Event es tambien muy util. Ellos activan el trigger cuando CUALQUIER unidad hace algo en general, como lanzar un hechizo (cualquiera, ninguno en especial), morir, ser atacada y así. Aquellos que necesitaremos la mayor parte del tiempo son: Unit Starts the Effect of an Ability , Unit Begins Casting an Ability , Finishes Casting an Ability , Begins Channeling an Ability y Stops Casting of an Ability .

  • Begins Casting vs Starts the Effect

    Si pruebas ambos eventos, dirás que son lo mismo, sin alguna diferencia. Pero Blizzard no es estúpido. Ellos no agregarían ambas para nada. Te darás cuenta con una mirada de mas de cerca de la pequeña diferencia. Si no es notado por el creador de hechizos puedes dejar libres muchos bugs, los cuales pueden servir para abusar del hechizo.

    La Unit Begins Casting an Ability dispara el trigger cuando la unidad se prepara para lanzar le hechizo, justo antes de que su mana se haya gastado o se haya disparado el cooldown. Los jugadores pueden abusar del hechizo, moviendo el casteador justo antes de que el cooldown se dispare (no es tan dificil de hacer eso), lo cual obtendra el efecto del hechizo sin gastar mana ni disparar el cooldown. Esto significa que pueden castear el hechizo un numero infinito de veces, sin alguna restricción. Un poco mal no? Y luego, te sorprenderás cuando quieras usar este evento. Bueno, por ahora el unico uso que le he encontrado es el de validar objetivos. El Object Editor no siempre validará los objetivos de tu hechizo para ti. En este caso, necesitas validarlos tu mismo. Hacer un trigger que se active por este evento chequea si el objetivo es valido. Si no lo es, le ordenas al caster que se detenga, seguido de un mensaje de error.

    La Unit Starts the Effect of an Ability se activa cuando el cooldown ha sido disparado y el mana gastado. Así que, el trigger principal que se active cuando el hechizo es lanzado debe de tener este evento, al menos en la mayoría de casos.

     

  • Finishes Casting An Ability y Stops Casting an Ability tienen una diferencia que se puede notar solo en el caso de hechizos de canalización.

    Finishes Casting an Ability dispara el trigger cuando la unidad ha terminado completamente de lanzar el hechizo, con su efecto total. Esto significa que si una Sacerdotisa de la Luna lanza un Starfall pero un maldito Dreadlord le lanza Sleep a ella, el trigger no ocurrirá en su caso, porque ella no ha finalizado de castear el hechizo. Actualmente ha sido detenida (stopped, osea aquí si funca el Stop Casting an Ability)! En conclusion, puedes tener algunos errors si no usas el evento adecuado.

    Stops Casting a Ability lanza el trigger cuando la unidad ha sido detenida de castear su hechizo antes de que haya llegado a su efecto total (haya sido voluntariamente o no) o la unidad concluya el efecto total del hechizo. Creo que este es un error de Blizzard, desde que normalmente el segundo caso no puede ocurrir normalmente. Pero aparentemente, lo hace! Así que si quieres saber cuando una unidad detiene el efecto de un hechizo de canalización, usa este evento, en vez de “Finishes Casting an Ability”.

Nota

No sugiero usar ninguno de los dos en hechizos que no sean de canalización.

El Event – Unit is Attacked es otro evento bugeado. Como “Begins Casting an Ability”, dispara el trigger solo cuando la unidad comienza a atacar. Si, por ejemplo una arquera ataca a una unidad pero se detiene antes de que la flecha sea lanzada, el trigger aún ocurre. Esto probablemente no pueda ser solucionado aún, hasta que el evento Event – An Unit is Damaged sea agregado por Blizzard. Este evento existe por ahora solo para unidades específicas.

El evento Timer – Every x seconds es también usado, para hechizos de canalización (los cuales estudiaremos más adelante) o para hacer el truco del wait menor a 0.10 (otra vez, lo explicaré más adelante). Este evento dispara el trigger cada x segundos. Esto es muy util si quieres repetir una serie de acciones. Una gran ventaja es que los timer puede tener un valor hasta 0.01 segundos, lo cual es 10 veces menor que el limite del wait. Es muy importante saber de la existencia de este evento, y saber que hace. ¿Quién sabe cuando lo podremos necesitar?

El evento Event – An Unit is being Summoned puede ser usado para seguir unidades invocadas a traves de hechizos, como Inferno y Water Elemental. Esto no sigue el proceso de lanzar el hechizo, pero sigue hecho de que una unidad sea invocada por un hechizo.

b) Condiciones

No hay mucho que decir acerca de las conidiciones. Todas las condiciones solo son comparaciones. Comparan si dos variables son iguales o no, o en el caso de variables numericas Less than, less than or equal to, greater than, greater than or equal to son comparaciones que también aparecen. Puedes comparar solo dos variables del mismo tipo, pero puedes reemplazar variables con funciones auxiliares (revisar el capitulo XI…. Cuando haya…. :P).

Nota
Cualquier condicion relacionada con un trigger es tambien verdadera para las condiciones dentro de un IF .

Me detendré para ver algunas funciones especiales, las cuales son más que una herramienta de ayuda para aplicar condiciones, en vez que comparaciones. Esas funciones son las ultimas en el selector de conditions en el trigger editor. TODAS pueden ser usadas en lugar de una condicion, y ahora entenderán porque.

Nota
Una comparación o función que devuelva falso, cuando estan envueltas condiciones, es interpretado como si la condición no haya sido complida.

Primero está la función AND . Tiene dos campos, y en cada uno de ellos puedes poner una condición. Esta función regresa un valor verdadero (que significa que la condición ha sido cumplida) si ambas condiciones son verdaderas. Si al menos una de las condiciones el falsa, la función devolverá falso también.

La segunda función es la función OR . Esta también tiene dos campos, para cada condición. Si ambas condiciones son falsas, entonces la función devolverá falso tambien. Así que al menos una de las condiciones tiene que ser cumplida para que la función devuelva verdadero también.

La tercera función es AND (All Conditions Are True) . A diferencia de las otras dos funciones, puedes insertar en esta cuantas condiciones quieras. Sin embargo, ten en cuenta que todas esas condiciones deben ser cumplidas para que la función devuelva verdadero.

La última función es OR (Any Condition Is True) . Como la función anterior, puedes insertar cuantas condiciones quieras. En este caso, solo una de las condiciones tiene que ser cumplida en la función para que devuelva un valor verdadero.

Esta es toda la filosofia para las condiciones. Tambien quisiera mencionar que hay condiciones dentro de condiciones. Es un tipo de comparación llamada Boolean Comparison. Son situaciones en las cuales ciertas funciones pueden devolver un valor falso o verdadero (por ejemplo, la función Group is Empty chequea si un grupo de unidades está vacía, y si lo es, regresa un valor verdadero, pero si hay ni una unidad en el grupo devuelve falso). Aun así, las condiciones así mismas tienen esta propiedad. Si una condicion es correcta, devuelve verdadero, pero si no lo es devuelve falso.

Así que, la función Group is Empty puede ser reemplazada con una comparación: Number of Units in Group is equal to 0. Si es así, la comparación devolverá verdadero y el grupo puede ser considerado vacío, pero si al menos hay una unidad en el grupo, devolverá falso. El código puede ser el siguiente:

Código:

((Number of Units in Group) is equal to 0) is equal to false

Esto puede ser confuso en un inicio, pero si estudias bien este capitulo un poquito más, podrás realizar esto tal y como está mostrado aquí.

4 comentarios

shingo -

Si ya se que eres un despistao... Que no vuelva a ocurrir!!!

Que me espantas al GoogleBot!!

jonatan -

bueno se me chispoteo

shingo -

Er....

Creo que el post al que te refieres está mas arriba, Jhon Caspablanca...

jonatan -

bueno yo vi esa propaganda.y por dentro dije "qve pensaran esos tios si con esa propaganda van a dar pena".......y esperaba de qve el domingo de las elecciones bayly qve siempre pasa los videos mas atorrantones qve hay lo pase en su programa pero todo lo dedico al aburrido del "zorro" meier...