Blogia
MANGBROSS

WARCRAFT

Guia para hacer hechizos con Triggers (XI)

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

IX. Eventos - Variables de Respuesta en Detalle

X. Manipulando los Triggers

XI. Funciones Auxiliares

XII. Hechizos de un solo objetivo

Este es, probablemente, la clase más simple de hechizos, cuando nos referimos a implementarlo con triggers. Estos hechizos son los que hacen objetivo a un único y específico objetivo. Esto significa que el jugador elige el objetivo y solo ese es afectado por el hechizo. Hechizos como ese incluyen a Cripple, Soul Burn, Storm Bolt, Entangling Roots, Rejuvenation, Possession, Holy Light, Death Coil, Life Drain, Siphon Mana, Mana Burn, Shadow Strike, Finger of Death y otros.

Nota:

Chain Lightning, Healing Wave u otros hechizos en cadena no son de un solo objetivo. Aún cuando el jugador seleccione el primer objetivo, para accionar el efecto, no es tan fácil, porque este afecta a las otras unidades "en la cadena". De todas maneras, estos hechizos pueden usarse como hechizos dummy, si se establece que solo haga efecto en un solo objetivo, y no haga nada más.

Por ahora, nos apegaremos a hechizos de no-canalización o con buffs. Cuando aprendas como hacer hechizos de cada categoría, luego tendrás a los hechizos de canalización/buff que requieren de técnicas separadas, las cuales una vez aprendidas, no necesitarás luchar con cada categoría otra vez, teóricamente por supuesto.

Así, que empecemos. Voy a comenzar con la teoría y luego vamos a hacer un hechizo práctico. La idea de un Hechizo de un Solo Objetivo es simple. Tu chequeas siempre que una unidad lance la habilidad alterada, y luego creas las unidades dummy y le ordenas que lance varios hechizos al objetivo, o que lo dañe, o talvez algo similar, dependiendo de tu hechizo. Esto es por puro efecto del hechizo. En este tutorial no voy a explicar sobre los efectos especiales. ¡Talvez pueda hacer un tutorial aparte luego!

Y ahora, vamos a hacer el ejemplo práctico. He aquí los pasos básicos:

Paso 1 - La idea del hechizo

Vamos hacer un hechizo aparentemente dificil (especialmente si tu nunca has hecho un hechizo mejorado con triggers) llamado Shock Destructor (bah!, probablemente no es el mejor nombre, puedes cambiarlo si quieres). Esta descripción es mas o menos lo que hace:

  • El caster emite un rayo de energía que hace objetivo a una unidad. Dependiendo de su naturaleza, hace un efecto diferente.
  • Las Estructuras reciben daño (50 en nivel 1, 75 en nivel 2 y 100 en nivel 3)
  • Las unidades Mecanicas son paralizadas (6 segundos en nivel 1, 7 en nivel 2 y 8 en nivel 3)
  • Las unidaes Organicas son purgadas (3 segundos en nivel 1, 4 en nivel 2 y 5 en nivel 3)

Paso 2 - Haciendo la habilidad dummy, la unidad dummy y otras habilidades

Vamos a buscar una habilidad dummy. Recuerden, debe ser un instantaneo, hechizo de un solo objetivo. Ya he mencionado unos cuantos hechizos arriba, pero no todos son hechizos instantaneos (su efecto dura un par de segundos y pueden ser dispeleados). Aún sí, puedes hacer esas habilidades como si fueran instanteas. Solo fija su duración a 0.01 y parecerá como si fueran instanteas.

Nota:

Una duración de 0.00 no significa que no tenga duración, esto significa que el hechizo va a durar para siempre, o hasta que sea dispeleado. Es una convención

Nota:

Algunas habilidades, pueden dejar efectos secundarios aún si su duración es casi imperceptible. Hechizos que pueden interrumpir abilidades de canalización (causar parálisis, sueño -sleep-, silencio, etc) puede ser un problema si tu hechizo no se supone que actualmente rompa las canalizaciones. Te sugiero que evites esos hechizos lo más posible, a menos que intentes de todas maneras cancelar hechizos de canalización!

Ahora, revisemos la descripción del hechizo, te darás cuenta que he mencionado que el caster emite un rayo de energía. Hmm, ¿Tenemos algún hechizo que haga eso? Pues claro, lo tenemos. Lo hace Chain Lightning. Este causa que el caster emita un rayo de energía. De todas maneras, queremos que este hechizo afecte solo a un único objetivo. Haz una copia del hechizo, y luego cambia alguno de sus campos.

Primero que nada, vamos a hacer el hechizo que servirá como un hechizo dummy, es decir que este no afectará al objetivo de ninguna manera. Fija el daño inicial a 0 en todos los niveles, número de objetivos igual a 1 (se va a ver extraño que salte y solo afecte al primer objetivo)... y eso es todo. Si probarías el hechizo, este no haría nada.

Ahora es momento de hacer que el hechizo se vea realístico. Dejando la antigua descripción del Chain Lightning, nombre e iconos hará que el jugador piense que está lanzando un Chain Lightning. Así que cambia su nombre a Shock Destructor y todas las descripciones correspondiente y aún deberías cambiar el icono. He usado el icono de la habilidad Dark Portal, pero eso en realidad no interesa. ¡Haz que se vea convincente!

Y ahora, todavía tenemos algunas cosas técnicas que resolver. El hechizo tiene el costo de mana y el tiempo de recarga antiguos del Chain Lightning. Yo he conservado algunos valores, pero puedes cambiarle si quieres. El costo de mana que he elegido es 70/65/55 (nivel 1/nivel 2/nivel 3) y el tiempo de recarga en 8/8/8 segundos. Una última cosa que hay que cambiar son los objetivos. Chain Lightning solo afecta a unidades organicas. Aquí están los objetivos válidos que le he dado (y sería mejor que tu tambien lo sigas): Aire, Tierra, Enemigo, Organico, Estructura, Mecanico, Vulnerable. Es bueno darle todos los valores que tu le encuentres válido al hechizo. En ese caso, no dandole Vulnerable puede hacer que el hechizo sea lanzado de todas maneras en unidades Invulnerables, pero no deberías correr el riesgo. Algunos hechizos tienen estos valores bugeados.

Ahora puedes darle la habilidad al heroe que vas a probar. Tiene que verse extremadamente realístico, pero si tu ordenas al heroe que lo castee, solo obtendrás una unidad golpeada por un rayo de energía, sin consecuencias, pero el mana se habrá perdido y el tiempo de recarga se habrá iniciado. Esto es un inicio prometedor. Vamos al
You can now give the ability to a hero and test it. It will look extremely realistic, but if you order the hero to cast it, you will only get a unit struck by a bolt of lightning, with no consequences, but mana lost and a cooldown fired. It’s a promising start though. Regresemos al Object Editor, puesto que no hemos terminado.

