Page 1 of 2

Типа опрос =)

Posted: 2006-02-05 15:48:30
by ZondeR
Народ кто юзает скрипты ветра на ламбер и мининг, у вас я хотел бы спросить: возвращактся ли чар к последней выкопанной координате после того как отреколился домой для сброса руды? В описаниях этих скриптов пишется что должен возвращаться а у меня почемуто не работает(((((

Posted: 2006-02-05 15:51:50
by GimFlex
поэтому надо писать скрипт под себя частями только использую скрипт ветра на ламбер =) а ваще единственно ценное в скрипте ветра это маркировка =)

Posted: 2006-02-05 17:01:19
by ZondeR
Question wrote:поэтому надо писать скрипт под себя частями только использую скрипт ветра на ламбер =) а ваще единственно ценное в скрипте ветра это маркировка =)

На счет маркировки согласен. В принцыпе я его скрипт полностью переделал под себя а вот с возвращение к последней координате никак не разберусь. Даже найти тот модуль который отвечает за эту функцию найти не могу =((((

Posted: 2006-02-05 17:52:22
by ZondeR
Квест не мог бы мне показать где именно та часть скрипта которая отвечает за возвращение к последней точке)))

#########################################################
### Mining Mountains / Копание скалл v5.1.7 Full ###
#########################################################
### Шард Dragon World / www.drw.ru ###
#########################################################
##################
### Переменные ###
##################
################################################################################
###################
var FileName=('C:\ore.dat') ## - Путь к файлу в котором будут хранится
### координаты где копать.
###
var TryHiding=1 ## 1 - Перед тем как копать руду, будет пытаться уйти в хайд,
### 0 - не будет .
###
var TryRecall=1 ## 1 - После того как соберет достаточный вес, будет пытаться
### реколиться домой,
### складывать руду в сундук и реколиться обратно , 0 - не будет.(DropOnVip
### должно быть 0)
###
var GetFromFile=0 ## 1 - Координаты где копать будут считыватся из файла, 0 -
### собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var OreQty=500 ## - Максимальный вес, добыв который надо реколиться домой.
### (сейчас 600 стоунов)
###
var ControlOfDanger=1 ## 1 - Включить рекол по руне(в паке) при атаке, 0 -
### отключить рекол.
###
var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить(рекол).
###
var DangerousTime=60000 ## - Время в секундах которое чар будет ждать(после
### рекола) пока уйдет ПК или Элемент.(сейчас 50 секунд)
###
var CycleScript=1 ## 1 - Скрипт не отключается после рекола от атакующего, 0 -
### отключаетсяи закрывает UO.
###
var Reconnect=0 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить
### реконнект.
###
var DisturbingSound=('C:\warning.wav') ## - Звук которы будет пригран при атаке.
### (замените на свой)
###
var DropX=1669 ## - Координата перед сундуком по X.
###
var DropY=566 ## - Координата перед сундуком по Y.
###
var DropOnVip=0 ## - Если в ВИП пещере пожходить к сундука и сбрасывать руду.
### (TryRecall должно быть 0)
################################################################################
###################
###
### После настройки:
### Идите в место где будем копать.
### Запустите cкрипт GoMining(), инжект попросит вас указать Кирку(появится
### прицел, прицелом на неё),
### Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на нее) и Сундук
### для логов.
### После этого чар пойдет по координатам и будет копать руду.
###########
### Код ###
###########
sub GoMining()
uo.Print('Выбери Кирку: ')
uo.Exec('addobject Pickaxe')
while uo.Targeting()
wait(100)
wend

uo.Print('Выбери Сундук: ')
uo.Exec('addobject Chest')
while uo.Targeting()
wait(100)
wend

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

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

if DropOnVip==0 then
RecallToOre()
end if

uo.Exec('exec Mining')
end sub

sub Mining()
var i=0,j=0,k=0,r=0,q=0,ii,jj,f
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
OreTile[27]=0

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

#####################################
### Загружаем координаты из файла ###
#####################################
if GetFromFile==1 then
uo.Print('Загружаем координаты из файла...')
f=file(FileName)
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.UseObject('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('Анализ закончен, координаты руды записаны в файл ' +FileName)
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()
i=1
end if

if DropOnVip==1 and TryRecall==0 and uo.Weight>OreQty then
DropOnVip()
i=1
end if

j=i*2-1
if j>OreCount then
j=2*(OreCount-i+1)
end if
uo.Print('Идём к координате руды номер '+str(j)+': x='+str(OreX[j])+' y='+str (OreY[j]))
InfoOre()
flag=GotoXY(OreX[j],OreY[j],2)
if TryHiding==1 then
ToHide()
end if
if flag==1 then
GetOre(str(OreT[j]),str(OreX[j]),str(OreY[j]),str(uo.GetZ()))
end if
next
end if
wend
end sub

sub SaveToFile(OreCount,OreX,OreY,OreT)
var s=0,i=0,f
f=file(FileName)
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 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.UseObject('Pickaxe')
wait(500)
if WaitForChange()==1 then
return 1
end if
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 Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub

sub GotoXY(x,y,r)
var lastX=0,lastY=0,i=0
while Numb(y-uo.GetY())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (y-uo.GetY())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(35)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(38)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
if (uo.GetY()-y)>r then
LastY=uo.GetY()
for i=0 to 2
uo.Press(33)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(38)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
wend
while Numb(x-uo.GetX())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (x-uo.GetX())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(34)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
if (uo.GetX()-x)>r then
LastX=uo.GetX()
for i=0 to 2
uo.Press(36)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(38)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
wend
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
else
return 0
end if
return 0
end sub

sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
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 ToHide()
while not uo.Hidden()
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(6000)
wend
wait(100)
end sub

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

sub RecallToHome()
uo.Print('Прыгаем домой.')
mrecall(0x40014354)
end sub

sub RecallToOre()
uo.Print('Прыгаем в Пещеру.')
mrecall(0x40068DC9)
end sub

sub DropOre()
var o,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
ToHide()
if uo.Waiting() then
uo.CancelTarget()
end if
uo.SetReceivingContainer('Chest')
wait(500)
for o=0 to 13
exit=0
repeat
uo.FindType(Ore[o])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
uo.UnSetReceivingContainer('Chest')
end sub

sub DropOnVip()
Walk(DropX,DropY,'')
DropOre()
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==1 then
uo.Exec('exec ElementalKill')
end if
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') 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')
Terminate()
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()
uo.Exec('exec Mining')
end if
if CycleScript==0 then
uo.Exec('exec ExitUO')
end if
end sub

sub ExitUO()
wait(3000)
uo.CloseUO()
end sub

sub LifeUp(Mode)
if Mode=='Healing' then
while uo.Life<uo.STR
uo.Exec('bandageself')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Life<uo.STR then
uo.UseType('0x0F0E','0x09BB')
wait(100)
end if
end if
end sub

sub ManaUp(Mode)
if Mode=='Meditation' then
while uo.Mana<uo.INT
uo.Exec('useskill Meditation')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Mana<uo.INT then
uo.UseType('0x0F0E','0x09DF')
wait(100)
end if
end if
end sub

sub ElementalKill()
var Count,LastTimer,Elemental
var o,exit
dim Ore[13]
Ore[1]=0x19B9
Ore[2]=0x19B7
Ore[3]=0x19BA
Ore[4]=0x19B8
Ore[5]=0x0F11
Ore[6]=0x0F16
Ore[7]=0x0F18
Ore[8]=0x0F15
Ore[9]=0x0F10
Ore[10]=0x0F0F
Ore[11]=0x0F26
Ore[12]=0x1F4C
Ore[13]=0x0EED
Terminate()
uo.UseType('0x0F0E','0x0631') ## - Инвизка(тип,цвет).
while uo.STR<uo.Life+1
if uo.Mana>=50 then
uo.WaitMenu('What','Daemon')
uo.Cast('Polymorph')
wait(8000)
else
uo.UseType('0x0F0E','0x09DF') ## - Тотал Мана(тип,цвет).
wait(3000)
end if
wend
LastTimer=uo.Timer()
repeat
uo.BandageSelf()
wait(4000)
until uo.Life==uo.STR or LastTimer+300<uo.Timer()
uo.UseType('0x1B76') ## - Хеатер Щит(тип).
uo.DeleteJournal()
uo.Exec('warmode 1')
uo.FindType('0x0010',-1,'ground')
Elemental=uo.GetSerial('finditem')
uo.Attack(Elemental)
repeat
wait(1000)
if uo.Life<50 Then
uo.UseType('0x0F0E','0x09BB') ## - Греатер Хеал(тип,цвет).
end if
if uo.GetDistance(Elemental)>1 then
WalkN(0,0,Elemental)
end if
until uo.IsNPC(Elemental)==0
wait(3000)
uo.Exec('warmode 0')
wait(1000)
LastTimer=uo.Timer()
uo.DeleteJournal()
for o=1 to 13
exit=0
repeat
uo.FindType(Ore[o],-1,'ground')
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
### uo.Exec('warmode 1')
uo.Exec('warmode 0')
uo.Exec('exec Mining')
end sub

sub WalkN(x,y,Target)
var i,StepSucess
var DX,DY,exit=0
while exit<>1
if Target<>"" then
DX=uo.GetX(Target)-uo.GetX()
DY=uo.GetY(Target)-uo.GetY()
if uo.GetDistance(Target)<2 then
exit=1
end if
else
DX=X-uo.GetX()
DY=Y-uo.GetY()
exit=1
end if
end if
if DX<>0 and DY<>0 then
if DX>0 and DY>0 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
end if
end if
if DX>0 and DY<0 then
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
end if
end if
end if
if DX<0 and DY>0 then
StepSucess=Go(5,37,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
end if
end if
end if
if DX<0 and DY<0 then
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
StepSucess=Go(5,37,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
end if
end if
end if
end if
if DX<>0 and DY==0 then
if DX>0 then
StepSucess=Go(2,34,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
end if
StepSucess=Go(2,34,300)
end if
end if
if DX<0 then
StepSucess=Go(6,36,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
StepSucess=Go(6,36,300)
end if
end if
end if
if DX==0 and DY<>0 then
if DY>0 then
StepSucess=Go(4,35,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
StepSucess=Go(4,35,300)
end if
end if
if DY<0 then
StepSucess=Go(0,33,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
endif
StepSucess=Go(0,33,300)
end if
end if
end if
wend
end sub

sub Go(dir,key,walkwait)
var X,Y,OldDir
X=uo.GetX()
Y=uo.GetY()
OldDir=uo.GetDir()
if uo.GetDir()<>dir then
uo.Press(key)
wait(walkwait)
if uo.GetDir()<>dir then
end if
end if
uo.Press(key)
wait(walkwait)
if X==uo.GetX() and Y==uo.GetY() then
end if
if X==uo.GetX() and Y==uo.GetY() and OldDir<>uo.GetDir() then
uo.Press(key)
wait(walkwait)
end if
if X==uo.GetX() and Y==uo.GetY() then
end if
if X==uo.GetX() and Y==uo.GetY() then
return -1
else
return 1
end if
end sub

sub Reconnect()
var ReconnectTime,rflag
ReconnectTime='0'
rflag=1
repeat
while (uo.ObjAtLayer('Bpack')=='')
if rflag then
ReconnectTime=Time()
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 Time()
var Date,nTime,uTime,i
uTime=str(uo.Time())
nTime=''
for i=0 to Len(uTime)
nTime=uTime[Len(uTime)-i]+nTime
if (i==2) or (i==4) then
nTime=':'+nTime
end if
next
uTime=str(uo.Date())
Date=''
for i=0 to Len(uTime)
Date=uTime[Len(uTime)-i]+Date
if (i==2) or (i==4) then
Date='.'+Date
end if
next
uTime=nTime+' @ '+Date
return uTime
end sub

sub Terminate()
uo.Exec('terminate Mining')
end sub

sub TerminateAll()
uo.Exec('terminate Mining')
uo.Exec('terminate ControlOfDanger')
uo.Exec('terminate Reconnect')
uo.Exec('terminate RecallRune')
uo.Exec('terminate DropOre')
uo.Exec('terminate DangerWait')
uo.Exec('terminate DangerWait')
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

sub GoCorpse()
var Elemental='0x4000466F'
Walk(0,0,Elemental)
end sub

sub Walk(X,Y,Target)
var Targeting=''
var Result
var DX,DY,GLX,GLY
var DirW=0
var exit=0
while exit<>1
if Target<>'' then
Targeting=Target
DX=uo.GetX(Target)-uo.GetX()
DY=uo.GetY(Target)-uo.GetY()
if uo.GetDistance(Target)<2 then
exit=1
end if
else
DX=X-uo.GetX()
DY=Y-uo.GetY()
GLX=DX
GLY=DY
if DX==0 and DY==0 then
exit=1
end if
end if
if exit==0 then
if DX>0 and DY>0 then
DirW=9
end if
if DX>0 and DY<0 then
DirW=7
end if
if DX<0 and DY>0 then
DirW=3
end if
if DX<0 and DY<0 then
DirW=5
end if
if DX<>0 and DY==0 then
if DX>0 then
DirW=8
else
DirW=4
end if
end if
if DX==0 and DY<>0 then
if DY>0 then
DirW=2
else
DirW=6
end if
end if
Result=Go(DirW)
if Result==0 then
Result=Go(DirW-2)
if Result==0 then
Result=Go(DirW+2)
end if
end if
end if
wend
end sub

sub Go(dir)
var WalkWait=100
var Targeting=''
var X,Y,GLX,GLY
var check=1
var StartingDir=uo.GetDir()
X=uo.GetX()
Y=uo.GetY()
dim MoveKey[12]
MoveKey[0]=34
MoveKey[1]=40
MoveKey[2]=35
MoveKey[3]=37
MoveKey[4]=36
MoveKey[5]=38
MoveKey[6]=33
MoveKey[7]=39
MoveKey[8]=34
MoveKey[9]=40
MoveKey[10]=35
MoveKey[11]=37
dim StartDir[12]
StartDir[0]=2
StartDir[1]=3
StartDir[2]=4
StartDir[3]=5
StartDir[4]=6
StartDir[5]=7
StartDir[6]=0
StartDir[7]=1
StartDir[8]=2
StartDir[9]=3
StartDir[10]=4
StartDir[11]=5
while uo.GetDir()<>StartDir[dir]
uo.Press(MoveKey[dir])
wait(WalkWait)
if uo.GetDir()==StartingDir then
CheckLag()
end if
if (Targeting<>'' and uo.GetDistance(Targeting)<2) or (GLX==0 and GLY==0) then
return 1
end if
wend
uo.Press(MoveKey[dir])
wait(WalkWait)
if X==uo.GetX() and Y==uo.GetY() then
CheckLag()
uo.Press(MoveKey[dir])
wait(WalkWait)
end if
if X==uo.GetX() and Y==uo.GetY() then
return 0
else
return 1
end if
end sub

sub mrecall(rune)
repeat
CheckLag()
UO.WaitTargetObject(rune)
UO.UseType('0x1F4C')
wait(5000)
until NOT UO.InJournal("spell fizzles")

markrune:
If UO.InJournal("fades completely") then
CheckLag()
UO.WaitTargetObject(rune)
UO.Cast('Mark')
endif
wait(5000)
If UO.InJournal("spell fizzles") then
goto markrune
endif
end sub

Posted: 2006-02-05 17:56:54
by GimFlex
это на мининг скрипт а не на ламбер я чето не нашел

Posted: 2006-02-05 18:03:23
by ZondeR
Question wrote:это на мининг скрипт а не на ламбер я чето не нашел

А как он примерно выглядит?? И как вообще это можно осуществить? В описании этого скрипта было сказано типа: "Дошел до 74 точки из 100 и набрал максвес, рекол домой потом обратно в шахту и идет к 75-й"
Хотя бы примерно подскажи как это осуществить я сам попробую дописать...

Posted: 2006-02-05 18:24:25
by GimFlex

Code: Select all

for i=1 to 100
 go(x,y,i)
 mining()
 if uo.weight()>maxves then
  recallhome()
  unload()
  recallumber()
 endif
next

Posted: 2006-02-05 18:39:57
by ZondeR
Спасибо щас затестю...

Posted: 2006-02-05 20:33:37
by ZondeR
попробовал заменить ходилку на эту:
sub WalkN(x,y,Target)
var i,StepSucess
var DX,DY,exit=0
while exit<>1
if Target<>"" then
DX=uo.GetX(Target)-uo.GetX()
DY=uo.GetY(Target)-uo.GetY()
if uo.GetDistance(Target)<2 then
exit=1
end if
else
DX=X-uo.GetX()
DY=Y-uo.GetY()
exit=1
end if
end if
if DX<>0 and DY<>0 then
if DX>0 and DY>0 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
end if
end if
if DX>0 and DY<0 then
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
end if
end if
end if
if DX<0 and DY>0 then
StepSucess=Go(5,37,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
end if
end if
end if
if DX<0 and DY<0 then
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
StepSucess=Go(5,37,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
end if
end if
end if
end if
if DX<>0 and DY==0 then
if DX>0 then
StepSucess=Go(2,34,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
end if
StepSucess=Go(2,34,300)
end if
end if
if DX<0 then
StepSucess=Go(6,36,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
StepSucess=Go(6,36,300)
end if
end if
end if
if DX==0 and DY<>0 then
if DY>0 then
StepSucess=Go(4,35,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
StepSucess=Go(4,35,300)
end if
end if
if DY<0 then
StepSucess=Go(0,33,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
endif
StepSucess=Go(0,33,300)
end if
end if
end if
wend
end sub


но выдавалась ошибка в выделенной строке...

Posted: 2006-02-06 14:14:01
by ZondeR
А куда правильно впихнуть то что ты написал?

Posted: 2006-02-06 14:19:27
by GimFlex
я написал примерную функцию ее надо под особенности скрипта переделывать

Posted: 2006-02-06 14:28:01
by ZondeR
Ну смысл того что ты написал и саму идею я понял, но только вот в чем проблема: допустим мы набрали максимальный вес или среколились от ПК а потом идем к последней точке посредством команды
goto(x,y,i) - где i точка на которой закончили


но вот когда он подойдет к этой точке то запускаестся sub mining() который начнет капать с первой точки. Я прикинул что можно добавить еще один саб mining2() допустим который будет отличаться от mining() только тем что будет идти к i после сброса или рекола. Но до конца не понимаю как это осуществить((

Posted: 2006-02-06 14:31:08
by ZondeR
Кстати для этого нужна ходилка соответствующая в которой Goto(x,y,i) значение i былобы точкой а не расстояние до точки.

Posted: 2006-02-06 14:33:04
by GimFlex
блин выложи сюда скрипт которым ты капаешь щас

Posted: 2006-02-06 14:38:31
by ZondeR
#########################################################
### Mining Mountains / Копание скалл v5.1.7 Full ###
#########################################################
### Шард Dragon World / www.drw.ru ###
#########################################################
##################
### Переменные ###
##################
################################################################################
###################
var FileName=('C:\ore.dat') ## - Путь к файлу в котором будут хранится
### координаты где копать.
###
var TryHiding=1 ## 1 - Перед тем как копать руду, будет пытаться уйти в хайд,
### 0 - не будет .
###
var TryRecall=1 ## 1 - После того как соберет достаточный вес, будет пытаться
### реколиться домой,
### складывать руду в сундук и реколиться обратно , 0 - не будет.(DropOnVip
### должно быть 0)
###
var GetFromFile=1 ## 1 - Координаты где копать будут считыватся из файла, 0 -
### собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var OreQty=70 ## - Максимальный вес, добыв который надо реколиться домой.
### (сейчас 600 стоунов)
###
var ControlOfDanger=1 ## 1 - Включить рекол по руне(в паке) при атаке, 0 -
### отключить рекол.
###
var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить(рекол).
###
var DangerousTime=60000 ## - Время в секундах которое чар будет ждать(после
### рекола) пока уйдет ПК или Элемент.(сейчас 50 секунд)
###
var CycleScript=1 ## 1 - Скрипт не отключается после рекола от атакующего, 0 -
### отключаетсяи закрывает UO.
###
var Reconnect=1 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить
### реконнект.
###
var DisturbingSound=('C:\warning.wav') ## - Звук которы будет пригран при атаке.
### (замените на свой)
###
var DropX=1669 ## - Координата перед сундуком по X.
###
var DropY=566 ## - Координата перед сундуком по Y.
###
var DropOnVip=0 ## - Если в ВИП пещере пожходить к сундука и сбрасывать руду.
### (TryRecall должно быть 0)
###
var Pickaxe='0x0E85'
################################################################################
###################
###
### После настройки:
### Идите в место где будем копать.
### Запустите cкрипт GoMining(), инжект попросит вас указать Кирку(появится
### прицел, прицелом на неё),
### Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на нее) и Сундук
### для логов.
### После этого чар пойдет по координатам и будет копать руду.
###########
### Код ###
###########
sub GoMining()

uo.Print('Выбери Сундук: ')
uo.Exec('addobject Chest')
while uo.Targeting()
wait(100)
wend

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

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

if DropOnVip==0 then
RecallToOre()
end if

uo.Exec('exec Mining')
end sub

sub Mining()
var i=0,j=0,k=0,r=0,q=0,ii,jj,f
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
OreTile[27]=0

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

#####################################
### Загружаем координаты из файла ###
#####################################
if GetFromFile==1 then
uo.Print('Загружаем координаты из файла...')
f=file(FileName)
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('Анализ закончен, координаты руды записаны в файл ' +FileName)
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()
i=1
end if

if DropOnVip==1 and TryRecall==0 and uo.Weight>OreQty then
DropOnVip()
i=1
end if

j=i+1
if j>OreCount then
j=2*(OreCount-i+1)
end if
uo.Print('Идём к координате руды номер '+str(j)+': x='+str(OreX[j])+' y='+str (OreY[j]))
InfoOre()
flag=GotoXY(OreX[j],OreY[j],j)
if TryHiding==1 then
ToHide()
end if
if flag==1 then
GetOre(str(OreT[j]),str(OreX[j]),str(OreY[j]),str(uo.GetZ()))
end if
next
end if
wend
end sub

sub SaveToFile(OreCount,OreX,OreY,OreT)
var s=0,i=0,f
f=file(FileName)
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 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 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 Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub

sub GotoXY(x,y,r)
var lastX=0,lastY=0,i=0
while Numb(y-uo.GetY())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (y-uo.GetY())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(35)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(38)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
if (uo.GetY()-y)>r then
LastY=uo.GetY()
for i=0 to 2
uo.Press(33)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(38)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
wend
while Numb(x-uo.GetX())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (x-uo.GetX())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(34)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
if (uo.GetX()-x)>r then
LastX=uo.GetX()
for i=0 to 2
uo.Press(36)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(38)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
wend
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
else
return 0
end if
return 0
end sub

sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
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 ToHide()
while not uo.Hidden()
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(6000)
wend
wait(100)
end sub

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

sub RecallToHome()
uo.Print('Прыгаем домой.')
mrecall(0x40014354)
end sub

sub RecallToOre()
uo.Print('Прыгаем в Пещеру.')
mrecall(0x40068DC9)
end sub

sub DropOre()
var o,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
if uo.Waiting() then
uo.CancelTarget()
end if
uo.SetReceivingContainer('Chest')
wait(500)
for o=0 to 13
exit=0
repeat
uo.FindType(Ore[o])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
uo.UnSetReceivingContainer('Chest')
end sub

sub DropOnVip()
Walk(DropX,DropY,'')
DropOre()
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==1 then
uo.Exec('exec ElementalKill')
end if
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('MAKC') or uo.InJournal('ppN') or uo.InJournal('Man') or uo.InJournal('An Ex Por') or uo.InJournal('Adios') 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')
Terminate()
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()
uo.Exec('exec Mining')
end if
if CycleScript==0 then
uo.Exec('exec ExitUO')
end if
end sub

sub ExitUO()
wait(3000)
uo.CloseUO()
end sub

sub LifeUp(Mode)
if Mode=='Healing' then
while uo.Life<uo.STR
uo.Exec('bandageself')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Life<uo.STR then
uo.UseType('0x0F0E','0x09BB')
wait(100)
end if
end if
end sub

sub ManaUp(Mode)
if Mode=='Meditation' then
while uo.Mana<uo.INT
uo.Exec('useskill Meditation')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Mana<uo.INT then
uo.UseType('0x0F0E','0x09DF')
wait(100)
end if
end if
end sub

sub ElementalKill()
var Count,LastTimer,Elemental
var o,exit
dim Ore[13]
Ore[1]=0x19B9
Ore[2]=0x19B7
Ore[3]=0x19BA
Ore[4]=0x19B8
Ore[5]=0x0F11
Ore[6]=0x0F16
Ore[7]=0x0F18
Ore[8]=0x0F15
Ore[9]=0x0F10
Ore[10]=0x0F0F
Ore[11]=0x0F26
Ore[12]=0x1F4C
Ore[13]=0x0EED
Terminate()
uo.UseType('0x0F0E','0x0631') ## - Инвизка(тип,цвет).
while uo.STR<uo.Life+1
if uo.Mana>=50 then
uo.WaitMenu('What','Daemon')
uo.Cast('Polymorph')
wait(8000)
else
uo.UseType('0x0F0E','0x09DF') ## - Тотал Мана(тип,цвет).
wait(3000)
end if
wend
LastTimer=uo.Timer()
repeat
uo.BandageSelf()
wait(4000)
until uo.Life==uo.STR or LastTimer+300<uo.Timer()
uo.UseType('0x1B76') ## - Хеатер Щит(тип).
uo.DeleteJournal()
uo.Exec('warmode 1')
uo.FindType('0x0010',-1,'ground')
Elemental=uo.GetSerial('finditem')
uo.Attack(Elemental)
repeat
wait(1000)
if uo.Life<50 Then
uo.UseType('0x0F0E','0x09BB') ## - Греатер Хеал(тип,цвет).
end if
if uo.GetDistance(Elemental)>1 then
WalkN(0,0,Elemental)
end if
until uo.IsNPC(Elemental)==0
wait(3000)
uo.Exec('warmode 0')
wait(1000)
LastTimer=uo.Timer()
uo.DeleteJournal()
for o=1 to 13
exit=0
repeat
uo.FindType(Ore[o],-1,'ground')
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
### uo.Exec('warmode 1')
uo.Exec('warmode 0')
uo.Exec('exec Mining')
end sub

sub WalkN(x,y,Target)
var i,StepSucess
var DX,DY,exit=0
while exit<>1
if Target<>"" then
DX=uo.GetX(Target)-uo.GetX()
DY=uo.GetY(Target)-uo.GetY()
if uo.GetDistance(Target)<2 then
exit=1
end if
else
DX=X-uo.GetX()
DY=Y-uo.GetY()
exit=1
end if
end if
if DX<>0 and DY<>0 then
if DX>0 and DY>0 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
end if
end if
if DX>0 and DY<0 then
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
end if
end if
end if
if DX<0 and DY>0 then
StepSucess=Go(5,37,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
end if
end if
end if
if DX<0 and DY<0 then
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
StepSucess=Go(5,37,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
end if
end if
end if
end if
if DX<>0 and DY==0 then
if DX>0 then
StepSucess=Go(2,34,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
end if
StepSucess=Go(2,34,300)
end if
end if
if DX<0 then
StepSucess=Go(6,36,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
StepSucess=Go(6,36,300)
end if
end if
end if
if DX==0 and DY<>0 then
if DY>0 then
StepSucess=Go(4,35,300)
if StepSucess==-1 then
StepSucess=Go(3,40,300)
if StepSucess==-1 then
StepSucess=Go(5,37,300)
end if
StepSucess=Go(4,35,300)
end if
end if
if DY<0 then
StepSucess=Go(0,33,300)
if StepSucess==-1 then
StepSucess=Go(1,39,300)
if StepSucess==-1 then
StepSucess=Go(7,38,300)
endif
StepSucess=Go(0,33,300)
end if
end if
end if
wend
end sub

sub Go(dir,key,walkwait)
var X,Y,OldDir
X=uo.GetX()
Y=uo.GetY()
OldDir=uo.GetDir()
if uo.GetDir()<>dir then
uo.Press(key)
wait(walkwait)
if uo.GetDir()<>dir then
end if
end if
uo.Press(key)
wait(walkwait)
if X==uo.GetX() and Y==uo.GetY() then
end if
if X==uo.GetX() and Y==uo.GetY() and OldDir<>uo.GetDir() then
uo.Press(key)
wait(walkwait)
end if
if X==uo.GetX() and Y==uo.GetY() then
end if
if X==uo.GetX() and Y==uo.GetY() then
return -1
else
return 1
end if
end sub

sub Reconnect()
var ReconnectTime,rflag
ReconnectTime='0'
rflag=1
repeat
while (uo.ObjAtLayer('Bpack')=='')
if rflag then
ReconnectTime=Time()
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 Time()
var Date,nTime,uTime,i
uTime=str(uo.Time())
nTime=''
for i=0 to Len(uTime)
nTime=uTime[Len(uTime)-i]+nTime
if (i==2) or (i==4) then
nTime=':'+nTime
end if
next
uTime=str(uo.Date())
Date=''
for i=0 to Len(uTime)
Date=uTime[Len(uTime)-i]+Date
if (i==2) or (i==4) then
Date='.'+Date
end if
next
uTime=nTime+' @ '+Date
return uTime
end sub

sub Terminate()
uo.Exec('terminate Mining')
end sub

sub TerminateAll()
uo.Exec('terminate Mining')
uo.Exec('terminate ControlOfDanger')
uo.Exec('terminate Reconnect')
uo.Exec('terminate RecallRune')
uo.Exec('terminate DropOre')
uo.Exec('terminate DangerWait')
uo.Exec('terminate DangerWait')
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

sub GoCorpse()
var Elemental='0x4000466F'
Walk(0,0,Elemental)
end sub

sub Walk(X,Y,Target)
var Targeting=''
var Result
var DX,DY,GLX,GLY
var DirW=0
var exit=0
while exit<>1
if Target<>'' then
Targeting=Target
DX=uo.GetX(Target)-uo.GetX()
DY=uo.GetY(Target)-uo.GetY()
if uo.GetDistance(Target)<2 then
exit=1
end if
else
DX=X-uo.GetX()
DY=Y-uo.GetY()
GLX=DX
GLY=DY
if DX==0 and DY==0 then
exit=1
end if
end if
if exit==0 then
if DX>0 and DY>0 then
DirW=9
end if
if DX>0 and DY<0 then
DirW=7
end if
if DX<0 and DY>0 then
DirW=3
end if
if DX<0 and DY<0 then
DirW=5
end if
if DX<>0 and DY==0 then
if DX>0 then
DirW=8
else
DirW=4
end if
end if
if DX==0 and DY<>0 then
if DY>0 then
DirW=2
else
DirW=6
end if
end if
Result=Go(DirW)
if Result==0 then
Result=Go(DirW-2)
if Result==0 then
Result=Go(DirW+2)
end if
end if
end if
wend
end sub

sub Go(dir)
var WalkWait=100
var Targeting=''
var X,Y,GLX,GLY
var check=1
var StartingDir=uo.GetDir()
X=uo.GetX()
Y=uo.GetY()
dim MoveKey[12]
MoveKey[0]=34
MoveKey[1]=40
MoveKey[2]=35
MoveKey[3]=37
MoveKey[4]=36
MoveKey[5]=38
MoveKey[6]=33
MoveKey[7]=39
MoveKey[8]=34
MoveKey[9]=40
MoveKey[10]=35
MoveKey[11]=37
dim StartDir[12]
StartDir[0]=2
StartDir[1]=3
StartDir[2]=4
StartDir[3]=5
StartDir[4]=6
StartDir[5]=7
StartDir[6]=0
StartDir[7]=1
StartDir[8]=2
StartDir[9]=3
StartDir[10]=4
StartDir[11]=5
while uo.GetDir()<>StartDir[dir]
uo.Press(MoveKey[dir])
wait(WalkWait)
if uo.GetDir()==StartingDir then
CheckLag()
end if
if (Targeting<>'' and uo.GetDistance(Targeting)<2) or (GLX==0 and GLY==0) then
return 1
end if
wend
uo.Press(MoveKey[dir])
wait(WalkWait)
if X==uo.GetX() and Y==uo.GetY() then
CheckLag()
uo.Press(MoveKey[dir])
wait(WalkWait)
end if
if X==uo.GetX() and Y==uo.GetY() then
return 0
else
return 1
end if
end sub

sub mrecall(rune)
repeat
CheckLag()
UO.WaitTargetObject(rune)
UO.UseType('0x1F4C')
wait(5000)
until NOT UO.InJournal("spell fizzles")

markrune:
If UO.InJournal("fades completely") then
CheckLag()
UO.WaitTargetObject(rune)
UO.Cast('Mark')
endif
wait(5000)
If UO.InJournal("spell fizzles") then
goto markrune
endif
end sub


Вот собсно и он...)))

Posted: 2006-02-06 14:46:19
by GimFlex
lдавай начнем с того что тебе 3 ходилки не нада сделай 1 общую

Posted: 2006-02-06 14:54:49
by ZondeR
#########################################################
### Mining Mountains / Копание скалл v5.1.7 Full ###
#########################################################
### Шард Dragon World / www.drw.ru ###
#########################################################
##################
### Переменные ###
##################
################################################################################
###################
var FileName=('C:\ore.dat') ## - Путь к файлу в котором будут хранится
### координаты где копать.
###
var TryHiding=1 ## 1 - Перед тем как копать руду, будет пытаться уйти в хайд,
### 0 - не будет .
###
var TryRecall=1 ## 1 - После того как соберет достаточный вес, будет пытаться
### реколиться домой,
### складывать руду в сундук и реколиться обратно , 0 - не будет.(DropOnVip
### должно быть 0)
###
var GetFromFile=1 ## 1 - Координаты где копать будут считыватся из файла, 0 -
### собиратся из клиента
### (сначала соберите а потом считывайте из файла).
###
var OreQty=70 ## - Максимальный вес, добыв который надо реколиться домой.
### (сейчас 600 стоунов)
###
var ControlOfDanger=1 ## 1 - Включить рекол по руне(в паке) при атаке, 0 -
### отключить рекол.
###
var ElementalKill=0 ## 1 - Вылючить килл элементала, 0 - отключить(рекол).
###
var DangerousTime=60000 ## - Время в секундах которое чар будет ждать(после
### рекола) пока уйдет ПК или Элемент.(сейчас 50 секунд)
###
var CycleScript=1 ## 1 - Скрипт не отключается после рекола от атакующего, 0 -
### отключаетсяи закрывает UO.
###
var Reconnect=1 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить
### реконнект.
###
var DisturbingSound=('C:\warning.wav') ## - Звук которы будет пригран при атаке.
### (замените на свой)
###
var DropX=1669 ## - Координата перед сундуком по X.
###
var DropY=566 ## - Координата перед сундуком по Y.
###
var DropOnVip=0 ## - Если в ВИП пещере пожходить к сундука и сбрасывать руду.
### (TryRecall должно быть 0)
###
var Pickaxe='0x0E85'
################################################################################
###################
###
### После настройки:
### Идите в место где будем копать.
### Запустите cкрипт GoMining(), инжект попросит вас указать Кирку(появится
### прицел, прицелом на неё),
### Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на нее) и Сундук
### для логов.
### После этого чар пойдет по координатам и будет копать руду.
###########
### Код ###
###########
sub GoMining()

uo.Print('Выбери Сундук: ')
uo.Exec('addobject Chest')
while uo.Targeting()
wait(100)
wend

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

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

if DropOnVip==0 then
RecallToOre()
end if

uo.Exec('exec Mining')
end sub

sub Mining()
var i=0,j=0,k=0,r=0,q=0,ii,jj,f
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
OreTile[27]=0

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

#####################################
### Загружаем координаты из файла ###
#####################################
if GetFromFile==1 then
uo.Print('Загружаем координаты из файла...')
f=file(FileName)
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('Анализ закончен, координаты руды записаны в файл ' +FileName)
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()
i=1
end if

if DropOnVip==1 and TryRecall==0 and uo.Weight>OreQty then
DropOnVip()
i=1
end if

j=i+1
if j>OreCount then
j=2*(OreCount-i+1)
end if
uo.Print('Идём к координате руды номер '+str(j)+': x='+str(OreX[j])+' y='+str (OreY[j]))
InfoOre()
flag=GotoXY(OreX[j],OreY[j],j)
if TryHiding==1 then
ToHide()
end if
if flag==1 then
GetOre(str(OreT[j]),str(OreX[j]),str(OreY[j]),str(uo.GetZ()))
end if
next
end if
wend
end sub

sub SaveToFile(OreCount,OreX,OreY,OreT)
var s=0,i=0,f
f=file(FileName)
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 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 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 Open(Container)
uo.DeleteJournal()
uo.UseObject(Container)
repeat
wait(500)
until uo.InJournal('Contains')
end sub

sub GotoXY(x,y,r)
var lastX=0,lastY=0,i=0
while Numb(y-uo.GetY())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (y-uo.GetY())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(35)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(3
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
if (uo.GetY()-y)>r then
LastY=uo.GetY()
for i=0 to 2
uo.Press(33)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastY==uo.GetY() then
for i=0 to 2
uo.Press(3
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
wend
while Numb(x-uo.GetX())>r
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
if (x-uo.GetX())>r then
LastX=uo.GetX()
LastY=uo.GetY()
for i=0 to 2
uo.Press(34)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(40)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
if (uo.GetX()-x)>r then
LastX=uo.GetX()
for i=0 to 2
uo.Press(36)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(3
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() then
for i=0 to 2
uo.Press(37)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
if LastX==uo.GetX() and LastY==uo.GetY() then
for i=0 to 5
uo.Press(39)
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
end if
next
end if
end if
wend
if Numb(x-uo.GetX())<=r and Numb(y-uo.GetY())<=r then
return 1
else
return 0
end if
return 0
end sub

sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
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 ToHide()
while not uo.Hidden()
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(6000)
wend
wait(100)
end sub

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

sub RecallToHome()
uo.Print('Прыгаем домой.')
mrecall(0x40014354)
end sub

sub RecallToOre()
uo.Print('Прыгаем в Пещеру.')
mrecall(0x40068DC9)
end sub

sub DropOre()
var o,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
if uo.Waiting() then
uo.CancelTarget()
end if
uo.SetReceivingContainer('Chest')
wait(500)
for o=0 to 13
exit=0
repeat
uo.FindType(Ore[o])
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
uo.UnSetReceivingContainer('Chest')
end sub

sub DropOnVip()
Walk(DropX,DropY,'')
DropOre()
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==1 then
uo.Exec('exec ElementalKill')
end if
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('MAKC') or uo.InJournal('ppN') or uo.InJournal('Man') or uo.InJournal('An Ex Por') or uo.InJournal('Adios') 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')
Terminate()
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()
uo.Exec('exec Mining')
end if
if CycleScript==0 then
uo.Exec('exec ExitUO')
end if
end sub

sub ExitUO()
wait(3000)
uo.CloseUO()
end sub

sub LifeUp(Mode)
if Mode=='Healing' then
while uo.Life<uo.STR
uo.Exec('bandageself')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Life<uo.STR then
uo.UseType('0x0F0E','0x09BB')
wait(100)
end if
end if
end sub

sub ManaUp(Mode)
if Mode=='Meditation' then
while uo.Mana<uo.INT
uo.Exec('useskill Meditation')
wait(4000)
wend
end if
if Mode=='Bottle' then
if uo.Mana<uo.INT then
uo.UseType('0x0F0E','0x09DF')
wait(100)
end if
end if
end sub

sub ElementalKill()
var Count,LastTimer,Elemental
var o,exit
dim Ore[13]
Ore[1]=0x19B9
Ore[2]=0x19B7
Ore[3]=0x19BA
Ore[4]=0x19B8
Ore[5]=0x0F11
Ore[6]=0x0F16
Ore[7]=0x0F18
Ore[8]=0x0F15
Ore[9]=0x0F10
Ore[10]=0x0F0F
Ore[11]=0x0F26
Ore[12]=0x1F4C
Ore[13]=0x0EED
Terminate()
uo.UseType('0x0F0E','0x0631') ## - Инвизка(тип,цвет).
while uo.STR<uo.Life+1
if uo.Mana>=50 then
uo.WaitMenu('What','Daemon')
uo.Cast('Polymorph')
wait(8000)
else
uo.UseType('0x0F0E','0x09DF') ## - Тотал Мана(тип,цвет).
wait(3000)
end if
wend
LastTimer=uo.Timer()
repeat
uo.BandageSelf()
wait(4000)
until uo.Life==uo.STR or LastTimer+300<uo.Timer()
uo.UseType('0x1B76') ## - Хеатер Щит(тип).
uo.DeleteJournal()
uo.Exec('warmode 1')
uo.FindType('0x0010',-1,'ground')
Elemental=uo.GetSerial('finditem')
uo.Attack(Elemental)
repeat
wait(1000)
if uo.Life<50 Then
uo.UseType('0x0F0E','0x09BB') ## - Греатер Хеал(тип,цвет).
end if
if uo.GetDistance(Elemental)>1 then
WalkN(0,0,Elemental)
end if
until uo.IsNPC(Elemental)==0
wait(3000)
uo.Exec('warmode 0')
wait(1000)
LastTimer=uo.Timer()
uo.DeleteJournal()
for o=1 to 13
exit=0
repeat
uo.FindType(Ore[o],-1,'ground')
if uo.GetQuantity('finditem')>0 then
uo.Grab('0','finditem')
wait(1500)
else
exit=1
end if
until exit==1
next
### uo.Exec('warmode 1')
uo.Exec('warmode 0')
uo.Exec('exec Mining')
end sub

sub Reconnect()
var ReconnectTime,rflag
ReconnectTime='0'
rflag=1
repeat
while (uo.ObjAtLayer('Bpack')=='')
if rflag then
ReconnectTime=Time()
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 Time()
var Date,nTime,uTime,i
uTime=str(uo.Time())
nTime=''
for i=0 to Len(uTime)
nTime=uTime[Len(uTime)-i]+nTime
if (i==2) or (i==4) then
nTime=':'+nTime
end if
next
uTime=str(uo.Date())
Date=''
for i=0 to Len(uTime)
Date=uTime[Len(uTime)-i]+Date
if (i==2) or (i==4) then
Date='.'+Date
end if
next
uTime=nTime+' @ '+Date
return uTime
end sub

sub Terminate()
uo.Exec('terminate Mining')
end sub

sub TerminateAll()
uo.Exec('terminate Mining')
uo.Exec('terminate ControlOfDanger')
uo.Exec('terminate Reconnect')
uo.Exec('terminate RecallRune')
uo.Exec('terminate DropOre')
uo.Exec('terminate DangerWait')
uo.Exec('terminate DangerWait')
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

sub GoCorpse()
var Elemental='0x4000466F'
Walk(0,0,Elemental)
end sub

sub mrecall(rune)
repeat
CheckLag()
UO.WaitTargetObject(rune)
UO.UseType('0x1F4C')
wait(5000)
until NOT UO.InJournal("spell fizzles")

markrune:
If UO.InJournal("fades completely") then
CheckLag()
UO.WaitTargetObject(rune)
UO.Cast('Mark')
endif
wait(5000)
If UO.InJournal("spell fizzles") then
goto markrune
endif
end sub


Вот я убрал все ходилки кроме одной, но ведь удаленные ходилки используются в скрпте для кила элема и лута его же.

Posted: 2006-02-06 14:57:31
by GimFlex
ну так подправить можно же скрипт

Posted: 2006-02-06 14:59:50
by ZondeR
??? в смысле использовать везде одну и туже ходилку?

Posted: 2006-02-06 15:00:27
by GimFlex
короч не загоняйся
ты капаешь в пещере или вдоль скалы?