Advertisement
Guest User

Untitled

a guest
May 16th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Public Sub CargarMapa(ByVal Map As Long, ByRef MAPFl As String)
  2. '***************************************************
  3. 'Author: Unknown
  4. 'Last Modification: 10/08/2010
  5. '10/08/2010 - Pato: Implemento el clsByteBuffer y el clsIniManager para la carga de mapa
  6. '***************************************************
  7.  
  8.    On Error GoTo errh
  9.  
  10.    Dim hFile As Integer
  11.    Dim X As Long
  12.    Dim Y As Long
  13.    Dim ByFlags As Byte
  14.    Dim npcfile As String
  15.    Dim Leer As clsIniManager
  16.    Dim MapReader As clsByteBuffer
  17.    Dim InfReader As clsByteBuffer
  18.    Dim Buff() As Byte
  19.    Dim LoopC As Integer
  20.    Dim datofantasma As Integer
  21.  
  22.    Set MapReader = New clsByteBuffer
  23.    Set InfReader = New clsByteBuffer
  24.    Set Leer = New clsIniManager
  25.  
  26.    npcfile = DatPath & "NPCs.dat"
  27.  
  28.    hFile = FreeFile
  29.  
  30.    Open MAPFl & ".map" For Binary As #hFile
  31.    Seek hFile, 1
  32.  
  33.    ReDim Buff(LOF(hFile) - 1) As Byte
  34.  
  35.    Get #hFile, , Buff
  36.    Close hFile
  37.  
  38.    Call MapReader.initializeReader(Buff)
  39.  
  40.    'inf
  41.     Open MAPFl & ".inf" For Binary As #hFile
  42.     Seek hFile, 1
  43.  
  44.     If LOF(hFile) = 0 Then
  45.  
  46.         Close hFile
  47.  
  48.         Exit Sub
  49.  
  50.     End If
  51.  
  52.     ReDim Buff(LOF(hFile) - 1) As Byte
  53.  
  54.     Get #hFile, , Buff
  55.     Close hFile
  56.  
  57.     Call InfReader.initializeReader(Buff)
  58.  
  59.     'map Header
  60.    MapInfo(Map).MapVersion = MapReader.getInteger
  61.  
  62.    MiCabecera.desc = MapReader.getString(Len(MiCabecera.desc))
  63.    MiCabecera.crc = MapReader.getLong
  64.    MiCabecera.MagicWord = MapReader.getLong
  65.  
  66.    Call MapReader.getDouble
  67.  
  68.    'inf Header
  69.     Call InfReader.getDouble
  70.     Call InfReader.getInteger
  71.  
  72.     For Y = YMinMapSize To YMaxMapSize
  73.         For X = XMinMapSize To XMaxMapSize
  74.  
  75.             With MapData(Map, X, Y)
  76.                 '.map file
  77.                .trigger = MapReader.getInteger
  78.  
  79.                For LoopC = 4 To 1 Step -1
  80.                    MapReader.getInteger
  81.                    .Graphic(LoopC) = MapReader.getInteger
  82.                Next LoopC
  83.  
  84.                MapReader.getInteger
  85.                .Blocked = MapReader.getByte
  86.                MapReader.getInteger
  87.  
  88.                '.inf file
  89.                 If .TileExit.Map <> 0 Then
  90.                     InfReader.getInteger
  91.                 Else
  92.                     .TileExit.Map = InfReader.getInteger
  93.                 End If
  94.  
  95.                 If .TileExit.X <> 0 Then
  96.                     InfReader.getInteger
  97.                 Else
  98.                     .TileExit.X = InfReader.getInteger
  99.                 End If
  100.  
  101.                 If .TileExit.Y <> 0 Then
  102.                     InfReader.getInteger
  103.                 Else
  104.                     .TileExit.Y = InfReader.getInteger
  105.                 End If
  106.  
  107.                 If .TileExit.Map > 0 Then
  108.                     If Y < MinYBorder Then '9
  109.                        MapData(Map, X, MinYBorder).TileExit.Map = .TileExit.Map
  110.                        MapData(Map, X, MinYBorder).TileExit.X = .TileExit.X
  111.                        MapData(Map, X, MinYBorder).TileExit.Y = IIf(.TileExit.Y > MaxYBorder, MaxYBorder - 1, .TileExit.Y)
  112.  
  113.                        .TileExit.Map = 0
  114.                        .TileExit.X = 0
  115.                        .TileExit.Y = 0
  116.                    End If
  117.  
  118.                    If Y > MaxYBorder Then '92
  119.                         MapData(Map, X, MaxYBorder).TileExit.Map = .TileExit.Map
  120.                         MapData(Map, X, MaxYBorder).TileExit.X = .TileExit.X
  121.                         MapData(Map, X, MaxYBorder).TileExit.Y = IIf(.TileExit.Y < MinYBorder, MinYBorder + 1, .TileExit.Y)
  122.  
  123.                         .TileExit.Map = 0
  124.                         .TileExit.X = 0
  125.                         .TileExit.Y = 0
  126.                     End If
  127.  
  128.                     If X < MinXBorder Then '12
  129.                        MapData(Map, MinXBorder, Y).TileExit.Map = .TileExit.Map
  130.                        MapData(Map, MinXBorder, Y).TileExit.X = IIf(.TileExit.X > MaxXBorder, MaxXBorder - 1, .TileExit.X)
  131.                        MapData(Map, MinXBorder, Y).TileExit.Y = .TileExit.Y
  132.  
  133.                        .TileExit.Map = 0
  134.                        .TileExit.X = 0
  135.                        .TileExit.Y = 0
  136.                    End If
  137.  
  138.                    If X > MaxXBorder Then '89
  139.                         MapData(Map, MaxXBorder, Y).TileExit.Map = .TileExit.Map
  140.                         MapData(Map, MaxXBorder, Y).TileExit.X = IIf(.TileExit.X < MinXBorder, MinXBorder + 1, .TileExit.X)
  141.                         MapData(Map, MaxXBorder, Y).TileExit.Y = .TileExit.Y
  142.  
  143.                         .TileExit.Map = 0
  144.                         .TileExit.X = 0
  145.                         .TileExit.Y = 0
  146.                     End If
  147.                 End If
  148.  
  149.                 'MinXBorder = XMinMapSize + (WindowTileWidth \ 2) '9                   '12
  150.                'MaxXBorder = XMaxMapSize - (WindowTileWidth \ 2) '92                  '89
  151.                 'MinYBorder = YMinMapSize + (WindowTileHeight \ 2) '7                  '9
  152.                'MaxYBorder = YMaxMapSize - (WindowTileHeight \ 2) '94                 '92
  153.  
  154.                 .NpcIndex = InfReader.getInteger
  155.  
  156.                 If .NpcIndex > 0 Then
  157.  
  158.                     'Si el npc debe hacer respawn en la pos
  159.                    'original la guardamos
  160.                     If val(GetVar(npcfile, "NPC" & .NpcIndex, "PosOrig")) = 1 Then
  161.                         .NpcIndex = OpenNPC(.NpcIndex)
  162.                         Npclist(.NpcIndex).Orig.Map = Map
  163.                         Npclist(.NpcIndex).Orig.X = X
  164.                         Npclist(.NpcIndex).Orig.Y = Y
  165.                     Else
  166.                         .NpcIndex = OpenNPC(.NpcIndex)
  167.  
  168.                     End If
  169.  
  170.                     If .NpcIndex = 10001 Then Exit Sub
  171.  
  172.                     Npclist(.NpcIndex).pos.Map = Map
  173.                     Npclist(.NpcIndex).pos.X = X
  174.                     Npclist(.NpcIndex).pos.Y = Y
  175.  
  176.                     Call MakeNPCChar(True, 0, .NpcIndex, Map, X, Y)
  177.  
  178.                 End If
  179.  
  180.                 .ObjInfo.ObjIndex = InfReader.getInteger
  181.                 .ObjInfo.Amount = InfReader.getInteger
  182.  
  183.                 InfReader.getInteger
  184.                 InfReader.getInteger
  185.  
  186.             End With
  187.  
  188.         Next X
  189.     Next Y
  190.  
  191.     Call Leer.Initialize(MAPFl & ".dat")
  192.  
  193.     With MapInfo(Map)
  194.         .Name = Leer.GetValue("Mapa" & Map, "Name")
  195.         .Music = Leer.GetValue("Mapa" & Map, "MusicNum")
  196.         .Dueño = val(Leer.GetValue("Mapa" & Map, "Dueño"))
  197.         .StartPos.Map = val(ReadField(1, Leer.GetValue("Mapa" & Map, "StartPos"), Asc("-")))
  198.         .StartPos.X = val(ReadField(2, Leer.GetValue("Mapa" & Map, "StartPos"), Asc("-")))
  199.         .StartPos.Y = val(ReadField(3, Leer.GetValue("Mapa" & Map, "StartPos"), Asc("-")))
  200.  
  201.         .OnDeathGoTo.Map = val(ReadField(1, Leer.GetValue("Mapa" & Map, "OnDeathGoTo"), Asc("-")))
  202.         .OnDeathGoTo.X = val(ReadField(2, Leer.GetValue("Mapa" & Map, "OnDeathGoTo"), Asc("-")))
  203.         .OnDeathGoTo.Y = val(ReadField(3, Leer.GetValue("Mapa" & Map, "OnDeathGoTo"), Asc("-")))
  204.  
  205.         .MagiaSinEfecto = val(Leer.GetValue("Mapa" & Map, "MagiaSinEfecto"))
  206.         .InviSinEfecto = val(Leer.GetValue("Mapa" & Map, "InviSinEfecto"))
  207.         .ResuSinEfecto = val(Leer.GetValue("Mapa" & Map, "ResuSinEfecto"))
  208.         .OcultarSinEfecto = val(Leer.GetValue("Mapa" & Map, "OcultarSinEfecto"))
  209.         .InvocarSinEfecto = val(Leer.GetValue("Mapa" & Map, "InvocarSinEfecto"))
  210.  
  211.         .NoEncriptarMP = val(Leer.GetValue("Mapa" & Map, "NoEncriptarMP"))
  212.  
  213.         .RoboNpcsPermitido = val(Leer.GetValue("Mapa" & Map, "RoboNpcsPermitido"))
  214.  
  215.         If val(Leer.GetValue("Mapa" & Map, "Pk")) = 0 Then
  216.             .Pk = True
  217.         Else
  218.             .Pk = False
  219.  
  220.         End If
  221.  
  222.         .Terreno = TerrainStringToByte(Leer.GetValue("Mapa" & Map, "Terreno"))
  223.         .Zona = Leer.GetValue("Mapa" & Map, "Zona")
  224.         .Restringir = RestrictStringToByte(Leer.GetValue("Mapa" & Map, "Restringir"))
  225.         .BackUp = val(Leer.GetValue("Mapa" & Map, "BACKUP"))
  226.  
  227.     End With
  228.  
  229.     Set MapReader = Nothing
  230.     Set InfReader = Nothing
  231.     Set Leer = Nothing
  232.  
  233.     Erase Buff
  234.     Exit Sub
  235.  
  236. errh:
  237.     Call LogError("Error cargando mapa: " & Map & " - Pos: " & X & "," & Y & "." & Err.description)
  238.  
  239.     Set MapReader = Nothing
  240.     Set InfReader = Nothing
  241.     Set Leer = Nothing
  242.  
  243. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement