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

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

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

Post 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 
Last edited by Balu on 2006-02-07 12:40:38, edited 2 times in total.
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

иди от конца к сундуку пришел к сундуку выложил все далее идешь назад в чем проблемма то??????
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

Post by Balu »

Question wrote:иди от конца к сундуку пришел к сундуку выложил все далее идешь назад в чем проблемма то??????
Проблема в том, что когда идёшь до конца и у чара перевес вся руда что он капает сыпется под ноги и только дойдя до последней координаты он идет выгружаться. очень много теряю руды пока он до конца доходит
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

вот люди млин ну капай не на всем участке или сделай доп условие

Code: Select all

  if k==1 then 
  minround() 
  endif 
измени на

Code: Select all

  if k==1 and uo.weight<MaxVes then 
  minround() 
  endif 
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

Post 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 
Ну если честно то это условие тоже не из лучших решений! когда у чара наступает перевес он идёт по всем координатам до конца и только от последней координаты идёт к дому на выгруз учитывая то, что дом находится совершенно в другом конце! а если перевес наступает в начале макроса то он должен дойти до конца потом что бы начать копать идти в другой конец, честно говоря больше ходит чем капает) ну пока ничего лучшего нет попробую переставить дом около последней координаты!
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

страный скрипт... никто не заметил, а тут рекурсия возникает...
хоть не жирная но скрипт сам посебе криво работает...
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

нет рекурсии не будет =) он же не сможет макс вес выкопать за раз из тайла :)
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

но все равно бредовый вариант...
и разбиратся надо с мейном. насколько я понимаю мейн предоставлен не полностью
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

Post by Balu »

Grin wrote:но все равно бредовый вариант...
и разбиратся надо с мейном. насколько я понимаю мейн предоставлен не полностью
В мэйне только координаты типа go(xxxx,xxxx,x) последняя координата в мэйне сундук куда надо выкладывать руду! вот и весь мэйн!
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

чар должен отходить с переполнением... или ты вес не верно указал
или хз выкинь его...
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

Post by Balu »

Grin wrote:чар должен отходить с переполнением... или ты вес не верно указал
или хз выкинь его...
Чар должен идти выкидывать когда у него 630 веса потом опять на туже точку где закончил и так далее!
RiFeX aka Maybek
Posts: 56
Joined: 2005-02-27 19:47:55
Contact:

Post by RiFeX aka Maybek »

А не проще прокопать все кординаты, вернутся к началу (в начале сундук стоять должен), скинуть руду и по новой?
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

Post by Balu »

RiFeX aka Maybek wrote:А не проще прокопать все кординаты, вернутся к началу (в начале сундук стоять должен), скинуть руду и по новой?
вот так и надо, только от последней точки или когда у него перевес он идет к сундуку сразу имея одну координату к которой надо идти, из за чего сбивается и застревает среди деревьев и камней, потому и хочу что бы он ходил туда и обратно уже по намеченным координатам! вот как только это сделать не знаю и w;t несколько дней тут никто дельного не сказал , все только тупые вопросы задают!
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

недавно также капал как ты говоришь и после перевеса он возвращался но скрипт сложный получился поэтому я пришел к выводу самое лучшее это следущий алгоритм:
1.идем от начала к сундуку и капаем
2.если перевес у чара то идем к сундуку вдоль скалы не капая
3.скидываем все у сундука
4.возвращаемся в начало
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

Post by Balu »

по такому алгаритму и я копаю сейчас! но это не очень рационально ибо если перевес начинается в начале он идет до конца потом идет обратно к сундуку и опять на начало!
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

не так уж много времени это и занимает
Balu
Posts: 76
Joined: 2004-10-30 21:28:19

Post by Balu »

Question wrote:не так уж много времени это и занимает
Ну согласись могло бы быть и лучше! я стремлюсь сделать скрипт более рациональным!
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

Balu wrote:
Question wrote:не так уж много времени это и занимает
Ну согласись могло бы быть и лучше! я стремлюсь сделать скрипт более рациональным!
не знаю может это и не самый рациональный способ
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Лутше так на чать обрабатывать скалу заново
покрайней мере 2 причины..
до предыдущей точки путь не в доль скалы...
Ресурсы могли уже обновится за это время и рациональней сразу начать собирать чем идти окольным путем...
GimFlex
Expert!
Posts: 766
Joined: 2005-01-07 13:22:19
Contact:

Post by GimFlex »

Grin wrote:Лутше так на чать обрабатывать скалу заново
покрайней мере 2 причины..
до предыдущей точки путь не в доль скалы...
Ресурсы могли уже обновится за это время и рациональней сразу начать собирать чем идти окольным путем...
вово и я про то ведь смысл капалки вдоль скалы в том чтоб капать вдоль нее до тех пор пока ресурсы не обновяться а если капалка больше то кпд ни на проц не увеличится :)
Post Reply