Скрипт на Мининг

Anything and all.

Moderators: Murderator+, Murderator

Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Скрипт на Мининг

Post by Mordor »

Помогите разобраться что не так... выдает ошибку... Я взял несколько скриптов и пытаюсь соединить их в один т.к. тот скрипт который мне нужен (а именно, чтоб ходил по шахте обкапывал все клетки вокруг, возвращался к банку и складывал всю руду в вэлт в банке) я не нашел... Может поможете мне немного его подправить? Заранее спасибо.

Code: Select all

# 1) Запускаем функцию sub record_path() 
# 2) Медленно при помощи клавиатуры ходим по желаемому маршруту копания 
# 3) При прохождении всего маршрута (желательно вернуться на исходную позицию... И желательно запомнить ее расположение) пишем просто слово stop 
# 4) Появится окошко ТЕКСТ. Там вы увидите набор примерно такого вида 9s9d8e4k6g 
# 5) Копируем его и вставляем в кавычки в поля var path="ТУТ ВСТАВИТЬ" в функции main(). 
# 6) В функции sub record_path() поле var path="" оставить без изменений (пустым) 
# 7) В обжект тайпах прописать тип pickaxe на кирку. Либо, у кого дойдут руки, отредактировать этот скрипт и вставить запрос на кирку прямо в клиенте (прим. ВЕТЕРАН). 
# 8) Скрипт писал не я. 
########################################################### 
#   Main Mining Function! Conf. Needed (look above) 
############################################################ 
sub go_mining() 
   var cycle=1 # 1 - зациклировать, 0 - нет 
   var path="9i2i3o9l2l2k" # все в кавычках очистить вначале скрипта 
   var test=0 
   var i=0 
   var j 
VAR UnloadBox='0x4000b61e' ; ID containera 
VAR UnloadBag='0x4000df13' ; ID Meshka 
VAR Lopata='0x4000be70' ; ID kirki&lopati
VAR MaxWeight=400 ; vash maksimal'niy ves 
VAR MyX, MyY, MyZ
MyX = 238 
MyY = 268
MyZ = UO.GetZ()
  ToHide() 
  Wait(1000) 
   UO.DeleteJournal()    
   While i<LEN(path) 
      if VAL(path[i]) then 
         j=VAL(path[i]) 
         i=i+1 
      else 
         j=1 
      endif 

      Repeat 
         if test<>1 then 
            UO.DeleteJournal() 
            mine_spot() 
         end if        

         UO.Print("New Location!") 
         if not make_step(path[i]) then 
            UO.Print("Probably Stuck!") 
            UO.Print("Hope it is a Worldsave") 
         endif 
         j=j-1 
      Until j==0 
        
      i = i + 1 
      if cycle && i==LEN(path) then 
         i=0 
      endif 
   Wend 
end sub 

############################################################ 
#   Auxilliar Function. Little mod needed (look above) 
############################################################ 
sub mine_spot()
var Timer
VAR UnloadBox='0x4000b61e' ; ID containera 
VAR UnloadBag='0x4000df13' ; ID Meshka 
VAR Lopata='0x4000be70' ; ID kirki&lopati
VAR MaxWeight=400 ; vash maksimal'niy ves 
VAR MyX, MyY, MyZ
MyX = 238 
MyY = 268
MyZ = UO.GetZ()
var wrema=uo.timer()
Var i, f, copX, copY
copX=uo.getX()
copY=uo.getY()
For i = copX-2 to copX+2
For f = copY-2 to copY+2

   While NOT UO.InJournal("no ore") AND NOT UO.InJournal("far away") AND NOT UO.InJournal("in rock")# AND NOT UO.InJournal("Iron") AND NOT UO.InJournal("Copper") AND NOT UO.InJournal("Bronze") AND NOT UO.InJournal("Rusty") AND NOT UO.InJournal("no line") 
   UO.Print("Now Mining In: "+str(copX-i)+" "+str(copY-f))
   CheckLag() 
   ToHide()
   UO.DeleteJournal() 
   UO.WaitTargetTile("1339",STR(i),STR(f), str(MyZ)) 
   UO.UseObject(Lopata)
   Timer=0
   Repeat 
   While NOT UO.InJournal("You put") AND NOT UO.InJournal("but fail") AND NOT UO.InJournal("no ore") AND NOT UO.InJournal("far away") AND NOT UO.InJournal("in rock") AND NOT UO.InJournal("no line") AND NOT UO.InJournal("nothing") AND NOT UO.InJournal("cannot") AND NOT Timer>=50 
Wait(500) 
Timer=Timer+1 
Wend 
   If UO.Weight>MaxWeight then 
WalkN(361,333,UnloadBox) 
Unload(UnloadBag) 
WalkN(MyX,MyY,'')
else
wait(100)
Endif
next
next
if uo.timer()>= wrema + 3000 then
uo.usetype('0x097b','0x0000')
            uo.usetype('0x0c6d','0x0000')
            wait(1000)
            edatimer=uo.timer()
return 0
   Wend  
end sub 

############################################################ 
#   Main Path-Recording function! 
############################################################ 
sub record_path() 
   var x 
   var y 
   var path="" 
   UO.DeleteJournal() 
   Repeat 
      x=UO.GetX() 
      y=UO.GetY() 
      if waitNewPos(x,y) then 
         path=path+extract_dir(x,y,UO.GetX(),UO.GetY()) 
      endif 
   Until UO.InJournal("stop") 
   path = compressPath(path) 
   UO.TextClear() 
   UO.TextOpen() 
   UO.TextPrint("Your path is:") 
   UO.TextPrint(path) 
end sub 

############################################################ 
#   Auxilliar sub. 
############################################################ 
sub send_step(keycode,dir) 
   var x = UO.GetX() 
   var y = UO.GetY() 
   var timeout = 0 
   if UO.GetDir()<>dir then 
      UO.Press(keycode) 
      Repeat 
         wait(50) 
      Until UO.GetDir()==dir 
   endif 
   UO.Press(keycode) 
   Repeat 
      timeout=timeout+50 
      wait(50) 
   Until x<>UO.GetX() || y<>UO.GetY() || timeout>2000 
   if timeout>2000 then 
      return 0 
   endif 
   return 1 
end sub 

############################################################ 
#   Bunch of auxilliar subs. No need to change anything! 
############################################################ 
sub waitNewPos(x,y) 
   while x==UO.GetX() && y==UO.GetY() 
      if UO.InJournal("stop") then 
         return 0 
      endif 
   wend 
   return 1 
end sub 

sub compressPath(path) 
   Var i=0 
   Var j=0 
   Var newPath="" 
   while i<LEN(path) 
      j=1 
      while path[i]==path[i+1] AND j<9 
         i=i+1 
         j=j+1 
      wend 
      if j==1 then 
         newPath=newPath+path[i] 
      else 
         newPath=newPath+STR(j)+path[i] 
      endif 
      i=i+1 
   wend 
   return newPath 
end sub 

sub extract_dir(x,y,a,b) 
   if x>a then 
      if y==b then 
         return "i" 
      else 
         if y>b then 
            return "n" 
         else 
            return "w" 
         endif 
      endif 
   else 
      if x<a then 
         if y==b then 
            return "l" 
         else 
            if y>b then 
               return "e" 
            else 
               return "s" 
            endif 
         endif 
      else 
         if y>b then 
            return "o" 
         else 
            return "k" 
         endif 
      endif 
   endif 
end sub 

sub make_step(dir) 
   if dir=="e" then 
      send_step(39,1) 
      return 1 
   endif 
   if dir=="l" then 
      send_step(34,2) 
      return 1 
   endif 
   if dir=="s" then 
      send_step(40,3) 
      return 1 
   endif 
   if dir=="k" then 
      send_step(35,4) 
      return 1 
   endif 
   if dir=="w" then 
      send_step(37,5) 
      return 1 
   endif 
   if dir=="i" then 
      send_step(36,6) 
      return 1 
   endif 
   if dir=="n" then 
      send_step(38,7) 
      return 1 
   endif 
   if dir=="o" then 
      send_step(33,0) 
      return 1 
   endif 
   if dir=="d" then 
      While UO.Count("0x19b9") 
         UO.Drop("0x19b9") 
         wait(1000) 
      Wend 
      wait(200) 
      return 1 
   endif 
   UO.Print("Recall Time!") 
   return 0 
end sub 

sub Unload(UnloadBox) 
VAR Exit,i 
DIM Ore[4] 
Ore[0]='0x19B7' ; 1 ore 
Ore[1]='0x19BA' ; 2 ore 
Ore[2]='0x19B8' ; 3 ore 
Ore[3]='0x19B9' ; 4 and more ore 
UO.SetReceivingContainer(UnloadBox) 
ToHide() 
For i=0 to 3 
Exit=0 
While Exit<>1 
UO.FindType(Ore[i]) 
If UO.GetQuantity('finditem')>0 then 
UO.Grab('all','finditem') 
CheckLag() 
Wait(1000) 
Else 
Exit=1 
Endif 
Wend 
Next 
UO.UnSetReceivingContainer() 
end sub 
  
sub ToHide() 
While NOT UO.Hidden() 
UO.DeleteJournal() 
UO.Exec('warmode 0') 
UO.UseSkill('Stealth') 
Repeat 
Wait(100) 
Until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preoccupied') OR UO.Dead() 
Wend 
end sub 
  
sub CheckLag() 
UO.DeleteJournal() 
UO.Click('backpack') 
repeat 
Wait(50) 
until UO.InJournal('backpack') 
end sub 
  
#=================================================   ============= 
# WalkN(X,Y,Serial) - char is walking by dX and dY step 
# sub using Home, End, PgUp, PgDown keys 
# d'not rebind this key from default action! 
# serial - Serial of target or "" - string 
# walkwait - delay after keypress 
# Example: 
# WalkN(2080,2113,'') - go to coordinates 
# WalkN(0,0,'0x12345678') - go to target position 
#-------------------------------------------------------------- 
sub WalkN(x,y,Target) 
VAR i,StepSucess 
VAR dx,dy,Exit=0 
  
While Exit<>1 
ToHide() 
If Target<>"" Then 
dx=UO.GetX(Target)-UO.GetX() 
dy=UO.GetY(Target)-UO.GetY() 
UO.Print("Target locked!") 
If UO.GetDistance(Target)<2 Then 
Exit=1 
Endif 
Else 
dx=x-UO.GetX() 
dy=y-UO.GetY() 
If dx==0 AND dy==0 Then 
Exit=1 
Endif 
  
Endif 
  
If dx<>0 AND dy<>0 Then 
If dx>0 AND dy>0 Then 
StepSucess=Go(3,40,300) ;SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300) ;WN - UpArrow 
StepSucess=Go(1,39,300) ;NE - RightArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300) ;SW - LeftArrow 
Endif 
Endif 
Endif 
  
If dx>0 AND dy<0 Then 
StepSucess=Go(1,39,300) ;NE - RightArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300) ;SW - LeftArrow 
StepSucess=Go(3,40,300) ;SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300) ;WN - UpArrow 
Endif 
Endif 
Endif 
  
If dx<0 AND dy>0 Then 
StepSucess=Go(5,37,300) ;SW - LeftArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300) ;NE - RightArrow 
StepSucess=Go(7,38,300) ;WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300) ;SE - DownArrow 
Endif 
Endif 
Endif 
  
If dx<0 AND dy<0 Then 
StepSucess=Go(7,38,300) ;WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300) ;SE - DownArrow 
StepSucess=Go(5,37,300) ;SW - LeftArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300) ;NE - RightArrow 
Endif 
Endif 
Endif 
  
Endif 
  
If dx<>0 AND dy==0 Then 
If dx>0 Then 
StepSucess=Go(2,34,300) ;E - PgDown 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300) ;SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300) ;NE - RightArrow 
Endif 
StepSucess=Go(2,34,300) ;E - PgDown 
Endif 
Endif 
  
If dx<0 Then 
StepSucess=Go(6,36,300) ;W - Home 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300) ;WN - UpArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300) ;SW - LeftArrow 
Endif 
StepSucess=Go(6,36,300) ;W - Home 
Endif 
Endif 
Endif 
  
  
If dx==0 AND dy<>0 Then 
If dy>0 Then 
StepSucess=Go(4,35,300) ;S - End 
If StepSucess==-1 Then 
StepSucess=Go(3,40,300) ;SE - DownArrow 
If StepSucess==-1 Then 
StepSucess=Go(5,37,300) ;SW - LeftArrow 
Endif 
StepSucess=Go(4,35,300) ;S - End 
Endif 
Endif 
  
If dy<0 Then 
StepSucess=Go(0,33,300) ;N - PgUp 
If StepSucess==-1 Then 
StepSucess=Go(1,39,300) ;NE - RightArrow 
If StepSucess==-1 Then 
StepSucess=Go(7,38,300) ;WN - UpArrow 
Endif 
StepSucess=Go(0,33,300) ;N - PgUp 
Endif 
Endif 
Endif 
Wend 
end sub 
  
  
sub Go(dir,key,walkwait) 
VAR x,y, OldDir 
  
x=UO.GetX() 
y=UO.GetY() 
OldDir=UO.GetDir() 
  
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() 
Endif 
  
If x==UO.GetX() AND y==UO.GetY() AND OldDir<>UO.GetDir() Then 
UO.Press(key) 
wait(walkwait) 
Endif 
  
If x==UO.GetX() AND y==UO.GetY() Then 
CheckLag() 
Endif 
  
If x==UO.GetX() AND y==UO.GetY() Then 
UO.Print("Zasada!") 
return -1 
Else 
return 1 
Endif 
end sub 
 
  
#=================================================   ============= 
# Recconector 
#-------------------------------------------------------------- 
sub Reconnector() 
var ReconnectTime, RFlag 
ReconnectTime = '0' 
RFlag = 1 
Repeat 
While (UO.ObjAtLayer('Bpack') == '') 
if RFlag Then 
ReconnectTime = MakeTime() 
RFlag = 0 
endif 
Wait(20000) # WorldSave Protection 
UO.Say('') 
Wait(3000) 
UO.Say('') 
Wait(3000) 
UO.Say('') 
Wait(3000) 
UO.LDblClick(357,164) 
UO.LClick(616,459) 
Wait(3000) 
WEnd 
Wait(3000) 
if (RFlag == 0) and (ReconnectTime <> '0') Then 
;UO.Exec('terminate all') 
;UO.Exec('exec autoload') 
UO.TextOpen() 
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) 
RFlag = 1 
ReconnectTime = '0' 
endif 
Until false 
end sub 
  
sub MakeTime() 
VAR D, T, Ret, i 
Ret = STR(UO.Time()) 
T = "" 
For i = 0 To Len(Ret) 
T = Ret[Len(Ret)-i] + T 
If (I == 2) OR (I == 4) Then 
T = ":" + T 
EndIf 
Next 
Ret = STR(UO.Date()) 
D = "" 
For i = 0 To Len(Ret) 
D = Ret[Len(Ret)-i] + D 
If (I == 2) OR (I == 4) Then 
D = "." + D 
EndIf 
Next 
Ret = T + " @ " + D 
RETURN Ret 
end sub
Just Kill Bill!!!
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

up
Just Kill Bill!!!
omi4
Posts: 457
Joined: 2005-07-10 21:53:05

Post by omi4 »

Три ходилки в одном скрипте это мало, нужно еще минимум две вкарячить.
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

Я там уже разабраться не могу что к чему может поможете немного удалите что не надо?
Just Kill Bill!!!
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

А нужно чтоб именно ходил к банку пешком?

Если да, то скажи где копаешь, где ресаешся, как открывается банк, лезутли пк и элемы? Желательно основные точки маршрутов (координаты). И я научу тебя собирать скрипты как конструктор лего =)
Last edited by slonopotam on 2006-11-29 17:11:54, edited 1 time in total.
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

ага... рун нету пока на шарде... только открылся...
Just Kill Bill!!!
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Какой город? Какие пещеры? Сколько их? Знаешь как определить координаты? А как найти узловые точки маршрута? Чем копать, лопатой или киркой? Максимально на сколько далеко можно копать, 1 тайл, 2 тайла, 4 тайла? Пиши.
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

Город НТ. Пещеры обычные. Написан скрипт на обкопку одной пещеры... Координаты уже забиты в скрипт. И банка и начальной точки в пещере. Узловые точки маршрута обкопки находяться в скрипте копки. Путь до банка без узловых точек. Не знаю как ето наскриптить. Копать можно максимум на 3 тайла вокруг себя. Под собой копать нельзя. Дорога от пещеры до банка почти прямая. Ворот, дверей на пути нет.
Just Kill Bill!!!
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Напиши тут узловые точки в пешере. И координаты входа в пещеру. Координаты банка. Как открывается банк? Можно копать киркой?

З.Ы. И так просто, для общего развития, что за шард?
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

Координаты входа в пещеру 250 266. Узловые точки: 243 267, 234 266, 234 272, 242 271, 243 267. Координаты банка 363 332. Банк открывается словом bank. Копать можно только киркой. Шард называется Абсолют.
Just Kill Bill!!!
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Вот мой старый скрипт похожий. На Антаресе им копаю в НТ 8)
Это пример выдирания из чужих скриптов. Просто встань у банка, положи в пак кирку и запусти скрипт. Пока не выключишь, он так и будет ходить туда, сюда и копать.

Code: Select all

VAR i = 1
VAR Ore = '0x19B9' ; Тип кучки руды
VAR Picsar = '0x0E85' ; кирка 
VAR SteikFat = '0x097B' ; рыбные стейки 
VAR Sunduk = '0x40801FE0' ; ИД сундука с инструментом (кирка) 
VAR Sunduk2 = '0x40801FE0' ; ИД сундука для ресурсов 

sub hustle()  
While i < 3
Main() 
wait(5000)
Wend
end sub

