Lumberjacking

Anything and all.

Moderators: Murderator+, Murderator

FallenSower
Posts: 27
Joined: 2004-05-17 15:09:10
Location: Moscow
Contact:

Lumberjacking

Post by FallenSower »

У меня такая проблемка: я не могу зациклить функцию Lumb прочитайте скрипт и скажите что-нить умное)

Code: Select all

Var Hatchet1='0x0F4C' # Типы 
Var Hatchet2='0x0F4C' # топоров
Var MoveDelay=20 # Промежуток между шагами
Var MoveNumber=1   # Количество шагов при смене дислокации
Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный.
Var FileName='C:\Inja\NorthForest.dat' # В каждой строке файла тайл дерева

Sub Main()
  UO.DeleteJournal()
  UO.Exec('exec Lumb')
EndSub

Sub Lumb()
   VAR MaxWeight=600 #максимальный вес
  Var Tl,T,X,Y,Z
  UO.SetGlobal('process','yes')
  Var F=File(FileName)
  F.Open()
  Beg:
   if UO.Weight>MaxWeight then
   unload()
   endif
  DeleteJournal('no logs')
  DeleteJournal('immune to your')
  Tl=safecall F.Readln()
  Tl=Trim(Tl)
  If Tl=='File read error' Then
  GoTo Ext
  EndIf
  T=GetNumb(Tl,0)
  X=GetNumb(Tl,1)
  Y=GetNumb(Tl,2)
  Z=GetNumb(Tl,3)
  UO.Print('Chop hext tree')
  UO.Print('Tile '+Tl)
  GoToTile(X,Y,1,False)
Repeat
  DeleteJournal('logs in your pack')
  DeleteJournal('fail to produce')
  EquipHatchet()
  UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z))
  UO.UseObject(UO.ObjAtLayer('Lhand'))
  While not (UO.InJournal('in your pack') or UO.InJournal('fail to produce') or UO.InJournal('no logs') or UO.InJournal('heavy') or UO.InJournal('immune to your') or UO.InJournal('foliage yields'))
   Wait(100)
  Wend
  UO.Print('There are '+Str(UO.Count('0x1BDD'))+' logs in the pack')
Until UO.InJournal('no logs') or UO.InJournal('heavy') or UO.InJournal('immune to your') or UO.InJournal('foliage yields')
If UO.InJournal('no logs') or UO.InJournal('immune to your') or UO.InJournal('foliage yields') Then
  UO.Print('There are no logs here to chop')
  GoTo Beg
EndIf

Ext:
F.Close()
  UO.SetGlobal('process','no')
EndSub

Sub GetNumb(C,I)
var J,T,K
J=0
K=1
While K>0
  J=J+1
  If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then
   If I==0 Then
    T=Val(Left(C,J))
   Else
    T=GetNumb(Right(C,Len(C)-J-1),I-1)
   EndIf
   K=0
  EndIf
wend
UO.Print(T)
return T
endsub

Sub EquipHatchet()
Var E=UO.ObjAtLayer('Lhand')
E=UO.GetGraphic(E)
Var J=True
If (E<>Hatchet1) and (E<>Hatchet2) Then
  If UO.Count(Hatchet1)>0 Then
   UO.FindType(Hatchet1,'-1','backpack')
  Else
   If UO.Count(Hatchet2)>0 Then
    UO.FindType(Hatchet2,'-1','backpack')
   Else
    UO.SetGlobal('process','no')
    J=False
   EndIf
  EndIf
  UO.UseObject('finditem')
EndIf
Wait(3200)
RETURN J
EndSub

Sub Perp(Dir)
Var D
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

Sub MoveOnce(Dir,Del,Rev)
Var Num
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

Sub GetQDir(x,y)
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

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

sub abs(a)
Var b
If a<0 Then
  b=-a
Else
  b=a
endif
return b
endsub

Sub PermResend()
Var Mn=9
Repeat
  UO.Resend()
  Wait(MoveDelay*Mn)
Until (1>2)
EndSub

sub max(A,B)
Var C
If A>B Then
  C=A
Else
  C=B
EndIf
Return C
EndSub

sub GetDistance(X,Y)
return max(abs(X-uo.getx()),abs(Y-uo.gety()))
endsub

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
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()
#   UO.Print(Str(uo.getx())+' '+Str(uo.gety())+' '+Str(ox)+' '+Str(oy)+' '+Str(GetDir(uo.getx(),uo.gety(),ox,oy))+' '+Str(T))
   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

Sub Stun(X,Y,N)
Var I
Var myx
Var myy
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

Sub DeleteJournal(What)
Var T,J
J=False
If UO.InJournal(What) Then
  J=True
  UO.DeleteJournal()
EndIf
RETURN J
EndSub

sub unload()
   UO.Recall("runebook",'30')
   wait (3500)   
   logunload()
end sub


sub logunload()
   UO.SetReceivingContainer('0x40019A15')
   wait(500)
begin:
   UO.FindType('0x1bdd') ; logs
   if UO.GetQuantity('finditem')>0 then
      UO.Grab('0','finditem')
      wait(800)
      goto begin
   endif
   UO.UnSetReceivingContainer()
end sub
sub timethen()
 repeat
 wait(60000)
 Uo.exec('exec main')
 wend
endsub

Мне нужно чтобы он когда заканчивался начинался снова вот так вот..
Evil Negative Team
жж www.livejournal.com/users/fska/
Black Horse
Posts: 60
Joined: 2004-04-23 19:58:03

Post by Black Horse »

самое простое
в начале добавь строку
nachalo:
< твой скрипт >
goto nachalo

:)
Shahe
Posts: 19
Joined: 2004-05-22 16:29:37

Post by Shahe »

или в начале
While NOT UO.Dead()
ну и в конце wend
тогда будет рубить пока жив =)
tElOZz
Posts: 2
Joined: 2004-05-23 11:58:35

Post by tElOZz »

а его под себя долго настравивать? и он реколится по рунбуке что ли?
Kazoo
Posts: 173
Joined: 2004-04-03 18:39:28
Contact:

Post by Kazoo »

Shahe wrote:или в начале
While NOT UO.Dead()
ну и в конце wend
тогда будет рубить пока жив =)

в каком месте ето нада встовлят? покозат строчки за которие надо вставит можеш?
Shahe
Posts: 19
Joined: 2004-05-22 16:29:37

Post by Shahe »

Sub Main()
While NOT UO.Dead()
UO.DeleteJournal()
UO.Exec('exec Lumb')
wend
EndSub
FallenSower
Posts: 27
Joined: 2004-05-17 15:09:10
Location: Moscow
Contact:

Post by FallenSower »

его настраивать не трудно и не долго)
значит так в папке c:\inja\ создаем файл northбла-бла не помню названия:) потом в него путем не хитрых действий вставляем тайлы деревьев: тайл узаеться командой ,infotile и в окне Text появляються цыфырки пустые строчки стираем и впихиваем в тот самый файлик:)
Evil Negative Team
жж www.livejournal.com/users/fska/
FallenSower
Posts: 27
Joined: 2004-05-17 15:09:10
Location: Moscow
Contact:

Post by FallenSower »

и елы палы.. куда это вставлять вообще?

Code: Select all

Sub Main() 
While NOT UO.Dead()
UO.DeleteJournal()
UO.Exec('exec Lumb')
wend
EndSub

тут же цыкл не в одной функции...
Evil Negative Team
жж www.livejournal.com/users/fska/
FallenSower
Posts: 27
Joined: 2004-05-17 15:09:10
Location: Moscow
Contact:

Post by FallenSower »

надо что-то вроде отдельной функции.. которая следит за закрывание функции ламб и открывает майн... или просто чтоб через 30 имнут открылась)
Evil Negative Team
жж www.livejournal.com/users/fska/
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

FallenSower wrote:и елы палы.. куда это вставлять вообще?

Code: Select all

Sub Main() 
While NOT UO.Dead()
UO.DeleteJournal()
UO.Exec('exec Lumb')
wend
EndSub

тут же цыкл не в одной функции...


Посмотри на скрипт что ты постил (Сергиоуса кажись), там есть строчки
Sub Main()
...
Endsub

Вот вместо них и ставь новый текст. А что ты имел в виду фразой "тут же цикл не в одной функции" - я честно говоря не понял... :)

Хотя я лично не уверен, что данное действие позволит корректно зациклить этот скрипт. Быстрый просмотр скрипта показывает, что там есть функции, вызываемые из Lumb и в случае каких-либо условий закрывающие его. В этом случае процедура main снова запустит Lumb, тот снова запустит эту функцию, а она еще не завершена. Так что хз. Думаю, чтобы зациклить этот скрипт его надо перекраивать.

Вообще лучше автора попросить, это проще и надежнее. Тем более что он здесь бывает.
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Точно не зациклишь таким образом. Скрипт прерывается по тревоге и реколлит чара к банку, а потом домой. Обратный реколл не предсмотрен. Разгрузка пака не предусмотрена. Чтобы нормально зациклить - надо все это прописывать.
_†_MoDReD_†_
Posts: 9
Joined: 2004-05-28 10:22:33

Post by _†_MoDReD_†_ »

ну он просил зациклить 6)
вот вам

Это: (в функции Lamb )

Code: Select all

  UO.SetGlobal('process','no') 
EndSub


заменить на это

Code: Select all

uo.exec('exec restartscr')
UO.SetGlobal('process','no')
EndSub

sub restartscr()
wait(6666)
uo.exec('exec Main')
endsub


просто и совкусом :)
FallenSower
Posts: 27
Joined: 2004-05-17 15:09:10
Location: Moscow
Contact:

Post by FallenSower »

делаеться все проще:)

Code: Select all

Sub Main()
While NOT UO.Dead()
 UO.DeleteJournal
 lj1()
 lj2()
 lj3()
wend
end

копируем функцию Lumb 3 раза и переименноваем соответственноо,
потом пишем рекал (по руне или трэвел буке), и чуть-чуть меняем строение скрипта
П.С. кому надо я могу дать весь скрипт полнотью(просто сейчас не из дома пишу)
Evil Negative Team
жж www.livejournal.com/users/fska/
FallenSower
Posts: 27
Joined: 2004-05-17 15:09:10
Location: Moscow
Contact:

Post by FallenSower »

правдо еще придеться написать несколько файлов с тайлами деревьев разных лесов, но это того стоит(за ночь около 30к логов на моем шарде)
Evil Negative Team
жж www.livejournal.com/users/fska/
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

_†_MoDReD_†_ wrote:ну он просил зациклить 6)
вот вам

Это: (в функции Lamb )

Code: Select all

  UO.SetGlobal('process','no') 
EndSub


заменить на это

Code: Select all

uo.exec('exec restartscr')
UO.SetGlobal('process','no')
EndSub

sub restartscr()
wait(6666)
uo.exec('exec Main')
endsub


просто и совкусом :)


Это не зациклит. Там по тревоге чар улетает из массива. И обратно не возвращается. Проще переделать. Я, кстати, потихоньку для себя этим занимаюсь (с учетом особенностей своего шарда), если не забудут, потом отпосщу...
_†_MoDReD_†_
Posts: 9
Joined: 2004-05-28 10:22:33

Post by _†_MoDReD_†_ »

Если он потревоге улетает ты думаешь стоит потм возращаться на то место ???
_†_MoDReD_†_
Posts: 9
Joined: 2004-05-28 10:22:33

Post by _†_MoDReD_†_ »

Вот мой Ламберт + луки делать или + карпентри !

Code: Select all

#При работе должна быть "отжата" кнопка NumLock ,infotile
Var Hatchet1='0x0f43' # Типы
Var Hatchet2='0x0F43' # топоров
Var MoveDelay=100 # Промежуток между шагами
Var MoveNumber=1  # Количество шагов при смене дислокации
Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный.
Var FileName='f:\Ultima Online\injection-bin-0.3.30.4\5.txt' # В каждой строке файла тайл дерева
var max=350 #макс вес сумки
var minlog=10 #мин количество дерева в сумке, т.е. сколько на лук идет

Sub Main()
UO.DeleteJournal()
UO.Exec('exec Lumb')
EndSub

Sub Lumb()
Var Tl,T,X,Y,Z
UO.SetGlobal('process','yes')
Var F=File(FileName)
#temp:
F.Open()
Beg:
DeleteJournal('no logs')
DeleteJournal('immune to your')

#Stealth()

if UO.Weight>=max then
#bow()
UO.FindType('0x1BDD', '0x0000', 'my') # ischem derevo log
if UO.findcount() > 0 then
UO.MoveItem("finditem", "-1", "ground")# skladiwaem na zemly
wait(500)
endif

UO.FindType('0x1BDD', '0x0488', 'my') # ischem oak log
if UO.findcount() > 0 then
UO.MoveItem("finditem", "-1", "ground")# skladiwaem na zemly
wait(500)
endif

#while uo.Count('0x1BDD','0x0000')>minlog
#uo.canceltarget()
#uo.usetype('0x097B')
#UO.Exec ("waitmenu 'Carpentry''Weapons & Tools''Weapons & Tools''Fishing Pole'")
#UO.usetype('0x1035')
#Wait(5000)
#wend

endif

Tl=safecall F.Readln()
Tl=Trim(Tl)
If Tl=='File read error' Then
 GoTo Ext
EndIf
T=GetNumb(Tl,0)
X=GetNumb(Tl,1)
Y=GetNumb(Tl,2)
Z=GetNumb(Tl,3)
UO.Print('Chop hext tree')
UO.Print('Tile '+Tl)
GoToTile(X,Y,1,False)
Repeat
 DeleteJournal('logs in your pack')
 DeleteJournal('fail to produce')
 EquipHatchet()
 uo.canceltarget()
 UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z))
 UO.UseObject(UO.ObjAtLayer('Lhand'))
 While not (UO.InJournal('logs in your pack') or UO.InJournal('fail to produce') or UO.InJournal('no logs') or UO.InJournal('heavy') or UO.InJournal('immune to your') or UO.InJournal('foliage yields'))
  Wait(1000)
 Wend
#UO.Print('There are '+Str(UO.Count('0x1BDD'))+' logs in the pack')
infologs()
Until UO.InJournal('no logs') or UO.InJournal('heavy') or UO.InJournal('immune to your') or UO.InJournal('foliage yields')
If UO.InJournal('no logs') or UO.InJournal('immune to your') or UO.InJournal('foliage yields') Then
 UO.Print('There are no logs here to chop')
 GoTo Beg
EndIf
Ext:
F.Close()
#goto temp
uo.exec('exec restartscr')
UO.SetGlobal('process','no')
EndSub

sub restartscr()
wait(6666)
uo.exec('exec Main')
endsub

Sub GetNumb(C,I)
var J,T,K
J=0
K=1
While K>0
 J=J+1
 If (Mid(C,J,1)==' ') Or (J>=Len(C)-1) Then
  If I==0 Then
  T=Val(Left(C,J))
  Else
  T=GetNumb(Right(C,Len(C)-J-1),I-1)
  EndIf
  K=0
 EndIf
wend
UO.Print(T)
return T
endsub

Sub EquipHatchet()
#Stealth()
Var E=UO.ObjAtLayer('Lhand')
E=UO.GetGraphic(E)
Var J=True
If (E<>Hatchet1) and (E<>Hatchet2) Then
 If UO.Count(Hatchet1)>0 Then
  UO.FindType(Hatchet1,'-1','backpack')
 Else
  If UO.Count(Hatchet2)>0 Then
  UO.FindType(Hatchet2,'-1','backpack')
  Else
  UO.SetGlobal('process','no')
  J=False
  EndIf
 EndIf
 UO.UseObject('finditem')
EndIf
Wait(4000)
RETURN J
EndSub

Sub Perp(Dir)
Var D
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

Sub MoveOnce(Dir,Del,Rev)
Var Num
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

Sub GetQDir(x,y)
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

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

sub abs(a)
Var b
If a<0 Then
 b=-a
Else
 b=a
endif
return b
endsub

Sub PermResend()
Var Mn=9
Repeat
 UO.Resend()
 Wait(MoveDelay*Mn)
Until (1>2)
EndSub

sub max(A,B)
Var C
If A>B Then
 C=A
Else
 C=B
EndIf
Return C
EndSub

sub GetDistance(X,Y)
return max(abs(X-uo.getx()),abs(Y-uo.gety()))
endsub

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
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()
#  UO.Print(Str(uo.getx())+' '+Str(uo.gety())+' '+Str(ox)+' '+Str(oy)+' '+Str(GetDir(uo.getx(),uo.gety(),ox,oy))+' '+Str(T))
  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

Sub Stun(X,Y,N)
Var I
Var myx
Var myy
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

Sub DeleteJournal(What)
Var T,J
J=False
If UO.InJournal(What) Then
 J=True
 UO.DeleteJournal()
EndIf
RETURN J
EndSub

sub bow()
while uo.Count('0x1BDD','0x0000')>minlog
uo.canceltarget()
uo.usetype('0x097B')
UO.Exec ("waitmenu 'What do you want to carve the wo''Bows & Crossbow''Bows''Crossbow'")
UO.waittargettype('0x1BDD','0x0000')
UO.usetype('0x0F51')
Wait(2000)
#if uo.Count('0x1BDD','0x0000')<minlog or UO.InJournal('anything') then
#return
#endif
wend
endsub

sub Camp()
while uo.Count('0x1BDD','0x0000')>minlog
uo.canceltarget()
uo.usetype('0x097B')
UO.Exec ("waitmenu 'Carpentry''Weapons & Tools''Weapons & Tools''Fishing Pole'")
#UO.waittargettype('0x1BDD','0x0000')
UO.usetype('0x1035')
Wait(2000)
#if uo.Count('0x1BDD','0x0000')<minlog or UO.InJournal('anything') then
#return
#endif
wend
endsub

sub Stealth()
if uo.hidden()< 1 then
uo.useskill('Stealth')
wait(3000)
endif
endsub

sub infologs()
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0000'))+' logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0488'))+'  oak logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0481'))+' Frozen logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0514'))+' Solar logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0497'))+' Sandwood logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0482'))+' Ghostwood logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0487'))+' Elven logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x07EC'))+' Amarant logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x0480'))+' Ice logs in the pack')
    UO.Print('There are '+Str(UO.Count('0x1BDD','0x049F'))+' Mouldy logs in the pack')
endsub

sub bank()
   UO.Exec("cast Recall 0x4000A8AE")
end sub

sub home()
   UO.Exec("cast Recall 0x40017CF4")
end sub

sub guarder()
uo.deletejournal()
while not uo.dead()
if UO.InJournal("attacking you") or UO.InJournal("hit to your") or UO.InJournal("hits your") or UO.InJournal("a blow") or UO.Life < UO.STR then
#UO.Exec ("terminate fish")
UO.Exec ("terminate Lamb")
wait(100)
UO.Exec ("terminate Lamb")
agen:
UO.Exec ("exec bank")
UO.DeleteJournal()
wait(4000)
if uo.injournal("The spell fizzles.") then
goto agen
end if
endif
wait (500)
wend
end sub

sub test()
UO.FindType('0x1BDD', '0x0000', 'my') # ischem derevo log
if UO.findcount() > 0 then
UO.MoveItem("finditem", "-1", "ground")# skladiwaem na zemly
wait(500)
endif
UO.FindType('0x1BDD', '0x0488', 'my') # ischem oak log
if UO.findcount() > 0 then
UO.MoveItem("finditem", "-1", "ground")# skladiwaem na zemly
wait(500)
endif
end sub


покраней мере зацикливаеться и работает !! за 6 дней ГМ ламбер + Бовкрафт ГМ и Карпентри ГМ !
Awa
Posts: 15
Joined: 2004-06-12 14:37:51

Post by Awa »

А расскажите пожалуста поподробней как создать файл с тайлами деревьев?
Lord Ruslan Nightmare
Expert!
Posts: 359
Joined: 2004-04-25 11:11:07
Contact:

Post by Lord Ruslan Nightmare »

за 6 дней ГМ ламбер + Бовкрафт ГМ и Карпентри ГМ !

Ну, это смотря на каком шарде...У нас растёт медленно, да и деревья раз в пять часов респавнятся
Без труда не выловишь и рыбку из пруда,
А без пруда не выловишь её и с трудом...
Sergiusis
Expert!
Posts: 51
Joined: 2004-04-04 08:37:43
Contact:

Post by Sergiusis »

Мда...
Смешно.

Я всеми силами делал обобщённый скрипт, а вы его превращаете назад в частный... Ну, если вам так проще

- ваша воля...

Насчёт обратного реколла. Верно замечено - в начальную точку вернуться либо нереально, либо крайне

сложно, лтбо бесполезно.

А разгрузку я забыл вставить... Но это же пять строчек. Благо, хождение приложено... Да и на

страничке, которую я начал развивать, да не вышло, есть к нему инструкция...

http://yokoinjection.narod.ru/scripts/MoveUnit.txt

При желании можно оттуда же его обновить...

Но сразу говорю: сейчас инжектом не занимаюсь; ко мне не обращаться.
邪魔ものは消え去れ もがきながら 暗い 暗い 地の底。。。 [Jama mono wa kiesare mogaki nagara,
kurai kurai chi no soko] (Помехи исчезнут, страдая, в чёрных чёрных глубинах земли...)
Post Reply