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

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.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
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 тайла? Пиши.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
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 »

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

З.Ы. И так просто, для общего развития, что за шард?
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
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
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
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 )  ; последняя точка это вход


Так можно добавлять их или убирать.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
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 скрипт с проверкой. Чтоб при перевесе терминатить все и идти к банку.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
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 не писал =)
К томуже клеил я этот скрипт из трех.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
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() запускай.
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Mordor
Posts: 14
Joined: 2006-11-24 11:07:00
Contact:

Post by Mordor »

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