значет так начнём есть скрипт на мининг мне надо чуток подругому чтобы было почти как на ламбер запесать таилы пещеры в файл а точнее переходить туда куда я указал когда записава тот координат тайла.
Этот кусок скрипт на записавание таиля долЖен быть одельна
набрасаю скрипт
Code: Select all
# 1# Mining Elemental hunter by Nmy a.k.a. Dark Enemy
var Pickaxe, Runehome, Blankrune, Runinetu, Nrune, flagpk, flaginvis
# Суть скрипта - мининг по рункам. Запускать надо только sub main(). Нечего другого.
# Если чар жив, при запуске надо иметь в бекпаке руну к сундуку,
# если чар мертв, тогда просто запускайте скрипт.
# После запуска скрипт ищет кирку или лопату - автоматически.
# Требования перед запуском - реги bp bm mr ns в сундуке,
# бланк руны в мешке BlankRunebag,
# замарченые руны в Runebag (Чем больше, тем лучше. У меня где то 59 спотов),
# руна домой Runehome, прямо у сундука,
# инвизки в сундуке для рекола от пк и фарма елемов,
# скролы на Energy Vortex для фарма елемов,
# куча кирок в сундуке.
# При запуске чар должен иметь готовую руну домой в бекпаке. Других рун в бекпаке не должно быть.
##
# Запускается скрипт у сундука и записывается руна домой.
# Советую покушать, этого нет в скрипте.
# Скрипт берет реги, 2 инвизки, скрол вортекса, если надо, кирку и улетает.
# Как только прилетел - идет проверка на елемов (3 тайла вокруг чара),
# если найден елем, он пьет инвизку,
# если елем выха, плут или обсид - убивает елема, Vas An Ort, лутает руду, улетает, выгружается, берет руну в следующею шахту,
# если не найден елем, становится в хайд и идет обкоп.
# Тщательно проверяется журнал на пк, исключая ('Elemental|Scorpion King|Giant Spider|Energy Vortex').
# Через каждый тайл идет проверка на елемов в 3 тайла,
# если найден елем, он пьет инвизку,
# если елем выха, плут или обсид - убивает елема, Vas An Ort, лутает руду, улетает, выгружается, берет руну в следующею шахту.
##
# Улетает от пк - пьет инвизку и делает рекол по рунбуке,
# открываетcя окно текста TextOpen и пишется Nick @ время @ дата, например:
# Roland @ 15:59:20 @ 9.09.18
##
# Track World Items должен быть включен.
# Reconnector - включается, он просто заходит обратно, нет гарантии что скрипт будет дальше работать,
# но шанс на успех все таки есть.
##
# Тотал маны скрипт не использует, пока нет такой нужды.
# Если чар прилетел и там найден елемент, но он не выха,
# по идее он пьет инвизку, и продолжает об коп. Если в процессе найден елем выхи, тогда нечего не меняется,
# чар уже под инвизкой и кастует вортекса, лутает, улетает.
##
# Добавлен выход из ситуации, когда чар зацикливается на You loosen some rocks..
# Добавлена цикличность на кастование вортекса. Видимо иногда не хватает одного вортекса, чтоб убить одного или больше елемов.
# Добавлена запасная бутылка инвиза для рекола от пк. Хоть это не дает 100% шанс, но улучшает возможность скрыться от дебилов.
# Добавлено TextPrint для елементов каторых мы фармим.
##
# Добавлен ресс в Миноке. Чар ресается, летит домой, маркает руну домой, ищет кирку в сундуке, запускает мейн скрипт.
# Добавлены переменные для хелп кнопки, т.к. папердолл у каждого может быть в разных местах.
# Undead можно включать, можно не включать.
##
# Добавлено проверка на кирку или лопату в процессе мининга. Если ее нету, тогда чар полетит домой.
# Если перед запуском у чара есть кирка, он будет копать ей, если нет, тогда возьмет из сундука одну.
# У скрипта пауза 100 секунд, если он улетел от пк, или если его убили.
##
# Теперь скрипт не берет руну в шахту, он ее кидает в Dropbag и там кастует рекал.
# Если заряды кончились, то он маркует руну и кидает ее в Dropbag.
# Если вы хотите чтоб чар поменял шахту (полетел домой, разгрузился, полетел в другую) -
# просто киньте кирку на пол. После рекала можно ее подобрать.
var Runebook='0x4022B604' # Для рекола от пк.
var Runenr='21' # Номер руны.
var Chest='0x4042617E' # Я лично поставил 2 сейфа рядом - 1 для ресурсов, 2й для руды.
var Orechest='0x40425509'
var Dropbag='0x403C6206' # Пустой мешок куда кидают руны после обкопа.
var Runebag='0x403C5FB7'
var Blankrunebag='0x405004D7'
var rune='0x1F14'
var food='0x097B'
var helpX=981 # Переменные без кавычек!
var helpY=53 # Переменные без кавычек!
uo.set('norbcheck','1')
uo.set('norbcalc','1')
sub main()
var markflag
uo.exec('exec Reconnector')
if not uo.getglobal('flagRes')=='1' then
uo.exec('exec Resurrector')
uo.setglobal('flagRes','1')
endif
wait(1000)
uo.filterspeech('clear')
uo.msg('Dont forget track world items!')
uo.findtype(rune,-1,'backpack')
if uo.findcount() then
Runehome=uo.getserial('finditem')
else
uo.msg('Runehome not found! Terminate.')
uo.exec('terminate all')
endif
Open(Chest)
GrabBlankRune()
while not uo.dead()
Open(Runebag)
uo.findtype(rune,-1,Runebag)
while uo.findcount()
Nrune=uo.getserial('finditem')
uo.moveitem('finditem',0,Dropbag)
checklag()
wait(700)
RegCheck()
grabinvis()
GetPickaxe()
grabvortex()
toeat()
RecallRune(Nrune)
uo.ignorereset()
flaginvis=0
markflag=0
flagpk=0
if uo.injournal('The recall rune fades completely.') then
markflag=1
end if
if not checkelem()==1 then
if markflag==1 then
Mark(Blankrune,0)
Runinetu=1
endif
mining()
checkelem()
else
if markflag==1 then
Mark(Blankrune,0)
Runinetu=1
endif
endif
if flagpk==0 then
RecallRune(Runehome)
endif
if uo.injournal('The recall rune fades completely.') then
Open(Chest)
if Runinetu==1 then
GrabBlankRune()
endif
Mark(Blankrune,1)
GrabBlankRune()
endif
Open(Chest)
if Runinetu==1 then
GrabBlankRune()
endif
if markflag==1 then
uo.moveitem(Nrune,0,Dropbag)
checklag()
wait(700)
endif
Dropore()
if flagpk==1 then
wait(100000)
endif
Open(Runebag)
uo.findtype(rune,-1,Runebag)
wend
DropbagCheck()
wend
endsub
sub Resurrector()
var oldX,oldY
while 1
if uo.dead() then
uo.exec('terminate main')
uo.exec('terminate Reconnector')
uo.TextOpen()
uo.TextPrint('- dead - @ '+MakeTime())
wait(5000)
oldX = Uo.GetX()
oldY = Uo.GetY()
uo.useobject('self')
checklag()
wait(700)
repeat
uo.lclick(helpX,helpY)
checklag()
wait(700)
uo.lclick(269,307)
checklag()
wait(700)
uo.lclick(182,204)
checklag()
wait(5000)
until oldX<>UO.GetX() OR oldY<>UO.GetY()
repeat
uo.press(39)
wait(2000)
until UO.GetY()<534
repeat
uo.useobject('0x4001BDF0')
wait(3000)
until uo.life>0
Open(uo.getserial('backpack'))
wait(1000)
oldX = Uo.GetX()
oldY = Uo.GetY()
uo.recall(Runebook,Runenr)
repeat
wait(700)
until oldX<>uo.getx('self') && oldY<>uo.gety('self')
Open(Chest)
RegCheck()
GrabBlankRune()
Mark(Blankrune,1)
if uo.waiting() then
uo.canceltarget()
endif
uo.exec('exec main')
endif
wait(5000)
wend
endsub
sub GetPickaxe()
var n
dim instrument[4]
instrument[1]='0x0F39'
instrument[2]='0x0F3A'
instrument[3]='0x0E86'
instrument[4]='0x0E85'
if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then
for n=1 to 4
uo.findtype(instrument[n],-1,Chest)
if uo.findcount() then
pickaxe=uo.getserial('finditem')
uo.moveitem('finditem',0,'backpack')
checklag()
wait(700)
return
endif
next
else
for n=1 to 4
uo.findtype(instrument[n],-1,'my')
if uo.findcount() then
pickaxe=uo.getserial('finditem')
return
endif
next
endif
endsub
sub Tohide()
while not uo.Hidden()
uo.warmode(0)
uo.warmode(0)
if uo.Journal(0)=='You are preoccupied with thoughts of battle.' then
uo.warmode(0)
endif
uo.Print('Пытаемся уйти в хайд...')
uo.DeleteJournal()
uo.UseSkill('Stealth')
wait(4000)
wend
end sub
sub checkelem()
var n, i
var flagvortex, Elemental
uo.set('finddistance','3')
uo.findtype('0x0010',-1,'ground')
while uo.findcount()
Elemental=uo.getserial('finditem')
invis()
if checkcolor(Elemental)==1 then
flagvortex=1
castvortex()
uo.textopen()
uo.textprint(uo.getname(Elemental)+' @ '+MakeTime())
for n=0 to 10
wait(1000)
checkpk()
if flagpk==1 then
return
endif
next
else
uo.ignore(Elemental)
endif
uo.findtype('0x0010',-1,'ground')
wend
if flagvortex==1 then
repeat
checklag()
while uo.mana<22
wait(500)
wend
uo.waittargetobject('self')
uo.cast('Mass Dispel')
WaitForMana()
wait(1000)
until not uo.injournal('The spell fizzles')
colore()
return 1
endif
endsub
sub colore()
var n, i
Dim ore[3]
ore[1]='0x19B8'
ore[2]='0x19B9'
ore[3]='0x0EED'
Dim color[22]
color[1]='0x09DA' ; vulcan
color[2]='0x0060' ; aqua
color[3]='0x0BA7' ; eldar
color[4]='0x09E6' ; elvin
color[5]='0x09B9' ; acid
color[6]='0x09D3' ; steel
color[7]='0x008F' ; sand rock
color[8]='0x09EC' ; blood crest
color[9]='0x09F0' ; gorgan
color[10]='0x010F' ; krynite
color[11]='0x09A4' ; crystaline
color[12]='0x0085' ; dragon
color[13]='0x08AF' ; plutonium
color[14]='0x0028' ; obsidian
color[15]='0x0193' ; Agarite
color[16]='0x052D' ; myuth
color[17]='0x00CE' ; valorite
color[18]='0x07D5' ; varite
color[19]='0x0455' ; blakrock
color[20]='0x04C2' ; bloodrock
color[21]='0x0032' ; gold
color[22]='0x0000' ; gp
uo.set('finddistance','5')
for n=1 to 3
for i=1 to 22
uo.findtype(ore[n],color[i],'ground')
while uo.findcount()>0
uo.moveitem('finditem','-1','backpack')
wait(700)
uo.findtype(ore[n],color[i],'ground')
wend
next
next
endsub
sub COL()
var c
Dim color[21]
color[1]='0x09DA' ; vulcan
color[2]='0x0060' ; aqua
color[3]='0x0BA7' ; eldar
color[4]='0x09E6' ; elvin
color[5]='0x09B9' ; acid
color[6]='0x09D3' ; steel
color[7]='0x008F' ; sand rock
color[8]='0x09EC' ; blood crest
color[9]='0x09F0' ; gorgan
color[10]='0x010F' ; krynite
color[11]='0x09A4' ; crystaline
color[12]='0x0085' ; dragon
color[13]='0x08AF' ; plutonium
color[14]='0x0028' ; obsidian
color[15]='0x0193' ; Agarite
color[16]='0x052D' ; myuth
color[17]='0x00CE' ; valorite
color[18]='0x07D5' ; varite
color[19]='0x0455' ; blakrock
color[20]='0x04C2' ; bloodrock
color[21]='0x0032' ; gold
for n=1 to 21
endsub
sub checkcolor(obj)
var n, c
Dim color[21]
color[1]='0x09DA' ; vulcan
color[2]='0x0060' ; aqua
color[3]='0x0BA7' ; eldar
color[4]='0x09E6' ; elvin
color[5]='0x09B9' ; acid
color[6]='0x09D3' ; steel
color[7]='0x008F' ; sand rock
color[8]='0x09EC' ; blood crest
color[9]='0x09F0' ; gorgan
color[10]='0x010F' ; krynite
color[11]='0x09A4' ; crystaline
color[12]='0x0085' ; dragon
color[13]='0x08AF' ; plutonium
color[14]='0x0028' ; obsidian
color[15]='0x0193' ; Agarite
color[16]='0x052D' ; myuth
color[17]='0x00CE' ; valorite
color[18]='0x07D5' ; varite
color[19]='0x0455' ; blakrock
color[20]='0x04C2' ; bloodrock
color[21]='0x0032' ; gold
c=uo.getcolor(obj)
for n=1 to 21
if c == color[n] then
return 1
endif
next
endsub
sub castvortex()
repeat
checklag()
uo.waittargetobject('self')
uo.findtype('0x1F66',-1,'backpack')
if uo.findcount() then
while uo.mana<13
wait(500)
wend
uo.useobject('finditem')
else
while uo.mana<27
wait(500)
wend
uo.cast('Energy Vortex')
endif
WaitForMana()
until not uo.injournal('The spell fizzles')
endsub
sub WaitForMana()
VAR w,m=uo.mana
for w=0 to 150
if uo.mana<m then
return
endif
wait(500)
next
endsub
sub grabvortex()
var kol=5, q
uo.findtype('0x1F66',-1,'backpack')
if uo.getquantity('finditem')<kol then
q=kol-uo.getquantity('finditem')
uo.print('Ищем вортекс')
uo.findtype('0x1F66',-1,Chest)
if uo.findcount() then
uo.moveitem('finditem',STR(q),'backpack')
checklag()
wait(700)
endif
endif
endsub
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(what)
uo.useobject(what)
checklag()
wait(700)
endsub
sub Dropore()
var n
Open(Orechest)
Dim ore[11]
ore[0]='0x19BA'
ore[1]='0x19B7'
ore[2]='0x19B8'
ore[3]='0x19B9'
ore[4]='0x0F18'
ore[5]='0x0F10'
ore[6]='0x0F15'
ore[7]='0x0F11'
ore[8]='0x0F0F'
ore[9]='0x0F26'
ore[10]='0x0F16'
ore[11]='0x0EED'
uo.warmode(0)
uo.useskill('Stealth')
for n=0 to 11
uo.findtype(ore[n],-1,'backpack')
while uo.findcount()
uo.moveitem('finditem',0,Orechest)
checklag()
wait(400)
uo.findtype(ore[n],-1,'backpack')
wend
next
uo.print('Dropore done.')
Open(Chest)
endsub
sub Mark(RuneID,Place)
repeat
if uo.mana<33 then
meditation()
endif
checklag()
Uo.Cast('Mark',RuneID)
WaitForMana()
until not uo.injournal('The spell fizzles')
if Place==0 then
Nrune=uo.getserial(RuneID)
else
Runehome=uo.getserial(RuneID)
endif
endsub
sub meditation()
uo.findtype('0x0F0E','0x09DF','backpack')
if uo.findcount() then
uo.useobject('finditem')
wait(700)
else
while uo.mana < uo.int
if uo.Journal(0)=='You are preoccupied with thoughts of battle.' then
uo.warmode(0)
endif
checklag()
Uo.Useskill('Meditation')
waitformed()
wend
endif
endsub
sub waitformed()
var n
for n=0 to 100
if uo.injournal('You lose|at peace') then
return
endif
wait(500)
next
endsub
sub RecallRune(nowrune)
uo.Print('улетаем по руне')
var oldX,oldY
oldX = Uo.GetX()
oldY = Uo.GetY()
repeat
if uo.mana<20 then
meditation()
endif
Uo.Cast('Recall',nowrune)
WaitForMana()
wait(1000)
Until oldX<>UO.GetX() AND oldY<>UO.GetY()
endsub
sub grabinvis()
uo.findtype('0x0F0E',-1,'backpack')
while uo.findcount()
uo.moveitem('finditem',0,Chest)
checklag()
wait(700)
uo.findtype('0x0F0E',-1,'backpack')
wend
uo.findtype('0x0F0E','0x0631',Chest)
if uo.findcount() then
uo.print('Ищем инвизку')
uo.moveitem('finditem','3','backpack')
checklag()
wait(700)
endif
endsub
sub RegCheck()
VAR i,q
VAR kol=8
Dim Regs[6]
Regs[0]='0x0F7A' ; Black Pearl
Regs[1]='0x0F7B' ; Bood Moss
Regs[2]='0x0F86' ; Mandrake Root
Regs[3]='0x0F88' ; Nightshade
Regs[4]='0x0F8C' ; Sulfurous Ash
Regs[5]='0x0F84' ; Garlic
for i=0 to 5
if uo.count(Regs[i])<>kol then
q=kol-uo.count(Regs[i])
if q<>0 then
if q>0 then
uo.findtype(Regs[i],-1,Chest)
if uo.findcount() then
uo.moveitem('finditem',STR(q),'backpack',141,134,0)
checklag()
wait(700)
uo.print('Берем реги для рекола...')
else
uo.msg('No regs')
return
endif
else
q=q*-1
uo.findtype(Regs[i],-1,'my')
if uo.findcount() then
uo.moveitem('finditem',STR(q),Chest)
checklag()
wait(700)
uo.print('Регов больше чем надо. Кидаем лишнее в сундук')
endif
endif
endif
endif
next
endsub
sub GrabBlankRune()
Open(BlankRunebag)
uo.findtype(rune,-1,BlankRunebag)
if uo.findcount() then
Blankrune=uo.getserial('finditem')
uo.moveitem('finditem',0,'backpack')
checklag()
wait(700)
uo.print('Взяли бланк руну')
Runinetu=0
else
uo.print('Бланк рун больше нету! Скрипт остановлен.')
uo.exec('terminate all')
endif
endsub
sub DropbagCheck()
uo.print('Проверяем мешок Dropbag')
Open(Dropbag)
uo.findtype(rune,-1,Dropbag)
while uo.findcount()
uo.moveitem('finditem',0,Runebag)
checklag()
wait(700)
uo.print('Нашли руну. Кладем их в сумку Runebag.')
uo.findtype(Rune,-1,Dropbag)
wend
endsub
sub mining()
var mx, my, mz, i, j, f
mx = UO.GetX('self')
my = UO.GetY('self')
mz = UO.GetZ('self')
while UO.Weight <= (UO.STR * 1)
for i = mx-4 to mx+4
for j = my -4 to my+4
BEGIN:
UO.Print('Копаем в координатах: '+str(mx-i)+' '+str(my-j))
for f=1 to 10
if uo.count('0x0F39')==0 and uo.count('0x0F3A')==0 and uo.count('0x0E86')==0 and uo.count('0x0E85')==0 then
return
endif
InfoOre()
UO.DeleteJournal()
Tohide()
if uo.waiting() then
uo.canceltarget()
endif
UO.Waittargettile('1341', str(i), str(j), str(mz))
DigAhole(i,j,mz)
if waitforore()==1 then
f=10
endif
uo.findtype('0x19B7','0x0000','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x0750','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x0193','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x0590','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x060A','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x0088','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x0488','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x0482','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x096B','backpack') # Тип и цвет айрона
uo.drophere('finditem')
uo.findtype('0x19B7','0x0014','backpack') # Тип и цвет айрона
uo.drophere('finditem')
if flagpk==1 then
return
endif
if uo.injournal('You have been revealed') and flaginvis==1 then
flaginvis=0
invis()
return
endif
next
if uo.journal(0)==uo.getname('self')+': You loosen some rocks but fail to find any useable ore.' then
wait(10000)
goto BEGIN
endif
if checkelem()==1 then
return
endif
next
next
wend
endsub
sub DigAhole(i,j,mz)
var f
for f=0 to 10
checklag()
uo.waittargettile('1341',i,j,mz)
uo.useobject(pickaxe)
if waitforore()==1 then
return
endif
next
endsub
sub waitforore()
var n
for n=0 to 50
checkpk()
if flagpk==1 then
return
endif
if UO.InJournal('You put the Bloodrock Ore in your pack') then
return
endif
if UO.InJournal('You put the Rose Ore in your pack') then
return
endif
if UO.InJournal('You put the Agapite Ore in your pack') then
return
endif
if UO.InJournal('You put the Gold Ore in your pack') then
return
endif
if uo.injournal('no ore here|location|far away|in rock|You have been revealed|You put') then
return 1
endif
if UO.InJournal('You put|heavy|but fail') then
return
endif
wait(500)
ws()
next
endsub
sub checkpk()
var n
var ser
var noto
var me=uo.getserial('self')
for n=0 to 9
ser=uo.journalserial(n)
noto=uo.getnotoriety(ser)
if noto<>0 and noto<>1 and not uo.injournal('Elemental|Scorpion King|Giant Spider|Energy Vortex') and not ser==me then
uo.TextOpen()
uo.TextPrint(uo.getname(ser)+' @ '+MakeTime())
gohome()
flagpk=1
return
endif
next
endsub
sub toeat()
repeat
uo.findtype(food,-1,Chest)
if uo.findcount() then
uo.moveitem('finditem','2','backpack')
checklag()
wait(600)
repeat
uo.usetype(food)
wait(500)
until uo.injournal('full to eat') or uo.count(food)==0
endif
until uo.injournal('full to eat')
uo.findtype(food,-1,'backpack')
if uo.findcount() then
uo.moveitem('finditem',0,Chest)
checklag()
wait(600)
endif
endsub
sub gohome()
var oldX=uo.getx('self')
var oldY=uo.gety('self')
invis()
uo.recall(Runebook,Runenr)
repeat
wait(700)
if uo.injournal('You have been revealed') then
flaginvis=0
invis()
endif
until oldX<>uo.getx('self') && oldY<>uo.gety('self')
endsub
sub invis()
if flaginvis<>1 then
uo.findtype('0x0F0E','0x0631','my')
if uo.findcount() then
uo.warmode(0)
uo.useobject('finditem')
flaginvis=1
checklag()
endif
endif
endsub
sub mana()
if flaginvis<>1 then
uo.findtype('0x0F0E','0x09DF','my')
if uo.findcount() then
uo.warmode(0)
uo.useobject('finditem')
flaginvis=1
checklag()
endif
endif
endsub
sub ws()
if uo.journal(0)=='World is saving now...' then
repeat
wait(700)
until uo.journal(0)<>'World is saving now...'
endif
endsub
sub CheckLag()
repeat
UO.DeleteJournal()
UO.Click('backpack')
until backpack()==1
endsub
sub backpack()
var n
for n=0 to 200
if uo.injournal('a backpack') then
return 1
endif
wait(200)
next
endsub
sub gohome1()
var oldX=uo.getx('self')
var oldY=uo.gety('self')
invis()
uo.recall(Runebook,Runenr)
repeat
wait(700)
if uo.injournal('You have been revealed') then
flaginvis=0
endif
until oldX<>uo.getx('self') && oldY<>uo.gety('self')
endsub
sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(70000) # WorldSave Protection
UO.Say('vertijok1')
Wait(3000)
UO.Say('eegolcuf')
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.Exec('exec gohome1')
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
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
EndIf
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
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub
а это ходилка
Code: Select all
########################### ХОДИЛКА 3 ##########################
#var Prec=3 # Как близко следует подойти к цели (Precision)
#var MaxTraceDistance=15 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву.
#var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1.
#var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места.
#UO.SetGlobal("Logging","1") # - показывать отладочные сообщения.
#UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ.
#В функции IsPass, содержиться список проходимых тайлов.
#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден)
#Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата:
#1 - влево вниз
#2 - вниз
#3 - вправо вниз
#4 - вправо
#5 - вправо вверх
#6 - вверх
#7 - влево вверх
#8 - влево
#Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода).
#####################################################
# WW W WW AA LL Kk KK EE EE RRR #
# WW W WW AA A LL Kk K EEE R R #
# WW W WW AA A LL KKK EEEEE R R #
# WW WW WW AAAA LL KKK EEE RRR #
# WWW WWW AA A LLLL KK Kk EE EE R RR #
#####################################################
var MaxTraceDistance=10
var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов
var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).
var Speed=1
var StepTimeOut=600 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.
# Для ходьбы - 500+Ping
# Для бега/ходьбы на лошади - 300+Ping
# Бег на лошади - 150 + Ping
var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.
var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.
Sub Walker(GoX,GoY,Prec)
UO.warmode(0)
UO.SetGlobal("Logging","0")
UO.SetGlobal("BlindWalk","0")
var LastDir
var MoveRes
var TracerCnt
UO.SetGlobal("GlobalGoX",str(GoX))
UO.SetGlobal("GlobalGoY",str(GoY))
while not IsEnd(GoX,GoY,Prec)
TracerCnt = MaxTraceDistance
repeat
LogInfo('Just walking')
LastDir=GoUntilHit(GoX,GoY,Prec)
if IsEnd(GoX,GoY,Prec) then
return 1
endif
LogInfo('Tracing')
MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt)
if TracerCnt > LimitTrace then
return 0
endif
TracerCnt = TracerCnt + TraceLoopIncrease
until MoveRes == 1
wend
return 1
endsub
Sub FullAroundTrace(StartDir,GoX,GoY,Prec,MaxTrace)
var LineX=UO.GetX()
var LineY=UO.GetY()
var CurDir=StartDir
var Direction=CountDirection(GoX,GoY,CurDir,Prec)
var StartX,StartY
var MovesDone=0
repeat
StartX=UO.GetX()
StartY=UO.GetY()
CurDir=Tracer(CurDir,Direction,Prec)
if (CurDir==GetDir(GoX,GoY,Prec)) then
return 1
endif
if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then
return 1
endif
MovesDone=MovesDone+1
CurDir=AddToDir(CurDir,-Direction,Prec)
until MovesDone>MaxTrace
return 0
endsub
Sub CountDirection(GoX,GoY,StartDir,Prec)
var GoDir=GetDir(GoX,GoY,Prec)
var MyX=UO.GetX()
var MyY=UO.GetY()
if GoDir<StartDir then
return -1
endif
if GoDir>StartDir then
return 1
endif
if Abs(MyX-GoX)>Abs(MyY-GoY) then
if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then
return -1
else
return 1
endif
else
if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then
return -1
else
return 1
endif
endif
endsub
Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY,Prec)
var x3,y3,x4,y4
x3=StartX
y3=StartY
x4=StartX+(XFromDir(Dir)-StartX)*Speed
y4=StartY+(YFromDir(Dir)-StartY)*Speed
return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
endsub
Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec)
if x1==x3 and y1==y3 then
return false
endif
var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)
var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1)
if z1*z2>0 then
return false
else
LogInfo('Vector info:')
LogInfo('x1= '+str(x1))
LogInfo('y1= '+str(y1))
LogInfo('x2= '+str(x2))
LogInfo('y2= '+str(y2))
LogInfo('x3= '+str(x3))
LogInfo('y3= '+str(y3))
LogInfo('x4= '+str(x4))
LogInfo('y4= '+str(y4))
return true
endif
endsub
Sub IsDiap(X,X0,X1,Prec)
if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then
return true
endif
return false
endsub
Sub GoUntilHit(GoX,GoY,Prec)
var LastDir
LastDir=GetDir(GoX,GoY,Prec)
var CouldMove
repeat
LastDir=GetDir(GoX,GoY,Prec)
if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then
CouldMove=TryDir(LastDir,Prec)
endif
until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove
return LastDir
endsub
Sub IsEnd(GoX,GoY,Prec)
if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then
LogInfo('END FOUND')
return true
else
if Abs(UO.GetX()-GoX)>=100 and Abs(UO.GetY()-GoY)>=100 then
LogInfo('END FOUND')
return true
else
return false
endif
#return false
endif
endsub
Sub GetDir(GoX,GoY,Prec)
var MyX=UO.GetX()
var MyY=UO.GetY()
var DiffX=Abs(UO.GetX()-GoX)
var DiffY=Abs(UO.GetY()-GoY)
var GoDir=0
if (DiffX/(DiffY+0.1))>=2 then
if (MyX>GoX) then
GoDir=7
else
GoDir=3
endif
else
if (DiffY/(DiffX+0.1))>=2 then
if (MyY>GoY) then
GoDir=5
else
GoDir=1
endif
else
if (MyX>GoX) and (MyY>GoY) then
GoDir=6
else
if (MyX>GoX) and (MyY<GoY) then
GoDir=8
else
if (MyX<GoX) and (MyY>GoY) then
GoDir=4
else
if (MyX<GoX) and (MyY<GoY) then
GoDir=2
endif
endif
endif
endif
endif
endif
return GoDir
endsub
Sub Tracer(StartDir,Direction,Prec)
var CurDir=StartDir
var Result
repeat
Result=TryDir(CurDir,Prec)
if not Result then
CurDir=AddToDir(CurDir,Direction,Prec)
endif
until Result
return Result
endsub
Sub AddToDir(Dir,Cnt,Prec)
var NewDir=Dir
NewDir=NewDir+Cnt
while NewDir>8
NewDir=NewDir-8
wend
while NewDir<1
NewDir=NewDir+8
wend
return NewDir
endsub
Sub TryDir(Dir,Prec)
var BegX=UO.GetX() # Ia?aeuiia O
var BegY=UO.GetY() # Ia?aeuiia Y
var Counter=0
var GoX=BegX
var GoY=BegY
GoX=XFromDir(Dir)
GoY=YFromDir(Dir)
if not IsPass(GoX,GoY) then
LogInfo(str(GoX)+':'+str(GoY)+' is not passable')
return false
endif
return TurnAndGoDir(Dir,Prec)
endsub
Sub XFromDir(Dir)
if Dir==2 OR Dir==3 Or Dir==4 then
return (UO.GetX()+1)
endif
if Dir==6 OR Dir==7 Or Dir==8 then
return (UO.GetX()-1)
endif
return (UO.GetX())
endsub
Sub YFromDir(Dir)
if Dir==8 OR Dir==1 Or Dir==2 then
return (UO.GetY()+1)
endif
if Dir==4 OR Dir==5 Or Dir==6 then
return (UO.GetY()-1)
endif
return (UO.GetY())
endsub
Sub TurnAndGoDir(Dir,Prec)
var StartDir=GetDirToDir(UO.GetDir(),Prec)
var StartX=UO.GetX()
var StartY=UO.GetY()
var EndDir
var Counter=0
var TestCounter=CheckCnt
#Direction Test
repeat
Counter = 0
LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter))
PressDir(Dir)
repeat
EndDir=GetDirToDir(UO.GetDir(),Prec)
wait(DynamicPause)
Counter=Counter+1
until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
TestCounter = TestCounter - 1
LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter))
until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
if Counter>=StepTimeOut/DynamicPause then
LogInfo('Direction timeout reached')
return 0
endif
#End direction Test
if StartY<>UO.GetY() or StartX<>UO.GetX() then
return Dir
endif
#Start Primary test
TestCounter=CheckCnt
repeat
GoDir(Dir,Prec)
Counter=0
repeat
wait(DynamicPause)
Counter=Counter+1
until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause
TestCounter = TestCounter - 1
until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause
#End primary test
if Counter>=StepTimeOut/DynamicPause then
LogInfo('Step timeout reached')
return 0
else
return Dir
endif
endsub
Sub GetDirToDir(GotDir,Prec)
var ChangedDir=-GotDir
ChangedDir=AddToDir(ChangedDir,5,Prec)
return ChangedDir
endsub
Sub DirToInj(Dir)
dim Dirs[9]
Dirs[1]=1
Dirs[2]=2
Dirs[3]=3
Dirs[4]=6
Dirs[5]=9
Dirs[6]=8
Dirs[7]=7
Dirs[8]=4
return (Dirs[Dir])
endsub
Sub PressDir(Dir)
dim Dirs[9]
Dirs[1]=35
Dirs[2]=40
Dirs[3]=34
Dirs[4]=39
Dirs[5]=33
Dirs[6]=38
Dirs[7]=36
Dirs[8]=37
UO.Press(Dirs[Dir],1)
endsub
Sub GoDir(Dir,Prec)
dim Dirs[9]
Dirs[1]=35
Dirs[2]=40
Dirs[3]=34
Dirs[4]=39
Dirs[5]=33
Dirs[6]=38
Dirs[7]=36
Dirs[8]=37
var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX")))
var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY")))
var GoDistance
if (DistanceX-Prec)<Speed then
GoDistance=DistanceX-Prec
else
if (DistanceY-Prec)<Speed then
GoDistance=DistanceY-Prec
else
GoDistance=Speed
endif
endif
UO.Press(Dirs[Dir],GoDistance)
endsub
Sub IsPass(X,Y)
if UO.GetGlobal("BlindWalk") then
return true
endif
dim Types[60]
Types[1]=3
Types[2]=25
Types[3]=51
Types[4]=63
Types[5]=113
Types[6]=140
Types[7]=172
Types[8]=219
Types[9]=232
Types[10]=235
Types[11]=239
Types[12]=243
Types[13]=248
Types[14]=251
Types[15]=264
Types[16]=267
Types[17]=282
Types[18]=289
Types[19]=321
Types[20]=379
Types[21]=420
Types[22]=440
Types[23]=476
Types[24]=499
Types[25]=513
Types[26]=542
Types[27]=578
Types[28]=586
Types[29]=622
Types[30]=700
Types[31]=804
Types[32]=1740
Types[33]=1758
Types[34]=1770
Types[35]=1779
Types[36]=1779
Types[37]=1881
Types[38]=1886
Types[39]=1801
Types[40]=1805
Types[41]=1813
Types[42]=1820
Types[43]=1831
Types[44]=1833
Types[45]=1843
Types[46]=1850
Types[47]=1873
Types[48]=1876
Types[49]=1885
Types[50]=1888
Types[51]=1946
Types[52]=1969
Types[53]=2500
Types[54]=2539
for var i=1 TO 53 STEP 2
if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then
return true
endif
next
return false
endsub
Sub LogInfo(Line)
if not UO.GetGlobal("Logging")=="0" then
UO.TextOpen()
UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line);
endif
endsub
Sub Abs(X)
if X>0 then
return X
else
return (-X)
endif
endsub
################################################################
# конец ходилки ################################################
################################################################
1)мне надо так чтобы я один раз взял кординаты таилов из пещеры и забыл про них
2)я зделал скрипт но есть одно но при убиства елема он не улетает а переходит на другой таил а мне недо чтобы он улетел .
3)я копаЮ -4 +4 после обкопку вокруг себя мне надо перехадить на следущий кординат и сново копал, задать одельный кусок скрипта с координатами не выходит потому что если придёт пк то он не улетит а передёт на следущий таил что мне не выгодна это
)потом вставить в Этот скрипт так чтобы дапустим при убиства елема и лута руды чтобы он улетал дамой скидавать а остальное так как есть тот кто знает в скриптов то поимёт что тут он не копает полностю руду с таила а токо один раз выкапал и всё переходит на другой тайл вот собствено и всё что я хотел чтобы вы помогли, да забыл шард ДРВ