Tenemos que tener algunas habilidades para las unidades dummy. Necesitamos una habilidad que haga un solo objetivo y paralice (sugiero Storm Bolt) y una que Purgue (la descripción es muy obvia). Copia y pega ambas habilidades, y luego editalas de la siguiente manera.

  • Hazle que tenga 3 niveles, pero conservando su estado de habilidad de unidad, no de heroe.
  • Cambia el costo de mana a 0/0/0, tiempo de recarga a 3/3/3 segundos (usualmente un valor alto así nos aseguramos que la unidad dummy está habilitada para castear la habilidad solo cuando se le ha ordenado y no siempre y cuando quiera), que tan largo va a durar el hechizo es supuestamente el tiempoque el objetivo ha sido afectado por el hechizo y tu debes de cambiar sus buffs.
  • Revisa los objetivos. Asegurate de que la unidad dummy está habilitada para castear el hechizo en una unidad válida. En ese caso, asegúrate de que el Storm Bolt pueda hacer objetivo a una unidad Enemiga y Mecanica y que el Purgar pueda hacer objetivo a una unidad Enemiga y Orgánica.
  • Iconos y descripciones usualmente se les dejan en blanco ya que no las vamos a ver de ninguna manera.
  • Para saber cuales son los hechizos que has usado para tus habilidades customizadas, te sugiero que le agreges en la opción de editor suffix, con el nombre del hechizo dummy. De esta manera, te hará la vida más fácil. En este caso tengo un Purge (Shock Destructor) y un Storm Bolt (Shock Destructor).

Y por último y no menos importante, no olvides a al unidad dummy. Si no recuerdas como hacer una unidad dummy regresa al capítulo 3 y ahí tienes las instrucciones.

Paso 3 – Mejorado la habilidad con Triggers

Probablemente el paso más difícil. Puede incluso asustarte, pero en verdad no hay por que. Vamos a tomar el código paso a paso. Necesitamos eventos, condiciones y acciones. Si no recuerdas como alguno de ellos funciona, porfavor relee el capítulo previo, hasta que entiendas completamente como funcionan los triggers. No te saltes ese capítulo, porque es extremadamente importante comprender la mejora con triggers. Mantente leyendo e intentando de entenderlos hasta que estés completamente seguro que sabes como funcionan los triggers.

Crea un nuevo trigger. De nuevo, sugiero que le des a los triggers el mismo nombre que tu hechizo (si necesitas más de un trigger sigue alguna regla pero que relacione al nombre del trigger), así podrás reconocerlo despues, si aún quieres cambiar tu hechizo. Es muy importante mantener en order en ambos, el Object Editor y el Trigger Editor.

Ahora, vamos a ver como un trigger se activaría cuando una unidad castee el Shock Destructor. En código puede verse algo así:

Trigger:

Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Shock Destructor
Esto no es nada nuevo, si has leído el capítulo 8. El evento básico, la condición básica. Ahora vamos a ver profundamente en las acciones, donde hay cosas que nos pueden perder. Sabemos que necesitamos una unidad dummy, para dañar o castear una habilidad a un objetivo. Así, creamos una unidad dummy en la posición del objetivo, el cual ha hecho el caster. Mas aún, la unidad desaparecerá luego de un corto período de tiempo, así que sería bueno agregar un timer de expiración con un muy corto valor. La accion puede ser así:

Trigger:

Actions
Unit - Create 1 Dummy for (Owner of (Triggering unit)) at (Position of (Target unit of ability being cast)) facing 0.00 degrees
Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
Ahora, las cosas se complican más, porque dependiendo del tipo de objetivo (organico, mecanico o estructura), el dummy hará algo. Es claro que este es el paso donde las cosas se hacen diferentes por cada hechizo de objetivo único. Vamos a usar multiples Ifs, cada uno para verificar si el objetivo es Organico o Mecánico o Estructura. No sugiero que insertes en el ELSE de un IF otro IF porque puedes hacerlo lentamente y tener nada de codigo, especialmente cuando complicas más y más el código.

Así, que vamos a empezar con el primer IF. Este chequea si el objetivo es una estructura, y si lo es, daña al objetivo. Aún así, para el daño necesitas una fórmula, porque si el nivel de la habilidad es grande, luego el daño es tan grande como ese. Así que tu fórmula depende de cada nivel de la habilidad. Ahora vamos a dar una mirada al daño:

50 para el nivel 1, 75 para el nivel 2 y 100 para el nivel 3. Es claro que con cada nivel, el daño se incrementa en 25. Esta diferencia entre niveles DEBE ser una constante si quieres usar una fórmula. La diferencia es llamada Ratio. Usualmente la fórmula es algo así:

Código:

(Level 1 damage – Ratio)+(Ratio*Level of the Ability)

Y de repente las cosas se vuelven simples no? En el código, la fórumla debería verse así:

Código:

Damage = (50-25)+(25*(Current Level of (Shocking Destructor) for (Triggering Unit))

Esta fórmula aún puede ser simplificada, par su fácil trabajo en la PC y hacer que tu hechizo sea más eficiente. Si tu ya sabes que 50-25 es 25. En vez de poner que el juego lo calcule todo el tiempo que el hechizo haga objetivo a una estructura, hazlo tu mismo. Esto no te cuesta nada, pero si le cuesta a la PC. ¡Haz tu fórmula lo más eficiente posible!


Ahora que tenemos la fórmula, el siguiente paso de la acción es simplemente implementar lo que has aprendido. Aquí está lo que tendríamos:

Trigger:

If (((Target unit of ability being cast) is A structure) Equal to True) then do (Unit - Order (Last created unit) to damage (Target unit of ability being cast) for (25.00 + (25.00 x (Real((Level of Shock Destructor for (Triggering unit)))))) using attack type Magic and damage type Fire.) else do (Do nothing)
Real() hace una conversión a real. En este caso, convierto un entero, porque en una operación puedes usar número del mismo tipo (real o entero) pero no puedes mezclarlos. En este caso, el daño se supone que es real desde que (Level of Ability for unit) la función devuelve un valor entero, tienes que convertirlo tu mismo. Esto lo encontraras un montón de veces.

Ahora si pruebas tu habilidad en una estructura, ¡esa estructura tiene que dañarse! Aún así, vamos todavía a necesitar afectar a unidades organicas y mecánicas. Aquí, la teoría es la misma, solo que usas diferentes habilidades. Así que voy a explicar solo para las orgánicas.

Tienes que darle a la unidad dummy la habilidad customizada Purge, para que se lo castee al objetivo. Pero de nuevo, el hechizo debe de durar más por cada nivel. ¿Ves? no te dije que le des tres niveles a este hechizo por las puras. Y si recuerdas, hay una acción que permite establecer niveles para habilidades normales también. Así todo lo que tienes que hacer, es darle la habilidad purge al dummy, establecer el nivel al nivel del Shock Destructor, y luego ordenar al dummy que lo castee al objetivo. Una unidad orgánica es una que no es ni mecanica ni estructura. Aquí está el código:

Trigger:

Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is A structure) Equal to False
((Triggering unit) is Mechanical) Equal to False
Then - Actions
Unit - Add Purge (Shock Destructor) to (Last created unit)
Set Level of Purge (Shock Destructor) for (Last created unit) to (Level of Shock Destructor for (Triggering unit))
Unit - Order (Last created unit) to Orc Shaman - Purge (Target unit of ability being cast)
Else - Actions

