Overwatch

Presentación del Taller de Overwatch

Presentación del Taller de Overwatch

¡Cread partidas con características hasta ahora inconcebibles con el Taller! El Taller es un sistema de scripting simplificado que amplía las funciones de personalización disponibles en el explorador de partidas. En el Taller, crearéis un script para añadir reglas y condiciones de juego únicas a los modos de juego de Overwatch que ya conocéis. Las reglas pueden hacer un montón de cosas, como cambiar el funcionamiento del movimiento y las habilidades de los héroes, modificar cómo reciben daño o sanación los jugadores o hasta mostrar texto en determinadas circunstancias.

Por ejemplo, un modo de juego muy candente que podéis crear es El suelo es lava, donde vuestro héroe arderá mientras esté en el suelo:

El Taller contiene vocabulario y expresiones del mundo de la programación. Por esta razón, hemos tomado la decisión de mantener estos elementos y su sintaxis en inglés. Sin embargo, para que sea lo más accesible posible a todos los usuarios, con independencia de su nivel de experiencia en este campo, encontraréis las descripciones de todas las variables y los valores traducidas al idioma en el que jugáis.

Si tenéis cualquier duda o pregunta sobre la traducción del Taller, dejadnos un mensaje en el foro de traducción y localización.

Índice

Acceder al Taller

Para entrar en el Taller, haced clic en «Jugar» > «Explorador de partidas» > «Crear» > «Ajustes» > «Taller».

Crear un script

Para crear un script, tenéis que:

  1. Añadir una regla
  2. Seleccionar un evento
  3. Añadir una condición (opcional)
  4. Añadir una acción

Hecho todo eso, podréis añadir tantas reglas, condiciones y acciones como sea posible.

Añadir una regla

Las reglas son elementos muy personalizables que componen vuestro script. Cada script debe tener una regla como mínimo.

Cada regla tiene un campo de nombre personalizable y contiene:

  • Evento: define cuándo se ejecutará la regla. Para obtener más información, consultad Seleccionar un evento.
  • Condiciones: una lista opcional de cosas que deben cumplirse para que se aplique la regla. Para obtener más información, consultad Añadir una condición.
  • Acciones: una lista de cosas que ocurren cuando se cumplen el evento y las condiciones. Para obtener más información, consultad Añadir una acción .

Para añadir una regla, haced clic en «Añadir regla».

Seleccionar un evento

Un evento define cuándo se ejecutará la regla. Cuando un evento ocurre durante la partida, se crea una instancia de la regla. Cada instancia evalúa las condiciones y ejecuta las acciones independientemente de otras instancias.

Cuando se crea una regla en el editor, se añade un evento de forma automática. Tenéis que especificar el tipo de evento que queréis.

Para especificar un tipo de evento:

  1. Haced clic en la lista desplegable junto a «Evento».
  2. Seleccionad uno de los siguientes:

    Tipo de evento Comentario
    Ongoing - Global

    Crea una única instancia de esta regla cuando empieza la partida. Esta instancia permanece activa durante toda la partida.

    • Puesto que la instancia permanece activa durante toda la partida, puede que una condición se cumpla algunas veces y falle otras. Cuando una condición se cumple por primera vez, se ejecutan las acciones.
    • Cuando la lista de condiciones falla y luego vuelve a cumplirse, las acciones intentan ejecutarse otra vez.
    Ongoing - Each Player

    Crea una instancia de esta regla para cada jugador al unirse a la partida. Esta instancia permanece activa hasta que el jugador abandona o la partida acaba. Cada instancia realiza un seguimiento de las condiciones y las acciones, y las ejecuta por separado.

    • Puesto que la instancia permanece activa mientras el jugador esté en la partida, puede que una condición se cumpla algunas veces y falle otras. Cuando una condición se cumple por primera vez, las acciones se ejecutan.
    • Cuando la lista de condiciones falla y luego vuelve a cumplirse, las acciones intentan ejecutarse otra vez.
    Player Earned Elimination

    Ejecuta la regla cada vez que un jugador consigue una eliminación. Solo puede haber una instancia de la regla activa para un jugador concreto en cada momento.

    • Cuando un jugador elimina a alguien, se comprueban las condiciones. Si se cumple cada condición, las acciones se ejecutan; si falla cualquiera de ellas, no.
    Player Dealt Final Blow

    Ejecuta la regla cada vez que un jugador da un golpe de gracia. Solo puede haber una instancia de la regla activa para un jugador concreto en cada momento.

    • Cuando un jugador le da el golpe de gracia a un rival, se comprueban las condiciones. Si se cumple cada condición, las acciones se ejecutan; si falla cualquiera de ellas, no.
    Player Dealt Damage

    Ejecuta la regla cada vez que un jugador inflige daño. Solo puede haber una instancia de la regla activa para un jugador concreto en cada momento.

    • Cuando un jugador le inflige daño a un rival, se comprueban las condiciones. Si se cumple cada condición, las acciones se ejecutan; si falla cualquiera de ellas, no.
    Player Took Damage

    Ejecuta la regla cada vez que un jugador recibe daño. Solo puede haber una instancia de la regla activa para un jugador concreto en cada momento.

    • Cuando un jugador recibe daño de un rival, se comprueban las condiciones. Si se cumple cada condición, las acciones se ejecutan; si falla cualquiera de ellas, no.
    Player Died

    Ejecuta la regla cada vez que muere un jugador. Solo puede haber una instancia de la regla activa para un jugador concreto en cada momento.

    • Cuando un jugador muere, se comprueban las condiciones. Si se cumple cada condición, las acciones se ejecutan; si falla cualquiera de ellas, no.
  3. Si es necesario, especificad el equipo o jugador a los que debería afectarle este evento. Las opciones son:

    Opción Comentario
    Todos El evento afecta a todos los equipos, incluidos los jugadores en los modos de todos contra todos.
    Equipo 1 (o nombre actual del equipo) El evento solo afecta a los miembros de este equipo.
    Equipo 2 (o nombre actual del equipo) El evento solo afecta a los miembros de este equipo.
    Opción Comentario
    Todos El evento afecta a todos los jugadores.
    De la ranura 0 a la ranura 5 El evento solo afecta a los jugadores de la ranura especificada. En un modo de juego por equipos, dos jugadores pueden ocupar una misma ranura (una por cada equipo).
    De la ranura 6 a la ranura 11 El evento solo afecta a los jugadores de la ranura especificada. Esto solo es aplicable a los modos de juego de todos contra todos.
    Héroe concreto El evento solo afectará a los jugadores que hayan aparecido con ese héroe.

Añadir una condición

Después de haber añadido una regla y un evento, tendréis la ocasión de añadir una o más condiciones. Las condiciones son una lista de cosas que deben cumplirse antes de que la regla ejecute su lista de acciones. Si la condición pertenece a una regla con un tipo de evento «Ongoing - Global» u «Ongoing - Each Player», se comprueba continuamente para ver si se cumple; si pertenece a una regla de cualquier otro tipo, se comprueba cada vez que ocurre el evento especificado. Si una regla no tiene condiciones, la lista de acciones tratará de ejecutarse en cuanto ocurra el evento. Cada condición está compuesta por dos valores que usan un operador para comparar y comprobar si se cumplen o no. Consultad Valores para obtener más información.

Para añadir una condición:

  1. Haced clic en «Añadir» junto a «Condiciones».
  2. Rellenad los dos campos «Valor».
    • Nota: cuando un valor en sí requiere una entrada (por ejemplo, el valor «Hero Of», que necesita saber de qué jugador se adquiere el héroe), entonces la entrada de ese valor aparece sangrada justo debajo.
  3. Seleccionad un operador. Los operadores son:
    • == «es igual a»
    • != «no es igual a»
    • > «es mayor que»
    • >= «es mayor o igual a»
    • < «es menor que»
    • <= «es menor o igual a»

Esto comprueba si la cantidad de todos los jugadores de la partida es igual a la cantidad de jugadores vivos o no.

  • «Valor»: «Number of Living Players», que comprueba el total de jugadores que están vivos.
    • «Equipo»: «Team», que comprueba todos los jugadores de un equipo.
    • «Equipo»: «Todos», que comprueba todos los jugadores de todos los equipos.
  • Operador: «==», que significa que el primer valor debe ser igual al segundo valor para que esta condición se cumpla.
  • «Valor»: «Number of Living Players», que comprueba el total de jugadores vivos.
    • «Equipo»: «Team», que comprueba todos los jugadores de un equipo.
    • «Equipo»: «Todos», que comprueba todos los jugadores de todos los equipos.

Otros ejemplos

  • Is Flag Being Carried (Victim) == False: el jugador que muere no debe llevar la bandera.
  • Is Crouching (Event Player) == True: el jugador en el que está activo el evento debe estar agachado.
  • Number Of Final Blows (Attacker) > 10: el jugador que ataca lleva más de 10 golpes de gracia.

Añadir una acción

Una acción es algo que modifica la partida. Las acciones se ejecutan de arriba abajo. Para que la lista de acciones empiece a ejecutarse:

  • El evento asociado a la regla debe haber ocurrido.
  • Todas las condiciones de la regla deben cumplirse (si las hay).
    • Si el tipo de evento es «Ongoing - Global» u «Ongoing - Each Player», la lista de acciones se ejecutará cuando cada condición se cumpla por primera vez. Cuando la lista de condiciones falle y luego vuelve a cumplirse, las acciones intentarán ejecutarse otra vez.

A excepción de la acción «Wait» (consultad Acción «Wait» para obtener más información), todas las acciones se ejecutan y finalizan de inmediato. Cada acción está compuesta por cero o más entradas, que describen cómo se modifica la partida. Cada entrada recibe un valor, que es un elemento de información o una instrucción sobre cómo obtener información. Para conocer más detalles, consultad Valores.

Para añadir una acción:

  1. Haced clic en «Añadir», junto a «Acciones».
  2. Seleccionad una acción, que describe cómo se modificará la partida.
  3. Seleccionad un valor en la lista desplegable para cada nueva entrada que haya aparecido.
    • Nota: algunas acciones crearán un objeto o un comportamiento permanente. Estas acciones pueden contar con una entrada llamada «Revaluación», que determina si las demás entradas de esta acción son fijas (no cambian el objeto o el comportamiento permanente) o dinámicas (cambian el objeto o el comportamiento permanente a medida que cambia el valor asignado a la entrada).

Acciones

  • Pause Match Time: pausa el tiempo de la partida actual.
  • Modify Global Variable (T, Add, 5): aumenta la variable global T en 5.
  • Set Invisible (Event Player, Enemies): hace que el jugador que ejecute esta regla sea invisible para los enemigos.

Acciones con entrada «Revaluación»

  • Create Icon (All Players(All Teams), Global Variable(P), Alert, Position): crea un icono de alerta que es visible para todo el que esté en la ubicación especificada por la variable global «P». Revalúa la posición continuamente, así que, si la variable global «P» cambia más adelante, la posición del icono se traslada a la nueva ubicación.
  • Create Icon (All Players(All Teams), Global Variable(P), Alert, None): crea un icono de alerta que es visible para todo el que esté en la ubicación especificada por la variable global «P». No se revalúa nada, así que, incluso si la variable global «P» cambia más adelante, no se actualiza la posición del icono.

Tipos de acciones

Pese a que hay muchas acciones posibles, os conviene conocer algunas:

«Loop» es una acción que provoca que la ejecución de la lista de acciones se reinicie desde el principio. Hay cuatro tipos de acciones de este tipo:

  • «Loop»: siempre reinicia la lista de acciones.
  • «Loop If»: reinicia la lista de acciones si la entrada de condición de la acción ofrece un resultado que no sea «0» o «False».
  • «Loop If Condition Is True»: reinicia la lista de acciones si actualmente se cumplen todas las condiciones de la regla.
  • «Loop If Condition Is False»: reinicia la lista de acciones si cualquiera de las condiciones de la regla está fallando actualmente.

Solo se permite una acción «Loop» si se garantiza que se ejecute una acción «Wait» antes del comienzo de la lista de acciones.

Bien Mal

Esto se permite porque espera antes de iniciar el bucle.

Esto no se permite porque se ejecutaría para siempre sin esperar.

«Wait» es una acción que deja que pase el tiempo antes de que se pueda ejecutar una acción posterior. El tiempo mínimo de espera es de 0,25 segundos.

Hay tres opciones de comportamiento para la acción «Wait»:

  • «Ignorar condición»: si se selecciona esto, la ejecución de las acciones no se puede interrumpir con condiciones ni otros eventos.
    • Si el tipo de evento es «Ongoing - Global» u «Ongoing - Each Player», las condiciones que pasen de cumplirse a fallar, o viceversa, no harán que ocurra nada.
    • Si el evento es de cualquier otro tipo y ocurre un evento de ese tipo con el mismo «Event Player», el evento se ignora por completo.
  • «Abortar cuando sea falso»: si se selecciona esto, la lista de acciones deja de ejecutarse si las condiciones empiezan a fallar.
  • «Reiniciar cuando sea verdadero»: si se selecciona esto, la ejecución de acciones se reinicia con la primera acción si ocurre alguna de las siguientes cosas:
    • El tipo de evento es «Ongoing - Global» u «Ongoing - Each Player» y las condiciones pasan de fallar a cumplirse.
    • El evento es de cualquier otro tipo, ocurre un evento con el mismo «Event Player» y se cumplen todas las condiciones.

Información adicional

El valor «String» genera una cadena. Tiene las siguientes entradas:

  • «Cadena»: el texto que se muestra. Si el texto contiene un número entre llaves, se reemplazará con el valor proporcionado en la entrada correspondiente.
  • «{0}»: el valor que se convertirá en texto antes de reemplazar el {0} en la cadena. Este valor puede ser de cualquier tipo.
  • «{1}»: el valor que se convertirá en texto antes de reemplazar el {1} en la cadena. Este valor puede ser de cualquier tipo.
  • «{2}»: el valor que se convertirá en texto antes de reemplazar el {2} en la cadena. Este valor puede ser de cualquier tipo.
  • String(«Hola», Null, Null, Null): genera la cadena «Hola».
  • String(«{0} contra {1}», Hero(Ana), Hero(Pharah), Null): genera la cadena «Ana contra Pharah».

Las cadenas se pueden combinar para formar otras más complejas:

  • String(«{0} contra {1}», Hero(Ana), String(«{0} y {1}», Hero(Pharah), Hero(Genji), Null), Null): genera la cadena «Ana contra Pharah y Genji».

Las cadenas no se pueden usar en condiciones ni almacenar en variables por complicaciones con jugadores que utilizan distintos idiomas en la misma partida personalizada.

Un valor es un elemento de información —o una instrucción sobre cómo obtener información— que se incorpora a la entrada de una condición, una acción u otro valor. Los valores se pueden combinar entre sí.

Hay muchísimos valores, así que no los vamos a definir todos aquí. Sin embargo, están explicados en el editor del Taller. Aquí tenéis algunos que probablemente veréis:

Valor Comentario
Number Proporciona un número real en un intervalo especificado por la entrada.
Vector Proporciona un valor tridimensional en un intervalo especificado por la entrada. Se utiliza para posiciones y direcciones.
Team Indica un equipo concreto, como el equipo 1, el equipo 2 o todos los equipos.
Hero Indica un héroe concreto.
Null Indica la ausencia de un jugador o una entidad.
True Proporciona el valor de verdadero.
False Proporciona el valor de falso.
Compare Proporciona un valor de verdadero o falso, en función de si la comparación descrita es verdadera o no.
Event Player Proporciona el jugador que ejecuta la instancia de la regla o «Null» si no existe ese jugador.
Attacker Indica el atacante para la instancia de la regla o «Null» si no hay atacante.
Victim Indica la víctima para la instancia de la regla o «Null» si no hay víctima.
Current Array Element Proporciona el valor actual que se considera al usarlo junto al valor «Is True For Any», «Is True For All», «Filtered Array» o «Sorted Array».

Un valor se puede almacenar en una matriz, que es una colección de múltiples valores.

  • Varias acciones y valores pueden crear o modificar una matriz.
    • Por ejemplo, el valor «All Players» genera una matriz con todos los jugadores que están actualmente en la partida.
    • También podéis crear vuestras propias matrices mediante la operación «Append To Array» de la acción «Modify Global Variable» o la acción «Modify Player Variable».
  • Si una entrada espera una matriz y recibe cualquier otro tipo de valor, el valor se copia en una matriz con un solo elemento en beneficio de la entrada. Igualmente, si una entrada espera cualquier otro tipo de valor y recibe una matriz, se utiliza el primer valor de la matriz (o «0» si la matriz está vacía).

Una variable es un lugar donde un valor se puede almacenar y recuperar más tarde. Salvo cadenas, se puede almacenar cualquier valor en una variable. Todas las variables empiezan con un valor de «0» para «Number».

Hay dos tipos de variables en un script:

  • «Global Variable»: hay 26 variables globales, con nombres que van desde la «A» hasta la «Z». Cada variable tiene un valor propio o una matriz de valores.
  • «Player Variable»: cada jugador tiene 26 variables, con nombres que van desde la «A» hasta la «Z». Cada variable tiene un valor propio o una matriz de valores.

Hay tres operaciones que se pueden realizar con una variable:

  • Establecer: «Set Global Variable» y «Set Player Variable» reemplaza el valor anterior y le asigna uno nuevo a la variable.
  • Modificar: «Modify Global Variable» y «Modify Player Variable» modifican el valor de una variable mediante una operación aritmética concreta (como «Add», «Multiply», etc.) o una operación de matriz («Append», «Remove»).
  • Buscar: «Chase Global Variable Over Time», «Chase Player Variable Over Time», «Chase Global Variable at Rate» y «Chase Player Variable at Rate» cambian gradualmente la variable con el tiempo o a un ritmo especificado.
    • El destino de la búsqueda puede ser un número o un vector (o cualquier valor que resulte en un número o un vector).
      • Si el destino es un número, el valor de variable tiene que ser un número antes del comienzo de la búsqueda para que esta funcione correctamente.
      • Si el destino es un vector, el valor de variable tiene que ser un vector antes del comienzo de la búsqueda para que esta funcione correctamente.
      • Si la revaluación está habilitada para el destino, la búsqueda se actualizará cuando sea necesario para buscar un destino modificado, incluso si el destino se había alcanzado antes. Para obtener más información sobre la revaluación, consultad Añadir una acción.
    • Podéis cancelar una búsqueda mediante la acción «Stop Chasing Global Variable» y la acción «Stop Chasing Player Variable».
      • Cuando se cancela una búsqueda, la variable conserva su valor actual, que puede estar en algún lugar entre el valor que era al principio de la búsqueda y el destino.

Ejemplos

¿Queréis pasar ya a la acción? ¡Probad a crear alguno de estos modos de juego! Vamos a explicaros al detalle todo lo que tenéis que añadir y por qué:

Vamos a enseñaros cómo crear el modo de juego «El suelo es lava», donde los héroes se queman y reciben daño si están en el suelo.

  1. En primer lugar, aseguraos de que vais a jugar en el mapa o los mapas deseados.
    • Haced clic en «Jugar» > «Explorador de partidas» > «Crear» > «Ajustes» > «Mapas».
    • Seleccionad el mapa en el que os gustaría probar el modo de juego y desactivad todos los demás.
  2. A continuación, entrad en el Taller.
    • Haced clic en «Atrás».
    • Haced clic en «Taller».
  3. ¡Es el momento de crear un script! Añadamos nuestra primera regla.
    • Haced clic en «Añadir regla».
    • En el campo del nombre de la regla, escribid «Empezar a arder si se está en el suelo». Así sabréis que esta regla es la que provoca que los jugadores empiecen a quemarse cuando tocan el suelo.
    • Ahora cambiad el tipo de evento para saber cuándo se debe ejecutar esta regla.
      • En la lista desplegable de eventos, seleccionad «Ongoing - Each Player». Esto indica que la regla se evaluará por separado para cada jugador de la partida.
      • Dejad el resto de listas desplegables con las opciones predeterminadas.
    • Ahora añadamos una condición. Esta condición determinará si la regla se ejecutará o no. ¡También podéis dejarla vacía si queréis que la regla se ejecute siempre!
      • En «Condiciones», haced clic en «Añadir».
      • En la primera lista desplegable de «Valor», seleccionad «Is On Ground». Este valor se evalúa como verdadero siempre que el jugador esté en el suelo.
      • Dejad el resto de listas desplegables con las opciones predeterminadas y haced clic en «Aceptar».
        • «Event Player» es «el jugador en el que se está ejecutando la regla actualmente».
    • Por último, vamos a añadir una acción. Las acciones son las cosas que pasan cuando se cumple la condición.
      • Esta acción provocará que un héroe empiece a quemarse cuando esté en el suelo.
        • En «Acciones», haced clic en «Añadir».
        • En la lista desplegable de «Acción», seleccionad «Set Status».
        • En la lista desplegable de «Estado», seleccionad «Burning».
        • En «Duración», cambiad el número a «9999».
        • Dejad el resto de listas desplegables con las opciones predeterminadas y haced clic en «Aceptar».
  4. ¡Vamos a probar si vuestro héroe arde al estar en el suelo!
    • Haced clic en «Atrás» dos veces.
    • En la pantalla «Crear partida», haced clic en «Comenzar».
    • Seleccionad un héroe.
    • En cuanto entréis en la partida, vuestro héroe debería estar ardiendo.
    • Pulsad «Esc» y haced clic en «Abrir editor del Taller» para seguir desarrollando vuestro script.
  5. Añadamos ahora otra regla que garantice que un héroe no se queme si está saltando o en el aire.
    • En lugar de añadir una nueva regla desde el principio, vamos a copiar la que creamos antes.
    • Junto a la regla que ya habéis creado, haced clic en «Copiar».
      • Haced clic en «Pegar regla».
      • Cambiad la descripción a «Dejar de arder cuando se está en el aire». Así sabréis que esta regla es la que provoca que vuestro héroe deje de quemarse cuando está en el aire o saltando.
      • Mantened el tipo de evento existente.
      • Ahora editemos la condición. Esta condición determinará si se ejecuta la regla.
        • Haced clic en la condición existente que dice «Is On Ground(Event Player) == True».
        • En la lista desplegable de «Valor», seleccionad «False».
        • Dejad el resto de listas desplegables con las opciones existentes y haced clic en «Aceptar».
      • A continuación, vamos a editar la acción. Esta provocará que vuestro héroe deje de arder si no está en el suelo.
        • Haced clic en la acción existente que dice «Set Status(Event Player, Null, Burning, 9999)».
        • En la lista desplegable de «Acción», seleccionad «Clear Status».
        • En la lista desplegable de «Estado», seleccionad «Burning».
        • Dejad el resto de listas desplegables con las opciones existentes y haced clic en «Aceptar».
  6. ¡Vamos a probar si el héroe deja de arder cuando está en el aire!
    • Haced clic en «Atrás» dos veces.
    • En cuanto entréis en la partida, vuestro héroe debería estar ardiendo. Saltad para ver si vuestro héroe deja de quemarse.
    • Pulsad «Esc» y haced clic en «Abrir editor del Taller» para seguir desarrollando vuestro script.
  7. Por último, vamos a hacer que los héroes reciban daño al estar en el suelo.
    • Expandid la regla «Empezar a arder si se está en el suelo».
    • En «Acciones», haced clic en «Añadir». Esta acción provocará que el héroe reciba daño cuando esté en el suelo.
      • En la lista desplegable de «Acción», seleccionad «Start Damage Over Time».
      • En «Duración», cambiad el número a «9999».
      • En «Daño por segundo», cambiad el número a «30».
      • Dejad el resto de listas desplegables con las opciones predeterminadas y haced clic en «Aceptar».
    • Expandid la regla «Dejar de arder cuando se está en el aire».
      • En «Acciones», haced clic en «Añadir». Esta acción provocará que el héroe deje de recibir daño cuando no esté en el suelo.
      • En la lista desplegable de «Acción», seleccionad «Stop All Damage Over Time».
  8. Vamos a probar si vuestro héroe recibe daño cuando está en el suelo y deja de recibirlo cuando está en el aire o saltando.
    1. Haced clic en «Atrás» dos veces.
    2. Salid de la sala de inicio y comprobad si vuestro héroe empieza a recibir daño.
    3. Saltad para comprobar si vuestro héroe deja de recibir daño.
  9. ¡Lo habéis conseguido! ¡El suelo es lava!

Ahora os vamos a guiar con más detalle en la creación de un modo de juego: «Héroe idéntico». En este modo, hay varias rondas cortas en las que todo el mundo juega con el mismo héroe. Al final de cada ronda, todos los jugadores reaparecen en el mismo sitio con el siguiente héroe de una lista aleatoria y predeterminada. Cuando acaba la última ronda, el jugador con el mayor número de asesinatos se lleva la victoria.

Por ejemplo, en una partida, podría ocurrir que todos empiecen con McCree y luego cambien a Pharah en la segunda ronda. En otra partida, es posible que empiecen con Widowmaker y después les toque Ashe en la segunda ronda. Debido a la forma en que se genera esa lista, ¡seguramente nunca juguéis dos veces con la misma lista de héroes!

Venga, ¡vamos a crear un script para «Héroe idéntico»!

  • Haced clic en «Jugar» > «Explorador de partidas» > «Crear» > «Ajustes» > «Taller».
  • En primer lugar, vamos a crear la regla que genera una lista con los héroes que pueden usarse.
    • Esta lista se almacenará en la variable global «L» en forma de matriz.
      • Las matrices pueden ser cualquier cosa, como una lista de jugadores, una lista de héroes, una lista de números, un valor único o hasta ningún valor (lo que se conoce como una matriz «vacía»).
      • Cada valor de la matriz se almacena en un índice único que empieza a contar desde «0». A veces, un índice y su valor se denominan «elemento».
      • El orden de una matriz importa, así que [Reaper, Winston, Mercy] es diferente a [Mercy, Winston, Reaper].
      • Las matrices pueden contener una mezcla de tipos. Por ejemplo, es posible tener la siguiente matriz: [123, Reaper, True, -4,5].
      • Si una entrada espera una matriz pero se le proporciona un único valor, la entrada recibirá ese valor almacenado en una matriz de un elemento.
      • Si una entrada espera un único valor pero se le proporciona una matriz, la entrada recibirá el primer valor de la matriz (o «0» si la matriz está vacía).
    • Añadid una regla y ponedle un nombre para saber lo que hace.
    • Estableced el tipo de evento como «Ongoing - Global». Esto significa que solo se ejecutará una única instancia de esta regla.
    • Puesto que la regla no tiene condiciones, se empezará a ejecutar en cuanto comience la partida.
    • Añadid una acción con:
      • «Acción»: «Set Global Variable».
        • «Variable»: «L».
      • «Valor»: «Hero».
        • «Héroe»: un héroe que queráis que se pueda usar.
      Esto crea la matriz de héroes. La acción «Set Global Variable» establece «L» como el héroe inicial de la lista.
    • Tener un solo héroe jugable en la partida sería aburrido, ¡así que vamos a añadir más! Añadid todas las acciones que queráis con:
      • «Acción»: «Modify Global Variable».
        • «Variable»: «L».
      • «Operación»: «Append To Array».
      • «Valor»: «Hero».
        • «Héroe»: un héroe que queráis que se pueda usar.
      Esto agrega más héroes a la matriz que habíamos creado en «L». Si la primera acción comenzase con «Modify Global Variable» en lugar de «Set Global Variable», la matriz empezaría por «0». Todas las variables son «0» de forma predeterminada, de modo que, si no establecéis un valor diferente, tendréis una matriz así: [0, Pharah, Hanzo, Ana...].
    • Añadamos la última acción de esta regla. Esta regla tomará una copia aleatorizada de la variable global «L» (la matriz de héroes), copiará una parte de la matriz a partir de la posición «0» e incluirá el número de héroes que debe tener el modo de juego. Esta copia se vuelve a almacenar después en la variable global «L», con lo que se obtiene un subconjunto aleatorio de la lista original de héroes proporcionada.
      • Por ejemplo: si la lista inicial de héroes era [Ashe, Doomfist, Hanzo, McCree, Pharah, Soldado: 76, Zenyatta, Widowmaker, Ana], la matriz aleatoria podría ser [Hanzo, Pharah, Widowmaker, Ana, Ashe, Doomfist, Soldado: 76, Zenyatta, McCree] y el subconjunto podría ser [Hanzo, Pharah, Widowmaker, Ana, Ashe, Doomfist].
  • La siguiente regla garantiza que, pase lo que pase, todos los jugadores estén usando el mismo héroe en todo momento.
    • Añadid una regla y ponedle un nombre para saber lo que hace.
    • Estableced el tipo de evento como «Ongoing - Each Player». Esto significa que cada jugador ejecutará su propia instancia de la regla.
    • Añadid dos condiciones que deberán cumplirse para que se fuerce el héroe:
      • El número de la ronda (la variable global «R») debe ser menor que el total de héroes en la lista de héroes; en caso contrario, la partida acaba y no se fuerzan más héroes. El número de la ronda empieza a contar desde «0», así que, si hay 6 rondas, el número de la ronda final será «5». No pasa nada por que la variable global «R» nunca tenga el valor «0», ya que todas las variables empiezan con el valor predeterminado «0».
        • «Valor»: «Global Variable».
          • «Variable»: «R».
        • Operador: «<».
        • «Valor»: «Count Of».
          • «Matriz»: «Global Variable».
            • «Variable»: «L».
      • Esto comprueba si el héroe que está llevando actualmente un jugador determinado debe ser diferente al héroe deseado para ese número de ronda. El «jugador determinado» lo representa «Event Player», un valor especial que hace referencia al jugador que está ejecutando actualmente una instancia de la regla. El «héroe deseado» de la ronda actual es el héroe almacenado en el índice correspondiente de la lista de héroes (variable global «L»). Puesto que la ronda actual está almacenada en la variable global «R», el héroe deseado se puede obtener mediante «Value In Array».
        • «Valor»: «Hero Of».
          • «Jugador»: «Event Player».
        • «Operador»: «!=».
        • «Valor»: «Value in Array».
          • «Matriz»: «Global Variable».
            • «Variable»: «L».
          • «Índice»: «Global Variable».
            • «Variable»: «R».
    • Una vez que sabemos que el jugador tiene que cambiar de héroe, añadimos dos acciones que se ejecutarán:
      • La primera acción forzará a que el «Event Player» use el héroe deseado. La primera entrada de esta acción es el jugador cuyo héroe debe forzarse; la segunda entrada es el héroe, así que hay que asignar el héroe deseado.
        • «Acción»: «Start Forcing Player To Be Hero».
        • «Jugador»: «Event Player».
        • «Héroe»: «Value In Array».
          • «Matriz»: «Global Variable».
            • «Variable»: «L».
          • «Índice»: «Global Variable».
            • «Variable»: «R».
      • La segunda acción precarga el siguiente héroe de la lista para que el jugador no tenga que esperar mucho hasta ver su cambio de héroe. Cada jugador precarga el héroe por separado, pese a que todo el mundo acabará jugando con el mismo. Esto se debe a que es posible que cada jugador tenga que precargar un aspecto diferente para ese héroe. El uso del valor «Add» para añadir 1 a la variable global «R» le indica a la acción que precargue el siguiente héroe y no el héroe actual. En la última ronda, el resultado será un índice de matriz que estará fuera del límite de la variable global de matriz «L». Esto no supone ningún problema, ya que se considera que todos los valores fuera del límite de una matriz son «0», así que cualquier acción que espere un héroe y reciba un «0» no hará nada.
        • «Acción»: «Preload Hero».
        • «Jugador»: «Event Player».
        • «Héroe»: «Value In Array».
          • «Matriz»: «Global Variable».
            • «Variable»: «L».
          • «Índice»: «Add».
            • «Valor»: «Global Variable».
              • «Variable»: «R».
            • «Valor»: «Number».
              • «Cifra»: «1,00».
  • La siguiente regla que crearemos prepara cada ronda si no se ha iniciado aún.
    • Añadid una regla y ponedle un nombre para saber lo que hace.
    • Estableced el tipo de evento como «Ongoing - Global». Esto significa que solo se ejecutará una única instancia de esta regla.
    • Añadid tres condiciones que deberán cumplirse para que empiece la ronda:
      • La partida debe estar en curso, es decir, que la pantalla de selección de héroes y el tiempo de preparación ya deben haber pasado, pero la partida no puede haber acabado aún.
        • «Valor»: «Is Game In Progress».
        • Operador: «==».
        • «Valor»: «True».
      • La variable global «I» debe ser «False». Esta variable se utiliza para indicar si la ronda actual ha empezado. Si la variable global «I» no se ha establecido nunca, tendrá un valor de «0», lo que equivale a «False» en comparaciones como esta.
        • «Valor»: «Global Variable».
          • «Variable»: «I».
        • Operador: «==».
        • «Valor»: «False».
      • El número de ronda (la variable global «R») debe ser menor que el total de héroes en la lista de héroes.
        • «Valor»: «Global Variable».
          • «Variable»: «R».
        • Operador: «<».
        • «Valor»: «Count Of».
          • «Matriz»: «Global Variable».
            • «Variable»: «L».
    • Una vez que sabemos que se cumplen todas las condiciones, hay que iniciar la ronda. Añadid unas cuantas acciones para ello:
      • La primera acción le dice al modo de juego básico que la partida no debe finalizar según los criterios normales. En todos contra todos, esto implica que la partida no finalice si el tiempo se agota o alguien alcanza el límite de puntuación. Una vez ejecutada esta acción, la partida no finalizará hasta que el script rehabilite la forma de finalización propia del modo de juego o se declare un ganador de forma explícita.
        • «Acción»: «Disable Built-in Game Mode Completion».
      • La siguiente acción establece la longitud de una ronda como tiempo actual del modo de juego.
        • «Acción»: «Set Match Time».
        • «Tiempo»: «Number».
        • «Cifra»: «60,00».
      • Esta acción establece la variable global «I» como «True» para que no se produzca el inicio de ronda hasta que la variable global «I» vuelva a ser «False».
        • «Acción»: «Set Global Variable».
        • «Variable»: «I».
        • «Valor»: «True».
  • Esta regla espera a que se agote el tiempo de la ronda actual antes de avanzar a la siguiente.
    • Añadid una regla y ponedle un nombre para saber lo que hace.
    • Estableced el tipo de evento como «Ongoing - Global». Esto significa que solo se ejecutará una única instancia de esta regla.
    • Añadid dos condiciones que deberán cumplirse para que la partida avance a la siguiente ronda:
      • La partida debe estar en curso, es decir, que la pantalla de selección de héroes y el tiempo de preparación ya deben haber pasado, pero la partida no puede haber acabado aún.
        • «Valor»: «Is Game In Progress».
        • Operador: «==».
        • «Valor»: «True».
      • El tiempo actual de partida debe ser «0», lo que significa que se ha agotado el tiempo de la ronda.
        • «Valor»: «Match Time».
        • Operador: «==».
        • «Valor»: «Number».
          • «Cifra»: «0,00».
    • Como respuesta a que se cumplan estas condiciones y acabe la ronda, la partida hará avanzar el número de ronda y marcará la ronda como no iniciada. Añadid dos acciones para esto:
      • Esta acción les comunica a las demás reglas que la partida ha pasado a la siguiente ronda.
        • «Acción»: «Modify Global Variable».
        • «Variable»: «R».
        • «Operación»: «Add».
        • «Valor»: «Number».
          • «Cifra»: «1,00».
      • Esta acción establece la variable global «I» como «False» para que las demás reglas sepan que es necesario iniciar una nueva ronda.
        • «Acción»: «Set Global Variable».
        • «Variable»: «I».
        • «Valor»: «False».
  • La última regla finaliza la partida cuando se han jugado todas las rondas.
    • Añadid una regla y ponedle un nombre para saber lo que hace.
    • Estableced el tipo de evento como «Ongoing - Global». Esto significa que solo se ejecutará una única instancia de esta regla.
    • Añadid una condición que comprobará si la variable global «R» equivale al número de elementos en la variable global «L». Si es así, significa que se ha jugado una ronda por cada héroe de la lista. Cuando ocurre esto, la partida debería finalizar.
      • «Valor»: «Global Variable».
        • «Variable»: «R».
      • Operador: «==».
      • «Valor»: «Count Of».
        • «Matriz»: «Global Variable».
          • «Variable»: «L».
    • Una vez que se cumpla la condición, esta acción rehabilitará la forma de finalización propia del modo de juego. Puesto que el temporizador estará en «0», el modo de juego finalizará la partida de inmediato, y comenzará el proceso de fin de partida estándar.
      • «Acción»: «Enable Built-in Game Mode Completion».

Depurar un script

Una vez creado un script, podéis usar el inspector del Taller para ver su ejecución en la partida, comprobar qué acciones y condiciones están activas y ver si hay algún problema con él.

Para acceder al inspector del Taller:

  1. Iniciad una partida con el script que habéis creado.
  2. Pulsad «Esc».
  3. Pulsad «Abrir inspector del Taller».
  4. Pulsad «Habilitar». Esta característica no está habilitada por defecto.

El inspector del Taller está formado por varios elementos:

  • «Entrada»: la entrada os permite saber qué está pasando.
  • «Comentario»: aquí se muestra el nombre que se le ha dado a la regla.
  • «Condición»: indica las condiciones que se deben cumplir para que se ejecuten acciones.
  • «Acción»: indica qué acción se ha ejecutado.
  • Barra deslizante de línea temporal: este control os permite avanzar o retroceder en el tiempo de la partida.

Compartir un script

Una vez que tengáis vuestro maravilloso script, podréis compartirlo con todo el mundo (o solo con vuestros amigos) durante los seis próximos meses. Los scripts que creéis se pueden utilizar en cualquier plataforma de juego, independientemente de la que se usara para crearlos.

Para compartir un script:

  1. Haced clic en «Jugar» > «Explorador de partidas» > «Crear» > «Ajustes» > «Compartir código» .
  2. Haced clic en «Copiar».
  3. ¡Enviadles el enlace a los demás!

Abrir un script

Si alguien ha compartido un script que os gustaría utilizar:

  1. Haced clic en «Jugar» > «Explorador de partidas» > «Crear» > «Ajustes» > «Importar código» .
  2. Introducid el enlace.
  3. Haced clic en «Aceptar».

Trucos y consejos

  • Es más fácil acceder al inspector del Taller si le asignáis un atajo. Para ello, haced clic en «Esc« > «Opciones» > «Controles». Bajad hasta que veáis «Abrir inspector del Taller» y asignadle una tecla.
  • El inspector del Taller no solo os dirá lo que ha pasado, ¡sino también lo que no ha pasado (y por qué)!
  • ¡No os olvidéis de las partidas con reglas predefinidas! Es posible que haya determinados ajustes ya existentes que podáis aprovechar en lugar de tener que idear una nueva solución por vuestra cuenta.
  • Si un evento no se activa como esperabais, es posible que el «Event Player» ya esté ejecutando la lista de acciones. Echadles un ojo a las acciones «Wait» de vuestra regla, sobre todo si alguna de ellas está configurada para que ignore condiciones.
  • Para escoger una ubicación concreta del mapa, utilizad el valor «Vector» y haced clic en el icono de cámara.
  • El valor «Has Spawned» es útil si solo queréis que se ejecuten las operaciones lógicas después de que un jugador tenga un héroe en la partida.
  • Si solo queréis que las reglas se ejecuten después de las fases de preparación y selección de héroes de la partida, utilizad el valor «Is Game In Progress».
  • Asignarle un valor a una variable y observarla en el inspector del Taller suele ser la manera más fácil de comprender el resultado del valor durante una partida.
  • Podéis almacenar el último efecto o icono creado en una variable de jugador mediante el valor «Last Created Entity», que os permite hacer referencia a la entidad más adelante para destruirla.
  • Combinar matrices filtradas con valores como «All Players On Objective» o «Players Within Radius» permite filtrar con facilidad por los jugadores que cumplen determinados criterios (muerto, vivo, con efecto de estado, etc.).
  • Si necesitáis comportamientos ramificados, podéis emplear la acción «Skip If» para saltaros cualquier número de acciones si se cumple una determinada condición. Si lo hacéis, es posible que las acciones saltadas tengan que incluir una acción «Abort» para evitar que se ejecuten ambas ramas de comportamiento.
  • Podéis filtrar las listas desplegables escribiendo.
  • Si un valor espera una matriz como parámetro pero no recibe ninguna, asignará la entrada a una matriz de tamaño 1.
    • Lo mismo ocurre al contrario: si un valor espera un único elemento, pero recibe una matriz, utilizará el elemento que se encuentre en la posición «0» de esa matriz.
  • Dividir vuestro trabajo en diversas acciones y condiciones os ayudará a averiguar con mayor facilidad qué es lo que no está funcionando bien.
  • Si no tenéis claro lo que hace una acción, un valor o una entrada, podéis dejar el cursor del ratón encima en PC o seleccionar «Mostrar detalles» en consola para ver una explicación.
  • ¡Rellenad siempre el campo de nombre de cada regla para describir lo que hace cada una!
  • ¡Probad el script con frecuencia!
Siguiente artículo
StarCraft II
11 h.

Notas del parche 4.11.2 de StarCraft II

¡Ya ha llegado el parche 4.11.2! ¡Os lo contamos en detalle!