Помогите со скриптом разобраться!!!

Anything and all.

Moderators: Murderator+, Murderator

Locked
BlackKnight
Posts: 23
Joined: 2005-01-16 21:31:59
Location: DRW
Contact:

Помогите со скриптом разобраться!!!

Post by BlackKnight »

Скрипт на копанье вдоль скалы:
При первом использовании нуна fileread поставить на 0 чтоб задать координаты по которым он ходить должен, тока он после окапывания
выдает ошибку :(
Помогите пожалуйста найти ошибку.
(скрипт етот-потомок Ветерановских скриптов на мининг и лимберджакинг :) )

Code: Select all

##########################################################
###           Øàðä Dragon World / www.drw.ru           ###
##########################################################
#			  ##################			   #	
#			  ### Ïåðåìåííûå ###                   # 
#			  ##################                   #
##########################################################
var F=file('C:\MiningLog.dat')
var FileRead=1
var MaxWeight=680
var Hiding=1
var RuneToHome=1
var RuneToMine=8
var chest=0x4030b84f
var OldX,OldY,time 
##########################################################
#			  ##################                   #
#			  ###   Ñêðèïò   ###                   # 
#			  ##################                   #
##########################################################

sub Mining()
var q=0,w,e,r,t,y
dim mineX[50], mineY[50], mineZ[50]
var mineCount=0, click=0, flag=0

uo.Print('Âûáåðè Ëîïàòó: ') 
uo.Exec('addobject Shovel') 
while uo.Targeting() 
wait(100) 
wend 

uo.Print('Âûáåðè PóíÁóê: ') 
uo.Exec('addobject Runebook') 
while uo.Targeting() 
wait(100) 
wend 
end if 

##########################################################
#		  ##########################                 #
#		  ### Çàãðóçêà êîîðäèíàò ###                 # 
#		  ##########################                 #
##########################################################

if FileRead==1 then
uo.Print('Çàãðóæàåì êîîðäèíàòû èç ôàéëà...') 
F.open()
mineCount=safe call f.ReadNumber() 
for w=1 to mineCount 
mineZ[w]=safe call f.ReadNumber() 
mineX[w]=safe call f.ReadNumber() 
mineY[w]=safe call f.ReadNumber() 
next 
F.close() 
else 

##########################################################
#		  ##########################                 #
#		  ###   Ââîä êîîðäèíàò   ###                 # 
#		  ##########################                 #
##########################################################

uo.Print('Ñîáèðàåì êîîðäèíàòû...') 
repeat 
click=0
flag=0 
uo.DeleteJournal()
repeat
uo.UseObject('Shovel') 
WaitForTarget() 
uo.DeleteJournal() 
WaitForTryRock()
if uo.Lasttile(1)==uo.GetX() and uo.Lasttile(2)==uo.GetY() then 
flag=3
end if
mineCount=mineCount+1 
mineX[mineCount]=uo.LastTile(1) 
mineY[mineCount]=uo.LastTile(2) 
mineZ[mineCount]=uo.LastTile(0) 
uo.print('Óêàçàíà êîîðäèíàòà íîìåð '+str(mineCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))) 
until (mineCount==50) or (flag==3)
uo.Print('Àíàëèç çàêîí÷åí, êîîðäèíàòû ìåñòíîñòè çàïèñàíû â ôàéë C:\MiningLog.dat') 
SaveToFile(mineCount,mineX,mineY,mineZ)
wait(2000) 
end if

##########################################################
#		  ##########################                 #
#		  ### Õîäèì ïî ìåñíîñòè  ###                 # 
#		  ##########################                 #
##########################################################
repeat
if mineCount>0 then
for q=1 to mineCount
if uo.Weight>MaxWeight then
RecallHome()
end if
uo.Print('Èäåì íà ïîçèöèþ íîìåð '+str(q)+': x='+str(mineX[q])+' y='+str(mineY[q]))
flag=GotoXY(mineX[q],mineY[q]) 
;Hide()
GetMine(str(mineZ[q]),str(mineX[q]),str(mineY[q]),str(uo.GetZ())) 
next 
wend 
end if
end sub

sub GetMine(Type,X,Y,Z) 
var mX, mY, mZ, k=0, i=0, mX1, mY1, jor, ser, noto
if uo.Warmode()==1 then 
return 0 
end if 
wait(200)

beginning: 
mX = uo.getX("self") 
mY = uo.getY("self") 
mZ = uo.GetZ("self") 
uo.DeleteJournal() 
for i = mX-1 to mX+1 
for k = mY-1 to mY+1 

