Page 1 of 1

Mouintain Mining

Posted: 2006-04-16 12:26:31
by kotvsapogah
У меня есть скрипт на мининг у скал, но он не собирает координаты, помогите пожалуйста разобраться в чем дело. Вот скрипт:

Code: Select all

######################################################### 
###    Mining Mountains / Копание скалл v5.1.7 Full   ### 
######################################################### 
###         Шард Dragon World / www.drw.ru            ### 
######################################################### 
################## 
### Переменные ### 
################## 
################################################################################ 
################### 
var f=file('C:\ore.dat') ## - Путь к файлу в котором будут хранится 
### координаты где копать. 
### 
var TryHiding=1 ## 1 - Перед тем как копать руду, будет пытаться уйти в хайд, 
### 0 - не будет . 
### 
var TryRecall=1 ## 1 - После того как соберет достаточный вес, будет пытаться 
### реколиться домой, 
### складывать руду в сундук и реколиться обратно , 0 - не будет.(DropOnVip 
### должно быть 0) 
###  
var GetFromFile=1 ## 1 - Координаты где копать будут считыватся из файла, 0 - 
### собиратся из клиента 
### (сначала соберите а потом считывайте из файла). 
### 
var OreQty=550 ## - Максимальный вес, добыв который надо реколиться домой. 
### (сейчас 600 стоунов) 
### 
var ControlOfDanger=1 ## 1 - Включить рекол по руне(в паке) при атаке, 0 - 
### отключить рекол. 
### 
var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить(рекол). 
### 
var DangerousTime=70000 ## - Время в секундах которое чар будет ждать(после 
### рекола) пока уйдет ПК или Элемент.(сейчас 50 секунд) 
### 
var CycleScript=1 ## 1 - Скрипт не отключается после рекола от атакующего, 0 - 
### отключаетсяи закрывает UO. 
### 
var Reconnect=1 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить 
### реконнект. 
### 
var DisturbingSound=('C:\ding.wav') ## - Звук которы будет пригран при атаке. 
### (замените на свой) 
### 
var RecallDrop=1 ## 1 - Включить рекол после побега от ента домой и выложить логи, 0 -выключить. 
### 
var DropY=566 ## - Координата перед сундуком по Y. 
### 
var oldX,oldY,time ## - Для рекола.  
### 
var Pickaxe='0x0E85' 
################################################################################ 
###################  
### 
### После настройки: 
### Идите в место где будем копать. 
### Запустите cкрипт GoMining(), инжект попросит вас указать Кирку(появится 
### прицел, прицелом на неё), 
### Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на нее) и Сундук 
### для логов. 
### После этого чар пойдет по координатам и будет копать руду. 
########### 
### Код ### 
########### 
sub GoMining()  

if Reconnect==1 then 
uo.Exec('exec Reconnect') 
end if 

if ControlOfDanger==1 then 
uo.Exec('exec ControlOfDanger') 
end if  

uo.Exec('exec Mining') 
end sub 

sub Mining() 
var i=0,j=0,k=0,r=0,q=0,ii,jj 
var TopX=324,TopY=65 
dim OreX[5000],OreY[5000],OreT[5000] 
dim OreTile[27] 
var flag=0,OreCount=0,clicks=0,flag2=0 
#################### 
### Графика руды ### 
#################### 
OreTile[0]=1339 
OreTile[1]=1355 
OreTile[2]=1354 
OreTile[3]=1359 
OreTile[4]=1358 
OreTile[5]=1357 
OreTile[6]=1352 
OreTile[7]=1341 
OreTile[8]=1363 
OreTile[9]=1359 
OreTile[10]=1339 
OreTile[11]=1354 
OreTile[12]=1386 
OreTile[13]=1353 
OreTile[14]=2278 
OreTile[15]=2282 
OreTile[16]=2281 
OreTile[17]=2277 
OreTile[18]=2278 
OreTile[19]=2275 
OreTile[20]=1351 
OreTile[21]=6007 
OreTile[22]=6012 
OreTile[23]=6004 
OreTile[24]=6011 
OreTile[25]=6008 
OreTile[26]=6003 

uo.FilterSpeech('on') 
uo.FilterSpeech('add', 'Where do you want to use ') 

##################################### 
### Загружаем координаты из файла ### 
##################################### 
if GetFromFile==1 then 
uo.Print('Загружаем координаты из файла...') 
f.Open() 
OreCount=safe call f.ReadNumber() 
for i=1 to OreCount 
OreT[i]=safe call f.ReadNumber() 
OreX[i]=safe call f.ReadNumber() 
OreY[i]=safe call f.ReadNumber() 
next 
f.Close() 
else 
###################################### 
### Собираем координаты из клиента ### 
###################################### 
uo.Print('Собираем координаты руды в округе...') 
repeat 
clicks=0 
flag=0 
uo.DeleteJournal() 
####################### 
### Кликаем на тайл ### 
####################### 
uo.UseType( Pickaxe ) 
wait(500) 
uo.DeleteJournal() 
while uo.Targeting() 
wait(100) 
wend 
########################### 
### Проверяем то ли это ### 
########################### 
flag=0 
for k=0 to 27 
if uo.LastTile(0)==OreTile[k]+1 then 
flag=2 
end if 
next 
if flag==0 then 
for k=0 to 27 
if uo.LastTile(0)==OreTile[k] then 
flag=1 
end if 
next 
end if 
if uo.Lasttile(1)==uo.GetX() and uo.Lasttile(2)==uo.Gety() then 
flag=3 
end if 
######################## 
### Кликнули на тайл ### 
######################## 
if flag==1 then 
flag2=0 
if OreCount>0 then 
for ii=1 to OreCount 
if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then 
flag2=1 
end if 
next 
end if 
if flag2==0 then 
OreCount=OreCount+1 
OreX[OreCount]=uo.LastTile(1) 
OreY[OreCount]=uo.LastTile(2) 
OreT[OreCount]=uo.LastTile(0) 
uo.Print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+' 
y='+str(uo.LastTile(2))) 
end if 
end if 
##################### 
### Кликнули выше ### 
##################### 
if flag==2 then 
flag2=0 
if OreCount>0 then 
for ii=1 to OreCount 
if OreX[ii]==uo.LastTile(1) and OreY[ii]==uo.LastTile(2) then 
flag2=1 
end if 
next 
end if 
if flag2==0 then 
OreCount=OreCount+1 
OreX[OreCount]=uo.LastTile(1) 
OreY[OreCount]=uo.LastTile(2) 
OreT[OreCount]=uo.LastTile(0)-1 
uo.print('Найдена руда номер '+str(OreCount)+' : x='+str(uo.Lasttile(1))+' 
y='+str(uo.LastTile(2))) 
end if 
end if 
until (Flag==3) or (OreCount==5000) 
uo.FilterSpeech('off') 
uo.Print('Анализ закончен, координаты руды записаны в файл  C:\ore.dat') 
SaveToFile(OreCount,OreX,OreY,OreT) 
end if 
uo.Print('Координат найдено: '+str(OreCount)) 
wait(2000) 
###################################### 
### Ходим по собранным координатам ### 
###################################### 
while 1==1 
if OreCount>0 then 
for i=1 to OreCount 
if TryRecall==1 and uo.Weight>OreQty then 
ToRecall() 
end if 
uo.Print('Идём к координате руды номер '+str(i)+': x='+str(OreX[i])+' y='+str (OreY[i])) 
InfoOre() 
flag=GotoXY(OreX[i],OreY[i]) 
if flag==1 then 
if TryHiding==1 then 
ToHide() 
end if  
GetOre(str(OreT[i]),str(OreX[i]),str(OreY[i]),str(uo.GetZ())) 
end if 
next 
end if 
wend 
end sub 

sub GetOre(Type,X,Y,Z) 
var i 
uo.Print('Начинаем копать...') 
for i=1 to 20 
if uo.Warmode()==1 then 
return 0 
end if 
wait(200) 
uo.DeleteJournal() 
CheckLag() 
wait(100) 
uo.WaitTargetTile(Type,X,Y,Z) 
uo.UseType(Pickaxe) 
wait(500)  
if WaitForChange()==1 then 
return 1 
end if 
next 
return 0 
end sub 

sub ToRecall() 
RecallToHome() 
DropOre() 
InfoOre() 
RecallToOre() 
end sub 

sub RecallToHome() 
var i 
uo.print('Реколимся домой...') 
for i=1 to 10 
uo.deletejournal() 
uo.waittargetobject(0x400B1682) 
uo.cast('Recall') 
if WaitForRecall()==1 then 
return 1 
end if 
next 
return 0 
end sub  

sub RecallToOre() 
var i 
uo.print('Реколимся обратно...') 
for i=1 to 10 
uo.deletejournal() 
uo.waittargetobject(0x40395726) 
uo.cast('Recall') 
if waitForRecall()==1 then 
return 1 
end if 
next 
return 0 
end sub 

sub ToHide() 
while not uo.Hidden() 
uo.Print('Пытаемся уйти в хайд...') 
uo.DeleteJournal() 
uo.UseSkill('Stealth') 
wait(6000) 
wend 
wait(100) 
end sub 

sub WaitForRecall() 
var Text1=uo.GetName()+": The spell fizzles." 
var mess='',lastX=uo.getX(),lastY=uo.getY() 
for var i=0 to 200 
mess=uo.Journal(0) 
if uo.Journal(0)==Text1 then 
return 0 
end if 
if uo.getX()<>lastX or uo.getY()<>LastY then 
return 1 
end if 
wait(50) 
next 
return 0 
end sub 


sub WaitForHide() 
var Text1=uo.GetName()+": You have hidden yourself well" 
var Text2=uo.GetName()+": You can't seem to hide here." 
var mess 
for var i=0 to 200 
mess=uo.Journal(0) 
if uo.Journal(0)==Text1 then 
return 1 
end if 
if uo.Journal(0)==Text2 then 
return 0 
end if 
wait(50) 
next 
return 0 
end sub 

sub WaitForChange() 
var Text1=uo.GetName()+': You loosen some rocks but fail to find any useable ore.' 
var Text2='There is no ore here to mine.' 
var Text3="You can't reach this." 
var Text4="That is too far away." 
var Text5="You can't do much in your current state." 
var Text6="You have no line of sight to that location" 
var Text7="You can't see the target"  
var Text8="Try mining in rock." 
var mess 
for var i=0 to 200 
mess=uo.Journal(0) 
if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text6 or uo.Journal(0)==Text7 or uo.Journal(0)==Text8 then 
return 1 
end if 
if uo.Journal(0)==Text1 then 
wait(500) 
return 0 
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 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)<=2 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(OreCount,OreX,OreY,OreT)  
var s=0,i=0 
var f=file("C:\ore.dat") 
f.Open() 
f.Create() 
s=safe call f.Writeln(OreCount) 
for i=1 to OreCount 
s=safe call f.Writeln(str(OreT[i])+' '+str(OreX[i])+' '+str(OreY[i])) 
next 
f.Close() 
end sub 

sub DropOre() 
ToHide() 
if uo.Waiting() then 
uo.CancelTarget() 
end if 
var a,Exit 
dim Ore[14] 
Ore[0]=0x19B9 
Ore[1]=0x19B7 
Ore[2]=0x19BA 
Ore[3]=0x19B8  
Ore[4]=0x0F11 
Ore[5]=0x0F16  
Ore[6]=0x0F18  
Ore[7]=0x0F15 
Ore[8]=0x0F10 
Ore[9]=0x0F0F 
Ore[10]=0x0F26 
Ore[11]=0x0F4C  
Ore[12]=0x0EED 
Ore[13]=0x0F20 
uo.Print('Выкладываем руду.') 
uo.SetReceivingContainer(0x400C5D57) 
wait(500) 
for a=0 to 13 
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(0x400C5D57) 
uo.Print('Руда выложена.') 
end sub 

sub InfoOre() 
uo.Print('У вас всего '+str(uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA'))+' руды в сумке') 
uo.Print('Из нее '+str(uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000') +uo.Count('0x19B9','0x0000')+uo.Count('0x19BA','0x0000'))+' железо и ' +str (uo.Count('0x19B7')+uo.Count('0x19B8')+uo.Count('0x19B9')+uo.Count('0x19BA')- (uo.Count('0x19B7','0x0000')+uo.Count('0x19B8','0x0000')+uo.Count ('0x19B9','0x0000')+uo.Count('0x19BA','0x0000')))+' цветмет') 
end sub 

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

sub ControlOfDanger() 
var danger 
var RecallPhysicalDanger=1 
var RecallSeenDanger=0 
var RecallBluePlayer=0 
while 1 
uo.DeleteJournal() 
while not uo.InJournal(':') 
wait(100) 
wend 
danger=uo.GetNotoriety(uo.JournalSerial(0)) 
if uo.InJournal('Guardian') then 
if ElementalKill==0 then 
uo.Exec('exec RecallRune') 
end if 
end if 
if RecallPhysicalDanger==1 then 
if uo.InJournal('attacking you') or uo.InJournal('An Mani') or uo.InJournal('Por Ort Grav') or uo.InJournal('In Por ') or uo.InJournal('An Ex Por') or uo.InJournal('ppN') or uo.InJournal('Adios') or uo.InJournal('MAKC') or uo.InJournal('Man') then 
uo.Exec('exec RecallRune') 
end if 
end if 
if RecallSeenDanger==1 then 
if danger==6 and uo.JournalSerial(0)<>uo.GetSerial() then 
uo.Exec('exec RecallRune') 
end if 
if danger==4 and uo.JournalSerial(0)<>uo.GetSerial() then 
uo.Exec('exec RecallRune') 
end if 
end if 
if RecallBluePlayer==1 then 
if danger==1 and uo.JournalSerial(0)<>uo.GetSerial() then 
uo.Exec('exec RecallRune') 
end if 
end if 
wend 
end sub 

sub RecallRune() 
var MX=uo.GetX('self') 
var MY=uo.GetY('self')    
uo.UseType('0x0F08') 
wait(100) 
Recall: 
uo.DeleteJournal() 
if uo.Waiting() then 
uo.CancelTarget() 
end if 
uo.WaittargetObject('0x40014354') 
wait(100) 
uo.UseType('0x1F4C') 
wait(3000) 
if not uo.GetX('self')<>MX and not uo.GetY('self')<>MY then 
goto Recall 
end if 
if uo.Life<uo.STR then 
LifeUp('Bottle') 
wait(100) 
end if 
if CycleScript==1 then 
wait(DangerousTime) 
DropOre() 
RecallToOre() 
end if 
if CycleScript==0 then 
uo.Exec('exec ExitUO') 
end if 
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 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') 
#BETEP™# 
end sub

Re: Mouintain Mining

Posted: 2006-04-16 14:01:47
by Kynep
kotvsapogah wrote:У меня есть скрипт на мининг у скал, но он не собирает координаты, помогите пожалуйста разобраться в чем дело. Вот скрипт:
А эта фраза тебе ни о чем не говорит?

Code: Select all

var GetFromFile=1 
## 1 - Координаты где копать будут считыватся из файла,
## 0 - собиратся из клиента 
### (сначала соберите а потом считывайте из файла).
Если нет, то мне искренне тебя жаль... :cry:

Posted: 2006-04-16 14:05:06
by kotvsapogah
Эта фраза о многом говорит, но я ее уже давно заметил. В том и проблема что в режиме маркировки координаты не маркуються :(

Posted: 2006-04-16 15:53:18
by DerMeister =)
Вот это попроще:

Code: Select all

var i,myx,myy,pix,tilecount,waittime

sub main_mine_rock()

wait(1500)
uo.canceltarget()
uo.deletejournal()

uo.print("Укажите кирку...") 
uo.addType("pix") 
while uo.targeting() 
wait(100) 
wend 

addcoords_mine()

uo.print("THE END")

end sub



sub addcoords_mine()
dim nn[100]
dim xx[100]
dim yy[100]
dim zz[100]

i=0

repeat
uo.print("Укажите укажите точку где надо будет капать...")                             
uo.useType("pix")
wait(1000)
while uo.targeting() 
wait(100) 
wend
 
nn[i]=uo.Lasttile(0)
xx[i]=uo.Lasttile(1)
yy[i]=uo.Lasttile(2)
zz[i]=uo.Lasttile(3)

i=i+1

until uo.Lasttile(1)==uo.getX() and uo.Lasttile(2)==uo.gety() or i > 100

tilecount=i-2

repeat

for i = 0 to tilecount
myx=uo.getX()
myy=uo.getY()

if abs(myx-xx[i]) > 2 or abs(myy-yy[i]) > 2 then
GoToXY(xx[i],yy[i],1)
end if

mine(nn[i],xx[i],yy[i],zz[i])

next

waittime=(600-10*tilecount)*1000
if waittime < 1 then
waittime=1000
end if

uo.print("Ждём ")
uo.print(str(waittime))
uo.print("Мс")
wait(waittime)

until false
end sub


sub mine(n,x,y,z)
uo.waittargetTile(str(n),str(x),str(y),str(z))
uo.usetype("pix")

UO.DeleteJournal()
while (not (UO.InJournal("stop mining") or UO.InJournal("far") or UO.InJournal("You can't mine")))
wait(1000)
wend
end sub


sub abs(x) 
    if (x < 0) then 
        x = -x 
    end if 
    return x 
end sub


#####################################
#WALKER @@@@@@@@@@@@@@@@@@@@@@@@@@@ #
#####################################

#(c)SerrouS 
Sub InitStack() 
  UO.SetGlobal('STACK', '0') 
endsub 
Sub Push( param ) 
  var chk = val(UO.GetGlobal('STACK')) ; количество элементов в стеке 
  UO.SetGlobal('STACK',str(chk + 1)) 
  UO.SetGlobal('STACK_'+str(chk), param) 
endsub 
Sub Pop () 
  var chk = val(UO.GetGlobal('STACK')) ; количество элементов в стеке 
  if chk then 
    UO.SetGlobal('STACK',str(chk - 1)) 
    return UO.GetGlobal('STACK_'+str(chk - 1)) 
  else 
    return '' 
  endif 
endsub

SUB GoToXY(x,y,prec) 
#original (c) ... 
#modification 2.00 (c) SerrouS 
  dim turn[8] ; индекс - ГетДир, значение поворот направо под 45 градусов 
  turn[0] = 39 
  turn[1] = 34 
  turn[2] = 40 
  turn[3] = 35 
  turn[4] = 37 
  turn[5] = 36 
  turn[6] = 38 
  turn[7] = 33 
  dim deltax[8]; индекс - аналогично, значение - изменение координаты при проходе стенки 
  dim deltay[8] 
  deltax[0] =  1 
  deltax[1] =  1 
  deltax[2] =  1 
  deltax[3] =  0 
  deltax[4] = -1 
  deltax[5] = -1 
  deltax[6] = -1 
  deltax[7] =  0 

  deltay[0] = -1 
  deltay[1] =  0 
  deltay[2] =  1 
  deltay[3] =  1 
  deltay[4] =  1 
  deltay[5] =  0 
  deltay[6] = -1 
  deltay[7] = -1 
var dx,dy 

  var mx,my ; current coords 
  var lx = 0, ly = 0, ld = -1 ; last move coords 
  
var pathFind = 0 ; as logical 0 - norm, 1 - block 
var ind 
var recursInd = 0 
var fout = 0 

var stepdelay = 1000 

InitStack() 
repeat 
  mx=UO.GetX() 
  my=UO.GetY() 

  ; calculating for precision coming 
  dx = mx - x  
  If dx < 0 Then  
    dx = 0 - dx 
  EndIf ;get ABS diff 

  dy = my - y  
  If dy < 0 Then  
    dy = 0 - dy 
  EndIf 
  If dy > dx Then 
    dx = dy 
  EndIf 
  If dx <= prec Then 
    Return 
  EndIf 
    
  if mx == x and my == y then    
    return 
  endif 
  
  lx = mx 
  ly = my 
  ld = UO.GetDir() ; cause once pressing can only change the direcction 

  if mx == x and my >  y then 
    UO.Press(33) 
  endif 
  if mx == x and my  < y then 
    UO.Press(35) 
  endif 
  if mx  < x and my == y then 
    UO.Press(34) 
  endif 
  if mx  < x and my >  y then 
    UO.Press(39) 
  endif 
  if mx  < x and my  < y then 
    UO.Press(40) 
  endif 
  if mx >  x and my == y then 
    UO.Press(36) 
  endif 
  if mx >  x and my >  y then 
    UO.Press(38) 
  endif 
  if mx >  x and my  < y then 
    UO.Press(37) 
  endif 
UO.Print('KeyPressed') 
  wait( stepdelay ) 

  if lx == UO.GetX() and ly == UO.GetY() and ld == UO.GetDir() then 
    ; now there is a stop situation 
UO.Print('PathFind') 
    recursInd = 0 
    repeat 
################################################# 
      ind = ld 
      UO.Print(str(ind)) 
      fout = 0 
      repeat ; идем в обход пока не упремся снова или не кончится стена 
UO.Print('Iteration') 
        mx = UO.GetX() 
        my = UO.GetY() 
        ld = UO.GetDir() 
        UO.Press( turn[ ind ] ) 
        wait( stepdelay )  
        if (UO.GetX() == mx and UO.GetY() == my and ld == UO.GetDir()) then 
          fout = 1 ; уперлись 
        else 
          dx = UO.GetX() - mx 
          dy = UO.GetY() - my 
UO.Print('deltas  '+str(dx)+'  '+str(dy)) 
          if deltax[ ind ] == dx and deltay[ ind ] == dy then 
            fout = 2 ; препятствие пройдено 
          endif 
        endif 
      until fout 
UO.Print('fout   '+ str(fout)) 
      if fout == 1 then ; уходим на следующий поворот 
        recursInd = recursInd + 1 
        Push( str( ind ) ) 
        ;ld = ind 
      else ; fout == 2 
        ; надо попытаться восстановить контекст из стека, или выйти из обхода 
        UO.Print('Iter  '+ str(recursInd)) 
        pathFind = 0 
        if recursInd then ; восстановление 
          pathFind = 1 
          recursInd = recursInd - 1 
          ld = val(Pop()) - 1 
          if ld == -1 then 
            ld = 7 
          endif 
          UO.Press( turn[ld] ) 
          wait ( stepdelay )         ; в сиду того, что ондо нажатие меняет напрваление 
        endif 
      endif 
################################################# 
    until not recursInd and not pathFind 
    UO.Print('PathFind END') 
  endif 


until 0 
endsub

Posted: 2006-04-16 21:52:00
by kotvsapogah
Спасибо