World Edit

WorldEdit-warcraft Foro de discución sobre creación de mapas de Wc3 en donde aprenderás a hacer tus propios mapas.
 
ÍndicePortalCalendarioFAQBuscarMiembrosGrupos de UsuariosRegistrarseConectarse
Nuevos Mensajes
Nuevos Mensajes
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Últimos temas
» crear un skill
Mar Oct 11, 2016 11:35 am por YoEditor

» Como hacer alianzas y treguas mediante botones By cristian5000
Lun Jun 01, 2015 9:55 pm por vizdream

» Tutorial IA (by Tobi)
Vie Abr 03, 2015 8:34 pm por sargeras3000

» Crear una habilidad
Dom Feb 01, 2015 4:21 pm por roman12

» Creando Campaña Nueva
Miér Ago 06, 2014 8:44 am por Unicamente Rock

» Fuckdota!-The LegenD
Lun Oct 21, 2013 11:17 pm por klanz

» Vengeful Spell Pack v1.0 > By KingArmor1
Miér Sep 11, 2013 3:45 pm por Criticalxd

» Una manera de crear edificios
Miér Mayo 02, 2012 1:01 pm por JV

» Naruto! new
Dom Nov 06, 2011 1:20 pm por fedecabo

Mejores posteadores
cristian5000
 
Luckyhell
 
Tobi
 
santiago24
 
zudokuxd10
 
Thrall
 
King46
 
Frankman
 
ebrasca
 
†perseus†
 
Palabras claves
Septiembre 2017
LunMarMiérJueVieSábDom
    123
45678910
11121314151617
18192021222324
252627282930 
CalendarioCalendario

Comparte | 
 

 [Tutorial] JASS Basico

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
cristian5000
Admin
Admin
avatar


Juego Blizzard Favorito : Warcraft 3
Alianza

Vacío Vacío Vacío Vacío Vacío Vacío Mensajes Mensajes : 139
Oro Oro : 309
Reputación Reputación : 36
Fecha de inscripción : 30/10/2010
Edad : 20
Localización : Mi compu xD

MensajeTema: [Tutorial] JASS Basico   Sáb Nov 13, 2010 5:22 pm

Bueno aquí les traigo un "tutorial" para empezar a programar en el WE con JASS, he procurado ser lo más claro y sencillo posible para que no se pierdan. Pues bien, empecemos.

------- Preguntas frecuentes acerca de JASS -------


¿Por que debo usar JASS si ya se editar con GUI?
Muchos se hacen esa pregunta antes de siquiera intentar entender JASS, y la respuesta a esto es muy simple, JASS es por defecto el lenguaje nativo del Warcraft y GUI es una Grafic User Interface y existe únicamente con el propósito de hacer más facil el uso del Editor de Detonadores para los MapMakers de Warcraft, sin embargo no todo es felicidad pues GUI puede que "paresca" más facil que JASS pero no lo es (es más rápido tipear que andar haciendo miles de "clics"), además de esto GUI impone muchas limitaciones en cuanto a funciones, performance, funcionabilidad, etc. En cambio JASS es mucho más rápido de ejecutar en Warcraft, por consecuencia el código en JASS es más veloz y optimo que GUI, además no tiene limitaciones (salvo las que han impuesto ciertos MapMakers), otra de las ventajas es el uso de las variables locales, la posibilidad de tener distintos eventos cada uno con distintas funciones y condiciones, etc. El único problema es que JASS es un lenguaje "case sensitive", es decir distingue entre mayúsculas y minúsculas y esto a veces puede hacer cometer errores de tipero a los MapMakers.

¿Que ventajas me da JASS?

El uso de variables locales
permite crear spells MUI, da la posibilidad de asignar valores a las variables al momento de declararlas, evita algunos leaks que se pueden producir usando GUI.

Velocidad:
JASS es por defecto el lenguaje interno del Warcraft, por ende programar lo que uno quiera en este lenguaje es más rapido y facil de "leer" para el mismo Warcraft, en pocas palabras es mucho menos pesado que GUI.

Multiples Eventos, Acciones, Condiciones en un mismo Detonador
Son las que comunmente conocemos como "partes" de un Detonador pero no son nada más que los nombres de los componentes de la "plantilla" que usa GUI para formar los Detonadores (Evento, Condición y Acciones), con JASS no solo te limitas a tener un solo grupo de instrucciones (Acciones) por Detonador, puedes tener varias "Acciones", "Condiciones" y "Eventos" en un mismo Detonador, cada uno independiente del otro.

El uso de funciones "ocultas" y el GetLocalPlayer()
en GUI hay varias funciones a las cuales no podemos acceder, lo cual es una de las limitaciones que tiene, sin embargo con JASS se pueden usar todas estas funciones, el uso del GetLocalPlayer(), el cual permite crear efectos especiales, textos flotantes, imágenes, etc. para un solo jugador en específico o un grupo de estos, esto puede causar Desincronización (Desync) lo cual ocasiona problemas en el juego y puede llegar a causar "glitches", si es mal usado.

Evitar el uso de funciones BJ's
En GUI la mayoría de "acciones" (funciones) son BJ's (Blizzard JASS), están diseñadas para el uso de GUI por lo cual no es para nada recomendable usarlas en JASS. Estas a veces son Absurdas e innecesarias, ocasionando una pérdida de eficiencia y rendimiento del código, lo mejor siempre es usar funciones nativas ya que son más rápidas que las BJ.

¿Es dificil aprender JASS?
NO, lo único que debes aprender son las estructuras de control y las estructuras anidadas que son muy basicas (si tienes experiencia en algún otro lenguaje de programación esto ya lo sabes de memoria), las funciones las puedes encontrar en herramientas para el WE (Editores de jass), el que usaremos en este tutorial se llama JassCraft el cual ayuda a encontrar cualquier función de JASS, además permite Jassear mucho más facil diferenciando con distintos colores las variables, funciones, strings, números, etc.
Como ven ni siquiera es necesario saberse de memoria las funciones, con el tiempo recordarán la mayoría de estas

¿Si paso un Detonador a Texto Personalizado (JASS) es mejor?
NO, al pasar a JASS un Detonador en GUI lo único que se hace es convertirlo a JASS pero usando las funciones BJ's y estructuras de codigo innecesarias generadas por el world Edit para GUI como les mostraré luego, además genera nombres absurdos y confusos a las funciones, crea otras donde no es necesario y demás cosas, es decir es casi igual a dejarlo en GUI

¿Tener los Detonadores en JASS reduce el tiempo de carga del mapa?
Si, por obvias razones, usando JASS te ahorras muchas lineas de codigo innecesario que genera el WE al pasar los Detonadores de GUI a JASS al momento de cargar el mapa, esto reduce en algo el tiempo de carga y el mismo peso del mapa, además evitas crear varios Detonadores en GUI para una sola habilidad.




Diferencia de Detonadores en GUI y JASS


Aquí resaltaré las diferencias entre un Detonador en GUi y uno en JASS.

Detonador en GUI


Está dividido en 3 partes:
1) Acontecimientos - Son los "Eventos" del Detonador, lo que hace que el Detonador se ejecute.
2) Condiciones - La(s) condicion(es) que determinan si el Detonador realizará sus acciones o no.
3) Acciones - Son las instrucciones que el Detonador realizará al momento que sea detonado.
Solo puede haber un grupo de Evento, Condición y Acciones.
Tiene 2 Opciones de Detonador:
1) Activado - Esto activa o desactiva el Detonador (para el WE y en el juego)
2) Activado al Principio - Determina si el Detonador estará activado al comenzar el mapa (para el juego)


Detonador en JASS

Esta es la parte que más nos interesa, a diferencia de GUI que está limitado a tener solo 3 partes JASS puede tener muchas más, en JASS un Detonador está compuesto solo de funciones y funciones constantes, además tiene las siguientes opciones:


Activado - Igual que en GUI, activa o desactiva el Detonador para el WE y el Warcraft
Continuar con Iniciación de Mapa - Cumple la misma función que el Evento (Acontecimiento) "Map Iniciation" en GUI.




Funciones


Que es una función?
Una función es una instrucción que se le da al WE para que ejecute en Warcraft, las funciones son todo lo que hace un Detonador en el juego. Realizan una tarea especifica. Pueden tomar valores (argumentos) y/o devolver un valor.

En Warcraft existen funciones que están predefinidas en el WE, están divididas en 3 grupos:
Funciones Nativas (Common JASS)
Son las funciones Nativas del Warcraft, las que debemos usar al momento de JASSear porque son más rápidas que las BJ, el Warcraft las procesa mas raudamente que otras.
El nombre de las funciones en JASS tiene relación con lo que hace o otorga la función, es decir la función que mata a una unidad tiene el nombre KillUnit que hace referencia directa a lo que la función realiza.
Funciones BJ (Blizzard JASS)
Como ya dije antes son funciones orientadas al uso de GUI, son más lentas que las nativas por eso la baja performance de hacer Detonadores en GUI.
Funciones Personalizadas
Estas funciones las puedes definir tu mismo en el Custom Script del mapa para luego llamarlas cuando las requieras.

las funciones primero se declaran en el mismo Detonador (Si se van a usar solo en ese Detonador) o en el Custom Script (si se van a usar en varios Detonadores)

CODIGO: SELECCIONA TODO
function JASS takes nothing returns nothing

endfunction

Esta función no tiene parámetros (no toma valores) y tampoco devuelve alguno

Luego pueden ser llamadas para que se ejecuten, cuando uno quiera.
CODIGO: SELECCIONA TODO
call JASS()

Como esta función no toma valores ni devuelve alguno entonces notarán que en el parentesis no hay argumentos "()". En realidad está función no hace nada.

Las funciones pueden ser simples, es decir que cumplen su función directamente sin depender de otras funciones o pueden depender de otras funciones como en estos ejemplos:
CODIGO: SELECCIONA TODO
function Simple takes nothing returns nothing
endfunction

funcion simple que no hace nada.

CODIGO: SELECCIONA TODO
function NoSimple takes unit U returns nothing
call KillUnit(U)
endfunction

Esta función llama a otra función (una nativa) al momento de ejecutarse o ser llamada, tambien puede llamar a otras funciones complejas. Como ven tiene como parámetro un valor del tipo "unit", más adelante se los explicaré mejor.

Importante - Recordar que antes de llamar una función personalizada primero debes declararla en lineas anteriores (si está en el mismo Detonador) o en el Custom Script, no puedes llamar a una función que aún no ha sido declarada.
No pueden haber 2 funciones con el mismo nombre dentro de un Detonador o en el Custom Script.

Función que toma valores o/y devuelve un valor
Las funciones pueden tomar valores de varios tipos y devolver uno. La mayoría de esos "tipos" son también "tipos" de variables. Una función puede tomar como argumento un valor del tipo real y devolver uno del tipo entero sin ningún problema, como también puede puede NO devolver ningún valor.

Aquí un ejemplo de una función que toma valores (Argumentos)
CODIGO: SELECCIONA TODO
function Ejemplo takes effect F returns nothing
call DestroyEffect(F)
endfunction

Un ejemplo de función que devuelve y toma un valor
CODIGO: SELECCIONA TODO
function AreaDeTriangulo takes real altura, real base returns real
return (altura*base)/2
endfunction

Algunas cosas más sobre las funciones:
Cuando una función devuelve un valor del tipo "Boolean" puede usarse como la condición de un Detonador o como un BoolExpr (Expresión de Booleana), o simplemente como un simple Boolean (True o False)
Las funciones pueden tomar varios argumentos, pero solo pueden devolver uno.
Una función no necesariamente debe retornar un valor del mismo tipo que el que toma.
una función compleja que devuelve o no devuelve valor puede ser interrumpida para evitar las siguientes instrucciones usando el return

CODIGO: SELECCIONA TODO
function SHOCK takes unit U returns nothing
return
call KillUnit(U)
endfunction

Esta función al parecer debería matar a la unidad "U", pero no lo hará porque se ha antepuesto el "return" el cual como ya dije antes ignora las demás instrucciones de la función dándola como terminada.




Variables


En warcraft hay 2 tipos de variables las Variables Globales y las variables Locales.

Variables Globales
las variables globales deben ser creadas (declaradas) en el Editor de variables, el cual está en el Editor de Detonadores. Al momento de crear una variable global puedes asignarle un valor que depende del tipo de variable que estes creando, pero ese valor es uno de una lista limitada de valores que pueden tomar.
En la siguiente imagen se pueden ver la lista de variables locales y los tipos.

Variables Locales
Estas variables solo son usadas dentro de una función, es decir no puedes crear una variable A en una función X y luego querer usar esa variable en otra función Y, como en el siguiente ejemplo:
CODIGO: SELECCIONA TODO
function Y takes nothing returns nothing
call KillUnit(VarLoc) //Se intenta usar la variable declarada en la función de abajo
endfunction

function X takes nothing returns nothing
local unit VarLoc //Aqui se está creando una variable local del tipo "unit"
endfunction


La forma de declarar una variable local en una función es la siguiente:
local =

Nota: Si no se va a asignar un valor a la variable que se está declarando al momento de crearla entonces se ignora el "=" y el valor de la variable

Para "colocar" (asignar o cambiar) el valor de una variable se hace de la siguiente manera:

set =

Las variables locales deben "setearse" a null (ninguno) al final de la función para evitar los Memory Leaks

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


Las variables sirven para guardar valores de cualquier tipo, los valores los voy a poner de la siguiente manera:

Handles
son Aquellos "objetos" existen en el warcraft, estos ocupan un especio significativo en la memoria a comparación de los NO Handles. Los handles son todos los tipos de variable u objeto que existen en el warcraft a exepción de los No Handles que les mostraré a continuación.

No Handles
Los no handles son valores que no ocupan espacio insignificante o despreciable en la memoria, los No handles son los valores del tipo:
(Real, Integer, string y Boolean)

Todo los valores/objetos restantes en el warcraft (a excepción de algunos) son Handles.

Tipos de Variables
Hay varios tipos de variables en warcraft, las más usadas (comunes) son las siguientes:

unit guarda cualquier tipo de unidad.
boolean guarda valores "true" o "false"
integer guarda valores enteros, también Rawcodes (ID's de habilidades, unidades, buffs, etc)
real guarda valores reales (punto flotante).
effect guarda un efecto especial del juego.
location guarda un punto específico del mapa.
group guarda un grupo de unidades.

Gracias a las variables locales es posible hacer Spells MUI, los cuales pueden ser casteados por varias unidades sin ningún problema, o hacer ciertas cosas que con GUI resultan más tadiosas y generan variables arrays. Sin embargo hay un pequeño problema con estas variables, no pueden ser usadas fuera de las funciones donde fueron declaradas, como en el ejemplo anterior que puse. Lo cual limita mucho la creación de Detonadore/Spells.

Como ya sabemos todos las variables usadas en una función (solo los handles) deben ser seteadas a "null" para evitar memoty Leaks, pero a veces ocurre lo siguiente:

CODIGO: SELECCIONA TODO
function MemoryLeak takes nothing returns nothing
local group G = CreateGroup() //Cree una variable del tipo grupo
set G=null //Aquí supuestamente se está eliminando el grupo, pero NO es así
endfunction

Hay cierta clase de Handles que no solo deben ser "nullificados" sino tambien destruidos cuando ya no se necesiten, para eso y para cada tipo de estos handles hay una función nativa. Por lo tanto en la tercera linea del codigo NO se está destruyendo el grupo, el grupo ya está creado, lo único que se está haciendo es "setear" la variable "G" a null.
Para destruir el grupo se usa la función "DestroyGroup", que toma como argumento un valor del tipo group y no retorna valor, es una función nativa del Warcraft.

El codigo correcto para destruir el grupo una vez usado sería el siguiente:
CODIGO: SELECCIONA TODO
function MemoryLeak takes nothing returns nothing
local group G = CreateGroup() //Cree una variable del tipo grupo
call DestroyGroup(G) //Destruye el grupo
set G=null //Libera la variable
endfunction

Algunos de los Handles que requieren ser destruidos una vez usados son los siguientes:

Handle / función
group / DestroyGroup
location / RemoveLocation
effect / DestroyEffect
boolexpr / DestroyBoolExpr
taexttag / DestroyTextTag
timer / DestroyTimer
trigger / DestroyTrigger

las variables que no sean destruidas generan Memory Leaks, si creas un grupo y no lo destruyes entonces se quedan guardado en la memoria hasta que se finalice la partida, lo cual con el tiempo de juego y si se hace repetidas veces genera lag.

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


Variables Array
las variables locales array son como las globales, pueden almacenar varios valores del mismo tipo en "indices", son tambien conocidas como "arreglos", son de gran utilidad en ciertas ocaciones, en jass tienen la siguiente forma:

local array

Para crear una variable local array

set [] =

Para setear una variable local array

Nota - Como podrán ver las variables locales array no pueden ser seteadas al momento de crearlas, esto debe hacerse luego de declararlas.




Estructuras de Decisión y Repetición


Casi siempre es necesario recurrir a estructuras de decisión y/o repetición en un Detonador a fin de lograr lo que uno quiere hacer en el warcraft. Estas estructuras existen en todo lenguaje de programación y JASS no es la excepción, a comparación de GUI su uso es mucho más dinamico y evita crear funciones innecesarias.

Estructuras de Decisión
Sirven para tomar decisiones en un Detonador sobre si se van a realizar ciertas funciones o no, también sirven para condicionar a que distintos tipos de hechos ocurran, en fin tienen varias formas de usarse.

If Simple

if then

endif

Este es un If simple, verifica si una condición (Expresión Booleana) es verdadera o Falsa (valores True o False), si la Expresión Booleana es verdadera entonces se ejecutan las instrucciones dentro de la estructura, caso contrario no pasa nada.

If Then Else

if then

else

endif

Es casi igual al If simple pero tiene un "Else" en el cual se pueden colocar las instrucciones que se quieran ejecutar si la Expresión Booleana es Falsa.

If Then Elseif

if then

elseif then

endif

Es casi igual al If simple pero tiene un "Else" en el cual se pueden colocar las instrucciones que se quieran ejecutar si la Expresión Booleana es Falsa.

Not

Not()

Esto sirve para negar una Expresion Booleana, cambia el valor de la expresión a lo contrario, es poco usado por que resulta innecesario la mayoria de veces, ejemplo:

CODIGO: SELECCIONA TODO
if A==B then
endif

CODIGO: SELECCIONA TODO
if not(A=!B) then
endif

Los 2 codigos son hacen lo mismo, o siempre serán un mismo valor (True o False), sin embargo son distintos.

Estructuras de Repetición
Sirven para realizar funciones repetitivas, como recorrer una variable array, las unidades de un grupo, los jugadores de un grupo y cosas parecidas. Los que hay son el "loop" y el "forgroup"

Loop

loop
exitwhen
endloop

Este es el "loop" se usa para repetir acciones las veces que uno quiera, las funciones dentro del "loop" seguirán ejecutandose hasta que la "Expresión Booleana" del exitwhen sea True.
El exitwhen puede ir en cualquier parte del "loop" su ubicación depende de donde quieres que el "loop" verifique si es verdadera la "Expresion Booleana" para terminar el loop.

ForGroup

call ForGroup(,)

Esto mas que una estructura de repetición es una función, lo que hace es "pickear" cada una de las unidades de un gropo (que usa como argumento) y ejecutar un mismo codigo (FuncCode) por cada unidad, en el FuncCode puedes obtener la unidad que está siendo "pickeada" mediante la función GetPickedUnit() que no toma ningún valor y devuelve a la unidad del grupo siendo "pickeada".




Detonador!!!


Bueno ya que hemos aprendido lo que son las funciones, las variables y las estructuras de desición/repetición de JASS estamos listos para dar el siguiente paso, aprender a hacer Detonadores en JASS. Siempre que crees un Detonador "fijo" directamente en el WE, este saldrá en GUI por defecto, para hacerlo JASS debes convertirlo a "Texto Personalizado"



En JASS un Detonador está compuesto únicamente de funciones y funciones constantes (poco usadas), Lo siguiente es una comparación de los componentes de un Detonador en GUI y lo que son al pasarlos a JASS:

Acontecimiento - es la función que agrega uno o más "Evento"(s) al Detonador cuando cargar el mapa.
Condición - Es simplemente una función que devuelve valor Boolean (True o False), solo si es true el Detonador se ejecuta normalmente.
Acciones - Es una función "compleja", en la que hay varias o pocas instrucciones (otras funciones), estructuras de decisión, repetición, variables, etc... Es todo lo que el Detonador hace cuando de ejecuta.

Importante!
Cada Detonador debe tener una función con nombre "InitTrig_MiDetonador" (sin comillas) esta carga el Detonador (Es decir lo crea en el juego, esa función se ejecuta al momento de cargar el mapa(no se ve en GUI), y cuando lo hace "declara" al Detonador, le agrega su función Evento, Condición y Acción. Esta función debe estar despues de cualquier otra función declarada en el Detonador.
Lo que está en verde no varia en el nombre de esa función para todo los detonadores, el resto si. Y cambia automaticamente cada vez que le cambias el nombre a tu Detonador en el recuadro azul que muestra la imagen.



El Orden de las funciones en un Detonador es importante, como ya vimos la función principal "IniTrig_MiDetonador" va al final, pero las que están antes en que orden deben ir?.
Para ordenar las funciones en un Detonador solo se toman 2 aspectos:

Una función jamás puede llamar a otra función que aún no ha sido declarada, en cristiano: no puedes usar una función en el trigger a menos que dicha función esté escrita antes de la función en la que la quieres llamar o ejecutar.

CODIGO: SELECCIONA TODO
function A takes nothing returns nothing
call B()
endfunction

function B takes nothing returns nothing

endfunction

Aqui un claro ejemplo de lo que no se debe hacer, llamar una función antes de declararla!
EL otro aspecto depende de cada uno, es que algunos prefieren ordenar sus funciones de una forma y otros de otra, siempre y cuando cumplan con lo dicho anteriormente es valido.

Cuando el mapa se compila se crean variables para los triggers, cada una de estas variables globales hacen referencia a cada Detonador que tenga el mapa. Para un Detonador de nombre MiDetonador la variable global que se creará para utilizar dicho detonador en el codigo de JASS es:
gg_trg_MiDetonador

Lo de color azul cambiará cada vez que cambies el nombre al Detonador, y todas las funciones llamadas para Iniciar el Detonador en "InitTrig_MiDetonador" cambiarán al nuevo nombre.



Ejemplo de como está estructurado un Detonador de nombre "soy noob"
CODIGO: SELECCIONA TODO
function soy_noob_Condition takes nothing returns boolean
return true // devuelve una "Expresión Booleana"
endfunction

function soy_noob_Main takes nothing returns nothing
local unit u=GetTriggerUnit()
local real x=0.
local real y=0.
call SetUnitPosition(u,x,y)
set u=null
endfunction

function InitTrig_soy_noob takes nothing returns nothing
local integer i=0
local player p=null
local trigger t=gg_trg_soy_noob
set t=CreateTrigger()
call TriggerAddAction(t,function soy_noob_Main)
call TriggerAddCondition(t,Condition(function soy_noob_Condition))
loop
set p=Player(i)
if GetPlayerSlotState(p)!=PLAYER_SLOT_STATE_EMPTY then
call TriggerRegisterPlayerUnitEvent(t,p,EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
endif
set i=i+1
endloop
set p=null
set t=null
endfunction


Claro que cuando conviertes un Detonador de GUI a JASS se ve más corto y es porque en la función InitTrig_soy_noob hay una linea:

CODIGO: SELECCIONA TODO
call TriggerRegisterAnyUnitEventBJ(..........)


Esa función BJ hace todas las lineas que están en el codigo anterior (función InitTrig_soy_noob), pero existen ocaciones en las que solo necesitamos que el Detonador sirva para un jugador en especifico y un grupo de ellos. En sí este es uno de los pocos casos en los que una función BJ es útil. Aqui una muestra de como quedaría con la función BJ (la que se genera al convertir de GUI a JASS).

CODIGO: SELECCIONA TODO
function soy_noob_Condition takes nothing returns boolean
return true // devuelve una "Expresión Booleana"
endfunction

function soy_noob_Main takes nothing returns nothing
local unit u=GetTriggerUnit()
local real x=0.
local real y=0.
call SetUnitPosition(u,x,y)
set u=null
endfunction

function InitTrig_soy_noob takes nothing returns nothing
set gg_trg_soy_noob=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_soy_noob,EVENT_PLAYER_UNIT_SPELL_EFFECT) // <----- función BJ
call TriggerAddAction(gg_trg_soy_noob,function soy_noob_Main)
call TriggerAddCondition(gg_trg_soy_noob,Condition(function soy_noob_Condition))
endfunction


Dos Detonadores en Uno
En JASS un Detonador puede tener varios eventos/condiciones/acciones independientes cada uno del otro como si fueran 2 Detonadores distintos. Esta es una de las ventajas de JASS sobre GUI, imagínense que pudieran comprimir y simplificar varios Detonadores usados para un Spell en uno solo!, es posible con JASS.

Suponganmos que se quiere crear un habilidad que al ser lanzada mate instantáneamente al objetivo de la habilidad, pero tambien queremos que antes de que el héroe realice el efecto de la habilidad (antes de activar el cooldown y gartar mana) se verifique si el tipo de unidad NO es tipo Héroe para matarla.


CODIGO: SELECCIONA TODO
function MATAR_Condition takes nothing returns boolean
return GetSpellAbilityId()=='XXXX'
endfunction

function VERIFICAR_Condition takes nothing returns boolean
return GetSpellAbilityId()=='XXXX'
endfunction

function MATAR_Main takes nothing returns nothing
local unit j=GetSpellTargetUnit()
call killUnit(j)
set j=null
endfunction

function VERIFICAR_Main takes nothing returns nothing
local unit u=GetTriggerUnit()
local unit j=GetSpellTargetUnit()
if IsUnitType(j,UNIT_TYPE_HERO)==true then
call IssueImmediateOrder(u,"stop")
endif
set u=null
set j=null
endfunction

function InitTrig_Spell takes nothing returns nothing
local trigger t=CreateTrigger
call TriggerRegisterAnyPlayerUnitEvent(t,EVENT_PLAYER_UNIT_SPELL_CAST)
call TriggerAddCondition(t,Condition(function VERIFICAR_Condition))
call TriggerAddAction(t,function VARIFICAR_Main)
set t=null

set gg_trg_Spell=CreateTrigger()
call TriggerRegisterAnyPlayerUnitEvent(gg_trg_Spell,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(gg_trg_Spell,Condition(function MATAR_Condition))
call TriggerAddAction(gg_trg_Spell,function MATAR_Main)
endfunction


Operadores de Comparación
En JASS como en todos los lenguajes de programación se usan operadores, los de Aritmetica se supone que ya los saben(+ ; - ; / ; * ), el único de asignación es ( = ), los más importantes son los de Comparación:

Igual ( == )
Diferente ( == )
Mayor que ( > )
Menor que ( < )
Mayor igual que ( >= )
Menor igual que ( <= )

Tutorial by: Capitan FranK
De: e4zone
Link del post: http://www.e4zone.com/forums/viewtopic.php?f=59&t=16741

_-_-_-_-_-_-_-_-____F_I_R_M_A____-_-_-_-_-_-_-_-_-_

Firma by Shonen
Si te ayude, subime rep ( ).
O dame las gracias pulsando el botón

INFO:
Ando en una super peli: El final del LichKing en el año 3086 (Proximamente)

KnightFight
----------------------------------------------------------------
Hola Invitado Leete las normas para que no haya problemas reglamento bien
flower Si tu duda esta resuelta Edita el tema y pone el icono
Volver arriba Ir abajo
Ver perfil de usuario http://war-editor.foroac.com
Nube_7
novato
novato
avatar


Juego Blizzard Favorito : Starcraft
Horda

Vacío Vacío Vacío Vacío Vacío Vacío Mensajes Mensajes : 6
Oro Oro : 11
Reputación Reputación : 1
Fecha de inscripción : 03/02/2011
Edad : 20
Localización : Perú

MensajeTema: Re: [Tutorial] JASS Basico   Jue Feb 03, 2011 2:41 am

Bueno despues de leer todo y recientemente obtener JassCraft, creo que estoy para dejar GUI,muy buen tuto Cristian Very Happy.(Aunque no sea tuyo xD)
Volver arriba Ir abajo
Ver perfil de usuario
cristian5000
Admin
Admin
avatar


Juego Blizzard Favorito : Warcraft 3
Alianza

Vacío Vacío Vacío Vacío Vacío Vacío Mensajes Mensajes : 139
Oro Oro : 309
Reputación Reputación : 36
Fecha de inscripción : 30/10/2010
Edad : 20
Localización : Mi compu xD

MensajeTema: Re: [Tutorial] JASS Basico   Jue Feb 03, 2011 6:39 pm

Bueno, no sera mio, pero esta muy bueno y lo vi merecido para que este posteado Wink
Algún día aprendere jass Smile
Algún día...

_-_-_-_-_-_-_-_-____F_I_R_M_A____-_-_-_-_-_-_-_-_-_

Firma by Shonen
Si te ayude, subime rep ( ).
O dame las gracias pulsando el botón

INFO:
Ando en una super peli: El final del LichKing en el año 3086 (Proximamente)

KnightFight
----------------------------------------------------------------
Hola Invitado Leete las normas para que no haya problemas reglamento bien
flower Si tu duda esta resuelta Edita el tema y pone el icono
Volver arriba Ir abajo
Ver perfil de usuario http://war-editor.foroac.com
Tobi
Moderador
Moderador
avatar


Juego Blizzard Favorito : Warcraft 3
Elfos de la noche

Vacío Vacío Vacío Vacío Vacío Vacío Mensajes Mensajes : 47
Oro Oro : 86
Reputación Reputación : 15
Fecha de inscripción : 06/11/2010
Edad : 22
Localización : Algun Escondite de Akatsuki

MensajeTema: Re: [Tutorial] JASS Basico   Lun Feb 07, 2011 2:33 pm

oo que buen tuto brother e interesa el jass xD MAS REP

_-_-_-_-_-_-_-_-____F_I_R_M_A____-_-_-_-_-_-_-_-_-_
Tobi's a good kid...
Tobi is...
Uchiha Madara
have
Uchiha True Power:



"Eres debil ¿Porque eres debil? Porque no tienes suficiente odio"

:::::::::Historia:::::::::

Si deseas conocer la verdadera historia de uchiha madara y tobi entra en el siguiente link:

http://www.taringa.net/posts/manga-anime/6497580/Megapost-de-tobi.html
Volver arriba Ir abajo
Ver perfil de usuario
Contenido patrocinado




MensajeTema: Re: [Tutorial] JASS Basico   

Volver arriba Ir abajo
 

[Tutorial] JASS Basico

Ver el tema anterior Ver el tema siguiente Volver arriba 

 Temas similares

-
» [Tutorial] Jass
» [Tutorial] vJASS
» [TUTORIAL] Bàsico del MUGEN
» Rayman Gold/Designer Pequeño tutorial sobre qué son los EVE.
» TUTORIAL "Como rellenar la ficha"
Página 1 de 1.

Permisos de este foro:No puedes responder a temas en este foro.
World Edit :: Tutoriales :: Jass/vJass-