Foro especializado en Warcraft III y su editor
 
BuscarEntrar al ChatboxPortal del foroÍndiceSpellsRegistrarseConectarse
Eventos Actuales
No hay eventos actualmente
¡ Bienvenido Invitado !

Editar Perfil

Tus temas
Tus Mensajes ()

Enlaces rápidos








Comparte
 

 [Completo] Todo lo que yo sé sobre Variables Locales •

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3586
Reputación Reputación : 697
Monedas de oro : 11052
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Lun Ago 12, 2013 10:33 pm

Buenos días queridos users .3

Hoy les hablaré de:
Las variables Locales

Índice:
1. ¿Qué es una Variable?
2. ¿Qué es una Variable Local?
3. ¿Qué puedo hacer con una Variable Local?
4. ¿Cómo usar una Variable Local?
5. Detalles a tener en cuenta 
6. Spellear a lo loco. Local style Cool 
7. Información sobre Waits
8. Mapa-Tutorial

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

¿Qué es una Variable?
Wikipedia: En programación, una variable está formada por un espacio en el sistema de almacenaje (memoria principal de un ordenador) y un nombre simbólico (un identificador) que está asociado a dicho espacio. Ese espacio contiene una cantidad o información conocida o desconocida, es decir un valor. El nombre de la variable es la forma usual de referirse al valor almacenado: esta separación entre nombre y contenido permite que el nombre sea usado independientemente de la información exacta que representa. El identificador, en el codigo fuente de la computadora puede estar ligado a un valor durante el tiempo de ejecución y el valor de la variable puede por lo tanto cambiar durante el curso de la ejecución del programa.

Forma en la que yo entiendo: Una variable, es un espacio de memoria reservado para X información o valor(real, número entero, cadena, unidad, objeto, etc) y nos sirven para guardar esa información, que luego podemos utilizarla refiriendonos a dicha variable

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

¿Qué es una Variable Local?
Una variable local es un tipo de variable que solo puede ser usada en la misma función donde se declara.

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

¿Qué puedo hacer con una Variable Local?
Con una... casi nada xD

Pero el uso de variables locales nos permite poder usar los famosos "Wait"s sin preocuparnos por bugs. Así hacer spells simples(Por ejemplo, agregar una habilidad por X cantidad de tiempo a X unidad) se simplifican considerablemente.
Sin embargo, el uso de variables locales se reduce casi a solo spells(en GUI) ya que para hacer sistemas necesitaremos una tabla hash si usamos variables locales(Yo lo hago así en algunos inits) pero para algunos es más simple usar las variables normales de editor de detonadores, ustedes deciden xD

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

¿Cómo usar una variable local?
Bueno, cómo sabrás, las variables locales son diferentes a las globales por lo tanto, la forma de crearlas también es diferente, como es un tutorial para novatos, usaremos variables globales(excepto en el final) para declararlas, de esta forma, su amado GUI no se verá diferente casi en lo absoluto. Ahora, lo importante, crearlas se hace de la siguiente forma

Custom script: local [nombredevariable]
Ejemplo:
Custom script: local unit udg_Caster

En el ejemplo, declaramos una variable de unidad con el nombre de udg_Caster. 
¿Por qué ponemos el "udg_" al inicio?
Porque de esta forma, podemos usar nuestra variable global "Caster"(Deben crear una variable de tipo unidad con el nombre de "Caster" para que esto fucnione) como una local

Ahora, la lista de todos los tipos de variable :risa: 
Spoiler:
 

Sin embargo, la mayoría solo usamos:
unit = unidad
location = punto
group = grupo
real = real
integer = número entero
string = cadena
player = jugador
boolean = booleana

NOTA: Las variables locales pueden ser seteadas(otorgarles un valor) al momento de ser declaradas, pero debes conocer JASS simple para eso

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Detalles a tener en cuenta
A.Como es un tutorial para GUI, no sabrás bien qué define una función y otra, bueno, en GUI un detonador por defecto tiene 3 funciones. Init(Aquí se crea el deto, se le agrega los eventos, la condición y la acción), Condiciones y Acciones. Pero nosotros solo podemos setear las variables locales en acciones.
Sin embargo, se pueden crear otras funciones en GUI, estas son "Pick Every Destructible..", "Pick Every Unit...", "Pick Every Player...", La parte de condiciones en los If/Then/Else y Wait For Condition. En ninguno de estos podemos usar variables locales que no sean declaradas en esta.

B.Otro detalle a tener en cuenta es que estas variables deben ser nulleadas al final del detonador(o cuando sea que dejes de usarlas), esto se hace de la siguiente forma:


Custom script: set udg_NombreDeVariable = null

Las variables de tipo real e integer no se nullean

C.Y el último detalle, muy importante y es algo que limita nuestras variables locales. El "Wait" no es exacto. Al colocar un valor, el tiempo de espera será mayor del deseado. Así que evitan usar waits si trabajan con números tan pequeños, o coloquen un número MENOR al que ustedes desean(0.15 es el tiempo menos aproximado que tendrán con un wait)


[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Spellear a lo loco. Local style Cool
Ahora es el momento de mostrar que podemos hacer con variables locales, esto son solo unos cuantos ejemplos

Haremos 6 skills activas, 3 pasivos y 3 ultimates Cool 

Skill N° 1
Spoiler:
 

[gui]Invocacion del Trueno
Acontecimientos
Unidad - A unit Inicia el efecto de una habilidad
Condiciones
(Ability being cast) Igual a (==) Invocación de Trueno
Acciones
Custom script: local unit udg_Caster
Custom script: local group udg_Grupo = CreateGroup()
Custom script: local player udg_Jugador
Custom script: local integer bj_forLoopAIndex
Set Jugador = (Triggering player)
Set Caster = (Triggering unit)
Set PuntoA = (Position of Caster)
Do Multiple ActionsFor each (Integer A) from 1 to 12, do (Actions)
Bucle: Acciones
Set RealA = (200.00 + (100.00 x (Real((Level of (Ability being cast) for Caster)))))
Set PuntoB = (PuntoA offset by (Random real number between 0.00 and RealA) towards (Random real number between 0.00 and 360.00) degrees)
Unidad - Create 1 TruenoInvocado for Jugador at PuntoB facing Vista edificio predeterminada (270.0) degrees
Grupo de unidad - Add (Last created unit) to Grupo
Custom script: call RemoveLocation(udg_PuntoB)
Custom script: call RemoveLocation(udg_PuntoA)
Wait 2.50 seconds
Set JugadorB = Jugador
Set Target = Caster
Grupo de unidad - Pick every unit in Grupo and do (Actions)
Bucle: Acciones
Set PuntoA = (Position of (Picked unit))
Unidad - Create 1 Dummy for JugadorB at PuntoA facing Vista edificio predeterminada (270.0) degrees
Unidad - Add a 1.00 second Genérico expiration timer to (Last created unit)
Unidad - Add Trueno to (Last created unit)
Unidad - Set level of Trueno for (Last created unit) to (Level of Invocación de Trueno for Target)
Unidad - Order (Last created unit) to Humano Rey de la Montaña: Trueno
Unidad - Kill (Picked unit)
Custom script: call RemoveLocation(udg_PuntoA)
Wait 0.75 seconds
Grupo de unidad - Pick every unit in Grupo and do (Actions)
Bucle: Acciones
Unidad - Remove (Picked unit) from the game
Custom script: call DestroyGroup(udg_Grupo)
Set Caster = Ninguna unidad
Custom script: set udg_Grupo = null
Custom script: set udg_Jugador = null
[/gui]

26 Custom script:   local unit udg_Caster
Declaramos una unidad(Caster)
26 Custom script:   local group udg_Grupo = CreateGroup()
Declaramos y seteamos el grupo.
"CreateGroup()" es una función que lo que hace, es crear un grupo

26 Custom script:   local player udg_Jugador
Declaramos un jugador
variable Set Jugador = (Triggering player)
Seteamos Jugador a Triggering Player(el juego dueño de Triggering Unit[Caster])
variable Set Caster = (Triggering unit)
Seteamos Caster a Triggering Unit
variable Set PuntoA = (Position of Caster)
Seteamos un punto como la posición del Caster, servirá como referencia para crear los rayos
22  Do Multiple ActionsFor each (Integer A) from 1 to 12, do (Actions)
  acciones Bucle: Acciones
Un LOOP, quiere decir que hará las siguientes acciones del 1 al 12 (12 veces) y la instancia del loop se define con "Integer A"
      variable Set RealA = (200.00 + (100.00 x (Real((Level of (Ability being cast) for Caster)))))
Este real es para que esté más ordenado, define el área máxima de alejamiento de los rayos(AoE)
      variable Set PuntoB = (PuntoA offset by (Random real number between 0.00 and RealA) towards (Random real number between 0.00 and 360.00) degrees)
Y el PuntoB es para definir donde colocar nuestro rayo, usamos "Point With Polar Offset", el PuntoA como referencia es para evitar leaks, la línea dice que PuntoB está alejado de PuntoA en Número Aleatorio entre 0.00 y RealA en un ángulo de 0 a 360º
      33 Unidad - Create 1 TruenoInvocado for Jugador at PuntoB facing Vista edificio predeterminada (270.0) degrees
Ahora creamos nuestro Rayo para el Jugador en el PuntoB
      24 Grupo de unidad - Add (Last created unit) to Grupo
Lo agregamos al grupo para tenerlo referenciado
      26 Custom script:   call RemoveLocation(udg_PuntoB)
Antileaks e.e
:26:Custom script:   call RemoveLocation(udg_PuntoA)
Más antileak
38 Wait 2.50 seconds
Esperamos 2.5 segundos...
variable Set JugadorB = Jugador
Esto no es para nada elegante, pero debido a que usaré un "Pick Every unit.." debo usar una variable global para referirme a mi variable local
24 Grupo de unidad - Pick every unit in Grupo and do (Actions)
  acciones Bucle: Acciones
Tomamos cada unidad en el grupo
      variable Set PuntoA = (Position of (Picked unit))
Seteamos una variable para establecer el punto de nuestro rayo
      33 Unidad - Create 1 DUMMYCaster for JugadorB at PuntoA facing Vista edificio predeterminada (270.0) degrees
Creamos el dummy caster para JugadorB(que es Jugador, pero global)
      33 Unidad - Add a 1.00 second Genérico expiration timer to (Last created unit)
Un tiempo para que se muera
      33 Unidad - Add Trueno  to (Last created unit)
Le agregamos la habi dummy
      33 Unidad - Set level of Trueno  for (Last created unit) to (Level of Invocación de Trueno  for Caster)
Le seteamos al nivel correcto
      33 Unidad - Order (Last created unit) to Humano Rey de la Montaña: Trueno
Le ordenamos tirar Trueno
      33 Unidad - Kill (Picked unit)
Matamos a nuestro rayo (Para crear un efecto)
      26 Custom script:   call RemoveLocation(udg_PuntoA)
Antileak e.e
:38:Wait 0.75 seconds
Esperamos un poco más de 0.75 segundos
24 Grupo de unidad - Pick every unit in Grupo and do (Actions)
    :acciones:Bucle: Acciones
       33  Unidad - Remove (Picked unit) from the game

Removemos los rayos del juego
26 Custom script:   call DestroyGroup(udg_Grupo)
33 Set Caster = Ninguna unidad
26 Custom script:   set udg_Grupo = null
26 Custom script:   set udg_Jugador = null

Antileaks, nullear las variables locales es importante

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 2
Spoiler:
 

[gui]Invocacion de Fuego
Acontecimientos
Unidad - A unit Inicia el efecto de una habilidad
Condiciones
(Ability being cast) Igual a (==) Invocación de Fuego
Acciones
Custom script: local unit udg_Caster
Custom script: local unit udg_Target
Custom script: local real udg_RealA
Custom script: local effect udg_Efecto
Set Caster = (Triggering unit)
Set Target = (Target unit of ability being cast)
Set RealA = (85.00 x (Real((Level of Invocación de Fuego for Caster))))
Efecto especial - Create a special effect attached to the chest of Target using Abilities\Weapons\LavaSpawnMissile\LavaSpawnBirthMissile.mdl
Set Efecto = (Last created special effect)
Wait 4.00 seconds
Efecto especial - Destroy Efecto
Unidad - Cause Caster to damage Target, dealing RealA damage of attack type Conjuros and damage type Fuego
Set PuntoA = (Position of Target)
Do Multiple ActionsFor each (Integer A) from 1 to 12, do (Actions)
Bucle: Acciones
Set PuntoB = (PuntoA offset by 25.00 towards (30.00 x (Real((Integer A)))) degrees)
Unidad - Create 1 Dummy for (Owner of Caster) at PuntoB facing (30.00 x (Real((Integer A)))) degrees
Unidad - Add Aliento de fuego to (Last created unit)
Unidad - Set level of Aliento de fuego for (Last created unit) to (Level of Invocación de Fuego for Caster)
Unidad - Add a 2.00 second Genérico expiration timer to (Last created unit)
Custom script: call RemoveLocation(udg_PuntoB)
Set PuntoB = (PuntoA offset by 40.00 towards (30.00 x (Real((Integer A)))) degrees)
Unidad - Order (Last created unit) to Alquimista pandaren neutral- Aliento de fuego PuntoB
Custom script: call RemoveLocation(udg_PuntoB)
Custom script: call RemoveLocation(udg_PuntoA)
Set Caster = Ninguna unidad
Set Target = Ninguna unidad
Custom script: set udg_Efecto = null
[/gui]

26 Custom script:   local unit udg_Caster
26 Custom script:   local unit udg_Target
26 Custom script:   local real udg_RealA
26 Custom script:   local effect udg_Efecto
Declaramos las variables locales que usaremos, 2 unidades, un real y un efecto

variable Set Caster = (Triggering unit)
variable Set Target = (Target unit of ability being cast)
variable Set RealA = (85.00 x (Real((Level of Invocación de Fuego  for Caster))))
Seteamos las variables que declaramos

35 Efecto especial - Create a special effect attached to the chest of Target using Abilities\Weapons\LavaSpawnMissile\LavaSpawnBirthMissile.mdl
35 Set Efecto = (Last created special effect)
Aquí debemos, primero crear el efecto especial, en este caso, un efecto adjunto al pecho del objetivo con el efecto alló puesto (una cría de lava girando xD) y lo seteamos

38 Wait 4.00 seconds
Esperamos 4 segundos Sleep

:35:Efecto especial - Destroy Efecto
Destruimos el efecto..

33 Unidad - Cause Caster to damage Target, dealing RealA damage of attack type Conjuros and damage type Fuego
Dañamos al pobre objetivo D:

variable Set PuntoA = (Position of Target)
Seteamos el punto del objetivo

22  Do Multiple ActionsFor each (Integer A) from 1 to 12, do (Actions)
  acciones Bucle: Acciones
Un loop del 1 al 12
      variable Set PuntoB = (PuntoA offset by 25.00 towards (30.00 x (Real((Integer A)))) degrees)
Seteamos el punto donde colocaremos nuestra unidad
      33 Unidad - Create 1 Dummy for (Owner of Caster) at PuntoB facing (30.00 x (Real((Integer A)))) degrees
Creamos la unidad dummy
      33 Unidad - Add Aliento de fuego  to (Last created unit)
Le agregamos la habilidad
      33 Unidad - Set level of Aliento de fuego  for (Last created unit) to (Level of Invocación de Fuego  for Caster)
Seteamos el nivel.
      33 Unidad - Add a 2.00 second Genérico expiration timer to (Last created unit)
Agregamos un timer para que la unidad muera
      26 Custom script:   call RemoveLocation(udg_PuntoB)
Destruimos el punto para setearlo nuevamente
      variable Set PuntoB = (PuntoA offset by 40.00 towards (30.00 x (Real((Integer A)))) degrees)
Lo seteamos nuevamente en el mismo lugar para un poco más alejado para poder tener un punto a donde lanzar nuestra habi
      33 Unidad - Order (Last created unit) to Alquimista pandaren neutral- Aliento de fuego PuntoB
Lanzamos nuestra habilidad dummy
      26 Custom script:   call RemoveLocation(udg_PuntoB)
Antileak

26 Custom script:   call RemoveLocation(udg_PuntoA)
Más antileak

variable Set Caster = Ninguna unidad
variable Set Target = Ninguna unidad
26 Custom script:   set udg_Efecto = null

Nulleamos nuestras variables locales para evitar leaks..

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 3
Spoiler:
 

[gui]Piel de Piedra Init
Acontecimientos
Unidad - A unit Adquiere una habilidad
Condiciones
(Learned skill level) Igual a (==) 1
(Learned Hero Skill) Igual a (==) Piel de Piedra
Acciones
Unidad - Add ArmorPielDePiedra (+1) to (Triggering unit)
[/gui]

[gui]Piel de Piedra
Acontecimientos
Unidad - A unit Es atacado
Condiciones
(Level of ArmorPielDePiedra (+1) for (Triggering unit)) Igual a (==) 1
(Random integer number between 1 and 100) Menor que o igual a (<=) 15
Acciones
Custom script: local unit udg_Caster
Set Caster = (Triggering unit)
Unidad - Set level of ArmorPielDePiedra (+1) for Caster to ((Level of Piel de Piedra for Caster) + 1)
Wait 2.00 seconds
Unidad - Set level of ArmorPielDePiedra (+1) for Caster to 1
Set Caster = Ninguna unidad
[/gui]

newdet Piel de Piedra Init
  event Acontecimientos
      33 Unidad - A unit Adquiere una habilidad
  condiciones Condiciones
      22 (Learned skill level) Igual a (==) 1
      22 (Learned Hero Skill) Igual a (==) Piel de Piedra 
  acciones Acciones
      33 Unidad - Add ArmorPielDePiedra (+1) to (Triggering unit)

Un init simple, aprendes la habilidad por primera vez y se te agrega la habilidad encargada de aumentarnos la defensa

newdet Piel de Piedra
  event Acontecimientos
      33 Unidad - A unit Es atacado
  condiciones Condiciones
      22 (Level of ArmorPielDePiedra (+1) for (Triggering unit)) Igual a (==) 1
      22 (Random integer number between 1 and 100) Menor que o igual a (<=) 15
  acciones Acciones
      26 Custom script:   local unit udg_Caster
      variable Set Caster = (Triggering unit)
      33 Unidad - Set level of ArmorPielDePiedra (+1) for Caster to ((Level of Piel de Piedra  for Caster) + 1)
      38 Wait 2.00 seconds
      33 Unidad - Set level of ArmorPielDePiedra (+1) for Caster to 1
      variable Set Caster = Ninguna unidad

Como esta habilidad es muy simple, no explicaré acción por acción. Si una unidad es atacada y tiene la habilidad encargada de aumentar la defensa en nivel 1(para que no se active cuando está activa) y un número random entre 1 y 100 menor o igual a 15(15% de posiblidades) se activa el trigger

El trigger nos aumenta el nivel de la habi que da defensa, a Nivel de "Piel de Piedra" + 1  y 2 segundos después resetea la habilidad a nivel 1. Recuerden el antileak e.e

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 4
Spoiler:
 

26 Custom script:   local location udg_PuntoA
26 Custom script:   local unit udg_Caster
variable Set Jugador = (Triggering player)
variable Set PuntoA = (Position of (Triggering unit))
33 Unidad - Create 1 Dummy for Jugador at PuntoA facing Vista edificio predeterminada (270.0) degrees
variable Set Caster = (Last created unit)
Declaramos y seteamos variables..

:33:Unidad - Add Terremoto  to Caster
33 Unidad - Order Caster to Orco Vidente: Terremoto PuntoA
Agregamos terremoto y le ordenamos lanzarlo en el punto (es una habilidad de un solo nivel)

38 Wait 15.00 seconds
Esperamos :Sleep:

33 Unidad - Add Tormenta  to Caster
22  Do Multiple ActionsFor each (Integer A) from 1 to 5, do (Actions)
  acciones Bucle: Acciones
      33 Unidad - Order Caster to Humano Rey de la Montaña: Trueno
      35 Efecto especial - Create a special effect at PuntoA using Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
      35 Efecto especial - Destroy (Last created special effect)
      38 Wait 3.00 seconds
Simple, lanzamos el trueno 5 veces, y creamos un efecto especial, 3 segundos de espera entre trueno y trueno

33 Unidad - Add Volcán  to Caster
33 Unidad - Order Caster to Señor del fuego neutral: Volcán PuntoA

Agregamos volcán y lo lanzamos en el punto

38 Wait 15.00 seconds
Esperamos :Sleep:

33 Unidad - Remove Caster from the game
variable Set Caster = Ninguna unidad
26 Custom script:   call RemoveLocation(udg_PuntoA)
26 Custom script:   set udg_PuntoA = null

Removemos punto y Caster y nulleamos.

Con esto terminamos nuestro primer héroe, espero les guste. PD: Si no dieron cuenta es un pandaren e_e

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 5
Spoiler:
 

[Completo] Todo lo que yo sé sobre Variables Locales • 1001407_10201054816284089_706757812_n

Empezemos con la explicación, es básicamente lo mismo que "Invocación de Trueno", pero para variar usé un grupo de unidades para el daño en lugar de un dummy

26 Custom script:   local unit udg_Caster
26 Custom script:   local location udg_PuntoA
26 Custom script:   local real udg_RealA
variable Set Caster = (Triggering unit)
variable Set PuntoA = (Position of Caster)
variable Set RealA = (35.00 x (Real((Level of (Ability being cast) for Caster))))
Declarar y setear variables e.e

22  Do Multiple ActionsFor each (Integer A) from 1 to 15, do (Actions)
  acciones  Bucle: Acciones
Un loop e.e
      38  Wait 0.38 seconds
Esperamos medio segundo mas o menos
      variable  Set PuntoB = (PuntoA offset by (Random real number between 0.00 and 512.00) towards (Random real number between 0.00 and 360.00) degrees)
Seteamos B, casi igual que en "Invocación de Trueno"
      35  Efecto especial - Create a special effect at PuntoB using Abilities\Spells\Other\Transmute\PileofGold.mdl
      35  Efecto especial - Destroy (Last created special effect)
Creamos un efecto especial en el punto y lo destruimos para evitar leaks
      variable  Set Jugador = (Owner of Caster)
Debido a que no puedo setear un grupo sin usar una variable global(No sé si es mi editor o que), seteamos una variable global de jugador(servirá para definir las unidades enemigas)
      variable  Set Grupo = (Units within 125.00 of PuntoB matching ((((Matching unit) is Una estructura) Igual a (==) False) and ((((Matching unit) is Inmune a la magia) Igual a (==) False) and (((Matching unit) belongs to an enemy of Jugador) Igual a (==) True))))
Creamos un grupo tomando las unidades en 125 de rango alrededor del punto que no sean estructuras, que no sean invulnerables a la magia y que sean enemigas del jugador caster
      26  Custom script:   loop
Un hermoso custom script, "loop" esto quiere decir que iniciaremos un loop aquí
      26  Custom script:   set udg_Target = FirstOfGroup(udg_Grupo)
Tomamos la primera unidad del grupo
      26  Custom script:   exitwhen udg_Target == null
"exitwhen" quiere que decir que el loop terminará cuando la condición sea verdadera. La condición es "Target Igual a Ninguna Unidad"
      24  Grupo de unidad - Remove Target from Grupo
Removemos la unidad del grupo(para que no la tomemos infinitamente a la misma)
      33  Unidad - Cause Caster to damage Target, dealing RealA damage of attack type Conjuros and damage type Normal
La dañamos
      variable  Set Target = Ninguna unidad
Esto no sé si es necesario, es por si acaso.
      26  Custom script:   endloop
Hasta aquí llega el loop
       22  Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
          condiciones  Si: Condiciones
              22  (Random integer number between 0 and 10) Igual a (==) 0
          acciones  Entonces: Acciones
              21  Objeto - Create Monedas de oro at PuntoB
          acciones  Otros: Acciones
Este if, es en caso de que tengas suerte buscando oro e_e
      26  Custom script:   call RemoveLocation(udg_PuntoB)
Antileaks e.e

26 Custom script:   call RemoveLocation(udg_PuntoA)
26 Custom script:   set udg_PuntoA = null
variable Set Caster = Ninguna unidad
Más antileaks

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 6
Spoiler:
 

Este spell es el más peculiar, es un misil dummy pero sin usar un loop de 0.03 a 0.05, sino, usando variables locales y un solo trigger, sin embargo, tiene la desventaja, de limitar la velocidad máxima de misil a 522, ya que es un dummy moviendose nada más

[Completo] Todo lo que yo sé sobre Variables Locales • 1098458_10201054817564121_1523938808_n

26 Custom script:   local unit udg_Caster
26 Custom script:   local unit udg_Dummy
26 Custom script:   local effect udg_Efecto
26 Custom script:   local location udg_PuntoA
26 Custom script:   local location udg_PuntoB
variable Set Caster = (Triggering unit)
variable Set PuntoA = (Position of (Triggering unit))
variable Set PuntoB = (Target point of ability being cast)
Declaramos nuestras variables locales y las seteamos

[gui]Set RealA = (Angle from PuntoA to PuntoB)[/gui]
RealA funcionará ángulo, está acción calcula el ángulo desde el punto del Caster al punto Objetivo, siempre debe ser así, o el misil se moverá en dirección contraria

[gui]Custom script:   call RemoveLocation(udg_PuntoB)
Set PuntoB = (PuntoA offset by 60.00 towards RealA degrees)[/gui]
Destruímos el punto para setearlo nuevamente, este será el punto de creación de nuestro dummy

[gui]Unidad - Create 1 Dummy for (Triggering player) at PuntoB facing RealA degrees
Custom script:   call RemoveLocation(udg_PuntoB)
Set Dummy = (Last created unit)[/gui]
Creamos el dummy, importante es que mire hacia nuestro ángulo seteado, destruímos el punto ya que no lo usaremos de nuevo(en esa posición específica) y seteamos Dummy como Last Created Unit(última unidad creada

[gui]Efecto especial - Create a special effect attached to the origin of Dummy using Abilities\Spells\Other\AcidBomb\BottleMissile.mdl
Set Efecto = (Last created special effect)
Animación - Change Dummy's size to (400.00%, 400.00%, 400.00%) of its original size[/gui]
Seteamos un efecto al dummy en origin, que será el modelo de misil(el dummy creado es invisible), y lo seteamos, por último le ponemos un tamaño exageradamente grande.

[gui]Unidad - Set Dummy movement speed to 522.00
Unidad - Add a 2.00 second Genérico expiration timer to Dummy[/gui]
Seteamos la velocidad del dummy a 522 y le agregamos un timer de 2 segundos

[gui]Set PuntoB = (PuntoA offset by 944.00 towards RealA degrees)
Unidad - Order Dummy to Mover a PuntoB[/gui]
Seteamos el punto a donde se moverá (es a 944 de distancia porque demorará 2 seg en recorrer esa distancia), y ordenamos al dummy moverse hacia ahí

[gui]Custom script:   call RemoveLocation(udg_PuntoB)
Custom script:   call RemoveLocation(udg_PuntoA)[/gui]
Removemos los puntos, para evitar leaks

[gui]Custom script:   loop
Custom script:   exitwhen GetWidgetLife(udg_Dummy) < 0.405[/gui]
Iniciamos un loop que terminará cuando el dummy esté muerto("GetWidgetlife" devuelve la vida que tiene el widget(objeto,complemento o unidad) y 0.405 es la vida mínima que puede tener una unidad

[gui]Set PuntoA = (Position of Dummy)
Set Jugador = (Owner of Caster)[/gui]
Seteamos el punto en la posición del dummy y a jugador(variable global) para poder setear nuestro grupo.

[gui]Set Grupo = (Units within 250.00 of PuntoA matching ((((Matching unit) is Una estructura) Igual a (==) False) and ((((Matching unit) is Inmune a la magia) Igual a (==) False) and (((Matching unit) belongs to an enemy of Jugador) Igual a (==) True))))[/gui]
Seteamos nuestro grupo, todas las unidades enemigas, no estructuras y no inmunes a la magia en un rango de 250

[gui] Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
   Si: Condiciones
       (Number of units in Grupo) Mayor que (>) 0
   Entonces: Acciones[/gui]
Un if, si el número de unidades en el grupo es mayor que 0, haremos lo siguiente

[gui]        Set Target = Caster
       Grupo de unidad - Pick every unit in Grupo and do (Actions)
           Bucle: Acciones
               Unidad - Cause Target to damage (Picked unit), dealing (90.00 x (Real((Level of Bomba quí­mica  for Target)))) damage of attack type Conjuros and damage type Normal[/gui]
Seteamos a nuestro caster en una variable global para poder usarla en el bucle de grupo, y dañamos a cada unidad del grupo.

[gui]        Efecto especial - Create a special effect at PuntoA using Abilities\Weapons\ChimaeraAcidMissile\ChimaeraAcidMissile.mdl
       Efecto especial - Destroy (Last created special effect)
       Unidad - Kill Dummy
   Otros: Acciones[/gui]
Creamos un efecto para que se vea mejor, lo destruímos para evitar leaks y matamos al dummy para finalizar el spell

[gui]Custom script:   call RemoveLocation(udg_PuntoA)[/gui]
0 leaks e.e

[gui]Wait 0.00 seconds[/gui]
Esperamos la menor cantidad posible(De 0.075 a 0.325, con un promedio de 0.150)

[gui]Custom script:   endloop[/gui]
Terminamos el loop

[gui]Efecto especial - Destroy Efecto
Set Dummy = Ninguna unidad
Set Caster = Ninguna unidad
Custom script:   set udg_Efecto = null
Custom script:   set udg_PuntoA = null
Custom script:   set udg_PuntoB = null[/gui]
Destruimos el efecto y nulleamos todas las variables usadas, evitando todo leaks

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 7
Spoiler:
 

[Completo] Todo lo que yo sé sobre Variables Locales • 1005236_10201054817364116_263125462_n

Este es un spell peculiar también, está hecho para evitar que se abusen(modificación hecha después de screenshot xD) usando el custom value de unidad

[gui]Custom script:   local unit udg_Caster
Custom script:   local unit udg_Target
Set Caster = (Attacking unit)
Set Target = (Triggering unit)[/gui]
Declaramos y seteamos nuestras variables

[gui]Unidad - Set the custom value of Caster to ((Custom value of Caster) + 1)
Wait 0.22 seconds[/gui]
Seteamos el custom value a +1 y luego esperamos, el tiempo de espera designado se basa en un valor colocado en el editor de objetos, llamado
"Combate - Ataque 1 - Animación punto de daño", en el alquimista goblin es 0.35 y por eso esperamos 0.22, ya que demorará 0.15 más variando un poco(No importa que el wait no sea perfectamente preciso, ya que el punto de retroceso establece el tiempo mínimo que debe esperar una unidad para atacar nuevamente)


[gui]Custom script:   if GetUnitCurrentOrder(udg_Caster) == 851971 and GetUnitUserData(udg_Caster) == 1 then[/gui]
Este if dice: Si la orden actual del caster es 851971 (Este número es la traducción de la orden "smart", esta orden se da cuando se ataca a un enemigo y se tiene la habilidad evasión[esta habi pasiva se basa en evasión con 0% de evadir], y El valor custom (Custom value) del caster igual a 1, esto es lo que evita que los usuarios abusen del evento, como seteamos el custom value a +1, si abusaste del poder, el trigger se dará cuenta basandose en el custom value

[gui]Jugador - Add (2 x (Level of Gold Steal  for Caster)) to (Owner of Caster) Oro actual
Jugador - Add (-2 x (Level of Gold Steal  for Caster)) to (Owner of Target) Oro actual
Custom script:   endif[/gui]
Si el if es correcto, aumentamos el oro del jugador dueño del caster y lo reducimos para el jugador dueño del objetivo, y terminamos el if

[gui]Unidad - Set the custom value of Caster to 0
Set Caster = Ninguna unidad
Set Target = Ninguna unidad[/gui]
Seteamos el custom value a 0 ya que terminó el spell y nulleamos las variables para evitar leaks

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 8
Spoiler:
 

[Completo] Todo lo que yo sé sobre Variables Locales • 1098243_10201054819364166_146700079_n

[Completo] Todo lo que yo sé sobre Variables Locales • 1150259_10201054819724175_1240621826_n

Este es un spell que usa una habilidad con muchos niveles, lo que lagueará el juego la primera vez que se agregue a una unidad, para evitar eso, hacemos el deto preload. Este deto se encarga de crear un dummy agregarla la habilidad a precargar y luego remover el dummy inmediatamente. Hacemos esto para evitar el molesto lag del primer casteo
PD: Que bueno que este es cortito para explicar xD


[gui]Custom script:   local unit udg_Caster
Set Caster = (Triggering unit)
Wait 0.85 seconds
Unidad - Add AumentoDañoFuriaQuimica (+1) to Caster[/gui]
Declaramos nuestra única variable local, esperamos 0.85(Hasta que se termine de transformar) y agregamos la habilidad de aumento de daño al caster

[gui] Do Multiple ActionsFor each (Integer A) from 1 to 30, do (Actions)
   Bucle: Acciones
       Wait 0.85 seconds
       Unidad - Set level of AumentoDañoFuriaQuimica (+1) for Caster to ((Level of AumentoDañoFuriaQuimica (+1) for Caster) + 1)[/gui]
Hacemos un loop de 1 a 30 (Correrá aprox. una vez por segundo y el spell dura 30 segundos), esperando 0.85 segundos y aumentando la habilidad de daño en 1

[gui]Unidad - Remove AumentoDañoFuriaQuimica (+1) from Caster
Set Caster = Ninguna unidad[/gui]
Terminamos el spell removiendo la habilidad y nulleando nuestro caster

Y nuestro segundo héroe está completado. PD: Si no dieron cuenta es un alquimista e_e

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 9
Spoiler:
 

[gui]Pilares de Fuego
   Acontecimientos
       Unidad - A unit Inicia el efecto de una habilidad
   Condiciones
       (Ability being cast) Igual a (==) Pilares de Fuego
   Acciones
       Custom script:   local unit udg_Caster
       Custom script:   local location udg_PuntoA
       Custom script:   local location udg_PuntoB
       Custom script:   local real udg_RealA
       Custom script:   local real udg_RealB = 0
       Set Caster = (Triggering unit)
       Set RealA = (Facing of (Triggering unit))
       Set PuntoA = (Position of (Triggering unit))
        Do Multiple ActionsFor each (Integer A) from 1 to 5, do (Actions)
           Bucle: Acciones
               Set RealB = (RealB + 150.00)
               Set PuntoB = (PuntoA offset by RealB towards RealA degrees)
               Unidad - Create 1 Dummy for (Owner of Caster) at PuntoA facing RealA degrees
               Unidad - Add a 1.00 second Genérico expiration timer to (Last created unit)
               Unidad - Add LlamaradaDummy  to (Last created unit)
               Unidad - Set level of LlamaradaDummy  for (Last created unit) to (Level of Pilares de Fuego  for Caster)
               Unidad - Order (Last created unit) to Humano mago sanguinario - Llamarada PuntoB
               Wait 0.12 seconds
               Custom script:   call RemoveLocation(udg_PuntoB)
       Custom script:   call RemoveLocation(udg_PuntoA)
       Set Caster = Ninguna unidad
       Custom script:   set udg_PuntoA = null
       Custom script:   set udg_PuntoB = null
[/gui]

Yo me enamoré de este simple skill .3

[gui]Custom script:   local unit udg_Caster
Custom script:   local location udg_PuntoA
Custom script:   local location udg_PuntoB
Custom script:   local real udg_RealA
Custom script:   local real udg_RealB = 0
Set Caster = (Triggering unit)
Set RealA = (Facing of (Triggering unit))
Set PuntoA = (Position of (Triggering unit))[/gui]
Declaramos y seteamos nuestras variables(Si notan, en RealB hacemos " = 0 ", esto es para darle un valor inicial)

[gui] Do Multiple ActionsFor each (Integer A) from 1 to 5, do (Actions)
   Bucle: Acciones
       Set RealB = (RealB + 150.00)[/gui]
Iniciamos un loop y aumentamos RealB en 150.

[gui]        Set PuntoB = (PuntoA offset by RealB towards RealA degrees)
       Unidad - Create 1 Dummy for (Owner of Caster) at PuntoA facing RealA degrees
       Unidad - Add a 1.00 second Genérico expiration timer to (Last created unit)
       Unidad - Add LlamaradaDummy  to (Last created unit)
       Unidad - Set level of LlamaradaDummy  for (Last created unit) to (Level of Pilares de Fuego  for Caster)
       Unidad - Order (Last created unit) to Humano mago sanguinario - Llamarada PuntoB[/gui]
Seteamos nuestro PuntoB, que será offset de PuntoA en RealB en dirección a RealA, y creamos un dummy en ese punto para el dueño del Caster. Luego le agregamos un segundo de vida, le agregamos la habilidad Dummy y la seteamos a nivel correcto. Por último le ordenamos al dummy lanzar Llamarada.

[gui]        Wait 0.12 seconds
       Custom script:   call RemoveLocation(udg_PuntoB)[/gui]
Esperamos 0.25 seg aproximadamente y destruímos el punto para evitar leaks

[gui]Custom script:   call RemoveLocation(udg_PuntoA)
Set Caster = Ninguna unidad
Custom script:   set udg_PuntoA = null
Custom script:   set udg_PuntoB = null[/gui]
Destruimos PuntoA y nulleamos las variables locales

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 10
Spoiler:
 

[gui]Trampa de Fuego
   Acontecimientos
       Unidad - A unit Inicia el efecto de una habilidad
   Condiciones
       (Ability being cast) Igual a (==) Trampa de Fuego
   Acciones
       Custom script:   local unit Caster = GetTriggerUnit()
       Custom script:   local unit Target
       Custom script:   local effect array Efecto
       Custom script:   local real XCaster = GetUnitX(Caster)
       Custom script:   local real YCaster = GetUnitY(Caster)
       Custom script:   local real Angle = GetUnitFacing(Caster) * bj_DEGTORAD
       Custom script:   local real TargetX = XCaster + 500 * Cos(Angle)
       Custom script:   local real TargetY = YCaster + 500 * Sin(Angle)
       Custom script:   local real Damage = (GetUnitAbilityLevel(Caster, GetSpellAbilityId()) * 150) / 6
       Custom script:   local integer i = 0
       Custom script:   set udg_PuntoA = Location(TargetX, TargetY)
       Set Grupo = (Units within 400.00 of PuntoA matching ((((Matching unit) is Una estructura) Igual a (==) False) and ((((Matching unit) is Inmune a la magia) Igual a (==) False) and (((Matching unit) belongs to an enemy of (Triggering player)) Igual a (==) True))))
       Custom script:   set Target = FirstOfGroup(udg_Grupo)
       Custom script:   call RemoveLocation(udg_PuntoA)
       Custom script:   call DestroyGroup(udg_Grupo)
       -------- IF --------
       Custom script:   if Target != null then
       Custom script:   set TargetX = GetUnitX(Target)
       Custom script:   set TargetY = GetUnitY(Target)
       Custom script:   endif
       -------- CrearEfectos --------
       Custom script:   set Efecto[1] = AddSpecialEffect( "Doodads\\Cinematic\\FireTrapUp\\FireTrapUp.mdl", TargetX, TargetY)
       Custom script:   set Efecto[2] = AddSpecialEffect( "Doodads\\Cinematic\\FireTrapUp\\FireTrapUp.mdl", TargetX + 90 * Cos(bj_PI / 4) , TargetY + 90 * Sin(bj_PI / 4))
       Custom script:   set Efecto[3] = AddSpecialEffect( "Doodads\\Cinematic\\FireTrapUp\\FireTrapUp.mdl", TargetX + 90 * Cos((3 * bj_PI) / 4) , TargetY + 90 * Sin((3 * bj_PI) / 4))
       Custom script:   set Efecto[4] = AddSpecialEffect( "Doodads\\Cinematic\\FireTrapUp\\FireTrapUp.mdl", TargetX + 90 * Cos((5 * bj_PI) / 4) , TargetY + 90 * Sin((5 * bj_PI) / 4))
       Custom script:   set Efecto[5] = AddSpecialEffect( "Doodads\\Cinematic\\FireTrapUp\\FireTrapUp.mdl", TargetX + 90 * Cos((7 * bj_PI) / 4) , TargetY + 90 * Sin((7 * bj_PI) / 4))
       -------- Loop --------
       Custom script:   loop
       Custom script:   set i = i + 1
       Custom script:   exitwhen i == 7
       Custom script:   set udg_PuntoA = Location(TargetX, TargetY)
       Custom script:   set udg_Jugador = GetOwningPlayer(Caster)
       Set Grupo = (Units within 300.00 of PuntoA matching ((((Matching unit) is Una estructura) Igual a (==) False) and ((((Matching unit) is Inmune a la magia) Igual a (==) False) and (((Matching unit) belongs to an enemy of Jugador) Igual a (==) True))))
       -------- Pick Every Unit.. --------
       Custom script:   loop
       Custom script:   set Target = FirstOfGroup(udg_Grupo)
       Custom script:   call GroupRemoveUnit(udg_Grupo,Target )
       Custom script:   exitwhen Target == null
       Custom script:   call UnitDamageTarget(Caster,Target,Damage,false,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,null)
       Custom script:   endloop
       Custom script:   call RemoveLocation(udg_PuntoA)
       Custom script:   call DestroyGroup(udg_Grupo)
       Wait 0.10 seconds
       Custom script:   endloop
       Custom script:   set i = 0
       -------- Nullear --------
       Custom script:   loop
       Custom script:   set i = i + 1
       Custom script:   exitwhen i == 6
       Custom script:   call DestroyEffect(Efecto[i])
       Custom script:   set Efecto[i] = null
       Custom script:   endloop
       Custom script:   set Caster = null
[/gui]

Ahora, como me cansé de lo básico, quise terminar con un par de spells puro custom script Cool

[gui]Custom script:   local unit Caster = GetTriggerUnit()[/gui]
Debido a que este detonador es casi JASS, lo explicaré paso a paso. Al declarar Caster(notese que ya no hay udg_, la variable global "Caster" no se puede usar para referirse a esto) le otorgamos un valor llamado "GetTriggerUnit()", esta función es lo mismo que poner "Triggering Unit", el parentésis vacío es algo de programación, diferencia las funciones de las variables, y está vacío porque no toma ningún valor.

[gui]Custom script:   local unit Target[/gui]
Aquí simplemente declaramos target sin otorgarle valor

[gui]Custom script:   local effect array Efecto[/gui]
Aquí, declaramos una variable con array, que responde al nombre de Efecto

[gui]Custom script:   local real XCaster = GetUnitX(Caster)[/gui]
La posición X del Caster, GetUnitX(unidad) nos devolverá la posición en X donde se encuentra la unidad

[gui]Custom script:   local real YCaster = GetUnitY(Caster)[/gui]
La posición Y del Caster, GetUnitY(unidad) nos devolverá la posición en Y donde se encuentra la unidad

[gui]Custom script:   local real Angle = GetUnitFacing(Caster) * bj_DEGTORAD[/gui]
El ángulo, GetUnitFacing(Caster) nos devuelve en grados, la orientación de la unidad, pero warcraft trabaja con Radianes así que lo multiplicamos ( * ) por la constante "bj_DEGTORAD", esta es igual a bj_PI/180.0 (bj_PI es igual a Pi ).

[gui]Custom script:   local real TargetX = XCaster + 500 * Cos(Angle)[/gui]
Esta variable "TargetX" nos sirve para determinar el valor X del punto objetivo, al principio lo usaremos para definir el punto medio de búsqueda. Para determinar el valor X de nuestro punto objetivo, usamos una operación simple. Sumamos la distancia deseada multiplicada por el Coseno del ángulo(la función Cos de Warcraft toma un ángulo en radianes) a el Valor X inicial

[gui]Custom script:   local real TargetY = YCaster + 500 * Sin(Angle)[/gui]
Esta variable "TargetY" nos sirve para determinar el valor Y del punto objetivo, al principio lo usaremos para definir el punto medio de búsqueda Para determinar el valor Y de nuestro punto objetivo, usamos una operación simple. Sumamos la distancia deseada multiplicada por el Seno del ángulo(la función Sin de Warcraft toma un ángulo en radianes) a el Valor Y inicial

[gui]Custom script:   local real Damage = (GetUnitAbilityLevel(Caster, GetSpellAbilityId()) * 150) / 6[/gui]
La variable de daño, está será la multiplicación de 150 por el nivel de la habilidad siendo casteada para caster ( GetUnitAbilityLevel(unidad, idHabi) sirve para recuperar el nivel de la habilidad colocada [GetSpellAbilityId() nos devuelve el ID de la habilidad lanzada])

[gui]Custom script:   local integer i = 0[/gui]
Este integer "i" nos servirá para nuestro loop, valor inicial 0

[gui]Custom script:   set udg_PuntoA = Location(TargetX, TargetY)
Set Grupo = (Units within 400.00 of PuntoA matching ((((Matching unit) is Una estructura) Igual a (==) False) and ((((Matching unit) is Inmune a la magia) Igual a (==) False) and (((Matching unit) belongs to an enemy of (Triggering player)) Igual a (==) True))))
Custom script:   set Target = FirstOfGroup(udg_Grupo)[/gui]
Primera de las 3 acciones de GUI, el seteo del grupo, se usa GUI porque se necesita crear una función si se desea usar la función de JASS sin leaks. Para setear el punto, usamos un custom script, la función "Location" toma un valor real X y un valor real Y, que define la posición. Por último, seteamos Target, que será "FirstOfGroup(grupo)" que devuelve la primera unidad del grupo.

[gui]Custom script:   call RemoveLocation(udg_PuntoA)
Custom script:   call DestroyGroup(udg_Grupo)[/gui]
Evitamos los leaks e.e

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 11
Spoiler:
 

[gui]Cria de lava Init
   Acontecimientos
       Unidad - A unit Adquiere una habilidad
   Condiciones
       (Learned skill level) Igual a (==) 1
       (Learned Hero Skill) Igual a (==) Crías de Lava
   Acciones
       Detonador - Add to Cria de lava the event (Unidad - (Triggering unit) Recibe daño)
[/gui]

[gui]Cria de lava
   Acontecimientos
   Condiciones
       (Level of Crías de Lava  for (Triggering unit)) Mayor que (>) 0
   Acciones
       Custom script:   local unit udg_Caster
       Custom script:   local integer udg_NumeroEntero
       Set Caster = (Triggering unit)
       Set NumeroEntero = (Level of Crí­as de Lava  for (Triggering unit))
       Set PuntoA = (Position of Caster)
       Unidad - Create 1 Crí­a de lava (Nivel 2) for (Triggering player) at PuntoA facing (Facing of Caster) degrees
       Unidad - Remove Crías de Lava  from Caster
       Unidad - Add HabiCDCriaLava  to Caster
       Unidad - Set level of HabiCDCriaLava  for Caster to NumeroEntero
       Unidad - Order Caster to Orco Señor de las Cuchillas: Andar del viento
       Custom script:   call RemoveLocation(udg_PuntoA)
       Wait (27.40 - (2.50 x (Real(NumeroEntero)))) seconds
       Unidad - Remove HabiCDCriaLava  from Caster
       Unidad - Add Crí­as de Lava  to Caster
       Unidad - Set level of Crí­as de Lava  for Caster to NumeroEntero
       Set Caster = Ninguna unidad
[/gui]

Este es un pasivo con una pequeña molestia para que funcione su CD visible .3
La explicación del init es simplemente se agrega el evento "Unidad Recibe un daño" para poder usar el detonador del spell


[gui]Custom script:   local unit udg_Caster
Custom script:   local integer udg_NumeroEntero
Set Caster = (Triggering unit)[/gui]
Set NumeroEntero = (Level of Crías de Lava  for (Triggering unit))[/gui]
Declaramos y seteamos variables

[gui]Set PuntoA = (Position of Caster)
Unidad - Create 1 Crí­a de lava (Nivel 2) for (Triggering player) at PuntoA facing (Facing of Caster) degrees[/gui]
Creamos una cría de lava para el player.

[gui]Unidad - Remove Crí­as de Lava  from Caster
Unidad - Add HabiCDCriaLava  to Caster
Unidad - Set level of HabiCDCriaLava  for Caster to NumeroEntero
Unidad - Order Caster to Orco Señor de las Cuchillas: Andar del viento[/gui]
Estas 4 órdenes permiten tener nuestro CD visible para habi pasiva, simplemente removemos la habilidad pasiva real, agregamos una habilidad dummy, seteamos nivel al correcto(el nivel modifica el CD en este caso) y ordenamos usar esa habilidad, en este caso se basa en Andar del Viento

[gui]Custom script:   call RemoveLocation(udg_PuntoA)[/gui]
No leaks

[gui]Wait (27.40 - (2.50 x (Real(NumeroEntero)))) seconds
Unidad - Remove HabiCDCriaLava  from Caster
Unidad - Add Crí­as de Lava  to Caster
Unidad - Set level of Crías de Lava  for Caster to NumeroEntero
Set Caster = Ninguna unidad[/gui]
Esperamos mientras termine el CD (el CD debe coincidir con el tiempo de espera), luego removemos la habilidad dummy, agregamos la real y seteamos al nivel. Nulleamos para evitar leaks.

[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Skill N° 12
Spoiler:
 

[gui]INFERNO
   Acontecimientos
       Unidad - A unit Inicia el efecto de una habilidad
   Condiciones
       (Ability being cast) Igual a (==) Infierno
   Acciones
       Custom script:   local unit Caster = GetTriggerUnit()
       Custom script:   local integer Terreno
       Custom script:   local real X = GetUnitX(Caster)
       Custom script:   local real Y = GetUnitY(Caster)
       Custom script:   local real Tiempo = 15.00
       Custom script:   local real X2
       Custom script:   local real Y2
       Custom script:   set Terreno = GetTerrainType(X,Y)
       Custom script:   set udg_PuntoA = Location(X,Y)
       Escenario - Change terrain type at PuntoA to Mazmorra - Piedras rojas using variation -1 in an area of size 8 and shape Cí­rculo
       Custom script:   call RemoveLocation(udg_PuntoA)
       Custom script:   loop
       Custom script:   set Tiempo = Tiempo - 0.2
       Custom script:   exitwhen Tiempo <= 0.00
       Wait 0.00 seconds
       Custom script:   set X2 = X + GetRandomReal(0.00, 500) * Cos(GetRandomReal(0,bj_PI * 2) )
       Custom script:   set Y2 = Y + GetRandomReal(0.00, 500) * Sin(GetRandomReal(0,bj_PI * 2) )
       Custom script:   call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Volcano\\VolcanoMissile.mdl", X2, Y2))
       Custom script:   set X2 = X + GetRandomReal(0.00, 800) * Cos(GetRandomReal(0,bj_PI * 2))
       Custom script:   set Y2 = Y + GetRandomReal(0.00, 800) * Sin(GetRandomReal(0,bj_PI * 2))
       Custom script:   set bj_lastCreatedUnit = CreateUnit( GetOwningPlayer(Caster), 'h001', X2, Y2, 0.00 )
       Custom script:   call UnitAddAbility(bj_lastCreatedUnit, 'A00J')
       Custom script:   call UnitApplyTimedLife(bj_lastCreatedUnit, 'BHwe', 2.00)
       Custom script:   call IssuePointOrder( bj_lastCreatedUnit, "flamestrike", X2, Y2 )
       Custom script:   endloop
       Custom script:   call SetTerrainType( X,Y,Terreno,-1,8,0)
       Custom script:   set Caster = null
[/gui]


[Completo] Todo lo que yo sé sobre Variables Locales • 623713d2ee

Información sobre Waits
Como dijimos arriba, un wait un tiempo más del estimado. Ahora ¿Cuánto es este tiempo de delay?
Me tomé el trabajo de hacer la prueba y aquí está el tiempo de delay estimado, los tiempos no son precisos, pues los mismos waits son imprecisos


0.075 a 0.325


Aunque el delay más común es 0.125 a 0.150, con números mayores el delay es de 0.1 a 0.14 comunmente, nunca pueden saberlo, eviten el uso de waits cuando necesites precisión exacta.
Nota: Por alguna razón, 0.00 es casi lo mismo que 0.01(0.01 puede demorar un poco más)


Mapa-Tutorial


NO HAY EXPLICACION DE LOS TRIGGERS EN EL MAPA TUTORIAL



http://www.epicwar.com/maps/232316/


Última edición por Marcos_M el Jue Mayo 21, 2020 12:55 pm, editado 1 vez
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Jue Ago 22, 2013 5:57 pm

Damn, que elaborado tutorial xD. Excelente Wink.

Ahora yo tengo una duda con respecto a los Waits en sí y es, ¿no es que causan desync en multiplayer?.

+rep por supuesto, muy buen material.
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3586
Reputación Reputación : 697
Monedas de oro : 11052
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Jue Ago 22, 2013 6:12 pm

@Sauron escribió:
Damn, que elaborado tutorial xD. Excelente Wink.

Ahora yo tengo una duda con respecto a los Waits en sí y es, ¿no es que causan desync en multiplayer?.

+rep por supuesto, muy buen material.
Hay tantos mapas que usan waits y no causan desync xDD

Creo que el que causa Desync es el PolledWait. Y el wait es TriggerSleepAction
Volver arriba Ir abajo
edusx
Capitán
edusx


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 167
Reputación Reputación : 17
Monedas de oro : 311
[Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
Cetro del dominio [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
Vino [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Jue Ago 22, 2013 6:30 pm

hay un sistema de este tuto
q me sera util para un spell
te cabe una rep
Volver arriba Ir abajo
http://warcraftcondota.foro-activo.com/
JO_AN11
Peón


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 44
Reputación Reputación : 0
Monedas de oro : 112
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Sáb Mar 01, 2014 3:52 am

realmente hubo muchas cosas que no entendi asi que me salte muchisimas cosas antes de comentar XD , mira no hay un tutorial introductorio a todo ese lenguaje que hablas? , por que si explicas bien las cosas, pero no se entiende ( por lo menos yo que soy nuevo en esto) cual es la necesidad de crear un dummy? por que se necesita matar el rayo? ( el no se lo merecia :c) , etc ,etc por que de que sabemos que con eso mataremos el rayo , pues lo sabemos , pero no por que X.X , rep por que es un gran tutorial c:
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3586
Reputación Reputación : 697
Monedas de oro : 11052
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Sáb Mar 01, 2014 12:32 pm

Crear un dummy sirve para castear poderes sobre unidades(Por ejemplo, puedes tener un spell en base a Aliento de Fuego que por medio de dummy lance un Aturdimiento por Alcohol y provoque daño por segundo por la mecánica entre aliento de fuego y aturdimiento por alcohol)

"Matar un rayo" : Quiere decir que lo destruimos, porque si lo dejas ahí se mostrará todo el tiempo y tendrás un efecto gráfico horrible e innecesario en tu map..

Y mira los tutoriales más básicos también
https://www.worldofeditors.net/t558-curso-de-iniciacion-en-detonadores-con-el-profesor-marcos_m
https://www.worldofeditors.net/t49-fugas-de-memoria-gui
https://www.worldofeditors.net/t46-guia-sobre-variables
https://www.worldofeditors.net/t184-glosario-de-terminos-en-we

Y también, te aconsejo este tutorial para hacer spells, debido a que es la forma más fácil de hacer spells
https://www.worldofeditors.net/t521-haciendo-habilidades-mui-en-gui-la-manera-de-sauron
Volver arriba Ir abajo
kaelthas
Aprendiz
kaelthas


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 13
Reputación Reputación : 0
Monedas de oro : 23
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Vie Abr 11, 2014 9:16 pm

alabado seas no entendía mucho de variables xD +rep
Volver arriba Ir abajo
xoloems
Iniciado


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 10
Reputación Reputación : 0
Monedas de oro : 10
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Vie Nov 13, 2015 5:20 am

gracias,queria aprender sobre las variables desde siempre :hand:
Volver arriba Ir abajo
armando368
Caballero
armando368


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 420
Reputación Reputación : 26
Monedas de oro : 409
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
Frostmourne [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Lun Dic 26, 2016 12:54 pm

Osea , usar puro custom script es como usar Jass

Osea una spell Con puro Custom Script (Sin Acciones GUI e.e )
Es usar Vjass sin tener que ir a Texto personalizado ?

WOW

PD: : @


Mis Spells

Arrow OMNISLASH: https://www.worldofeditors.net/t3778-omnislash#30794

[Sombra Solitaria:[/b] https://www.worldofeditors.net/t3985-sombra-solitaria-gui

Visita mi Canal de Youtube  Wink

Arrow https://www.youtube.com/c/TheHoodedFace

Idea Subo contenido muy Interesante Idea

[Completo] Todo lo que yo sé sobre Variables Locales • Portad10
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3586
Reputación Reputación : 697
Monedas de oro : 11052
Monedas de Platino : 0 [Completo] Todo lo que yo sé sobre Variables Locales • Empty

Inventario :
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10
[Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10 [Completo] Todo lo que yo sé sobre Variables Locales • Empysl10

[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10Lun Dic 26, 2016 12:59 pm

@armando368 escribió:
Osea , usar puro custom script es como usar Jass

Osea una spell Con puro Custom Script (Sin Acciones GUI e.e )
Es usar Vjass sin tener que ir a Texto personalizado ?

WOW

PD: : @

No, no es vJASS sin tener que ir a texto personalizado. GUI te ofrece una estructura(Evento-Condicion-Acciones) a seguir, JASS y vJASS no tienen esta estructura sino que vos escribes como quieres que funcione tu código, hacer esto te ayudará hasta que puedas hacer código por vos mismo
Volver arriba Ir abajo
Contenido patrocinado




[Completo] Todo lo que yo sé sobre Variables Locales • Empty
Mensaje(#) Tema: Re: [Completo] Todo lo que yo sé sobre Variables Locales • [Completo] Todo lo que yo sé sobre Variables Locales • Clock10

Volver arriba Ir abajo
 

[Completo] Todo lo que yo sé sobre Variables Locales •

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.

 Temas similares

-
» Lo vendo todo
» Debate sobre Proxies y Préstamos de cartas
» Lo vendo todo
» Duda sobre commander
» El puente sobre el río Kwai [DVDRip]

Permisos de este foro:No puedes responder a temas en este foro.
Warcraft III - WorldEditor :: Academia :: Area GUI :: Creación de Spells-