Private Maps() As Map
Private Structure Map
Public MapCode As String
Public MapName As String
Public Start As Point
Public Scale As PointF
End Structure
Private Sub MapsInit()
MapsAdd("NeutralA", "ГШ Акретов", -14969, 15581, 294.35, 294.6133)
MapsAdd("NeutralAS1", "Застава 213", -9868, 10164, 205.4, 205.4875)
MapsAdd("NeutralAS2", "Застава 117", -12180, 11986, 252.5625, 252.6375)
MapsAdd("NeutralB", "ГШ Беллато", -10790, 11633, 226.725, 226.4125)
MapsAdd("NeutralBS1", "Солус", -13151, 12204, 257.2875, 257.925)
MapsAdd("NeutralBS2", "Анакаде", -9977, 9177, 189.4625, 189.425)
MapsAdd("NeutralC", "ГШ Кор", -12112, 13038, 242.9625, 242.7625)
MapsAdd("NeutralCS1", "Харам", -16872, 12425, 309.0125, 308.625)
MapsAdd("NeutralCS2", "Нумерус", -11642, 18115, 248.75, 248.1111)
MapsAdd("Resources", "Краговы Шахты", -15610, 14739, 255.7125, 255.75)
MapsAdd("Sette", "Сеттова Пустыня", -6312, 6437, 131.075, 131.5125)
MapsAdd("Platform01", "Этер", -12520, 13315, 263.575, 263.3875)
MapsAdd("Medicallab", "Лаборатория Картела (1)", -9813, 4204, 111.6875, 65.3875)
MapsAdd("Medicallab2", "Лаборатория Картела (2)", -9813, 4204, 111.6875, 65.3875)
MapsAdd("Elan", "Элан", -8106, 7096, 161.6875, 161.675)
MapsAdd("Cauldron01", "Вулкан Котёл", -5604, 6554, 118.5375, 118.375)
MapsAdd("Exile_Land", "Земли изгнанников", -10149, 12150, 199.9875, 200.0127)
MapsAdd("Mountain_Beast", "Горы Чудовищ", -10150, 10149, 200, 199.9875)
MapsAdd("Cora", "Земля Эльфов")
LastMapIndex = Maps.Length - 1
End Sub
Private Function WorldToMap(ByVal MapCode As String, ByVal WorldPoint As Point) As Point
Dim X As Single = 1, Y As Single = 1
For Each Map In Maps
If Map.MapCode = MapCode Then
X = Int(4 * (WorldPoint.X - Map.Start.X) / Map.Scale.X)
Y = Int(4 * (Map.Start.Y - WorldPoint.Y) / Map.Scale.Y)
End If
Next
Return New Point(X, Y)
End Function
Private Sub MapsAdd(ByVal MapCode As String, ByVal MapName As String, Optional ByVal X As Integer = 0, Optional ByVal Y As Integer = 0, Optional ByVal SX As Single = 1, Optional ByVal SY As Single = 1)
Dim I As Integer
For I = 0 To Maps.Length - 1
If Maps(I).MapCode = MapCode Then
Exit For
End If
Next I
If I = Maps.Length Then
ReDim Preserve Maps(I)
With Maps(I)
.MapCode = MapCode
.MapName = MapName
.Start.X = X
.Start.Y = Y
.Scale.X = SX
.Scale.Y = SY
End With
End If
End Sub
X = Int(4 * (WorldPoint.X - Map.Start.X) / Map.Scale.X)
Y = Int(4 * (Map.Start.Y - WorldPoint.Y) / Map.Scale.Y)
Немного поясню этот кусок кода, в частности почему там стоит множитель 4.
Просто разрешение миникарт в ресурсах 400х400 пикселей (мне нужно было получить координаты на изображении миникарты), если нужно чтобы координаты выводились в пределах 0 - 100, нужно просто убрать множитель 4.