Ahora cambia este código para unidades Mecanicas. Más abajo está el código completo. Si lo copias correctamente, el hechizo funcionará:

Trigger:

Events

Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Shock Destructor
Actions
Unit - Create 1 Dummy for (Owner of (Triggering unit)) at (Position of (Target unit of ability being cast)) facing 0.00 degrees
Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
If (((Target unit of ability being cast) is A structure) Equal to True) then do (Unit - Order (Last created unit) to damage (Target unit of ability being cast) for (25.00 + (25.00 x (Real((Level of Shock Destructor for (Triggering unit)))))) using attack type Magic and damage type Fire.) else do (Do nothing)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is A structure) Equal to False
((Triggering unit) is Mechanical) Equal to False
Then - Actions
Unit - Add Purge (Shock Destructor) to (Last created unit)
Unit - Set Level of Purge (Shock Destructor) for (Last created unit) to (Level of Shock Destructor) for (Triggering unit))
Unit - Order (Last created unit) to Orc Shaman - Purge (Target unit of ability being cast)
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is Mechanical) Equal to True
Then - Actions
Unit - Add Storm Bolt (Shock Destructor) to (Last created unit)
Unit - Set Level of Storm Bolt (Shock Destructor) for (Last created unit) to (Level of Shock Destructor for (Triggering unit))
Unit - Order (Last created unit) to Human Mountain King - Storm Bolt (Target unit of ability being cast)
Else - Actions
¡Felicitaciones, has completado tu primer hechizo mejorado con triggers! Mientras practiques, serás más habil parar hacer hechizos de un solo objetivo más difíciles. Pero ahora, es tiempo de ver la segunda categoría.

Guia para hacer hechizos con Triggers (X)

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

IX. Eventos - Variables de Respuesta en Detalle

X. Manipulando los Triggers

XI. Funciones Auxiliares

Hay muchas otras funciones, separadas de las events/conditions/actions (eventos/condiciones/acciones), pero que pueden ser usadas dentro de ellas. Estas funciones son usadas para reemplazar tipos de variables, como unidades, puntos e inclusive numeros.

Nota:
En JASS, te darás cuenta de que el Evento – Variables de Respuesta estan en forma de acciones. Esto es porque ellas son verdaderamente funciones Auxiliares. Las he clasificado como variables, porque actuan y se ven como ellas. Tienen una duracion de vida, dependiendo del evento, y son extremadamente y frecuentemente usadas.

Point with Polar Offset, te ayudara a tener un punto en un circulo, con un cierto radio y un punto central conocido. La funcion tiene 3 parametros (campos azules en GUI): el primero determina el centro del circulo (el cual es la locacion), el segundo recibe el radio del circulo y el tercero es usado para determinar el punto dentro del circulo, en grados. Puedes usar esta funcion, por ejemplo, para hacer una unidad dummy que lance shockwaves radiales (osea en varios puntos de un circulo, vamos, que casi como el ulti del Toro del DotA, esto ultimo lo digo yo, Shingo Shineeee!!).

Nota:
En Warcraft 3, los valores de los grados son como lo siguiente:

  • 0 para el este
  • 90 para el norte
  • 180 para el oeste
  • 270 para el sur


Random Integer and Random Real, son tambien muy buenas acciones. Usalas para reemplazar un entero o un valor real. Lo que hacen estas funciones es darte un numero aleatorio entre un valor x y un valor y. Los valores, al parecer, son completamente aleatorios, pero estoy seguro que en un punto determinado la aletorizacion de las series se vuelve a repetir.

Owner of Unit, te bota un valor de jugador. Chequea que jugador maneja a cierta unidad que hace alguna cosa, asi, puedes reemplazar este valor por el jugador requerido (como el que esta en Unit – Create Unit).

Math - Distance Between Points calcula la distancia entre el punto A y el punto B. La Distancia en Warcraft 3 es calculada en pixeles (nota de Shingo: es mas, creo que todos los valores relacionados a AoE y velocidades tambien lo son en pixeles). Esta funcion tiene sus propios usos, las cuales descubriremos mas adelante.

Math - Angle Between Points te da un valor real (en forma de un angulo). Para entender mejor esta funcion, le llamare al punto A el origen y al punto B el destino. Ahora, regresemos al Polar Offset, considerando que A es el centro del circulo, el radio es igual a la distancia entre el punto A y el punto B, y como B es el punto en el circulo, el angulo es igual a la locacion de B en el circulo, en grados. Para mas informacion, revisen la funcion Polar Offset al inicio de este capitulo.

Arithmetic es usualmente la funcion escencial cuando trabajas con numeros. Te permite sumar, restar, multiplicar o dividir dos valores. Para que esas operaciones sean hechas para mas valores, tienes que insertar otra funcion arithmetic en lugar de otro valor, considerando si el valor retornado por esa nueva funcion es real o entero.

Convert to es tambien otro set de escenciales funciones auxiliares. Ellas te permiten convertir valores de un tipo a otro. Las funciones de conversion son: Integer to Real, Real to Integer, String To Real, Real to String, Integer to String, String to Integer, Degrees to Radians and Radians to Degrees. Necesitaras esas funciones si quieres insertar valores enteros, por ejemplo, en campos que solo permiten valores reales o viceversa.

Guia para hacer hechizos con Triggers (IX)

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

IX. Eventos - Variables de Respuesta en Detalle

X. Manipulando los Triggers

Aquí hay algunas técnicas que a través de ellas puedes manipular triggers. Esto puede ser mayormente para hacer una acción especial, hecho solamente para ello. (Disculpen mi traducción aquí, pero esta vez si me perdí T_T)

Una primera técnica es el Turn On/Off  (prender/apagar) los triggers. Todos los triggers normalmente están prendidos, pero hay un checkbox (es uno de esos cuadraditos para marcar opción, es que no encontré una traducción al español) [inicialmente sin marcar] etiquetado como Turn Off. Si ustedes los marcan, el trigger iniciará apagado. Puedes también prender o apagar los triggers con las functiones Trigger – Turn Off y Trigger – Turn On.

Pero ¿Qué es exactamente apagar (Turned Off) un trigger? Usualmente, si un evento toma lugar en ciertas condiciones, las acciones se cumplen. Esa es la definición básica de los triggers. Pero en el caso de apagar los triggers, las acciones nunca sucederán, sin importar las condiciones. Una muy buena técnica es combinar el apagar y prender los triggers con el evento  Timer – Every x seconds. Prendes el trigger para que las acciones sucedan un numero de veces y luego solo apagas el trigger con un if (Turn Off). Esto puede ser una tecnica muy cercana para los hechizos de canalización.

Otra técnica de manipulación de triggers es mediante la destrucción (Destroy) de ellos. Un trigger destruido es simplemente descartado de la memoria, así las acciones nunca se llevarán a cabo, sin importer los eventos o las condiciones. De hecho, ninguno de ellos existe luego de destruir el trigger. ¡El trigger se va hasta que reinicies el mapa!  Usalo para los trigger de Map Initialization triggers y luego destruyelos en la inicialización, para salvar algo de memoria.

Nota

Destruir un trigger o apagandolo previene solo de nuevas ejecuciones del trigger. La serie de acciones que tiene el trigger se hacen, no importa que, si el trigger ha sido disparado bajo un evento con las condiciones correctas. Es decir (esto lo digo yo, Shingo) si tu pones un turn off o un destroytrigger dentro de un trigger este se ejecuta la primera vez.

La ultima técnica que les quiero presentar no es realmente manipulación de triggers, pero si de acciones. La acción Skip Remaining Actions hace lo que su nombre dice: este se salta todas las acciones despues de él. Esto no afecta al trigger. Si el evento sucede con sus condiciones, la serie de acciones iniciará de nuevo. Skip Remaining Actions solo previene que las siguientes acciones (sin excepciones) se lleven a cabo durante la ejecución actual.

Guia para hacer hechizos con Triggers (VIII)

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

IX. Eventos - Variables de Respuesta en Detalle

En este capítulo, voy a tocar lo más importante: Event – Response variables (variables de respuesta) y voy a explicar cuando usarlo.

(Attacking Unit) – Usado con el evento “Unit is being Attacked”. Se refiere al que está atacando (osea el que tiene el chipote chillón en alto, esto lo escribo yo, Shingo).

(Attacked Unit) – Usado con el evento “Unit is being Attacked”. Se refiere a la unidad atacada (Daelin escribe “obvio, eh?”, pero como yo no dominaba ingles tanto como ahora ni le entendi esto).

(Killing Unit) – Usado con el evento “Unit dies”. Se refiere al asesino, al que mata a la unidad (unidad que ha atacado matando a la víctima).

(Dying Unit)– Usado con el evento “Unit dies”. Se refiere a la víctima (unidad asesinada por la unidad Asesina o Killing Unit).

(Casting Unit) – Usado cuando se lanza un hechizo (lean el capitulo previo). La variable se refiere a la unidad que lanza la abilidad, la fuente del hechizo.

(Target Unit of Ability Being Cast) – Usado cuando se lanza un hechizo (lean el capitulo previo). La variable se refiere a la unidad que esta siendo objetivo por el hechizo (si el hechizo hace directamente objetivo a una unidad). Esos hechizos incluyen Soul Burn, Chain Lightning y Storm Bolt.

Nota

En el caso de hechizos en cadena (Chain Lightning y Healing Wave), la variable se refiere solo a la primera unidad que la cadena hace objetivo.

(Target Point of Ability Being Cast) – Usado cuando se lanza un hechizo (lean el capitulo previo). La variable se refiere al punto en el cual el hechizo ha sido lanzado (si eso quiere decir que hace objetivo a un punto). Esos hechizos incluyen objtivos de hechizos AoE (Blizzard, Flame Strike, Earthquake, etc) o hechizos que hacen objetivo a un punto (Shockwave, Carrion Swarm, Pocket Factory etc).

(Summoned Unit) – Usado con el evento “An Unit is summoned” para referirse a la unidad invocada (summoneada XD). Si más de una unidad ha sido invocada por este hechizo (como los Spirit Wolves del Far Seer), la variable puede causar problemas.

(Summoned Unit) – Usado con el evento “An Unit is summoned” para referirse al que invoca (la fuente desde cual ha sido invocada, summoneada la criatura, osea el summoneador XD). No puede reemplazarse por (Casting Unit) porque ese evento se refiere a una unidad que ha sido invocada, no a un hechizo que haya sido lanzado.

(Triggering Unit) – Puede ser usado con todos los eventos. Usualmente es la unidad a la cual el evento directamente se refiere, así puede reemplazar a (Attacked Unit), (Casting Unit), (Dying Unit), (Summoned Unit) y otras no mencionadas anteriormente. Altamente recomiendo que usen esta variable porque no es afectada por tiempos de espera (puede usarse aun despues del tiempo de espera, wait en ingles, porque no se reinicia, resetea, hasta el final del trigger).

(Picked Unit)– Debe usarse junto con las acciones Pick up Every Unit o Pick up Every Unit Matching Conditions. Necesitas usar esta variable para referirte a la unidad picked, usada por el Pick up Every Unit. La variable solo existe dentro de las acciones del Pick up Every Unit/Pick Up Every Unit Matching Conditions.

(Matching Unit) – Debe usarse todo el tiempo que te quieras referir a una unidad dentro de la condicion “Unit Matching Conditions”. Si, esto incluye la acción Pick up Every Unit Matching Conditions también.

(Last Created Unit) – Se usa luego de la acción Unit – Create Unit, para referirse a la unidad recién creada.

Nota

No crees más de una unidad al mismo tiempo si quieres usar esta constante o si solo quieres guarder una de las unidades que has creado.

 

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

Guia para hacer hechizos con Triggers (VI)

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)

La acción Unit – Add Ability le da a una unidad cierta habilidad, la cual inicialmente no tiene. Puedes darle cualquier habilidad a cualquier unidad (si, eso significa que le puedes dar habilidades de heroes a unidades normales) pero hay ciertas restricciones. Darle a un heroe una habilidad no le permitirá que mejore la habilidad a un nivel más alto cuando él gane un nivel.

