Foro especializado en Warcraft III y su editor
 
BuscarEntrar al ChatboxPortal del foroÍndiceSpellsRegistrarseConectarseGrupos de Usuarios
Eventos Actuales
¡ Bienvenido Invitado !

Editar Perfil

Tus temas
Tus Mensajes ()

Enlaces rápidos








Comparte
 

 [GUI] Sistema de lista de espera para enfrentamientos 1v1

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
mistes.ar
Iniciado


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 2
Reputación Reputación : 0
Monedas de oro : 8
Monedas de Platino : 0 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empty

Inventario :
[GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10
[GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10

[GUI] Sistema de lista de espera para enfrentamientos 1v1 Empty
Mensaje(#) Tema: [GUI] Sistema de lista de espera para enfrentamientos 1v1 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Clock10Vie Mayo 17, 2019 1:41 am

Usuario nuevo. Si alguno tiene una idea mejor para el título es bienvenida :risa:

Contexto: Tengo un mapa terminado el año pasado que consiste en duelos 1v1 entre unidades seleccionadas por cada batalla. El mapa solo permite dos jugadores y mi idea es ampliar la cantidad, es por eso que me puse manos a la obra con esto. La idea es un sistema de duelos, estilo Quake, donde quien gana permanece en batalla y el siguiente en lista de espera entra en acción.

Estuve buscando sistemas similares pero no tuve suerte, imagino que existira algo mas refinado en JASS, pero no lo pude encontrar. Comparto esto además para obtener algo de feedback, porque si bien funciona soy consciente de que es algo rudimentario.

¿Qué es lo que hace?

El mapa apenas se inicie va mostrar un mensaje con los nombres de los dos primeros jugadores detectados (ejemplo 1v2).

Nota: Los nombres de los jugadores son renombrados para el ejemplo por números por comodidad'.

En este caso, nosotros en chat escribiríamos que jugador queremos que 'gane' la batalla (1 o 2, otro valor no hace nada).

Para probar el funcionamiento hay dos cosas a tener en cuenta:

- Quien cree la partida debe estar como jugador 1: El comando de chat para determinar 'ganador' solo esta puesto en el jugador 1
- Debe haber al menos 3 jugadores (agregar dos ordenadores como mínimo) para que el ciclo tenga sentido

Una vez escrito el valor deseado, saldra un nuevo mensaje con una nueva batalla. Ejemplo, si era 1v2 y pusimos 1, saldra 1v3. Si pusimos 2, saldra 2v3.

[GUI] Sistema de lista de espera para enfrentamientos 1v1 SxlD9NG




Si bien en este ejemplo no hay unidades o batallas reales, aplicado a un mapa elaborado puede resultar bastante interesante.

Cada vez que se re-define una nueva batalla se tienen en variables los índices de los rivales por lo que a través del array de jugadores, resultaría sencillo crear triggers estilo selección de unidad para cada jugador particular.

En este caso hay 3 variables enteras vitales.

- Defensor_Index (sería el gana y defiende su lugar)
- Retador_Index (el rival actual)
- Actual_Index (el índice del último retador). Esta variable la uso para evitar lo mas que se pueda recorrer todo el array de jugadores al momento de definir un nuevo rival.


Triggers

[gui]
Inicio
   Acontecimientos
       Map initialization
   Condiciones
   Acciones
       Visibilidad - Disable fog of war
       Visibilidad - Disable black mask
       --------                          --------
       --------                          --------
       --------                          --------
       -------- Renombrando los jugadores por comodidad --------
       Jugador - Set name of Jugador 1 (rojo) to 1
       Jugador - Set name of Jugador 2 (azul) to 2
       Jugador - Set name of Jugador 3 (teja) to 3
       Jugador - Set name of Jugador 4 (morado) to 4
       Jugador - Set name of Jugador 5 (amarillo) to 5
       Jugador - Set name of Jugador 6 (naranja) to 6
[/gui]

[gui]
Definir Array de jugadores
   Acontecimientos
       Map initialization
   Condiciones
   Acciones
       Set Jugadores[1] = Jugador 1 (rojo)
       Set Jugadores[2] = Jugador 2 (azul)
       Set Jugadores[3] = Jugador 3 (teja)
       Set Jugadores[4] = Jugador 4 (morado)
       Set Jugadores[5] = Jugador 5 (amarillo)
       Set Jugadores[6] = Jugador 6 (naranja)
[/gui]

[gui]
Contar jugadores
   Acontecimientos
       Map initialization
   Condiciones
   Acciones
       Detonador - Turn off (This trigger)
       For each (Integer A) from 1 to 6, do (Actions)
           Bucle: Acciones
               If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                   Si: Condiciones
                       ((Jugadores[(Integer A)] controller) Igual a Usuario) or ((Jugadores[(Integer A)] controller) Igual a Ordenador)
                       (Jugadores[(Integer A)] slot status) Igual a Está jugando
                   Entonces: Acciones
                       Set Cantidad_De_Jugadores = (Cantidad_De_Jugadores + 1)
                   Otros: Acciones
       If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Cantidad_De_Jugadores Mayor que 2
           Entonces: Acciones
               Detonador - Turn on Elegir Defensor y Retador por primera vez
               Detonador - Turn on Elegir nuevo Defensor
               Detonador - Turn on Elegir nuevo Retador
               Detonador - Run Elegir Defensor y Retador por primera vez (ignoring conditions)
               Misión - Display to (All players) the Actualización de misión message: Escribir el número...
           Otros: Acciones
               Misión - Display to (All players) the Actualización de misión message: El jugador no es Pl...
[/gui]

[gui]
Jugador sale
   Acontecimientos
       Jugador - Jugador 1 (rojo) leaves the game
       Jugador - Jugador 2 (azul) leaves the game
       Jugador - Jugador 3 (teja) leaves the game
       Jugador - Jugador 4 (morado) leaves the game
       Jugador - Jugador 5 (amarillo) leaves the game
       Jugador - Jugador 6 (naranja) leaves the game
   Condiciones
   Acciones
       Set Cantidad_De_Jugadores = (Cantidad_De_Jugadores - 1)
       If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Cantidad_De_Jugadores Igual a 1
           Entonces: Acciones
               For each (Integer A) from 1 to 6, do (Actions)
                   Bucle: Acciones
                       If ((Jugadores[(Integer A)] slot status) Igual a Está jugando) then do (Partida - Victory Jugadores[(Integer A)] (Mostrar dialogs, Mostrar scores)) else do (Do nothing)
           Otros: Acciones
       --------                                         --------
       --------                                         --------
       --------                                         --------
       -------- Si el que salió era el defensor, hacemos defensor al retador actual --------
       If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Player number of (Triggering player)) Igual a (Player number of Jugadores[Defensor_Index])
           Entonces: Acciones
               Set Defensor_Index = Retador_Index
               Detonador - Run Elegir nuevo Retador (ignoring conditions)
               Skip remaining actions
           Otros: Acciones
       --------                                         --------
       --------                                         --------
       --------                                         --------
       -------- Si el que salió era el retador, buscamos uno nuevo --------
       If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               (Player number of (Triggering player)) Igual a (Player number of Jugadores[Retador_Index])
           Entonces: Acciones
               Detonador - Run Elegir nuevo Retador (ignoring conditions)
               Skip remaining actions
           Otros: Acciones

[/gui]

[gui]
Elegir Defensor y Retador por primera vez
   Acontecimientos
       Map initialization
   Condiciones
   Acciones
       -------- A este if solo se accedera cuando la partida se inicia --------
       -------- (Luego los valores ya no seran 0) --------
       For each (Integer A) from 1 to 6, do (Actions)
           Bucle: Acciones
               If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                   Si: Condiciones
                       ((Jugadores[(Integer A)] controller) Igual a Usuario) or ((Jugadores[(Integer A)] controller) Igual a Ordenador)
                       Defensor_Index Igual a 0
                       (Jugadores[(Integer A)] slot status) Igual a Está jugando
                   Entonces: Acciones
                       Set Defensor_Index = (Player number of Jugadores[(Integer A)])
                   Otros: Acciones
                       If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                           Si: Condiciones
                               ((Jugadores[(Integer A)] controller) Igual a Usuario) or ((Jugadores[(Integer A)] controller) Igual a Ordenador)
                               Retador_Index Igual a 0
                               Defensor_Index No igual a  (Player number of Jugadores[(Integer A)])
                               (Jugadores[(Integer A)] slot status) Igual a Está jugando
                           Entonces: Acciones
                               Set Retador_Index = (Player number of Jugadores[(Integer A)])
                               Set Actual_Index = Retador_Index
                               Partida - Display to (All players) the text: ((---->     + (Name of Jugadores[Defensor_Index])) + ( vs  + (Name of Jugadores[Retador_Index])))
                           Otros: Acciones
       Detonador - Turn off (This trigger)
[/gui]

[gui]
Elegir nuevo Defensor
   Acontecimientos
       Jugador - Jugador 1 (rojo) types a chat message containing 1 as Una correspondencia exacta
       Jugador - Jugador 1 (rojo) types a chat message containing 2 as Una correspondencia exacta
       Jugador - Jugador 1 (rojo) types a chat message containing 3 as Una correspondencia exacta
       Jugador - Jugador 1 (rojo) types a chat message containing 4 as Una correspondencia exacta
       Jugador - Jugador 1 (rojo) types a chat message containing 5 as Una correspondencia exacta
       Jugador - Jugador 1 (rojo) types a chat message containing 6 as Una correspondencia exacta
   Condiciones
       ((Integer((Entered chat string))) Igual a Defensor_Index) or ((Integer((Entered chat string))) Igual a Retador_Index)
   Acciones
       If (All Conditions are True) then do (Then Actions) else do (Else Actions)
           Si: Condiciones
               Cantidad_De_Jugadores Mayor que 2
           Entonces: Acciones
               Set Defensor_Index = (Integer((Entered chat string)))
               Detonador - Run Elegir nuevo Retador (ignoring conditions)
           Otros: Acciones
               -------- Si hay 2 no hacemos nada =) --------
[/gui]

[gui]
Elegir nuevo Retador
   Acontecimientos
   Condiciones
   Acciones
       -------- Bucle que recorre desde la posición del último retador hasta el último slot --------
       For each (Integer A) from Actual_Index to 6, do (Actions)
           Bucle: Acciones
               If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                   Si: Condiciones
                       ((Jugadores[(Integer A)] controller) Igual a Usuario) or ((Jugadores[(Integer A)] controller) Igual a Ordenador)
                       (Jugadores[(Integer A)] slot status) Igual a Está jugando
                       Defensor_Index No igual a  (Player number of Jugadores[(Integer A)])
                       Retador_Index No igual a  (Player number of Jugadores[(Integer A)])
                   Entonces: Acciones
                       Set Retador_Index = (Player number of Jugadores[(Integer A)])
                       Set Actual_Index = Retador_Index
                       Partida - Display to (All players) the text: ((---->     + (Name of Jugadores[Defensor_Index])) + ( vs  + (Name of Jugadores[Retador_Index])))
                       Skip remaining actions
                   Otros: Acciones
       --------                                 --------
       --------                                 --------
       --------                                 --------
       -------- (Puede pasar que no existan mas retadores después del último, entonces arrancamos del principio hasta el índice para buscarlo) --------
       For each (Integer A) from 1 to Actual_Index, do (Actions)
           Bucle: Acciones
               If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                   Si: Condiciones
                       ((Jugadores[(Integer A)] controller) Igual a Usuario) or ((Jugadores[(Integer A)] controller) Igual a Ordenador)
                       (Jugadores[(Integer A)] slot status) Igual a Está jugando
                       Defensor_Index No igual a  (Player number of Jugadores[(Integer A)])
                       Retador_Index No igual a  (Player number of Jugadores[(Integer A)])
                   Entonces: Acciones
                       Set Retador_Index = (Player number of Jugadores[(Integer A)])
                       Set Actual_Index = Retador_Index
                       Partida - Display to (All players) the text: ((---->     + (Name of Jugadores[Defensor_Index])) + ( vs  + (Name of Jugadores[Retador_Index])))
                       Skip remaining actions
                   Otros: Acciones
       --------                                 --------
       --------                                 --------
       --------                                 --------
       -------- (Aca solo llegaría si hay dos jugadores, o uno solo) --------
       Partida - Display to (All players) the text: Se repite el duelo.
[/gui]


Link: https://www.epicwar.com/maps/293642/


Última edición por Marcos_M el Vie Mayo 17, 2019 3:52 pm, editado 1 vez (Razón : Agregado el link al map. Marcos_M)
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3205
Reputación Reputación : 550
Monedas de oro : 9987
Monedas de Platino : 0 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empty

Inventario :
[GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10
[GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Empysl10

[GUI] Sistema de lista de espera para enfrentamientos 1v1 Empty
Mensaje(#) Tema: Re: [GUI] Sistema de lista de espera para enfrentamientos 1v1 [GUI] Sistema de lista de espera para enfrentamientos 1v1 Clock10Vie Mayo 17, 2019 3:54 pm

A vista gorda todos los detonadores parecen estar bien hechos.
Después abriré el mapa ejemplo y apruebo el tutorial

Welcome to the forum
Volver arriba Ir abajo
 

[GUI] Sistema de lista de espera para enfrentamientos 1v1

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.

 Temas similares

-
» El Apple Watch triunfa antes de salir a la venta: colas para verlo y lista de espera para comprarlo
» Lista de cartas para venta.
» Silhouette Core - Sistema de rol con d6
» Filosofía de la Política: El Sistema Político Ideal
» EXPLICACION PARA JUGAR Y GANAR APOSTANDO A LA UNIDAD

Permisos de este foro:No puedes responder a temas en este foro.
Warcraft III - WorldEditor :: Academia :: Nuevos tutoriales :: Tutoriales nuevos-