Люди, я уже не понимаю чего написал... помогите!!!
Поравил пост. Удалил ходилку что бы пост был поменьше.
По идее копает в шахте Минока. Если увидит злыдня или наберёт макс-вес:
- бежит в портал(портал в шахте переносит к банку в Брите)
- открывает банк,
- ищет там мешок с регами (по типу),
- ищет руну домой(по типу),
- Реколится по руне
- если сфизлит, то повторяет каст(тут проблема была\есть иногда он сфизлит но не повторяет).
Появившись у дома, он
- ищет закрытую калитку(по типу)
- если находит - открывает,
- заходит за забор - закрывает
- ищет закрытую калитку
- если находит идёт к двери в дом, иначе закрывает
- подойдя к двери в дом опять ищет закрытую дверь(по типу)
- находит - открывает
- заходит в дом
- закрывает дверь
- ищет закрытую дверь по типу
- Не находит закрывает
Открывает Сундук Крафта(CraftChest)
- открывает пак для руды
- скидывает руду
- открывает пак для "выхи"
- перекидывает "выху" из пака для руды в пак для "выхи"
Открывает Сундук Мага(MageChest)
- ищет мешок с регами
- открывает мешок, берёт реги
- реколится по найденой руне в шахту
- перезапускает скрипт.
И ..., гад, видит того, от кого убежал разгружаться. Хотя его уже нет в "поле зрения".
Это переменные
Code: Select all
################################################################
### Переменные #################################################
################################################################
###
### Для начала подготовится, положить в банк мешок(bag) и такой же в MageChest
### В мешки положить реги рекола Black Pearl, Mandrake Root, Blood Moss
### Самое главное выяснить Серийник банка!!!
### В банк положить руны к дому(одного типа!!! Тип рун в банке и в MageChest должны совпадать!!!)
### Положить в MageChest Руны в шахту(одного типа)
###
################################################################
################################################################
################################################################
var kirka, a, name, run, open, MageChest
var myXX, myYY, p
p=1
var x, y, coord
var MCave='2558,501-2578,476' ; диапозон координат пещеры
var BankBrit='1446,1702-1421,1671' ; диапозон координат Банка в Брите
var Home='1829,786-1843,800' ; диапозон координат Дома
var kalitka='0x0847' ; Тип закрытой калитки
var door='0x06A5' ; тип закрытой двери в дом
var OreBox, bag, bankbox, rune, CraftChest
var bagreg, chest
bag='0x0E76' ;тип мешка с регами
bankbox=' ' ;Id банка (для того, что бы узнать ID банка, командой ",info" -
;- на любой предмет и скопировать из полученной
информации -
;- значение C= -> 0x40156896 <-
rune='0x1F14' ; Тип руны может быть 2-х типов
; '0x1F14' и '0x1F15'
CraftChest=' ' ; Сундук Крафта с паками под руду и инготы
MageChest=' ' ; Сундуг Мага с паками и мешком-с-регами для Рекола
kirka = "0x0E85" ;Тип кирки. 2 вида может "0x0E85" и "0x0E86"
OreBox = " " ;Контейнер для руды
var text1, text2
text1="There is no ore|You have no line|That is to far away|You can't think|You have no line of|too far
away|mining in rock."
text2="You put the|You loosen some|You can't think|That is to far away|There is no ore|You have no line
of|too far away|mining in rock."
run=118 ; Код клавиши с биндом "AlwesRun"
open=121 ; Код клавиши с биндом "OpenDoor"
Функция запуска( в шахте Минока )
Code: Select all
################################################################
###Функция Main ##########################################
################################################################
sub main()
uo.exec("exec ressurect")
uo.exec("exec FindMan")
uo.exec("exec mine")
end sub
Функция копки
Code: Select all
################################################################
### Функция mine ############################################
################################################################
sub mine() ; Копание
uo.ignorereset()
walker(2571,479,1)
var pause=0
myXX=uo.getX(); запоминает место откуда начал копать
myYY=uo.getY();
var PX, PY, PZ, IX, IY
PX = UO.GetX()
PY = UO.GetY()
PZ = UO.GetZ()
while UO.Weight <= uo.str*4
For Iy=-4 to 4
For Ix=-4 to 4
uo.deletejournal()
while not UO.InJournal(text1) && UO.Weight <= uo.str*4
if p==1 then
if not uo.hidden() then
InJournal('You have hidden',60)
endif
endif
UO.WaitTargetTile(-1,Str(PX+Ix),Str(PY+Iy),Str(PZ))
uo.usetype(kirka)
InJournal(text2,0)
if uo.injournal('You loosen some') then
pause=pause+1
if pause>4 then
wait(10000)
pause=0
endif
else
pause=0
endif
endif
wait(200)
wend
next
wait(200)
next
wait(200)
wend
GoBrit()
end sub
Функция поиска злыдней и нерабочий хайд
Code: Select all
################################################################
### Функция FindMan ########################################
################################################################
Sub FindMan()
uo.ignorereset()
### ID друзей для игнора при поиске ПК и Криминал
var Charon='0x00324C05'
var Buiok='0x000C430F'
var friend3='0x001EEB63'
uo.set('finddistance','20')
var serial, a, b
b=4
uo.ignore('0x00324C05')
uo.ignore('0x000C430F')
uo.ignore('0x001EEB63')
uo.ignore('self')
repeat
uo.forget('finditem')
if UO.InJournal("You have been revealed|You can't seem") then
p=1
DelTextInJournal("You have been revealed|You can't seem")
uo.showjournal(20)
endif
if p==1 then
p=0
if not uo.hidden() then
uo.warmode(0)
uo.useskill("Hiding")
endif
else
uo.findman(b)
wait(500)
if uo.findcount()>0 || uo.injournal('attacking you') then
uo.print('ATAC')
uo.print(uo.getname('finditem')+' '+str(uo.getdistance('finditem')))
uo.forget('finditem')
uo.exec('terminate all; exec GoBrit')
endif
wait(100)
endif
if b==4 then
b=6
else
b=4
endif
until uo.dead()
end sub
Функция побега в Брит
Code: Select all
################################################################
### Функция GoBrit ############################################
################################################################
Sub GoBrit()
uo.exec('terminate mine')
uo.press(run)
wait(50)
uo.press(34)
if uo.getrun()==0 then
uo.press(run)
endif
walker(2581,480,0)
wait(50)
uo.press(35)
wait(50)
uo.press(35)
wait(50)
uo.press(run)
uo.press(35)
wait(50)
if uo.getrun()==1 then
uo.press(run)
endif
walker(1433,1693,1)
wait(5000)
coord=GetXY('self')
if ComXY(BankBrit,coord)==true then
uo.exec('terminate FindMan; exec GoHome')
else
GoBrit()
endif
end sub
Функция состоящая из функций описаных ниже.
Code: Select all
sub GoHome()
OpenChest()
wait(1000)
GotoHomeT()
move()
wait(5000)
OpenChest()
wait(2000)
uo.exec('terminate all; exec main')
end sub
Функция открытия сундука.
Code: Select all
################################################################
### Функция OpenChest #########################################
################################################################
sub OpenChest()
uo.findtype('0x0E42',-1,'ground')
if uo.findcount()>0 then
uo.useobject(MageChest)
chest=MageChest
else
uo.sayu(' bank ')
chest=bankbox
endif
wait(1000)
CheckLag()
uo.findtype(bag,-1,chest)
bagreg=uo.getserial('finditem')
uo.useobject(bagreg)
wait(1000)
CheckLag()
FindRune(chest)
end sub
Функция поиска руны в открытом сундуке.
Code: Select all
################################################################
### Функция FindRune ##########################################
################################################################
sub FindRune(b)
var idrune
uo.findtype(rune,-1,b)
idrune=uo.getserial('finditem')
Cast(idrune)
end sub
Функция рекола по найденой руне
Code: Select all
################################################################
### Функция Cast(rune) ############################################
################################################################
Sub Cast(rune)
var a
coord=GetXY('self')
if ComXY(Home,coord)==true then
a=true
else
a=false
endif
MoveReg(bagreg)
var mana
if uo.bm>0 && uo.bp>0 && uo.mr>0 then
cast:
if uo.mana < 20 then
med()
wait(2000)
goto cast
endif
mana=uo.mana
uo.cast('Recall',rune)
DelTextInJournal("fizzle")
while mana <= uo.mana
wait(200)
wend
if ComXY(MCave,coord)==false then
if ComXY(Home,coord)==a then
wait(1000)
CheckLag()
if uo.injournal("fizzle") then
MoveReg(bagreg)
goto cast
endif
wait(200)
endif
endif
else
uo.print('Stop')
uo.closeuo()
endif
wait(1000)
end sub
Функция добора регов на рекол
Code: Select all
################################################################
### Функция Move reg ##########################################
################################################################
sub MoveReg(id)
uo.print('Move Reagents')
wait(1000)
var a
dim reg[3]
reg[0] = "0x0F7A" ;Black Pearls
reg[1] = "0x0F7B" ;Blood Moss
reg[2] = "0x0F86" ;Mandrake Roots
for a=0 to 2
if uo.count(reg[a])<1 then
uo.findtype(reg[a],-1,id)
uo.moveitem('finditem',1,'backpack')
wait(500)
CheckLag()
endif
next
wait(1000)
end sub
Функция медитации.
Code: Select all
################################################################
### Функция meditation #######################################
################################################################
sub med()
uo.print('Meditation')
while uo.mana < uo.int
UO.UseSkill("Meditation")
injournal("You are at peace|You lose your concentration",60)
wend
end sub
Функция зайти домой
Code: Select all
################################################################
### Функция Goto Home #########################################
################################################################
sub GotoHomeT()
uo.set('finddistance',4)
uo.print('Go to Home')
if type(kalitka)==true then
uo.press(open)
CheckLag()
else
wait(200)
endif
walker(1831,797,0)
uo.press(open)
CheckLag()
if type(kalitka)==false then
walker(1831,798,0)
uo.press(open)
CheckLag()
endif
wait(200)
walker(1836,798,0)
if type(door)==true then
uo.press(open)
CheckLag()
else
wait(200)
endif
walker(1836,794,0)
uo.press(open)
CheckLag()
wait(500)
if type(door)==false then
uo.press(open)
CheckLag()
else
wait(200)
endif
CheckLag()
end sub
Sub type(tip)
uo.findtype(tip,-1,'ground')
if uo.findcount()>0 then
return true
else
return false
endif
end sub
Функции выкладывания руды
Code: Select all
################################################################
### Функция MoveOre ##########################################
################################################################
sub move()
uo.useobject(CraftChest)
CheckLag()
uo.print('MOVEORE()')
wait(2000)
var e
dim a[4]
a[0] = 0x19B7
a[1] = 0x19BA
a[2] = 0x19B8
a[3] = 0x19B9
uo.useobject(OreBox)
CheckLag()
for e = 0 to 3
repeat
uo.findtype(a[e],-1,'backpack')
uo.moveitem('finditem',0,OreBox)
wait(900)
CheckLag()
until uo.findcount()==0
next
wait(1000)
MoveHi()
end sub
Sub MoveHi()
var e, c
dim a[4],x[19]
a[0] = 0x19B9 ;4 and more ore
a[1] = 0x19B7 ;1 ore
a[2] = 0x19BA ;2 ore
a[3] = 0x19B8 ;3 ore
x[0] = '0x09B9' ;Acid ore
x[1] = '0x09A4' ;Cristaline ore
x[2] = '0x0085' ;Dragon ore
x[3] = '0x09D3' ;Steel ore
x[4] = '0x09E6' ;Elvin ore
x[5] = '0x09F0' ;Gorgan ore
x[6] = '0x008F' ;Send rock ore
x[7] = '0x04C2' ;Blood rock ore
x[8] = '0x09DA' ;Vulcan ore
x[9] = '0x0028' ;Obsidian ore
x[10] = '0x08AF' ;Plutonium ore
x[11] = '0x09EC' ;Blood crest ore
x[12] = '0x0455' ;Black rock ore
x[13] = '0x010F' ;Krynite ore
x[14] = '0x0BA7' ;Eldar ore
x[15] = '0x00CE' ;Valorite ore
x[16] = '0x052D' ;Mitheril ore
x[17] = '0x07D5' ;Verite ore
x[18] = '0x0060' ;Aqua ore
uo.useobject(HiOreBox)
wait(700)
CheckLag()
for e=0 to 3
for c=0 to 18
repeat
uo.findtype(a[e],x[c],OreBox)
if uo.findcount()>0 then
uo.moveitem('finditem',0,HiOreBox)
CheckLag()
wait(400)
endif
wait(100)
until uo.findcount()==0
next
next
end sub
Возрождение
Code: Select all
sub ressurect()
repeat
; ©dark_kynep
if UO.Life < 1 then
uo.exec('terminate mine')
uo.exec('terminate FindMan')
uo.useobject('self')
CheckLag()
uo.warmode(0)
UO.LClick(1243,51)
CheckLag()
wait(1000)
UO.LClick(264,305)
CheckLag()
wait(1000)
UO.LClick(177,203)
CheckLag()
wait(1000)
walker(2468,531,1)
uo.useobject('0x4001D120')
CheckLag()
walker(2466,542,0)
CheckLag()
walker(2506,542,0)
Alive()
else
wait(1000)
; UO.Print("You are Alive!!!")
endif
until uo.dead()
end sub
Действия после возрождения
Code: Select all
Sub Alive()
OpenChest()
GotoHomeT()
Heal()
OpenChest()
uo.exec('terminate all; exec main')
end sub
sub Heal()
uo.useobject('0x4023D30F')
CheckLag()
wait(500)
uo.findtype('0x0E21',-1,'0x4023D30F')
uo.moveitem('finditem',10,'backpack',10,10,0)
CheckLag()
wait(500)
repeat
uo.bandageself()
wait(5000)
until uo.life==uo.str
wait(500)
uo.useobject(CraftChest)
CheckLag()
wait(500)
uo.findtype(kirka,-1,CraftChest)
uo.moveitem('finditem',1,'backpack',100,10,0)
CheckLag()
wait(500)
end sub
Прочии функции
Code: Select all
################################################################
### Функция паузы по проверке журнала или таймера ########
################################################################
Sub InJournal(t,time)
;uo.print('EXEC INJOURNAL(T,TIME)')
var timer=uo.timer()
DelTextInJournal(t)
if time==0 then
;uo.print('TIME==0')
while not uo.InJournal(t)
wait(200)
wend
else
;uo.print('TIME<>0')
while not uo.InJournal(t) && uo.timer()<timer+time
wait(200)
wend
endif
end sub
################################################################
### Функция удаления из журнала Текста ########################
################################################################
Sub DelTextInJournal(msg) ; msg это параметр, см. выше как его передают
var nom=UO.InJournal(msg) ; ищем сообщение и в переменную его
if nom>0 then
UO.SetJournalLine(Nom - 1," ") ; подменим сообщение
DelTextInJournal(msg) ; вызов функцией самой себя, рекурсия
endif
end sub
################################################################
### Функция отклик сервера ###############################
################################################################
Sub CheckLag()
DelTextInJournal("backpack") ; вытрим ТОЛЬКО нужные нам сообщения в журнале
UO.Click('backpack') ; одиночный клик по вашему backpack
InJournal("backpack",0)
end sub
################################################################
### Функция World save now ####################################
################################################################
Sub ws()
if uo.injournal("World is saving now...") then
InJournal("World data saving",1800)
endif
end sub
#### Тут должна быть
Ходилка !!!Функция получения своих координат и функция сравнения с нужным диапозоном координат
Code: Select all
Sub GetXY(man)
var xy
x=uo.getx(man)
y=uo.gety(man)
xy=str(x)+','+str(y)
return xy
end sub
Sub ComXY(coordinate,coord)
var myx, myy, x1, y1, L, pref, minx, maxx, miny, maxy
L=len(coordinate)
uo.print('Длина строки = '+str(L))
wait(100)
x1=XY(coordinate,'-',0)
uo.print('Координаты а: '+x1)
wait(100)
y1=XY(coordinate,'-',1)
uo.print('Координаты б: '+y1)
wait(100)
minx=XY(x1,',',0)
uo.print('Координата minx: '+minx)
wait(100)
miny=XY(x1,',',1)
uo.print('Координата miny: '+miny)
wait(100)
maxx=XY(y1,',',0)
uo.print('Координата maxx: '+maxx)
wait(100)
maxy=XY(y1,',',1)
uo.print('Координата maxy: '+maxy)
wait(100)
myx=XY(coord,',',0)
uo.print('Координата myx: '+myx)
wait(1000)
myy=XY(coord,',',1)
uo.print('Координата myy: '+myy)
if minx>maxx then
x=minx
uo.print('X1=MinX='+x1)
wait(100)
minx=maxx
uo.print('MinX=MaxX='+minx)
wait(100)
maxx=x
uo.print('maxx=x1='+minx)
wait(100)
endif
if miny>maxy then
y=miny
uo.print('Y1=MinY='+y)
wait(100)
miny=maxy
uo.print('MinY=MaxY='+miny)
wait(100)
maxy=y
uo.print('maxy=y1='+maxy)
wait(100)
endif
wait(100)
if myx>minx && myx<maxx && myy>miny && myy<maxy then
return true
else
return false
endif
end sub
Sub XY(con,d,c)
var pref, L, z
L=len(con)
for pref=0 to L
if con[pref]==d then
if c==0 then
z=left(con,pref)
endif
wait(50)
if c==1 then
z=right(con,L-pref-1)
endif
endif
next
return z
end sub