Advertisement
Luciano_fuentes

Retos 3vs3

Oct 7th, 2016
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2.  
  3. '*********************************
  4. '                                *
  5. '@@ Retos 3vs3.                  *
  6. '@@ Autor: G Toyz - Luciano      *
  7. '@@ Fecha: 06/10                 *
  8. '@@ Creación: 23:17              *
  9. '                                *
  10. '*********************************
  11.  
  12. Private Const MAX_ARENAS        As Byte = 3
  13. Private Const INDEX_POTION_RED  As Integer = 1
  14. Private Const MAX_GOLD          As Long = 20000000
  15. Private Const MIN_GOLD          As Integer = 20000
  16. Private Const MIN_LEVEL         As Byte = 40
  17. Private Const MAP_ITEMS_RETO    As Integer = 1
  18. Private Const INDEX_BANKER      As Byte = 24
  19.  
  20. Private Type uRetos 'Usuarios
  21.    ID              As Integer
  22.     Pos             As WorldPos
  23.     X               As Byte
  24.     Y               As Byte
  25.     DeathX          As Byte
  26.     DeathY          As Byte
  27. End Type
  28.  
  29. Private Type tRetos 'Teams
  30.    Rounds          As Byte
  31.     Users(1 To 3)   As uRetos
  32.     Deaths          As Byte
  33. End Type
  34.  
  35. Private Type Retos  'Retos
  36.    Teams(1 To 2)   As tRetos
  37.     MAP_Arena       As Byte
  38.     Count           As Integer
  39.     Occupied        As Boolean
  40.     Gold            As Long
  41.     Items           As Boolean
  42.     X_Items         As Byte
  43.     Y_Items         As Byte
  44.     Time            As Integer
  45. End Type
  46.  
  47. Private Retos(1 To MAX_ARENAS) As Retos
  48. '_
  49.  
  50. Private Sub Start_Arenas(ByVal N_Arena As Integer, _
  51.                          ByVal MAP_Arena As Byte, _
  52.                          ByVal Team1_X As Byte, _
  53.                          ByVal Team1_Y As Byte, _
  54.                          ByVal Team2_X As Byte, _
  55.                          ByVal Team2_Y As Byte, _
  56.                          ByVal Team1_Death_X As Byte, _
  57.                          ByVal Team1_Death_Y As Byte, _
  58.                          ByVal Team2_Death_X As Byte, _
  59.                          ByVal Team2_Death_Y As Byte)
  60.  
  61.     '@@ Cargar las X y Y de cada usuario en cada arena
  62.    '@@ El cálculo es para posicionar uno abajo del otro o viceversa.
  63.    '@@ Death es para guardar la posición en la que va quedar si es _
  64.         que muere dentro del reto. Más que nada es para que no quede _
  65.         ahí en el medio del agite.
  66.  
  67.     Dim LoopC As Long
  68.  
  69.     With Retos(N_Arena)
  70.         For LoopC = 1 To 3
  71.             .Teams(1).Users(LoopC).X = Team1_X
  72.             .Teams(1).Users(LoopC).Y = Team1_Y - 1 + LoopC
  73.             .Teams(1).Users(LoopC).DeathX = Team1_Death_X
  74.             .Teams(1).Users(LoopC).DeathY = Team1_Death_Y + 1 - LoopC
  75.             .Teams(2).Users(LoopC).X = Team2_X
  76.             .Teams(2).Users(LoopC).Y = Team2_Y + 1 - LoopC
  77.             .Teams(2).Users(LoopC).DeathX = Team2_Death_X
  78.             .Teams(2).Users(LoopC).DeathY = Team2_Death_Y - 2 + LoopC
  79.         Next LoopC
  80.        
  81.         .MAP_Arena = MAP_Arena
  82.        
  83.         '@@ Cálculos para sacar el medio de la arena.
  84.        .X_Items = Team1_Death_X + 5
  85.         .Y_Items = Team1_Death_Y - 5
  86.     End With
  87.    
  88. End Sub
  89. '
  90. ''
  91. Public Sub Load_Arenas()
  92.  
  93.     '@@ Pongan sus mapas y coordenadas.
  94.    '@@ Llamadas: Main.
  95.  
  96.     Call Start_Arenas(1, 176, 13, 18, 27, 28, 13, 18, 27, 28)
  97.     'Call Start_Arenas(2, 1, 50, 50, 60, 60, 52, 52, 62, 62)
  98.    'Call Start_Arenas(3, 1, 50, 50, 60, 60, 52, 52, 62, 50)
  99.    
  100.     '1, 13, 18, 27, 28
  101.    
  102.     '@@ Agregan las que quieran.
  103.    '@@ Si agregan más, cambien la constante.
  104.    
  105. End Sub
  106.  
  107.  
  108. Public Sub Send_Reto(ByRef Players() As Integer, _
  109.                 ByVal Gold As Long, _
  110.                 ByVal Items As Boolean, _
  111.                 ByVal Potions_Red As Integer)
  112.    
  113.     '@@ Método para enviar retos.
  114.    
  115.     Dim LoopC As Long
  116.     ''ReDim Preserve UserList(Players(1)).Retos3vs3.Players(1 To 6) As Integer
  117.    If Not Can_Reto(Players(), Gold, Potions_Red, True) Then Exit Sub
  118.        
  119.     Dim X As Long
  120.     For X = 1 To 6
  121.     UserList(Players(1)).Retos3vs3.Players(X) = 0
  122.     Next X
  123.     With UserList(Players(1)).Retos3vs3
  124.         ''ReDim .Players(1 To 6) As Integer
  125.        .Gold = Gold
  126.         .Items = Items
  127.         .Players(1) = Players(1)
  128.         .Accepts = 1
  129.         .ID_Send = 1
  130.         .ID_User_Send = Players(1)
  131.        
  132.     End With
  133.  
  134.     For LoopC = 2 To UBound(Players())
  135.    
  136.         Call WriteConsoleMsg(Players(LoopC), UserList(Players(1)).name & _
  137.  _
  138.                                             " te ha invitado a participar en un reto 3vs3. [" _
  139.                                             & UserList(Players(1)).name _
  140.                                             & ", " & UserList(Players(2)).name _
  141.                                             & ", " & UserList(Players(3)).name _
  142.                                             & "] vs [" & UserList(Players(4)).name _
  143.                                             & ", " & UserList(Players(5)).name _
  144.                                             & ", " & UserList(Players(6)).name _
  145.                                             & "] por " & Gold & " monedas de oro " _
  146.                                             & IIf(Items = True, " y los items del inventario.", ".") _
  147.                                             & "MÁXIMO POCIONES ROJAS: " & Potions_Red _
  148.                                             & ". Para aceptar el reto escriba /SIRETO " _
  149.                                             & UserList(Players(1)).name, _
  150.                                             FontTypeNames.FONTTYPE_INFOBOLD)
  151.                                            
  152.         UserList(Players(1)).Retos3vs3.Players(LoopC) = Players(LoopC)
  153.         UserList(Players(LoopC)).Retos3vs3.ID_Send = LoopC
  154.         UserList(Players(LoopC)).Retos3vs3.ID_User_Send = Players(1)
  155.        
  156.     Next LoopC
  157.    
  158.         Call WriteConsoleMsg(Players(1), "Solicitud enviada correctamente", FontTypeNames.FONTTYPE_INFOBOLD)
  159.    
  160. End Sub
  161.  
  162. Public Sub Accept_Reto(ByVal Player_ID As Integer, ByVal Send_ID As Integer)
  163.    
  164.    '@@ Método para aceptar retos.
  165.  
  166.     Dim Arena As Byte
  167.     Dim LoopC As Long
  168.     Dim loopX As Long
  169.    
  170.     If Send_ID > 0 Then
  171.          If UserList(Send_ID).Retos3vs3.Players(UserList(Player_ID).Retos3vs3.ID_Send) <> Player_ID Then
  172.              Call WriteConsoleMsg(Player_ID, "El usuario " & UserList(Send_ID).name & " no te ha invitado a ningún reto.", FontTypeNames.FONTTYPE_INFOBOLD)
  173.              Exit Sub
  174.          End If
  175.     Else
  176.         Call WriteConsoleMsg(Player_ID, "El usuario no se encuentra online.", FontTypeNames.FONTTYPE_INFOBOLD)
  177.         Exit Sub
  178.     End If
  179.      
  180.     With UserList(Send_ID).Retos3vs3
  181.        
  182.         If Can_Reto(.Players(), .Gold, .Potions, False, Player_ID) = False Then Exit Sub
  183.        
  184.         .Accepts = .Accepts + 1
  185.         .Time = .Time + 5
  186.         UserList(Player_ID).Retos3vs3.accept = True
  187.        
  188.         Call WriteConsoleMsg(Player_ID, "Aceptaste el reto correctamente, esperá a que los demás también lo hagan.", FontTypeNames.FONTTYPE_INFOBOLD)
  189.         Call WriteConsoleMsg(Send_ID, UserList(Player_ID).name & " aceptó el reto.", FontTypeNames.FONTTYPE_INFOBOLD)
  190.        
  191.         If .Accepts = 6 Then
  192.            
  193.             Arena = There_Arena()
  194.            
  195.             If Arena = 0 Then
  196.                 Call WriteConsoleMsg(Send_ID, "No hay arenas", FontTypeNames.FONTTYPE_INFOBOLD)
  197.                 Call Cancel_Send(Send_ID, , False)
  198.                 Exit Sub
  199.             End If
  200.            
  201.             If Can_Reto(.Players(), .Gold, .Potions) = False Then
  202.                 Call Cancel_Send(.Players(1), False)
  203.                 Exit Sub
  204.             End If
  205.            
  206.             .accept = False
  207.             .ID_Send = 0
  208.            
  209.             With Retos(Arena)
  210.            
  211.                 .Count = 10
  212.                 .Gold = UserList(Send_ID).Retos3vs3.Gold
  213.                 .Items = UserList(Send_ID).Retos3vs3.Items
  214.                 .Occupied = True
  215.                
  216.                 .Teams(1).Users(1).ID = UserList(Send_ID).Retos3vs3.Players(1)
  217.                 .Teams(1).Users(2).ID = UserList(Send_ID).Retos3vs3.Players(2)
  218.                 .Teams(1).Users(3).ID = UserList(Send_ID).Retos3vs3.Players(3)
  219.                
  220.                 .Teams(2).Users(1).ID = UserList(Send_ID).Retos3vs3.Players(4)
  221.                 .Teams(2).Users(2).ID = UserList(Send_ID).Retos3vs3.Players(5)
  222.                 .Teams(2).Users(3).ID = UserList(Send_ID).Retos3vs3.Players(6)
  223.                
  224.                 For LoopC = 1 To 2
  225.                     For loopX = 1 To 3
  226.                         .Teams(LoopC).Users(loopX).Pos = UserList(.Teams(LoopC).Users(loopX).ID).Pos
  227.                         WarpUserChar .Teams(LoopC).Users(loopX).ID, .MAP_Arena, .Teams(LoopC).Users(loopX).X, .Teams(LoopC).Users(loopX).Y, False
  228.                         WritePauseToggle .Teams(LoopC).Users(loopX).ID
  229.                         UserList(.Teams(LoopC).Users(loopX).ID).Stats.GLD = UserList(.Teams(LoopC).Users(loopX).ID).Stats.GLD - .Gold
  230.                         WriteUpdateGold (.Teams(LoopC).Users(loopX).ID)
  231.                         UserList(.Teams(LoopC).Users(loopX).ID).Retos3vs3.ID_Send = 0
  232.                         Assign_Remove_Flags (.Teams(LoopC).Users(loopX).ID)
  233.                         UserList(.Teams(LoopC).Users(loopX).ID).Retos3vs3.ID_Team = LoopC
  234.                         UserList(.Teams(LoopC).Users(loopX).ID).Retos3vs3.ID_User = loopX
  235.                         UserList(.Teams(LoopC).Users(loopX).ID).Retos3vs3.Arena = Arena
  236.                         UserList(.Teams(LoopC).Users(loopX).ID).Retos3vs3.accept = False
  237.                         UserList(.Teams(LoopC).Users(loopX).ID).Retos3vs3.ID_User_Send = 0
  238.                     Next loopX
  239.                 Next LoopC
  240.                
  241.             End With
  242.                          
  243.             Call Reset_Sender(Send_ID)
  244.            
  245.         End If
  246.        
  247.     End With
  248.    
  249. End Sub
  250. Private Sub Assign_Remove_Flags(ByVal ID As Integer)
  251.  
  252.     '@@ Método para actualizar la vida, mana, sacarle el paralizado, revivir al usuario, etc.
  253.  
  254.     Call RevivirUsuario(ID)
  255.  
  256.     With UserList(ID).flags
  257.         .Paralizado = 0
  258.         .Envenenado = 0
  259.         .Escondido = 0
  260.         .invisible = 0
  261.         .Inmovilizado = 0
  262.     End With
  263.    
  264.     With UserList(ID).Stats
  265.         .MinMAN = .MaxMAN
  266.         .MinSta = .MaxSta
  267.     End With
  268.  
  269.     Call WriteUpdateUserStats(ID)
  270.    
  271. End Sub
  272.  
  273. Public Sub Cancel_Send(ByVal Send_ID As Integer, Optional ByVal Cancel_ID As Integer, Optional ByVal Cancel_Arenas As Boolean)
  274.  
  275.     '@@ Método para cancelar el envío de reto.
  276.  
  277.     Dim LoopC As Long
  278.  
  279.     If Cancel_ID > 0 Then
  280.         If UserList(Send_ID).Retos3vs3.Players(UserList(Cancel_ID).Retos3vs3.ID_Send) <> Cancel_ID Then
  281.             Call WriteConsoleMsg(Cancel_ID, "El usuario " & UserList(Send_ID).name & " no te ha invitado a ningún reto.", FontTypeNames.FONTTYPE_INFOBOLD)
  282.             Exit Sub
  283.         End If
  284.     End If
  285.    
  286.     For LoopC = 1 To 6
  287.    
  288.         UserList(UserList(Send_ID).Retos3vs3.Players(LoopC)).Retos3vs3.ID_Send = 0
  289.         UserList(UserList(Send_ID).Retos3vs3.Players(LoopC)).Retos3vs3.ID_User_Send = 0
  290.         UserList(UserList(Send_ID).Retos3vs3.Players(LoopC)).Retos3vs3.accept = False
  291.        
  292.         If Cancel_ID > 0 Then
  293.             WriteConsoleMsg UserList(Send_ID).Retos3vs3.Players(LoopC), UserList(Cancel_ID).name & " Rechazó el reto.", FontTypeNames.FONTTYPE_INFOBOLD
  294.             GoTo 1
  295.         End If
  296.        
  297.         If Cancel_Arenas = True Then _
  298.             WriteConsoleMsg UserList(Send_ID).Retos3vs3.Players(LoopC), "El reto se autocanceló por falta de arenas.", FontTypeNames.FONTTYPE_INFOBOLD
  299.    
  300. 1    Next LoopC
  301.    
  302.     If Cancel_ID > 0 Then _
  303.         WriteConsoleMsg Cancel_ID, "Rechazaste el reto, ya puedes buscar otro.", FontTypeNames.FONTTYPE_INFOBOLD
  304.    
  305.     Reset_Sender Send_ID
  306.  
  307. End Sub
  308. Private Sub Reset_Sender(ByVal ID As Integer)
  309.    
  310.     '@@ Método para resetear las variables del que envía el reto.
  311.    
  312.     Dim LoopC As Long
  313.  
  314.     With UserList(ID).Retos3vs3
  315.         .Accepts = 0
  316.         .Gold = 0
  317.         .Items = False
  318.        
  319.         For LoopC = 1 To 6
  320.             .Players(LoopC) = 0
  321.         Next LoopC
  322.        
  323.         .Potions = 0
  324.     End With
  325.    
  326. End Sub
  327.  
  328. Private Function There_Arena() As Byte
  329.  
  330.     '@@ Función que devuelve una arena libre.
  331.  
  332.     Dim LoopC As Long
  333.    
  334.     For LoopC = 1 To MAX_ARENAS
  335.         If Retos(LoopC).Occupied = False Then
  336.             There_Arena = LoopC
  337.             Exit Function
  338.         End If
  339.     Next LoopC
  340.    
  341.     There_Arena = 0
  342.  
  343. End Function
  344.  
  345. Private Function Can_Reto(ByRef Players() As Integer, ByVal Gold As Long, ByVal Potions_Red As Integer, Optional ByVal Sender As Boolean, Optional ByVal ID As Integer) As Boolean
  346.    
  347.     '@@ Función para comprobar si puede retar.
  348.    
  349.     '@@ Comprobaciones.
  350.    
  351.     '@@ Agregan si es que piensan que falta una o _
  352.         si simplemente quieren agregar otras restricciones.
  353.    
  354.     Dim LoopC As Long
  355.     Dim LoopZ As Long
  356.    
  357.     Can_Reto = False
  358.        
  359.     With UserList(Players(1))
  360.    
  361.         For LoopZ = 2 To 6
  362.             If Players(1) = Players(LoopZ) Then
  363.                 Call WriteConsoleMsg(Players(1), "No puedes enviarte una solicitud a vos mismo.", FontTypeNames.FONTTYPE_INFOBOLD)
  364.                 Exit Function
  365.             End If
  366.         Next LoopZ
  367.        
  368.         If .Retos3vs3.Players(1) = Players(1) And Sender = True Then
  369.             Call WriteConsoleMsg(Players(1), "Ya has enviado una solicitud.", FontTypeNames.FONTTYPE_INFOBOLD)
  370.             Exit Function
  371.         End If
  372.        
  373.         If .Retos3vs3.ID_Send > 0 And Sender = True Then
  374.             Call WriteConsoleMsg(Players(1), "Estás respondiendo a una solicitud.", FontTypeNames.FONTTYPE_INFOBOLD)
  375.             Exit Function
  376.         End If
  377.        
  378.         If .Stats.GLD < Gold Then
  379.             Call WriteConsoleMsg(Players(1), "No tienes suficiente oro.", FontTypeNames.FONTTYPE_INFOBOLD)
  380.             Exit Function
  381.         End If
  382.    
  383.         If Not Potions_Red = 0 Then
  384.             If Potion_Red(Players(1)) > Potions_Red Then
  385.                 Call WriteConsoleMsg(Players(1), "Tienes demasiadas pociones.", FontTypeNames.FONTTYPE_INFOBOLD)
  386.                 Exit Function
  387.             End If
  388.         End If
  389.        
  390.         If Gold < MIN_GOLD Then
  391.             Call WriteConsoleMsg(Players(1), "La cantidad mínima para retar es de " & MIN_GOLD & " monedas de oro.", FontTypeNames.FONTTYPE_INFOBOLD)
  392.             Exit Function
  393.         End If
  394.        
  395.         If Gold > MAX_GOLD Then
  396.             Call WriteConsoleMsg(Players(1), "La cantidad máxima para retar es de " & MAX_GOLD & " monedas de oro.", FontTypeNames.FONTTYPE_INFOBOLD)
  397.             Exit Function
  398.         End If
  399.        
  400.         If Not Is_City(.Pos.map) Then
  401.             Call WriteConsoleMsg(Players(1), "Para mandar un reto debes estar en una ciudad.", FontTypeNames.FONTTYPE_INFOBOLD)
  402.             Exit Function
  403.         End If
  404.        
  405.         If .Retos3vs3.Arena > 0 Then
  406.             Call WriteConsoleMsg(Players(1), "Ya estás en un reto!", FontTypeNames.FONTTYPE_INFOBOLD)
  407.             Exit Function
  408.         End If
  409.        
  410.         If .Stats.ELV < MIN_LEVEL Then
  411.             Call WriteConsoleMsg(Players(1), "No tienes suficiente nivel como para retar.", FontTypeNames.FONTTYPE_INFOBOLD)
  412.             Exit Function
  413.         End If
  414.        
  415.     End With
  416.    
  417.     For LoopC = 2 To 6
  418.    
  419.         If ID > 0 Then _
  420.             LoopC = UserList(ID).Retos3vs3.ID_Send
  421.        
  422.         If Players(LoopC) = 0 Then
  423.             Call WriteConsoleMsg(Players(1), "Uno de los usuarios no se encuentra online.", FontTypeNames.FONTTYPE_INFOBOLD)
  424.             Exit Function
  425.         End If
  426.    
  427.         With UserList(Players(LoopC))
  428.            
  429.             If .flags.Muerto = 1 Then
  430.                 Call WriteConsoleMsg(Players(1), "El usuario " & .name & " está muerto", FontTypeNames.FONTTYPE_INFOBOLD)
  431.                 If Not Sender Then _
  432.                     Call WriteConsoleMsg(Players(LoopC), "¡Estás muerto!", FontTypeNames.FONTTYPE_INFOBOLD)
  433.                 Exit Function
  434.             End If
  435.            
  436.             If .Retos3vs3.accept = True Then
  437.                 Call WriteConsoleMsg(Players(LoopC), "Ya aceptaste el reto.", FontTypeNames.FONTTYPE_INFOBOLD)
  438.                 Exit Function
  439.             End If
  440.          
  441.             If Not Potions_Red = 0 Then
  442.                 If Potion_Red(Players(LoopC)) > Potions_Red Then
  443.                     Call WriteConsoleMsg(Players(1), "El usuario " & .name & " tiene demasiadas pociones.", FontTypeNames.FONTTYPE_INFOBOLD)
  444.                     If Not Sender Then _
  445.                         Call WriteConsoleMsg(Players(LoopC), "Tienes demasiadas pociones", FontTypeNames.FONTTYPE_INFOBOLD)
  446.                     Exit Function
  447.                 End If
  448.             End If
  449.            
  450.             If .Stats.GLD < Gold Then
  451.                 Call WriteConsoleMsg(Players(1), "El usuario " & .name & " no tiene suficiente oro para retar.", FontTypeNames.FONTTYPE_INFOBOLD)
  452.                 If Not Sender Then _
  453.                     Call WriteConsoleMsg(Players(LoopC), "No tienes suficiente oro.", FontTypeNames.FONTTYPE_INFOBOLD)
  454.                 Exit Function
  455.             End If
  456.            
  457.             If Not Is_City(.Pos.map) Then
  458.                 Call WriteConsoleMsg(Players(1), "El usuario " & .name & " no esta en una ciudad.", FontTypeNames.FONTTYPE_INFOBOLD)
  459.                 If Not Sender Then _
  460.                     Call WriteConsoleMsg(Players(LoopC), "Debes estar en una ciudad.", FontTypeNames.FONTTYPE_INFOBOLD)
  461.                 Exit Function
  462.             End If
  463.    
  464.             If .Stats.ELV < MIN_LEVEL Then
  465.                 Call WriteConsoleMsg(Players(1), "El usuario " & .name & " no tiene un nivel adecuado.", FontTypeNames.FONTTYPE_INFOBOLD)
  466.                 If Not Sender Then _
  467.                     Call WriteConsoleMsg(Players(LoopC), "Tienes que ser nivel mayor a 40 para poder retar.", FontTypeNames.FONTTYPE_INFOBOLD)
  468.                 Exit Function
  469.             End If
  470.            
  471.             If .Retos3vs3.Arena > 0 Then
  472.                 Call WriteConsoleMsg(Players(1), "El usuario " & .name & " está en un reto.", FontTypeNames.FONTTYPE_INFOBOLD)
  473.                 If Not Sender Then _
  474.                     Call WriteConsoleMsg(Players(LoopC), "Para aceptar un reto no debes estar en uno.", FontTypeNames.FONTTYPE_INFOBOLD)
  475.                 Exit Function
  476.             End If
  477.        
  478.         End With
  479.        
  480.         If ID > 0 Then _
  481.             Exit For
  482.        
  483.     Next LoopC
  484.        
  485.         Can_Reto = True
  486.    
  487. End Function
  488.  
  489. Private Function Potion_Red(ByVal ID As Integer) As Long
  490.  
  491.     '@@ Función que devuelve las pociones rojas del usuario.
  492.  
  493.     Dim LoopC As Long
  494.     Dim Total As Long
  495.    
  496.     With UserList(ID)
  497.    
  498.         For LoopC = 1 To .CurrentInventorySlots
  499.             If .Invent.Object(LoopC).ObjIndex = INDEX_POTION_RED Then
  500.                 Total = Total + .Invent.Object(LoopC).Amount
  501.             End If
  502.         Next LoopC
  503.        
  504.         Potion_Red = Total
  505.        
  506.     End With
  507.    
  508. End Function
  509.  
  510. Private Function Is_City(ByVal map As Integer) As Boolean
  511.    
  512.     '@@ Función que devuelve si el mapa es una ciudad.
  513.    
  514.     Dim LoopC As Long
  515.    
  516.     For LoopC = 1 To NUMCIUDADES
  517.         If map = Ciudades(LoopC).map Then
  518.             Is_City = True
  519.             Exit Function
  520.         End If
  521.     Next LoopC
  522.    
  523.     Is_City = False
  524.  
  525. End Function
  526. Public Sub Count_Reto()
  527.  
  528.     '@@ Método para contar los tiempos del envío del reto y de cada arena para que _
  529.         empiece la batalla.
  530.  
  531.     Dim LoopC As Long
  532.     Dim loopX As Long
  533.     Dim LoopZ As Long
  534.     Dim LoopV As Long
  535.  
  536.     For LoopC = 1 To MAX_ARENAS
  537.         With Retos(LoopC)
  538.        
  539.             If .Time = -1 Then
  540.                 Call Clean_Teams(LoopC)
  541.                 For LoopV = 1 To 3
  542.                     Call WarpUserChar(.Teams(1).Users(LoopV).ID, .Teams(1).Users(LoopV).Pos.map, .Teams(1).Users(LoopV).Pos.X, .Teams(1).Users(LoopV).Pos.Y, True)
  543.                     Call Reset_All(.Teams(1).Users(LoopV).ID)
  544.                     Call Reset_All(.Teams(2).Users(LoopV).ID)
  545.                     Call Assign_Remove_Flags(.Teams(1).Users(LoopV).ID)
  546.                     Call Assign_Remove_Flags(.Teams(2).Users(LoopV).ID)
  547.                 Next LoopV
  548.                 Call QuitarNPC(INDEX_BANKER)
  549.             End If
  550.            
  551.             If .Time > 0 Then
  552.                 .Time = .Time - 1
  553.             End If
  554.        
  555.             If .Count = 0 Then
  556.                 .Count = -1
  557.                
  558.                 For loopX = 1 To 3
  559.                     If .Teams(1).Users(loopX).ID > 0 Then
  560.                         Call WriteConsoleMsg(.Teams(1).Users(loopX).ID, "Reto> Ya!", FontTypeNames.FONTTYPE_FIGHT)
  561.                         Call WritePauseToggle(.Teams(1).Users(loopX).ID)
  562.                     End If
  563.                    
  564.                     If .Teams(2).Users(loopX).ID > 0 Then
  565.                         Call WriteConsoleMsg(.Teams(2).Users(loopX).ID, "Reto> Ya!", FontTypeNames.FONTTYPE_FIGHT)
  566.                         Call WritePauseToggle(.Teams(2).Users(loopX).ID)
  567.                     End If
  568.                 Next loopX
  569.  
  570.             End If
  571.            
  572.             If .Count >= 1 Then
  573.                 For LoopZ = 1 To 3
  574.                     If .Teams(1).Users(LoopZ).ID > 0 Then _
  575.                         Call WriteConsoleMsg(.Teams(1).Users(LoopZ).ID, "Reto> " & .Count, FontTypeNames.FONTTYPE_INFOBOLD)
  576.                     If .Teams(2).Users(LoopZ).ID > 0 Then _
  577.                         Call WriteConsoleMsg(.Teams(2).Users(LoopZ).ID, "Reto> " & .Count, FontTypeNames.FONTTYPE_INFOBOLD)
  578.                 Next LoopZ
  579.                 .Count = .Count - 1
  580.             End If
  581.            
  582.         End With
  583.     Next LoopC
  584.  
  585. End Sub
  586.  
  587. Public Sub Death(ByVal ID As Integer)
  588.  
  589.     'Método para saber quién muere y si ya murieron todos que gane un round el equipo ganador.
  590.  
  591.     Dim LoopC As Long
  592.     Dim Team_Win As Byte
  593.    
  594.     If UserList(ID).Retos3vs3.Arena = 0 Then Exit Sub
  595.    
  596.     With Retos(UserList(ID).Retos3vs3.Arena)
  597.    
  598.         If UserList(ID).Retos3vs3.ID_Team = 1 Then
  599.             Team_Win = 2
  600.         Else
  601.             Team_Win = 1
  602.         End If
  603.        
  604.         .Teams(UserList(ID).Retos3vs3.ID_Team).Deaths = .Teams(UserList(ID).Retos3vs3.ID_Team).Deaths + 1
  605.        
  606.         Call WarpUserChar(ID, .MAP_Arena, .Teams(UserList(ID).Retos3vs3.ID_Team).Users(UserList(ID).Retos3vs3.ID_User).DeathX, .Teams(UserList(ID).Retos3vs3.ID_Team).Users(UserList(ID).Retos3vs3.ID_User).DeathY, False)
  607.    
  608.         If .Teams(UserList(ID).Retos3vs3.ID_Team).Deaths = 3 Then _
  609.             Call Round_Reto(Team_Win, UserList(ID).Retos3vs3.Arena)
  610.            
  611.     End With
  612.  
  613. End Sub
  614.  
  615. Public Sub Round_Reto(ByVal ID_Team As Byte, ByVal Arena As Byte)
  616.  
  617.     '@@ Método que contabiliza los rounds ganados, los lleva a las _
  618.         esquinas y verifica si ganó o no el reto.
  619.  
  620.     Dim LoopC As Long
  621.     Dim Team_Loser As Byte
  622.    
  623.     If ID_Team = 1 Then
  624.         Team_Loser = 2
  625.     Else
  626.         Team_Loser = 1
  627.     End If
  628.    
  629.     With Retos(Arena)
  630.        
  631.         .Teams(ID_Team).Rounds = .Teams(ID_Team).Rounds + 1
  632.        
  633.         If .Teams(ID_Team).Rounds = 2 Then _
  634.             Call Finish(ID_Team, Team_Loser, Arena)
  635.        
  636.         .Count = 10
  637.        
  638.         For LoopC = 1 To 3
  639.             Call Assign_Remove_Flags(.Teams(1).Users(LoopC).ID)
  640.             Call Assign_Remove_Flags(.Teams(2).Users(LoopC).ID)
  641.             Call WarpUserChar(.Teams(1).Users(LoopC).ID, .MAP_Arena, .Teams(1).Users(LoopC).X, .Teams(1).Users(LoopC).Y, False)
  642.             Call WarpUserChar(.Teams(2).Users(LoopC).ID, .MAP_Arena, .Teams(2).Users(LoopC).X, .Teams(2).Users(LoopC).Y, False)
  643.             Call WritePauseToggle(.Teams(1).Users(LoopC).ID)
  644.             Call WritePauseToggle(.Teams(2).Users(LoopC).ID)
  645.             .Teams(1).Deaths = 0
  646.             .Teams(2).Deaths = 0
  647.         Next LoopC
  648.  
  649.     End With
  650.  
  651. End Sub
  652.  
  653. Public Sub Reset_All(ByVal ID As Integer)
  654.  
  655.     '@@ Método para resetear todos los flags de reto del usuario.
  656.  
  657.     Dim LoopC As Long
  658.  
  659.     With UserList(ID).Retos3vs3
  660.         .Accepts = 0
  661.         .Arena = 0
  662.         .Gold = 0
  663.         .ID_Send = 0
  664.         .ID_Team = 0
  665.         .ID_User = 0
  666.         .Items = False
  667.        
  668.         For LoopC = 1 To 6
  669.             .Players(LoopC) = 0
  670.         Next LoopC
  671.        
  672.         .Potions = 0
  673.         .Time = 0
  674.     End With
  675.  
  676. End Sub
  677.  
  678. Public Sub Finish(ByVal ID_Winner As Byte, ByVal ID_Loser As Byte, ByVal Arena As Byte, Optional Cancel As Boolean)
  679.  
  680.     '@@ Método para finalizar el reto.
  681.  
  682.     Dim LoopC As Long
  683.  
  684.     With Retos(Arena)
  685.    
  686.         For LoopC = 1 To 3
  687.             UserList(.Teams(ID_Winner).Users(LoopC).ID).Stats.GLD = UserList(.Teams(ID_Winner).Users(LoopC).ID).Stats.GLD + (.Gold * 2)
  688.             UserList(.Teams(ID_Winner).Users(LoopC).ID).rank.Retos3vs3Ganados = UserList(.Teams(ID_Winner).Users(LoopC).ID).rank.Retos3vs3Ganados + 1
  689.             Call CheckRanking(eRankings.Retos3vs3, .Teams(ID_Winner).Users(LoopC).ID, UserList(.Teams(ID_Winner).Users(LoopC).ID).rank.Retos3vs3Ganados)
  690.             Call WriteConsoleMsg(.Teams(ID_Winner).Users(LoopC).ID, "Has ganado el reto, felicidades!", FontTypeNames.FONTTYPE_INFOBOLD)
  691.             Call WriteConsoleMsg(.Teams(ID_Loser).Users(LoopC).ID, "Has perdido el reto, siga practicando!", FontTypeNames.FONTTYPE_INFOBOLD)
  692.             Call Assign_Remove_Flags(.Teams(1).Users(LoopC).ID)
  693.             Call Assign_Remove_Flags(.Teams(2).Users(LoopC).ID)
  694.             Call WriteUpdateGold(.Teams(ID_Winner).Users(LoopC).ID)
  695.             If Cancel = False Then
  696.                 Call WritePauseToggle(.Teams(ID_Winner).Users(LoopC).ID)
  697.                 Call WritePauseToggle(.Teams(ID_Loser).Users(LoopC).ID)
  698.             End If
  699.             If .Items = False Then
  700.                 Call WarpUserChar(.Teams(1).Users(LoopC).ID, .Teams(1).Users(LoopC).Pos.map, .Teams(1).Users(LoopC).Pos.X, .Teams(1).Users(LoopC).Pos.Y, True)
  701.                 Call WarpUserChar(.Teams(2).Users(LoopC).ID, .Teams(2).Users(LoopC).Pos.map, .Teams(2).Users(LoopC).Pos.X, .Teams(2).Users(LoopC).Pos.Y, True)
  702.                 Call Reset_All(.Teams(1).Users(LoopC).ID)
  703.                 Call Reset_All(.Teams(2).Users(LoopC).ID)
  704.             Else
  705.                 Call WarpUserChar(.Teams(1).Users(LoopC).ID, .MAP_Arena, .X_Items, .Y_Items, False)
  706.                 Call WarpUserChar(.Teams(2).Users(LoopC).ID, .MAP_Arena, .X_Items, .Y_Items, False)
  707.                 Call WarpUserChar(.Teams(ID_Loser).Users(LoopC).ID, .Teams(ID_Loser).Users(LoopC).Pos.map, .Teams(ID_Loser).Users(LoopC).Pos.X, .Teams(ID_Loser).Users(LoopC).Pos.Y, True)
  708.                 Call TirarTodosLosItems(.Teams(ID_Loser).Users(LoopC).ID)
  709.                 Call WriteConsoleMsg(.Teams(ID_Winner).Users(LoopC).ID, "Tienen " & .Time & " segundos para recojer los ítems.", FontTypeNames.FONTTYPE_INFOBOLD)
  710.                 Call Assign_Remove_Flags(.Teams(ID_Winner).Users(LoopC).ID)
  711.                 ''Call SpawnNpc(INDEX_BANKER, Pos, False, False) TOYZERROR
  712.            End If
  713.         Next LoopC
  714.        
  715.         If .Items = False Then _
  716.             Call Clean_Teams(Arena)
  717.        
  718.     End With
  719.  
  720. End Sub
  721.  
  722.  
  723. Public Sub Clean_Teams(ByVal Arena As Byte)
  724.    
  725.     '@@ Método que limpia las arenas y los teams.
  726.    
  727.     Dim LoopC As Long
  728.    
  729.     With Retos(Arena)
  730.         .Count = 0
  731.         .Gold = 0
  732.         .Items = 0
  733.         .Occupied = False
  734.         For LoopC = 1 To 3
  735.             .Teams(1).Users(LoopC).ID = 0
  736.             .Teams(2).Users(LoopC).ID = 0
  737.         Next LoopC
  738.         .Teams(1).Rounds = 0: .Teams(2).Rounds = 0
  739.         .Teams(1).Deaths = 0: .Teams(2).Deaths = 0
  740.     End With
  741.  
  742. End Sub
  743.  
  744. Public Sub Cancel_Reto(ByVal ID As Integer)
  745.  
  746.     '@@ Método para cuando un usuario se desconecta o abandona el reto.
  747.  
  748.     Dim Team_Win As Byte
  749.    
  750.     If UserList(ID).Retos3vs3.ID_Team = 1 Then Team_Win = 2
  751.     If UserList(ID).Retos3vs3.ID_Team = 2 Then Team_Win = 1
  752.  
  753.     Call Finish(Team_Win, UserList(ID).Retos3vs3.ID_Team, UserList(ID).Retos3vs3.Arena)
  754.    
  755. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement