Не так все было сложно...
Функция вернёт строку вида '3 1541 123 1541 122 1541 121'
3 - Количество точек, а дальше координаты x,y самих точек.
На мой взгляд наиболее удобно будет
Code:
Sub asd()
var a, i
var string = VectorPoints(startx, starty, endx, endy)
i = GetWord(string, 1)
For a = 2 to 2 * i step 2
UO.PrivateGetTile(GetWord(string, a), GetWord(string, a + 1), blablabla)
Next
Endsub
Ну и сам скрипт...
Code:
Sub VectorPoints(startx, starty, endx, endy)
var Coordinates = ' ', Amount = 0, Vector, x, y, i, j
Vector = (str(endx - startx) + ',' + str(endy - starty))
If startx >= endx then
i = -1
else
i = 1
Endif
If starty >= endy then
j = -1
else
j = 1
Endif
For x = startx to endx step i
For y = starty to endy step j
If IsOnVector(x, y, startx, starty, endx, endy) then
Amount = Amount + 1
Coordinates = (Coordinates + str(x) + ' ' + str(y) + ' ')
Endif
Next
Next
Return (str(Amount) + Coordinates)
Endsub
Sub IsOnVector(x, y, startx, starty, endx, endy)
var lenAB = GetLength(startx, starty, endx, endy), lenAC = GetLength(startx, starty, x, y), lenBC = GetLength(x, y, endx, endy)
If lenAB == lenAc + lenBC then
Return 1
else
Return 0
Endif
Endsub
Sub GetLength(startx, starty, endx, endy)
var a = Absolute(endx - startx), b = Absolute(endy - starty)
If a >= b then
Return a
else
Return b
Endif
Endsub
Sub Absolute(val)
If val > 0 then
Return val
else
Return -val
Endif
Endsub
GetWord() Дестракшена располагается в
полезностях