⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modmap.vb.svn-base

📁 MirUnleashed vb.net Module modMainServer Public WithEvents Socket As New WinsockServer Pub
💻 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 + -