Advertisement
Luciano_fuentes

MMR - Emparejamiento

Oct 4th, 2016
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2.  
  3. '@@ Autor: G Toyz
  4. '@@ Fecha: 04/10
  5. '@@ Creación: 22:23
  6.  
  7. Private Const Max_Search       As Byte = 20 '@@ Máximo de usuarios buscando.
  8. Private Const refError         As String = "No cumples los requisitos"
  9.  
  10. Private Type User_Searching
  11.     ID                         As Integer
  12.     Time_Searching             As Integer
  13.     MMR_Rank                   As Integer
  14. End Type
  15.  
  16. Private Type Searching
  17.     Searching(1 To Max_Search) As User_Searching
  18.     Users_Searching            As Byte
  19. End Type
  20. Private Retos_Searching        As Searching
  21. '_
  22.  
  23. Public Sub Search(ByVal ID As Integer)
  24.  
  25.     '@@ Lo ponemos en búsqueda de reto.
  26.  
  27.     If Can_Search(ID) = False Then Exit Sub
  28.    
  29.     With Retos_Searching
  30.        
  31.         .Users_Searching = .Users_Searching + 1
  32.         .Searching(.Users_Searching).ID = ID
  33.         .Searching(.Users_Searching).MMR_Rank = 100
  34.         .Searching(.Users_Searching).Time_Searching = 0
  35.         UserList(ID).flags.ArraySearching = .Users_Searching
  36.         Call WriteConsoleMsg(ID, "Buscando reto...", FontTypeNames.FONTTYPE_INFOBOLD)
  37.         Call Matching(ID)
  38.     End With
  39.  
  40. End Sub
  41. Private Sub Matching(ByVal ID As Integer)
  42.  
  43.     '@@ Tratamos de emparejar.
  44.  
  45.     Dim LoopC As Long
  46.    
  47.     With Retos_Searching
  48.         For LoopC = 1 To Max_Search
  49.             If Compare_MMR(.Searching(LoopC).ID, ID) = True Then
  50.                 If .Searching(LoopC).ID = ID Then Exit Sub
  51.                     '@@  RETOS
  52.                    Call Cancel_Search(.Searching(LoopC).ID)
  53.                     Call Cancel_Search(ID)
  54.                     Call WriteConsoleMsg(ID, "Has encontrado un rival!", FontTypeNames.FONTTYPE_INFOBOLD)
  55.                 Exit For
  56.             End If
  57.         Next LoopC
  58.     End With
  59.  
  60. End Sub
  61. Private Function Compare_MMR(ByVal Searcher_Old As Integer, ByVal Searcher_New As Integer) As Boolean
  62.  
  63.     '@@ Comparamos MMR.
  64.  
  65.     Compare_MMR = False
  66.    
  67.         If UserList(Searcher_Old).Stats.MMR > UserList(Searcher_New).Stats.MMR + Retos_Searching.Searching(UserList(Searcher_New).flags.ArraySearching).MMR_Rank Then Exit Function
  68.         If UserList(Searcher_Old).Stats.MMR < UserList(Searcher_New).Stats.MMR - Retos_Searching.Searching(UserList(Searcher_New).flags.ArraySearching).MMR_Rank Then Exit Function
  69.    
  70.     Compare_MMR = True
  71.  
  72. End Function
  73.  
  74. Public Sub Cancel_Search(ByVal ID As Integer)
  75.  
  76.     '@@ Cancela la búsqueda de un usuario, también sirve para cuando se desconecta _
  77.         y para cuando entra a un reto.
  78.  
  79.     Dim LoopC As Long
  80.    
  81.     With Retos_Searching
  82.         For LoopC = UserList(ID).flags.ArraySearching To .Users_Searching - 1
  83.             .Searching(LoopC).ID = .Searching(LoopC + 1).ID
  84.         Next LoopC
  85.             .Searching(.Users_Searching).ID = 0
  86.             UserList(ID).flags.ArraySearching = 0
  87.             .Users_Searching = .Users_Searching - 1
  88.             WriteConsoleMsg ID, "Has cancelado la búsqueda", FontTypeNames.FONTTYPE_INFOBOLD
  89.     End With
  90.  
  91. End Sub
  92.  
  93. Private Function Can_Search(ByVal ID As Integer) As Boolean
  94.  
  95.    '@@ ¿Puede buscar retos?
  96.  
  97.     Can_Search = False
  98.  
  99.     With UserList(ID)
  100.    
  101.         If .flags.ArraySearching > 0 Then
  102.             Call WriteConsoleMsg(ID, refError, FontTypeNames.FONTTYPE_INFOBOLD)
  103.             Exit Function
  104.         End If
  105.        
  106.         If .flags.Muerto Then
  107.             Call WriteConsoleMsg(ID, refError, FontTypeNames.FONTTYPE_INFOBOLD)
  108.             Exit Function
  109.         End If
  110.  
  111.         If Retos_Searching.Users_Searching = 20 Then
  112.             Call WriteConsoleMsg(ID, "Búsqueda de retos llena", FontTypeNames.FONTTYPE_INFOBOLD)
  113.             Exit Function
  114.         End If
  115.     End With
  116.  
  117.     Can_Search = True
  118.  
  119. End Function
  120.  
  121. Private Sub Extend_MMR_Rank(ByVal ID As Integer)
  122.    
  123.     '@@ Extendemos el rango de su MMR a medida que pasa el tiempo buscando.
  124.  
  125.     With Retos_Searching
  126.         If .Searching(ID).Time_Searching Mod 10 = 0 Then
  127.             .Searching(ID).MMR_Rank = .Searching(ID).MMR_Rank + 10
  128.             Call Matching(ID)
  129.         End If
  130.     End With
  131.    
  132. End Sub
  133.  
  134. Public Sub Extend_MMR_Rank_Time(ByVal ID As Integer)
  135.  
  136.     '@@ El tiempo que lleva buscando un reto...
  137.  
  138.     With Retos_Searching
  139.         .Searching(UserList(ID).flags.ArraySearching).Time_Searching = .Searching(UserList(ID).flags.ArraySearching).Time_Searching + 1
  140.         If .Searching(UserList(ID).flags.ArraySearching).MMR_Rank = 200 Then Exit Sub
  141.         Call Extend_MMR_Rank(ID)
  142.     End With
  143.    
  144. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement