[APORTE] Desafios - Gana Sigue 13.0

Ir abajo

[APORTE] Desafios - Gana Sigue 13.0

Mensaje por BenjaXZ el 23/10/2017, 10:39 pm

Hola, este modulo no sé si está en alguna parte pero como me gusto y es muy simple y rolero se los traigo!
Comandos: /DESAFIO(Para entrar al desafio) , /DESAFIAR(Para entrar a desafiar), y /ABANDONAR(Para salir del desafio).
SERVIDOR:
1) Creamos un nuevo modulo y de nombre le ponemos, ModDesafios
Dentro del modulo tiene que estar este código.
Código:
Option Explicit

Public Type tDesafios
    Desafiando As Byte 'Al llegar a dos manda a los dos desafiantes a las puntas nuevamente y da comienzo al conteo.
    Haydesafio As Byte 'Esto es cuando el mapa se llena (2 usuarios)
    Oponente As Integer
    Desafiante As Integer
    Haydesafiante As Byte
End Type
 
Public Desafios As tDesafios
 
Public Sub HandleDesafio(ByVal UserIndex As Integer)
    With UserList(UserIndex)
        Call .incomingData.ReadByte
       'Está muerto.
        If .flags.Muerto Then
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»No puedes desafiar si estas muerto.", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If
        
       'Está en zona insegura.
        If MapInfo(.Pos.Map).Pk Then
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»Solo puedes desafiar desde una zona segura.", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If
      
       'No tiene el oro.
     If .Stats.Gld < 150000 Then '150k.
       Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»Para desafiar son necesarios 150.000 monedas de oro.", FontTypeNames.FONTTYPE_GUILD)
       Exit Sub
    End If
      
       'Está preso.
       If .Counters.Pena Then
       Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»No puedes desafiar si estás preso.", FontTypeNames.FONTTYPE_GUILD)
       Exit Sub
       End If

       'Ya hay un user esperando a que lo desafien.
        If Desafios.Haydesafiante = 1 Then
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»Ya hay un usuario esperando desafio. Tipea /DESAFIAR para desafiarlo.", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If
      
       Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("[DESAFIOS]»Un usuario espera que lo DESAFIEN. Tipea /DESAFIAR para desafiarlo.", FontTypeNames.fonttype_dios))
      
        If Desafios.Haydesafio = 1 Then 'Están dueleando?
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»Ya hay dos personajes desafiando.", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If
      
        'Llevamos al usuario al mapa de combate
        Call WarpUserChar(UserIndex, 292, 50, 50, False)
        Desafios.Desafiante = UserIndex 'Guardamos
        Desafios.Haydesafiante = 1
        .flags.Endesafio = 1
       UserList(UserIndex).Stats.Gld = UserList(UserIndex).Stats.Gld - 150000 'Le saco los 150k el oro para la entrada al desafio.
       Call WriteUpdateUserStats(UserIndex)
    End With
End Sub
 
Public Sub HandleDesafiar(ByVal UserIndex As Integer)
    With UserList(UserIndex)
        Call .incomingData.ReadByte
      
        If .flags.Muerto Then
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»No puedes desafiar muerto.", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If
      
        If MapInfo(.Pos.Map).Pk Then
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»Solo puedes desafiar desde una zona segura.", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If

        If Desafios.Haydesafio = 1 Then 'Están dueleando?
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»Ya hay dos personajes desafiando.", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If
      
       'No tiene el oro.
     If .Stats.Gld < 150000 Then '150k.
       Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»Para desafiar son necesarios 150.000 monedas de oro.", FontTypeNames.FONTTYPE_GUILD)
       Exit Sub
    End If
      
       'Está preso.
       If .Counters.Pena Then
       Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»No puedes desafiar si estás preso.", FontTypeNames.FONTTYPE_GUILD)
       Exit Sub
       End If

       '¿Hay desafio?
        If Desafios.Haydesafiante = 0 Then
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»No hay ningún usuario esperando desafio. Tipea /DESAFIO para ser el primero", FontTypeNames.FONTTYPE_GUILD)
            Exit Sub
        End If
      
        'Llevamos al contrincante y actualizamos pos
        Call WarpUserChar(UserIndex, 292, 37, 51, False)
        Desafios.Oponente = UserIndex
        Desafios.Haydesafio = 1 'Desafiando
        .flags.Endesafio = 1
        UserList(UserIndex).Stats.Gld = UserList(UserIndex).Stats.Gld - 150000 'Le saco los 150k el oro para la entrada al desafio.
       Call WriteUpdateUserStats(UserIndex)
        'Actualizamos pos del contrincante
        Call WarpUserChar(Desafios.Desafiante, 292, 58, 68, False)
      
        Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("[DESAFIOS]»El desafio entre " & UserList(Desafios.Desafiante).Name & " y " & UserList(Desafios.Oponente).Name & " a comenzado. ", FontTypeNames.FONTTYPE_CONSEJO))
    End With
End Sub
 
Public Sub Terminar_Desafio(ByVal Ganador As Integer, ByVal Perdedor As Integer)
    Call WarpUserChar(Ganador, 292, 50, 50, True)
    Call WriteConsoleMsg(Ganador, "Si deseas ABANDONAR el DESAFÍO, tipea /ABANDONAR", FontTypeNames.fonttype_dios)
    Call WarpUserChar(Perdedor, 1, 76, 63, True)
    Desafios.Haydesafiante = 1 'aca seteo la variable para que todavía hay un desafio
    Desafios.Haydesafio = 0
    Desafios.Desafiante = 1
    Desafios.Oponente = 0
    UserList(Ganador).flags.Endesafio = 1 'aca es para que el ganador siga en desafio
    UserList(Perdedor).flags.Endesafio = 0
    
    Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("[DESAFIOS]» " & UserList(Perdedor).Name & " pierde el combate!", FontTypeNames.fonttype_dios))
    Call SendData(SendTarget.ToAll, 0, PrepareMessageConsoleMsg("[DESAFIOS]» Ganador del Desafio: " & UserList(Ganador).Name, FontTypeNames.FONTTYPE_GUILD))
    UserList(Ganador).Stats.Gld = UserList(Ganador).Stats.Gld + 300000 'Este es el oro que ganan, ya que los dos pagaron 150k entonces los sumamos y nos da 300.000
  
End Sub
 
 
Public Sub HandleAbandonar(ByVal UserIndex As Integer)
    With UserList(UserIndex)
        Call .incomingData.ReadByte
      
        If .flags.Endesafio = 0 Then
            Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»No estás en desafio.", FontTypeNames.FONTTYPE_GUILD)
        Else
            If Desafios.Haydesafio = 1 Then 'Si el duelo ya empezó
                Call WriteConsoleMsg(UserIndex, "[DESAFIOS]»No puedes retirarte ahora cobarde.", FontTypeNames.FONTTYPE_GUILD)
            Else
                Call WarpUserChar(Desafios.Desafiante, 1, 85, 83, False)
                Desafios.Haydesafiante = 0
    Desafios.Haydesafio = 0
    Desafios.Desafiante = 0
    Desafios.Oponente = 0
    UserList(UserIndex).flags.Endesafio = 0
    UserList(UserIndex).flags.Endesafio = 0
            End If
        End If
      
    End With
End Sub
En el. Public Type UserFlags
Código:
Endesafio As Byte '¿Esta en desafio?

Identificadores, paquetes. En el En el Private Enum ClientPacketID antes del End Enum ponemos:

Código:
   Desafio
    Desafiar
    AbandonarDesafio
Buscas:
Código:
Case ClientPacketID.Ping                    '/PING
            Call HandlePing(UserIndex)
Abajo:
Código:
Case ClientPacketID.Desafio
            Call HandleDesafio(UserIndex)
          
        Case ClientPacketID.Desafiar
            Call HandleDesafiar(UserIndex)
            
        Case ClientPacketID.AbandonarDesafio
            Call HandleAbandonar(UserIndex)
En el Sub CloseSocket:
Código:
If UserList(UserIndex).flags.Endesafio = 1 Then
        Call WarpUserChar(Desafios.Desafiante, 1, 50, 50, False) 'Llevamos al user
        Call WarpUserChar(Desafios.Oponente, 1, 51, 51, False) 'llevamos al otro
        'Reseteamos
        UserList(UserIndex).flags.Endesafio = 0
        UserList(Desafios.Oponente).flags.Endesafio = 0
        Desafios.Haydesafio = 0
        Desafios.Desafiante = 0
        Desafios.Oponente = 0
        Desafios.Haydesafiante = 0
    End If
Buscamos:
Código:
'Reseteamos los FLAGS
Abajo:
Código:
.flags.Endesafio = 0
Y en el  Sub UserDie:
Código:
If UserList(AttackerIndex).flags.Endesafio = 1 Then
            Call Terminar_Desafio(AttackerIndex, VictimIndex)
        End If

CLIENTE:
En el Private Enum ClientPacketID antes del End Enum ponemos:
Código:
Desafio
    Desafiar
    Abandonar
Al final de Modulo Protocol ponemos:
Código:
Public Sub WriteDesafio()
    Call outgoingData.WriteByte(ClientPacketID.Desafio)
End Sub
Public Sub WriteDesafiar()
    Call outgoingData.WriteByte(ClientPacketID.Desafiar)
End Sub
Public Sub WriteAbandonar()
  Call outgoingData.WriteByte(ClientPacketID.Abandonar)
End Sub
Ahora hacemos los comandos para eso buscamos un comando referente que nos lleve hacia el modulo donde se encuentran los comandos para los usuarios EJ:
Código:
Case "/HOGAR"
                Call WriteHome
Abajo de eso colocamos:
Código:
Case "/DESAFIO"
                Call WriteDesafio
              
            Case "/DESAFIAR"
                Call WriteDesafiar
            
             Case "/ABANDONAR"
                 Call WriteAbandonar
El vídeo esta DESACTUALIZADO, CUANDO GANAS SEGUIS EN DESAFIO, AHORA EXISTE EL COMANDO /ABANDONAR.
avatar
BenjaXZ
Nivel 6
Nivel 6

¿BANEADO? : No.
Premios : Ninguno.
Cantidad de envíos : 439
Localización : Dolores
Fecha de inscripción : 29/05/2012

Ver perfil de usuario

Volver arriba Ir abajo

Re: [APORTE] Desafios - Gana Sigue 13.0

Mensaje por Toyz el 23/10/2017, 10:43 pm

Recomendaciones;

Código:
If UserList(UserIndex).flags.Endesafio = 1 Then
        Call WarpUserChar(Desafios.Desafiante, 1, 50, 50, False) 'Llevamos al user
        Call WarpUserChar(Desafios.Oponente, 1, 51, 51, False) 'llevamos al otro
        'Reseteamos
        UserList(UserIndex).flags.Endesafio = 0
        UserList(Desafios.Oponente).flags.Endesafio = 0
        Desafios.Haydesafio = 0
        Desafios.Desafiante = 0
        Desafios.Oponente = 0
        Desafios.Haydesafiante = 0
    End If

Lo pondría dentro de un nuevo método en el módulo y de ahí simplemente hacés una llamada name_Module.Call();

Lo demás está todo bastante lindo, gracias por traer este código al foro.


_______________

Como saben yo aporto bastante en Servers-Argentum y les quiero decir que todos tienen derecho de usar y de aportar en otra comunidad mis aportes pero sólo con un requisito y es tan simple que dejar los créditos. Gracias.
Si conocen otra comunidad y en esa misma mis aportes no están aportados, si tenés tiempo y ganas, aportalo! A mucha gente le puede servir. No te olvides del requisito Razz

MIS MEJORES APORTES:

Compra/venta de personajes:
https://goo.gl/A44Av0

Juegos del Hambre:
https://goo.gl/u6aNUG

Deathmatch automático:
https://goo.gl/GQF4fK

Sistema de retos vía MMR con búsqueda, emparejamiento, etc:
https://goo.gl/40uP0f

Sistemas de eventos automáticos de 1vs1 hasta 10vs10:
https://goo.gl/XYKygc

1VS1 - AIM - MELEE - Gana Sigue (Se liberan cupos)
https://goo.gl/qq83wx

Retos 3vs3 - [Items, 2 rounds, múltiples arenas, oro]
https://goo.gl/x8SMnV

Eliminar sistema de Skill (COMPLETO)
https://goo.gl/mKxHzC
avatar
Toyz
Administrador
Administrador

¿BANEADO? : No.
Premios :
[1er puesto] Usuario del año 2016
Cantidad de envíos : 5046
Edad : 17
Localización : Global.
Fecha de inscripción : 28/09/2014

Ver perfil de usuario

Volver arriba Ir abajo

Volver arriba


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