Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Sub CargarMapa(ByVal Map As Long, ByRef MAPFl As String)
- '***************************************************
- 'Author: Unknown
- 'Last Modification: 10/08/2010
- '10/08/2010 - Pato: Implemento el clsByteBuffer y el clsIniManager para la carga de mapa
- '***************************************************
- On Error GoTo errh
- Dim hFile As Integer
- Dim X As Long
- Dim Y As Long
- Dim ByFlags As Byte
- Dim npcfile As String
- Dim Leer As clsIniManager
- Dim MapReader As clsByteBuffer
- Dim InfReader As clsByteBuffer
- Dim Buff() As Byte
- Dim LoopC As Long
- Set MapReader = New clsByteBuffer
- Set InfReader = New clsByteBuffer
- Set Leer = New clsIniManager
- npcfile = DatPath & "NPCs.dat"
- hFile = FreeFile
- Open MAPFl & ".map" For Binary As #hFile
- Seek hFile, 1
- If LOF(hFile) = 0 Then
- Close hFile
- Exit Sub
- End If
- ReDim Buff(LOF(hFile) - 1) As Byte
- Get #hFile, , Buff
- Close hFile
- Call MapReader.initializeReader(Buff)
- 'inf
- Open MAPFl & ".inf" For Binary As #hFile
- Seek hFile, 1
- If LOF(hFile) = 0 Then
- Close hFile
- Exit Sub
- End If
- ReDim Buff(LOF(hFile) - 1) As Byte
- Get #hFile, , Buff
- Close hFile
- Call InfReader.initializeReader(Buff)
- 'map Header
- MapInfo(Map).MapVersion = MapReader.getInteger
- MiCabecera.desc = MapReader.getString(Len(MiCabecera.desc))
- MiCabecera.crc = MapReader.getLong
- MiCabecera.MagicWord = MapReader.getLong
- Call MapReader.getDouble
- 'inf Header
- Call InfReader.getDouble
- Call InfReader.getInteger
- For Y = YMinMapSize To YMaxMapSize
- For X = XMinMapSize To XMaxMapSize
- With MapData(Map, X, Y)
- '.map file
- .trigger = MapReader.getInteger
- For LoopC = 4 To 1 Step -1
- MapReader.getInteger
- .Graphic(LoopC) = MapReader.getInteger
- Next LoopC
- MapReader.getInteger
- .Blocked = MapReader.getByte
- MapReader.getInteger
- '.inf file
- If .TileExit.Map <> 0 Then
- InfReader.getInteger
- Else
- .TileExit.Map = InfReader.getInteger
- End If
- If .TileExit.X <> 0 Then
- InfReader.getInteger
- Else
- .TileExit.X = InfReader.getInteger
- End If
- If .TileExit.Y <> 0 Then
- InfReader.getInteger
- Else
- .TileExit.Y = InfReader.getInteger
- End If
- If .TileExit.Map > 0 Then
- If Y > MaxYBorder Then '92
- MapData(Map, X, MaxYBorder - 1).TileExit.Map = .TileExit.Map
- MapData(Map, X, MaxYBorder - 1).TileExit.X = .TileExit.X
- MapData(Map, X, MaxYBorder - 1).TileExit.Y = IIf(.TileExit.Y < MinYBorder, MinYBorder + 2, .TileExit.Y)
- .TileExit.Map = 0
- .TileExit.X = 0
- .TileExit.Y = 0
- End If
- If Y < MinYBorder Then '9
- MapData(Map, X, MinYBorder + 1).TileExit.Map = .TileExit.Map
- MapData(Map, X, MinYBorder + 1).TileExit.X = .TileExit.X
- MapData(Map, X, MinYBorder + 1).TileExit.Y = IIf(.TileExit.Y > MaxYBorder, MaxYBorder - 2, .TileExit.Y)
- .TileExit.Map = 0
- .TileExit.X = 0
- .TileExit.Y = 0
- End If
- If X < MinXBorder Then '12
- MapData(Map, MinXBorder, Y).TileExit.Map = .TileExit.Map
- MapData(Map, MinXBorder, Y).TileExit.X = IIf(.TileExit.X > MaxXBorder, MaxXBorder - 1, .TileExit.X)
- MapData(Map, MinXBorder, Y).TileExit.Y = .TileExit.Y
- .TileExit.Map = 0
- .TileExit.X = 0
- .TileExit.Y = 0
- End If
- If X > MaxXBorder Then '89
- MapData(Map, MaxXBorder, Y).TileExit.Map = .TileExit.Map
- MapData(Map, MaxXBorder, Y).TileExit.X = IIf(.TileExit.X < MinXBorder, MinXBorder + 1, .TileExit.X)
- MapData(Map, MaxXBorder, Y).TileExit.Y = .TileExit.Y
- .TileExit.Map = 0
- .TileExit.X = 0
- .TileExit.Y = 0
- End If
- End If
- .NpcIndex = InfReader.getInteger
- If .NpcIndex > 0 Then
- 'Si el npc debe hacer respawn en la pos
- 'original la guardamos
- If val(GetVar(npcfile, "NPC" & .NpcIndex, "PosOrig")) = 1 Then
- .NpcIndex = OpenNPC(.NpcIndex)
- Npclist(.NpcIndex).Orig.Map = Map
- Npclist(.NpcIndex).Orig.X = X
- Npclist(.NpcIndex).Orig.Y = Y
- Else
- .NpcIndex = OpenNPC(.NpcIndex)
- End If
- If .NpcIndex = 10001 Then Exit Sub
- Npclist(.NpcIndex).pos.Map = Map
- Npclist(.NpcIndex).pos.X = X
- Npclist(.NpcIndex).pos.Y = Y
- Call MakeNPCChar(True, 0, .NpcIndex, Map, X, Y)
- End If
- .ObjInfo.ObjIndex = InfReader.getInteger
- .ObjInfo.Amount = InfReader.getInteger
- InfReader.getInteger
- InfReader.getInteger
- End With
- Next X
- Next Y
- Call Leer.Initialize(MAPFl & ".dat")
- With MapInfo(Map)
- .Name = Leer.GetValue("Mapa" & Map, "Name")
- .Music = Leer.GetValue("Mapa" & Map, "MusicNum")
- .Dueño = val(Leer.GetValue("Mapa" & Map, "Dueño"))
- .StartPos.Map = val(ReadField(1, Leer.GetValue("Mapa" & Map, "StartPos"), Asc("-")))
- .StartPos.X = val(ReadField(2, Leer.GetValue("Mapa" & Map, "StartPos"), Asc("-")))
- .StartPos.Y = val(ReadField(3, Leer.GetValue("Mapa" & Map, "StartPos"), Asc("-")))
- .OnDeathGoTo.Map = val(ReadField(1, Leer.GetValue("Mapa" & Map, "OnDeathGoTo"), Asc("-")))
- .OnDeathGoTo.X = val(ReadField(2, Leer.GetValue("Mapa" & Map, "OnDeathGoTo"), Asc("-")))
- .OnDeathGoTo.Y = val(ReadField(3, Leer.GetValue("Mapa" & Map, "OnDeathGoTo"), Asc("-")))
- .MagiaSinEfecto = val(Leer.GetValue("Mapa" & Map, "MagiaSinEfecto"))
- .InviSinEfecto = val(Leer.GetValue("Mapa" & Map, "InviSinEfecto"))
- .ResuSinEfecto = val(Leer.GetValue("Mapa" & Map, "ResuSinEfecto"))
- .OcultarSinEfecto = val(Leer.GetValue("Mapa" & Map, "OcultarSinEfecto"))
- .InvocarSinEfecto = val(Leer.GetValue("Mapa" & Map, "InvocarSinEfecto"))
- .NoEncriptarMP = val(Leer.GetValue("Mapa" & Map, "NoEncriptarMP"))
- .RoboNpcsPermitido = val(Leer.GetValue("Mapa" & Map, "RoboNpcsPermitido"))
- If val(Leer.GetValue("Mapa" & Map, "Pk")) = 0 Then
- .Pk = True
- Else
- .Pk = False
- End If
- .Terreno = TerrainStringToByte(Leer.GetValue("Mapa" & Map, "Terreno"))
- .Zona = Leer.GetValue("Mapa" & Map, "Zona")
- .Restringir = RestrictStringToByte(Leer.GetValue("Mapa" & Map, "Restringir"))
- .BackUp = val(Leer.GetValue("Mapa" & Map, "BACKUP"))
- End With
- Set MapReader = Nothing
- Set InfReader = Nothing
- Set Leer = Nothing
- Erase Buff
- Exit Sub
- errh:
- Call LogError("Error cargando mapa: " & Map & " - Pos: " & X & "," & Y & "." & Err.description)
- Set MapReader = Nothing
- Set InfReader = Nothing
- Set Leer = Nothing
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement