Foro especializado en Warcraft III y su editor
 
BuscarEntrar al ChatboxPortal del foroÍndiceSpellsRegistrarseConectarseGrupos de Usuarios
Eventos Actuales
¡ Bienvenido Invitado !

Editar Perfil

Tus temas
Tus Mensajes ()

Enlaces rápidos








Comparte | .
 

 Curso de Acciones Importantes I: El If/Then/Else

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 : 3152
Reputación Reputación : 531
Monedas de oro : 9797
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Curso de Acciones Importantes I: El If/Then/Else Dom Oct 20, 2013 8:25 pm

Bienvenidos Novatos

Aquí el Profesor Marcos_M y hoy aprenderemos los secretos de la acción If/Then/Else que nos abre 2 mundos en nuestro detonador, este curso es necesario para entrar al Curso de Detonadores I

IMPORTANTE! Debes tener conocimientos básicos de inglés para poder entender este tutorial en su totalidad

Procedamos con el índice para dar comienzo al tutorial

Indice:
1. ¿Qué es un If/Then/Else?
2. ¿Para qué sirve un If/Then/Else?
3. ¿Cómo usar un If?
4. Buenos y malos usos del If/Then/Else
  a. Buenos usos del If/Then/Else
  b. Malos usos del If/Then/Else
5. Función Arithmetic


¿Qué es un If/Then/Else?
Es una acción básica del GUI, el If/Then/Else (al que nos referiremos como "If") permite introducir una condición en nuestras acciones, abriéndonos 2 caminos: "Then" y "Else" u "Entonces" y "Otros"  (varía según el lenguaje de su WE e.e)

Las acciones en Then(Entonces) se realizarán en caso de que la/s condición/es colocadas sean verdaderas.
Las acciones en Else(Otros) se realizarán cuando la/s condición/es sean falsas.


¿Para qué sirve un If/Then/Else?
Un If sirve para tomar una decisión dentro de nuestro detonador. Requiere una condición (o muchas, al final siempre devuelven falso o verdadero) y los espacios Then y Else tomaran las acciones que realizaremos en base a la condición. Then si es verdadera, Else si es falsa. Cabe aclarar que no es necesario colocar SIEMPRE una acción en Then y Else, en otras palabras, nunca llenen espacios con la acción "Do Nothing"(NO HACE NADA -.-)

Ejemplos de usos de If's:
-Podemos tener una habilidad que dañe o cure al objetivo si es aliado o enemigo usando un If
-En muchas(por no decir todas) habilidades definidas por un tiempo(buffs) o distancia(misiles), se utiliza un if para separar entre las acciones si está activa la habilidad (mover el misil, provocar que el buff dañe) y las acciones de "nulleo" (destruir el misil, remover el buff)
-Puede ser usado como filtro (por ejemplo, con unidades en un grupo, diferenciar las que tienen menos de 500 de vida con las que tienen 500 o más)
-Muchas cosas, si quieres aprender a programar, lo segundo que te enseñarán es exactamente esto
Spoiler:
 
Los If's son muy útiles, pero como a toda acción, hay formas correctas e incorrectas de usarlo, y esta, es incorrecta ya que la función Arithmetic nos sirve para evitar esta clase de If's(Que son poco eficientes, feos de leer, tediosos de hacer,etc). Recuerden, que la eficiencia es casi tan importante como que funcione.


¿Cómo usar un If?
Es muy sencillo, pero vamos a ver detalladamente para que nadie se pierda.



Con eso, tenemos nuestro If en nuestro detonador así

[gui]Detonador vacio
   Acontecimientos
   Condiciones
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
           Entonces: Acciones
           Otros: Acciones
[/gui]

Y ahora colocamos las condiciones que queramos, yo quiero una condición random.

[gui]Detonador vacio
   Acontecimientos
   Condiciones
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Random integer number between 1 and 10) Mayor que (>) 3
           Entonces: Acciones
           Otros: Acciones
[/gui]

Esta condición, devolverá verdadero si un número aleatorio entre 1 y 10 es mayor a 3, falso si es igual o menor a 3

[gui]Detonador vacio
   Acontecimientos
   Condiciones
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Random integer number between 1 and 10) Mayor que (>) 3
           Entonces: Acciones
               Partida - Display to (All players) the text: Hello World!
           Otros: Acciones
               Partida - Display to (All players) the text: No greeting for you
[/gui]

Si es verdadera, pondremos un cartel que diga "Hello World!" caso contrario, no hay saludo para ti.

Y así se crea un If para tu detonador, solo hay que saber que condición agregar, y que es lo que quieres hacer.

Bueno, paguenme e_e



Buenos y malos usos del If/Then/Else

Hay demasiados usos para un If, pero vamos a colocar algunos y espero que sirvan para cubrir la mayoría de sus necesidades. Antes de empezar con los ejemplos uso variables para definir que tipo de valor colocan allí, no significa que ustedes deban hacerlo también, todos los valores son modificables y..

TODOS LOS EJEMPLOS COLOCADOS TENDRÁN UNICAMENTE EL IF Y SUS ACCIONES, ASÍ QUE DEBEN APLICARLOS EN SUS DETONADORES NO USAR LOS DETONADORES DE EJEMPLO

a. Buenos usos del If/Then/Else

Buen Uso Nº 1
Spoiler:
 

[gui]Diferenciar entre unidades aliadas y enemigas
   Acontecimientos
   Condiciones
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Unidad belongs to an enemy of Jugador) Igual a (==) True
           Entonces: Acciones
               Unidad - Cause Ninguna unidad to damage Unidad, dealing 500.00 damage of attack type Conjuros and damage type Normal
           Otros: Acciones
               Unidad - Set life of Unidad to ((Percentage life of Unidad) + 10.00)%
[/gui]


------------------------------------------------------------------------------------------------------------------


Buen Uso Nº 2
Spoiler:
 

[gui]Unidad tiene buff
   Acontecimientos
   Condiciones
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Unidad has buff Buff) Igual a (==) True
           Entonces: Acciones
               Unidad - Cause Ninguna unidad to damage Unidad, dealing 500.00 damage of attack type Conjuros and damage type Normal
           Otros: Acciones
               Set Punto = (Position of Unidad)
               Unidad - Create 1 UnidadTipoDummy for Jugador at Punto facing Vista edificio predeterminada (270.0) degrees
               Unidad - Add Habilidad to (Last created unit)
               Unidad - Add a 1.00 second Gené️rico expiration timer to (Last created unit)
               Unidad - Order (Last created unit) to Humano Hechicera: Ralentizar Unidad
               Custom script:   call RemoveLocation(udg_Punto)
[/gui]


------------------------------------------------------------------------------------------------------------------


Buen Uso Nº 3
Spoiler:
 

[gui]Hay al menos una unidad en grupo
   Acontecimientos
   Condiciones
   Acciones
       Set Punto = (Position of UnidadMisil)
       Set GrupoUnidad = (Units within 110.00 of Punto matching (((Matching unit) belongs to an enemy of Jugador) Igual a (==) True))
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Number of units in GrupoUnidad) Mayor que (>) 0
           Entonces: Acciones
               Set Unidad = (Random unit from GrupoUnidad)
               Unidad - Cause Ninguna unidad to damage Unidad, dealing 500.00 damage of attack type Conjuros and damage type Normal
           Otros: Acciones
       Custom script:   call RemoveLocation(udg_Punto)
       Custom script:   call DestroyGroup(udg_GrupoUnidad)
[/gui]

Cabe remarcar, que las acciones de remover leaks están fuera del If, esto es así porque siempre se debe remover los leaks, porque eso no es condicional.


------------------------------------------------------------------------------------------------------------------


Buen Uso Nº 4
Spoiler:
 

[gui]Unidad o Heroe
   Acontecimientos
   Condiciones
       (Unidad is Una estructura) Igual a (==) False
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Unidad is Un heroe) Igual a (==) True
           Entonces: Acciones
               Heroe - Modify Fuerza of Unidad: Sustraer 1
               Heroe - Modify Agilidad of Unidad: Sustraer 1
               Heroe - Modify Inteligencia of Unidad: Sustraer 1
           Otros: Acciones
               Heroe - Modify Inteligencia of Ninguna unidad: Añadir 1
               Heroe - Modify Agilidad of Ninguna unidad: Añadir 1
               Heroe - Modify Fuerza of Ninguna unidad: Añadir 1
[/gui]

Extraño If, pero eso salió xD
Nota: Generalmente no tendrán la variable con un valor en las condiciones, así que allí la mayoría de las veces irá alguna de las funciones de unidades como "triggering unit"


b. Malos usos del If/Then/Else

Como hay formas buenas de usar una acción, hay formas malas de hacerlo, y en el If/Then/Else, hay bastantes,como la que pusimos arriba, algunas son las siguientes:

Mal Uso Nº 1
Spoiler:
 

[gui]If de mas
   Acontecimientos
   Condiciones
       (Unidad is dead) Igual a (==) False
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Unidad is Un heroe) Igual a (==) False
               (Unidad has buff Buff) Igual a (==) False
           Entonces: Acciones
               -------- Hacer cosas, no es necesario que ponga algo aquí realmente. --------
           Otros: Acciones
[/gui]

Esto se soluciona simplemente eliminando el if, y subiendo sus condiciones

[gui]If de mas arreglado
   Acontecimientos
   Condiciones
       (Unidad is dead) Igual a (==) False
       (Unidad is Un heroe) Igual a (==) False
       (Unidad has buff Buff) Igual a (==) False
   Acciones
       -------- Hacer cosas, no es necesario que ponga algo aquí realmente. --------
[/gui]


------------------------------------------------------------------------------------------------------------------


Mal Uso Nº 2
Spoiler:
 

[gui]Serie de Ifs
   Acontecimientos
   Condiciones
       (Unidad is dead) Igual a (==) False
   Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 1
           Entonces: Acciones
               Partida - Display to (All players) the text: Uno!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 2
           Entonces: Acciones
               Partida - Display to (All players) the text: Dos!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 3
           Entonces: Acciones
               Partida - Display to (All players) the text: Tres!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 4
           Entonces: Acciones
               Partida - Display to (All players) the text: Cuatro!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 5
           Entonces: Acciones
               Partida - Display to (All players) the text: Cinco!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 6
           Entonces: Acciones
               Partida - Display to (All players) the text: Seis!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 7
           Entonces: Acciones
               Partida - Display to (All players) the text: Siete!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 8
           Entonces: Acciones
               Partida - Display to (All players) the text: Ocho!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 9
           Entonces: Acciones
               Partida - Display to (All players) the text: Nueve!
           Otros: Acciones
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Numero Igual a (==) 10
           Entonces: Acciones
               Partida - Display to (All players) the text: Diez!
           Otros: Acciones
[/gui]

Esto se soluciona seteando una serie de variables en Map Initialization (un deto con ese evento) y corrigiendo así

[gui]Serie de If arreglado INIT
   Acontecimientos
       Map initialization
   Condiciones
   Acciones
       Set SerieDeIfString[1] = Uno!
       Set SerieDeIfString[2] = Dos!
       Set SerieDeIfString[3] = Tres!
       Set SerieDeIfString[4] = Cuatro!
       Set SerieDeIfString[5] = Cinco!
       Set SerieDeIfString[6] = Seis!
       Set SerieDeIfString[7] = Siete!
       Set SerieDeIfString[8] = Ocho!
       Set SerieDeIfString[9] = Nueve!
       Set SerieDeIfString[10] = Diez!
[/gui]

[gui]Serie de If arreglado
   Acontecimientos
   Condiciones
   Acciones
       Partida - Display to (All players) the text: SerieDeIfString[Numero]
[/gui]

Recuerden que aplica para casi cualquier cosa.


------------------------------------------------------------------------------------------------------------------


Mal Uso Nº 3
Spoiler:
 

[gui]If con variables locales
   Acontecimientos
   Condiciones
   Acciones
       Custom script:   local unit udg_Unidad
        Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Level of (Ability being cast) for Unidad) Mayor que (>) 0
           Entonces: Acciones
               -------- Hacer cosas... --------
           Otros: Acciones
[/gui]


Función Arithmetic

Esta función es una función muy, muy importante, sirve para hacer matemáticas básicas (sumar, restar, multiplicar, dividir). Y como siempre nos dicen en el colegio "Sin matemáticas, solo son editores que usan muchos IFs innecesarios", No? Solo me lo decían a mí? Okeyy .-.

Esta función toma 2 valores numéricos y una operación básica. Ahora, cada función estará encerrada en un paréntesis, o sea, si tengo 2 + 6 + 9. Tengo que usar 2 veces la función arithmetic (como toma un valor numérico y devuelve uno numérico, podemos usar arithmetic dentro de esta)

Traducido nos quedaría así: (2 + (6 + 9))

Es importante saber como funciona esto, en la suma no importa, pero si tuvieramos 2 + 6 * 9, hay 2 formas posibles de hacerlo, con 2 resultados diferentes.

(2 + (6 * 9)). Dará igual a 2 + 54, o sea 56, en cambio

((2 + 6) * 9). Dará igual a 8 * 9, osea, 72. Así que sepan que el orden en que colocan las funciones dentro de otras importa.

Espero que mi explicación se haya entendido.. cualquier cosa comenten si no entienden.

Ahora, ejemplos de Arithmetic (pondré todos en un detonador xD)

[gui]Muchos ejemplos
   Acontecimientos
   Condiciones
   Acciones
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- Multiplicar un valor por el nivel de la habilidad --------
       Set Real = (60.00 x (Real((Level of Habilidad for Unidad))))
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- Una variante de esta, para no multiplicar el valor base, sino agregar se hace así --------
       Set Real = (20.00 x (50.00 x (Real((Level of Habilidad for Unidad)))))
       -------- Así, sumamos 50 por nivel. Con un valor base de 70. Es fácil hacerlo, simplemente saben por que valor quieren sumar --------
       -------- tomen su base, resten el valor por nivel a la base y coloquen en primer té️rmino, el resto es fácil de deducir --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- Deducir el porcentaje de un valor --------
       Set Real = ((Vida of Unidad) x 0.80)
       -------- Nos devuelve el 80% de la vida actual de la Unidad --------
       -------- Es fácil sacar el porcentaje de un valor, simplemente lo multiplican por X valor sabiendo que 1 = 100% --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- ---------------------------   Funciones Matematicas aparte   --------------------------------------------------------------- --------
       -------- Angulo de Punto a otro --------
       Set Real = (Angle from Punto to Punto_2)
       -------- Siempre el ángulo debe ir desde el Punto Inicial hacia el Punto Final (o sea, de donde estás, hacia donde quieres mirar) --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- Conversión Integer a Real --------
       Set Real = (Real(Numero))
       Set Numero = (Integer(Real))
       -------- Tambié️n tiene al revez, conversión Real a Integer, esto nos sirve para usar valores que no se incluyen en las listas correspondientes --------
       -------- Ejemplos de conversiones de Real a Integer --------
       -------- No muchos, gralmente se trabaja más con reales xDD --------
       -------- Ejemplos de conversiones de Integer a Real --------
       -------- Level of Ability for Unit: Esta se suele usar a la hora de setear X valor real (daño, distancia, tiempo) en relación al nivel de su habilidad --------
       -------- For Loop Integer A o B: Yo lo uso a la hora de colocar los ángulos en relación a los loops correspondientes --------
       -------- Y yo basicamente solo uso esos --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------
       -------- Random --------
       Set Real = (Random real number between 0.00 and 1.00)
       Set Numero = (Random integer number between 1 and 10)
       -------- Para cualquier cosa aleatoria --------
       -------- Si se quiere un ángulo o un porcentaje random, se aconseja usar la función Random Number de 0.00 a 360.00 y de 0.00 a 100.00 respectivamente --------
       -------- Esto es así por cuestiones de eficiencia --------
[/gui]


Con esto damos por finalizado este pequeño curso de acciones importantes, quizás dé algo de GUI-JASS (custom script xD) en el futuro para que usen Loops e Ifs de JASS que de verdad son útiles en ocasiones(más que nada los loops).

Y aquí un mapa tutorial con lo colocado en el tutorial para que puedan mirar por ustedes mismos con más facilidad.

https://mega.co.nz/#!z8YTXCiA!NfTBcwJenC6wh1xIxAjigS0cdVFomaZV6MrkaMsNEeg


Última edición por Marcos_M el Sáb Jul 14, 2018 10:51 pm, editado 6 veces
Volver arriba Ir abajo
En línea
Darkrasgun
Aprendiz


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

Mensajes Mensajes : 17
Reputación Reputación : 1
Monedas de oro : 57
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: Curso de Acciones Importantes I: El If/Then/Else Dom Oct 20, 2013 8:39 pm

Buen tutorial, aunque varias cosas ya sabia por practica, ayudaran mucho a algunos que no saben algunas cosas especificas aclaradas en esta guia Como lo son las variables locales dentro de un IF, Como reducir usos de if consecutivos usando variables etc. +REP
Volver arriba Ir abajo
Piru
Soldado


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

Mensajes Mensajes : 68
Reputación Reputación : 4
Monedas de oro : 261
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: Curso de Acciones Importantes I: El If/Then/Else Dom Oct 20, 2013 10:53 pm

Muy buen tutorial Marcos, sinceramente se te agradece. Me va aservir mucho la parte del random Very Happy
+rep
Volver arriba Ir abajo
Karnwield
Capitán
Karnwield


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

Mensajes Mensajes : 233
Reputación Reputación : 28
Monedas de oro : 581
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: Curso de Acciones Importantes I: El If/Then/Else Dom Oct 20, 2013 11:27 pm

Un buena ayuda para los nuevos en el WE o los que no saben manejar mucho de esto. +rep 
Volver arriba Ir abajo
VicALV
Capitán
VicALV


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

Mensajes Mensajes : 141
Reputación Reputación : 18
Monedas de oro : 643
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: Curso de Acciones Importantes I: El If/Then/Else Dom Jul 31, 2016 10:42 am

Muy BUen APORTE!!!!
Volver arriba Ir abajo
Amras
Soldado
Amras


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

Mensajes Mensajes : 111
Reputación Reputación : 7
Monedas de oro : 278
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: Curso de Acciones Importantes I: El If/Then/Else Lun Ago 01, 2016 1:04 pm

Aunque sé de If/Then/Else, siempre se puede aprender algo nuevo! ¡Buen aporte!

No olvidar. +rep
Volver arriba Ir abajo
Contenido patrocinado




Mensaje(#) Tema: Re: Curso de Acciones Importantes I: El If/Then/Else

Volver arriba Ir abajo
 

Curso de Acciones Importantes I: El If/Then/Else

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

 Temas similares

-
» Por todas esas personas importantes.... [Minitrama (1ª Parte) "Equipo 1": Elith, Shou Kudirickimon y Zack Fair]
» Flyboys [DVDRip]
» Curso básico de prostitución, empleo garantizado'
» [Ficha] Charles de Gaulle 1890-1970
» Por cada suspenso 1 consumición gratis

Permisos de este foro:No puedes responder a temas en este foro.
Warcraft III - WorldEditor :: Academia :: Area GUI :: Tutoriales Varios-