Yoko

All sides of Injection
It is currently 2025-10-17 03:50:35

All times are UTC+02:00




Post new topic  Reply to topic  [ 7 posts ] 
Author Message
PostPosted: 2009-06-11 23:46:48 
Offline

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

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

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

вобще-то нашол примерный скрипт на хождение и обкапывание вокруг ..
Code:
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:
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.

а после которых нужно копать думаю не стоит писать ? =)
а ещё есть обход антимакроса .. который как правило срабатывает при одевании кирки и ето приводит макрос в ступор .. т.к. ласт действие походу получаеться не таргет ...


Top
   
 Post subject:
PostPosted: 2009-06-12 09:52:34 
Offline

Joined: 2006-08-10 08:25:32
Posts: 106
Самая большая проблема - дойти от банка к шахте. Если пешкарусом - ищи ходилки, но 90% что запаришся :) Лучше летать по рунке или рунбуке. Конструкция проста:
Code:
cast('Recall',<dune id>)


Далее нужна опкопка и ходилка по шахте. Обкопку можно в принципе разделить на однотайловую и многотайловую. Сиречь или выкопал 1 тайл и пошел дальше, либо стал, обкопался со всех сторон, пошел дальше. Если тебе не нужен хайдинг, то, думаю, не нужна и обкопка тебе нужна однотайловая. Алгоритм:
Code:
UO.WaitTargetTile(<координаты чара>);
UO.UseType(<кирка>);
UO.DeleteJournal();
repeat
   wait(*); * - задержка порядка 300 ~ 500
until UO.InJournal(<нужное сообщение журнала>);

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

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

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

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

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

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

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

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

ПС: писать целиком не буду, имейте совесть и учите программирование :)
Синтаксис всех комманд в http://yoko.netroof.net/help/


Top
   
 Post subject:
PostPosted: 2009-06-12 12:07:36 
Offline

Joined: 2009-06-11 14:06:40
Posts: 30
банк у меня прямо в шахте ) так что код я прально тот написал )) впринципе хороший вариант про однотайловые написал .. щас попробую ... а можеш подсказать ещё как сделать чтобы макрос давал таргет и я просто ходил и проклацывал нужные места а он ето допустим потом записал в d:/koordinati.txt и пошол по ним копать ?


Top
   
 Post subject:
PostPosted: 2009-06-12 14:40:50 
Offline

Joined: 2004-07-12 13:03:57
Posts: 98
меня всегда убивает все Эти "нужен банальный" и последуйщее описание скрипта минимум на 300 строчек.

...


Top
   
 Post subject:
PostPosted: 2009-06-12 14:49:09 
Offline

Joined: 2009-06-11 14:06:40
Posts: 30
ну можно ведь просто бегать да скидовать ) ето ведь не 300 строк ? О_о


Top
   
 Post subject:
PostPosted: 2009-06-13 08:58:34 
Offline

Joined: 2006-08-10 08:25:32
Posts: 106
Смотри, насчет однотайловой копки - удобно, но надо чуток скрипт "придерживать" перед копкой, а то инжа после шага не мгновенно определяет координаты, это, пожалуй, единственная проблемма. Если задержка в 0.1 - 0.2 сек не смертельна, то копай под ногами по одному тайлу и не парься.

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

Если хочешь увидеть скрипт, какой пишет коорды в файл и потом по ним ходит - посмотри в разделе Топ Кв. скрипт на ламбер с записью координат. Писал Ветеран, если память не сдает. Вот глянь и подумай, "а мож ну его нах?".


Top
   
 Post subject:
PostPosted: 2009-06-13 14:16:17 
Offline

Joined: 2009-06-11 14:06:40
Posts: 30
спс какраз добрался до однотайловой копки )) уже усё чотко )


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 7 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited