Траектория действительно интресная, и не подходит.
На 56-ой сфере не стреляет через углы... Выше я постил 3 картинки, на которых желтым цветом выделены простреливаемые тайлы. На картинках видно, что между точками могут пролегать несколько разных траекторий.
Вот переделка под инжу. Можно сделать короче, но я путаюсь в else'ах
Code:
sub test()
var String = VectorPoints(UO.GetX('self'), UO.GetY('self'), UO.GetX('self') + 2, UO.GetY('self') + 7), i
var Count = val(GetWord(String, 1))
UO.Print(String)
For i = 2 to Count * 2 step 2
UO.MFGI('add', '1339', GetWord(String, i), GetWord(String, i + 1), 20, '0x0025', 'cave floor')
Next
Endsub
sub deltile()
var MaxRange = 18
var X, Y, Z, Tiles
var mX, mY, mZ
mX = UO.GetX('self')
mY = UO.GetY('self')
mZ = UO.GetZ('self')
for Y = MaxRange - ( MaxRange * 2 ) to MaxRange
for X = MaxRange - ( MaxRange * 2 ) to MaxRange
UO.MFGI('clear', '1339', mX+X, mY+Y, UO.GetZ('self'))
next
next
end sub
Sub VectorPoints(startx, starty, endx, endy)
var Coordinates = ' ' + str(startx) + ' ' + str(starty) + ' ', Amount = 1, dx, dy, ax, ay
While startx <> endx or starty <> endy
dx = startx - endx
dy = starty - endy
ax = Absolute(dx)
ay = Absolute(dy)
If ax > ay then
If ay == 0 then
If dx > 0 then
startx = startx - 1
else
startx = startx + 1
Endif
else
If ax / ay > 2 then
If dx > 0 then
startx = startx - 1
else
startx = startx + 1
Endif
else
If dy > 0 then
If dx > 0 then
startx = startx - 1
starty = starty - 1
else
startx = startx + 1
starty = starty - 1
Endif
else
If dx > 0 then
startx = startx - 1
starty = starty + 1
else
startx = startx + 1
starty = starty + 1
Endif
Endif
Endif
Endif
Endif
If ax < ay then
If ax == 0 then
If dy > 0 then
starty = starty - 1
else
starty = starty + 1
Endif
else
If ay / ax > 2 then
If dy > 0 then
starty = starty - 1
else
starty = starty + 1
Endif
else
If dx > 0 then
If dy > 0 then
starty = starty - 1
startx = startx - 1
else
starty = starty + 1
startx = startx - 1
Endif
else
If dy > 0 then
starty = starty - 1
startx = startx + 1
else
starty = starty + 1
startx = startx + 1
Endif
Endif
Endif
Endif
Endif
If ax == ay then
If dx > 0 then
If dy > 0 then
startx = startx - 1
starty = starty - 1
else
startx = startx - 1
starty = starty + 1
Endif
else
If dy > 0 then
startx = startx + 1
starty = starty - 1
else
startx = startx + 1
starty = starty + 1
Endif
Endif
Endif
Coordinates = Coordinates + str(startx) + ' ' + str(starty) + ' '
Amount = Amount + 1
Wend
Return str(Amount) + Coordinates
Endsub
Sub GetWord(st, nom)
var tmpst, i, dlin, kol = 0, start = 0
dlin = len(st)
For i = 0 to dlin - 1
If mid(st, i, 1) == ' ' or i == dlin - 1 then
kol = kol + 1
If kol == nom then
tmpst = mid(st, start, i - start)
Return tmpst
else
While mid(st, i, 1) == ' '
i = i + 1
Wend
If kol == nom - 1 then
start = i
Endif
Endif
Endif
Next
tmpst = ''
Return tmpst
Endsub
Sub Absolute(val)
If val < 0 then
Return -val
else
Return val
Endif
Endsub