Curso de iniciación en detonadores con el Profesor Marcos_M

Publicado por Marcos_M, Agosto 21, 2018, 07:45:11 AM

Marcos_M

Bienvenidos Novatos

En este curso aprenderemos a crear detonadores, antes de empezar me gustaría que se lean el siguiente glosario: http://viviraprendiendo.co/index.php?topic=98.0
IMPORTANTE! Debes tener conocimientos básicos de inglés para poder entender este tutorial en su totalidad

Les otorgará información de las palabras que usaremos.

Indice:
1. ¿Qué aprenderemos aquí?
2. ¿Para qué sirve un detonador?
3. ¿Cómo crear un detonador?
4. Bases de un detonador
5. Detonadores básicos


¿Qué aprenderemos aquí?
Aquí aprenderemos lo básico de los detonadores, como por ejemplo, para qué sirven y cómo crear un detonador simple y bien hecho, ya que es para novatos y conociendo los novatos por haber sido uno, odian leer mucho, así que trataré de ser minimalista en todas las definiciones.


¿Para qué sirve un detonador?
Es simple, un detonador nos sirve para llevar el WE al límite y hacer todo lo que el editor de objetos no nos lo permite. Desde reiniciar el CD de una habilidad para una unidad hasta crear un sistema para aumentar el daño de nuestra unidad hasta +9999


¿Cómo crear un detonador?
Es bastante simple, con un par de imágenes lo comprenderán





Una vez creado su detonador ustedes observarán algo así

[gui]Detonador sin nombre 001
   Acontecimientos
   Condiciones
   Acciones
[/gui]


Bases de un detonador
Un detonador normal consiste en 3 partes:
Acontecimientos(nos referiremos a ellos como eventos) que establecen lo que "debe suceder" para que el detonador inicie
Condiciones que establecen "como debe suceder" para que el detonador inicie
Acciones que establecen "que sucederá" cuando el evento y la condición se cumplan.

"Profundizar conocimientos"

Acontecimientos
Un detonador puede tener uno o más de estos, algunos de los más usados son:
Jugador - Chat message: Usado para sistemas de comandos por mensajes como el "All Pick" de DotA, también puede ser usado para determinar el número de muertes para conseguir la victorias en mapas "Hero Arena"
Jugador - Cinematic Skipped: Este evento se usa para cuando un jugador presiona la tecla "Esc"
Tiempo - Time Elapsed: Se detona al pasar X segundos, y solo correrá UNA vez
Tiempo - Periodic Event: Se detona cada X segundos, es un loop(bucle), o sea que correrá una y otra vez sin parar(se puede ordenar que se detenga con una acción, pero lo veremos más adelante)
Unidad - Generic Unit Event: El evento más usado(por lo menos para mí), ya que engloba casi todos los eventos de unidad del juego (excepto Unidad - Recibe daño) y a partir de este evento se crean los spells, unir items, y muchas cosas más.
Unidad - Unit Enters Rect: Significa que cuando una unidad entre en X región, se disparará el evento, usado para crear regiones asesinas, regiones a las cuales no se puede acceder, incluso para regiones capturables. Se debe recalcar que debemos crear primero una región para utilizar este evento
Unidad - Unit Leaves Rect: Significa que cuando una unidad salga de X región, se disparará el evento, usado para evitar que una unidad escape. Se debe recalcar que debemos crear primero una región para utilizar este evento

Condiciones
Se puede tener ninguna, una, o muchas. La lista de condiciones es corta, sin embargo cada condición tiene muchas "Sub-Condiciones"
Pero las Condiciones más usadas son:
Boolean Comparison: Los valores que toma, devolverán verdadero o falso. Por ejemplo: Si una unidad es enemiga de otra (o es enemiga[verdadero] o no lo es[falso])
Ability Comparison: Para comparar habilidades, se utiliza casi puramente en spells. Por ejemplo: (Ability being cast) Igual a Rayo de tormenta
Hero Skill Comparison: Sirve para comparar la habilidad que se aprendió y solo para eso.
Integer Comparison: Para comparar números enteros. Y, a diferencia de las anteriores que solo permiten "Igual a" y "No igual a", permite también "Mayor que o igual a", "Mayor que", "Menor que o igual a" y "Menor que"
Real Comparison: Sirve para comparar números reales.

Acciones
Puedes tener cuantas quieras hasta donde yo sé. La lista es larga, ya que la cantidad de cosas que podemos hacer en WorldEdit es casi ilimitada(incluso podemos crashear el juego xD)
Enumerarlas aquí sería imposible pero podemos decir que las acciones más "especiales" son:
Custom Script: Esta acción nos permite colocar una línea de JASS en nuestro detonador, permitiendo acceder a otras acciones imposibles de usar en GUI (más tarde o en otro curso profundizaremos esto)
Set Variable: Nos permite darle un valor a las variables. Leer el link adjunto al texto para más información de variables
If / Then / Else : Nos permite insertar una condición en nuestras acciones y si es verdadera dicha condición, se realizan las acciones en "Then" (Entonces), si es falta, se realizan las acciones "Else"(Otros). Puedes tener "Then" y/o "Else" sin acciones y no causará ningún error. Se recomienda el uso del If/Then/Else que permite múltiples acciones porque es mejor para leer y modificar
For Each Integer: Cualquiera de sus 3 versiones, A, B y Variable son loops, que realizarán las acciones colocadas allí desde el número inicial al final. Para referirnos a la instancia del loop usamos "Integer A" (Aparece como "For Loop Integer A"), "Integer B" (Aparece como "For Loop Integer B") o la variable que seleccionamos.

Todas estas acciones son útiles pero en definitiva, no hacen nada por sí sola, se las utiliza en conjunto con otras acciones para hacer lo que queramos hacer
[/code]


Detonadores básicos

Vamos a hacer cosas muy básicas aquí, sin uso de variables.

Detonador N° 1
Nombre: Soy un detonador
Evento: Tiempo - Time Elapsed
Que hará: Mostraremos un cartel durante 8 segundos que nos diga una verdad.

[gui]Soy un detonador
   Acontecimientos
       Tiempo - Elapsed game time is 5.00 seconds
   Condiciones
   Acciones
       Partida - Display to (All players) for 8.00 seconds the text: Este cartel es gene...[/gui]

El texto entero dice:

Este cartel es generado por un detonador, y esto es solo un ejemplo de lo que podemos hacer

Podemos usar esta acción(o la auto-timed) cuando tenemos detonadores con errores y muchos If/Then/Else para tratar de buscar a dónde se nos estanca.

Este detonador no utiliza condiciones y su única acción es:

Partida - Text message (Explicitly Timed)


Detonador N° 2
Nombre: Spawns de creeps
Evento: Tiempo - Time Periodic
Que hará: Crearemos 5 unidades y les ordenaremos atacar a otra región.

[gui]Spawns de creeps
   Acontecimientos
       Tiempo - Every 30.00 seconds of game time
   Condiciones
   Acciones
       Unidad - Create 5 Soldado raso for Neutral hostil at (Center of RegionCrearCreeps <gen>) facing Vista edificio predeterminada (270.0) degrees
       Grupo de unidad - Pick every unit in (Last created unit group) and do (Actions)
           Bucle: Acciones
               Unidad - Order (Picked unit) to Atacar-mover a (Center of RegionAtacar <gen>)[/gui]

Este deto sirve para oleadas, es bastante simple PERO tiene fugas de memoria (los llamaremos leaks)

Para saber qué es un leak y como evitarlos dirigete a:
http://www.worldofeditors.net/t49-fugas-de-memoria-gui

En cuanto a explicación del detonador, Creamos 5 soldados rasos para el neutral hostil en el centro de una región y luego tomamos a cada una de esas unidades (Last created unit group nos devuelve el último grupo de unidades creadas).

Como verán, dentro del bucle, usamos "Picked Unit", esta es la unidad que está siendo tomada por el bucle actualmente. Le ordenamos que Ataque hacia el centro de la región.

Grupo de unidad - Pick every unit in unit group es una acción muy útil, esta realiza las acciones que colocamos en el bucle para cada unidad en el grupo, un ejemplo de su uso sería para dañar a las unidades enemigas en círculo alrededor del caster


Detonador N° 3
Nombre: Agregar Oro
Evento: Jugador - Chat Message
Que hará: Colocamos un texto y nos agrega oro.

[gui]Agregar Oro
   Acontecimientos
       Jugador - Jugador 1 (rojo) types a chat message containing -add as Una subcadena
   Condiciones
   Acciones
       Jugador - Add (Integer((Substring((Entered chat string), 5, (Length of (Entered chat string)))))) to (Triggering player) Oro actual
[/gui]

Esto solo sirve para el jugador 1, pero puedes agregar los eventos para los otros 11 jugadores facilmente. Lo importante es revisar como acomodamos las cosas:

Si miran el evento, dice al final del mismo "as Una subcadena", esto significa que reaccionará cuando -add sea parte del texto escrito.

Luego, si miran en la acción, que es Jugador - Add property.

Dice (Integer((Substring((Entered chat string), 5, (Length of (Entered chat string))))))
Como ven, es largo y feo de leer. Sin embargo, lo podemos hacer más lindo de leer con un par de variables. Si quieres saber de variables dirigete a:
http://www.worldofeditors.net/t46-guia-sobre-variables

Volviendo a la acción. Para lograr ese resultado, debemos realizar los siguientes pasos:



Espero que hayan entendido.


Con eso terminamos este tutorial básico, y espero que se animen a tratar con el editor de detonadores porque es enorme y es ahí, donde se hace magia con WorldEdit
[cerrar]