Page 1 of 1

Подкиньте идейку

Posted: 2006-02-06 21:14:34
by Balu
мининг по скале! ходит по ранее записанным координатам когда перевес идёт домой скидывать руду, скинули руду идём к точке у которой закончили капать и капаем дальше. Дом с сундуком для разгрузки стоит в начале копания. проблема в том что чар идёт по координатам при копании идеально, но когда надо скинуть руду или идти после разгрузки в то место где закончили капать, начинает тупить ходилка, не обходит простые припятствия. вот как бы сделать, что бы чар идя на разгрузку и обратно до точки у которой закончил капать использовал координаты записанные для копки, т.е как бы запоминал координаты и шел по ним до дома и обратно? или это не реально?

Code: Select all

var tSeif='' 
var Kirka='0x0E85'
var maxves=630 ; sdelai chyt pomenshe
var xs= ;koordinatu y syndyka
var ys= ;
var ma

sub main()
 while not uo.dead()
   go(xxxx,xxxx,x)# ходим по координатам для копания
   go(xxxx,xxxx,x)
   go(xxxx,xxxx,x)#подходим к сундуку
  UnLoad()#выкладываем руду
wend
endsub

sub minround()
VAR TileNum = '-1'
VAR x, y, t, k
VAR MaxTime = 100 
VAR ms1 = "There is no ore here to mine"
VAR ms2 = "You can't use"
##VAR ms3 = "You put the"
VAR ms4 = "You loosen some rocks"
VAR ms5 = "You are too far away"
VAR ms6 = "Try mining in rock"
VAR ms7 = "You can't see that"
VAR ms8 = "You put the Iron Ore"
VAR ms9 = "You have no line of sight to that location"
VAR ms10 = "You put the Agapite Ore"
VAR ms11 = "You put the Orion Ore"
VAR ms12 = "You put the Shadow Ore"
VAR ms13 = "You put the Crystal Ore"
VAR ms14 = "You put the Golden Ore"
VAR ms15 = "You put the Mytheril Ore"
VAR ms16 = "You put the Magma Ore"
VAR ms17 = "You put the Copper Ore"
VAR ms18 = "You put the Valorite Ore"
VAR ms19 = "You put the Verite Ore"
VAR ms20 = "You put the Dwarf Ore"
VAR ms21 = "You put the Silver Ore"

var kolr,per
for y=-2 to 2
for x=-2 to 2 
  k = 0
  repeat
    UO.DeleteJournal()
    t = UO.Timer()
    k = k + 1
    if uo.targeting() then
     UO.CancelTarget()
    endif
    CheckLag()
    wait(300)
    UO.WaitTargetTile( TileNum, STR( UO.GetX() + x ), STR( UO.GetY() + y ), 0)
    UO.UseType( Kirka )
    repeat
     wait(300)
     if Uo.injournal("You have found some") then
     podbor()
     end if
    until UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR UO.InJournal(ms7) OR UO.InJournal(ms8) OR UO.InJournal(ms9) OR UO.InJournal(ms10) OR UO.InJournal(ms11) OR UO.InJournal(ms12) OR UO.InJournal(ms13) OR UO.InJournal(ms14) OR UO.InJournal(ms15) OR UO.InJournal(ms16) OR UO.InJournal(ms17) OR UO.InJournal(ms18) OR UO.InJournal(ms19) OR UO.InJournal(ms20) OR UO.InJournal(ms21) OR ((t + MaxTime) < UO.Timer())
    uo.findtype('0x19B9','-1','backpack')
    kolr=uo.getquantity('finditem')
    per=uo.str*4+20-uo.weight
    uo.print("kol-vo irona " + str(kolr) + " do perevesa " + str(per))
    maxvess()
  until ( NOT UO.InJournal(ms4) AND NOT UO.InJournal(ms10) AND NOT UO.InJournal(ms11) AND NOT UO.InJournal(ms12) AND NOT UO.InJournal(ms13) AND NOT UO.InJournal(ms14) AND NOT UO.InJournal(ms15) AND NOT UO.InJournal(ms16) AND NOT UO.InJournal(ms17) AND NOT UO.InJournal(ms18) AND NOT UO.InJournal(ms19) AND NOT UO.InJournal(ms20) AND NOT UO.InJournal(ms21)OR (k > 10) )
 next
next
endsub

