[Aportes] Torneos automáticos

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Empece a desarrollar en mis ratos libres un código de torneos automáticos, la idea es que sea 100% automáticos, a lo gran matih.- a quien le copie los ' @@

El sistema en sí, hace eventos, a través de un GM, que solamente elige la modalidad, cupos, y lo básico que todos sabemos. Ahora la parte más linda del evento, es que se desarrolla solo.

Mi idea es crear un sistema en el que puedas jugar:
1VS1
2VS2
3VS3
4VS4 (CAPAZ)
Death
Caceria
Daga rusa
Muchos eventos más automaticos.


Para que se den una idea. Por ejemplo en cacería, que es la tipica "El gm mete apocasos a los users que esten inmo, o el gm tira inmo y los demas atacan" no sé como fuera el caso que desee hacerlo. Con este sistema automático, creariamos un "GM bot" el cual lance hechizos al azar a todos los participantes. El que queda último ganaría.
Lo mismo con el tema de Daga rusa, el evento que al apuñalar perdes. Crearíamos un nuevo npc el cual apuñale a la víctima, y así al igual que el anterior, al apuñalar saldría del torneo. Y sería todo al azar.


Esto es lo lindo del sistema automático, solo pones como queres que sea y le mandas a "Hacer"

Bueno empecé a desarrollarlo y por ahora voy esto, me falta demasiado. Pero empece con el tema de las arenas, slots y empecé a crear el 1vs1 (lo pueden ver plasmado y explicado el razonamiento) La idea sería probarlo con 1vs1 y después sigo con las demás opciones xD. Lo importante acá es testear el funcionamiento del sistema, chequeando todos los casos: Ganador, perdedor, deslogeadas, deslogeadas sin haber empezado el evento(abrir mas cupos) y todas esas cosas para hacer elegible este sistema..

DEJO EL CÓDIGO. LA IDEA DE ESTO ES QUE LEAN EL CÓDIGO, AQUELLOS QUE LO QUIERAN USAR PARA UNA IDEA LO EMPLEEN. Y SI NO, TIRAR COMENTARIOS PARA VER QUE CAMBIARÍAN DEL MISMO, ALGUNA COSA HECHA DE OTRA FORMA, O ALGO NUEVO PARA AGREGARLE.

Gracias! El funcionamiento lo van a poder probar en la nueva versión de ArgenDrag

Código:
'#########################Creado por Shak(Lautaro Marino) Desde cero###########################
'##############################################################################################
'##########################Sitema de torneos automáticos#######################################

Option Explicit

Public Enum eTipoTorneo
    Indefinido = 0
    UNOvsUNO
    DOSvsDOS
    TRESvsTRES
    Death
    Caceria
    DagaRusa
End Enum

Public Type tTorneosUsers
    UserIndex As Integer
    UserName As String
    Mapa_Anterior As Integer
    X_Anterior As Byte
    Y_Anterior As Byte
    Pareja(1 To 2) As Integer
End Type

Public Type tTorneos
    Tipo As eTipoTorneo
    Cupos As Byte
    NivelMinimo As Byte
    NivelMaximo As Byte
    ValorInscripcion As Long
    Participes As Byte
   
   
    'Premios
    Objeto As Obj
    Premio_Oro As Long
   
    Luchando As Boolean
End Type

Private Type tMapasEventos
    MapaEspera(1 To 32) As WorldPos
    MapaLucha(1 To 16) As WorldPos
    Lucha_Ocupado(1 To 16) As Byte
End Type

Public Torneo As tTorneos
Public MapaEventos As tMapasEventos
Public UserTorneo(1 To 32) As tTorneosUsers 'Máximo de participantes

Public Sub InicializarEventos()
    With MapaEventos
        'Sala de espera
        .MapaEspera(1).Map = 1
       
        .MapaEspera(1).X = 50:  .MapaEspera(8).X = 50:  .MapaEspera(15).X = 50:  .MapaEspera(22).X = 50:  .MapaEspera(29).X = 50
        .MapaEspera(1).Y = 50:  .MapaEspera(8).Y = 50:  .MapaEspera(15).Y = 50:  .MapaEspera(22).Y = 50:  .MapaEspera(29).Y = 50
       
       
        .MapaEspera(2).X = 50:  .MapaEspera(9).X = 50:  .MapaEspera(16).X = 50:  .MapaEspera(23).X = 50:  .MapaEspera(30).X = 50
        .MapaEspera(2).Y = 50:  .MapaEspera(9).Y = 50:  .MapaEspera(16).Y = 50:  .MapaEspera(23).Y = 50:  .MapaEspera(30).Y = 50
       
        .MapaEspera(3).X = 50:  .MapaEspera(10).X = 50:  .MapaEspera(17).X = 50:  .MapaEspera(24).X = 50:  .MapaEspera(31).X = 50
        .MapaEspera(3).Y = 50:  .MapaEspera(10).Y = 50:  .MapaEspera(17).Y = 50:  .MapaEspera(24).Y = 50:  .MapaEspera(31).Y = 50
       
        .MapaEspera(4).X = 50:  .MapaEspera(11).X = 50:  .MapaEspera(18).X = 50:  .MapaEspera(25).X = 50:  .MapaEspera(32).X = 50
        .MapaEspera(4).Y = 50:  .MapaEspera(11).Y = 50:  .MapaEspera(18).Y = 50:  .MapaEspera(25).Y = 50:  .MapaEspera(32).Y = 50
       
        .MapaEspera(5).X = 50:  .MapaEspera(12).X = 50:  .MapaEspera(19).X = 50:  .MapaEspera(26).X = 50:
        .MapaEspera(5).Y = 50:  .MapaEspera(12).Y = 50:  .MapaEspera(19).Y = 50:  .MapaEspera(26).Y = 50:
       
        .MapaEspera(6).X = 50:  .MapaEspera(13).X = 50:  .MapaEspera(20).X = 50:  .MapaEspera(27).X = 50:
        .MapaEspera(6).Y = 50:  .MapaEspera(13).Y = 50:  .MapaEspera(20).Y = 50:  .MapaEspera(27).Y = 50:
       
        .MapaEspera(7).X = 50:  .MapaEspera(14).X = 50:  .MapaEspera(21).X = 50:  .MapaEspera(28).X = 50:
        .MapaEspera(7).Y = 50:  .MapaEspera(14).Y = 50:  .MapaEspera(22).Y = 50:  .MapaEspera(28).Y = 50:
       
       
        'Mapas de enfrentamientos
        .MapaLucha(1).Map = 2
       
        .MapaLucha(1).X = 50:  .MapaLucha(8).X = 50:  .MapaLucha(15).X = 50:
        .MapaLucha(1).Y = 50:  .MapaLucha(8).Y = 50:  .MapaLucha(15).Y = 50:
       
        .MapaLucha(2).X = 50:  .MapaLucha(9).X = 50:  .MapaLucha(16).X = 50:
        .MapaLucha(2).Y = 50:  .MapaLucha(9).Y = 50:  .MapaLucha(16).Y = 50:
       
        .MapaLucha(3).X = 50:  .MapaLucha(10).X = 50:
        .MapaLucha(3).Y = 50:  .MapaLucha(10).Y = 50:
       
        .MapaLucha(4).X = 50:  .MapaLucha(11).X = 50:
        .MapaLucha(4).Y = 50:  .MapaLucha(11).Y = 50:
       
        .MapaLucha(5).X = 50:  .MapaLucha(12).X = 50:
        .MapaLucha(5).Y = 50:  .MapaLucha(12).Y = 50:
       
        .MapaLucha(6).X = 50:  .MapaLucha(13).X = 50:
        .MapaLucha(6).Y = 50:  .MapaLucha(13).Y = 50:
       
        .MapaLucha(7).X = 50:  .MapaLucha(14).X = 50:
        .MapaLucha(7).Y = 50:  .MapaLucha(14).Y = 50:
       
       
        Call ResetEventos

    End With
End Sub
Public Function SearchSlotLucha() As Byte
' @ Author: Shak
' Buscamos una arena desocupada y la ocupamos

    Dim i As Byte
   
    For i = 1 To 16
        If MapaEventos.Lucha_Ocupado(i) = 0 Then
            'MapaEventos.Lucha_Ocupado(i) = 1
            SearchSlotLucha = i
        End If
    Next i
End Function

Public Function FreeSlotEvento(ByVal UserIndex As Integer) As Byte
'Author: Shak
' @ Buscamos una pos libre para ingresar al evento. En caso de encontrarla la rellenamos.
    With UserList(UserIndex)
   
   
        For FreeSlotEvento = 1 To Torneo.Cupos
            If UserTorneo(FreeSlotEvento).UserIndex = -1 Then
                UserTorneo(FreeSlotEvento).UserIndex = UserIndex
                UserTorneo(FreeSlotEvento).Mapa_Anterior = .pos.Map
                UserTorneo(FreeSlotEvento).X_Anterior = .pos.X
                UserTorneo(FreeSlotEvento).Y_Anterior = .pos.Y
               
                'UserTorneo(FreeSlotEvento).Pareja(1)
                'UserTorneo(FreeSlotEvento).Pareja(2)
                Exit Function
            End If
        Next FreeSlotEvento
       
        FreeSlotEvento = -1
    End If
End Function

Public Function SearchSlotUser(ByVal UserIndex As Integer) As Byte
' @ Author: Shak
' @ Buscamos al personaje dentro del evento. Cuando lo encontramos cerramos la función
    With UserList(UserIndex)
        For SearchSlotUser = 1 To Torneo.Cupos
            If UserTorneo(SearchSlotUser).UserIndex = UserIndex Then
                Exit Function
            End If
        Next SearchSlotUser
    End With
End Function

Public Sub ChequearEstado1vs1(ByVal Ganador As Integer, ByVal Perdedor As Integer)
' @ Author: Shak
' @ Chequeamos que personaje es el ganador. Al perdedor lo regresamos. Al ganador vuelve a la sala de espera. Chequeamos final

    With UserList(Ganador)
        Dim slot As Byte
        slot = SearchSlotUser(UserIndex)
       
        Call WarpUserChar(UserTorneo(slot).UserIndex, MapaEventos.MapaEspera(slot).Map, MapaEventos.MapaEspera(slot).X, MapaEventos.MapaEspera(slot).Y, False)
    End With
   
    '//USUARIO PERDEDOR
    slot = SearchSlotUser(Perdedor)
       
    Call WriteConsoleMsg(UserTorneo(slot).UserIndex, "Has perdido el evento. Buena suerte para la próxima joven", FontTypeNames.FONTTYPE_INFO)
    Call WarpUserChar(Perdedor, UserTorneo(slot).Mapa_Anterior, UserTorneo(slot).X, UserTorneo(slot).Y, False)


    ' @ Manejamos los participantes. El máximo que podemos encontrar acá es 16, ya que empezamos con 32. _
        Luego al llegar a 16 mandamos espera de 2 minutos y lanzamos la siguiente ronda.
       
    Torneo.Participes = Torneo.Participes - 1

    Select Case Torneo.Participes
        Case 16 ' Pasamos a la segunda ronda
       
        Case 8 'Tercer ronda
       
        Case 4 'Cuarta ronda
       
        Case 2 'Final
       
        Case 1 'Ganador de la final
            Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final " & Torneo.Tipo & "»" & UserList(Ganador).name & " vs " & _
            UserList(Perdedor).name & " .Ganador " & UserList(Ganador).name & ".", FontTypeNames.FONTTYPE_INFO))
               
            Call WarpUserChar(Ganador, UserTorneo(slot).Mapa_Anterior, UserTorneo(slot).X, UserTorneo(slot).Y, True)
    End Select
End Sub

Public Sub Desarrollar1vs1()
    Dim SlotFree As Byte
    Dim Participantes As String 'Almacenamos los nombres
   
    If Torneo.Luchando = True Then Exit Sub
   
    Select Case Torneo.Participes
        Case 32 'Recien iniciado el evento. Mandamos a luchar a 16vs16
            SlotFree = SearchSlotLucha
           
            If SlotFree <> 0 Then
                For i = 1 To Int(Torneo.Participes / 2)
               
                    '¿Alguno de los personajes no se encuentra listo para luchar? Pasamos automáticamente.
                    If UserTorneo(i) = 0 Then
                        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Clasificatoria» El personaje " & _
                        UserTorneo(i).UserName & " no se encuentra listo. " & UserTorneo(Int(Torneo.Participes / 2) + 1).UserName & " pasa automáticamente.", _
                        FontTypeNames.FONTTYPE_GUILD))
                       
                        Call WarpUserChar(UserTorneo(Int(Torneo.Participes / 2) + 1).UserIndex, MapaEventos.MapaEspera(Int(Torneo.Participes / 2) + 1).Map, MapaEventos.MapaEspera(Int(Torneo.Participes / 2) + 1).X, MapaEventos.MapaEspera(Int(Torneo.Participes / 2) + 1).Y, False)
                       
                    ElseIf UserTorneo(Int(Torneo.Participes / 2) + 1).UserIndex = 0 Then
                        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Clasificatoria» El personaje " & _
                        UserTorneo(Int(Torneo.Participes / 2) + 1).UserName & " no se encuentra listo. " & UserTorneo(i).UserName & " pasa automáticamente.", _
                        FontTypeNames.FONTTYPE_GUILD))
                       
                        Call WarpUserChar(UserTorneo(i).UserIndex, MapaEventos.MapaEspera(i).Map, MapaEventos.MapaEspera(i).X, MapaEventos.MapaEspera(i).Y, False)
                    End If
                   
                    Call WarpUserChar(i, MapaEventos.MapaLucha(i).Map, MapaEventos.MapaLucha(i).X, MapaEventos.MapaLucha(i).Y, False)
                    Call WarpUserChar(Int(Torneo.Participes / 2), MapaEventos.MapaLucha(i).Map, MapaEventos.MapaLucha(i).X + 10, MapaEventos.MapaLucha(i).Y + 10, False)
                   
                   
                    Participantes = Participantes & " " & UserList(UserTorneo(i).UserIndex).name & " vs " & UserList(UserTorneo(Torneo.Participes / 2).UserIndex).name & vbCrLf
                    'List1.AddItem "Personaje " & i & " contra personajes " & (txtparticipantes.Text / 2) + i
                    Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Clasificatoria»" & Participantes & "", FontTypeNames.FONTTYPE_GUILD))
               
                    If i = 32 Then 'Completamos el evento
                        Torneo.Luchando = True
                    End If
                Next i
            End If
        Case 16
       
        Case 8
       
        Case 4
       
        Case 2
       
        Case Else
       
    End Select
       
End Sub

Public Sub EntrarEvento(ByVal UserIndex As Integer)
    With UserList(UserIndex)
        If .flags.Muerto Then
            Call WriteConsoleMsg(UserIndex, "No puedes ingresar al evento en ese estado", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If .Stats.ELV < Torneo.NivelMinimo Then
            Call WriteConsoleMsg(UserIndex, "No tienes el nivel requerido para este evento", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If .Stats.ELV > Torneo.NivelMaximo Then
            Call WriteConsoleMsg(UserIndex, "Tu nivel excede el permitido para el evento", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If .Stats.GLD < Torneo.ValorInscripcion Then
            Call WriteConsoleMsg(UserIndex, "No tienes el oro suficiente para pagar la inscripción del evento", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If FreeSlotEvento(UserIndex) = -1 Then
            Call WriteConsoleMsg(UserIndex, "El evento ya se encuentra en ejecución", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        Else
           
       
       
        End If
    End With
End Sub

Public Sub ResetEventos()
' @ Author: Shak
' @ Reiniciamos todo lo referido a eventos.

        Torneo.Cupos = 0
        Torneo.NivelMaximo = 0
        Torneo.NivelMinimo = 0
        Torneo.Objeto.Amount = 0
        Torneo.Objeto.ObjIndex = 0
        Torneo.Premio_Oro = 0
        Torneo.Tipo = 0
        Torneo.ValorInscripcion = 0
       
        '//Salas desocupadas
        For i = 1 To 16
            MapaEventos.Lucha_Ocupado(i) = 0
        Next i
       
        '//Reiniciamos los slots de personajes
        For i = 1 To 32
            UserTorneo(i).Mapa_Anterior = 0
            UserTorneo(i).Pareja(1) = 0
            UserTorneo(i).Pareja(2) = 0
            UserTorneo(i).UserIndex = 0
            UserTorneo(i).X_Anterior = 0
            UserTorneo(i).Y_Anterior = 0
        Next i
       
End Sub
 
G

G Toyz

Invitado
Esto:
Código:
Public Sub InicializarEventos()
    With MapaEventos
        'Sala de espera
        .MapaEspera(1).Map = 1
      
        .MapaEspera(1).X = 50:  .MapaEspera(8).X = 50:  .MapaEspera(15).X = 50:  .MapaEspera(22).X = 50:  .MapaEspera(29).X = 50
        .MapaEspera(1).Y = 50:  .MapaEspera(8).Y = 50:  .MapaEspera(15).Y = 50:  .MapaEspera(22).Y = 50:  .MapaEspera(29).Y = 50
      
      
        .MapaEspera(2).X = 50:  .MapaEspera(9).X = 50:  .MapaEspera(16).X = 50:  .MapaEspera(23).X = 50:  .MapaEspera(30).X = 50
        .MapaEspera(2).Y = 50:  .MapaEspera(9).Y = 50:  .MapaEspera(16).Y = 50:  .MapaEspera(23).Y = 50:  .MapaEspera(30).Y = 50
      
        .MapaEspera(3).X = 50:  .MapaEspera(10).X = 50:  .MapaEspera(17).X = 50:  .MapaEspera(24).X = 50:  .MapaEspera(31).X = 50
        .MapaEspera(3).Y = 50:  .MapaEspera(10).Y = 50:  .MapaEspera(17).Y = 50:  .MapaEspera(24).Y = 50:  .MapaEspera(31).Y = 50
      
        .MapaEspera(4).X = 50:  .MapaEspera(11).X = 50:  .MapaEspera(18).X = 50:  .MapaEspera(25).X = 50:  .MapaEspera(32).X = 50
        .MapaEspera(4).Y = 50:  .MapaEspera(11).Y = 50:  .MapaEspera(18).Y = 50:  .MapaEspera(25).Y = 50:  .MapaEspera(32).Y = 50
      
        .MapaEspera(5).X = 50:  .MapaEspera(12).X = 50:  .MapaEspera(19).X = 50:  .MapaEspera(26).X = 50:
        .MapaEspera(5).Y = 50:  .MapaEspera(12).Y = 50:  .MapaEspera(19).Y = 50:  .MapaEspera(26).Y = 50:
      
        .MapaEspera(6).X = 50:  .MapaEspera(13).X = 50:  .MapaEspera(20).X = 50:  .MapaEspera(27).X = 50:
        .MapaEspera(6).Y = 50:  .MapaEspera(13).Y = 50:  .MapaEspera(20).Y = 50:  .MapaEspera(27).Y = 50:
      
        .MapaEspera(7).X = 50:  .MapaEspera(14).X = 50:  .MapaEspera(21).X = 50:  .MapaEspera(28).X = 50:
        .MapaEspera(7).Y = 50:  .MapaEspera(14).Y = 50:  .MapaEspera(22).Y = 50:  .MapaEspera(28).Y = 50:
      
      
        'Mapas de enfrentamientos
        .MapaLucha(1).Map = 2
      
        .MapaLucha(1).X = 50:  .MapaLucha(8).X = 50:  .MapaLucha(15).X = 50:
        .MapaLucha(1).Y = 50:  .MapaLucha(8).Y = 50:  .MapaLucha(15).Y = 50:
      
        .MapaLucha(2).X = 50:  .MapaLucha(9).X = 50:  .MapaLucha(16).X = 50:
        .MapaLucha(2).Y = 50:  .MapaLucha(9).Y = 50:  .MapaLucha(16).Y = 50:
      
        .MapaLucha(3).X = 50:  .MapaLucha(10).X = 50:
        .MapaLucha(3).Y = 50:  .MapaLucha(10).Y = 50:
      
        .MapaLucha(4).X = 50:  .MapaLucha(11).X = 50:
        .MapaLucha(4).Y = 50:  .MapaLucha(11).Y = 50:
      
        .MapaLucha(5).X = 50:  .MapaLucha(12).X = 50:
        .MapaLucha(5).Y = 50:  .MapaLucha(12).Y = 50:
      
        .MapaLucha(6).X = 50:  .MapaLucha(13).X = 50:
        .MapaLucha(6).Y = 50:  .MapaLucha(13).Y = 50:
      
        .MapaLucha(7).X = 50:  .MapaLucha(14).X = 50:
        .MapaLucha(7).Y = 50:  .MapaLucha(14).Y = 50:
      
      
        Call ResetEventos

    End With
End Sub
por esto:
Código:
Public Sub InicializarEventos()
    Dim i As Long

    With MapaEventos
        'Sala de espera
        .MapaEspera(1).Map = 1
        'Mapas de enfrentamientos
        .MapaLucha(1).Map = 2     

        For i = 1 To 32

            .mapaespera(i).X = 50
            .mapaespera(i).y = 50
            
            .MapaLucha(i).X = 50
            .MapaLucha(i).y = 50

        Next i

        Call ResetEventos

    End With
End Sub

Vos habías hecho algo parecido, sólo que los sumoneaba y tiraba el mensaje por consola. Está buena la idea, algo así como TDS
 

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
  1. For i = 1 To 32

  2. .mapaespera(i).X = 50
  3. .mapaespera(i).y = 50
  4. .MapaLucha(i).X = 50
  5. .MapaLucha(i).y = 50

  6. Next i


Que me queres hacer sumonear a todos los usuarios a la misma pos? xD jaja, esta bien como lo hice. igualmente ya lo hice de otra forma y mejore el codigo xD

Seguramente mas tarde lo testee y suba video xD
 

Reznіaq

Dragón Ancestral Lvl 4
Ex-Staff
  1. For i = 1 To 32

  2. .mapaespera(i).X = 50
  3. .mapaespera(i).y = 50
  4. .MapaLucha(i).X = 50
  5. .MapaLucha(i).y = 50

  6. Next i

Que me queres hacer sumonear a todos los usuarios a la misma pos? xD jaja, esta bien como lo hice. igualmente ya lo hice de otra forma y mejore el codigo xD

Seguramente mas tarde lo testee y suba video xD

No, es bastante malo cómo lo hiciste y de hecho cumple el mismo propósito que el código del buen Chitoys.
 
G

G Toyz

Invitado
Podrías dejar el código... si eso ESTÁ mal no lo posteés, porque el código que te dejé* cumple lo MISMO que el tuyo.
 
Última edición por un moderador:

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Podrías dejar el código... si eso ESTÁ mal no lo posteés, porque el código que te deje cumple lo MISMO que el tuyo.

No amigo, mis pos son defaults, despues cada user del torneo tiene una arena para descansar. nunca jugaste tds?
 
G

G Toyz

Invitado
No amigo, mis pos son defaults, despues cada user del torneo tiene una arena para descansar. nunca jugaste tds?
Entonces te contradecís solo.
La cortamos acá.

Igual, hay que hacerle un if, porque la parte de luchar llega hasta 14.
O sea:

Java:
Public Sub InicializarEventos()
    Dim i As Long

    With MapaEventos
        'Sala de espera
        .MapaEspera(1).Map = 1
        'Mapas de enfrentamientos
        .MapaLucha(1).Map = 2 

        For i = 1 To 32

            .mapaespera(i).X = 50
            .mapaespera(i).y = 50

             If i =< 16 Then
                   .MapaLucha(i).X = 50
                   .MapaLucha(i).y = 50
             End If
        Next i

        Call ResetEventos

    End With
End Sub
 
Última edición por un moderador:

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
13606616_1768271100123589_2287239565413580083_n.jpg



El sistema ya está funcionando :D Si alguno lo necesita me lo pide al pv, o cuando haga la versión limpia lo libero.

¡ArgenDrag 13.0 muy cerca!
 

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Les dejo la base del 1vs1. Con esta base es más que fácil hacer las demás, ya que la estructura es la misma, solo cambian lo detalles importantes digamos...

Creo que está bastante claro, y está bueno como base. Igualmente cuando lo termine en mis tiempos libres lo subo completo :p

Código:
'#########################Creado por Shak(Lautaro Marino) Desde cero###########################
'##############################################################################################
'##########################Sitema de torneos automáticos#######################################

Option Explicit

Public Enum eTipoTorneo
    Indefinido = 0
    UNOvsUNO = 1
    DOSvsDOS
    TRESvsTRES
    Death
    Caceria
    DagaRusa
End Enum

Public Type tTorneosUsers
    UserIndex As Integer
    UserName As String
    Mapa_Anterior As Integer
    X_Anterior As Byte
    Y_Anterior As Byte
    Pareja(1 To 2) As Integer
    Descalificado As Byte
End Type

Public Type tTorneos
    Tipo As eTipoTorneo
    cupos As Byte
    NivelMinimo As Byte
    NivelMaximo As Byte
    ValorInscripcion As Long
    Participes As Byte
   
   
    'Premios
    Objeto As Obj
    Premio_Oro As Long
   
    Luchando As Boolean
    Participantes As String
End Type

Private Type tMapasEventos
    MapaEspera(1 To 32) As WorldPos
    MapaLucha(1 To 16) As WorldPos
    MapaLucha2(1 To 16) As WorldPos 'Para las otras pos
    Lucha_Ocupado(1 To 16) As Byte
End Type

Public Type tTimerEventos
    Espera As Long
    Inscripcion As Long
End Type

Public TimerEventos As tTimerEventos
Public Torneo As tTorneos
Public MapaEventos As tMapasEventos
Public UserTorneo(1 To 32) As tTorneosUsers 'Máximo de participantes

Public Sub InicializarEventos()
    With MapaEventos
        'Sala de espera
        .MapaEspera(1).Map = 49
       
        .MapaEspera(1).X = 16:  .MapaEspera(8).X = 80:  .MapaEspera(15).X = 70:  .MapaEspera(22).X = 61:  .MapaEspera(29).X = 52
        .MapaEspera(1).Y = 12:  .MapaEspera(8).Y = 13:  .MapaEspera(15).Y = 21:  .MapaEspera(22).Y = 30:  .MapaEspera(29).Y = 40
       
        .MapaEspera(2).X = 25:  .MapaEspera(9).X = 16:  .MapaEspera(16).X = 80:  .MapaEspera(23).X = 70:  .MapaEspera(30).X = 60
        .MapaEspera(2).Y = 13:  .MapaEspera(9).Y = 22:  .MapaEspera(16).Y = 21:  .MapaEspera(23).Y = 30:  .MapaEspera(30).Y = 40
       
        .MapaEspera(3).X = 35:  .MapaEspera(10).X = 25:  .MapaEspera(17).X = 16:  .MapaEspera(24).X = 79:  .MapaEspera(31).X = 70
        .MapaEspera(3).Y = 13:  .MapaEspera(10).Y = 22:  .MapaEspera(17).Y = 31:  .MapaEspera(24).Y = 30:  .MapaEspera(31).Y = 40
       
        .MapaEspera(4).X = 43:  .MapaEspera(11).X = 35:  .MapaEspera(18).X = 25:  .MapaEspera(25).X = 16:  .MapaEspera(32).X = 80
        .MapaEspera(4).Y = 13:  .MapaEspera(11).Y = 22:  .MapaEspera(18).Y = 30:  .MapaEspera(25).Y = 40:  .MapaEspera(32).Y = 40
       
        .MapaEspera(5).X = 52:  .MapaEspera(12).X = 43:  .MapaEspera(19).X = 34:  .MapaEspera(26).X = 25:
        .MapaEspera(5).Y = 13:  .MapaEspera(12).Y = 22:  .MapaEspera(19).Y = 31:  .MapaEspera(26).Y = 40:
       
        .MapaEspera(6).X = 61:  .MapaEspera(13).X = 42:  .MapaEspera(20).X = 43:  .MapaEspera(27).X = 35:
        .MapaEspera(6).Y = 13:  .MapaEspera(13).Y = 22:  .MapaEspera(20).Y = 30:  .MapaEspera(27).Y = 40:
       
        .MapaEspera(7).X = 71:  .MapaEspera(14).X = 61:  .MapaEspera(21).X = 52:  .MapaEspera(28).X = 43:
        .MapaEspera(7).Y = 13:  .MapaEspera(14).Y = 21:  .MapaEspera(22).Y = 30:  .MapaEspera(28).Y = 40:
       
       
        'Mapas de enfrentamientos
        .MapaLucha(1).Map = 278
       
        .MapaLucha(1).X = 13:  .MapaLucha(8).X = 50:  .MapaLucha(15).X = 50:
        .MapaLucha(1).Y = 12:  .MapaLucha(8).Y = 50:  .MapaLucha(15).Y = 50:
       
        .MapaLucha(2).X = 13:  .MapaLucha(9).X = 50:  .MapaLucha(16).X = 50:
        .MapaLucha(2).Y = 33:  .MapaLucha(9).Y = 50:  .MapaLucha(16).Y = 50:
       
        .MapaLucha(3).X = 11:  .MapaLucha(10).X = 50:
        .MapaLucha(3).Y = 56:  .MapaLucha(10).Y = 50:
       
        .MapaLucha(4).X = 12:  .MapaLucha(11).X = 50:
        .MapaLucha(4).Y = 79:  .MapaLucha(11).Y = 50:
       
        .MapaLucha(5).X = 39:  .MapaLucha(12).X = 50:
        .MapaLucha(5).Y = 80:  .MapaLucha(12).Y = 50:
       
        .MapaLucha(6).X = 43:  .MapaLucha(13).X = 50:
        .MapaLucha(6).Y = 13:  .MapaLucha(13).Y = 50:
       
        .MapaLucha(7).X = 50:  .MapaLucha(14).X = 50:
        .MapaLucha(7).Y = 50:  .MapaLucha(14).Y = 50:
       
        .MapaLucha2(1).Map = 278
       
        .MapaLucha2(1).X = 28:  .MapaLucha2(8).X = 50:  .MapaLucha2(15).X = 50:
        .MapaLucha2(1).Y = 22:  .MapaLucha2(8).Y = 50:  .MapaLucha2(15).Y = 50:
       
        .MapaLucha2(2).X = 28:  .MapaLucha2(9).X = 50:  .MapaLucha2(16).X = 50:
        .MapaLucha2(2).Y = 43:  .MapaLucha2(9).Y = 50:  .MapaLucha2(16).Y = 50:
       
        .MapaLucha2(3).X = 26:  .MapaLucha2(10).X = 50:
        .MapaLucha2(3).Y = 67:  .MapaLucha2(10).Y = 50:
       
        .MapaLucha2(4).X = 31:  .MapaLucha2(11).X = 50:
        .MapaLucha2(4).Y = 89:  .MapaLucha2(11).Y = 50:
       
        .MapaLucha2(5).X = 55:  .MapaLucha2(12).X = 50:
        .MapaLucha2(5).Y = 92:  .MapaLucha2(12).Y = 50:
       
        .MapaLucha2(6).X = 53:  .MapaLucha2(13).X = 50:
        .MapaLucha2(6).Y = 22:  .MapaLucha2(13).Y = 50:
       
        .MapaLucha2(7).X = 50:  .MapaLucha2(14).X = 50:
        .MapaLucha2(7).Y = 50:  .MapaLucha2(14).Y = 50:
       
       
        Call ResetEventos

    End With
End Sub

Public Sub ActualizarEventos()
'Recorremos los cupos chequeando si estan descalificados. Y los ordenamos desde NO calificados hasta SI calificados.
    Dim j As Long
    Dim i As Long
    Dim z As Byte

    Dim aux(1 To 32) As tTorneosUsers

    For i = 1 To Torneo.cupos
        For j = 1 To Torneo.cupos - i
            If UserTorneo(j).Descalificado > UserTorneo(j + 1).Descalificado Then
                    aux(j) = UserTorneo(j)
                    UserTorneo(j) = UserTorneo(j + 1)
                    UserTorneo(j + 1) = aux(j)
            End If
        Next j
    Next i
End Sub
Public Function SearchSlotLucha() As Byte
' @ Author: Shak
' Buscamos una arena desocupada y la ocupamos

    Dim i As Byte
   
    For i = 1 To 16
        If MapaEventos.Lucha_Ocupado(i) = 0 Then
            'MapaEventos.Lucha_Ocupado(i) = 1
            SearchSlotLucha = i
            Exit Function
        End If
    Next i
End Function

Public Function FreeSlotEvento(ByVal UserIndex As Integer) As Byte
'Author: Shak
' @ Buscamos una pos libre para ingresar al evento. En caso de encontrarla la rellenamos.
    With UserList(UserIndex)
   
   
        For FreeSlotEvento = 1 To Torneo.cupos
            If UserTorneo(FreeSlotEvento).UserIndex = 0 Then
                UserTorneo(FreeSlotEvento).UserIndex = UserIndex
                UserTorneo(FreeSlotEvento).UserName = .name
                UserTorneo(FreeSlotEvento).Descalificado = 0
                UserTorneo(FreeSlotEvento).Mapa_Anterior = .pos.Map
                UserTorneo(FreeSlotEvento).X_Anterior = .pos.X
                UserTorneo(FreeSlotEvento).Y_Anterior = .pos.Y
               
                'UserTorneo(FreeSlotEvento).Pareja(1)
                'UserTorneo(FreeSlotEvento).Pareja(2)
                Exit Function
            End If
        Next FreeSlotEvento
       
        FreeSlotEvento = -1
    End With
End Function

Public Function SearchSlotUser(ByVal UserIndex As Integer) As Byte
' @ Author: Shak
' @ Buscamos al personaje dentro del evento. Cuando lo encontramos cerramos la función
    With UserList(UserIndex)
        For SearchSlotUser = 1 To Torneo.cupos
            If UserTorneo(SearchSlotUser).UserIndex = UserIndex Then
                Exit Function
            End If
        Next SearchSlotUser
    End With
End Function

Public Function NameRonda(ByVal Evento As eTipoTorneo) As String
' @ Author: Esta función devuelve la ronda a la que pasa el personaje.
    Select Case Evento
        Case eTipoTorneo.UNOvsUNO
            If Torneo.Participes = 32 Then
                NameRonda = "Ronda de clasificación"
            ElseIf Torneo.Participes < 4 Then
                NameRonda = "Final"
            ElseIf Torneo.Participes < 8 Then
                NameRonda = "Semi final"
            ElseIf Torneo.Participes < 16 Then
                NameRonda = "Cuartos"
            ElseIf Torneo.Participes < 32 Then
                NameRonda = "Octavos"
            End If
           
    End Select
End Function

Public Sub ChequearEstado1vs1(ByVal Ganador As Integer, ByVal Perdedor As Integer)
' @ Author: Shak
' @ Chequeamos que personaje es el ganador. Al perdedor lo regresamos. Al ganador vuelve a la sala de espera. Chequeamos final

Dim Slot As Byte
    Torneo.Participes = Torneo.Participes - 1
   
   
    '//User perdedor
    Slot = SearchSlotUser(Perdedor)
    UserTorneo(Slot).Descalificado = 1
    Call WriteConsoleMsg(UserTorneo(Slot).UserIndex, "Has perdido el torneo. Buena suerte para la próxima joven", FontTypeNames.FONTTYPE_INFO)
    Call WarpUserChar(Perdedor, UserTorneo(Slot).Mapa_Anterior, UserTorneo(Slot).X_Anterior, UserTorneo(Slot).Y_Anterior, False)
    '//
   
    With UserList(Ganador)
        Slot = SearchSlotUser(Ganador)
       
        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Torneo 1vs1» El personaje " & .name & " ha ganado. Pasa a " & NameRonda(eTipoTorneo.UNOvsUNO) & ".", FontTypeNames.FONTTYPE_GUILD))
        Call WarpUserChar(UserTorneo(Slot).UserIndex, MapaEventos.MapaEspera(Slot).Map, MapaEventos.MapaEspera(Slot).X, MapaEventos.MapaEspera(Slot).Y, False)
    End With
   
   
    ' @ Manejamos los participantes. El máximo que podemos encontrar acá es 16, ya que empezamos con 32. _
        Luego al llegar a 16 mandamos espera de 2 minutos y lanzamos la siguiente ronda.
       
        If Torneo.Participes = 1 Then
            Call ActualizarEventos
            Call WriteConsoleMsg(Ganador, "Felicidades, has ganado el evento. Recibiste: ", FontTypeNames.FONTTYPE_INFO)
            Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final 1vs1» El ganador es " & UserTorneo(1).UserName & ", quien gana: PREMIOS", FontTypeNames.FONTTYPE_INFO))
            Call WarpUserChar(Ganador, UserTorneo(Slot).Mapa_Anterior, UserTorneo(Slot).X_Anterior, UserTorneo(Slot).Y_Anterior, True)
            Call InicializarEventos
            Torneo.Luchando = False
            Exit Sub
        ElseIf Torneo.Participes = 2 Then
            TimerEventos.Espera = 1
            Torneo.Luchando = False
           
            'Actualizamos posiciones
            Call ActualizarEventos
           
            For Slot = 1 To Torneo.Participes
                Call WriteConsoleMsg(UserTorneo(Slot).UserIndex, "Gran final en 1 minuto» ¡Han pasado a la gran final! Estan a un paso de ser los campeones ¿Crees que hoy te toca a ti?", FontTypeNames.FONTTYPE_GUILD)
            Next Slot
           
            Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final 1vs1» " & UserTorneo(1).UserName & " vs " & UserTorneo(2).UserName & ". Un minuto para comenzar la pelea.", FontTypeNames.FONTTYPE_INFO))
            Exit Sub
        Else
            TimerEventos.Espera = 2
            Torneo.Luchando = False
           
            'Actualizamos posiciones
            Call ActualizarEventos
            For Slot = 1 To Torneo.Participes
                If UserTorneo(Slot).UserIndex <> vbNullString Then
                        Call WriteConsoleMsg(UserTorneo(Slot).UserIndex, "" & NameRonda(UNOvsUNO) & " 1vs1» Has pasado a la próxima ronda. En dos minutos comenzará la próxima pelea", FontTypeNames.FONTTYPE_GUILD)
                End If
            Next Slot
            Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("" & NameRonda(UNOvsUNO) & " 1vs1» Dos minutos para comenzar la siguiente ronda.", FontTypeNames.FONTTYPE_INFO))
            Exit Sub
        End If
           
           
End Sub


Public Sub Desarrollar1vs1()
'Desde aca empieza a desarrollarse el evento. Simple y dinámico.
    Dim SlotFree As Byte
    Dim Participantes As String 'Almacenamos los nombres
    Dim i As Integer
   
    If Torneo.Luchando = True Then Exit Sub
            SlotFree = SearchSlotLucha
           
            If SlotFree <> 0 Then
                For i = 1 To Int(Torneo.Participes / 2)
               
                    '¿Alguno de los personajes no se encuentra listo para luchar? Pasamos automáticamente.
                    If UserList(UserTorneo(i).UserIndex).flags.UserLogged = 0 Then
                        UserTorneo(i).Descalificado = 1
                        Torneo.Participes = Torneo.Participes - 1
                       
                        '//Abandono en final
                        If Torneo.Participes = 1 Then
                            Call ActualizarEventos
                            Call WriteConsoleMsg(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex, "Felicidades, has ganado el evento. Recibiste: ", FontTypeNames.FONTTYPE_INFO)
                            Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final 1vs1» El ganador es " & UserTorneo(1).UserName & ", gana por falta de oponente(Deslogio): PREMIOS", FontTypeNames.FONTTYPE_INFO))
                            Call WarpUserChar(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex, UserTorneo(Int(Torneo.Participes / 2) + i).Mapa_Anterior, UserTorneo(Int(Torneo.Participes / 2) + i).X_Anterior, UserTorneo(Int(Torneo.Participes / 2) + i).Y_Anterior, True)
                            Call InicializarEventos
                            Torneo.Luchando = False
                            Exit Sub
                        End If
                       
                        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("" & NameRonda(UNOvsUNO) & " 1vs1» El personaje " & _
                        UserTorneo(i).UserName & " no se encuentra listo. " & UserTorneo(Int(Torneo.Participes / 2) + i).UserName & " pasa automáticamente.", _
                        FontTypeNames.FONTTYPE_GUILD))
                       
                        Call WarpUserChar(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex, MapaEventos.MapaEspera(Int(Torneo.Participes / 2) + i).Map, MapaEventos.MapaEspera(Int(Torneo.Participes / 2) + 1).X, MapaEventos.MapaEspera(Int(Torneo.Participes / 2) + 1).Y, False)
                         
                       
                    ElseIf UserList(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex).flags.UserLogged = 0 Then
                        UserTorneo(Int(Torneo.Participes / 2) + i).Descalificado = 1
                        Torneo.Participes = Torneo.Participes - 1
                       
                        '//Abandono en final
                        If Torneo.Participes = 1 Then
                            Call ActualizarEventos
                            Call WriteConsoleMsg(UserTorneo(i).UserIndex, "Felicidades, has ganado el evento. Recibiste: ", FontTypeNames.FONTTYPE_INFO)
                            Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final 1vs1» El ganador es " & UserTorneo(1).UserName & ", gana por falta de oponente(Deslogio): PREMIOS", FontTypeNames.FONTTYPE_INFO))
                            Call WarpUserChar(UserTorneo(i).UserIndex, UserTorneo(i).Mapa_Anterior, UserTorneo(i).X_Anterior, UserTorneo(i).Y_Anterior, True)
                            Call InicializarEventos
                            Torneo.Luchando = False
                            Exit Sub
                        End If
                        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("" & NameRonda(UNOvsUNO) & " 1vs1» El personaje " & _
                        UserTorneo(Int(Torneo.Participes / 2) + i).UserName & " no se encuentra listo. " & UserTorneo(i).UserName & " pasa automáticamente.", _
                        FontTypeNames.FONTTYPE_GUILD))
                       
                        Call WarpUserChar(UserTorneo(i).UserIndex, MapaEventos.MapaEspera(i).Map, MapaEventos.MapaEspera(i).X, MapaEventos.MapaEspera(i).Y, False)
                       
                    Else 'Sino pasa esto los llevamos a luchar.
                   
                        Call WarpUserChar(UserTorneo(i).UserIndex, MapaEventos.MapaLucha(SlotFree).Map, MapaEventos.MapaLucha(SlotFree).X, MapaEventos.MapaLucha(SlotFree).Y, False)
                        Call WarpUserChar(UserTorneo(Int(Torneo.Participes / 2 + i)).UserIndex, MapaEventos.MapaLucha(SlotFree).Map, MapaEventos.MapaLucha(SlotFree).X + 10, MapaEventos.MapaLucha(SlotFree).Y + 10, False)
                       
                        MapaEventos.Lucha_Ocupado(SlotFree) = 1
                        Torneo.Participantes = Torneo.Participantes & " " & UserList(UserTorneo(i).UserIndex).name & " vs " & UserList(UserTorneo(Torneo.Participes / 2 + i).UserIndex).name & vbCrLf
                        'List1.AddItem "Personaje " & i & " contra personajes " & (txtparticipantes.Text / 2) + i
                        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("" & NameRonda(UNOvsUNO) & " 1vs1» " & Participantes & ".", FontTypeNames.FONTTYPE_GUILD))
                    End If
                   
                   
                    If i = Torneo.Participes Then
                        Torneo.Luchando = True
                    End If
                Next i
            End If
       
End Sub
Public Sub HandleCrearEvento(ByVal UserIndex As Integer)
    With UserList(UserIndex)
        Call .incomingData.ReadByte
             Torneo.Tipo = .incomingData.ReadByte
            Torneo.cupos = .incomingData.ReadByte
           
            Torneo.NivelMaximo = 47
            Torneo.NivelMinimo = 1
            Torneo.ValorInscripcion = 0
            Torneo.Objeto.Amount = 0
            Torneo.Objeto.ObjIndex = 0
       
        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Evento " & Torneo.Tipo & "» Creado para " & Torneo.cupos & " cupos . /PARTICIPAR", FontTypeNames.FONTTYPE_GUILD))
    End With
End Sub

Public Sub HandleEntrarEvento(ByVal UserIndex As Integer)
    With UserList(UserIndex)
        Call .incomingData.ReadByte
        If .flags.Muerto Then
            Call WriteConsoleMsg(UserIndex, "No puedes ingresar al evento en ese estado", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If .Stats.ELV < Torneo.NivelMinimo Then
            Call WriteConsoleMsg(UserIndex, "No tienes el nivel requerido para este evento", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If .Stats.ELV > Torneo.NivelMaximo Then
            Call WriteConsoleMsg(UserIndex, "Tu nivel excede el permitido para el evento", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If .Stats.GLD < Torneo.ValorInscripcion Then
            Call WriteConsoleMsg(UserIndex, "No tienes el oro suficiente para pagar la inscripción del evento", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        End If
       
        If Torneo.cupos = Torneo.Participes Then
            Call WriteConsoleMsg(UserIndex, "El evento ya se encuentra en desarrollo avanzado.", FontTypeNames.FONTTYPE_INFO)
            Exit Sub
        Else
            Dim Slot As Integer
            Slot = FreeSlotEvento(UserIndex)
            Torneo.Participes = Torneo.Participes + 1
           
            If Torneo.Participes = 1 Then TimerEventos.Inscripcion = 6
            Dim Participantes As String
            Participantes = Participantes & UserTorneo(Slot).UserName & ", "
               
            Call WarpUserChar(UserIndex, MapaEventos.MapaEspera(1).Map, MapaEventos.MapaEspera(Slot).X, MapaEventos.MapaEspera(Slot).Y, False)
            Call WriteConsoleMsg(UserIndex, "Has entrado al evento en el lugar n° " & Torneo.Participes & ".", FontTypeNames.FONTTYPE_INFO)
           
           
            If Torneo.Participes = Torneo.cupos Then
                TimerEventos.Inscripcion = 0
                TimerEventos.Espera = 1

                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Personajes inscriptos al " & Torneo.Tipo & "» " & Participantes & ".", FontTypeNames.FONTTYPE_INFO))
            End If
       
        End If
    End With
End Sub

Public Sub ResetEventos()
' @ Author: Shak
' @ Reiniciamos todo lo referido a eventos.
    Dim i As Integer
        Torneo.cupos = 0
        Torneo.NivelMaximo = 0
        Torneo.NivelMinimo = 0
        Torneo.Objeto.Amount = 0
        Torneo.Objeto.ObjIndex = 0
        Torneo.Premio_Oro = 0
        Torneo.Tipo = 0
        Torneo.ValorInscripcion = 0
       
        '//Salas desocupadas
        For i = 1 To 16
            MapaEventos.Lucha_Ocupado(i) = 0
        Next i
       
        '//Reiniciamos los slots de personajes
        For i = 1 To 32
            UserTorneo(i).Mapa_Anterior = 0
            UserTorneo(i).Pareja(1) = 0
            UserTorneo(i).Pareja(2) = 0
            UserTorneo(i).UserIndex = 0
            UserTorneo(i).X_Anterior = 0
            UserTorneo(i).Y_Anterior = 0
        Next i
       
End Sub
 

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Tengo ganas de compartir esto, por si algun interesado quiere usarlo para hacer los demás.

Las mejoras que tiene este sub es que ahora chequeamos bien las posibilidades
- Si ambos usuarios deslogean y tienen que luchar, lo chequeamos, si es final se considera INSOLITA. Si no, cancelamos el duelo de ambos.
-Si uno de los dos deslogea, el otro pasa automáticamente, chequeando si es la final
-Sino es ninguno de estos casos, mandamos a luchar
-Ya no mandamos 16 veves (como mínimo, dependiendo la cant de participantes) el mensaje del servidor al cliente, a todos los clientes, sino que lo mandamos al final del bucle
- Se uso más la lógica, para los posibles chequeos e interrupciones, agrupando cosas, entre otras.

Código:
Public Sub Desarrollar1vs1()
'Desde aca empieza a desarrollarse el evento. Simple y dinámico.
    Dim SlotFree As Byte
    Dim Participantes As String 'Almacenamos los nombres
    Dim i As Integer
    Dim strServer As String: strServer = vbNullString
    Dim strDescalificado As String: strDescalificado = vbNullString
   
    If Torneo.Luchando = True Then Exit Sub
            SlotFree = SearchSlotLucha
           
            If SlotFree <> 0 Then
                For i = 1 To Int(Torneo.Participes / 2)
                    'Chequeamos si uno de los dos no puede jugar. O AMBOS.
                    If (UserList(UserTorneo(i).UserIndex).flags.UserLogged = 0) Or _
                        (UserList(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex).flags.UserLogged = 0) Then
                       
                        '¿Ninguno de los dos está listo para luchar?
                        If (UserList(UserTorneo(i).UserIndex).flags.UserLogged = 0) And _
                            (UserList(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex).flags.UserLogged = 0) Then
                           
                            'Descalificamos a los personajes.
                            UserTorneo(i).Descalificado = 1
                            UserTorneo(Int(Torneo.Participes / 2) + i).Descalificado = 1
                            Torneo.Participes = Torneo.Participes - 2
                           
                            '¿Era la final?
                            If Torneo.Participes = 0 Then
                                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final 1vs1 INSOLITA» No hay ganador ya que ninguno de los dos se encontraba listo para luchar.", _
                                FontTypeNames.FONTTYPE_GUILD))
                               
                                'Resetear valores
                               
                                Exit Sub
                            End If
                        End If
                       
                        'Si llegamos aca: NO ES FINAL, NO DESLOGIARON LOS DOS
                        Dim Index As Integer
                       
                        'Chequeamos ambos personajes, para ver cual es el que deslogio.
                        If UserList(UserTorneo(i).UserIndex).flags.UserLogged = 0 Then
                            UserTorneo(i).Descalificado = 1
                            'El ganador pasa de ronda
                            Call WarpUserChar(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex, MapaEventos.MapaEspera.Map, MapaEventos.MapaEspera.X, MapaEventos.MapaEspera.Y, False)
                            strServer = "" & NameRonda(UNOvsUNO) & " 1vs1» El personaje " & _
                                UserTorneo(i).UserName & " no se encuentra listo. " & UserTorneo(Int(Torneo.Participes / 2) + i).UserName & " pasa automáticamente." & vbCrLf
                           
                            'Estabamos en la final
                            If Torneo.Participes = 1 Then
                                Call ActualizarEventos
                                Call WriteConsoleMsg(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex, "Felicidades, has ganado el evento. Recibiste: ", FontTypeNames.FONTTYPE_INFO)
                               
                                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final 1vs1» El ganador es " & UserTorneo(1).UserName & ", gana por falta de oponente(Deslogio): PREMIOS", _
                                    FontTypeNames.FONTTYPE_GUILD))
                                Call WarpUserChar(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex, UserTorneo(Int(Torneo.Participes / 2) + i).Mapa_Anterior, UserTorneo(Int(Torneo.Participes / 2) + i).X_Anterior, UserTorneo(Int(Torneo.Participes / 2) + i).Y_Anterior, True)
                                Call InicializarEventos
                                Torneo.Luchando = False
                                Exit Sub
                            End If
                        ElseIf UserList(UserTorneo(Int(Torneo.Participes / 2) + i).UserIndex).flags.UserLogged = 0 Then
                            UserTorneo(Int(Torneo.Participes / 2) + i).Descalificado = 1
                            Call WarpUserChar(UserTorneo(i).UserIndex, MapaEventos.MapaEspera.Map, MapaEventos.MapaEspera.X, MapaEventos.MapaEspera.Y, False)
                       
                            strServer = "" & NameRonda(UNOvsUNO) & " 1vs1» El personaje " & _
                                UserTorneo(Int(Torneo.Participes / 2) + i).UserName & " no se encuentra listo. " & UserTorneo(i).UserName & " pasa automáticamente." & vbCrLf
                       
                            'Estamos en la final
                            If Torneo.Participes = 1 Then
                                Call ActualizarEventos
                                Call WriteConsoleMsg(UserTorneo(i).UserIndex, "Felicidades, has ganado el evento. Recibiste: ", FontTypeNames.FONTTYPE_INFO)
                                Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("Final 1vs1» El ganador es " & UserTorneo(1).UserName & ", gana por falta de oponente(Deslogio): PREMIOS", FontTypeNames.FONTTYPE_INFO))
                                Call WarpUserChar(UserTorneo(i).UserIndex, UserTorneo(i).Mapa_Anterior, UserTorneo(i).X_Anterior, UserTorneo(i).Y_Anterior, True)
                                Call InicializarEventos
                                Torneo.Luchando = False
                                Exit Sub
                            End If
                        End If
                       
                        Torneo.Participes = Torneo.Participes - 1
                   
                        'Aca hay que chequear si el torneo puede seguir continuando,
                    Else 'Si no hay una desconexión mutua o de uno de los dos personajes mandamos a luchar correctamente.
                   
                        Call WarpUserChar(UserTorneo(i).UserIndex, MapaEventos.MapaLucha(SlotFree).Map, MapaEventos.MapaLucha(SlotFree).X, MapaEventos.MapaLucha(SlotFree).Y, False)
                        Call WarpUserChar(UserTorneo(Int(Torneo.Participes / 2 + i)).UserIndex, MapaEventos.MapaLucha(SlotFree).Map, MapaEventos.MapaLucha(SlotFree).X + 10, MapaEventos.MapaLucha(SlotFree).Y + 10, False)
                       
                        MapaEventos.Lucha_Ocupado(SlotFree) = 1
                        Torneo.Participantes = Torneo.Participantes & " " & UserList(UserTorneo(i).UserIndex).Name & " vs " & UserList(UserTorneo(Torneo.Participes / 2 + i).UserIndex).Name & vbCrLf
                       
                        strServer = "" & NameRonda(UNOvsUNO) & " 1vs1» " & Participantes & "."
                       
                       
                       'Call EnviarCuenta(10,UserIndex) 'Cuenta regresiva de 10, para la pantalla del usuario
                    End If
                   
                    If i = Torneo.Participes Then
                        Torneo.Luchando = True
                    End If
                Next i
               
               
                If strServer <> vbNullString Then _
                    Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg(strServer & ".", FontTypeNames.FONTTYPE_GUILD))
            End If
       
End Sub
 

Luciano Ayanz

Un simple newbie
Che shak, soy malardo programando y mi idea es aprender, pero bueno me marean hacer los llamados y esas cosas, me podrías ayudar con eso yo con lo demás veo como hago? jajaja saludos crack
 

Miguel_90

Newbie Lvl 1
tengo un problema con la pricion me sumonea a cada rato con alguien me dice donde lo arreglo para q no siga haciendo eso?
 

Bramhh

Fundador EvolutionAo
@Shak Amo tus sistemas pero me aterra implementarlas, es como si fueras Karma de lol que decis cosas raras y pudris a enemigo, no se... solo contigo me pasa, disfruto leer tus codigos pero nunca los copy pasteo jaja
 
Arriba