uo.Print("Êîïàåì â êîîðäèíàòàõ: "+str(mX-i)+" "+str(mY-k)) 
while not uo.InJournal("no ore here") and not uo.InJournal("location") and not uo.InJournal("far away") and not uo.InJournal("in rock") 
uo.DeleteJournal() 
if uo.Waiting() then 
uo.Canceltarget() 
end if 
uo.Waittargettile("1341", str(i), str(k), str(mZ)) 
uo.Useobject("Shovel") 
while not uo.InJournal("You put") and not uo.InJournal("heavy") and not uo.InJournal("location") and not uo.InJournal("no ore") and not uo.InJournal("but fail") and not uo.InJournal("far away") and not uo.InJournal("in rock") 
wait(500)
mX1=mX-i
mY1=mY-k
if uo.Weight>MaxWeight then
goto end 
end if  
next
next
wend
wend
if mX1>-1 and mY1>-1 then
goto beginning
end if
end:

if WaitForChange()==1 then 
return 1 
end if 
next 
return 0
end sub

sub RecallHome() 
RecallToHome() 
DropOres() 
RecallToMine() 
end sub

sub RecallToHome() 
uo.Print('Ïðûãàåì Äîìîé.') 
RunebookRecall(RuneToHome) 
end sub 

sub RecallToMine() 
uo.Print('Ïðûãàåì ê ñêàëå.') 
RunebookRecall(RuneToMine) 
end sub 

sub Hide() 
while not uo.Hidden() 
uo.UseSkill('Spirit Speak')
wait(3000)
uo.Print('Ïûòàåìñÿ óéòè â õàéä...') 
uo.DeleteJournal() 
uo.UseSkill('Stealth') 
wait(4100) 
wend 
wait(100) 
end sub

sub WaitForChange() 
var Text1='That is too far away.' 
var Text2='Try mining in rock.' 
var Text3='There is no ore here to mine.' 
var Text4='You have no line of sight to that location' 
var Text5="You can't see the target" 
var mess 
for var i=0 to 200 
mess=uo.Journal(0) 
if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 then 
return 1 
end if 
if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5]=='u' and mess[6]=='t' then 
return 0 
end if 
wait(50) 
next 
return 0 
end sub 

sub WaitForTryRock() 
var Text1='That is too far away.' 
var Text2='Try mining in rock.' 
var Text3='There is no ore here to mine.' 
var Text4='You have no line of sight to that location' 
var Text5="You can't see the target" 
for var i=0 to 50 
if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text5 then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub

sub WaitForTarget() 
for var i=0 to 50 
if uo.Targeting()==1 then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub 

sub WaitForChangeXY(myX,myY,LastX,LastY) 
for var i=1 to 50 
if LastX<>myX or LastY<>myY then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub 

sub GotoXY(x,y) 
var myX,myY,LastX=0,LastY=0,i,halt=0,z,r=0 
for i=1 to 60 
myX=uo.GetX() 
myY=uo.GetY() 
if LastX==myX and LastY==myY then 
halt=halt+1 
else 
halt=0 
end if 
if halt>=10 then 
if uo.GetDir()==1 then 
for z=0 to 8 
uo.Press(40) 
next 
end if 
if uo.GetDir()==3 then 
for z=0 to 8 
uo.Press(37) 
next 
end if 
if uo.GetDir()==5 then 
for z=0 to 8 
uo.Press(38) 
next 
end if 
if uo.GetDir()==7 then 
for z=0 to 8 
uo.Press(39) 
next 
end if 
halt=15 
end if 
if Numb(x-myX)<=1 and Numb(y-myY)<=1 then 
return 1 
end if 
if x<=myX then 
if y<=myY then 
for z=0 to 3 
uo.Press(38) 
next 
else 
for z=0 to 3 
uo.Press(37) 
next 
end if 
else 
if y<=myY then 
for z=0 to 3 
uo.Press(39) 
next 
else 
for z=0 to 3 
uo.Press(40) 
next 
end if 
end if 
LastX=myX 
LastY=myY 
wait(200) 
next 
return 0 
end sub 

sub Numb(num) 
if num>=0 then 
return num 
else 
return num*(-1) 
end if 
end sub 

sub SaveToFile(mineCount,mineX,mineY,mineZ) 
var f=file("C:\MiningLog.dat") 
var s=0,i=0 
f.open() 
f.create() 
s=safe call f.writeln(mineCount) 
for i=1 to mineCount 
s=safe call f.writeln(str(mineZ[i])+' '+str(mineX[i])+' '+str(mineY[i])) 
next 
f.close() 
end sub 

sub DropOres() 
if uo.Waiting() then 
uo.CancelTarget() 
end if 
var a, Exit 
var UnloadChest=chest ## - ID ñóíäóêà äëÿ ñáðîñà ðóäû. 
DIM Ore[5] 
Ore[0]=0x19B9 ## - 4 and more ore 
Ore[1]=0x19B7 ## - 1 ore 
Ore[2]=0x19BA ## - 2 ore 
Ore[3]=0x19B8 ## - 3 ore 
uo.SetReceivingContainer(UnloadChest) 
wait(500) 
for a=0 to 3 
exit=0 
repeat 
uo.FindType(Ore[a]) 
if uo.GetQuantity('finditem')>0 then 
uo.Grab('0','finditem') 
wait(1500) 
else 
exit=1 
end if 
until Exit==1 
next 
uo.UnSetReceivingContainer() 
end sub

sub RunebookRecall(n) 
OldX=uo.GetX() 
OldY=uo.GetY() 
repeat 
uo.Exec('warmode 0')
uo.UseObject('Runebook') 
CheckLag()
uo.LClick(135, n*15+55) 
CheckLag()
time=uo.Timer() 
repeat 
wait(500) 
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') or uo.InJournal('fizzles') or time+200<uo.Timer() 
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs')
end sub

sub Open(Container) 
uo.DeleteJournal() 
uo.UseObject(Container) 
repeat 
wait(500) 
until uo.InJournal('Contains') 
end sub 

sub Reconnect() 
var ReconnectTime,rFlag 
ReconnectTime='0' 
rFlag=1 
repeat 
while (uo.ObjAtLayer('Bpack')=='') 
if rFlag then 
ReconnectTime=MakeTime() 
rFlag=0 
end if 
wait(20000) 
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.TextOpen() 
uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) 
rFlag=1 
ReconnectTime='0' 
end if 
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 
end if 
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 
end if 
next 
ret=t+" @ "+d 
return ret 
end sub 

sub Time() 
var hh,mm,ss,hms,t=str(uo.Time()) 
if len(t)<=2 then 
hh="0" 
mm="0" 
ss=t 
endif 
if len(t)==3 then 
hh="0" 
mm=left(t,len(t)-2) 
ss=right(t,len(t)-1) 
endif 
if len(t)==4 then 
hh="0" 
mm=left(t,len(t)-2) 
ss=right(t,len(t)-2) 
endif 
if len(t)==5 then 
hh=left(t,len(t)-4) 
hms=left(t,len(t)-2) 
mm=right(hms,len(hms)-1) 
ss=right(t,len(t)-3) 
endif 
if len(t)==6 then 
hh=left(t,len(t)-4) 
hms=left(t,len(t)-2) 
mm=right(hms,len(hms)-2) 
ss=right(t,len(t)-4) 
endif 
return hh+":"+mm+":"+ss 
end sub 

sub Terminate() 
uo.Print('Ñêðèïò è âñå åãî ôóíêöèè âûêëþ÷åíû!') 
uo.DeleteJournal() 
uo.Exec('terminate all')
wait(100)
uo.Exec('terminate all')
wait(100)
uo.Exec('terminate all')
wait(100)
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 
BlackKnight
Posts: 23
Joined: 2005-01-16 21:31:59
Location: DRW
Contact:

Post by BlackKnight »

Я знаю, просто оттуда ходилка, ввод координат и окапывание
BlackKnight
Posts: 23
Joined: 2005-01-16 21:31:59
Location: DRW
Contact:

Post by BlackKnight »

Так сможет кто-нибудь помоч мне с этим скриптом?
BETEPAH
Expert!
Posts: 838
Joined: 2004-05-31 09:31:51
Contact:

Post by BETEPAH »

В топике 3 флудных топа .....еще один и закрою.
Так а по поводу ошибки .......спробуй сделать большее количество тайлов для марка.....у тебя лимит в скрипте всего 50 тайлов ...если замарчишь больше то скрипт повиснит.
И я что то не вижу масива с тайлами и вообще система марка как то странно урезана.........
Все просто.
BETEPAH ™
BlackKnight
Posts: 23
Joined: 2005-01-16 21:31:59
Location: DRW
Contact:

Post by BlackKnight »

я марчил для теста всего 5 точек, а он брал и глючил :(
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

BlackKnight wrote:я марчил для теста всего 5 точек, а он брал и глючил :(
Кто автор скрипта ? Пусть разбирается.
Сделал дело - флуди смело !!!
BlackKnight
Posts: 23
Joined: 2005-01-16 21:31:59
Location: DRW
Contact:

Post by BlackKnight »

я :)
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

BlackKnight wrote:я :)
Тада проблем не вижу. Исправляй.
Сделал дело - флуди смело !!!
BlackKnight
Posts: 23
Joined: 2005-01-16 21:31:59
Location: DRW
Contact:

Post by BlackKnight »

если подскажеш как, то исправлю :)
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

BlackKnight wrote:если подскажеш как, то исправлю :)
Какую ошибку он выдаёт ??? И давай уже в аську !!!
Сделал дело - флуди смело !!!
BETEPAH
Expert!
Posts: 838
Joined: 2004-05-31 09:31:51
Contact:

Post by BETEPAH »

Разбор идет через Аську....топик Клоуз
Все просто.
BETEPAH ™
Locked