| Yoko http://forum.yoko.com.ua/ |
|
| Помогите со скриптом на ламбер http://forum.yoko.com.ua/viewtopic.php?f=20&t=1057 |
Page 1 of 1 |
| Author: | колхоз [ 2004-08-02 09:37:35 ] |
| Post subject: | Помогите со скриптом на ламбер |
Кому не сложно и кто умеет. Мне нада что бы чар рубил деревья около дома. Если попадаеться что-то кроме cherry, noblefir, cedar или ecualyptus, то чар идёт к следущему дереву, а те не нужные логи выбрасывает. Когда вес cherry, noblefir, cedar, ecualyptus логов достигает 400 то он идёт пешком (не бегом) домой и скидывает логи в сундук. Потом идёт (или бежит) к последнему дереву и рубит дальше. У нас на шарде когда тыкаешь на топор и на дерево, то чар вырубает из него все логи сам, если пошевелится то он прекращает рубить. |
|
| Author: | The_BoBi [ 2004-08-02 10:05:44 ] |
| Post subject: | |
у меня тут есть какойто скрипт на ламбер мне скидывали на мыло соо всеми скрепрты проверь #При работе должна быть "отжата" кнопка NumLock Var Hatchet1='0x0F43' # Типы Var Hatchet2='0x0F44' # топоров Var MoveDelay=100 # Промежуток между шагами ,set norbcheck 1 ,set norbcalc 1 Var MoveNumber=1 # Количество шагов при смене дислокации Var Ep=0.172 # Значение ширины угла хождения при определении направления. Если на пути встречаются сложные и широкие препятствия - увеличить. 0.172 - сбаланчированный. Var FileName='C:\GAMES\UO\inj-base\Forest.dat' # В каждой строке файла тайл дерева Var rtfm='C:\GAMES\UO\inj-base\Log.txt' Sub putlogs() VAR log = "0x1BDD" UO.Exec("recall 0x4593E16F 2") wait(20000) Var TTl,TT,TX,TY,TZ,glog, blog Var Logss=File(rtfm) Logss.Open() UO.FindType(log, "-1", "ground") glog=UO.GetSerial("finditem") UO.FindType(log) blog=UO.GetSerial("finditem") UO.MoveItem(blog, "0", glog, "468", "266", "0") wait(3000) Logss.Close() UO.SetGlobal('putlogs', 'no') EndSub 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) F.Open() Beg: If UO.Weight>370 Then UO.SetGlobal('putlogs', 'yes') putlogs() While UO.GetGlobal('putlogs')=='yes' Wait(200) Wend wait(100) EndIf UO.DeleteJournal() 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 next tree') UO.Print('Tile '+Tl) Gogogo: GoToTile(X,Y,1,False) Repeat DeleteJournal('logs in your pack') DeleteJournal('fail to get any') DeleteJournal('too far') EquipHatchet() UO.WaitTargetTile(Str(T),Str(X),Str(Y),Str(Z)) UO.UseObject(UO.ObjAtLayer('Lhand')) While not (UO.InJournal("not enough wood") or UO.InJournal("too far")) Wait(100) Wend wait(500) IF UO.InJournal("too far") Then GoTo gogogo EndIf UO.Print('There are '+Str(UO.Count('0x1BDD'))+' logs in the pack') Until UO.InJournal('not enough wood') or UO.InJournal('stop chopping') If UO.InJournal('not enough wood') or UO.InJournal('stop chopping') Then UO.Print('There are no logs here to chop') GoTo Beg EndIf Ext: F.Close() UO.SetGlobal('process','no') 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() 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 |
|
| Page 1 of 1 | All times are UTC+02:00 |
| Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |
|