La acción Unit – Set Level of Ability permite que le cambies el nivel de cierta habilidad (al nivel que quieras, aún si es mayor o menor que el nivel actual). Gracias a los ultimos parches, las habilidades de las unidades normales pueden tener multiples niveles. Acceder a esos niveles se puede hacer solo a traves de esta acción. La acción Unit – Issue Order permite que le ordenes a una unidad que haga algo. Las ordenes incluyen moverse, atacar, patrullar, lanzar una habilidad, practicamente cualquier cosa que el jugador le pueda ordenar a una unidad que haga. Hay mas tipos de ordenes, cada una lleva una acción separada. Por ejemplo, Unit – Issue Order Targeting a Unit ordena a la unidad que le haga algo a la otra unidad, como atacarla o lanzarle un hechizo a cierta unidad.

Nota:

El jugador puede remover ordenes, si el o ella le ordena a la unidad que haga algo.

Nota:

Si quieres ordenarle a una unidad que lance un hechizo, necesitarás que la orden sea raíz de la habilidad (la habilidad en la cual te has basado para hacer tu hechizo dummy, no interesa que siempre tengas una habilidad dummy). Digamos que tu habilidad dummy se basa en Neutral Hostile Anti-Magic Shell. Puedes ordenarle a una unidad que castee exactamente la habilidad transformada (osea la habilidad que has hecho a partir de la básica). Sin embargo, puedes ordenarle a la unidad que castee Undead – Banshee – Anti-Magic Shell. A traves de esto, la accion le ordenará a la unidad que castee Anti-Magic Shell. Si una unidad tiene más de una habilidad con la misma raíz (Anti-Magic Shell en este caso), el trigger lanzará el primer tipo de habilidad que no tenga el cooldown activado. Esto es como advertencia para que a una unidad no le pongan dos habilidades que tengan la misma habilidad raíz, aún si se basan en una en Neutral Hostile y la otra en una habilidad de raza (en este caso Undead).

La acción Unit – Create Unit es una acción que crea cierto tipo de unidad, para un cierto jugador, en cierto punto del mapa. La unidad aparece de la nada, pero no se considera que haya sido “trained” (entrenado) por el jugador, significando que no aparecerá como trained unit en el scores al final del mapa. Excepto por eso, la unidad retiene todas sus funciones, de habilidades a propiedades y su costo de comida.

La acción Unit – Damage Target le ordena a una unidad dañar a otra. Sin embargo, esto no sera hecho de manera “Unidad atacando a otra unidad”. Esta funcion fue introducida por Blizzard en vez de substraer vida de una unidad cuando quieren simular daño, actualmente se puede ordenar a una unidad dañar a otra unidad. Este te da acceso a la recompensa (la experiencia y el dinero para el lanzador del hechizo), cosa imposible con la substracción de vida. Así, el daño se hace instantáneamente, y no es detectado. La unidad que hace daño no necesita encarar a su enemigo, ni lanzarle un proyectil o aún mostrar su animación “Attack” (de ataque). Necesitas mencionar la cantidad de daño, esto no solo ordena dañar en el rango de daño que es capaz. Por ejemplo si una unidad tiene 10-15 de daño la unidad no dañará entre 10 y 15 al objetivo, en vez de eso necesitas darle una cantidad de daño. Mas aún, este trigger es capaz de que tu le elijas el tipo de daño (Chaos, Magic, Piercing, Siege etc) y también, el daño dado dependerá de la armadura del objetivo, si es tipo Magic (magia) no le afectará a unidades Invulnerables a Hechizos y así.

La acción Unit Group – Pick Up Every Unit in Unit Group and do Actions es una de las más importantes acciones, usada no solo en hacer hechizos, pero usualmente cuando trabajamos con grupos de unidades. Esta acción toma cada unidad de un grupo y hace una serie de acciones, por CADA UNA de esas unidades. Las series de acciones son corridas al mismo tiempo, haciendo un excelente método de hechizos en area (AoE).

Nota:

Si en una serie de acciones, las picked units no son mencionadas, las acciones solo serán unas series que ocurrirán N veces (N viene a ser el número de picked units) al mismo tiempo. La acción Unit Group – Pick Up Every Unit in Unit Group (Matching Conditions) and do Actions hace casi lo mismo, excepto porque cada una de las series de acciones son ejecutadas solo para aquellas unidades que cumplan con una serie de condiciones. Otra vez, esto puede ser usado en hechizos AoE cuando, por ejemplo, quieres agarrar solo unidades aliadas, o enemigas, o inmunes a hechizos u otras.

Guía para hacer hechizos con Triggers (V)

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)

Es el momento donde vamos a analizar acciones. Hay toneladas de ellas y no tengo tiempo ni paciencia para explicar cada una de ellas. De todas maneras, tomaré un buen puñado de ellas, muy importantes de comprender si quieres mejorar tus hechizos.

Una acción extremadamente básica es Wait . Esta acción tiene un efecto obvio: cuando llegue, pausará el trigger por un periodo de tiempo, antes de hacer las acciones que le siguen. Puedes establecer el numero de segundos durante el cual, el trigger será pausado. Hay que tener en cuenta que aun, aunque parezca posible, no puedes hacer que la pausa tenga un valor menor que 0.10 segundos. También, tienes que darte cuenta que la mayoría de Eventos de respuesta de variables (Event – Response Variables) son dispuesta de la memoria después de un pequeño tiempo de espera (wait de 0.10 segundos). Hay excepciones como lo son Triggering Unit. La única solución para mantener esas variables en la memoria es asignándoles una variable global.

Una accion similar es Wait for Condition . A diferencia del plano y simple Wait, esta acción espera hasta que la condición sea satisfecha. La checking every x section es intrepretado como una frecuenta en la cual la condicion es chequeada si ha sido satisfecha, para continuar con el trigger. Hasta que sea chequeado, el trigger esperará, aún si la condición esta satisfecha.

For Loops tambien son acciones extremadamente importantes y para esa parte de ustedes que no tiene experiencia en la programación de computadoras, estas acciones sonaran difícil de comprender. Los Loops repiten una serie de acciones por un numero limitado de veces (MUY IMPORTANTE, tienen que ser limitados). Puedes ponerle un valor de inicio y un valor final. El primer valor puede ser o una variable contante (Integer A, Integer B) o una variable global entera. Con cada loop, la variable es incrementada (su valor se incrementa en 1) hasta que sea mayor que el ultimo valor (el valor final). Es muy útil usar la variable en formulas dentro del loop, cosa que discutiremos después.

Nota:

No usen las variables constantes Integer A/B para más de un hechizo. Si lo hacen, pueden tener el mismo problema como si un mismo hechizo fuera lanzado por dos unidades al mismo tiempo, y ustedes estuvieran usando variables globales, pero esta vez para los dos hechizos.