Sub go(x,y,k)
   VAR i
   VAR dir,ldir,rdir,key,olddir
   VAR dx,dy,Exit=0
   VAR CacheLimit=9,CacheIndex="Text"
   DIM CacheX[10], CacheY[10]
   
   CacheX[0]="Test"
   While Exit<>1   

         dx=x-UO.GetX()
         dy=y-UO.GetY()
         If dx==0 AND dy==0 Then
            Exit=1
         Endif
   
      If dx<>0 AND dy<>0 Then
         If dx>0 AND dy>0 Then ; GoSE
            dir=3
            ldir=2
            rdir=4
            key=40 ; DownArrow
            olddir=UO.GetDir()
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
               If olddir==2 Then ; GoNE
                  dir=1
                  ldir=0
                  rdir=1
                  key=39 ; RightArrow
                  While UO.GetDir()<>1
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoSW
                  dir=5
                  ldir=5
                  rdir=6
                  key=37 ; LeftArrow
                  While UO.GetDir()<>5
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif

         If dx>0 AND dy<0 Then ; GoNE
            dir=1
            ldir=0
            rdir=2
            key=39 ; RightArrow
            olddir=UO.GetDir()
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
               If olddir==0 Then ; GoWN
                  dir=7
                  ldir=6
                  rdir=7
                  key=38 ; UpArrow
                  While UO.GetDir()<>7
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoSE
                  dir=3
                  ldir=3
                  rdir=4
                  key=40 ; DownArrow
                  While UO.GetDir()<>3
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif

         If dx<0 AND dy>0 Then ; GoSW
            dir=5
            ldir=4
            rdir=6
            key=37 ; LeftArrow
            olddir=UO.GetDir()
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
               If olddir==6 Then ; GoWN
                  dir=7
                  ldir=7
                  rdir=0
                  key=38 ; UpArrow
                  While UO.GetDir()<>7
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoSE
                  dir=3
                  ldir=2
                  rdir=3
                  key=40 ; DownArrow
                  While UO.GetDir()<>3
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif

         If dx<0 AND dy<0 Then ; GoWN
            dir=7
            ldir=6
            rdir=0
            key=38 ; UpArrow
            olddir=UO.GetDir()
            If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
               If olddir==0 Then ; GoNE
                  dir=1
                  ldir=1
                  rdir=2
                  key=39 ; RightArrow
                  While UO.GetDir()<>1
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoSW
                  dir=5
                  ldir=4
                  rdir=5
                  key=37 ; LeftArrow
                  While UO.GetDir()<>5
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif
      Endif
   
      If dx<>0 AND dy==0 Then
         If dx>0 Then ; GoE
            dir=2
            key=34 ; PgDown
            olddir=UO.GetDir()
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
               If olddir==2 Then ; GoSE
                  dir=3
                  ldir=3
                  rdir=4
                  key=40 ; DownArrow
                  While UO.GetDir()<>3
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoNE
                  dir=1
                  ldir=1
                  rdir=0
                  key=39 ; RightArrow
                  While UO.GetDir()<>1
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif
         
         If dx<0 Then ; GoW
            dir=6
            key=36 ; Home key
            olddir=UO.GetDir()
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
               If olddir==0 Then ; GoWN
                  dir=7
                  ldir=7
                  rdir=0
                  key=38 ; UpArrow
                  While UO.GetDir()<>7
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoSW
                  dir=5
                  ldir=4
                  rdir=5
                  key=37 ; LeftArrow
                  While UO.GetDir()<>5
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif
      Endif

      If dx==0 AND dy<>0 Then
         If dy>0 Then ; GoS
            dir=4
            key=35 ; End
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
               If olddir==2 Then ; GoSE
                  dir=3
                  ldir=2
                  rdir=3
                  key=40 ; DownArrow
                  While UO.GetDir()<>3
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoSW
                  dir=5
                  ldir=6
                  rdir=5
                  key=37 ; LeftArrow
                  While UO.GetDir()<>5
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif
         
         If dy<0 Then ;GoN
            dir=0
            key=33 ; PgUp
            olddir=UO.GetDir()
            If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
               If olddir==2 Then ; GoNE
                  dir=1
                  ldir=1
                  rdir=2
                  key=39 ; RightArrow
                  While UO.GetDir()<>1
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Else ; GoWN
                  dir=7
                  ldir=7
                  rdir=6
                  key=38 ; UpArrow
                  While UO.GetDir()<>7
                     StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
                  Wend
               Endif
            Endif
         Endif
      Endif
   Wend
   if k==1 then
    minround()
   endif
end sub


Sub StepEdit(x,y,dir,key)
   VAR walkwait=300
   VAR ErrLevel=0
   If UO.GetDir()<>dir Then
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir Then
         CheckLag()
      Endif
   Endif
   UO.Press(key)
   wait(walkwait)
   If x==UO.GetX() AND y==UO.GetY() Then
      CheckLag()
      If x==UO.GetX() AND y==UO.GetY() Then
;zatik
         ErrLevel=1
      Endif
   Endif
   Return ErrLevel
end sub


Sub StepArrow(x,y,dir,ldir,rdir,key)
   VAR walkwait=300
   VAR ErrLevel=0
   If UO.GetDir()<>dir Then
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()<>dir AND UO.GetDir()<>ldir AND UO.GetDir()<>rdir Then
         CheckLag()
      Endif
   Endif

   If UO.GetX()==x AND UO.GetY()==y Then
      UO.Press(key)
      wait(walkwait)
      If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
         CheckLag()
         If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
; zatik         
            ErrLevel=1
         Endif
      Endif
   Endif
   Return ErrLevel
end sub

Sub CheckLag()
   UO.DeleteJournal()
   UO.Click('backpack')
   repeat
      wait(50)
   until UO.InJournal('backpack')
end sub

sub UnLoad()
var i
DIM Item[13]

Item[1]=0x19B9 ; >3 ore
Item[2]=0x19B7 ; 1 ore
Item[3]=0x19BA ; 2 ore
Item[4]=0x19B8 ; 3 ore
Item[5]=0x0F11 ; saphires
Item[6]=0x0F16 ; amethysts
Item[7]=0x0F18 ; tourmalines
Item[8]=0x0F15 ; citrines
Item[9]=0x0F10 ; emeralds
Item[10]=0x0F0F ; star sapphires
Item[11]=0x0F26 ; diamonds
Item[12]=0x0EED ; gold

for i = 1 to 12
UO.FindType(Item[i], '-1', 'backpack')
while UO.GetQuantity('finditem') > 0
UO.MoveItem('finditem','-1',tSeif)
Wait(1000)
CheckLag()
UO.FindType(Item[i],'-1','backpack')
wend
next
end sub

sub podbor()
uo.findtype(0x19B9,-1,'ground')
uo.grab(0,'finditem')
wait(1000)
uo.findtype(0x19B8,-1,'ground')
uo.grab(0,'finditem')
wait(1000)
uo.findtype(0x19BA,-1,'ground')
uo.grab(0,'finditem')
wait(1000)
uo.findtype(0x19B7,-1,'ground')
uo.grab(0,'finditem')
wait(1000)
end sub

sub maxvess()
var x1,y1
if uo.weight>=maxves then
 x1=uo.getx()
 y1=uo.gety()
 go(1045,1872,0)
 unload()
 go(x1,y1,1)
endif
endsub

Posted: 2006-02-06 21:21:46
by GimFlex
иди от конца к сундуку пришел к сундуку выложил все далее идешь назад в чем проблемма то??????

Posted: 2006-02-06 21:26:00
by Balu
Question wrote:иди от конца к сундуку пришел к сундуку выложил все далее идешь назад в чем проблемма то??????


Проблема в том, что когда идёшь до конца и у чара перевес вся руда что он капает сыпется под ноги и только дойдя до последней координаты он идет выгружаться. очень много теряю руды пока он до конца доходит

Posted: 2006-02-06 21:35:03
by GimFlex
вот люди млин ну капай не на всем участке или сделай доп условие

Code: Select all

  if k==1 then 
  minround()
  endif


измени на

Code: Select all

  if k==1 and uo.weight<MaxVes then 
  minround()
  endif

Posted: 2006-02-06 22:37:55
by Balu
Question wrote:вот люди млин ну капай не на всем участке или сделай доп условие

Code: Select all

  if k==1 then 
  minround()
  endif


измени на

Code: Select all

  if k==1 and uo.weight<MaxVes then 
  minround()
  endif


Ну если честно то это условие тоже не из лучших решений! когда у чара наступает перевес он идёт по всем координатам до конца и только от последней координаты идёт к дому на выгруз учитывая то, что дом находится совершенно в другом конце! а если перевес наступает в начале макроса то он должен дойти до конца потом что бы начать копать идти в другой конец, честно говоря больше ходит чем капает) ну пока ничего лучшего нет попробую переставить дом около последней координаты!

Posted: 2006-02-06 23:16:47
by Grin
страный скрипт... никто не заметил, а тут рекурсия возникает...
хоть не жирная но скрипт сам посебе криво работает...

Posted: 2006-02-06 23:20:10
by GimFlex
нет рекурсии не будет =) он же не сможет макс вес выкопать за раз из тайла :)

Posted: 2006-02-06 23:26:05
by Grin
но все равно бредовый вариант...
и разбиратся надо с мейном. насколько я понимаю мейн предоставлен не полностью

Posted: 2006-02-07 12:38:55
by Balu
Grin wrote:но все равно бредовый вариант...
и разбиратся надо с мейном. насколько я понимаю мейн предоставлен не полностью


В мэйне только координаты типа go(xxxx,xxxx,x) последняя координата в мэйне сундук куда надо выкладывать руду! вот и весь мэйн!

Posted: 2006-02-07 23:30:06
by Grin
чар должен отходить с переполнением... или ты вес не верно указал
или хз выкинь его...

Posted: 2006-02-09 21:49:01
by Balu
Grin wrote:чар должен отходить с переполнением... или ты вес не верно указал
или хз выкинь его...


Чар должен идти выкидывать когда у него 630 веса потом опять на туже точку где закончил и так далее!

Posted: 2006-02-10 04:01:47
by RiFeX aka Maybek
А не проще прокопать все кординаты, вернутся к началу (в начале сундук стоять должен), скинуть руду и по новой?

Posted: 2006-02-10 18:44:32
by Balu
RiFeX aka Maybek wrote:А не проще прокопать все кординаты, вернутся к началу (в начале сундук стоять должен), скинуть руду и по новой?


вот так и надо, только от последней точки или когда у него перевес он идет к сундуку сразу имея одну координату к которой надо идти, из за чего сбивается и застревает среди деревьев и камней, потому и хочу что бы он ходил туда и обратно уже по намеченным координатам! вот как только это сделать не знаю и w;t несколько дней тут никто дельного не сказал , все только тупые вопросы задают!

Posted: 2006-02-10 19:37:09
by GimFlex
недавно также капал как ты говоришь и после перевеса он возвращался но скрипт сложный получился поэтому я пришел к выводу самое лучшее это следущий алгоритм:
1.идем от начала к сундуку и капаем
2.если перевес у чара то идем к сундуку вдоль скалы не капая
3.скидываем все у сундука
4.возвращаемся в начало

Posted: 2006-02-10 20:06:07
by Balu
по такому алгаритму и я копаю сейчас! но это не очень рационально ибо если перевес начинается в начале он идет до конца потом идет обратно к сундуку и опять на начало!

Posted: 2006-02-10 20:20:03
by GimFlex
не так уж много времени это и занимает

Posted: 2006-02-10 21:06:58
by Balu
Question wrote:не так уж много времени это и занимает


Ну согласись могло бы быть и лучше! я стремлюсь сделать скрипт более рациональным!

Posted: 2006-02-10 21:12:19
by GimFlex
Balu wrote:
Question wrote:не так уж много времени это и занимает


Ну согласись могло бы быть и лучше! я стремлюсь сделать скрипт более рациональным!


не знаю может это и не самый рациональный способ

Posted: 2006-02-10 21:16:43
by Grin
Лутше так на чать обрабатывать скалу заново
покрайней мере 2 причины..
до предыдущей точки путь не в доль скалы...
Ресурсы могли уже обновится за это время и рациональней сразу начать собирать чем идти окольным путем...

Posted: 2006-02-10 21:22:26
by GimFlex
Grin wrote:Лутше так на чать обрабатывать скалу заново
покрайней мере 2 причины..
до предыдущей точки путь не в доль скалы...
Ресурсы могли уже обновится за это время и рациональней сразу начать собирать чем идти окольным путем...


вово и я про то ведь смысл капалки вдоль скалы в том чтоб капать вдоль нее до тех пор пока ресурсы не обновяться а если капалка больше то кпд ни на проц не увеличится :)