Red de conocimiento informático - Consumibles informáticos - ¿Dónde ingresar a la función jass de World of Warcraft?

¿Dónde ingresar a la función jass de World of Warcraft?

Primero, escribamos esta demostración usando T

Trigger Tree Present: Zoxc @ wc3campaigns | Migración: Greedwind | Expandir | Copiar JASS

Evento

p>

Tiempo: el tiempo de juego transcurrido es 0,00 segundos

Entorno

Acción

Punto de ajuste = (área (área del mapa jugable)

Para un (bucle entero A), incrementa de 1 a 10, haz (acción)

Bucle - Acción

Unidad - Crea 1 infantería para el jugador 1 (rojo) en punto orientado hacia la orientación predeterminada del edificio

Espere 2,00 segundos del juego

Punto - Eliminar punto

Esto es muy simple La demostración es fácil de entender para todos

Ahora conviertamos esta T a J

jass: Copiar código... Trig_Jass_Actions no toma nada y no devuelve nada

set udg_point = GetRectCenter(GetPlayableMapRect())

establecer bj_forLoopAIndex = 1

establecer bj_forLoopAIndexEnd = 10

bucle

salir cuando bj_forLoopAIndex gt; bj_forLoopAIndexEnd

call CreateNUnitsAtLoc( 1, ' hfoo', Player(0), udg_point, bj_UNIT_FACING )

llamar a PolledWait( 2 )

establecer bj_forLoopAIndex = bj_forLoopAIndex 1

endloop

llamar a RemoveLocation( udg_point )

fin...

//=========== ============= ===================================== ============= =

... InitTrig_Jass no toma nada y no devuelve nada

set gg_trg_Jass = CreateTrigger( )

call TriggerRegisterTimerEventSingle( gg_trg_Jass, 0.00 )

call TriggerAddAction( gg_trg_Jass, ... Trig_Jass_Actions )

Tal vez quieras decir que soy vago porque simplemente convierto T en J y luego lo llamo. Es cierto que usar T no hace ninguna diferencia

.

Así que optimicemos este código de cultivo de tropas

jass: Copiar código... JassCreateUnit

no toma nada no devuelve nada

set udg_point = GetRectCenter(GetPlayableMapRect())

set bj_forLoopAIndex = 1

set bj_forLoopAIndexEnd = 10

bucle

salir cuando bj_forLoopAIndex gt; bj_forLoopAIndexEnd

llamar a CreateNUnitsAtLoc( 1, 'hfoo', Player(0), udg_point, bj_UNIT_FACING)

llamar a PolledWait( 2 )

establecer bj_forLoopAIndex = bj_forLoopAIndex 1

endloop

llamar a RemoveLocation( udg_point )

end...

Antes Decimos que es mejor no esperar en un bucle. ¿Por qué? Debido a que las funciones de bucle A y B son variables globales, se producirá un error si se usan en otro lugar durante la ejecución. en variables locales

El código optimizado es el siguiente:

jass: Copiar código... JassCreateUnit no toma nada y no devuelve nada

punto de ubicación local

entero local i=0

punto de ajuste = GetRectCenter(GetPlayableMapRect())

bucle

conjunto i = i 1

salir cuando gt; 10

llamar a CreateNUnitsAtLoc( 1, 'hfoo', Player(0), punto, bj_UNIT_FACING )

llamar a PolledWait( 2 )

endloop

call RemoveLocation( point )

set point=null

end...

Bien, el código anterior es estándar. Método de escritura JASS (CreateNUnitsAtLoc pertenece a la función bj. No es necesario usar la función bj después de tener una cierta base)

No hemos terminado aquí porque esperamos que la función JassCreateUnit pueda ser más Por ejemplo, esperamos que esta función se pueda actualizar. El número de soldados no es fijo, pero podemos cepillar tantos como queramos.

Podemos modificarlo así

jass: Copiar código... JassCreateUnit toma un número entero Num no devuelve nada

punto de ubicación local

entero local i=0

punto de ajuste = GetRectCenter(GetPlayableMapRect(

))

bucle

set i = i 1

salir cuando i gt Num

call CreateNUnitsAtLoc( 1, 'hfoo', Player(0), punto, bj_UNIT_FACING)

llamar a PolledWait( 2 )

endloop

llamar a RemoveLocation( punto )

punto de ajuste =null

end...

Antes, nuestra función JassCreateUnit no tomaba nada. Ahora la cambié para que tome el entero i, lo que significa pasar un parámetro de tipo entero a la función

end...

Antes, nuestra función JassCreateUnit no tomaba nada. p >

Luego cambiamos la condición para el final del ciclo de igt;10 a igt;Num. Si Num=5, entonces el ciclo solo se ejecutará 5 veces para generar 5 infantería

. Dado que agregamos parámetros a la función, cuando llamamos, debemos escribir un parámetro entre paréntesis de la función

Árbol de activación presente: Zoxc @ wc3campaigns Migración: Greedwind | Expandir | /p>

Evento

Tiempo: el tiempo de juego transcurrido es 0,00 segundos

Entorno

Acción

Personalizado: llamar a JassCreateUnit( 5)

Tenga en cuenta que lo que está escrito entre paréntesis es 5. Eso significa que configuramos Num en 5. El sistema generará 5 infantería. Si queremos generar 10, entonces jass: Copiar codecall JassCreateUnit(10. )

Ahora la función JassCreateUnit ya es lo suficientemente poderosa, pero puede ser aún más poderosa. Por ejemplo, actualmente solo puede generar tropas en el centro del mapa. Cómo hacer que genere tropas en otros. ¿Quizás pensaste en agregar otro parámetro para pasar la ubicación de generación

jass: Copiar código... JassCreateUnit toma el jugador P, número entero, el punto de ubicación no devuelve nada

entero local i =0

bucle

set i = i 1

salir cuando i gt Num

call CreateNUnitsAtLoc( 1, 'hfoo', P, punto, bj_UNIT_FACING )

llamar PolledWait( 2 )

endloop

end...

Entonces lo llamamos así

Árbol de activación presente: Zoxc @ wc3campaigns | Migración: Greedwind | Expandir | Copiar Jass

Eventos

Tiempo: el tiempo transcurrido del juego es 0,00 segundos

Entorno

Acción

Conjunto P = Jugador 2 (azul)

Conjunto

Punto de ajuste = (centro del área (área del mapa reproducible))

Personalización: llamar a JassCreateUnit(udg_P, 20, udg_point)

Punto - eliminar punto

Aceptar Ahora modificamos el punto de configuración = (el centro del área (área del mapa jugable)) y podemos generar tropas en cualquier ubicación

Pero ahora los soldados generados están frente al edificio predeterminado y hacia nosotros. Puedes agregar otro parámetro para hacer que el soldado mire en esta dirección

jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real no devuelve nada

entero local i =0

bucle

set i = i 1

salir cuando i gt;

call CreateNUnitsAtLoc( 1, 'hfoo', P, punto, ángulo)

call PolledWait( 2 )

endloop

end...

Reemplace bj_UNIT_FACING con ángulo.

Reemplace bj_UNIT_FACING con ángulo.

p>

Bien, ahora tenemos muchos parámetros para llamar a JassCreateUnit. Llame a JassCreateUnit(udg_P, 20, udg_point, 180). Entonces los soldados generados mirarán 180 grados

Es lógico en este momento. , la función de JassCreateUnit es muy poderosa, pero no hay límite para la codicia humana. Por ejemplo, ahora esta función solo puede cepillar a la infantería, entonces, ¿qué debemos hacer si queremos cepillar a los caballeros? Brushing Knights? Podemos continuar agregando parámetros sin él

jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real, uid entero no devuelve nada

entero local i=0

bucle

establecer i = i 1

salir cuando i gt Num

llamar a CreateNUnitsAtLoc( 1, uid, P, punto, ángulo)

call PolledWait( 2 )

endloop

end...

Desde la "unidad type" es en realidad un tipo numérico, el tipo de parámetro aquí es entero

Árbol de activación presente: Zoxc @ wc3campaigns | Migración: Greedwind | Expandir | Contraer | Copiar Jass

Eventos

Tiempo: el tiempo de juego transcurrido es 0,00 segundos

Entorno

Acción

Conjunto P = jugador 2 (azul)

Punto de ajuste = (área (área del mapa reproducible) dentro de una ubicación aleatoria)

Establecer ID de unidad =

Knight

Personalización: llamar a JassCreateUnit(udg_P, 20, udg_point, 120, udg_UnitID)

Punto - eliminar punto

Luego regresar a un punto aleatorio en el área Cada 2 segundos, aparecerá un caballero del jugador 2, mirando 120 grados hasta que se generen 20

Debido a que Xiami necesita generar un spawn cada 2 segundos, ¿se puede modificar el intervalo de tiempo? Por supuesto, ¿se puede modificar? agregado... Parámetros

jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real, uid entero, tiempo de espera entero no devuelve nada

entero local i =0

p>

bucle

establecer i = i 1

salir cuando i gt; Num

llamar a CreateNUnitsAtLoc( 1, uid, P, punto, ángulo)

call PolledWait( timeout )

endloop

end...

Vale, jass: copia codecall JassCreateUnit (udg_P, 20, udg_point, 120, udg_UnitID, 5) Simplemente actualice la unidad cada 5 segundos

Quizás ahora esté obsesionado con agregar parámetros a la función. ¿Aún puede agregar más parámetros? Puede, por ejemplo, llamar a CreateNUnitsAtLoc( 1 , uid, P, point, angle) cada vez que se genera una unidad. Si reemplaza el 1 entre paréntesis con parámetros, puede controlar la cantidad de soldados generados cada vez.

jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real, uid entero, tiomout entero, número entero N no devuelve nada

entero local i=0

bucle

set i = i 1

salir cuando i gt; Num

llamar a CreateNUnitsAtLoc( N, uid, P, punto, ángulo)

call PolledWait( timeout )

endloop

end...

Ahora JassCreateUnit es lo suficientemente potente como para poder generar cualquier cosa para cualquier jugador. en cualquier lugar y en cualquier intervalo de tiempo. La cantidad de unidades que miran en cualquier ángulo...

Tal vez no puedas evitar gritar ahora, ¿no es esta la función de generación de tropas 3C? Preocúpate, las tropas generadas por la función de generación de tropas en 3C atacarán automáticamente. La función real de 3C es ir debajo de la base del oponente.

jass: Copiar código... JassCreateUnit toma el jugador P, número entero, ubicación. punto, ángulo real

e, uid entero, tiempo de espera entero, número entero N, ubicación punto objetivo no devuelve nada

entero local i=0

entero local n=0

unidad local u

bucle

set i = i 1

salir cuando i gt Num

set n=0

bucle

set n = n 1

exitwhen n gt N

set u=CreateUnitAtLoc( P, uid, punto, ángulo)

llamar a IssuePointOrderLoc(u, "ataque", punto de destino)

establecer u=null

endloop

llamar a PolledWait( tiempo de espera )

endloop

end...

En esta función agregamos un parámetro de punto targetpoint Luego, las unidades que se generan atacarán este punto. Además, la función CreateNUnitsAtLoc original es reemplazada. CreateUnitAtLoc, lo cual es conveniente. Emitimos comandos a las unidades generadas.

Bien, este es el final de esta explicación. Si te pidiera que escribieras una función de generación de tropas 3C al principio, ¿te sentirías intimidado? Pero partimos de una función de generación de tropas muy simple. A medida que se escribe la función, sus funciones continúan aumentando hasta convertirse en una función tan compleja como la función de cultivo de tropas de 3C. Se puede ver que todo comienza desde cosas pequeñas.

Además, el JassCreateUnit actual puede realizar la función de cultivo de tropas 3C, pero dado que utiliza la función PolledWait (espera), la precisión del tiempo y la eficiencia de ejecución no son altas. Actualmente, la función 3C que escribo usa Timer para cultivar. tropas

¿Quieres saber cómo usar el temporizador? Primero sentemos las bases ~

.