La acción If/Then/Else es todavía otra estructura básica de programación (en este caso una acción) que necesitan aprender. La acción chequea una serie de condiciones. Si todas son satisfechas, entonces una serie de acciones suceden (acciones IF). Sin embargo, si al menos una de las condiciones no es cumplida, las otras series de acciones sucederán (acciones ELSE). Acciones de Unidades son muy frecuentemente usadas en mejorar hechizos porque usualmente son objetivos de hechizos… Creo que todos los hechizos usan acciones de unidades, de una manera u otra.

La acción Unit – Add Expiration Timer remueve una unidad despues de una cantidad de segundos. Como las unidades invocadas, recibe una barra azúl, la cual muestra cuando desaparecerá. Usenla en unidades dummy de manera que no tendrán que removerlas manualmente.

La acción Unit – Remove Unit simplemente remueve una unidad del juego. No la mata simplemente, solo la remueve para siempre, sin manera de hacerla regresar.

La acción Unit – Hide Unit esconde a una unidad. Las unidades escondidas no pueden verse, ser seleccionadas o ser objetivos de hechizos o habilidades pero ellas no pueden obedecer ninguna orden. Para heroes escondidos, su icono aún aparece en la esquina de la izquierda. Pueden darse cuenta en el hechizo “Storm Earth and Fire” (el del panda), que el hero está escondido, milagrosamente no se parte en tres pandas. ;)

Guía para hacer hechizos con Triggers (IV)

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 (Arreglos, Vectores o como quieran llamarlos)  

En el editor de variables, cada variable tiene la opción de volverse un array. Esta opción permite que las variables tengan más un valor (pero eso no convierte variables globales en locales). Cada valor recibirá un índice numérico. Así si quieres tener un cierto valor del array, necesitarás el índice. Realmente los arrays no te permitirán hacer tus hechizos MUI. La ventaja de estos en algunos casos, es en donde quieras crear 5 variables globales del mismo tipo, solo usarás una sola variable como un array. De cualquier manera, cada valor guardado en el array consumirá tanta memoria como si fuera en una variable global independiente.

Nota:

Todas las variables en un array son del mismo tipo. En un array de unidades no puedes meter enteros.

Cuando se puede, se puede

Basshunter, es un tío que tambien le da duro al dota, y de seguro que de aquí a algunos años tendrá operada la muñeca o algo así. Es que además de manosear el raton, creepeando y matando cuanto noob se encuentre tambien tiene de oficio la de DJ, así que ha mezclado ambos gustos que tiene y le ha salido esto:

Y si, ya se que es vieja y que hace tiempo ha salido, pero es que hoy recien me la he visto y a Hachi y a mi me han gustado, así que denle una chekada a este diske himno (según no se quien) de los doteros.

Guía para hacer hechizos con Triggers (III)

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

Las variables son usadas para guarder información en la memoria, si quieres usarlas durante las acciones en el mismo o aún en diferentes triggers. Hay tres categories de variables: Global, Local y Event-Response.

Global Variables son extremadamente usadas cuando hacemos un hechizo mejorado con triggers. Para declarar estas variables, necesitas ir al variable editor y agregar una variable. El variable editor puede ser encontrado en el trigger editor donde hay un icono de una X. La única ventaja de las variables globales es que pueden ser usadas por cualquiera con un pequeño conocimiento en el manejo de los triggers. De todas maneras, tienen una gran desventaja: son únicas. Esto significa que en un preciso momento, la variable puede guardar un valor único. Si el trigger es ejecutado multiples veces, solo el valor de la última ejecución sera guardado en la variable.


En el trabajo de hacer spells es un pequeño gran problema. Consideren dos unidades casteando el mismo hechizo al mismo tiempo. Si usas variables globales, solo el hechizo lanzado por la segunda unidad (porque lanzar un hechizo EXACTAMENTE en el mismo momento es un poco imposible) sucederá. El hechizo de la primera unidad se verá toda buggeada, dependiendo de que tantas variables globales uses. Como ejemplo, imaginen dos sorceresses lanzando el hechizo slow al mismo tiempo, y solo el lanzado por la segunda toma efecto. ¿No sería molesto?


Los hechizos que permiten que sean lanzados por dos o más unidades al mismo tiempo sin causar ningún bug por el problema de las variables globales son llamados Multiinstanceable (o MUI). Para obtener esos hechizos tienes que usar las variables Event-Response (las cuales tienen sus límites) o variables locales, las cuales desafortunadamente por ahora serán inaccesibles para ti.


Local Variables desafortunadamente requieren de JASS, el cual es actualmente un lenguaje de programación, basado en los triggers que están hechos de Graphic User Interface o Interfase Grafica de Usuario (GUI), haciendolos accesibles a todos. Pero a debido a esto (al GUI) hay que limitarse a algunas posibilidades del lenguaje. No recomiendo aprender JASS hasta que se tenga considerable experiencia en triggers. Realmente le encontré muy difícil cuando empece a aprenderlo, y me tomó más de un mes hacerlo.


Pero regresando a la descripción de las variables locales, ellos guardan un valor separado por cada ejecución de las acciones en la memoria. Claro que esto causa Memory Leaks o Lags (variables que son guardadas en la memoria y que no son usadas) si no las remueves apropiadamente. Esto lo discutiremos luego, cuando hayamos terminado lo básico.


Event-Response Variables son un poquito diferentes e inflexibles. A diferencia de las variables Globales o Locales, estas variables no pueden recibir valor alguno. Sus valores, dependen únicamente del evento del trigger. Más aún, ellas tienen una vida limitada en la memoria. Después de un corto periodo de tiempo, la mayoría de ellas, son eliminadas de la memoria. Solo unas pocas de ellas se quedan hasta que la última acción sea ejecutada. Para resolver este problema, tienes que usar las variables globales o locales.

Nota:
Las variables Global/Local deben tener un nombre único. En el caso de las Variables Globales, el Editor de Variables te prevendrá cuando le des el mismo nombre a una variable que otra pero en el caso de las Locales, la situación cambia. Tu único interés por ahora será con las variables Globales.


Otra clasificación de las variables que puede hacerse es por su tipo. He enumerado la mas importantes aquí:

- Integer – Guarda un valor entero (ej: 34)
- Real – Guarda un valor real (ej: 500.32)
- Point – Guarda un punto en el mapa con coordenadas específicas (ej: Target Point of Ability Being Cast)
- String – Guarda múltiples caracteres (ej: “abcd”)
- Unit – Guarda una unidad (ej: Casting Unit)
- Boolean – Puede guardar valores True o False.
- Special Effect – Guarda un efecto especial (ej: Last Created Special Effect)
- Unit Group – Guarda un grupo de unidades (ej: Units In (Playable Map Area))
- Player – Guarda un jugador. Hay un total de 16 jugadores. (ex: Owner of Unit)

Eso es lo más importante de los tipos de variables. Aún si no entiendes todos los ejemplos, luego los comprenderás todos ellos.

Guía para hacer hechizos con Triggers (II)

Seguimos con la excelente guía de Daelin:

 

IV. Triggers. ¿Que son y como funcionan?

Ahora vamos a clarificar el lado no-trigger del arte de hacer hechizos, vamos a estudiar un largo capítulo: triggers. Desde que algunos de ustedes no tienen ni idea de lo que los triggers son, les voy a hacer una pequeña (oh si, ejem, eso lo dice Daelin….) introducción.


Los Triggers consisten en tres partes: Eventos, Condiciones y Acciones. Puedes tener cuantas quieras de ellos, pero obviamente la cantidad no es lo que importa. Poniendo eventos, condiciones y acciones aquí y allá aleatoriamente no vamos a ganar nada.

 
Los Eventos son algo que acciona el trigger. Son como una chispa que explosiona en un incendio de una casa. Puedes tener mas de un solo evento pero solo uno es necesario para accionar el trigger. Después de todo, una chispa es suficiente para generar un incendio no? Los eventos son algo genéricos, a diferencia de las condiciones.

 
Las Conditions son mas precisas que los eventos, refiriéndose a cosas más específicas. Puedes tener cuantas condiciones quieras pero en este caso, todas ellas deben de cumplirse si quieres que las acciones tomen su curso. Después de todo, puedes tener todas las chispas que quieras porque el incendio no empezará si está lloviendo.

Las Actions son aún la parte más interesante. Si el trigger ha sido disparado y las condiciones son verdaderas, entonces todas las acciones tomaran su curso en el orden en el las que hayas puesto dentro del trigger, una después de la otra. Cada acción hará algo en el juego, apreciable o no apreciable.

 
Así que la definición general de los triggers podría ser así: “Los triggers son una serie de acciones que toman su curso una después de la otra cuando ciertos eventos son sucedidos en ciertas condiciones”.

Como ya debes estar enterado, el editor de triggers tiene una variedad acciones, eventos y condiciones. No te preocupes, dentro de poco aprenderás la mayoría de ellos. Pero por ahora, necesitas aprender lo más importante. Trataré de mencionar lo esencial, lo más importante. Tu tendrás que explorar el resto.

I.Introducción

II. Herramientas y concocimiento que se necesitan

III. Trabajando con el Object Editor

Guía para hacer hechizos con Triggers (I)

 

Bueh, esta guía es de Daelin, un tío rumano que anda por varios foros de warcraft y que sabe un webo de esto de la programación en el Editor de Mapas. Así que con el permiso respectivo que le he pedido, voy a traducir poco a poco su guía (Nota: cosas genéricas con World Editor o Object Editor no traduciré, ya que algunos, como yo, tienen la versión en ingles y tampoco se como se llaman en español Burla).

I. Introducción

Este tutorial es mas bien una introducción a la creación (o mejora) de hechizos con triggers (disparadores en español), antes que un manual completo. Te dará una visión general de como hacer tus propios hechizos con triggers. Podrás tener mejores resultados a traves de la práctica y la experimentación.

II. Herramientas y conocimiento necesario

Primero que nada, necesitas el editor de mapas del Warcraft 3, de preferencia el TFT (The Frozen Throne) ya que no recuerdo que el ROC (Region of Chaos) tenga el Editor de habilidades y/o Buffs o si tiene todas las funciones que necesitamos para hacer hechizos. Y sobre el conocimiento, pues se necesita haber trabajado antes con el World Editor y con el Object Editor. No necesitas saber nada sobre los triggers; te daremos una introducción sobre ellos si jamás has trabajado con ellos.

III. Trabajando con el Object Editor

Antes que entremos directamente a los triggers, les aclararé algunos puntos, extremadamente necesarios para que se encuentren aptos para cambiar sus hechizos.

Primero de  todo, tienen que saber que una unidad no puede tener dos habilidades basadas en la misma habilidad raíz. ¿Que significa esto? Si por ejemplo, una unidad tiene dos habilidades, ambas copias de la habilidad Flame Strike, la unidad no podrá lanzar el hechizo que se le ha ordenado. Podrá castear la otra habilidad basada en Flame Strike, si todavía no se ha vencido su tiempo de recarga (a partir de ahora cooldown). Cuidado! Hay suficientes habilidades para copiar.

Luego,  tienes que aprender los conceptos de las Dummy Units. Las unidades Dummy  son unidades especiales (lol, no realmente) que te ayudan a mejorar tus hechizos con mejores efectos. Por ahora, tienes que saber como crear tu propia unidad dummy en el object editor.  Despues de eso, aprenderás como usarlas bien.

Así que vas al unit editor y copias y pegar la unidad footman. La renombras como dummy, así que luego la vas a poder reconocer. Ahora cambias los siguientes campos:

Abilities – Normal – Aquí tienes que incluir solo la habilidad Locust. Esto hace que el dummy sea inseleccionable, invulnerable y se le remueve su colisión, permitiendo que cualquier unidad pase a traves de ella. Con esto te aseguras que la unidad no pueda ser detectada de ninguna manera.

Art – Model File – Cambiar a custum y escriban none.mdl. Esto hace que la unidad sea invisible (no como la habilidad invisibility, pero no se le puede ver).

Art – Shadow Image – Cambiar el valor en preset a none.

Art – Special – Borra todo lo de ahí.

Combat – Attacks enabled – Cambiar a none.

Combat – Death Type – Cambiar a Can’t Raise, Does not Decay

Movement – Speed Base – Poner el valor en 0.

Movement – Type – Cambiar a Fly.

Sound – Unit Sound Set – Poner el valor en NONE.

Stats – Can FleeFalse.

Stats – Food Cost – Cambiar a 0.

Stats – Hide Minimap DisplayTrue

Stats – Sight Radius (Day)0
Stats – Sight Radius (Night)0

Techtree – Upgrades Used – Borra todo.

Despues de que le has dado todos esos valores a tu unidad dummy puedes ponerlo en el mapa y verificar que en el juego no lo puedes ver. En el World Editor aparecerá una caja con cuadrados verdes/negros. Esto es por que el modelo que le has asignado a la unidad no existe. Esa caja desaparecerá en el juego.