Sub Main() 
;идем к банку 
GoToTile( 363, 332, 1, False ) 
wait( 5000 )  ; пауза 
UO.Say( 'Bank' ) ; открываем банк 
wait( 5000 ) ; пауза 
; ищем что поесть 
   If UO.Count( SteikFat ) < 10 Then ; проверяем наличие стейков в паке 
      UO.FindType( SteikFat,'-1',Sunduk) ; ищем стейки в сундуке 
   If UO.FindCount () > 0 Then ; проверяем нашли или нет 
      UO.MoveItem( 'finditem','10' ) ; берем 10 стейков в пак 
   wait (1000) ;пауза 
   Else ; иначе 
      UO.Print( 'Нет стейков' ) ; ругаемся 
   Endif 
   Endif
; едим
      UO.UseType( SteikFat )
      wait (1000) ;пауза
      UO.UseType( SteikFat )
      wait (1000) ;пауза
      UO.UseType( SteikFat )
      wait (1000) ;пауза
; ищем кирку 
   If UO.Count( Picsar ) < 2 Then ; проверяем наличие кирки в паке 
      UO.FindType( Picsar,'-1',Sunduk) ; ищем кирку в сундуке 
   If UO.FindCount () > 0 Then ; проверяем нашли или нет 
      UO.MoveItem( 'finditem','2' ) ; берем 2 кирки в пак 
wait (1000) ;пауза 
   Else ; иначе 
      UO.Print( 'Нет кирки' ) ; ругаемся 
   Endif 
   Endif 
; начинаем копать 
; идем на старт
   GoToTile( 250, 266, 1, False ) 
    wait(1000) ; пауза 
; идем к точке копания №1 
   GoToTile( 243, 267, 1, False ) 
    wait(1000) ; пауза 
;запускаем скрипт на мининг вокруг чара 
   Mining() 
    wait(1000) ; пауза 
; идем к точке копания №2 
   GoToTile( 234, 266, 1, False ) 
    wait(1000) ; пауза 
;запускаем скрипт на мининг вокруг чара 
   Mining() 
    wait(1000) ; пауза 
; идем к точке копания №3 
   GoToTile( 234, 272, 1, False ) 
    wait(1000) ; пауза 
;запускаем скрипт на мининг вокруг чара 
   Mining() 
    wait(1000) ; пауза 
; идем к точке копания №4 
   GoToTile( 242, 271, 1, False ) 
    wait(1000) ; пауза 
;запускаем скрипт на мининг вокруг чара 
   Mining() 
    wait(1000) ; пауза 
; идем к точке копания №5 
   GoToTile( 243, 267, 1, False ) 
    wait(1000) ; пауза 
;запускаем скрипт на мининг вокруг чара 
   Mining() 
    wait(1000) ; пауза 
; идем к банку 
   GoToTile( 363, 332, 1, False ) 
    wait(3000) ; пауза 
      UO.Say( 'Bank' ) ; открываем банк 
    wait( 5000 ) ; пауза 
      UO.MoveItem( '0x19B9','-1','Sunduk2' ) 
    wait( 1000 ) ; пауза 
   DropOre()
    wait( 1000 ) ; пауза    
end sub

Sub GoToTile( OX, OY, N, S ) 
   VAR myx, myy, MD, J 
   VAR Lx1, Ly1 
   VAR Lx2, Ly2 
   VAR Sx, Sy 
   VAR T 
   VAR Des = N 
   VAR MoveDelay = 100 
   J = 1 
   MD = MoveDelay * 1.5 
   myx = uo.getx() 
   myy = uo.gety() 
   MoveOnce( GetDir( uo.getx(), uo.gety(), ox, oy), MD, False) 
   Sx = 0 
   Sy = 0 
   Lx1 = uo.getx() / 2 
   Ly1 = uo.gety() / 2 
   Lx2 = Lx1 / 2 
   Ly2 = Ly1 / 2 
   T = UO.Timer() 
   If (GetDistance(ox, oy) <> N) OR ( (NOT S) AND GetDistance(ox, oy) > N ) Then 
      UO.Exec('exec PermResend') 
   EndIf 
   While ( (GetDistance(ox, oy) <> N) OR ((NOT S) and GetDistance(ox, oy) > N) ) and ( OX >= 0 ) and ( OY >= 0 ) 
      If ( (UO.Timer() - T) * 15 > MoveDelay ) Then 
         T = UO.Timer() 
         Lx2 = Lx1 
         Ly2 = Ly1 
         Lx1 = myx 
         Ly1 = myy 
         myx = uo.getx() 
         myy = uo.gety() 
      endIf 
      MD=MoveDelay 
      If ((OX-uo.getx())*(OX-uo.getx())+(OY-uo.gety())*(OY-uo.gety())>0) Then 
         MD = MD * 3 / GetDistance( ox, oy ) 
      EndIf 
      wait(MD) 
      If GetDistance( OX, OY ) > Des Then 
         MoveOnce(GetDir(uo.GetX(),uo.GetY(),ox,oy),MD,False) 
      Else 
         If S Then 
            If GetDistance(OX,OY)<Des Then 
               If GetDistance(OX,OY)<>0 Then 
                  MoveOnce(GetDir(ox,oy,uo.GetX(),uo.GetY()),MD,False) 
               Else 
                  MoveOnce(GetDir(uo.GetX(),uo.GetY(),Lx2,Ly2),MD,False) 
               EndIf 
            EndIf 
         EndIf 
      EndIf 
      If GetDistance(OX,OY)<>Des Then 
         If (Lx2==uo.getx()) and (Ly2==uo.gety()) Then 
            If (Sx<>uo.getx()) or (Sy<>uo.gety()) Then 
               J=1 
            EndIf 
            J=J+1 
            UO.Resend() 
            Sx = uo.getx() 
            Sy = uo.gety() 
            Stun(ox,oy,J) 
         EndIf 
      EndIf 
   Wend 
   UO.Exec( 'terminate PermResend' ) 
endsub 
; 
; ============ MOVEONCE === 
; Процедура MoveOnce - хождение в определённую сторону 
; Направления: 
; Система направлений по клавишам Нумпада 
; 8 = 1 | 2 = -1 
; 9 = 2 | 1 = -2 
; 6 = 3 | 4 = -3 
; 3 = 4 | 7 = -4 
; 
; Такая система позволяет с лёгкостью получать направление, обратное 
; данному... 
; 
Sub MoveOnce( Dir, Del, Rev ) 
   VAR Num 
   Var MoveNumber = 1 
   If Rev Then 
      Num = MoveNumber + 1 
   Else 
      Num = MoveNumber 
   EndIf 
   If ( Num > 0 ) and ( Dir <> 0 ) Then 
      If Dir == 1 Then 
         UO.Press( 38, Num, Del ) 
      EndIf 
      If Dir == 2 Then 
         UO.Press( 33, Num, Del ) 
      EndIf 
      If Dir == 3 Then 
         UO.Press( 39, Num, Del ) 
      EndIf 
      If Dir == 4 Then 
         UO.Press( 34, Num, Del ) 
      EndIf 
      If Dir == -1 Then 
         UO.Press( 40, Num-1, Del ) 
      EndIf 
      If Dir == -2 Then 
         UO.Press( 35, Num, Del ) 
      EndIf 
      If Dir == -3 Then 
         UO.Press( 37, Num, Del ) 
      EndIf 
      If Dir == -4 Then 
         UO.Press( 36, Num, Del ) 
      EndIf 
      If Rev Then 
         If Dir <> -1 Then 
            UO.Press( 40, 1, Del ) 
         EndIf 
      EndIf 
   EndIf 
endsub 
; 
; ============== GETDIR === 
; Функция GetDir возвращает направление, по которому надо идти 
; к координате 
; 
Sub GetDir( myx, myy, ox, oy ) 
   VAR I, J 
   J = 0 
   VAR X = ox - myx 
   VAR Y = oy - myy 
   I = GetQDir( Abs(X), Abs(Y) ) 
   If X >= 0 Then 
      If Y >= 0 Then 
         If I == 1 Then 
            J = -2 
         Else 
            If I == 2 Then 
               J = -1 
            Else 
               If I == 3 Then 
                  J = 4 
               EndIf 
            EndIf 
         EndIf 
      Else 
         If I == 1 Then 
            J = 2 
         Else 
            If I == 2 Then 
               J = 3 
            Else 
               If I == 3 Then 
                  J = 4 
               EndIf 
            EndIf 
         EndIf 
      EndIf 
   Else 
      If Y >= 0 Then 
         If I == 1 Then 
            J = -2 
         Else 
            If I == 2 Then 
               J = -3 
            Else 
               If I == 3 Then 
                  J = -4 
               EndIf 
            EndIf 
         EndIf 
      Else 
         If I == 1 Then 
            J = 2 
         Else 
            If I == 2 Then 
               J = 1 
            Else 
               If I == 3 Then 
                  J = -4 
               EndIf 
            EndIf 
         EndIf 
      EndIf 
   EndIf 
   RETURN J 
endsub 
; 
; =============== GETQDIR === 
; 
; 
Sub GetQDir( x, y ) 
   VAR Ep = 0.172 
   VAR J = 0 
   If X == 0 Then 
      J = 1 
   Else 
      If ( Y / X ) < Ep Then 
         J = 3 
      Else 
         If ( X / Y ) < Ep Then 
            J = 1 
         Else 
            J = 2 
         EndIf 
      EndIf 
   EndIf 
   RETURN J 
endsub 
; 
; ============== GETDISTANCE === 
; Функция GetDistance возвращает расстояние до координат 
; (как UO.GetDistance - до объекта) 
; 
; Почему так - потому что учим математику :) 
; 
Sub GetDistance( X, Y ) 
   VAR A, B, C 
   A = abs( X - UO.GetX() ) 
   B = abs( Y - UO.GetY() ) 
   If A > B Then 
      C = A 
   Else 
      C = B 
   EndIf 
   Return C 
endsub 
; 
; ============= PERP === 
; Функция Perp возвращает направление, перпендикулярное введённому 
; 
Sub Perp( Dir ) 
   VAR D = Dir 
   If Dir == 1 Then 
      D = 3 
   EndIf 
   If Dir == 2 Then 
      D = 4 
   EndIf 
   If Dir == 3 Then 
      D = -1 
   EndIf 
   If Dir == 4 Then 
      D = -2 
   EndIf 
   If Dir == -1 Then 
      D = -3 
   EndIf 
   If Dir == -2 Then 
      D = -4 
   EndIf 
   If Dir == -3 Then 
      D = 1 
   EndIf 
   If Dir == -4 Then 
      D = 2 
   EndIf 
   RETURN D 
endsub 
; 
; =============== STUN === 
; Обход препятствий 
; 
Sub Stun( X, Y, N ) 
   VAR I 
   VAR myx 
   VAR myy 
   VAR MoveDelay = 100 
   myx = uo.getx() 
   myy = uo.gety() 
   For I=1 to N 
      MoveOnce(perp(GetDir(myx,myy,x,y)),MoveDelay,False) 
   Next 
   Wait(MoveDelay) 
   UO.Resend() 
   If (myx==uo.getx()) and (myy==uo.gety()) Then 
      For I=1 to N 
         MoveOnce(-perp(GetDir(myx,myy,x,y)),MoveDelay,False) 
      Next 
      Wait(MoveDelay) 
      UO.Resend() 
   EndIf 
   If (myx==uo.getx()) and (myy==uo.gety()) Then 
      For I=1 to N 
         MoveOnce(-GetDir(myx,myy,x,y),MoveDelay,False) 
      Next 
      Wait(MoveDelay) 
      Stun(x,y,N) 
   EndIf    
endsub 
; 
; ============= ABS === 
; Убирает знак минуса в отрицательных числах 
; 
Sub abs( a ) 
   VAR b 
   If a < 0 Then 
      b = -a 
   Else 
      b = a 
   endif 
   return b 
endsub 
; 
; ============== PERMRESEND === 
; 
Sub PermResend() 
   Var Mn = 9 
   VAR MoveDelay = 100 
   Repeat 
      UO.Resend() 
      Wait( MoveDelay * Mn ) 
   Until ( 1 > 2 ) 
endsub

Sub Mining() 
var x,y,z, n
VAR LastTimer 
UO.Set('finddistance','3')
n=0
z=UO.GetZ("self") 
  for x=-3 to 3 
     for y=-3 to 3 
        UO.Print(str(x)+" "+str(y))
        Repeat 
           if UO.InJournal('TORMOZ') then
             pause()
           endif
           UO.DeleteJournal()
           UO.Warmode("0")
           UO.WaitTargetTile("1341",STR(UO.GetX()+x),STR(UO.GetY()+Y),str(z)) 
           UO.UseType('0x0E85')
           LastTimer=UO.Timer() 
           Repeat
              wait(500)
           Until UO.InJournal("You put") or UO.InJournal("can't see") or UO.InJournal("heavy") or UO.InJournal("location") or UO.InJournal("no ore") or UO.InJournal("but fail") or UO.InJournal("far away") or UO.InJournal("in rock") or UO.InJournal("must wait") or UO.InJournal("nothing") or UO.InJournal("elsewhere") or UO.InJournal("where it") OR UO.Timer()>LastTimer+200
           if UO.InJournal("You put") then 
               n=0
           else
              n=n+1
           endif
        Until UO.InJournal("nothing") or UO.InJournal("elsewhere") or UO.InJournal("no ore here") or UO.InJournal("location") or UO.InJournal("far away") or UO.InJournal("in rock") or UO.InJournal("where it") or n>=5
     next 
  next
end sub



