Advertisement
Guest User

Untitled

a guest
Aug 7th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Sub MoveUserChar(ByVal UserIndex As Integer, ByVal nHeading As eHeading)
  2. '*************************************************
  3. 'Author: Unknown
  4. 'Last modified: 30/03/2009
  5. 'Moves the char, sending the message to everyone in range.
  6. '30/03/2009: ZaMa - Now it's legal to move where a casper is, changing its pos to where the moving char was.
  7. '*************************************************
  8.   On Error GoTo MoveUserChar_Error
  9.  
  10. On Error GoTo err:
  11.    
  12.     Dim sailing                     As Boolean
  13.     Dim OldIntemperie               As Boolean
  14.     Dim CasperIndex                 As Integer
  15.     Dim oldUserIndex                As Integer
  16.     Dim nPos                        As WorldPos
  17.     Dim CasPerPos                   As WorldPos
  18.     Dim CasperHeading               As eHeading
  19.     Dim RestarX                     As Integer
  20.     Dim RestarY                     As Integer
  21.            
  22.     With UserList(UserIndex)
  23.    
  24.         sailing = PuedeAtravesarAgua(UserIndex)
  25.         nPos = .Pos
  26.         Call HeadtoPos(nHeading, nPos)
  27.        
  28.         If MoveToLegalPos(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y, sailing, Not sailing, UserIndex) Then
  29.             'si no estoy solo en el mapa...
  30.            If MapInfo(.Pos.Map).NumUsers > 1 Then
  31.                    
  32.                 CasperIndex = MapData(.Pos.Map, nPos.X, nPos.Y).UserIndex
  33.                 'Si hay un usuario, y paso la validacion, entonces es un casper
  34.                If CasperIndex > 0 Then
  35.                     CasperHeading = InvertHeading(nHeading)
  36.                     CasPerPos = UserList(CasperIndex).Pos
  37.                     Call HeadtoPos(CasperHeading, CasPerPos)
  38.    
  39.                     With UserList(CasperIndex)
  40.                        
  41.                        
  42.                         Call WriteForceCharMove(CasperIndex, CasperHeading)
  43.    
  44.                         'Update map and user pos
  45.                        .Pos = CasPerPos
  46.                         .Char.Heading = CasperHeading
  47.                         MapData(.Pos.Map, CasPerPos.X, CasPerPos.Y).UserIndex = CasperIndex
  48.                        
  49.                
  50.                     'Actualizamos las áreas de ser necesario
  51.                        Call ModAreas.CheckUpdateNeededUser(CasperIndex, CasperHeading)
  52.                         Call SendData(SendTarget.ToPCAreaButIndex, CasperIndex, PrepareMessageCharacterMoves(.Char.CharIndex, CasPerPos.X, CasPerPos.Y))
  53.                     End With
  54.                 End If
  55.                
  56.                 If .flags.AdminInvisible = 1 Then
  57.                     Call SendData(SendTarget.ToMayorRangoAreaButIndex, UserIndex, PrepareMessageCharacterMoves(UserList(UserIndex).Char.CharIndex, nPos.X, nPos.Y))
  58.                 Else
  59.                     Call SendData(SendTarget.ToPCAreaButIndex, UserIndex, PrepareMessageCharacterMoves(UserList(UserIndex).Char.CharIndex, nPos.X, nPos.Y))
  60.                 End If
  61.                
  62.                 If ElRey(1) <> 0 And ElRey(1) <> UserIndex Then If UserList(UserIndex).flags.EnEvento And UserList(UserIndex).Pos.Map = UserList(ElRey(1)).Pos.Map Then Call SendData(SendTarget.ToMapButIndex, UserIndex, PrepareMessageRadarMove(.Char.CharIndex, nPos.X, nPos.Y)) 'Call WriteRadarMove(ElRey(1), UserList(UserIndex).flags.IndexEvento, UserList(UserIndex).flags.EventoTeam, nPos.X, nPos.Y)
  63.                If ElRey(2) <> 0 And ElRey(2) <> UserIndex Then If UserList(UserIndex).flags.EnEvento And UserList(UserIndex).Pos.Map = UserList(ElRey(2)).Pos.Map Then Call SendData(SendTarget.ToMapButIndex, UserIndex, PrepareMessageRadarMove(.Char.CharIndex, nPos.X, nPos.Y)) 'Call WriteRadarMove(ElRey(2), UserList(UserIndex).flags.IndexEvento, UserList(UserIndex).flags.EventoTeam, nPos.X, nPos.Y)
  64.                
  65.                 If .PartyIndex > 0 Or .GuildIndex > 0 And .flags.EnEvento = False Then
  66.                     Call SendData(SendTarget.ToClanAndPartyMap, UserIndex, PrepareMessageRadarMove(.Char.CharIndex, nPos.X, nPos.Y))
  67.                 End If
  68.             End If
  69.            
  70.             CasperIndex = MapData(.Pos.Map, nPos.X, nPos.Y).NpcIndex
  71.             'Si hay un usuario, y paso la validacion, entonces es un casper
  72.            If CasperIndex > 0 Then
  73.                 CasperHeading = InvertHeading(nHeading)
  74.                 CasPerPos = NpcList(CasperIndex).Pos
  75.                 Call HeadtoPos(CasperHeading, CasPerPos)
  76.    
  77.                 With NpcList(CasperIndex)
  78.                     MapData(.Pos.Map, .Pos.X, .Pos.Y).NpcIndex = 0
  79.                     .Pos = CasPerPos
  80.                     .Char.Heading = CasperHeading
  81.                     MapData(.Pos.Map, CasPerPos.X, CasPerPos.Y).NpcIndex = CasperIndex
  82.    
  83.                     Call SendData(SendTarget.ToNPCArea, CasperIndex, PrepareMessageCharacterMoves(.Char.CharIndex, CasPerPos.X, CasPerPos.Y))
  84.                 End With
  85.             End If
  86.  
  87.             OldIntemperie = Intemperie(UserIndex)
  88.             oldUserIndex = MapData(.Pos.Map, .Pos.X, .Pos.Y).UserIndex
  89.            
  90.             ' Si no hay intercambio de pos con nadie
  91.            If oldUserIndex = UserIndex Then
  92.                 MapData(.Pos.Map, .Pos.X, .Pos.Y).UserIndex = 0
  93.             End If
  94.            
  95.             .Pos = nPos
  96.             .Char.Heading = nHeading
  97.             MapData(.Pos.Map, .Pos.X, .Pos.Y).UserIndex = UserIndex
  98.    
  99.             If Intemperie(UserIndex) <> OldIntemperie Then
  100.                 Call WriteUpdateSta(UserIndex)
  101.             End If
  102.            
  103.             'Actualizamos las áreas de ser necesario
  104.            Call ModAreas.CheckUpdateNeededUser(UserIndex, nHeading)
  105.    
  106.         Else
  107.             If nHeading = eHeading.North Then
  108.                 RestarY = 1
  109.             End If
  110.             If nHeading = eHeading.South Then
  111.                 RestarY = -1
  112.             End If
  113.             If nHeading = eHeading.East Then
  114.                 RestarX = -1
  115.             End If
  116.             If nHeading = eHeading.West Then
  117.                 RestarX = 1
  118.             End If
  119.            
  120.             UserList(UserIndex).Char.Heading = nHeading
  121.            
  122.             Call ChangeUserChar(UserIndex, UserList(UserIndex).Char.Body, UserList(UserIndex).Char.Head, UserList(UserIndex).Char.Heading, UserList(UserIndex).Char.WeaponAnim, UserList(UserIndex).Char.ShieldAnim, UserList(UserIndex).Char.CascoAnim)
  123.            
  124.             If MapData(.Pos.Map, nPos.X, nPos.Y).Blocked = 1 Then Call Bloquear(False, UserIndex, nPos.X, nPos.Y, MapData(.Pos.Map, nPos.X, nPos.Y).Blocked)
  125.            
  126.             If HayAgua(.Pos.Map, nPos.X, nPos.Y) Then
  127.                 Call WritePosUpdate(UserIndex)
  128.             Else
  129.                 Call WriteRetroceder(UserIndex, RestarX, RestarY)
  130.             End If
  131.    
  132.             If MapData(.Pos.Map, nPos.X, nPos.Y).UserIndex <> 0 Then
  133.                 Call WriteActPos(UserIndex, UserList(MapData(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y).UserIndex).Char.CharIndex)
  134.             ElseIf MapData(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y).NpcIndex <> 0 Then
  135.                 Call WriteActPos(UserIndex, NpcList(MapData(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y).NpcIndex).Char.CharIndex)
  136.             End If
  137.    
  138.         End If
  139.        
  140.         If .Counters.Trabajando Then .Counters.Trabajando = .Counters.Trabajando - 1
  141.         If .Counters.Ocultando Then .Counters.Ocultando = .Counters.Ocultando - 1
  142.        
  143.         Call CheckCampaignLocation(UserIndex) '[/About] by xpprocess09
  144.        
  145.     End With
  146.    
  147.     Exit Sub
  148. err:
  149.  
  150.    On Error GoTo 0
  151.    Exit Sub
  152.  
  153. MoveUserChar_Error:
  154.  
  155.     Call LogError("Error " & err.Number & " Descripción: & (" & err.Description & ") del procedimiento MoveUserChar del Módulo UsUaRiOs" & " En la linea: " & Erl)
  156. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement