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

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