Otro concepto que necesitamos estudiar son las Habilidades Dummy. Le darás esas habilidades a tu heroe y ellas practicamente no tendrán ningún efecto, hasta que las mejoremos con los triggers. Lo que tienes que poner es el coste de mana, el cooldown, la descripción, requerimientos si deseas, buffs e iconos (y obviamente un nombre). Prácticamente será y actuará como una habilidad normal de un heroe, si aprendes por ejemplo la habilidad, tiene que ir ahí, el coste de mana y su cooldown (cuando el heroe lo castee), la descripción cuando pongas el mouse en el icono y de todas maneras tiene que tener un AoE si tu hechizo mejorado se supone que tiene un, o un solo objetivo si tu hechizo mejorado se supone que le va a hacer objetivo a una sola criatura, etc. Y esto nos dará un segundo problema: ¿en que hechizo nos basaremos para hacer tu habilidad dummy?

Digamos que quieres un Efecto de Sleep en un Area (afecta a todas las unidades en el area seleccionada). Alguno de ustedes que no tiene ninguna experiencia en hacer hechizos dirá que se basarían en la habilidad Sleep para hacer su hechizo dummy. Error! La habilidad spell, como he mencionado antes, tiene que imitar el efecto del hechizo resultante sin ningún efecto (así en este caso hace objetivos a las unidades en el AoE pero no las pone a dormir cuando se castea). De todas maneras, Sleep es un hechizo que hace objetivo a una sola criatura, no es un AoE (como Silence, Blizzard, Cluster Rockets, Flame Strike y otros hechizo de Area of Effect, o Area de Efecto). Puedes basar tu hechizo dummy en cualquiera de los que acabo de mencionar.


Nota:

La duración del hechizo dummy debe ser puesta en 0.01 si inicialmente fue mayor que 0. Si para esos hechizos pones una duración de 0, ellos durarán para siempre (o hasta que sean cancelados). Y esto nos lleva a otros problemas. Si quieres hacer un hechizo dummy que haga objetivo a una sola criatura y solo le haga daño (solo es un ejemplo), si tu hechizo base es Storm Bolt, tendrás que poner 0.01 de parálisis, rompiendo hechizos de canalización (channeling). Lo mismo sucede con Silence si no le remueves el efecto de deshabilitar el casteo de hechizos. Tengan cuidado!

 

EuroBattle corazon!


Hace poco renegabamos de Blizzard y su puto nuevo parche. Y les comentaba que ni siquiera terminé el método ese que puse. Pues mejor para mí. Pues me vengo a enterar que el EuroBattle ni siquiera ha actualizado a la versión 1.20d su servidor, así que siguen con el servidor 1.20c. Esta vez si he hecho este método y he comprobado que funciona a la perfección, sirve para los que tengan su versión 1.20b para abajo o quieran regresar de la 1.20d porque están solitos en el servidor de Matrix games (jajajaja pobre Jorge). Ahi va:

  1. Se bajan el parche de la versión 1.20c si es que no lo tienen y lo instalan.
  2. Se bajan el loader de la versión 1.20c para el EuroBattle y lo instalan.
  3. Listo!

Mas claro no se puede ser. Gracias a Ezone por aclararme las dudas que tenía. Ah! como adicional si quieren el crack para el NO-CD v. 1.20c pues aquí esta. Pero desde ya les digo que solo hice los pasos que puse arriba y me funcionó normal.

Y nos kgo el parche 1.20d del Warcraft


Ayer, mientras programaba un nuevo spell para un enano cañonero de mi mapa "Defense of the Gods", me encuentro con Luis_Cure y me dice que no puede entrar al Battle.Net, yo extrañado, intento ingresar al mismo y naa e naa!

Pues parece ser que ninguno nos habíamos enterado del nuevo lanzamiento del parche de Warcraft versión 1.20d, y ¿para que carajos hicieron otro parche? Pues para esto.

En fin, buscando en la red, me encontre con nuevas soluciones a este nuevo problema para la genti pirata y la gente de Perú que siempre anda caída de dinero y solo usa versiones crackeadas (esta es una cuasi-traducción):

Blizzard acaba de lanzar el parche 1.20d para Battle.Net del Warcraft III, lo que significa que cualquiera que juegue versiones No-CD del Warcraft III 1.20c, tendrá que buscar el parche, crack o lo que sea para poder jugar en multiplayer con cualquiera en el mundo. Afortunadamente para ustedes, tengo instrucciones para cambiar a la version 1.20d:

  1. Encuentren su directorio de Warcraft III, generalmente C:/Archivos de Programa/Warcraft III
  2. Renombren el archivo executable war3.exe de la version crackeada 1.20c cracked para llamarlo war3-old.exe
  3. Renombren el antiguo archivo no-crakeado executable war3.120 para llamarlo war3.exe
  4. Bajense el parche 1.20d de Blizzard e instalenlo.
  5. Bajense el crack 1.20d nocd del blog de Elliott Back e instalenlo.

Como nota mía (osea Shingo), les aclaro que aún no lo he probado en su totalidad este procedimiento, así que no se que tanto funcione con versiones recontra crakeadas como la mía, que la he crakeado desde Region of Chaos y nunca lo he vuelto a instalar. Ayer, hice los procedimientos, pero algo me salió mal, así que tendré que instalar otra vez el Warcraft de mi versión de Wilson.Burla

Defense of the Ancients (DOTA)

Actualización: Borré todos los enlaces anteriores. A partir de ahora solo se pondrán las actualizaciones de los enlaces aquí: www.bajadotg.tk.


Defense of the Ancients (DOTA ) es un mapa creado para jugarlo en Warcraft 3 The Frozen Throne. La idea de este mapa es seleccionar un heroe (de un total de 77 en su ultima version) y con el defender la base que se le ha proporcionado y atacar la base de tus enemigos. Tambien se puede comprar items para mejorar a tu heroe y tienen unos hechizos (spells) muy interesantes. Actualmente este mapa se encuentra en su version 6.32 (que se puede descargar gratis aquí)y bueh y como a mi no me gustan las cosas como a uno le dan, entonces he creado mi propio dota, lo he llamado DOTG (Defense of The Gods, o Punto G... jeje) y ya lo tengo en su version 1.02, algunos heroes estan en español y otros en ingles, ya que al comienzo los hacía todo en ingles, pero un amigo (el que me dio la idea de hacer el DOTA) me dijo que sería mejor en nuestro idioma, ya que el DOTA solo está en idioma gringo. Si están interesados (o si quieren comentar o mandarme correos con lo mal que programo) aquí les mando los links de mis versiones:

- DOTG v 1.0

- DOTG v 1.02

(No hay 1.01, lo borre :D ) Los mapas están abiertos para que ver como lo programe (aunque no lo hice de cero, tome un template ya hecho), mas que nada para los heroes. En cuanto tenga una nueva version (que será al corregir los bugs o errores que hay en el mapa) pongo el link para que lo bajen y digan "Miiiira un DOTA peruano!!!".