DESCUBRE, APRENDE, EDITA, WWW.WORLDEDIT.ES.TL
 
 
  Home
  Entrar
  Registrarse
  Guía básica
  Guía avanzada
  => Especial de AI
  => Detonadores avanzado
  => ¿Que es una variable?
  => Crear iconos
  => Crear modelos
  => Editar Texturas
  => Importar modelos
  => Crear imagen de minimapa
  => Agregar interuptor
  => Pantalla de carga
  => Punto de reunion
  => Extras
  => Tutorial de camaras
  => Protección al maximo
  => Cinematografia
  Crea tu propio DOTA
  Herramientas
  Mapas
  Foro
  Links De Mucha Ayuda
  Aderidos...
Detonadores avanzado

 

Codigo: Selecciona todo
    ((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í.

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.

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.

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.

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

Codigo: Selecciona todo
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í:
Codigo: Selecciona todo
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í:

Codigo: Selecciona todo
    (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í:

Codigo: Selecciona todo
    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:

Codigo: Selecciona todo
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:

Codigo: Selecciona todo
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á:
Codigo: Selecciona todo
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.
¨
XIII. Hechizos de Efectos en Área

Otra clase de hechizos mejorados, son los hechizos de área (AoE de aquí en adelante) que afectan a todas las unidades en un área. Ellos pueden ser enemigos, amigos, terrestres, aéreos, etc. Todo lo que tienes que hacer es el efecto adecuado. Cuando entremos de lleno a los triggers, entenderás el mecanismo completo pero hasta ese momento es tiempo de realizar el hechizo paso a paso. Los hechizos AoE pueden ser clasificados en dos tipos: de objetivos y sin objetivos.

Los hechizos AoE de objetivos son esos hechizos para lo cual el jugador especifica el área en el cual el hechizo va a tener efecto. Esos hechizos incluyen a: Blizzard, Flame Strike, Cluster Rockets, Devour Magic, Silence, Inferno, Dispel Magic, Disenchant, Earthquake, Death and Decay, Volcano y Rain of Fire. El objetivo específico para estos hechizos se determina cuando un círculo (diferente para cada raza) aparece. El círculo cubre el área en el que el hechizo hace efecto. Cuando hagamos el hechizo, tendrás que ser muy cuidadoso para cubrir todo el cículo no más ni menos.

Por otro lado los hechizos AoE sin objetivos no tienen un area seleccionable. El efecto de estos hechizos toma lugar alrededor del lanzador del hechizo. Estos hechizos incluyen a: Thunder Clap, Resurrection, War Stomp, Big Bad Voodoo, Starfall, Tranquility, Fan of Knives, Roar, Taunt, Mana Flare y Howl of Terror. Estos hechizos también pueden ser lanzados accidentalmente, porque solo con clickear el ícono o el botón del teclado es suficiente para activarlos. Pero esto no es problema que podramos solucionar. Solo el jugador podrá hacerlo.

Nota:
Hechizos AoE sin objetivos pueden confundirse con las habilidades de casteo hacia el caster (de aquí en adelante SelfCast, como por ejemplo Berserk, Windwalk y Mirror Image) porque son activados de la misma manera. Discutiremos las diferencias entre estos hechizos cuando llegemos a esa clase de habilidades.

Paso 1 – La idea del hechizo

Otra vez, vamos a hacer un hechizo sin canalización, preferentemente un hechizo sin un buff que use triggers. Trataremos de intentar de entender esos otros luego. Por ahora, solo vamos a coger un hechizo AoE de objetivos. Les enseñaré como hacer un hechizo sin objetivo solo cambiando una cosita en el código y cambiando la unidad dummy.

El hechizo que vamos a hacer ahora es un poquito clasico: Mass Sleep (Nota de Shingo: en español sería Dormir en masa, pero no lo traduzco porque supongo que ya varios de ustedes ya habrán tenido un pequeño roce con la fantasía ya habrán oído de magos que hagan dormir a gente de a montones). Su efecto es un poco obvio: todas las unidades en el area de efecto son puestas a dormir, y no pueden hacer cosa alguna hasta que las ataquen o el buff se vaya. Las características del hechizo serían así:

* Tres Niveles
* Coste de Maná – 95/95/95
* Tiempo de Recarga – 14/14/14
* Área de Efecto – 300/400/600 (nótese que hay un bonus de Área de Efecto entre los niveles que no son constantes)
* Duración – 15/25/35 (para unidades normales)
- 3/5/6 (para Héroes)

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

Esta vez va a ser fácil trabajar con el editor de objetos, porque ya lo haz hecho antes. Si no lo haz hecho, regresa al capítulo anterior y aprender como. ¡No te saltes los capítulos!

La unidad dummy es simple. Puedes hacerla otra vez, o usar la unidad dummy que haz hecho para el hechizo anterior. Yo usualmente hago una sola unidad dummy, aunque tenga más de un solo hechizo. Despues de todo, tu agregas habilidades a traves de triggers a las unidades dummy, así que no hay diferencia si usas la unidad dummy con un hechizo u otro.

En el caso de la habilidad dummy, vas a necesitar un hechizo AoE de objetivos, si planeas hacer el Mass Sleep de objetivos, o un hechizo AoE sin objetivos, si planeas hacer el Mass Sleep que haga objetivos alrededor del héroe (sip, como la fucking sirena del DotA). Depende de tí.

Si la base de tu hechizo dummy son hechizos de canalización (como lo son Starfall y Blizzard), asegúrate de establecer la duración a 0.01. Nunca de los nuca, hagas que el hechizo no tenga efecto. Remueve todos los efectos de armadura/vida/mana/daño. Asegúrate de que el hechizo no haga algo. Luego establece el coste de mana, duración y en el caso del hechizo AoE de objetivos, las Áreas de Efecto correctas. Dale al hechizo una buena descripción, aditamientos, tooltips, nombre, teclas de acceso directo e íconos. ¡No te olvides de la posición del botón! Finalmente, fijate si la realmente funciona como una habilidad dummy.

Ahora, vamos a hacer la habilidad para la unidad dummy. En ese caso, vamos a necesitar solo una habilidad: Sleep. Dale la duración correcta, buff (descripción del buff, y recuerda traducirlo y cambiarlo como desees), reduce el costo de mana a 0 y no te olvides de hacer tres niveles a la habilidad de unidad (recuerda que tiene que ser de unidad y no de héroe). No necesitas cambiar a los objetivos, ya que en este caso, queremos que el Mass Sleep afecte a todas las unidades como normalmente lo haría el hechizo individualmente.

Paso 3 – Mejorando la habilidad con Triggers

Es tiempo de comenzar a codificar. Ya que has hecho un hechizo antes, no será muy dificultoso. Primero daremos los eventos y condiciones correctas:
Codigo: Selecciona todo
Trigger:
Events
        Unit - A unit Starts the effect of an ability
Conditions
        (Ability being cast) Equal to Mass Sleep


Ahora, vamos a analizar las acciones primero. El trigger se supone que va a tomar cualquier unidad en el area o alrededor del héroe siempre y cuando sea un objetivo válido, creando una unidad dummy sobre el objetivo y casteandole Sleep. Objetivos válidos pueden ser enemigos, no-mecánicos, vivos y unidades no-estructuras. Tenemos un total de cuatro condiciones para los objetivos válidos.

Aún así, todavía no hemos terminado. Tenemos un problema. El radio es diferente en cada nivel. Si fuera constante, sería perfecto ¿eh? Pero quiero las cosas más complicadas, y eso es hacer el radio del hechizo diferente en cada nivel. Y para hacer las cosas peor, el incremento del radio no es constante. Aún en ese caso, puedes tener una fórmula, o puedes hacer un método secundario con múltiples Ifs, que condicione las acciones. Puedes usar el que quiereas, pero te advierto que leas ambas opciones, porque habrá casos en donde necesites usar el segundo método, cuando por ejemplo el hechizo tenda diferentes efectos cada nivel (como, nivel 1 poner a dormir, nivel 2 amarrar al piso y nivel 3 paralizar).

a) Método de la Fórmula

Vamos a darle una mirada a los radios otra vez. 300/400/600. El bonus es 100 para el nivel 2, y el doble para el nivel 3. Hmm… el doble. Esto significa que puedes multiplicar 00 por el número del nivel menos, y luego sumarle 300. Así que la fórmula podría verse así:

300+(100*(Nivel of Mass Sleep-1)


¿No es nada difícil no? En el juego se vería algo así:

300+(100*(Level of Mass Sleep for (Triggering Unit)-1))


Y eso es todo para el método 1. Pero ¿que pasa si el radio sería 300/400/550? Trata de encontrar la fórmula, haz un poco de matemáticas, y si ya no puedes encontrarla, entonces tienes que ir al método 2.

b) El método ramificado

La idea es muy simple. Tienes diferentes series de acciones en cada nivel. Se puede pensar que no se ve realmente eficiente, pero es una alternativa, especialmente cuando no puedes encontrar la fórmula. Esto puede evitarse si podrías usar una variable grupal, pero prefiero no involucrarme con variables, por ahora, porque romperías tu MUI (Ya hemos mencionado que es esto).

Así que la idea principal es tener una serie de condiciones, para cada nivel, y solo cambiar el radio, por nivel. Así que el trigger se vería mas o menos así:

If – Level of Mass Sleep for (Triggering Unit) is equal to 1
Then – Serie de acciones que va a realizar tu trigger en el nivel 1
Else – Do Nothing

If – Level of Mass Sleep for (Triggering Unit) is equal to 2
Then – Serie de acciones que va a realizar tu trigger en el nivel 2
Else – Do nothing

If – Level of Mass Sleep for (Triggering Unit) is equal to 3
Then – Serie de acciones que va a realizar tu trigger en el nivel 3
Else – Do nothing


Esto funcionaría para cualquier otro hechizo, en el caso de que no se pueda usar la fórmula para todos los niveles, y tengas que separar las acciones. Aún así este codigo puede causar bugs, si dentro de los THEN hay un wait. Vamos a ver un ejemplo abstracto:

Haz hecho una habilidad Cluster Rockets, y quieres meterle triggers a todo el hechizo. Las series de acciones incluirían un considerable wait, porque los Cluster Rockets esperan hasta que los misiles impacten. Luego del wait, la última parte de las acciones es ejecutada. Luego el trigger verificará el nivel 2, y luego el nivel 3, si el héroe tiene nivel 1. Pero considera esto: si el caster dispara los cohetes, y luego incrementa el nivel de la habilidad, ya que tiene puntos en habilidad para gastar. En ese caso, el segundo IF es tomado en consideración, porque en el momento en que el trigger suceda aquí, el caster tendrá ahora nivel 2 para esta habilidad.

Dirás que entonces es solo cambiar el orden de los IFs. Podríamos comenzar con el más alto nivel y terminar con el menor. En este caso, el trigger no podrá ser abusado, por el incremento de nivel de la habilidad mientras es ejecutado. ¡Cierto! En la mayoría de los casos debería ser la solución. Pero un problema puede ser causado por el item Tome of Retraining. En el caso de que la espera del wait tenga un periodo superior a los 2 segundos (digamos un misil que viaja mucho), el caster tiene suficiente tiempo para usar el tomo y reaprender la habilidad. En este caso, si antes de entrenar el heroe tiene nivel 3 digamos, y ahora tiene solo nivel 1 para la habilidad, ambas series para el nivel 1 y el nivel 3 ocurrirán. ¡Disculpen si esto suena confuso!

Así que necesitamos encontrar una solución para arreglar eso. Por eso, necesitas entender como una serie de acciones If/Then/Else realmente ocurren. Como te he dicho antes, si las condiciones IFs son verdaderas, las acciones THEN son ejecutadas. Pero si al menos una condición no es satisfecha, la acción ELSE tomará lugar. Pero IF/Then/Else es considerada una acción e insertar dentro del ELSE otro IF/Then/Else es posible. Revisa este código:

Codigo: Selecciona todo
If – Level of Mass Sleep for (Triggering Unit) is equal to 1
Then – Serie de acciones que va a realizar tu trigger en el nivel 1
Else – If – Level of Mass Sleep for (Triggering Unit) is equal to 2
          Then – Serie de acciones que va a realizar tu trigger en el nivel 2
          Else – Serie de acciones que va a realizar tu trigger en el nivel 3


Y ahora la explicación. Cuando el hechizo es lanzado, está en su nivel 1. La serie de acciones ejecutadas están dentro del THEN. Ahora, aún si el nivel de la habilidad es establecida por el jugador a 2, las series de acciones parar el nivel 2 no ocurriran de ninguna manera porque las acciones ELSE no sucederán, ya que las acciones THEN ya han sucedido. Si planeas tener más niveles, tendrás que insertar en las condiciones del ELSE del segundo If/Then/Else otro If/Then/Else. Esto puede sonar extremadamente complicado, así que si no lo entiendes, tienes que aprender el código y no entenderlo. Pero debería ser mejor entenderlo. ¡Hacer hechizos (actualmente programar) es algo lógico!

Y ahora regresemos a nuestro hechizo. Puedes tratar de hacer una serie de acciones con las ramificaciones IF/Then/Else, pero usaré la fórmula. ¡Esto debe ser un reto para todos ustedes adaptarlo al método ramificado! Puedes incluso tratar de hacer ambos métodos ya que les he dado las instruciones necesarias.

De cualquier manera, aquí está el código completo del hechizo:

Codigo: Selecciona todo
Trigger:
Mass Sleep

Events
   Unit - A unit Starts the effect of an ability
   
Conditions
   (Ability being cast) Equal to Mass Sleep
   
Actions
   Unit Group - Pick every unit in (Units within (300.00 + (100.00 x (Real((Level of Mass Sleep for (Triggering unit)))))) of (Target point of ability being cast) matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Mechanical) Equal to False) and ((((Matching unit and do (Actions)
   Loop - Actions
      Unit - Create 1 Dummy for (Owner of (Triggering unit)) at (Position of (Picked unit)) facing 0.00 degrees
      Unit - Add Sleep (Mass Sleep) to (Last created unit)
      Unit - Set Level of Sleep (Mass Sleep) for (Last created unit) to (Level of Mass Sleep for (Triggering unit))
      Unit - Order (Last created unit) to Undead Dreadlord - Sleep (Picked unit)
      Unit - Add a 1.50 second Generic expiration timer to (Last created unit)


Tengo una nota más. Cuando agarres unidades, para aquellos que quieran hacer objetivos a las unidades alrededor del caster, cambien el (Target Point of Ability Being Cast) a (Position of (Triggering Unit)). Es un poco lógico, ¿no? Agarras unidades alrededor del caster no alrededor del punto objetivo.

Ejercicio:
Para aquellos que hicieron el hechizo sin objetivos, háganlo con objetivos y para aquellos que lo hicieron con objetivos, háganlo sin objetivos.

 

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

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 Flee – False.

Stats – Food Cost – Cambiar a 0.

Stats – Hide Minimap Display – True

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!

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.

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.

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.

Entrar  
 
Nombre de usuario:
Contraseña:
 
Administrador  
  Hola soy Cascote el creador de esta pagina, espero que les guste y les sirva de algo, mi mail es el_locog001@hotmail.com cualquier cosa consulten ahi.  
Hoy habia 2 visitantes (4 clics a subpáginas) ¡Aqui en esta página!
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis