Написал свою первую ходилку (было нелегко, но я справился), ходилка прет напролом кратчайшим путем к указанной точке, правда препятствия не обходит (обход оных в процессе написания).
Координаты я ваще забил внутри скрипта (пока отлаживал), но можно повесить как аргументы функции.
Длинно получилось - ибо нету у нас тут ни 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