Эх скоко не лазил ... ну простите меня ..

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
zimglads
Posts: 30
Joined: 2009-06-11 14:06:40

Эх скоко не лазил ... ну простите меня ..

Post by zimglads »

но блин ... надо банальный манинг )))
бегаем по тайлам и обкапываемся вокруг .. затем иф вес>300 бежим в банк и скидуем в сумочку ид вобью сам ) добераем кирок если в паке меньше 2 но не больше 4 и репит по кругу .. ну мона ещё еду добавить ... а то на форуме скоко не лазил везде какие-то или сильно сложные или слишком простые )) золотая средина нуна ))

а ещё просьба без хайда )) ну и поля где надо "иф нотжурнал промазал по земле / там нема/ и т.п. тоже сам заполню" навсяк пожар .. шард Forgoten World..

П.С. знаю что вас всех достало ) но простите уж... :?

вобще-то нашол примерный скрипт на хождение и обкапывание вокруг ..

Code: Select all

sub Mining_Carve() 
var i
dim x[6],y[6]
x[0]=2577
y[0]=481
x[1]=2572
y[1]=477
x[2]=2570
y[2]=481
x[3]=2570           
y[3]=486
x[4]=2564
y[4]=486
x[5]=2561
y[5]=490
    repeat
       for i=0 to 5 
             smartwalk(x[i],y[i])
             mining()
       next
    until uo.weight>=uo.str*4
endsub
sub Mining()
   var x,y
        for x=-2 to 2
           for y=-2 to 2
                 if x==0 and y==0 then
                      wait(500)
                 else
                      uo.deletejournal()
                      uo.waittargettile('0',str(uo.getx('self')+x),str(uo.gety('self')+y),'0')
                      uo.usetype('NPF')
                             repeat
                                   wait(300)
                             until uo.injournal('that is too far away |there is no ore here to mine |in rock')
                 endif
            next
      next
endsub
Sub Checklag()
   deljournal('a backpack')
   uo.click('backpack')
   repeat
      wait(50)
   until uo.injournal('a backpack')
endsub
Sub deljournal(msg)
   while uo.injournal(msg)
      uo.setjournalline(uo.injournal(msg)-1,"")
   wend
endsub
Sub st(x,y,stepdelay)
   var xn=uo.getx('self'),yn=uo.gety('self'),xp,yp
      if uo.getdir('self')<>x then
         uo.press(y)
         wait(100)
         checklag()
      endif
   uo.press(y)
   wait(stepdelay)
   checklag()
   xp=uo.getx('self')
   yp=uo.gety('self')
      if xn==xp and yn==yp then
         uo.press(y)
         wait(stepdelay)
         checklag()
         xp=uo.getx('self')
         yp=uo.gety('self')
      endif
      if xn==xp and yn==yp then
         uo.press(y)
         wait(stepdelay)
         checklag()
         xp=uo.getx('self')
         yp=uo.gety('self')
      endif
      if xn==xp and yn==yp then
         return 0
      else
         return uo.getdir('self')+1
      endif   
