Написал свою первую ходилку (было нелегко, но я справился), ходилка прет напролом кратчайшим путем к указанной точке, правда препятствия не обходит (обход оных в процессе написания).
Координаты я ваще забил внутри скрипта (пока отлаживал), но можно повесить как аргументы функции.
Длинно получилось - ибо нету у нас тут ни case ни хотябы elseif - вот и получось 8ем километровых условий
sub hodilka()
var x,y,cx,cy,tmp,i=0, temp
x = 1642 ;//Координата x-назначения.
y = 2669 ;//Координата y-назначения.
x = -(uo.getx() - x)
y = -(uo.gety() - y)
cx = x
cy = y
if cx <= 0 then
cx = -cx
endif
if cy <= 0 then
cy = -cy
endif
tmp = str(cx+cy)
if val(tmp) then
DIM step[val(tmp)]
repeat
i=i+1
if x>0 && y>0 && x==y then
x=x-1
y=y-1
cx=x
cy=y
step[i]=2
endif
if x>0 && cx>cy then
x=x-1
cx=x
step[i]=3
endif
if x>0 && y<0 && cx==cy then
x=x-1
y=y+1
cx=x
cy=-y
step[i]=6
endif
if y<0 && cy>cx then
y=y+1
cy=-y
step[i]=9
endif
if x<0 && y<0 && x==y then
x=x+1
y=y+1
cx=-x
cy=-y
step[i]=8
endif
if x<0 && cx>cy then
x=x+1
cx=-x
step[i]=7
endif
if x<0 && y>0 && cx==cy then
x=x+1
y=y-1
cx=-x
cy=y
step[i]=4
endif
if y>0 && cy>cx then
y=y-1
cy=y
step[i]=1
endif
if x==-0 then
x=0
endif
if y==-0 then
y=0
endif
until cx==0 && cy==0
temp=i
tmp=''
for i=1 to temp
tmp=tmp+str(step[i])
next
uo.addstep(tmp)
endif
uo.resend()
endsub
Last edited by Destruction on 2006-04-16 02:43:45, edited 2 times in total.
Ну вообще - интеллект предпологает, разум распологает.
Чисто интеллектуальном уровне - я чувствую, что это дело мона загнать в цикл и срезать раза в 4, а вот сколько не напрягаю мозг - ну не получается, мб потом придумаю формулу для расчета для всех
ПС: В конец дописал ресенд - чтобы избавиться от глюка с эддстеп, который я описал в риквестах ток, что.
sub walk(x,y)
Dim a[9]
a[1]=38
a[2]=33
a[3]=39
a[4]=36
a[5]=0
a[6]=34
a[7]=37
a[8]=35
a[9]=40
var xs, ys, n, m
while (xs<>x) or (ys<>y)
xs=UO.GetX("self")
ys=UO.GetY("self")
if x > xs then
n=3
else
if x < xs then
n=1
else ; x=xs
n=2
endif
endif
if y > ys then
m=3
else
if y < ys then
m=1
else ; y=ys
m=2
endif
endif
UO.Press(a[n+((m-1)*3)])
wend
end sub
все хорошо !
но - в первом скрипте нет не какой анимации - как по шахмотной доске преставляют - но двигается быстро)
а во втором ходит тока в развалочку(
и почему то у меня после нескольких использований он ваще ломится кудато в другую сторону от точки которую указал в чем проблемма кто подскажет?
а будет лучше если кто нибудь даст ходилку в которой чар бегает на максимальной скорости та что с приследованием у меня тоже чар ходит и не кого не догоняет(((((((((((((((((((((((помогите плиз!
MazaFaka wrote:вроде все просто пояснил.................
дайте пожалуста скрипт в котором при указании координат цели чар не шЁл к назначенной точке а бежал !
Destruction, мог бы ты в своём скрипте описать для меня что чар делает? ну например напротив строки пояснение.... мне нада свою ходилку написать, я вот сморю на твой скрипт и больше половины не понимаю заранее спасибо
жизнь ничто в этом чёкнутом мире, а ультима онлайн - светлое пятнышко во мраке жизни )))
sub hod(xko,yko)
var mx=UO.GetX()
var my=UO.GetY()
if mx == xko and my > yko then
UO.Press(33)
endif
if mx == xko and my < yko then
UO.Press(35)
endif
if mx < xko and my == yko then
UO.Press(34)
endif
if mx < xko and my > yko then
UO.Press(39)
endif
if mx < xko and my < yko then
UO.Press(40)
endif
if mx > xko and my == yko then
UO.Press(36)
endif
if mx > xko and my > yko then
UO.Press(38)
endif
if mx > xko and my < yko then
UO.Press(37)
endif
end sub
sub go()
repeat
hod(xkord,ykord) #вместо xkord , ykord ваши координаты )
wait(5)
until uo.GetX()==xkord and uo.getY()==ykord # ну или либо в переменную занать все это
end sub