📄 modmap.vb.svn-base
字号:
Imports System.IO
Imports System.Text.Encoding
Public Module modMap
#Region "Map Variables"
Public Class Map
Public MapName As String 'Maps ingame name
Public MapFilename As String 'Maps filename
Public MapSize As Size 'Maps size
Public MapFlags(,) As Boolean 'Can/Cant walk data
Public Drops As New Hashtable 'Key = X/Y/Layer, Value = ItemID
Public ObjectList As New Hashtable 'Key = X/Y/Layer, Value = ObjectId
Public LightMode As LightModes 'Light mode
Public NoRecall As Boolean 'Recall Allowed or not
Public NoRandomMove As Boolean 'Random Teleport Allowed or not
Public NoReconnect As String 'Reconnect Allowed or not, map filename
Public NoPositionMove As Boolean 'Teleport rings can be used or not
Public NeedFlag As Integer 'Need flag to get on map or not
Public MapQuestFile As String 'Maps quest filename
Public Mining As Boolean 'Can you mine or not
Public MapMode As MapModes 'Map mode, normal/safe/fight etc
Public NeedHole As String 'Need a hole to get to the map or not
Public Doors As New Hashtable 'Key = X/Y, Value = Target X/Y/Map
End Class
Public Enum MapModes
Normal = 0
Safezone = 1
Fightzone = 2
End Enum
Public Enum LightModes
Normal = 0
Dawn = 1
Day = 2
Dusk = 3
Night = 4
End Enum
Public Structure Size
Dim Height As Short
Dim Width As Short
End Structure
#End Region
#Region "FillMapList"
Public Sub FillMapList()
Dim ReadMap As New Map
Try
Dim DR As System.Data.SqlClient.SqlDataReader
Dim StrSql As String = "Select * From TBL_Maps"
Dim SqlComm As New System.Data.SqlClient.SqlCommand(StrSql, SqlConnDB)
DR = SqlComm.ExecuteReader
Do While DR.Read()
ReadMap = New Map
ReadMap.MapFilename = Trim(DR.Item("Filename"))
If File.Exists(Config.MapFolder & ReadMap.MapFilename & ".Map") Then
ReadMap.MapName = Trim(DR.Item("MapName"))
ReadMap.MapSize = GetWH(Config.MapFolder & ReadMap.MapFilename & ".Map")
ReadMap.MapFlags = GetMapData(Config.MapFolder & ReadMap.MapFilename & ".Map", ReadMap.MapSize)
ReadMap.LightMode = DR.Item("LightMode")
ReadMap.NoRandomMove = Trim(DR.Item("NoRandomMove"))
ReadMap.NoRecall = Trim(DR.Item("NoRecall"))
If Not DR.Item("NoReconnect") Is DBNull.Value Then ReadMap.NoReconnect = DR.Item("NoReconnect") Else ReadMap.NoReconnect = ""
ReadMap.NoPositionMove = Trim(DR.Item("NoPositionMove"))
ReadMap.NeedFlag = DR.Item("NeedFlag")
If Not DR.Item("MapQuest") Is DBNull.Value Then ReadMap.MapQuestFile = DR.Item("MapQuest") Else ReadMap.MapQuestFile = ""
ReadMap.Mining = Trim(DR.Item("Mining"))
ReadMap.MapMode = DR.Item("MapMode")
If Not DR.Item("NeedHole") Is DBNull.Value Then ReadMap.NeedHole = DR.Item("NeedHole") Else ReadMap.NeedHole = ""
If Maps.Contains(ReadMap.MapFilename) = False Then
Maps.Add(ReadMap.MapFilename, ReadMap)
End If
Else
AddLog("Maps", ReadMap.MapFilename & " file not found.")
End If
Loop
DR.Close()
SqlComm.Dispose()
DR = Nothing
SqlComm = Nothing
Catch ex As Exception
AddLog("Maps", "Error loading maps.")
End Try
End Sub
#End Region
#Region "LoadMap"
#Region "GetWH"
Public Function GetWH(ByVal Map As String) As Size
Dim Buffer(3) As Byte
Dim FS As New FileStream(Map, FileMode.Open, FileAccess.Read)
FS.Read(Buffer, 0, 4)
Dim MapHeader As Size
MapHeader.Width = MakeInt16(Buffer(0), Buffer(1))
MapHeader.Height = MakeInt16(Buffer(2), Buffer(3))
FS.Close()
AddLog("Maps", "Loading Map: " & System.IO.Path.GetFileName(Map))
Return MapHeader
End Function
#End Region
#Region "GetMapData"
Public Function GetMapData(ByVal File As String, ByVal Mapsize As Size) As Boolean(,)
Dim Output(Mapsize.Width, Mapsize.Height) As Boolean
Dim X, Y As Integer
Dim Buffer(11) As Byte
Dim FileStream As New IO.FileStream(File, IO.FileMode.Open)
Dim Location As Int64 = 52
Dim Data, Number As Long
FileStream.Seek(Location, SeekOrigin.Begin)
For X = 0 To Mapsize.Width - 1
For Y = 0 To Mapsize.Height - 1
FileStream.Read(Buffer, 0, 12)
Data = Make1Int16(Buffer(0), Buffer(1))
If Data >= 32768 Then
Output(X, Y) = False
Else
Output(X, Y) = True
End If
Next Y
Next X
FileStream.Close()
Return Output
End Function
#End Region
#Region "GetDoors"
Public Sub GetDoors()
Dim ProcessMap As Map
Try
Dim DR As System.Data.SqlClient.SqlDataReader
Dim StrSql As String = "Select * From TBL_MapDoors"
Dim SqlComm As New System.Data.SqlClient.SqlCommand(StrSql, SqlConnDB)
DR = SqlComm.ExecuteReader
Do While DR.Read()
If Maps.Contains(Trim(DR.Item("MapName"))) Then
ProcessMap = Maps.Item(Trim(DR.Item("MapName")))
If ProcessMap.Doors.Contains(DR.Item("X") & "/" & DR.Item("Y")) = False Then
ProcessMap.Doors.Add(DR.Item("X") & "/" & DR.Item("Y"), Trim(DR.Item("TargetMap")) & "/" & DR.Item("TargetX") & "/" & DR.Item("TargetY"))
Maps.Remove(Trim(DR.Item("Mapname")))
Maps.Add(Trim(DR.Item("Mapname")), ProcessMap)
End If
End If
Loop
DR.Close()
SqlComm.Dispose()
DR = Nothing
SqlComm = Nothing
Catch ex As Exception
AddLog("Maps", "Loading doors error.")
End Try
End Sub
#End Region
#End Region
End Module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -