Wc3WoW Forum
¡Bienvenido a Wc3WoW Forum! Aquí se encontrará
con una gran variedad de mapas, modelos, iconos,
texturas, tutoriales, herramientas, y muchas cosas
más para el World Editor de Warcraft III. Regístrese
para tener acceso a todo nuestro contenido, de una
forma rápida, segura, y sin anuncios molestos.
Conectarse

Recuperar mi contraseña

Últimos temas
Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Chatbox

[Tutorial] vJASS

Página 1 de 2. 1, 2  Siguiente

Ir abajo

Tema Resuelto [Tutorial] vJASS

Mensaje por Dorgandash el Mar 10 Ene - 10:05

Hola!

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

Antes que nada, quiero dar un agradecimiento muy especial a Sauron y Musk sin los cuales no podría haber aprendido esto.

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

¿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 :D

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 :D

Eso es todo por ahora, SI TIENEN DUDAS PREGUNTEN!!!

Fuentes:

Parte de este post fue hecho a base de experiencias personales con vJASS. Mayor parte del contenido se basa en aportes de [Tienes que estar registrado y conectado para ver este vínculo]


Última edición por Dartz el Dom 27 Ene - 1:30, editado 3 veces (Razón : Post It!)
avatar
Dorgandash
Rango: Campeón
Rango: Campeón

Título : Wc3WoW Developer
Comentarios Comentarios : 450
Experiencia Experiencia : 3045
Reputación Reputación : 230
Alianza Humano Pícaro Herrería Masculino
Premio Wc3WoW Premio Wc3WoW
Logo Master
Vacío
Tercer Gran Mapper II
Segundo Lore Master
Colaborador Destacado Tutor Destacado Gladiador

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Juferchoxx el Mar 10 Ene - 11:12

buen tuto (Y) me puede servir lo estare leyendo constantemente que necesite algo de esto +rep
avatar
Juferchoxx
Rango: Campeón
Rango: Campeón

Título : Top 15
Comentarios Comentarios : 525
Experiencia Experiencia : 3132
Reputación Reputación : 207
Alianza Orco Cazador de Demonios Desuello Masculino
Premio Wc3WoW
Vacío
Segundo Gran Mapper I
Team Fighter [3º Puesto]
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Dartz el Mar 10 Ene - 11:51

Post It!


Última edición por Dartz el Dom 27 Ene - 1:33, editado 1 vez
avatar
Dartz
Administrador
Administrador

Título : Wc3WoW Keeper
Comentarios Comentarios : 1029
Experiencia Experiencia : 3183
Reputación Reputación : 390
Neutral Huargen Caballero de la Muerte Cocina Masculino
Wc3WoW de Oro Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW
Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW
Vacío
Vacío Gran Colaborador Gran Ripper Gran Skinner

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Dannniel el Mar 10 Ene - 23:45

Todo lo que va antes de "Creando un detonador" ya lo sabia... lo demas lo leere despues... :XDD:
gracias por el tuto :P +rep
avatar
Dannniel
Rango: Teniente
Rango: Teniente

Título : Wc3WoW Programmer
Comentarios Comentarios : 250
Experiencia Experiencia : 3560
Reputación Reputación : 221
Horda Renegado Brujo Alquimia Masculino
Premio Wc3WoW Premio Wc3WoW
Vacío
Tercer Gran Photoman
Tercer Lore Master
Vacío Colaborador Destacado Tutor Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Metrallador_killer_:( el Miér 11 Ene - 15:05

O_O , interesante :Mmm: gracias por postear el tuto, excelente....aunque no entendí un cara...pero bue. Buen Aporte +rep (Y)
avatar
Metrallador_killer_:(
Rango: Mariscal
Rango: Mariscal

Comentarios Comentarios : 345
Experiencia Experiencia : 2865
Reputación Reputación : 221
Alianza Humano Guerrero Masculino
Vacío
Team Fighter [2º Puesto]
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por lordsent el Mar 24 Ene - 4:59

Lukario Buen tutorial, lo entendi casi todo, pero el problema es que no veo que puedes conseguir con JASS que no puedas conseguir con detonadores y variables normales del editor.
( seguro que se puede conseguir mas, pero al menos en tu tutorial no he visto ninguna accion que no pueda traducir en detonadores ).

De todas formas muy bueno ^^.
avatar
lordsent
Rango: Explorador
Rango: Explorador

Comentarios Comentarios : 58
Experiencia Experiencia : 2365
Reputación Reputación : 4
Alianza Paladín Masculino
Vacío

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Dorgandash el Mar 24 Ene - 8:22

Es un tutorial básico, lo que pude entender se los explico.

Por mi parte no veo diferencia alguna, si bien hay funciones que no se pueden hacer en GUI, tenemos el "Custom Script". Personalmente el JASS no me gusta, además de que he tenido malas experiencias con cosas como: "No se ha declarado VariableGlobal" cuando si la he declarado.

Si bien puede ser más práctico en algunos aspectos, prácticamente se puede hacer los mismo en GUI, el problema es que muchos no se ponen a intentar y se quedan con el JASS :shrug:

Cualquiera, tanto GUI como JASS son buenos, PERO siempre te van a decir que es más fácil JASS que GUI. Yo lo veo como MENTIRA, eso depende de la capacidad de cada uno, y las experiencias en lenguajes de programación que tiene cada uno. Yo por mi parte tengo varios conocimientos de BASIC, aunque el JASS difiere de éste, hasta llegar al punto de ver muchas cosas como "Innecesariamente complicadas" o que "Hay que dar muchas vueltas innecesarias para cumplir una función simple"
avatar
Dorgandash
Rango: Campeón
Rango: Campeón

Título : Wc3WoW Developer
Comentarios Comentarios : 450
Experiencia Experiencia : 3045
Reputación Reputación : 230
Alianza Humano Pícaro Herrería Masculino
Premio Wc3WoW Premio Wc3WoW
Logo Master
Vacío
Tercer Gran Mapper II
Segundo Lore Master
Colaborador Destacado Tutor Destacado Gladiador

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Tristan_07 el Lun 5 Mar - 13:39

Muy buen tuto lukas.. es muy util cuando pueda le hecho un vistazo.. va a favoritos.. +rep
avatar
Tristan_07
Rango: Caballero
Rango: Caballero

Comentarios Comentarios : 213
Experiencia Experiencia : 2509
Reputación Reputación : 75
Alianza Sacerdote Masculino
Premio Wc3WoW
Vacío

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Ioxuadm el Dom 25 Mar - 16:40

avatar
Ioxuadm
Rango: Teniente
Rango: Teniente

Comentarios Comentarios : 299
Experiencia Experiencia : 3102
Reputación Reputación : 147
Alianza Sacerdote Masculino
Vacío
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Nekkrov el Mar 2 Oct - 6:36

sauron es el admin de world edit verdad? por cierto buen tuto (Y)
avatar
Nekkrov
Rango: Élite
Rango: Élite

Título : Top 1 - Elite
Comentarios Comentarios : 1318
Experiencia Experiencia : 3002
Reputación Reputación : 143
Neutral Trol Cazador Desuello Masculino
Vacío
Segundo Gran Mapper II
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] vJASS

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Página 1 de 2. 1, 2  Siguiente

Volver arriba


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