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