Wc3WoW Forum
Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Conectarse

Recuperar mi contraseña

Últimos temas
» General Turalyon by Ogathar
Ayer a las 23:40 por Dasthien

» Duendes Envenenados by Dartz
Ayer a las 23:28 por LuisXP

» Avatar de Sethraliss (Loa serpiente) by Ogathar.
Ayer a las 23:26 por LuisXP

» Pack: Rips by Cefiro
Ayer a las 23:17 por LuisXP

» Príncipe Anduin Wrynn by JDTJ
Ayer a las 21:20 por Joeldiaz

» Tyrande Susurravientos (Battle for Azeroth) by YonatanDS
Ayer a las 21:04 por Joeldiaz

» Trolls: Arranca-Cabezas + Berserker by Jose
Ayer a las 20:57 por Joeldiaz

» Rey Lich (Arthas Menethil) by Jhotam
Ayer a las 20:52 por Joeldiaz

» Garrosh Grito Infernal by Gizzlow
Ayer a las 20:42 por Joeldiaz

» Magni Bronzebeard(Cristal) by Ogathar
Ayer a las 20:40 por Joeldiaz

» Tirion Vadín by Carlosreyes
Ayer a las 20:00 por Joeldiaz

» Rey Anduin Wrynn by Ogathar.
Ayer a las 19:25 por Joeldiaz

» Unidades y Héroes de Warcraft III (Azote de los Muertos Vivientes) by Zeus
Ayer a las 19:22 por Joeldiaz

» Pack Stromgarde by Silvos
Ayer a las 19:15 por Goki123

» Grommash Grito Infernal (Universo Alterno) by JDTJ
Ayer a las 19:06 por Joeldiaz

» Modelo Caballero blanco by redsuitheart W3
Ayer a las 19:06 por Goki123

» Campaña Lo'gosh by Whitedragon1212
Ayer a las 18:23 por Cristofer Pascual Viera

» Huargen (Asesino + Ametrallador) by MKiller & Inico
Ayer a las 17:17 por Daimiel

» Montura Monje(7.2) by Ogathar.
Ayer a las 14:50 por jere.agro96

» Gólem Corruptos by Dartz
Ayer a las 14:35 por jere.agro96

» Guardianes Arcanos by Dartz
Ayer a las 14:21 por jere.agro96

» Curator by Dartz
Ayer a las 14:17 por jere.agro96

» Illidan Stormrage(Legion) by Ogathar
Ayer a las 12:55 por Goki123

» Malfurion Stormrage(Legion) by Ogathar.
Ayer a las 12:20 por Goki123

» Guerreros Arakkoa by Dartz
Ayer a las 12:00 por Dartz

» Zombis by Gizzlow
Ayer a las 10:13 por zeet

» Mal'Ganis (Heroes of the Storm) by FerSZ
Ayer a las 7:03 por MrSikled


[Tutorial] Variables Globales y Locales

Ir abajo

Tema Resuelto [Tutorial] Variables Globales y Locales

Mensaje por Dorgandash el Jue 17 Ene - 13:09

En un tutorial anterior mencioné algo sobre variables locales y globales.
Ahora explico que significa, y para qué puede ser usado.

Tomemos como ejemplo un detonador de granada, lanzar pelota, etc:

En este detonador se usan dos unidades dummy, y dos habilidades.
La habilidad que usa el héroe, indica el lugar donde caerá la granada.
Luego tenemos otra habilidad, que es la granada en sí.
Usamos dos dummys: uno invulnerable, que se crea donde está el héroe y que lanza la granada, y uno vulnerable que se crea donde cae la granada, que hace las veces de objetivo.

Para guardar dónde se crean dichas unidades, y las mismas, se usan variables que guardan temporalmente a las unidades y sus locaciones.

El detonador es para arrojar una pelota, por tanto donde cae, se crea un objeto. No obstante la función del detonador es irrelevante.

Lo que realmente interesa, son las variables.

Esas variables, que creamos en el editor de variables y que usamos en nuestros detonadores, son variables globales.

Esto significa que pueden ser utilizadas en cualquier función, de cualquier detonador.

Esto no nos es conveniente a la hora de hacer habilidades.

Imaginemos que tenemos un mapa del tipo Footmen Wars. Cada Footman tiene la habilidad de granada. Si tenemos 30 Footmen y todos lanzan la granada de forma simultánea, las variables globales cambiarán de valor constantemente, lo que ocasionaría que las granadas cayesen en cualquier lugar.

Acá es donde conviene usar las variables locales.

Las variables locales, a diferencia de las globales, sólo pueden ser usadas en la función en donde fue declarada.
Si intentamos usar una variable local fuera de dicha función, nos devolverá un error.

En GUI, no podemos usar variables locales, por lo que recurrimos al JASS.

No, esto no es una clase de JASS, ni pretendo que lo aprendas. Pero es algo básico a la hora de hacer habilidades, y que estas sean MUI (Multi Units Instanciability).

Convirtamos el detonador anterior a JASS:

Código:
function Trig_LanzarPelota_Copiar_Copiar_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A001' ) ) then
        return false
    endif
    return true
endfunction

function Trig_LanzarPelota_Copiar_Copiar_Actions takes nothing returns nothing
    set udg_TempPoint = GetUnitLoc(GetTriggerUnit())
    set udg_TempPoint2 = GetSpellTargetLoc()
    call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(GetTriggerUnit()), udg_TempPoint, bj_UNIT_FACING )
    set udg_TempUnit = GetLastCreatedUnit()
    call UnitAddAbilityBJ( 'A000', udg_TempUnit )
    call UnitApplyTimedLifeBJ( 6.00, 'BTLF', udg_TempUnit )
    call CreateNUnitsAtLoc( 1, 'h001', GetOwningPlayer(GetTriggerUnit()), udg_TempPoint2, bj_UNIT_FACING )
    set udg_TempUnit2 = GetLastCreatedUnit()
    call UnitApplyTimedLifeBJ( 6.00, 'BTLF', udg_TempUnit2 )
    call IssueTargetOrderBJ( udg_TempUnit, "acidbomb", udg_TempUnit2 )
    call TriggerSleepAction( ( DistanceBetweenPoints(udg_TempPoint, udg_TempPoint2) / 700.00 ) )
    call CreateItemLoc( 'rde4', udg_TempPoint2 )
    call RemoveLocation(udg_TempPoint)
    call RemoveLocation(udg_TempPoint2)
endfunction

//===========================================================================
function InitTrig_LanzarPelota_Copiar_Copiar takes nothing returns nothing
    set gg_trg_LanzarPelota_Copiar_Copiar = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_LanzarPelota_Copiar_Copiar, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_LanzarPelota_Copiar_Copiar, Condition( function Trig_LanzarPelota_Copiar_Copiar_Conditions ) )
    call TriggerAddAction( gg_trg_LanzarPelota_Copiar_Copiar, function Trig_LanzarPelota_Copiar_Copiar_Actions )
endfunction

Puede parecer complicado, pero por favor no abandones el tutorial.

En JASS las funciones primero deben ser declaradas antes de ser ejecutadas. Por tanto, tenemos tres funciones:

La primera es la función que contiene las Condiciones.
La segunda contiene las Acciones.
Y la tercera, debajo de la barra separadora, es la que inicializa el detonador.

Lo que haremos para que la habilidad sea un poco más MUI, será declarar variables locales en lugar de usar variables globales.
Esto lo haremos en la función Trig_LanzarPelota_Actions

Reemplazaremos esto:
Código:
    set udg_TempPoint = GetUnitLoc(GetTriggerUnit())
    set udg_TempPoint2 = GetSpellTargetLoc()
Por esto:
Código:
local TempPoint = GetUnitLoc(GetTriggerUnit())
local TempPoint2 = GetSpellTargetLoc()

También necesitamos variables para las unidades, así que las ponemos, quedando así:

Código:

local unit TempUnit
local unit TempUnit2
local location TempPoint = GetUnitLoc(GetTriggerUnit())
local location TempPoint2 = GetSpellTargetLoc()

Como pueden ver, primero indicamos que es una variable local mediante local. Luego indicamos el tipo de variable. Seguidamente el nombre y, opcionalmente, su valor.

Ahora lo que debemos hacer es reemplazar cada instancia de GetTriggerUnit(), udg_TempPoint, udg_TempPoint2, and GetLastCreatedUnit() con sus respectivas variables.

Quedando de la siguiente manera:

Código:
function Trig_LanzarPelota_Actions takes nothing returns nothing
    local unit TempUnit
    local unit TempUnit2
    local location TempPoint = GetUnitLoc(GetTriggerUnit())
    local location TempPoint2 = GetSpellTargetLoc()
    call CreateNUnitsAtLoc( 1, 'h000', GetOwningPlayer(GetTriggerUnit()), TempPoint, bj_UNIT_FACING )
    set TempUnit = GetLastCreatedUnit()
    call UnitAddAbilityBJ( 'A000', TempUnit )
    call UnitApplyTimedLifeBJ( 6.00, 'BTLF', TempUnit )
    call CreateNUnitsAtLoc( 1, 'h001', GetOwningPlayer(GetTriggerUnit()), TempPoint2, bj_UNIT_FACING )
    set TempUnit2 = GetLastCreatedUnit()
    call UnitApplyTimedLifeBJ( 6.00, 'BTLF', TempUnit2 )
    call IssueTargetOrderBJ( TempUnit, "acidbomb", TempUnit2 )
    call TriggerSleepAction( ( DistanceBetweenPoints(TempPoint, TempPoint2) / 700.00 ) )
    call CreateItemLoc( 'rde4', TempPoint2 )
    call RemoveLocation(TempPoint)
    call RemoveLocation(TempPoint2)
endfunction

Básicamente fue quitar los udg_, puesto que mantuvimos los nombres.

Si probamos el mapa, no notaremos diferencia en cuanto al efecto, pero sí habrá una gran diferencia en cuanto a rendimiento.
Para mejorar aún más, podemos usar funciones nativas en lugar de funciones BJ, pero es tema a parte.


[Tienes que estar registrado y conectado para ver este vínculo]
avatar
Dorgandash
MAYOR

Comentarios Comentarios : 450
Experiencia Experiencia : 3249
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] Variables Globales y Locales

Mensaje por Juferchoxx el Jue 17 Ene - 13:24

Interesante men +rep
avatar
Juferchoxx
COMANDANTE

Comentarios Comentarios : 525
Experiencia Experiencia : 3339
Reputación Reputación : 210
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] Variables Globales y Locales

Mensaje por Dartz el Jue 17 Ene - 13:25

Excelente tutorial, me llamo Ralph pero excelente tutorial! +rep
avatar
Dartz
ADMINISTRADOR

Comentarios Comentarios : 1233
Experiencia Experiencia : 4197
Reputación Reputación : 471
Neutral Orco Chaman 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] Variables Globales y Locales

Mensaje por Nekkrov el Dom 20 Ene - 12:47

Buen Trabajo Lukario, Interesante Tutorial :D
avatar
Nekkrov
HÉROE

Comentarios Comentarios : 1318
Experiencia Experiencia : 3207
Reputación Reputación : 144
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] Variables Globales y Locales

Mensaje por V01D el Dom 20 Ene - 12:54


:Mmm: +rep
Gracias (Y)
avatar
V01D
TENIENTE

Comentarios Comentarios : 303
Experiencia Experiencia : 3311
Reputación Reputación : 148
Neutral Humano Paladín Encantamiento Masculino
Vacío
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Variables Globales y Locales

Mensaje por Piru el Lun 4 Feb - 11:22

Habra llevado su tiempo hacer el tutorial, no lo lei todo todo, pero parece estar muy completo.
+rep
avatar
Piru
HÉROE

Comentarios Comentarios : 834
Experiencia Experiencia : 3372
Reputación Reputación : 286
Alianza Elfo de Sangre Mago Herrería Masculino
Vacío
Segundo Gran Herrero
Colaborador Destacado Tutor Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Variables Globales y Locales

Mensaje por Dockijoe el Vie 8 Feb - 12:53

Este post muy bueno +rep
avatar
Dockijoe
OFICIAL

Comentarios Comentarios : 641
Experiencia Experiencia : 3241
Reputación Reputación : 186
Horda Orco Brujo Joyería Masculino
Vacío
Team Fighter [3º Puesto]
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Variables Globales y Locales

Mensaje por Ocini el Lun 8 Abr - 13:49

nice
avatar
Ocini
HÉROE

Comentarios Comentarios : 1006
Experiencia Experiencia : 3900
Reputación Reputación : 158
Horda Renegado Caballero de la Muerte Desuello Masculino
Vacío
Gran Herrero [3º Puesto]
Team Fighter [2º Puesto]
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Variables Globales y Locales

Mensaje por Hoth_Star08 el Mar 13 Ago - 19:10

Me servirá para Futuros Mapas : +rep(Y)
avatar
Hoth_Star08
SARGENTO

Comentarios Comentarios : 67
Experiencia Experiencia : 2084
Reputación Reputación : 9
Alianza Goblin Paladín Ingeniería Masculino
Vacío

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Variables Globales y Locales

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

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