endsub
#Millerbeer 2009
#моя  ходилка типа с зачатками интеллекта :-)
Sub SmartWalk(xk,yk)
   var xn,yn,stepdelay,gon,tempx,tempy,i,z,q,m,count='z',flag=0,prec=1;prec-точность с какой надо подходить к клетке
   dim sx[4], sy[4], px[100], py[100]
      repeat
         xn=uo.getx('self')
         yn=uo.gety('self')
         stepdelay=200
            if xn>xk && yn>yk then
               gon=st(7,38,stepdelay)
            endif
            if xn>xk && yn==yk then
               gon=st(6,36,stepdelay)
            endif
            if xn>xk && yn<yk then
               gon=st(5,37,stepdelay)
            endif
            if xn<xk && yn>yk then
               gon=st(1,39,stepdelay)
            endif
            if xn<xk && yn==yk then
               gon=st(2,34,stepdelay)
            endif
            if xn<xk && yn<yk then
               gon=st(3,40,stepdelay)
            endif
            if xn==xk && yn>yk then
               gon=st(0,33,stepdelay)
            endif
            if xn==xk && yn<yk then
               gon=st(4,35,stepdelay)
            endif
            if xn==xk && yn==yk then
                       uo.print('Шеф, я на месте!!!')
                       return
            endif
            if gon==0 && dist(xn,yn,xk,yk)==1 then
               uo.print('Сорри, шеф, малость недошёл!!!')
               return
            endif
            if gon==0 && dist(xn,yn,xk,yk)>1 then
               repeat
                     if count=='z' then
                        count=0
                        px[count]=uo.getx('self')
                        py[count]=uo.gety('self')
                     endif
                     if count>=0 then
                        z=0
                           for i=0 to count
                              if uo.getx('self')==px[i] && uo.gety('self')==py[i] then
                                 z=1
                              endif
                           next
                           if z==0 then
                              count=count+1
                                 if count==101 then
                                    count=0
                                 endif
                              px[count]=uo.getx('self')
                              py[count]=uo.gety('self')
                           endif
                     endif
                  sx[0]=uo.getx('self')
                  sy[0]=uo.gety('self')-1
                  sx[1]=uo.getx('self')+1
                  sy[1]=uo.gety('self')
                  sx[2]=uo.getx('self')
                  sy[2]=uo.gety('self')+1
                  sx[3]=uo.getx('self')-1
                  sy[3]=uo.gety('self')
                     for i=0 to 2
                        for z=0 to 2
                           if dist(sx[z],sy[z],xk,yk) > dist(sx[z+1],sy[z+1],xk,yk) then
                              tempx=sx[z+1]
                              tempy=sy[z+1]
                              sx[z+1]=sx[z]
                              sy[z+1]=sy[z]
                              sx[z]=tempx
                              sy[z]=tempy
                           endif
                        next
                     next
                     if count>=0 then
                        i=0
                        q=0
                           repeat
                              for z=0 to count
                                 if sx[i]==px[z] && sy[i]==py[z] then
                                    tempx=sx[i]
                                    tempy=sy[i]
                                       for m=i to 2
                                          sx[m]=sx[m+1]
                                          sy[m]=sy[m+1]
                                       next
                                    sx[3]=tempx
                                    sy[3]=tempy
                                    q=q+1
                                    flag=1
                                 endif
                              next
                              if flag==0 then
                                 i=i+1
                              else
                                 flag=0
                              endif
                           until i>=3 || q>=3
                     endif
                  i=0
                     repeat
                        tempx=uo.getx('self')
                        tempy=uo.gety('self')
                        if tempx>sx[i] && tempy==sy[i] then
                           gon=st(6,36,stepdelay)
                        else
                           if tempx<sx[i] && tempy==sy[i] then
                              gon=st(2,34,stepdelay)
                           else
                              if tempx==sx[i] && tempy>sy[i] then
                                 gon=st(0,33,stepdelay)
                              else
                                 if tempx==sx[i] && tempy<sy[i] then
                                    gon=st(4,35,stepdelay)
                                 else
                                    if tempx==xk && tempy==yk then
                                               uo.print('Шеф, я на месте!!!')
                                               return
                                    else
                                       if gon==0 && dist(sx[i],sy[i],xk,yk)==1 then
                                          uo.print('Сорри, шеф, недошёл!!!')
                                          return
                                       endif
                                    endif
                                 endif
                              endif
                           endif
                        endif
                        i=i+1
                     until gon || i>3
               until dist(uo.getx('self'),uo.gety('self'),xk,yk)<=1
            endif
      until dist(uo.getx('self'),uo.gety('self'),xk,yk)<=prec
endsub
Sub Dist(x1,y1,x2,y2)
   var dx,dy
      if x1-x2 > 0 then
         dx=x1-x2
      else
         if x1-x2 < 0 then
            dx=x2-x1
         else
            dx=0
         endif
      endif
      if y1-y2 > 0 then
         dy=y1-y2
      else
         if y1-y2 < 0 then
            dy=y2-y1
         else
            dy=0
         endif
      endif
      if dx>=dy then
         return dx
      else
         return dy
      endif
endsub


но тут нету скидывания в банк..
банк у меня открываеться по принципу

Code: Select all

UO.UseObject(0x4001CCDE) 
      CheckLag()
         UO.UseObject(0x400D0A53)

(но я незнаю как его туда вклеить и как добавить сброс ресурсов ..) понимаю что чёто тип
,moveitem object [quantity containerobject/ground [x y z]]
в моём случае ето походу
moveitem Type=0x19B9 "0" "0x400D0A53"

поправил масив координат .. и попытался поправить журнал (сообщения что выдаёт еси там далеко или нема руды) но нехотит копать .. запускаю 1 копка и всё

фразы которые говорит серв когда не нужно продолжать копать
Try mining in rock.
that is too far away.
there is no ore here to mine.

а после которых нужно копать думаю не стоит писать ? =)
а ещё есть обход антимакроса .. который как правило срабатывает при одевании кирки и ето приводит макрос в ступор .. т.к. ласт действие походу получаеться не таргет ...
$!@m
Posts: 106
Joined: 2006-08-10 08:25:32

Post by $!@m »

Самая большая проблема - дойти от банка к шахте. Если пешкарусом - ищи ходилки, но 90% что запаришся :) Лучше летать по рунке или рунбуке. Конструкция проста:

Code: Select all

cast('Recall',<dune id>)


Далее нужна опкопка и ходилка по шахте. Обкопку можно в принципе разделить на однотайловую и многотайловую. Сиречь или выкопал 1 тайл и пошел дальше, либо стал, обкопался со всех сторон, пошел дальше. Если тебе не нужен хайдинг, то, думаю, не нужна и обкопка тебе нужна однотайловая. Алгоритм:

Code: Select all

UO.WaitTargetTile(<координаты чара>);
UO.UseType(<кирка>);
UO.DeleteJournal();
repeat
   wait(*); * - задержка порядка 300 ~ 500
