Еще не совсем последняя версия, но все же - Версия 2.7.!
Возможности:
1. Копает по 1 разу с тайла (при физле копает еще раз тот же тайл, пока не выроет че нить).
2. При выкапывании элемента - убивает его, собирает руду (это еще не проверил, но вроде должен), и улетает домой, потом возвращаеться в шахту и по кругу.
3. При появлении синего или красного или Man реколиться по руне к сейфу, все выкладывает, набирает нужные реги, инвизки, манки, ждет пока уйдет ПК(время выставляеться) и назад копать.
4. После веса в 600 улетает домой по рунбуке, выкладывает и назад копать.
5. Копает в друх локациях, т.к. руды мало, а копаем быстро (ходим в общем от одного места к другому, окапываясь вокруг себя)
Еще добавлю:
1. Речарж рунбуки.
2. Каким то макаром может сделаю определение полиморфного ПК.
3. Реконект.
4. Может че нить еще...
Code:
#############################
##### Мининг версия 2.7 #####
#############################
sub maning()
var mx, my, mz, i, j, e, f, g, t, Exit1, a
UO.Exec("set norbcheck 1") # нужно для рекола #
UO.Exec("set norbcalc 1") # нужно для рекола #
e=1 # перменная местонахождения #
f=0 # перменная подсчета пустых тайлов #
# необходимо указать Runeboock в Object - from target #
UO.DeleteJournal()
na4alo: # поехали #
mx = UO.GetX("self")
my = UO.GetY("self")
mz = UO.GetZ("self")
For i = mx-4 to mx+4 # радиус окапывания по х #
For j = my-4 to my+4 # радиус окапывания по у #
tohide() # прячемся #
UO.Print("Mine in: "+str(mx-i)+" "+str(my-j))
while not UO.InJournal("You put") and not UO.InJournal("heavy") and not UO.InJournal("location") and not UO.InJournal("no ore") and not UO.InJournal("far away") and not UO.InJournal("in rock")
UO.DeleteJournal()
if uo.waiting() then
uo.canceltarget()
endif
UO.Waittargettile("1341", str(i), str(j), str(mz))
UO.Useobject("Shovel") # необходимо указать Shovel в Object - from target #
while not UO.InJournal("You put") and not UO.InJournal("heavy") and not UO.InJournal("location") and not UO.InJournal("no ore") and not UO.InJournal("but fail") and not UO.InJournal("far away") and not UO.InJournal("in rock")
if uo.injournal("heavy") then # вырыли элемента #
# ниже поменять на свою мелодию #
uo.playwav("d:\Games\Ultima Online 2D\element.wav")
# убиваем элемента, собираем руду и копаем дальше #
Vortex:
uo.exec('usetype 0x0f0e 0x0631') # пьем инвизку, а то энергетик порвет =) #
wait(300)
uo.cast('Energy Vortex','self')
repeat
wait(300)
until uo.injournal("fizzles") or uo.injournal("Vortex")
if uo.injournal("fizzles") then
goto Vortex
else
cheklag()
wait(15000)
istka:
uo.exec('usetype 0x0f0e 0x09DF') # пьем манку #
wait(500)
uo.cast('Mass Dispel','self')
cheklag()
wait(5000)
if uo.injournal("fizzles") then
goto istka
endif
UO.SetReceivingContainer('backpack')
UO.FindType('0x19B9',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.FindType('0x19B7',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.FindType('0x19BA',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.FindType('0x19B8',-1,'ground')
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(2000)
endif
UO.UnSetReceivingContainer()
endif
goto reccal
endif
# ниже записать всех своих знакомых киллеров =) #
if Scaner()==1 or uo.injournal("man") then # смотрим как ПК обломался и улыбаемся #
tut:
if uo.waiting() then
uo.canceltarget()
endif
uo.exec('usetype 0x0f0e 0x0631') # пьем инвизку, лежат в паке #
Save() # улетаем домой если ПК Вас раздетектил(при появлении записанных ПК), все выкладываем пополняем реги перемаркиваем руну, медитируем, прячемся и назад через установленное время #
# ниже поменять на свою мелодию #
uo.playwav("d:\Games\Ultima Online 2D\pk.wav")
e=1 # устанавливаем начальное положение #
wait(180000) # стоко времени ждем дома у сейфа #
goto end
endif
###########################################################
##### Переход если 20 раз не найдена руда вокруг себя #####
###########################################################
if UO.InJournal("no ore here") then
f=f+1
endif
if f>20 then # 20 раз #
# ниже поменять на свою мелодию - это я так для себя сделал, необязательная мелодия #
uo.playwav("d:\Games\Ultima Online 2D\perehod.wav")
f=0 # обнуление переменной пустых тайлов #
g=0 # переменная перехода #
if e == 1 then
UO.Print("Go West 7 step.") # столько раз будем шагать на West #
repeat
g=g+1
GoW()
if Scaner()==1 or uo.injournal("man") then # предохраняемся #
goto tut
endif
until g>6 # 6+1 стоко шагов #
UO.DeleteJournal()
e=2
goto na4alo
else
UO.Print("Go East 7 step.") # столько раз будем шагать на East #
repeat
g=g+1
GoE()
if Scaner()==1 or uo.injournal("man") then
goto tut
endif
until g>6
UO.DeleteJournal()
e=1
goto na4alo
endif
endif
wend
if uo.weight > 600 then # вес по которому летим домой по рунбуке #
goto end
endif
wend
#########
UO.DeleteJournal()
next # переключатель цикла #
next # то же #
goto na4alo # и по кругу пока не найдем 20 пустых тайлов #
end:
if uo.waiting() then
uo.canceltarget()
endif
uo.exec("recall Runeboock 21") # домой по рунбуку - в первом слоте руна к сейфу #
mx = UO.GetX("self")
my = UO.GetY("self")
wait(11000)
if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then
goto end # проверка на физл #
endif
e=1
loot() # выкладывает накопанное в сейф #
reccal:
uo.deletejournal()
if uo.waiting() then
uo.canceltarget()
endif
uo.exec("recall Runeboock 94") # назад трудиться в шахте =), рунка в 8-м слоте рунбуки #
mx = UO.GetX("self")
my = UO.GetY("self")
wait(11000)
if not UO.GetX("self") <> mx and not UO.GetY("self") <> my then
goto reccal # проверка на физл #
endif
goto na4alo
end sub
##################################################
##### Переход на 1 клетку в направлении West #####
##################################################
sub GoW()
VAR walkwait=300
VAR x,y,dir=6
VAR key=36 ; Home key
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
if UO.GetDir()<>dir then
cheklag()
endif
wend
UO.Press(key)
wait(walkwait)
if x==UO.GetX() and y==UO.GetY() then
cheklag()
Endif
if UO.GetX()+1==x then
return -1
else
return 1
endif
end sub
##################################################
##### Переход на 1 клетку в направлении East #####
##################################################
sub GoE()
VAR walkwait=300
VAR x,y,dir=2
VAR key=34 ; PgDown
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
if UO.GetDir()<>dir then
cheklag()
endif
wend
UO.Press(key)
wait(walkwait)
if x==UO.GetX() and y==UO.GetY() then
cheklag()
endif
if UO.GetX()-1==x then
return -1
else
return 1
endif
end sub
#############################################################
##### Анти ПК: если Вас раздетектили - по рунке к сейфу #####
#############################################################
sub Save() # описано выше #
reccal2:
UO.DeleteJournal()
if uo.waiting() then
uo.canceltarget()
endif
UO.FindType('0x1F15',-1,'backpack')
UO.Cast('Recall','finditem')
repeat
wait(300)
until uo.injournal("Kal Ort Por")
wait(4000)
if uo.injournal("fizzles") then
goto reccal2
endif
wait(2000)
tohide()
loot()
UO.DeleteJournal()
UO.FindType('0x1F15',-1,'backpack')
UO.Cast('Mark','finditem')
wait(7000)
uo.exec('usetype 0x0f0e 0x09DF') # Пьем манку #
Med:
uo.warmode('0')
repeat
UO.UseSkill('Meditation')
wait(5000)
until uo.injournal("peace") or uo.injournal("lose") or uo.injournal("preoccupied")
if UO.InJournal("lose") then
UO.DeleteJournal()
goto Med
endif
fillitems()
tohide()
end sub
#########################################
##### Упаковка готового продукта =) #####
#########################################
sub loot() # складываем руду в сейф #
VAR a, Exit
if uo.waiting() then
uo.canceltarget()
endif
VAR UnloadCont='0x4000E3AA' ;0x401731D2' # поменять на ID своего сейфа куда складываем руду, узнать его можно командой ',info - появиться цель, на сейф, в окне Text - ID' #
DIM Ore[5]
Ore[0]=0x19B9 # 4 и более руды #
Ore[1]=0x19B7 # 1 руда #
Ore[2]=0x19BA # 2 руды #
Ore[3]=0x19B8 # 3 руды #
UO.SetReceivingContainer(UnloadCont)
wait(500)
For a = 0 to 3
Exit=0
repeat
UO.FindType(Ore[a])
if UO.GetQuantity('finditem')>0 then
UO.Grab('0','finditem')
wait(1500)
else
Exit=1
endif
until Exit==1
next
UO.UnSetReceivingContainer()
cheklag()
end sub
####################
##### Прячемся #####
####################
sub tohide()
while not UO.Hidden()
UO.DeleteJournal()
UO.warmode('0')
UO.UseSkill('Stealth')
repeat
wait(300)
until UO.InJournal('You have hidden') OR UO.InJournal('seem to hide') OR UO.InJournal('preoccupied')
cheklag()
wend
end sub
#####################################################################
##### Пополнение всех нужных регов до 10, инвизок до 2, манок до 3 #####
#####################################################################
sub fillitems()
VAR StoreRegCont='0x40173275' # непосредственно сам пак с регами, инвизками и манками в сейфе #
VAR CharRegBag='backpack' # куда сложить реги себе #
VAR CountReg=10 # количество регов каждого типа #
VAR WaitTime=1000
VAR MainSafe='0x4000E3AA' # сейф где лежит пак с регами #
var y
tohide()
UO.FindType('0x09B0','0x0044','backpack')
if UO.GetQuantity('finditem')>0 then
CharRegBag='finditem'
endif
UO.UseObject(MainSafe)
cheklag()
UO.UseObject(StoreRegCont)
cheklag()
UO.SetReceivingContainer(CharRegBag)
wait(WaitTime)
if UO.BM<CountReg then
UO.FindType('0x0F7B','-1',StoreRegCont) ; BM
UO.Grab(STR((CountReg-UO.BM)),'finditem')
wait(WaitTime)
endif
cheklag()
if UO.BP<CountReg then
UO.FindType('0x0F7A','-1',StoreRegCont) ; BP
UO.Grab(STR(CountReg-UO.BP),'finditem')
wait(WaitTime)
endif
cheklag()
if UO.GA<CountReg then
UO.FindType('0x0F84','-1',StoreRegCont) ; GA
UO.Grab(STR(CountReg-UO.GA),'finditem')
wait(WaitTime)
endif
cheklag()
if UO.MR<CountReg then
UO.FindType('0x0F86','-1',StoreRegCont) ; MR
UO.Grab(STR(CountReg-UO.MR),'finditem')
wait(WaitTime)
endif
cheklag()
if UO.NS<CountReg then
UO.FindType('0x0F88','-1',StoreRegCont) ; NS
UO.Grab(STR(CountReg-UO.NS),'finditem')
wait(WaitTime)
endif
cheklag()
if UO.SA<CountReg then
UO.FindType('0x0F8C','-1',StoreRegCont) ; SA
UO.Grab(STR(CountReg-UO.SA),'finditem')
wait(WaitTime)
endif
cheklag()
##### инвизки #####
UO.FindType('0x0f0e','0x0631','backpack')
if UO.GetQuantity('finditem')<2 then
y=UO.GetQuantity('finditem')
UO.FindType('0x0f0e','0x0631',StoreRegCont) ; инвизки
UO.Grab(STR(2-y),'finditem')
wait(WaitTime)
endif
cheklag()
##### манки #####
UO.FindType('0x0f0e','0x09DF','backpack')
if UO.GetQuantity('finditem')<3 then
y=UO.GetQuantity('finditem')
UO.FindType('0x0f0e','0x09DF',StoreRegCont) ; манки
UO.Grab(STR(3-y),'finditem')
wait(WaitTime)
endif
cheklag()
UO.UnsetReceivingContainer()
end sub
###########################
##### Проверка на лаг #####
###########################
sub cheklag()
UO.DeleteJournal()
UO.Click('backpack')
repeat
wait(300)
until UO.InJournal('backpack')
end sub
###############################
##### Модуль сканирования #####
###############################
sub Scaner()
var jor, noto, ser
uo.ignore('self')
uo.deletejournal()
while not uo.dead()
for jor=0 to 9
ser = uo.journalserial(jor)
noto = uo.getnotoriety(ser)
if noto == 1 or noto == 6 and not uo.injournal("elemental") then
return 1
else
return 0
endif
next
wend
end sub
###############################
P.S. Скрипт писался на основе скриптов известных всем скриптеров.
P.P.S. Убить все равно могут, т.к. если сильно захотеть, то ... ну сами понимаете.