Últimos temas
» Undead Jaina v 1.00
Lun Jul 17, 2017 4:01 am por distorsionx

» Guerrero Magnatauro
Lun Jul 17, 2017 4:00 am por distorsionx

» Paladin Taunka y Caballero de la Muerte Taunka
Lun Jul 17, 2017 3:59 am por distorsionx

» Cacique Ashtotem
Lun Jul 17, 2017 3:59 am por distorsionx

» Thekal Sumo Sacerdote
Lun Jul 17, 2017 3:54 am por distorsionx

» Sacerdotisa Tigon
Lun Jul 17, 2017 3:50 am por distorsionx

» Soladado Cruzada del Fenix
Lun Oct 10, 2016 5:05 am por PEacegetter

» Darkael'Thas Moonstrider (Undead) con Bánix by Cefiro
Sáb Mar 14, 2015 12:00 pm por nightpablo

» E-1001 Egg Pawn
Mar Nov 11, 2014 3:54 am por Sasori52

» Rey Lich II by Cefiro
Lun Oct 06, 2014 10:02 am por lakroso93

Conectarse

Recuperar mi contraseña


Tutorial básico de vJASS

Ver el tema anterior Ver el tema siguiente Ir abajo

Universal Tutorial básico de vJASS

Mensaje por lukario! el Mar Ene 10, 2012 9:06 am

Hola!

He estado estudiando vJass en estos días y les traigo un tutorial de lo que he aprendido Very Happy


Esperá, cómo querés que aprenda vJass si ni siquiera sé qué es Jass???
Vamos por partes.

¿Qué es JASS?

Jass es el lenguaje de programación interno de Warcraft III.

¿Qué es vJSS?

Es una extensión personalizada de las funciones del JASS con algunas características extras.

¿Qué necesito para usar vJASS?

Necesitas el Jass NewGen pack ---> Jass NewGen Pack

¿Es difícil aprender vJASS?

Si alguna vez has programado no te será tan difícil. A medida que vas aprendiendo te va resultando más fácil.

¿Cómo uso JASS?

Simplemente crea un detonador vacío y ve a Editar > Convertir a texto personalizado.

Comencemos con el tuto:

¿Qué son las variables?

Las variables, como bien ha dicho Sauron, son como cajas, en las que se pueden almacenar datos. Podés guardar unidades, números o cadenas de texto(string).

Crear una variable

Se pueden crear dos tipos de variables: locales y globales

Variables locales

Las variables locales se pueden usar UNICAMENTE en la función en la cual han sido declaradas.

ah?

Las funciones son otras cajas en las que se almacenan acciones, tales como crear o matar una unidad. Éstas pueden tomar valores y devolver un valor.

Por ejemplo:

Tenemos dos funciones: Función A y función B.

Si en la función A creamos una variable local, esta variable NO PUEDE SER USADA EN LA FUNCION B y viceversa.

Declarar una variable local

Para crear una variable local debemos poner lo siguiente( las variables locales SOLO SE PUEDEN CREAR DENTRO DE UNA FUNCION):

Código:
local <tipo de variable> <nombre> 

También podemos crear una variable y darle un valor:

Código:
local <tipo de variable> <nobmre> = <valor>

Por ejemplo:

local unit = miunidad

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, etc)
real - guarda números con coma,.
effect - guarda un efecto especial del juego.
location - guarda un punto específico del mapa.
group - guarda un grupo de unidades.
trigger - guarda un detonador

Globales

Las variables globales pueden ser utilizadas en cualquier función.

Sim embargo hay que tener cuidado, ya que éstas se declaran dentro de un bloque Globals

Asi:

Código:
globals
<tipo de variable> <nombre> = <valor>
endglobals

Este bloque puede ir en cualquier parte, pero es recomendable que que valla en la parte superior del detonador.

Creando un detonador

Con lo aprendido hasta ahora ya estamos en condiciones de crear nuestro primer detonador en vJASS.

Para poder hacer nuestro detonador, primero necesitamos saber la ESTRUCTURA de la función.

Código:
function <nombre de la función> takes <argumento> returns <argumento>
endfunction

ejemplo:

Código:
function Init takes nothing returns nothing
endfunction

function Init - declaramos la función y le damos el nombre Init

takes nothing - toma el argumento ninguno. pueden ser uno o más argumentos separados por una coma, , y especificando que tipo de datos se estan tomando. En este casom al ser ninguno, no se especifica.

returns nothing - devuelve el valor ninguno

Ahora para crear nuestro detonador necesitamos saber como llamar a las acciones. Las acciones se llaman usando "call"(llamar)

Por ejemplo:

Código:
call KillUnit()

Si no usamos call nos tirará error

Ahora sí, creemos el detonador:

solo necesitamos una cosita más: scope

Código:
scope Trigger1 initializer Init
private function Init takes nothing returns nothing
//acciones
endfunction
endscope

PrimerTrigger : es el nombre que le damos a nuestro scope, NO PUEDEN REPETIRSE LOS NOMBRES Y SE ACEPTAN SOLO LETRAS Y NUMEROS.

initializer Init : Es la función que se ejecutará primero. En este caso, será la función Init (Init, es el nombre de la función. La función que primero se ejecuta, es la función que crea el trigger (detonador) y es donde nosotros le podemos decir en que función se encuentra el evento/condición/acción del trigger que acabamos de crear.

private function : El private, es para que sea una función privada, es decir, que esta función SOLAMENTE se podrá utilizar dentro del scope en donde se encuentra.

Ahora agreguemos las acciones:

Código:
scope Trigger1 initializer Init
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddAction(t, function Actions)
call TriggerAddCondition(t, Condition(function Conditions))
set t = null
endfunction
endscope

Expliquemos que significa todo eso

local trigger t = CreateTrigger() - Se crea una variable de tipo trigger llamada t, que almacena un detonador. Create de crear, Trigger de detonador, Crear Detonador .

call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT) - En esta línea, estamos diciéndo qué evento será el que dispare el detonador. En este caso, el evento es EVENT_PLAYER_UNIT_SPELL_EFFECT, osea, al lanzar una habilidad se dispara el detonador. La t es el detonador.

call TriggerAddAction(t, function Actions) - Decimos que las acciones del detonador t están en la función Actions.

call TriggerAddCondition(t, Condition(function Conditions)) - Decimos que las condiciones del detonador t están en la función Conditions.

set t = null - Seteamos el valor de t a nulo, para evitar memory leaks.

Y? Es tan difícil como pensaban?

ahora cramos la función Acions en la cual se encuentran las acciones.
Recuerden: las funciones que contienen las acciones NO PUEDEN TOMAR NI DEVOLVER VALORES.

Código:
private function Actions takes nothing returns nothing
call KillUnit(GetTriggerUnit())
call BJDebugMsg("Un héroe ha muerto por lanzar una habilidad")
endfunction

Creo que no necesita explicación XD

Ahora creamos la función que contiene las condiciones:

Código:
private function Conditions takes nothing returns boolean
if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true then
return true
else
return false
endif
endfunction

Esta si la explico un poco:

returns boolean - hace que la función devuelva un valor verdadero o falso

Ahora les explico la estructura de un bloque If Then Else:

Código:
If <argumento> then
else
endif

Si la condición es verdadera se realizan las acciones siguientes. En caso de que sea falsa, tenemos el bloque Else donde pondremos las acciones si es falsa.
Por último, cerramos el bloque If/Then/Else mediante endif

if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true then - Si la unidad que lanzó el conjuro es un héroe, entonces realiza las acciones que siguen.

return true - la función devuelve un valor verdadero

else - el bloque en el que están las acciones si la condición es falsa

return false - devuelve un valor falso

endif - terminamos el bloque If/Then/Else

Ahora nuestro detonador quedaría así:

Código:
scope Trigger1 initializer Init
private function Conditions takes nothing returns boolean
    if IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true then
    return true
    else
    return false
    endif
endfunction
private function Actions takes nothing returns nothing
    call KillUnit(GetTriggerUnit())
    call BJDebugMsg("Un héroe ha muerto por lanzar una habilidad")

endfunction
private function Init takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(t, Condition(function Conditions))
    call TriggerAddAction(t, function Actions)
    set t= null
endfunction
endscope

Ahora probamos nuestro mapa y a ver como funciona nuestro trigger Very Happy

Cuando una una unidad lanza un hechizo, se activa el trigger. Comprueba si la unidad es un héroe o no. Si lo es, lo mata. Si no, no pasa nada Very Happy

Eso es todo por ahora, SI TIENEN DUDAS PREGUNTEN!!!
avatar
lukario!
Admin
Admin

Cantidad de envíos : 44
Localización : The Skies of Mobius
Fecha de inscripción : 04/11/2011

Volver arriba Ir abajo

Universal Re: Tutorial básico de vJASS

Mensaje por AGUGROM el Mar Ene 10, 2012 7:09 pm

Excelente aporte muy bueno para principiantes osea yo XDD Merecido <img src=" longdesc="109" />
avatar
AGUGROM
Moderador avanzado
Moderador avanzado

Masculino
Cantidad de envíos : 50
Fecha de inscripción : 04/11/2011

http://wowwc3forum.creaforo.net/

Volver arriba Ir abajo

Universal Re: Tutorial básico de vJASS

Mensaje por Cefiro el Miér Ene 11, 2012 8:58 pm

BN buen tuto Lukas <img src=" longdesc="109" />
avatar
Cefiro
Moderador
Moderador

Masculino
Cantidad de envíos : 58
Edad : 20
Fecha de inscripción : 22/12/2011

Volver arriba Ir abajo

Universal Re: Tutorial básico de vJASS

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.