;скрипт на выкладывание руды
Sub DropOre() 
uo.Print('Начинаем разгрузку.') 
if uo.Waiting() then 
uo.CancelTarget() 
end if 
var a,Exit 
dim Ruda[1] 
Ruda[0]=0x19B9 
uo.Print('Выкладываем руду.') 
uo.SetReceivingContainer(Sunduk2) 
wait(500) 
for a=0 to 0 
Exit=0 
repeat 
uo.FindType(Ruda[a]) 
if uo.GetQuantity('finditem')>0 then 
uo.Grab('0','finditem') 
wait(1500)
else 
Exit=1 
end if 
until Exit==1 
next 
if SteikFat==1 then 
SteikFat() 
end if 
uo.UnSetReceivingContainer(Sunduk2) 
uo.Print('Руда Выложена.') 
end sub

Sub SteikFat() 
ToEat() 
end sub

Sub ToEat() 
uo.SetReceivingContainer('backpack') 
Open(Sunduk) 
uo.FindType(SteikFat,'-1',Sunduk) 
uo.Grab('5','finditem') 
wait(500) 
repeat 
Checklag() 
uo.UseType(SteikFat) 
wait(1000) 
until uo.InJournal('You are simply too full to eat any more!') 
uo.UnsetReceivingContainer() 
end sub

Sub CheckLag() 
if uo.Waiting()>0 then 
uo.Exec('canceltarget') 
end if 
uo.DeleteJournal() 
uo.Click('backpack') 
repeat 
wait(50) 
until uo.InJournal('backpack') 
end sub
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

Надо делать узлы чтоб до пещеры дойти... В стену упирается... Может поможете?
Just Kill Bill!!!
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Найди в скрипте строчки

Code: Select all

; начинаем копать 
; идем на старт 
   GoToTile( 250, 266, 1, False ) 
250, 266 это координаты входа в пешеру. Найди узловые точки пути от банка к пешере и довавь их так. Вместо ? пиши координаты от банка к пещере

Code: Select all

; начинаем копать 
; идем на старт 

GoToTile( ???, ???, 1, False )  
GoToTile( ???, ???, 1, False )  
GoToTile( ???, ???, 1, False ) 
GoToTile( ???, ???, 1, False )  

GoToTile( 250, 266, 1, False )  ; последняя точка это вход
Так можно добавлять их или убирать.
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

Так понятно... вроде работает... кое что поменял еще... Возник вопрос как вставить в main проверку на вес чтоб если перевес сразу возвращался в банк...
Just Kill Bill!!!
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

А это фик его знает. Скрипты на мининг, люмб и ходилки писать не умею. Поэтому использую чужие. Могу только предложить запускать еще 1 скрипт с проверкой. Чтоб при перевесе терминатить все и идти к банку.
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Nmy
Expert!
Posts: 2152
Joined: 2005-09-14 15:31:58
Location: Latvia

Post by Nmy »

:lol: Омич улыбнул

Code: Select all

if uo.weight > maxweight then
unload()
endif
скрипт странный... обычно есть целый код для разгрузки, тут все через попу...

Code: Select all

Sub DropOre()
uo.Print('Начинаем разгрузку.')
if uo.Waiting() then
uo.CancelTarget()
end if
var a,Exit
dim Ruda[1]
Ruda[0]=0x19B9
uo.Print('Выкладываем руду.')
uo.SetReceivingContainer(Sunduk2)
wait(500)
for a=0 to 0
Exit=0
repeat
uo.FindType(Ruda[a])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
Exit=1
end if
until Exit==1
next
if SteikFat==1 then
SteikFat()
end if
uo.UnSetReceivingContainer(Sunduk2)
uo.Print('Руда Выложена.')
end sub
:lol: :mrgreen:
29 строк чтоб выгрузить 1тип руды...
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Работает :D
Правда разгружает ток большие кучки (по типу), на маленькие по 1 и 2 не писал =)
К томуже клеил я этот скрипт из трех.
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

Вставил что ты сказал и теперь надо как то сделать так чтоб он main заново запускал как до банка доходит и все складывает.
Just Kill Bill!!!
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Вот эта штука в самом началее запускает скрипт Main().

Code: Select all

sub hustle()  
While i < 3 
Main() 
wait(5000) 
Wend 
end sub 
В самом начале не Main() а hustle() запускай.
[b][color=green]ДРВ[/color][/b]
[color=blue]Spoiler[/color]
_________________
[b][color=green]Антарес[/color][/b]
[color=blue]Spoiler[/color]|[color=blue]Gostrabaiter[/color]|[color=red]Umhra[/color]|[color=red]Slog[/color]
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

Я так и делаю :)
Just Kill Bill!!!
Post Reply