Hello,
Pour dessiner un MapControl, il y bouh2 qui a partagé de superbes sources:
https://cadernis.com/d/585-dofus-map-control-un-contr%C3%B4le-pour-afficher-une-map/1
Pour la ligne de vue tu as une classe DofusLine dans les sources du jeu mais j'ai complétement oublié son nom exact et son emplacement.
La seule classe que je pourrais te conseiller est celle de Rebirth mais bon le code est hardcore.
Attention les yeux
Cliquez pour révéler
Cliquez pour masquer
Imports System.Runtime.CompilerServices
Imports Microsoft.VisualBasic.CompilerServices
Namespace Dofus.Pathfinding
Public Class Dofus1Line
' Methods
Public Shared Function GetLine(ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As ArrayList
Dim num As Integer = 0
Dim pointd As Point3D = Nothing
Dim point As Point = Nothing
Dim num2 As Integer = 0
Dim num3 As Integer = 0
Dim d As Double = 0
Dim a As Double = 0
Dim num6 As Double = 0
Dim num7 As Double = 0
Dim num8 As Double = 0
Dim num9 As Double = 0
Dim num10 As Double = 0
Dim num11 As Double = 0
Dim num12 As UInt32 = 0
Dim num13 As UInt32 = 0
Dim list As New ArrayList
Dim pointd2 As New Point3D(CDbl(x1), CDbl(y1), 0)
Dim pointd3 As New Point3D(CDbl(x2), CDbl(y2), 0)
pointd = New Point3D((pointd2.X + 0.5), (pointd2.Y + 0.5), pointd2.Z)
Dim pointd4 As New Point3D((pointd3.X + 0.5), (pointd3.Y + 0.5), pointd3.Z)
Dim num14 As Double = 0
Dim num15 As Double = 0
Dim num16 As Double = 0
Dim list2 As New ArrayList
Dim list3 As New ArrayList
Dim num17 As UInt32 = 0
If (Math.Abs(CDbl((pointd.X - pointd4.X))) = Math.Abs(CDbl((pointd.Y - pointd4.Y)))) Then
num16 = Math.Abs(CDbl((pointd.X - pointd4.X)))
num14 = If((pointd4.X > pointd.X), CDbl(1), CDbl(-1))
num15 = If((pointd4.Y > pointd.Y), CDbl(1), CDbl(-1))
Dim num1 As Double = If((num16 = 0), 0, ((pointd3.Z - pointd2.Z) / num16))
num17 = 1
ElseIf (Math.Abs(CDbl((pointd.X - pointd4.X))) > Math.Abs(CDbl((pointd.Y - pointd4.Y)))) Then
num16 = Math.Abs(CDbl((pointd.X - pointd4.X)))
num14 = If((pointd4.X > pointd.X), CDbl(1), CDbl(-1))
num15 = If((pointd4.Y > pointd.Y), If((Math.Abs(CDbl((pointd.Y - pointd4.Y))) = 0), 0, (Math.Abs(CDbl((pointd.Y - pointd4.Y))) / num16)), (-Math.Abs(CDbl((pointd.Y - pointd4.Y))) / num16))
num15 = (num15 * 100)
num15 = (Math.Ceiling(num15) / 100)
Dim num18 As Double = If((num16 = 0), 0, ((pointd3.Z - pointd2.Z) / num16))
num17 = 2
Else
num16 = Math.Abs(CDbl((pointd.Y - pointd4.Y)))
num14 = If((pointd4.X > pointd.X), If((Math.Abs(CDbl((pointd.X - pointd4.X))) = 0), 0, (Math.Abs(CDbl((pointd.X - pointd4.X))) / num16)), (-Math.Abs(CDbl((pointd.X - pointd4.X))) / num16))
num14 = (num14 * 100)
num14 = (Math.Ceiling(num14) / 100)
num15 = If((pointd4.Y > pointd.Y), CDbl(1), CDbl(-1))
Dim num19 As Double = If((num16 = 0), 0, ((pointd3.Z - pointd2.Z) / num16))
num17 = 3
End If
For num = 0 To num16 - 1
num2 = CInt(Math.Round(Math.Floor(CDbl((3 + (num16 / 2))))))
num3 = CInt(Math.Round(Math.Floor(CDbl((97 - (num16 / 2))))))
Select Case num17
Case 2
d = (Math.Ceiling(CDbl(((pointd.Y * 100) + (num15 * 50)))) / 100)
a = (Math.Floor(CDbl(((pointd.Y * 100) + (num15 * 150)))) / 100)
num6 = (Math.Floor(Math.Abs(CDbl(((Math.Floor(d) * 100) - (d * 100))))) / 100)
num7 = (Math.Ceiling(Math.Abs(CDbl(((Math.Ceiling(a) * 100) - (a * 100))))) / 100)
If (Math.Floor(d) = Math.Floor(a)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
If (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
End If
ElseIf (Math.Ceiling(d) = Math.Ceiling(a)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
If (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(d, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(a, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.Y + num15)))})
ElseIf (Operators.ConditionalCompareObjectEqual(a, list3.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(d, list3.Item(0), False)) Then
list3 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.Y + num15)))})
End If
ElseIf (Math.Floor(CDbl((num6 * 100))) <= num2) Then
Dim list4 As New ArrayList
list4.Add(Math.Floor(a))
list3 = list4
ElseIf (Math.Floor(CDbl((num7 * 100))) >= num3) Then
Dim list5 As New ArrayList
list5.Add(Math.Floor(d))
list3 = list5
Else
Dim list6 As New ArrayList
list6.Add(Math.Floor(d))
list6.Add(Math.Floor(a))
list3 = list6
End If
Exit Select
Case 3
num8 = (Math.Ceiling(CDbl(((pointd.X * 100) + (num14 * 50)))) / 100)
num9 = (Math.Floor(CDbl(((pointd.X * 100) + (num14 * 150)))) / 100)
num10 = (Math.Floor(Math.Abs(CDbl(((Math.Floor(num8) * 100) - (num8 * 100))))) / 100)
num11 = (Math.Ceiling(Math.Abs(CDbl(((Math.Ceiling(num9) * 100) - (num9 * 100))))) / 100)
If (Math.Floor(num8) = Math.Floor(num9)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
If (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
End If
ElseIf (Math.Ceiling(num8) = Math.Ceiling(num9)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
If (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num8, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num9, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectLess(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Floor(CDbl((pointd.X + num14)))})
ElseIf (Operators.ConditionalCompareObjectEqual(num9, list2.Item(0), False) AndAlso Operators.ConditionalCompareObjectGreater(num8, list2.Item(0), False)) Then
list2 = Dofus1Line.smethod_0(New Object() {Math.Ceiling(CDbl((pointd.X + num14)))})
End If
ElseIf (Math.Floor(CDbl((num10 * 100))) <= num2) Then
list2 = Dofus1Line.smethod_0(New Object() {num9})
ElseIf (Math.Floor(CDbl((num11 * 100))) >= num3) Then
list2 = Dofus1Line.smethod_0(New Object() {num8})
Else
list2 = Dofus1Line.smethod_0(New Object() {num8, num9})
End If
Exit Select
End Select
If (list3.Count > 0) Then
num12 = 0
Do While (num12 < list3.Count)
point = New Point(Math.Floor(CDbl((pointd.X + num14))), Conversions.ToDouble(list3.Item(CInt(num12))))
list.Add(point)
num12 = (num12 + 1)
Loop
ElseIf (list2.Count > 0) Then
num13 = 0
Do While (num13 < list2.Count)
point = New Point(Conversions.ToDouble(list2.Item(CInt(num13))), Math.Floor(CDbl((pointd.Y + num15))))
list.Add(point)
num13 = (num13 + 1)
Loop
ElseIf (num17 = 1) Then
point = New Point(Math.Floor(CDbl((pointd.X + num14))), Math.Floor(CDbl((pointd.Y + num15))))
list.Add(point)
End If
pointd.X = (((pointd.X * 100) + (num14 * 100)) / 100)
pointd.Y = (((pointd.Y * 100) + (num15 * 100)) / 100)
Next num
Return list
End Function
Private Shared Function smethod_0(ByVal object_0 As Object()) As ArrayList
Dim list As New ArrayList
list.AddRange(object_0)
Return list
End Function
' Nested Types
Public Class Point
' Methods
Public Sub New(ByVal X As Double, ByVal Y As Double)
Me.X = X
Me.Y = Y
End Sub
' Properties
Public Property X As Double
Get
Return Me.double_0
End Get
Set(ByVal value As Double)
Me.double_0 = value
End Set
End Property
Public Property Y As Double
Get
Return Me.double_1
End Get
Set(ByVal value As Double)
Me.double_1 = value
End Set
End Property
' Fields
<CompilerGenerated> _
Private double_0 As Double
<CompilerGenerated> _
Private double_1 As Double
End Class
Public Class Point3D
' Methods
Public Sub New(ByVal X As Double, ByVal Y As Double, ByVal Z As Double)
Me.X = X
Me.Y = Y
Me.Z = Z
End Sub
' Properties
Public Property X As Double
Get
Return Me.double_0
End Get
Set(ByVal value As Double)
Me.double_0 = value
End Set
End Property
Public Property Y As Double
Get
Return Me.double_1
End Get
Set(ByVal value As Double)
Me.double_1 = value
End Set
End Property
Public Property Z As Double
Get
Return Me.double_2
End Get
Set(ByVal value As Double)
Me.double_2 = value
End Set
End Property
' Fields
<CompilerGenerated> _
Private double_0 As Double
<CompilerGenerated> _
Private double_1 As Double
<CompilerGenerated> _
Private double_2 As Double
End Class
End Class
End Namespace