until UO.InJournal(<нужное сообщение журнала>);

Если обкопка вокруг себя на несколько тайлов, то нужно сделать вложенный цикл для прицела киркой в координаты +2/-2 от чара (или на сколько там достаешь киркой копать).
В зависимости от шарда и своего майнинга можно/нужно добавить проверку на количество попыток выкопать. На многих шардах с алгоритмом ожидания в журнале "выкопал"/"нечего копать" и маленьким майнингом можно надолго встрять на тайле с высокой рудой. Проверка проста, каждый цикл добавлять к счетчику единицу, соотв. в условии until кроме журнала дописать и проверку на счетчик.

Следующий этап - переход на следующий тайл. Если копаешь по одному тайлу - переход на 1 тайл. Обкапываешся - соотв. переход на кол-во тайлов, при которых не будешь цеплять уже выкопанные, это вроде ясно. Снова-таки. Если нет ничего архисложного, лучше выбрать себе для копки прямоугольный участок такого размера, чтоб за его полный проход выкапывать себе почти максимальный вес.
Ходить в таком случае лучше без "ходилок", простыми

Code: Select all

Send(*)

Выглядеть должно примерно так:

Code: Select all

for a=0 to N
  for b=0 to M
    <процедура копки>
  <сделать шаг в сторону увеличения М>
  next
  <сделать шаг в сторону N>
  <изменить направление хотьбы для М>
next

M & N - соотв. ширина и длина прямоугольника, по которому ходим.
Шаг делается "нажатием" кнопки на клавиатуре. Направления соотв. направлениям на цифровой клавиатуре с выключенным NumLock. Коды кнопок можно узнать в самой оболочке редактирования скрипта в инже.

Итак, уже имеем алгоритм копания в шахте. Допустим, благополучно вскопали прямоугольник, надо вернуться. Снова-таки, лучше реколится. Процедура та же, кастуем рекол на руну к банку.
Открываем банк, сгружаем руду, берем расходники.
Открывать банк ты умеешь, как сгрузить?
Ищем в паке руду:

Code: Select all

UO.FindType(<руда>)

Функция вернет значение FindCount - кол-во найденных вещей; и finditem - ИД найденного обьекта, одного.
Итак, мы сможем перенести finditem в контейнер банка. Так мы переместим 1 кучку руды. Т.к. их будет больше (и разной), то впихнем все это в цикл, и будем делать до тех пор, пока после поиска FindType FindCount не станет =0. Что означает найдено 0 обьектов, подходящий по типу.

Итак, знаем алгоритм отгруза руды. Теперь загрузка расходников. Это кирки и реги для рекола. Алгоритм: ищем в паке кирки, если меньше нужного - загребаем из банка. То же с регами. Комманды те же, что при отгрузе, только меняются местами контейнеры, для проверки ищем в паке, для загрузки ищем в банке и из банка берем в пак.

Снова реколимся в шахту.

ПС: писать целиком не буду, имейте совесть и учите программирование :)
Синтаксис всех комманд в http://yoko.netroof.net/help/
zimglads
Posts: 30
Joined: 2009-06-11 14:06:40

Post by zimglads »

банк у меня прямо в шахте ) так что код я прально тот написал )) впринципе хороший вариант про однотайловые написал .. щас попробую ... а можеш подсказать ещё как сделать чтобы макрос давал таргет и я просто ходил и проклацывал нужные места а он ето допустим потом записал в d:/koordinati.txt и пошол по ним копать ?
Edikus
Posts: 98
Joined: 2004-07-12 13:03:57

Post by Edikus »

меня всегда убивает все Эти "нужен банальный" и последуйщее описание скрипта минимум на 300 строчек.

...
zimglads
Posts: 30
Joined: 2009-06-11 14:06:40

Post by zimglads »

ну можно ведь просто бегать да скидовать ) ето ведь не 300 строк ? О_о
$!@m
Posts: 106
Joined: 2006-08-10 08:25:32

Post by $!@m »

Смотри, насчет однотайловой копки - удобно, но надо чуток скрипт "придерживать" перед копкой, а то инжа после шага не мгновенно определяет координаты, это, пожалуй, единственная проблемма. Если задержка в 0.1 - 0.2 сек не смертельна, то копай под ногами по одному тайлу и не парься.

Насчет координат - если копаешь с пола, то все-таки лучше просто раздели шахту на прямоугольники и копай в них простым скриптом. Такой вариат предпочтительней. И вообще - чем проще, тем лучше. И надежнее.

Если хочешь увидеть скрипт, какой пишет коорды в файл и потом по ним ходит - посмотри в разделе Топ Кв. скрипт на ламбер с записью координат. Писал Ветеран, если память не сдает. Вот глянь и подумай, "а мож ну его нах?".
zimglads
Posts: 30
Joined: 2009-06-11 14:06:40

Post by zimglads »

спс какраз добрался до однотайловой копки )) уже усё чотко )
Post Reply